0byt3m1n1
Path:
C:
/
Program Files
/
RStudio
/
resources
/
app
/
www
/
js
/
panmirror
/
[
Home
]
File: panmirror.js.map
{"version":3,"file":"panmirror.js","sources":["../../../packages/editor-types/src/link.ts","../../../packages/editor-types/src/list.ts","../../../packages/editor-types/src/dialogs.ts","../../../packages/editor-types/src/outline.ts","../../../packages/editor/src/api/emojis-all.ts","../../../packages/editor/src/api/emoji.ts","../../../packages/editor/src/api/ui-types.ts","../../../packages/editor/src/api/format.ts","../../../packages/editor/src/api/command-types.ts","../../../packages/editor/src/api/basekeys-types.ts","../../../packages/editor/src/api/navigation-types.ts","../../../packages/editor/src/api/events.ts","../../../packages/editor/src/api/event-types.ts","../../../node_modules/prosemirror-model/node_modules/orderedmap/dist/index.js","../../../node_modules/prosemirror-model/dist/index.js","../../../node_modules/prosemirror-transform/dist/index.js","../../../node_modules/prosemirror-state/dist/index.js","../../../node_modules/prosemirror-view/dist/index.js","../../../node_modules/w3c-keyname/index.es.js","../../../node_modules/prosemirror-keymap/dist/index.js","../../../node_modules/prosemirror-tables/dist/index.cjs","../../../node_modules/prosemirror-utils/dist/index.js","../../../packages/editor/src/api/node-traverse.ts","../../../packages/editor/src/api/node.ts","../../../node_modules/js-yaml/dist/js-yaml.mjs","../../../packages/editor/src/api/log.ts","../../../packages/editor/src/api/yaml.ts","../../../packages/editor/src/api/presentation.ts","../../../node_modules/prosemirror-gapcursor/dist/index.js","../../../packages/editor/src/api/cursor.ts","../../../node_modules/vscode-languageserver-types/lib/esm/main.js","../../../node_modules/zenscroll/zenscroll.js","../../../packages/core/src/promise.ts","../../../packages/core/src/wordbreak.ts","../../../packages/core/src/text.ts","../../../packages/core/src/strings.ts","../../../packages/core/src/uri.ts","../../../packages/core/src/image.ts","../../../node_modules/clone/clone.js","../../../node_modules/defaults/index.js","../../../node_modules/wcwidth/combining.js","../../../node_modules/wcwidth/index.js","../../../node_modules/stylis/src/Enum.js","../../../node_modules/stylis/src/Utility.js","../../../node_modules/stylis/src/Tokenizer.js","../../../node_modules/stylis/src/Parser.js","../../../node_modules/stylis/src/Serializer.js","../../../node_modules/stylis/src/Middleware.js","../../../packages/core/node_modules/markdown-it/lib/common/entities.js","../../../node_modules/uc.micro/categories/P/regex.js","../../../node_modules/mdurl/encode.js","../../../node_modules/mdurl/decode.js","../../../node_modules/mdurl/format.js","../../../node_modules/mdurl/parse.js","../../../node_modules/mdurl/index.js","../../../node_modules/uc.micro/properties/Any/regex.js","../../../node_modules/uc.micro/categories/Cc/regex.js","../../../node_modules/uc.micro/categories/Cf/regex.js","../../../node_modules/uc.micro/categories/Z/regex.js","../../../node_modules/uc.micro/index.js","../../../packages/core/node_modules/markdown-it/lib/common/utils.js","../../../packages/editor/src/api/scroll.ts","../../../packages/editor/src/api/text.ts","../../../packages/editor/src/api/mark.ts","../../../packages/editor/src/api/list.ts","../../../node_modules/prosemirror-commands/dist/index.js","../../../node_modules/prosemirror-schema-list/dist/index.js","../../../packages/editor/src/api/extension.ts","../../../packages/editor/src/api/pandoc_attr.ts","../../../node_modules/prosemirror-changeset/dist/index.js","../../../packages/editor/src/api/fragment.ts","../../../packages/editor/src/api/slice.ts","../../../packages/editor/src/api/transaction.ts","../../../packages/editor/src/api/selection.ts","../../../packages/editor/src/api/paragraph.ts","../../../packages/editor/src/api/trailing_p.ts","../../../packages/editor/src/api/command.ts","../../../packages/editor/src/api/util.ts","../../../packages/editor/src/api/rmd.ts","../../../packages/editor/src/api/pandoc_id.ts","../../../packages/editor/src/api/raw.ts","../../../packages/editor/src/api/xref.ts","../../../packages/editor/src/api/navigation.ts","../../../packages/editor/src/api/codeview.ts","../../../node_modules/prosemirror-inputrules/dist/index.js","../../../node_modules/react/cjs/react.production.min.js","../../../node_modules/react/index.js","../../../node_modules/scheduler/cjs/scheduler.production.min.js","../../../node_modules/scheduler/index.js","../../../node_modules/react-dom/cjs/react-dom.production.min.js","../../../node_modules/react-dom/index.js","../../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../../node_modules/prop-types/factoryWithThrowingShims.js","../../../node_modules/prop-types/index.js","../../../node_modules/create-react-context/lib/index.js","../../../node_modules/unstated/lib/unstated.es.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/global.js","../../../node_modules/@babel/runtime/helpers/esm/extends.js","../../../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../../../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../../../node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../../../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../../../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../../../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../../../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../../../node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","../../../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../../../node_modules/@emotion/react/dist/emotion-element-6a883da9.browser.esm.js","../../../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../../../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../../../node_modules/prosemirror-dev-tools/dist/esm/theme.js","../../../node_modules/prosemirror-dev-tools/dist/esm/dev-tools-collapsed.js","../../../node_modules/lodash._getnative/index.js","../../../node_modules/react-dock/node_modules/lodash.debounce/index.js","../../../node_modules/react-dock/lib/autoprefix.js","../../../node_modules/react-dock/lib/Dock.js","../../../node_modules/react-dock/lib/index.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/tabs.js","../../../node_modules/@babel/runtime/helpers/typeof.js","../../../node_modules/@babel/runtime/helpers/regeneratorRuntime.js","../../../node_modules/@babel/runtime/regenerator/index.js","../../../node_modules/html/lib/html.js","../../../node_modules/prosemirror-dev-tools/node_modules/nanoid/index.browser.js","../../../node_modules/prosemirror-dev-tools/dist/esm/utils/subscribe-on-updates.js","../../../node_modules/prosemirror-dev-tools/dist/esm/utils/find-node.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/get-editor-state.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/editor.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/state-tab.js","../../../node_modules/prosemirror-dev-tools/dist/esm/utils/format-selection-object.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/split-view.js","../../../node_modules/babel-runtime/helpers/objectWithoutProperties.js","../../../node_modules/babel-runtime/helpers/classCallCheck.js","../../../node_modules/core-js/library/modules/_to-integer.js","../../../node_modules/core-js/library/modules/_defined.js","../../../node_modules/core-js/library/modules/_string-at.js","../../../node_modules/core-js/library/modules/_library.js","../../../node_modules/core-js/library/modules/_global.js","../../../node_modules/core-js/library/modules/_core.js","../../../node_modules/core-js/library/modules/_a-function.js","../../../node_modules/core-js/library/modules/_ctx.js","../../../node_modules/core-js/library/modules/_is-object.js","../../../node_modules/core-js/library/modules/_an-object.js","../../../node_modules/core-js/library/modules/_fails.js","../../../node_modules/core-js/library/modules/_descriptors.js","../../../node_modules/core-js/library/modules/_dom-create.js","../../../node_modules/core-js/library/modules/_ie8-dom-define.js","../../../node_modules/core-js/library/modules/_to-primitive.js","../../../node_modules/core-js/library/modules/_object-dp.js","../../../node_modules/core-js/library/modules/_property-desc.js","../../../node_modules/core-js/library/modules/_hide.js","../../../node_modules/core-js/library/modules/_has.js","../../../node_modules/core-js/library/modules/_export.js","../../../node_modules/core-js/library/modules/_redefine.js","../../../node_modules/core-js/library/modules/_iterators.js","../../../node_modules/core-js/library/modules/_cof.js","../../../node_modules/core-js/library/modules/_iobject.js","../../../node_modules/core-js/library/modules/_to-iobject.js","../../../node_modules/core-js/library/modules/_to-length.js","../../../node_modules/core-js/library/modules/_to-absolute-index.js","../../../node_modules/core-js/library/modules/_array-includes.js","../../../node_modules/core-js/library/modules/_shared.js","../../../node_modules/core-js/library/modules/_uid.js","../../../node_modules/core-js/library/modules/_shared-key.js","../../../node_modules/core-js/library/modules/_object-keys-internal.js","../../../node_modules/core-js/library/modules/_enum-bug-keys.js","../../../node_modules/core-js/library/modules/_object-keys.js","../../../node_modules/core-js/library/modules/_object-dps.js","../../../node_modules/core-js/library/modules/_html.js","../../../node_modules/core-js/library/modules/_object-create.js","../../../node_modules/core-js/library/modules/_wks.js","../../../node_modules/core-js/library/modules/_set-to-string-tag.js","../../../node_modules/core-js/library/modules/_iter-create.js","../../../node_modules/core-js/library/modules/_to-object.js","../../../node_modules/core-js/library/modules/_object-gpo.js","../../../node_modules/core-js/library/modules/_iter-define.js","../../../node_modules/core-js/library/modules/es6.string.iterator.js","../../../node_modules/core-js/library/modules/_iter-step.js","../../../node_modules/core-js/library/modules/es6.array.iterator.js","../../../node_modules/core-js/library/modules/web.dom.iterable.js","../../../node_modules/core-js/library/modules/_wks-ext.js","../../../node_modules/core-js/library/fn/symbol/iterator.js","../../../node_modules/babel-runtime/core-js/symbol/iterator.js","../../../node_modules/core-js/library/modules/_meta.js","../../../node_modules/core-js/library/modules/_wks-define.js","../../../node_modules/core-js/library/modules/_object-gops.js","../../../node_modules/core-js/library/modules/_object-pie.js","../../../node_modules/core-js/library/modules/_enum-keys.js","../../../node_modules/core-js/library/modules/_is-array.js","../../../node_modules/core-js/library/modules/_object-gopn.js","../../../node_modules/core-js/library/modules/_object-gopn-ext.js","../../../node_modules/core-js/library/modules/_object-gopd.js","../../../node_modules/core-js/library/modules/es6.symbol.js","../../../node_modules/core-js/library/modules/es7.symbol.async-iterator.js","../../../node_modules/core-js/library/modules/es7.symbol.observable.js","../../../node_modules/core-js/library/fn/symbol/index.js","../../../node_modules/babel-runtime/core-js/symbol.js","../../../node_modules/babel-runtime/helpers/typeof.js","../../../node_modules/babel-runtime/helpers/possibleConstructorReturn.js","../../../node_modules/core-js/library/modules/_set-proto.js","../../../node_modules/core-js/library/modules/es6.object.set-prototype-of.js","../../../node_modules/core-js/library/fn/object/set-prototype-of.js","../../../node_modules/babel-runtime/core-js/object/set-prototype-of.js","../../../node_modules/core-js/library/modules/es6.object.create.js","../../../node_modules/core-js/library/fn/object/create.js","../../../node_modules/babel-runtime/core-js/object/create.js","../../../node_modules/babel-runtime/helpers/inherits.js","../../../node_modules/core-js/library/modules/_object-assign.js","../../../node_modules/core-js/library/modules/es6.object.assign.js","../../../node_modules/core-js/library/fn/object/assign.js","../../../node_modules/babel-runtime/core-js/object/assign.js","../../../node_modules/babel-runtime/helpers/extends.js","../../../node_modules/core-js/library/modules/_object-sap.js","../../../node_modules/core-js/library/modules/es6.object.keys.js","../../../node_modules/core-js/library/fn/object/keys.js","../../../node_modules/babel-runtime/core-js/object/keys.js","../../../node_modules/react-json-tree/lib/objType.js","../../../node_modules/core-js/library/modules/es6.object.get-own-property-names.js","../../../node_modules/core-js/library/fn/object/get-own-property-names.js","../../../node_modules/babel-runtime/core-js/object/get-own-property-names.js","../../../node_modules/react-json-tree/lib/JSONArrow.js","../../../node_modules/core-js/library/modules/_classof.js","../../../node_modules/core-js/library/modules/core.get-iterator-method.js","../../../node_modules/core-js/library/modules/core.get-iterator.js","../../../node_modules/core-js/library/fn/get-iterator.js","../../../node_modules/babel-runtime/core-js/get-iterator.js","../../../node_modules/react-json-tree/lib/getCollectionEntries.js","../../../node_modules/react-json-tree/lib/ItemRange.js","../../../node_modules/react-json-tree/lib/JSONNestedNode.js","../../../node_modules/react-json-tree/lib/JSONObjectNode.js","../../../node_modules/react-json-tree/lib/JSONArrayNode.js","../../../node_modules/core-js/library/modules/_is-integer.js","../../../node_modules/core-js/library/modules/es6.number.is-safe-integer.js","../../../node_modules/core-js/library/fn/number/is-safe-integer.js","../../../node_modules/babel-runtime/core-js/number/is-safe-integer.js","../../../node_modules/react-json-tree/lib/JSONIterableNode.js","../../../node_modules/react-json-tree/lib/JSONValueNode.js","../../../node_modules/react-json-tree/lib/JSONNode.js","../../../node_modules/core-js/library/modules/core.is-iterable.js","../../../node_modules/core-js/library/fn/is-iterable.js","../../../node_modules/babel-runtime/core-js/is-iterable.js","../../../node_modules/babel-runtime/helpers/slicedToArray.js","../../../node_modules/lodash.curry/index.js","../../../node_modules/base16/src/threezerotwofour.js","../../../node_modules/base16/src/apathy.js","../../../node_modules/base16/src/ashes.js","../../../node_modules/base16/src/atelier-dune.js","../../../node_modules/base16/src/atelier-forest.js","../../../node_modules/base16/src/atelier-heath.js","../../../node_modules/base16/src/atelier-lakeside.js","../../../node_modules/base16/src/atelier-seaside.js","../../../node_modules/base16/src/bespin.js","../../../node_modules/base16/src/brewer.js","../../../node_modules/base16/src/bright.js","../../../node_modules/base16/src/chalk.js","../../../node_modules/base16/src/codeschool.js","../../../node_modules/base16/src/colors.js","../../../node_modules/base16/src/default.js","../../../node_modules/base16/src/eighties.js","../../../node_modules/base16/src/embers.js","../../../node_modules/base16/src/flat.js","../../../node_modules/base16/src/google.js","../../../node_modules/base16/src/grayscale.js","../../../node_modules/base16/src/greenscreen.js","../../../node_modules/base16/src/harmonic.js","../../../node_modules/base16/src/hopscotch.js","../../../node_modules/base16/src/isotope.js","../../../node_modules/base16/src/marrakesh.js","../../../node_modules/base16/src/mocha.js","../../../node_modules/base16/src/monokai.js","../../../node_modules/base16/src/ocean.js","../../../node_modules/base16/src/paraiso.js","../../../node_modules/base16/src/pop.js","../../../node_modules/base16/src/railscasts.js","../../../node_modules/base16/src/shapeshifter.js","../../../node_modules/base16/src/solarized.js","../../../node_modules/base16/src/summerfruit.js","../../../node_modules/base16/src/tomorrow.js","../../../node_modules/base16/src/tube.js","../../../node_modules/base16/src/twilight.js","../../../node_modules/pure-color/util/clamp.js","../../../node_modules/pure-color/convert/rgb2hex.js","../../../node_modules/pure-color/parse/extractComponents.js","../../../node_modules/pure-color/parse/hsl.js","../../../node_modules/pure-color/parse/hex.js","../../../node_modules/pure-color/parse/rgb.js","../../../node_modules/pure-color/convert/hsl2rgb.js","../../../node_modules/pure-color/parse/index.js","../../../node_modules/lodash.flow/index.js","../../../node_modules/react-base16-styling/lib/colorConverters.js","../../../node_modules/react-base16-styling/lib/index.js","../../../node_modules/react-json-tree/lib/themes/solarized.js","../../../node_modules/react-json-tree/lib/createStylingFromTheme.js","../../../node_modules/react-json-tree/lib/index.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/json-tree.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/heading.js","../../../node_modules/prosemirror-dev-tools/dist/esm/tabs/state.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/info-panel.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/list.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/json-diff.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/highlighter.js","../../../node_modules/prosemirror-dev-tools/dist/esm/tabs/history.js","../../../node_modules/prosemirror-dev-tools/dist/esm/tabs/schema.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/plugins-tab.js","../../../node_modules/prosemirror-dev-tools/dist/esm/tabs/plugins.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/structure-tab.js","../../../node_modules/prosemirror-dev-tools/dist/esm/tabs/structure.js","../../../node_modules/prosemirror-dev-tools/dist/esm/tabs/snapshots.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/css-reset.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/node-picker/index.js","../../../node_modules/prosemirror-dev-tools/dist/esm/components/save-snapshot-button.js","../../../node_modules/prosemirror-dev-tools/dist/esm/dev-tools-expanded.js","../../../node_modules/prosemirror-dev-tools/dist/esm/dev-tools.js","../../../node_modules/prosemirror-dev-tools/dist/esm/index.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/v1.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/v35.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/md5.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/v3.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/v4.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/sha1.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/v5.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/nil.js","../../../node_modules/jayson/node_modules/uuid/dist/esm-browser/version.js","../../../node_modules/jayson/lib/generateRequest.js","../../../node_modules/jayson/lib/client/browser/index.js","../../../packages/core-browser/src/browser.ts","../../../packages/editor/src/api/doi.ts","../../../node_modules/pinyin/data/dict-zi-web.js","../../../node_modules/object-assign/index.js","../../../node_modules/pinyin/data/surname.js","../../../node_modules/pinyin/data/compound_surname.js","../../../node_modules/pinyin/lib/phonetic-symbol.js","../../../node_modules/pinyin/lib/util.js","../../../node_modules/pinyin/lib/pinyin.js","../../../node_modules/pinyin/lib/web-pinyin.js","../../../node_modules/transliteration/dist/browser/bundle.esm.min.js","../../../packages/editor/src/api/cite.ts","../../../packages/editor/src/api/ui.ts","../../../packages/editor/src/api/quote.ts","../../../packages/editor/src/api/math.ts","../../../packages/editor/src/api/code.ts","../../../packages/editor/src/api/clipboard.ts","../../../packages/editor/src/api/link.ts","../../../packages/editor/src/api/pandoc.ts","../../../packages/editor/src/api/pandoc_capabilities.ts","../../../packages/editor/src/api/html.ts","../../../packages/editor/src/api/object.ts","../../../packages/editor/src/api/pandoc_format.ts","../../../packages/editor/src/api/platform.ts","../../../packages/editor/src/api/basekeys.ts","../../../packages/editor/src/api/outline.ts","../../../packages/editor/src/api/dom.ts","../../../packages/editor/src/api/location.ts","../../../packages/editor/src/api/fixup.ts","../../../packages/editor/src/api/css.ts","../../../packages/editor/src/api/image.ts","../../../node_modules/diff-match-patch/index.js","../../../packages/editor/src/api/change.ts","../../../packages/editor/src/api/input_rule.ts","../../../node_modules/@textlint/ast-node-types/module/index.js","../../../node_modules/boundary/lib/index.js","../../../node_modules/structured-source/lib/structured-source.js","../../../node_modules/structured-source/lib/index.js","../../../node_modules/sentence-splitter/lib/parser/SourceCode.js","../../../node_modules/sentence-splitter/lib/parser/NewLineParser.js","../../../node_modules/sentence-splitter/lib/parser/SpaceParser.js","../../../node_modules/sentence-splitter/lib/parser/SeparatorParser.js","../../../node_modules/sentence-splitter/lib/parser/AnyValueParser.js","../../../node_modules/sentence-splitter/lib/parser/lang/English.js","../../../node_modules/sentence-splitter/lib/parser/AbbrMarker.js","../../../node_modules/sentence-splitter/lib/logger.js","../../../node_modules/object_values/index.js","../../../node_modules/sentence-splitter/lib/parser/PairMaker.js","../../../node_modules/sentence-splitter/lib/sentence-splitter.js","../../../packages/editor/src/api/wrap.ts","../../../packages/editor/src/nodes/yaml_metadata/yaml_metadata-title.ts","../../../packages/editor/src/behaviors/outline.ts","../../../packages/editor/src/behaviors/find.ts","../../../packages/editor/src/api/completion.ts","../../../node_modules/thenby/thenBy.module.js","../../../packages/editor/src/api/omni_insert.ts","../../../packages/editor/src/api/placeholder.ts","../../../packages/editor/src/behaviors/omni_insert/omni_insert-completion.tsx","../../../packages/editor/src/behaviors/omni_insert/omni_insert.ts","../../../node_modules/react-dom/client.js","../../../packages/editor/src/api/widgets/popup.tsx","../../../packages/editor/src/behaviors/completion/completion-popup.tsx","../../../packages/editor/src/behaviors/completion/completion.ts","../../../packages/editor/src/behaviors/spelling/spelling.ts","../../../packages/editor/src/behaviors/spelling/spelling-interactive.ts","../../../packages/editor/src/behaviors/spelling/spelling-realtime.ts","../../../node_modules/semver/internal/constants.js","../../../node_modules/semver/internal/debug.js","../../../node_modules/semver/internal/re.js","../../../node_modules/semver/internal/parse-options.js","../../../node_modules/semver/internal/identifiers.js","../../../node_modules/semver/classes/semver.js","../../../node_modules/semver/functions/parse.js","../../../node_modules/semver/functions/valid.js","../../../node_modules/semver/functions/clean.js","../../../node_modules/semver/functions/inc.js","../../../node_modules/semver/functions/compare.js","../../../node_modules/semver/functions/eq.js","../../../node_modules/semver/functions/diff.js","../../../node_modules/semver/functions/major.js","../../../node_modules/semver/functions/minor.js","../../../node_modules/semver/functions/patch.js","../../../node_modules/semver/functions/prerelease.js","../../../node_modules/semver/functions/rcompare.js","../../../node_modules/semver/functions/compare-loose.js","../../../node_modules/semver/functions/compare-build.js","../../../node_modules/semver/functions/sort.js","../../../node_modules/semver/functions/rsort.js","../../../node_modules/semver/functions/gt.js","../../../node_modules/semver/functions/lt.js","../../../node_modules/semver/functions/neq.js","../../../node_modules/semver/functions/gte.js","../../../node_modules/semver/functions/lte.js","../../../node_modules/semver/functions/cmp.js","../../../node_modules/semver/functions/coerce.js","../../../node_modules/yallist/iterator.js","../../../node_modules/yallist/yallist.js","../../../node_modules/lru-cache/index.js","../../../node_modules/semver/classes/range.js","../../../node_modules/semver/classes/comparator.js","../../../node_modules/semver/functions/satisfies.js","../../../node_modules/semver/ranges/to-comparators.js","../../../node_modules/semver/ranges/max-satisfying.js","../../../node_modules/semver/ranges/min-satisfying.js","../../../node_modules/semver/ranges/min-version.js","../../../node_modules/semver/ranges/valid.js","../../../node_modules/semver/ranges/outside.js","../../../node_modules/semver/ranges/gtr.js","../../../node_modules/semver/ranges/ltr.js","../../../node_modules/semver/ranges/intersects.js","../../../node_modules/semver/ranges/simplify.js","../../../node_modules/semver/ranges/subset.js","../../../node_modules/semver/index.js","../../../packages/editor/src/api/base64.ts","../../../packages/editor/src/api/pandoc_capsule.ts","../../../packages/editor/src/api/heading.ts","../../../packages/editor/src/pandoc/pandoc_to_prosemirror.ts","../../../packages/editor/src/pandoc/pandoc_from_prosemirror.ts","../../../packages/editor/src/pandoc/pandoc_converter.ts","../../../packages/editor/src/editor/images/copy.png","../../../packages/editor/src/editor/images/properties.png","../../../packages/editor/src/editor/images/properties_deco.png","../../../packages/editor/src/editor/images/properties_deco_dark.png","../../../packages/editor/src/editor/images/removelink.png","../../../packages/editor/src/editor/images/runchunk.png","../../../packages/editor/src/editor/images/runprevchunks.png","../../../packages/editor/src/editor/images/search.png","../../../packages/editor/src/editor/images/search_progress.gif","../../../packages/editor/src/editor/images/omni_insert/generic.png","../../../packages/editor/src/editor/images/omni_insert/heading1.png","../../../packages/editor/src/editor/images/omni_insert/heading1_dark.png","../../../packages/editor/src/editor/images/omni_insert/heading2.png","../../../packages/editor/src/editor/images/omni_insert/heading2_dark.png","../../../packages/editor/src/editor/images/omni_insert/heading3.png","../../../packages/editor/src/editor/images/omni_insert/heading3_dark.png","../../../packages/editor/src/editor/images/omni_insert/heading4.png","../../../packages/editor/src/editor/images/omni_insert/heading4_dark.png","../../../packages/editor/src/editor/images/omni_insert/bullet_list.png","../../../packages/editor/src/editor/images/omni_insert/bullet_list_dark.png","../../../packages/editor/src/editor/images/omni_insert/ordered_list.png","../../../packages/editor/src/editor/images/omni_insert/ordered_list_dark.png","../../../packages/editor/src/editor/images/omni_insert/blockquote.png","../../../packages/editor/src/editor/images/omni_insert/blockquote_dark.png","../../../packages/editor/src/editor/images/omni_insert/math_inline.png","../../../packages/editor/src/editor/images/omni_insert/math_inline_dark.png","../../../packages/editor/src/editor/images/omni_insert/math_display.png","../../../packages/editor/src/editor/images/omni_insert/math_display_dark.png","../../../packages/editor/src/editor/images/omni_insert/html_block.png","../../../packages/editor/src/editor/images/omni_insert/html_block_dark.png","../../../packages/editor/src/editor/images/omni_insert/line_block.png","../../../packages/editor/src/editor/images/omni_insert/line_block_dark.png","../../../packages/editor/src/editor/images/omni_insert/emoji.png","../../../packages/editor/src/editor/images/omni_insert/emoji_dark.png","../../../packages/editor/src/editor/images/omni_insert/comment.png","../../../packages/editor/src/editor/images/omni_insert/comment_dark.png","../../../packages/editor/src/editor/images/omni_insert/div.png","../../../packages/editor/src/editor/images/omni_insert/div_dark.png","../../../packages/editor/src/editor/images/omni_insert/code_block.png","../../../packages/editor/src/editor/images/omni_insert/code_block_dark.png","../../../packages/editor/src/editor/images/omni_insert/footnote.png","../../../packages/editor/src/editor/images/omni_insert/footnote_dark.png","../../../packages/editor/src/editor/images/omni_insert/citation.png","../../../packages/editor/src/editor/images/omni_insert/citation_dark.png","../../../packages/editor/src/editor/images/omni_insert/cross_reference.png","../../../packages/editor/src/editor/images/omni_insert/cross_reference_dark.png","../../../packages/editor/src/editor/images/omni_insert/symbol.png","../../../packages/editor/src/editor/images/omni_insert/symbol_dark.png","../../../packages/editor/src/editor/images/omni_insert/table.png","../../../packages/editor/src/editor/images/omni_insert/table_dark.png","../../../packages/editor/src/editor/images/omni_insert/definition_list.png","../../../packages/editor/src/editor/images/omni_insert/definition_list_dark.png","../../../packages/editor/src/editor/images/omni_insert/horizontal_rule.png","../../../packages/editor/src/editor/images/omni_insert/horizontal_rule_dark.png","../../../packages/editor/src/editor/images/omni_insert/image.png","../../../packages/editor/src/editor/images/omni_insert/image_dark.png","../../../packages/editor/src/editor/images/omni_insert/link.png","../../../packages/editor/src/editor/images/omni_insert/link_dark.png","../../../packages/editor/src/editor/images/omni_insert/paragraph.png","../../../packages/editor/src/editor/images/omni_insert/paragraph_dark.png","../../../packages/editor/src/editor/images/omni_insert/raw_block.png","../../../packages/editor/src/editor/images/omni_insert/raw_block_dark.png","../../../packages/editor/src/editor/images/omni_insert/raw_inline.png","../../../packages/editor/src/editor/images/omni_insert/raw_inline_dark.png","../../../packages/editor/src/editor/images/omni_insert/tex_block.png","../../../packages/editor/src/editor/images/omni_insert/tex_block_dark.png","../../../packages/editor/src/editor/images/omni_insert/yaml_block.png","../../../packages/editor/src/editor/images/omni_insert/yaml_block_dark.png","../../../packages/editor/src/editor/images/omni_insert/python_chunk.png","../../../packages/editor/src/editor/images/omni_insert/sql_chunk.png","../../../packages/editor/src/editor/images/omni_insert/d3_chunk.png","../../../packages/editor/src/editor/images/omni_insert/stan_chunk.png","../../../packages/editor/src/editor/images/omni_insert/bash_chunk.png","../../../packages/editor/src/editor/images/omni_insert/bash_chunk_dark.png","../../../packages/editor/src/editor/images/omni_insert/r_chunk.png","../../../packages/editor/src/editor/images/omni_insert/r_chunk_dark.png","../../../packages/editor/src/editor/images/omni_insert/rcpp_chunk.png","../../../packages/editor/src/editor/images/omni_insert/rcpp_chunk_dark.png","../../../packages/editor/src/editor/images/omni_insert/tabset.png","../../../packages/editor/src/editor/images/omni_insert/tabset_dark.png","../../../packages/editor/src/editor/images/omni_insert/slide_columns.png","../../../packages/editor/src/editor/images/omni_insert/slide_columns_dark.png","../../../packages/editor/src/editor/images/omni_insert/slide_pause.png","../../../packages/editor/src/editor/images/omni_insert/slide_pause_dark.png","../../../packages/editor/src/editor/images/omni_insert/slide_notes.png","../../../packages/editor/src/editor/images/omni_insert/slide_notes_dark.png","../../../packages/editor/src/editor/images/citations/article.png","../../../packages/editor/src/editor/images/citations/article_dark.png","../../../packages/editor/src/editor/images/citations/book.png","../../../packages/editor/src/editor/images/citations/book_dark.png","../../../packages/editor/src/editor/images/citations/broadcast.png","../../../packages/editor/src/editor/images/citations/broadcast_dark.png","../../../packages/editor/src/editor/images/citations/data.png","../../../packages/editor/src/editor/images/citations/data_dark.png","../../../packages/editor/src/editor/images/citations/entry.png","../../../packages/editor/src/editor/images/citations/entry_dark.png","../../../packages/editor/src/editor/images/citations/image.png","../../../packages/editor/src/editor/images/citations/image_dark.png","../../../packages/editor/src/editor/images/citations/legal.png","../../../packages/editor/src/editor/images/citations/legal_dark.png","../../../packages/editor/src/editor/images/citations/map.png","../../../packages/editor/src/editor/images/citations/map_dark.png","../../../packages/editor/src/editor/images/citations/movie.png","../../../packages/editor/src/editor/images/citations/movie_dark.png","../../../packages/editor/src/editor/images/citations/other.png","../../../packages/editor/src/editor/images/citations/other_dark.png","../../../packages/editor/src/editor/images/citations/song.png","../../../packages/editor/src/editor/images/citations/song_dark.png","../../../packages/editor/src/editor/images/citations/web.png","../../../packages/editor/src/editor/images/citations/web_dark.png","../../../packages/editor/src/editor/images/citations/zotero-overlay.png","../../../packages/editor/src/editor/images/citations/insert/local-sources.png","../../../packages/editor/src/editor/images/citations/insert/packages.png","../../../packages/editor/src/editor/images/citations/insert/bibliography.png","../../../packages/editor/src/editor/images/citations/insert/bibliography-folder.png","../../../packages/editor/src/editor/images/citations/insert/zotero-root.png","../../../packages/editor/src/editor/images/citations/insert/zotero-library.png","../../../packages/editor/src/editor/images/citations/insert/zotero-collection.png","../../../packages/editor/src/editor/images/citations/insert/doi.png","../../../packages/editor/src/editor/images/citations/insert/crossref.png","../../../packages/editor/src/editor/images/citations/insert/pubmed.png","../../../packages/editor/src/editor/images/citations/insert/datacite.png","../../../packages/editor/src/editor/images/xref/equation.png","../../../packages/editor/src/editor/images/xref/equation_dark.png","../../../packages/editor/src/editor/images/xref/section.png","../../../packages/editor/src/editor/images/xref/section_dark.png","../../../packages/editor/src/editor/images/xref/listing.png","../../../packages/editor/src/editor/images/xref/table.png","../../../packages/editor/src/editor/images/xref/table_dark.png","../../../packages/editor/src/editor/images/xref/figure.png","../../../packages/editor/src/editor/images/xref/figure_dark.png","../../../packages/editor/src/editor/images/xref/theorem.png","../../../packages/editor/src/editor/images/xref/theorem_dark.png","../../../packages/editor/src/editor/images/xref/insert/all.png","../../../packages/editor/src/editor/images/xref/insert/equation.png","../../../packages/editor/src/editor/images/xref/insert/section.png","../../../packages/editor/src/editor/images/xref/insert/listing.png","../../../packages/editor/src/editor/images/xref/insert/table.png","../../../packages/editor/src/editor/images/xref/insert/figure.png","../../../packages/editor/src/editor/images/xref/insert/theorem.png","../../../packages/editor/src/editor/images/widgets/tag-delete.png","../../../packages/editor/src/editor/images/widgets/tag-edit.png","../../../packages/editor/src/editor/editor-images.ts","../../../packages/editor/src/api/table.ts","../../../packages/editor/src/editor/editor-menus.ts","../../../packages/editor/src/editor/editor-schema.ts","../../../packages/editor/src/nodes/text.ts","../../../packages/editor/src/nodes/paragraph.ts","../../../packages/editor/src/nodes/heading.ts","../../../packages/editor/src/nodes/blockquote.ts","../../../packages/editor/src/nodes/code_block.ts","../../../packages/editor/src/nodes/div/div-callout.ts","../../../packages/editor/src/nodes/div/div-tabset.ts","../../../packages/editor/src/nodes/div/div.ts","../../../packages/editor/src/nodes/list/list-commands.ts","../../../packages/editor/src/nodes/list/list-checked.ts","../../../packages/editor/src/nodes/list/list-indent.ts","../../../packages/editor/src/nodes/list/list-pandoc.ts","../../../packages/editor/src/nodes/list/list.ts","../../../packages/editor/src/nodes/image/image-util.ts","../../../packages/editor/src/nodes/image/image-dialog.ts","../../../packages/editor/src/api/decoration.ts","../../../packages/editor/src/nodes/image/image-textsel.ts","../../../packages/editor/src/api/resource.ts","../../../packages/editor/src/api/widgets/widgets.ts","../../../packages/editor/src/nodes/image/image-resize.ts","../../../packages/editor/src/nodes/image/image-view.ts","../../../packages/editor/src/nodes/image/figure-keys.ts","../../../packages/editor/src/nodes/image/figure.ts","../../../packages/editor/src/nodes/image/image-events.ts","../../../packages/editor/src/nodes/image/image.ts","../../../packages/editor/src/nodes/hr.ts","../../../packages/editor/src/nodes/hard_break.ts","../../../packages/editor/src/nodes/null.ts","../../../packages/editor/src/marks/em.ts","../../../packages/editor/src/marks/strong.ts","../../../packages/editor/src/marks/code.ts","../../../packages/editor/src/api/shortcode.ts","../../../packages/editor/src/marks/link/link-command.ts","../../../packages/editor/src/marks/link/link-input.ts","../../../packages/editor/src/marks/link/link-headings.ts","../../../node_modules/clipboard/dist/clipboard.js","../../../node_modules/tlite/tlite.js","../../../packages/editor/src/api/widgets/tooltip.ts","../../../packages/editor/src/api/widgets/button.tsx","../../../packages/editor/src/api/widgets/react.ts","../../../packages/editor/src/api/widgets/decoration.ts","../../../packages/editor/src/api/text-popup.ts","../../../packages/editor/src/api/url.ts","../../../packages/editor/src/marks/link/link-popup.tsx","../../../packages/editor/src/marks/link/link.ts","../../../node_modules/rope-sequence/dist/index.es.js","../../../node_modules/prosemirror-history/dist/index.js","../../../packages/editor/src/behaviors/history.ts","../../../packages/editor/src/behaviors/select_all.ts","../../../node_modules/prosemirror-dropcursor/dist/index.js","../../../packages/editor/src/behaviors/cursor.ts","../../../packages/editor/src/api/formatting.ts","../../../packages/editor/src/behaviors/clear_formatting.ts","../../../packages/editor/src/behaviors/smarty.ts","../../../packages/editor/src/behaviors/attr_duplicate_id.ts","../../../packages/editor/src/behaviors/trailing_p.ts","../../../packages/editor/src/behaviors/empty_mark.ts","../../../packages/editor/src/behaviors/escape_mark.ts","../../../packages/editor/src/behaviors/code_block_input.ts","../../../packages/editor/src/behaviors/paste.ts","../../../packages/editor/src/behaviors/bottom_padding.ts","../../../packages/editor/src/api/unicode.ts","../../../packages/editor/src/api/focus.ts","../../../packages/editor/src/api/widgets/select.tsx","../../../packages/editor/src/api/widgets/text.tsx","../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../node_modules/memoize-one/dist/memoize-one.esm.js","../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../../node_modules/react-window/dist/index.esm.js","../../../node_modules/lodash.debounce/index.js","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-grid-cell.tsx","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-grid.tsx","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-grid-preview.tsx","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-popup.tsx","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-plugin.tsx","../../../packages/editor/src/behaviors/insert_symbol/symbols.ts","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-plugin-symbol.tsx","../../../packages/editor/src/marks/emoji/emoji-completion.tsx","../../../packages/editor/src/marks/emoji/emoji.ts","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-emoji-skintone.tsx","../../../packages/editor/src/behaviors/insert_symbol/insert_symbol-plugin-emoji.tsx","../../../packages/editor/src/behaviors/insert_symbol/insert_special_characters.ts","../../../packages/editor/src/behaviors/nbsp.ts","../../../packages/editor/src/behaviors/remove_section.ts","../../../packages/editor/src/behaviors/slides.ts","../../../packages/editor/src/marks/strikeout.ts","../../../packages/editor/src/marks/superscript.ts","../../../packages/editor/src/marks/subscript.ts","../../../packages/editor/src/marks/smallcaps.ts","../../../packages/editor/src/marks/underline.ts","../../../packages/editor/src/marks/raw_inline/raw_inline.ts","../../../packages/editor/src/api/mark-highlight.ts","../../../packages/editor/src/api/tex.ts","../../../packages/editor/src/marks/raw_inline/raw_tex.ts","../../../packages/editor/src/marks/raw_inline/raw_html.ts","../../../packages/editor/src/marks/math/math-commands.ts","../../../packages/editor/src/marks/math/math-transaction.ts","../../../packages/editor/src/marks/math/math-highlight.ts","../../../packages/editor/src/marks/math/math-popup.ts","../../../packages/editor/src/api/attr_edit/attr_edit-decoration.tsx","../../../packages/editor/src/marks/math/math-view.ts","../../../packages/editor/src/marks/math/math-keys.ts","../../../packages/editor/src/marks/math/math.ts","../../../node_modules/lodash.uniqby/index.js","../../../node_modules/fuse.js/dist/fuse.esm.js","../../../packages/editor/src/api/path.ts","../../../node_modules/biblatex-csl-converter/lib/index.js","../../../packages/editor/src/api/crossref.ts","../../../packages/editor/src/api/csl.ts","../../../packages/editor/src/api/csl-text.ts","../../../packages/editor/src/api/bibtex/language.ts","../../../packages/editor/src/api/bibtex/fields.ts","../../../packages/editor/src/api/bibtex/types.ts","../../../packages/editor/src/api/bibtex/formatting.ts","../../../packages/editor/src/api/bibtex/characters.ts","../../../packages/editor/src/api/bibtex/bibtex.ts","../../../packages/editor/src/api/bibliography/bibDB.ts","../../../packages/editor/src/api/bibliography/bibliography-provider_local.ts","../../../packages/editor/src/api/bibliography/bibliography-provider_zotero.ts","../../../packages/editor/src/api/bibliography/bibliography.ts","../../../packages/editor/src/api/widgets/completion.tsx","../../../packages/editor/src/marks/cite/cite-completion-bibliography.ts","../../../packages/editor/src/marks/xref/xref-completion.tsx","../../../packages/editor/src/marks/cite/cite-completion-quarto-xref.ts","../../../packages/editor/src/marks/cite/cite-completion-search.ts","../../../packages/editor/src/marks/cite/cite-completion.tsx","../../../packages/editor/src/marks/cite/cite-highlight.ts","../../../packages/editor/src/api/widgets/completion-detailed.tsx","../../../packages/editor/src/marks/cite/cite-doi.ts","../../../packages/editor/src/marks/cite/cite-completion_doi.tsx","../../../packages/editor/src/marks/cite/cite-popup.tsx","../../../packages/editor/src/api/widgets/tag-input.tsx","../../../packages/editor/src/api/widgets/navigation-tree.tsx","../../../packages/editor/src/api/widgets/dialog-buttons.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel.ts","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list-item.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-typeahead-search.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-bibliography.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-list-item-detailed.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-latent-search.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-doi.tsx","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-crossref.tsx","../../../packages/editor/src/api/pubmed.ts","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-pubmed.tsx","../../../packages/editor/src/api/datacite.ts","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-datacite.tsx","../../../packages/editor/src/behaviors/insert_citation/insert_citation-bibliography-picker.tsx","../../../node_modules/lodash.orderby/index.js","../../../packages/editor/src/behaviors/insert_citation/source_panels/insert_citation-source-panel-packages.tsx","../../../packages/editor/src/api/widgets/checkbox-input.tsx","../../../packages/editor/src/behaviors/insert_citation/insert_citation.tsx","../../../packages/editor/src/marks/cite/cite-commands.ts","../../../packages/editor/src/marks/cite/cite-popup-xref.tsx","../../../packages/editor/src/marks/cite/cite.ts","../../../packages/editor/src/marks/span.ts","../../../packages/editor/src/marks/xref/xref-popup.tsx","../../../packages/editor/src/behaviors/insert_xref/insert_xref_index.ts","../../../packages/editor/src/behaviors/insert_xref/insert_xref.tsx","../../../packages/editor/src/marks/xref/xref.ts","../../../packages/editor/src/marks/raw_inline/raw_html_comment.ts","../../../packages/editor/src/marks/shortcode.ts","../../../packages/editor/src/nodes/footnote/footnote-editor.ts","../../../packages/editor/src/nodes/footnote/footnote-transaction.ts","../../../packages/editor/src/nodes/footnote/footnote.ts","../../../packages/editor/src/nodes/raw_block.ts","../../../packages/editor/src/nodes/yaml_metadata/yaml_metadata-capsule.ts","../../../packages/editor/src/nodes/yaml_metadata/yaml_metadata.ts","../../../packages/editor/src/nodes/rmd_chunk/rmd_chunk-image.ts","../../../packages/editor/src/nodes/rmd_chunk/rmd_chunk-capsule.ts","../../../packages/editor/src/nodes/rmd_chunk/rmd_chunk.ts","../../../packages/editor/src/nodes/line_block.ts","../../../packages/editor/src/nodes/table/table-commands.ts","../../../packages/editor/src/nodes/table/table-columns.ts","../../../packages/editor/src/nodes/table/table-pandoc.ts","../../../packages/editor/src/nodes/table/table-capsule.ts","../../../packages/editor/src/nodes/table/table-nodes.ts","../../../packages/editor/src/nodes/table/table-contextmenu.ts","../../../packages/editor/src/nodes/table/table-paste.ts","../../../packages/editor/src/nodes/table/table.ts","../../../packages/editor/src/nodes/definition_list/definition_list-insert.ts","../../../packages/editor/src/nodes/definition_list/definition_list-commands.ts","../../../packages/editor/src/api/position.ts","../../../packages/editor/src/nodes/definition_list/definition-list-keys.ts","../../../packages/editor/src/nodes/definition_list/definition_list-inputrule.ts","../../../packages/editor/src/nodes/definition_list/definition_list-pandoc.ts","../../../packages/editor/src/nodes/definition_list/definition_list.ts","../../../packages/editor/src/api/nodeindex.ts","../../../packages/editor/src/nodes/user_comment/user_comment-constants.ts","../../../packages/editor/src/nodes/user_comment/user_comment-cache.ts","../../../packages/editor/src/nodes/user_comment/user_comment-fixup.ts","../../../packages/editor/src/nodes/user_comment/user_comment-model.ts","../../../packages/editor/src/nodes/user_comment/ui/common.tsx","../../../packages/editor/src/nodes/user_comment/ui/layout.tsx","../../../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../../../node_modules/use-latest/dist/use-latest.esm.js","../../../node_modules/use-composed-ref/dist/use-composed-ref.esm.js","../../../node_modules/react-textarea-autosize/dist/react-textarea-autosize.browser.esm.js","../../../packages/editor/src/api/react-hooks.ts","../../../packages/editor/src/nodes/user_comment/ui/comment-content.tsx","../../../packages/editor/src/nodes/user_comment/ui/comment-item.tsx","../../../packages/editor/src/nodes/user_comment/ui/comment-thread.tsx","../../../packages/editor/src/api/user.ts","../../../packages/editor/src/nodes/user_comment/ui/plugin.tsx","../../../packages/editor/src/nodes/user_comment/user_comment.ts","../../../packages/editor/src/nodes/shortcode_block.ts","../../../packages/editor/src/nodes/html_preserve.ts","../../../packages/editor/src/optional/ace/ace-render-queue.ts","../../../packages/editor/src/optional/ace/ace-placeholder.ts","../../../packages/editor/src/optional/ace/ace.ts","../../../packages/editor/src/behaviors/attr_edit/attr_edit-command.ts","../../../packages/editor/src/behaviors/attr_edit/attr_edit.ts","../../../packages/editor/src/editor/editor-extensions.ts","../../../packages/editor/src/editor/editor-theme.ts","../../../packages/editor/src/api/sourcepos.ts","../../../packages/editor/src/editor/editor.ts","../src/index.ts","../../../node_modules/prosemirror-dev-tools/dist/esm/state/idle-scheduler.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/json-diff-worker.js","../../../node_modules/jsondiffpatch/node_modules/escape-string-regexp/index.js","../../../node_modules/jsondiffpatch/node_modules/color-name/index.js","../../../node_modules/jsondiffpatch/node_modules/color-convert/conversions.js","../../../node_modules/jsondiffpatch/node_modules/color-convert/route.js","../../../node_modules/jsondiffpatch/node_modules/color-convert/index.js","../../../node_modules/jsondiffpatch/node_modules/ansi-styles/index.js","../../../node_modules/jsondiffpatch/node_modules/supports-color/browser.js","../../../node_modules/jsondiffpatch/node_modules/chalk/templates.js","../../../node_modules/jsondiffpatch/node_modules/chalk/index.js","../../../node_modules/jsondiffpatch/dist/jsondiffpatch.esm.js","../../../node_modules/prosemirror-dev-tools/dist/esm/state/json-diff-main.js"],"sourcesContent":["/*\r\n * link.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nexport enum LinkType {\r\n URL = 0,\r\n Heading = 1,\r\n ID = 2,\r\n}\r\n\r\nexport interface LinkCapabilities {\r\n headings: boolean;\r\n attributes: boolean;\r\n text: boolean;\r\n}\r\n\r\nexport interface LinkTargets {\r\n readonly ids: string[];\r\n readonly headings: LinkHeadingTarget[];\r\n}\r\n\r\nexport interface LinkHeadingTarget {\r\n readonly level: number;\r\n readonly text: string;\r\n}\r\n\r\n\r\n","\r\n\r\n/*\r\n * list.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport enum ListType {\r\n Ordered = 'OrderedList',\r\n Bullet = 'BulletList',\r\n}\r\n\r\nexport interface ListCapabilities {\r\n tasks: boolean;\r\n fancy: boolean;\r\n example: boolean;\r\n order: boolean;\r\n incremental: boolean;\r\n}\r\n\r\nexport enum ListNumberStyle {\r\n DefaultStyle = 'DefaultStyle',\r\n Decimal = 'Decimal',\r\n LowerRoman = 'LowerRoman',\r\n UpperRoman = 'UpperRoman',\r\n LowerAlpha = 'LowerAlpha',\r\n UpperAlpha = 'UpperAlpha',\r\n Example = 'Example',\r\n}\r\n\r\n// NOTE: HTML output doesn't currently respect this and it's difficult to\r\n// do with CSS (especially for nested lists). So we allow the user to edit\r\n// it but it isn't reflected in the editor.\r\nexport enum ListNumberDelim {\r\n DefaultDelim = 'DefaultDelim',\r\n Period = 'Period',\r\n OneParen = 'OneParen',\r\n TwoParens = 'TwoParens',\r\n}\r\n","/*\r\n * datacite.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { CiteField, CSL } from \"./csl\";\r\nimport { ImageDimensions } from \"./image\";\r\nimport { LinkCapabilities, LinkTargets, LinkType } from \"./link\";\r\nimport { ListCapabilities, ListType } from \"./list\";\r\nimport { PandocAttr } from \"./pandoc\";\r\nimport { TableCapabilities } from \"./table\";\r\n\r\nexport interface EditorDialogs {\r\n alert: AlertFn;\r\n yesNoMessage: YesNoMessageFn;\r\n editLink: LinkEditorFn;\r\n editImage: ImageEditorFn;\r\n editCodeBlock: CodeBlockEditorFn;\r\n editList: ListEditorFn;\r\n editAttr: AttrEditorFn;\r\n editSpan: AttrEditorFn;\r\n editDiv: DivAttrEditorFn;\r\n editCallout: CalloutEditorFn;\r\n editRawInline: RawFormatEditorFn;\r\n editRawBlock: RawFormatEditorFn;\r\n editMath: MathEditorFn;\r\n insertTable: InsertTableFn;\r\n insertTabset: InsertTabsetFn;\r\n insertCite: InsertCiteFn;\r\n htmlDialog: EditorHTMLDialogFn;\r\n}\r\n\r\nexport type EditorHTMLDialogFn = (\r\n title: string,\r\n okText: string | null,\r\n create: EditorHTMLDialogCreateFn,\r\n focus: () => void,\r\n validate: EditorHTMLDialogValidateFn,\r\n) => Promise<boolean>;\r\n\r\nexport type EditorHTMLDialogCreateFn = (\r\n containerWidth: number,\r\n containerHeight: number,\r\n confirm: () => void,\r\n cancel: () => void,\r\n showProgress: (message: string) => void,\r\n hideProgress: () => void,\r\n themed?: boolean\r\n) => HTMLElement;\r\n\r\nexport type EditorHTMLDialogValidateFn = () => string | null;\r\n\r\nexport const kAlertTypeInfo = 1;\r\nexport const kAlertTypeWarning = 2;\r\nexport const kAlertTypeError = 3;\r\n\r\nexport type AlertFn = (title: string, message: string, type: number) => Promise<boolean>;\r\n\r\nexport type YesNoMessageFn = (\r\n title: string,\r\n message: string,\r\n type: number,\r\n yesLabel: string,\r\n noLabel: string,\r\n) => Promise<boolean>;\r\n\r\nexport type AttrEditorFn = (attr: AttrProps, idHint?: string) => Promise<AttrEditResult | null>;\r\n\r\nexport type DivAttrEditorFn = (attr: AttrProps, removeEnabled: boolean) => Promise<AttrEditResult | null>;\r\n\r\nexport type CalloutEditorFn = (props: CalloutEditProps, removeEnabled: boolean) => Promise<CalloutEditResult | null>;\r\n\r\nexport type LinkEditorFn = (\r\n link: LinkProps,\r\n targets: LinkTargets,\r\n capabilities: LinkCapabilities,\r\n) => Promise<LinkEditResult | null>;\r\n\r\nexport type ImageEditorFn = (\r\n image: ImageProps,\r\n dims: ImageDimensions | null,\r\n figure: boolean,\r\n editAttributes: boolean,\r\n) => Promise<ImageEditResult | null>;\r\n\r\nexport type CodeBlockEditorFn = (\r\n codeBlock: CodeBlockProps,\r\n attributes: boolean,\r\n languages: string[],\r\n) => Promise<CodeBlockEditResult | null>;\r\n\r\nexport type ListEditorFn = (list: ListProps, capabilities: ListCapabilities) => Promise<ListEditResult | null>;\r\n\r\nexport type MathEditorFn = (id: string) => Promise<string | null>;\r\n\r\nexport type RawFormatEditorFn = (raw: RawFormatProps, outputFormats: string[]) => Promise<RawFormatResult | null>;\r\n\r\nexport type InsertTableFn = (capabilities: TableCapabilities) => Promise<InsertTableResult | null>;\r\n\r\nexport type InsertCiteFn = (props: InsertCiteProps) => Promise<InsertCiteResult | null>;\r\n\r\nexport type InsertTabsetFn = () => Promise<InsertTabsetResult | null>;\r\n\r\nexport interface AttrProps {\r\n readonly id?: string;\r\n readonly classes?: string[];\r\n readonly keyvalue?: Array<[string, string]>;\r\n}\r\n\r\nexport interface AttrEditResult {\r\n readonly action: 'edit' | 'remove';\r\n readonly attr: AttrProps;\r\n}\r\n\r\nexport interface UIToolsAttr {\r\n propsToInput(attr: AttrProps): AttrEditInput;\r\n inputToProps(input: AttrEditInput): AttrProps;\r\n pandocAutoIdentifier(text: string): string;\r\n asPandocId(id: string): string;\r\n asHtmlId(id: string | undefined) : string | undefined; \r\n}\r\n\r\nexport interface UIToolsImage {\r\n validUnits(): string[];\r\n percentUnit(): string;\r\n unitToPixels(value: number, unit: string, containerWidth: number): number;\r\n pixelsToUnit(pixels: number, unit: string, containerWidth: number): number;\r\n roundUnit(value: number, unit: string): string;\r\n}\r\n\r\n\r\nexport interface CalloutEditProps {\r\n attr: PandocAttr;\r\n callout: CalloutProps;\r\n}\r\n\r\nexport interface CalloutEditResult extends CalloutEditProps {\r\n readonly action: \"edit\" | \"remove\";\r\n}\r\n\r\nexport interface CalloutProps {\r\n type: string;\r\n appearance: string;\r\n icon: boolean;\r\n caption: string;\r\n}\r\n\r\nexport interface LinkProps extends AttrProps {\r\n readonly type: LinkType;\r\n readonly text: string;\r\n readonly href: string;\r\n readonly heading?: string;\r\n readonly title?: string;\r\n}\r\n\r\nexport interface LinkEditResult {\r\n readonly action: 'edit' | 'remove';\r\n readonly link: LinkProps;\r\n}\r\n\r\nexport interface ImageProps extends AttrProps {\r\n src: string | null;\r\n title?: string;\r\n caption?: string;\r\n alt?: string;\r\n align?: string;\r\n env?: string;\r\n linkTo?: string;\r\n width?: number;\r\n height?: number;\r\n units?: string;\r\n lockRatio?: boolean;\r\n}\r\n\r\nexport type ImageEditResult = ImageProps;\r\n\r\nexport interface CodeBlockProps extends AttrProps {\r\n lang: string;\r\n}\r\n\r\nexport type CodeBlockEditResult = CodeBlockProps;\r\n\r\nexport interface ListProps {\r\n type: ListType;\r\n tight: boolean;\r\n order: number;\r\n number_style: string;\r\n number_delim: string;\r\n incremental: \"default\" | \"incremental\" | \"nonincremental\";\r\n}\r\n\r\nexport type ListEditResult = ListProps;\r\n\r\nexport interface InsertTableResult {\r\n rows: number;\r\n cols: number;\r\n header: boolean;\r\n caption?: string;\r\n}\r\n\r\nexport interface InsertTabsetResult {\r\n tabs: string[];\r\n attr: PandocAttr;\r\n}\r\n\r\nexport interface InsertCiteProps {\r\n doi: string;\r\n existingIds: string[];\r\n bibliographyFiles: string[];\r\n provider?: string;\r\n csl?: CSL;\r\n citeUI?: InsertCiteUI;\r\n}\r\n\r\nexport interface InsertCiteUI {\r\n suggestedId: string;\r\n previewFields: CiteField[];\r\n}\r\n\r\nexport interface InsertCiteResult {\r\n id: string;\r\n bibliographyFile: string;\r\n csl: CSL;\r\n}\r\n\r\nexport interface RawFormatProps {\r\n content: string;\r\n format: string;\r\n}\r\n\r\nexport interface RawFormatResult {\r\n readonly action: 'edit' | 'remove';\r\n readonly raw: RawFormatProps;\r\n}\r\n\r\nexport interface AttrEditInput {\r\n id?: string;\r\n classes?: string;\r\n style?: string;\r\n keyvalue?: string;\r\n}","/*\r\n * outline.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nexport interface EditorOutlineItem {\r\n navigation_id: string;\r\n type: EditorOutlineItemType;\r\n level: number;\r\n sequence: number;\r\n title: string;\r\n children: EditorOutlineItem[];\r\n}\r\n\r\nexport const kHeadingOutlineItemType = 'heading';\r\nexport const kRmdchunkOutlineItemType = 'rmd_chunk';\r\nexport const kYamlMetadataOutlineItemType = 'yaml_metadata';\r\n\r\nexport type EditorOutlineItemType = 'heading' | 'rmd_chunk' | 'yaml_metadata';\r\n\r\nexport type EditorOutline = EditorOutlineItem[];\r\n\r\nexport interface EditingOutlineLocationItem {\r\n type: EditorOutlineItemType;\r\n level: number;\r\n title: string;\r\n active: boolean;\r\n position: number;\r\n}\r\n\r\nexport interface EditingOutlineLocation {\r\n items: EditingOutlineLocationItem[];\r\n}\r\n\r\n","import { EmojiRaw } from './emoji';\r\n\r\nconst emjois: EmojiRaw[] = [\r\n {\r\n \"emojiRaw\": \"😀\",\r\n \"description\": \"grinning face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"grinning\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😃\",\r\n \"description\": \"grinning face with big eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smiley\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😄\",\r\n \"description\": \"grinning face with smiling eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smile\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😁\",\r\n \"description\": \"beaming face with smiling eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"grin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😆\",\r\n \"description\": \"grinning squinting face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"laughing\",\r\n \"satisfied\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😅\",\r\n \"description\": \"grinning face with sweat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sweat_smile\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤣\",\r\n \"description\": \"rolling on the floor laughing\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"rofl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😂\",\r\n \"description\": \"face with tears of joy\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"joy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙂\",\r\n \"description\": \"slightly smiling face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"slightly_smiling_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙃\",\r\n \"description\": \"upside-down face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"upside_down_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😉\",\r\n \"description\": \"winking face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"wink\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😊\",\r\n \"description\": \"smiling face with smiling eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"blush\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😇\",\r\n \"description\": \"smiling face with halo\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"innocent\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥰\",\r\n \"description\": \"smiling face with hearts\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smiling_face_with_three_hearts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😍\",\r\n \"description\": \"smiling face with heart-eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heart_eyes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤩\",\r\n \"description\": \"star-struck\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"star_struck\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😘\",\r\n \"description\": \"face blowing a kiss\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"kissing_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😗\",\r\n \"description\": \"kissing face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"kissing\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😚\",\r\n \"description\": \"kissing face with closed eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"kissing_closed_eyes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😙\",\r\n \"description\": \"kissing face with smiling eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"kissing_smiling_eyes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😋\",\r\n \"description\": \"face savoring food\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"yum\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😛\",\r\n \"description\": \"face with tongue\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"stuck_out_tongue\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😜\",\r\n \"description\": \"winking face with tongue\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"stuck_out_tongue_winking_eye\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤪\",\r\n \"description\": \"zany face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"zany_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😝\",\r\n \"description\": \"squinting face with tongue\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"stuck_out_tongue_closed_eyes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤑\",\r\n \"description\": \"money-mouth face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"money_mouth_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤗\",\r\n \"description\": \"hugging face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hugs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤭\",\r\n \"description\": \"face with hand over mouth\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hand_over_mouth\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤫\",\r\n \"description\": \"shushing face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"shushing_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤔\",\r\n \"description\": \"thinking face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"thinking\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤐\",\r\n \"description\": \"zipper-mouth face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"zipper_mouth_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤨\",\r\n \"description\": \"face with raised eyebrow\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"raised_eyebrow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😐\",\r\n \"description\": \"neutral face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"neutral_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😑\",\r\n \"description\": \"expressionless face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"expressionless\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😶\",\r\n \"description\": \"face without mouth\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"no_mouth\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😏\",\r\n \"description\": \"smirking face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smirk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😒\",\r\n \"description\": \"unamused face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"unamused\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙄\",\r\n \"description\": \"face with rolling eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"roll_eyes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😬\",\r\n \"description\": \"grimacing face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"grimacing\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤥\",\r\n \"description\": \"lying face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"lying_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😌\",\r\n \"description\": \"relieved face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"relieved\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😔\",\r\n \"description\": \"pensive face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"pensive\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😪\",\r\n \"description\": \"sleepy face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sleepy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤤\",\r\n \"description\": \"drooling face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"drooling_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😴\",\r\n \"description\": \"sleeping face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sleeping\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😷\",\r\n \"description\": \"face with medical mask\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"mask\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤒\",\r\n \"description\": \"face with thermometer\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"face_with_thermometer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤕\",\r\n \"description\": \"face with head-bandage\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"face_with_head_bandage\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤢\",\r\n \"description\": \"nauseated face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"nauseated_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤮\",\r\n \"description\": \"face vomiting\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"vomiting_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤧\",\r\n \"description\": \"sneezing face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sneezing_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥵\",\r\n \"description\": \"hot face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hot_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥶\",\r\n \"description\": \"cold face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"cold_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥴\",\r\n \"description\": \"woozy face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"woozy_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😵\",\r\n \"description\": \"dizzy face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"dizzy_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤯\",\r\n \"description\": \"exploding head\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"exploding_head\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤠\",\r\n \"description\": \"cowboy hat face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"cowboy_hat_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥳\",\r\n \"description\": \"partying face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"partying_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😎\",\r\n \"description\": \"smiling face with sunglasses\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sunglasses\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤓\",\r\n \"description\": \"nerd face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"nerd_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧐\",\r\n \"description\": \"face with monocle\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"monocle_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😕\",\r\n \"description\": \"confused face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"confused\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😟\",\r\n \"description\": \"worried face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"worried\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙁\",\r\n \"description\": \"slightly frowning face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"slightly_frowning_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😮\",\r\n \"description\": \"face with open mouth\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"open_mouth\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😯\",\r\n \"description\": \"hushed face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hushed\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😲\",\r\n \"description\": \"astonished face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"astonished\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😳\",\r\n \"description\": \"flushed face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"flushed\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥺\",\r\n \"description\": \"pleading face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"pleading_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😦\",\r\n \"description\": \"frowning face with open mouth\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"frowning\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😧\",\r\n \"description\": \"anguished face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"anguished\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😨\",\r\n \"description\": \"fearful face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"fearful\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😰\",\r\n \"description\": \"anxious face with sweat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"cold_sweat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😥\",\r\n \"description\": \"sad but relieved face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"disappointed_relieved\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😢\",\r\n \"description\": \"crying face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"cry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😭\",\r\n \"description\": \"loudly crying face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sob\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😱\",\r\n \"description\": \"face screaming in fear\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"scream\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😖\",\r\n \"description\": \"confounded face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"confounded\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😣\",\r\n \"description\": \"persevering face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"persevere\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😞\",\r\n \"description\": \"disappointed face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"disappointed\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😓\",\r\n \"description\": \"downcast face with sweat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sweat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😩\",\r\n \"description\": \"weary face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"weary\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😫\",\r\n \"description\": \"tired face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"tired_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥱\",\r\n \"description\": \"yawning face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"yawning_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😤\",\r\n \"description\": \"face with steam from nose\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"triumph\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😡\",\r\n \"description\": \"pouting face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"rage\",\r\n \"pout\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😠\",\r\n \"description\": \"angry face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"angry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤬\",\r\n \"description\": \"face with symbols on mouth\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"cursing_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😈\",\r\n \"description\": \"smiling face with horns\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smiling_imp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👿\",\r\n \"description\": \"angry face with horns\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"imp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💀\",\r\n \"description\": \"skull\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"skull\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☠️\",\r\n \"description\": \"skull and crossbones\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"skull_and_crossbones\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💩\",\r\n \"description\": \"pile of poo\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hankey\",\r\n \"poop\",\r\n \"shit\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤡\",\r\n \"description\": \"clown face\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"clown_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👹\",\r\n \"description\": \"ogre\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"japanese_ogre\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👺\",\r\n \"description\": \"goblin\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"japanese_goblin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👻\",\r\n \"description\": \"ghost\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"ghost\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👽\",\r\n \"description\": \"alien\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"alien\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👾\",\r\n \"description\": \"alien monster\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"space_invader\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤖\",\r\n \"description\": \"robot\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"robot\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😺\",\r\n \"description\": \"grinning cat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smiley_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😸\",\r\n \"description\": \"grinning cat with smiling eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smile_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😹\",\r\n \"description\": \"cat with tears of joy\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"joy_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😻\",\r\n \"description\": \"smiling cat with heart-eyes\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heart_eyes_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😼\",\r\n \"description\": \"cat with wry smile\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"smirk_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😽\",\r\n \"description\": \"kissing cat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"kissing_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙀\",\r\n \"description\": \"weary cat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"scream_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😿\",\r\n \"description\": \"crying cat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"crying_cat_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"😾\",\r\n \"description\": \"pouting cat\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"pouting_cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙈\",\r\n \"description\": \"see-no-evil monkey\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"see_no_evil\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙉\",\r\n \"description\": \"hear-no-evil monkey\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hear_no_evil\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙊\",\r\n \"description\": \"speak-no-evil monkey\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"speak_no_evil\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💋\",\r\n \"description\": \"kiss mark\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"kiss\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💌\",\r\n \"description\": \"love letter\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"love_letter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💘\",\r\n \"description\": \"heart with arrow\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"cupid\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💝\",\r\n \"description\": \"heart with ribbon\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"gift_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💖\",\r\n \"description\": \"sparkling heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sparkling_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💗\",\r\n \"description\": \"growing heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heartpulse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💓\",\r\n \"description\": \"beating heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heartbeat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💞\",\r\n \"description\": \"revolving hearts\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"revolving_hearts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💕\",\r\n \"description\": \"two hearts\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"two_hearts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💟\",\r\n \"description\": \"heart decoration\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heart_decoration\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❣️\",\r\n \"description\": \"heart exclamation\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heavy_heart_exclamation\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💔\",\r\n \"description\": \"broken heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"broken_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❤️\",\r\n \"description\": \"red heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧡\",\r\n \"description\": \"orange heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"orange_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💛\",\r\n \"description\": \"yellow heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"yellow_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💚\",\r\n \"description\": \"green heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"green_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💙\",\r\n \"description\": \"blue heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"blue_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💜\",\r\n \"description\": \"purple heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"purple_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤎\",\r\n \"description\": \"brown heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"brown_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖤\",\r\n \"description\": \"black heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"black_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤍\",\r\n \"description\": \"white heart\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"white_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💯\",\r\n \"description\": \"hundred points\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"100\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💢\",\r\n \"description\": \"anger symbol\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"anger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💥\",\r\n \"description\": \"collision\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"boom\",\r\n \"collision\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💫\",\r\n \"description\": \"dizzy\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"dizzy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💦\",\r\n \"description\": \"sweat droplets\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"sweat_drops\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💨\",\r\n \"description\": \"dashing away\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"dash\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕳️\",\r\n \"description\": \"hole\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"hole\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💣\",\r\n \"description\": \"bomb\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"bomb\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💬\",\r\n \"description\": \"speech balloon\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"speech_balloon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👁️🗨️\",\r\n \"description\": \"eye in speech bubble\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"eye_speech_bubble\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗨️\",\r\n \"description\": \"left speech bubble\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"left_speech_bubble\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗯️\",\r\n \"description\": \"right anger bubble\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"right_anger_bubble\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💭\",\r\n \"description\": \"thought balloon\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"thought_balloon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💤\",\r\n \"description\": \"zzz\",\r\n \"category\": \"Smileys & Emotion\",\r\n \"aliases\": [\r\n \"zzz\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👋\",\r\n \"description\": \"waving hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"wave\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤚\",\r\n \"description\": \"raised back of hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"raised_back_of_hand\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖐️\",\r\n \"description\": \"hand with fingers splayed\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"raised_hand_with_fingers_splayed\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✋\",\r\n \"description\": \"raised hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"hand\",\r\n \"raised_hand\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖖\",\r\n \"description\": \"vulcan salute\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"vulcan_salute\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👌\",\r\n \"description\": \"OK hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"ok_hand\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤏\",\r\n \"description\": \"pinching hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pinching_hand\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✌️\",\r\n \"description\": \"victory hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"v\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤞\",\r\n \"description\": \"crossed fingers\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"crossed_fingers\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤟\",\r\n \"description\": \"love-you gesture\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"love_you_gesture\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤘\",\r\n \"description\": \"sign of the horns\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"metal\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤙\",\r\n \"description\": \"call me hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"call_me_hand\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👈\",\r\n \"description\": \"backhand index pointing left\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"point_left\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👉\",\r\n \"description\": \"backhand index pointing right\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"point_right\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👆\",\r\n \"description\": \"backhand index pointing up\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"point_up_2\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖕\",\r\n \"description\": \"middle finger\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"middle_finger\",\r\n \"fu\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👇\",\r\n \"description\": \"backhand index pointing down\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"point_down\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☝️\",\r\n \"description\": \"index pointing up\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"point_up\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👍\",\r\n \"description\": \"thumbs up\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"+1\",\r\n \"thumbsup\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👎\",\r\n \"description\": \"thumbs down\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"-1\",\r\n \"thumbsdown\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✊\",\r\n \"description\": \"raised fist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fist_raised\",\r\n \"fist\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👊\",\r\n \"description\": \"oncoming fist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fist_oncoming\",\r\n \"facepunch\",\r\n \"punch\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤛\",\r\n \"description\": \"left-facing fist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fist_left\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤜\",\r\n \"description\": \"right-facing fist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fist_right\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👏\",\r\n \"description\": \"clapping hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"clap\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙌\",\r\n \"description\": \"raising hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"raised_hands\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👐\",\r\n \"description\": \"open hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"open_hands\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤲\",\r\n \"description\": \"palms up together\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"palms_up_together\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤝\",\r\n \"description\": \"handshake\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"handshake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙏\",\r\n \"description\": \"folded hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pray\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✍️\",\r\n \"description\": \"writing hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"writing_hand\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💅\",\r\n \"description\": \"nail polish\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"nail_care\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤳\",\r\n \"description\": \"selfie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"selfie\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💪\",\r\n \"description\": \"flexed biceps\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"muscle\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦾\",\r\n \"description\": \"mechanical arm\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mechanical_arm\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦿\",\r\n \"description\": \"mechanical leg\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mechanical_leg\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦵\",\r\n \"description\": \"leg\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"leg\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦶\",\r\n \"description\": \"foot\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"foot\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👂\",\r\n \"description\": \"ear\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"ear\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦻\",\r\n \"description\": \"ear with hearing aid\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"ear_with_hearing_aid\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👃\",\r\n \"description\": \"nose\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"nose\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧠\",\r\n \"description\": \"brain\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"brain\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦷\",\r\n \"description\": \"tooth\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"tooth\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦴\",\r\n \"description\": \"bone\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👀\",\r\n \"description\": \"eyes\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"eyes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👁️\",\r\n \"description\": \"eye\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"eye\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👅\",\r\n \"description\": \"tongue\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"tongue\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👄\",\r\n \"description\": \"mouth\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"lips\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👶\",\r\n \"description\": \"baby\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"baby\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧒\",\r\n \"description\": \"child\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"child\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👦\",\r\n \"description\": \"boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"boy\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👧\",\r\n \"description\": \"girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"girl\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑\",\r\n \"description\": \"person\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"adult\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👱\",\r\n \"description\": \"person: blond hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"blond_haired_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨\",\r\n \"description\": \"man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧔\",\r\n \"description\": \"man: beard\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bearded_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦰\",\r\n \"description\": \"man: red hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"red_haired_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦱\",\r\n \"description\": \"man: curly hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"curly_haired_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦳\",\r\n \"description\": \"man: white hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"white_haired_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦲\",\r\n \"description\": \"man: bald\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bald_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩\",\r\n \"description\": \"woman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦰\",\r\n \"description\": \"woman: red hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"red_haired_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦰\",\r\n \"description\": \"person: red hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_red_hair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦱\",\r\n \"description\": \"woman: curly hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"curly_haired_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦱\",\r\n \"description\": \"person: curly hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_curly_hair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦳\",\r\n \"description\": \"woman: white hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"white_haired_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦳\",\r\n \"description\": \"person: white hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_white_hair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦲\",\r\n \"description\": \"woman: bald\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bald_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦲\",\r\n \"description\": \"person: bald\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_bald\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👱♀️\",\r\n \"description\": \"woman: blond hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"blond_haired_woman\",\r\n \"blonde_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👱♂️\",\r\n \"description\": \"man: blond hair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"blond_haired_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧓\",\r\n \"description\": \"older person\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"older_adult\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👴\",\r\n \"description\": \"old man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"older_man\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👵\",\r\n \"description\": \"old woman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"older_woman\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙍\",\r\n \"description\": \"person frowning\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"frowning_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙍♂️\",\r\n \"description\": \"man frowning\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"frowning_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙍♀️\",\r\n \"description\": \"woman frowning\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"frowning_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙎\",\r\n \"description\": \"person pouting\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pouting_face\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙎♂️\",\r\n \"description\": \"man pouting\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pouting_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙎♀️\",\r\n \"description\": \"woman pouting\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pouting_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙅\",\r\n \"description\": \"person gesturing NO\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"no_good\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙅♂️\",\r\n \"description\": \"man gesturing NO\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"no_good_man\",\r\n \"ng_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙅♀️\",\r\n \"description\": \"woman gesturing NO\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"no_good_woman\",\r\n \"ng_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙆\",\r\n \"description\": \"person gesturing OK\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"ok_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙆♂️\",\r\n \"description\": \"man gesturing OK\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"ok_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙆♀️\",\r\n \"description\": \"woman gesturing OK\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"ok_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💁\",\r\n \"description\": \"person tipping hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"tipping_hand_person\",\r\n \"information_desk_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💁♂️\",\r\n \"description\": \"man tipping hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"tipping_hand_man\",\r\n \"sassy_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💁♀️\",\r\n \"description\": \"woman tipping hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"tipping_hand_woman\",\r\n \"sassy_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙋\",\r\n \"description\": \"person raising hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"raising_hand\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙋♂️\",\r\n \"description\": \"man raising hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"raising_hand_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙋♀️\",\r\n \"description\": \"woman raising hand\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"raising_hand_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧏\",\r\n \"description\": \"deaf person\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"deaf_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧏♂️\",\r\n \"description\": \"deaf man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"deaf_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧏♀️\",\r\n \"description\": \"deaf woman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"deaf_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙇\",\r\n \"description\": \"person bowing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bow\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙇♂️\",\r\n \"description\": \"man bowing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bowing_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🙇♀️\",\r\n \"description\": \"woman bowing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bowing_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤦\",\r\n \"description\": \"person facepalming\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"facepalm\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤦♂️\",\r\n \"description\": \"man facepalming\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_facepalming\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤦♀️\",\r\n \"description\": \"woman facepalming\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_facepalming\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤷\",\r\n \"description\": \"person shrugging\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"shrug\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤷♂️\",\r\n \"description\": \"man shrugging\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_shrugging\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤷♀️\",\r\n \"description\": \"woman shrugging\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_shrugging\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑⚕️\",\r\n \"description\": \"health worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"health_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨⚕️\",\r\n \"description\": \"man health worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_health_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩⚕️\",\r\n \"description\": \"woman health worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_health_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🎓\",\r\n \"description\": \"student\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"student\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🎓\",\r\n \"description\": \"man student\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_student\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🎓\",\r\n \"description\": \"woman student\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_student\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🏫\",\r\n \"description\": \"teacher\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"teacher\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🏫\",\r\n \"description\": \"man teacher\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_teacher\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🏫\",\r\n \"description\": \"woman teacher\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_teacher\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑⚖️\",\r\n \"description\": \"judge\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"judge\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨⚖️\",\r\n \"description\": \"man judge\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_judge\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩⚖️\",\r\n \"description\": \"woman judge\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_judge\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🌾\",\r\n \"description\": \"farmer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"farmer\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🌾\",\r\n \"description\": \"man farmer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_farmer\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🌾\",\r\n \"description\": \"woman farmer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_farmer\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🍳\",\r\n \"description\": \"cook\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"cook\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🍳\",\r\n \"description\": \"man cook\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_cook\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🍳\",\r\n \"description\": \"woman cook\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_cook\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🔧\",\r\n \"description\": \"mechanic\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mechanic\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🔧\",\r\n \"description\": \"man mechanic\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_mechanic\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🔧\",\r\n \"description\": \"woman mechanic\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_mechanic\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🏭\",\r\n \"description\": \"factory worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"factory_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🏭\",\r\n \"description\": \"man factory worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_factory_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🏭\",\r\n \"description\": \"woman factory worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_factory_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑💼\",\r\n \"description\": \"office worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"office_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨💼\",\r\n \"description\": \"man office worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_office_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩💼\",\r\n \"description\": \"woman office worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_office_worker\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🔬\",\r\n \"description\": \"scientist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"scientist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🔬\",\r\n \"description\": \"man scientist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_scientist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🔬\",\r\n \"description\": \"woman scientist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_scientist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑💻\",\r\n \"description\": \"technologist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"technologist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨💻\",\r\n \"description\": \"man technologist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_technologist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩💻\",\r\n \"description\": \"woman technologist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_technologist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🎤\",\r\n \"description\": \"singer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"singer\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🎤\",\r\n \"description\": \"man singer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_singer\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🎤\",\r\n \"description\": \"woman singer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_singer\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🎨\",\r\n \"description\": \"artist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"artist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🎨\",\r\n \"description\": \"man artist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_artist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🎨\",\r\n \"description\": \"woman artist\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_artist\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑✈️\",\r\n \"description\": \"pilot\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pilot\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨✈️\",\r\n \"description\": \"man pilot\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_pilot\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩✈️\",\r\n \"description\": \"woman pilot\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_pilot\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🚀\",\r\n \"description\": \"astronaut\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"astronaut\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🚀\",\r\n \"description\": \"man astronaut\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_astronaut\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🚀\",\r\n \"description\": \"woman astronaut\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_astronaut\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🚒\",\r\n \"description\": \"firefighter\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"firefighter\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🚒\",\r\n \"description\": \"man firefighter\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_firefighter\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🚒\",\r\n \"description\": \"woman firefighter\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_firefighter\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👮\",\r\n \"description\": \"police officer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"police_officer\",\r\n \"cop\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👮♂️\",\r\n \"description\": \"man police officer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"policeman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👮♀️\",\r\n \"description\": \"woman police officer\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"policewoman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕵️\",\r\n \"description\": \"detective\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"detective\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕵️♂️\",\r\n \"description\": \"man detective\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"male_detective\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕵️♀️\",\r\n \"description\": \"woman detective\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"female_detective\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💂\",\r\n \"description\": \"guard\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"guard\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💂♂️\",\r\n \"description\": \"man guard\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"guardsman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💂♀️\",\r\n \"description\": \"woman guard\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"guardswoman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👷\",\r\n \"description\": \"construction worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"construction_worker\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👷♂️\",\r\n \"description\": \"man construction worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"construction_worker_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👷♀️\",\r\n \"description\": \"woman construction worker\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"construction_worker_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤴\",\r\n \"description\": \"prince\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"prince\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👸\",\r\n \"description\": \"princess\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"princess\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👳\",\r\n \"description\": \"person wearing turban\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_with_turban\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👳♂️\",\r\n \"description\": \"man wearing turban\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_with_turban\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👳♀️\",\r\n \"description\": \"woman wearing turban\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_with_turban\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👲\",\r\n \"description\": \"person with skullcap\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_with_gua_pi_mao\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧕\",\r\n \"description\": \"woman with headscarf\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_with_headscarf\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤵\",\r\n \"description\": \"person in tuxedo\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_in_tuxedo\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👰\",\r\n \"description\": \"person with veil\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_with_veil\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤰\",\r\n \"description\": \"pregnant woman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"pregnant_woman\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤱\",\r\n \"description\": \"breast-feeding\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"breast_feeding\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👼\",\r\n \"description\": \"baby angel\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"angel\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎅\",\r\n \"description\": \"Santa Claus\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"santa\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤶\",\r\n \"description\": \"Mrs. Claus\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mrs_claus\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🎄\",\r\n \"description\": \"mx claus\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mx_claus\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": false\r\n },\r\n {\r\n \"emojiRaw\": \"🦸\",\r\n \"description\": \"superhero\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"superhero\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦸♂️\",\r\n \"description\": \"man superhero\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"superhero_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦸♀️\",\r\n \"description\": \"woman superhero\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"superhero_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦹\",\r\n \"description\": \"supervillain\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"supervillain\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦹♂️\",\r\n \"description\": \"man supervillain\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"supervillain_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦹♀️\",\r\n \"description\": \"woman supervillain\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"supervillain_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧙\",\r\n \"description\": \"mage\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mage\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧙♂️\",\r\n \"description\": \"man mage\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mage_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧙♀️\",\r\n \"description\": \"woman mage\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mage_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧚\",\r\n \"description\": \"fairy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fairy\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧚♂️\",\r\n \"description\": \"man fairy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fairy_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧚♀️\",\r\n \"description\": \"woman fairy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"fairy_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧛\",\r\n \"description\": \"vampire\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"vampire\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧛♂️\",\r\n \"description\": \"man vampire\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"vampire_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧛♀️\",\r\n \"description\": \"woman vampire\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"vampire_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧜\",\r\n \"description\": \"merperson\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"merperson\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧜♂️\",\r\n \"description\": \"merman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"merman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧜♀️\",\r\n \"description\": \"mermaid\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mermaid\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧝\",\r\n \"description\": \"elf\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"elf\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧝♂️\",\r\n \"description\": \"man elf\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"elf_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧝♀️\",\r\n \"description\": \"woman elf\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"elf_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧞\",\r\n \"description\": \"genie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"genie\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧞♂️\",\r\n \"description\": \"man genie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"genie_man\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧞♀️\",\r\n \"description\": \"woman genie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"genie_woman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧟\",\r\n \"description\": \"zombie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"zombie\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧟♂️\",\r\n \"description\": \"man zombie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"zombie_man\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧟♀️\",\r\n \"description\": \"woman zombie\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"zombie_woman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💆\",\r\n \"description\": \"person getting massage\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"massage\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💆♂️\",\r\n \"description\": \"man getting massage\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"massage_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💆♀️\",\r\n \"description\": \"woman getting massage\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"massage_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💇\",\r\n \"description\": \"person getting haircut\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"haircut\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💇♂️\",\r\n \"description\": \"man getting haircut\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"haircut_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💇♀️\",\r\n \"description\": \"woman getting haircut\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"haircut_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚶\",\r\n \"description\": \"person walking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"walking\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚶♂️\",\r\n \"description\": \"man walking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"walking_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚶♀️\",\r\n \"description\": \"woman walking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"walking_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧍\",\r\n \"description\": \"person standing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"standing_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧍♂️\",\r\n \"description\": \"man standing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"standing_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧍♀️\",\r\n \"description\": \"woman standing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"standing_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧎\",\r\n \"description\": \"person kneeling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"kneeling_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧎♂️\",\r\n \"description\": \"man kneeling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"kneeling_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧎♀️\",\r\n \"description\": \"woman kneeling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"kneeling_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦯\",\r\n \"description\": \"person with white cane\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_with_probing_cane\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦯\",\r\n \"description\": \"man with white cane\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_with_probing_cane\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦯\",\r\n \"description\": \"woman with white cane\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_with_probing_cane\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦼\",\r\n \"description\": \"person in motorized wheelchair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_in_motorized_wheelchair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦼\",\r\n \"description\": \"man in motorized wheelchair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_in_motorized_wheelchair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦼\",\r\n \"description\": \"woman in motorized wheelchair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_in_motorized_wheelchair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🦽\",\r\n \"description\": \"person in manual wheelchair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_in_manual_wheelchair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨🦽\",\r\n \"description\": \"man in manual wheelchair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_in_manual_wheelchair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩🦽\",\r\n \"description\": \"woman in manual wheelchair\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_in_manual_wheelchair\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏃\",\r\n \"description\": \"person running\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"runner\",\r\n \"running\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏃♂️\",\r\n \"description\": \"man running\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"running_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏃♀️\",\r\n \"description\": \"woman running\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"running_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💃\",\r\n \"description\": \"woman dancing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_dancing\",\r\n \"dancer\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕺\",\r\n \"description\": \"man dancing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_dancing\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕴️\",\r\n \"description\": \"person in suit levitating\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"business_suit_levitating\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👯\",\r\n \"description\": \"people with bunny ears\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"dancers\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👯♂️\",\r\n \"description\": \"men with bunny ears\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"dancing_men\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👯♀️\",\r\n \"description\": \"women with bunny ears\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"dancing_women\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧖\",\r\n \"description\": \"person in steamy room\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"sauna_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧖♂️\",\r\n \"description\": \"man in steamy room\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"sauna_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧖♀️\",\r\n \"description\": \"woman in steamy room\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"sauna_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧗\",\r\n \"description\": \"person climbing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"climbing\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧗♂️\",\r\n \"description\": \"man climbing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"climbing_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧗♀️\",\r\n \"description\": \"woman climbing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"climbing_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤺\",\r\n \"description\": \"person fencing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"person_fencing\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏇\",\r\n \"description\": \"horse racing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"horse_racing\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛷️\",\r\n \"description\": \"skier\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"skier\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏂\",\r\n \"description\": \"snowboarder\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"snowboarder\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏌️\",\r\n \"description\": \"person golfing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"golfing\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏌️♂️\",\r\n \"description\": \"man golfing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"golfing_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏌️♀️\",\r\n \"description\": \"woman golfing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"golfing_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏄\",\r\n \"description\": \"person surfing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"surfer\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏄♂️\",\r\n \"description\": \"man surfing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"surfing_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏄♀️\",\r\n \"description\": \"woman surfing\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"surfing_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚣\",\r\n \"description\": \"person rowing boat\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"rowboat\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚣♂️\",\r\n \"description\": \"man rowing boat\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"rowing_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚣♀️\",\r\n \"description\": \"woman rowing boat\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"rowing_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏊\",\r\n \"description\": \"person swimming\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"swimmer\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏊♂️\",\r\n \"description\": \"man swimming\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"swimming_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏊♀️\",\r\n \"description\": \"woman swimming\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"swimming_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛹️\",\r\n \"description\": \"person bouncing ball\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bouncing_ball_person\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛹️♂️\",\r\n \"description\": \"man bouncing ball\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bouncing_ball_man\",\r\n \"basketball_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛹️♀️\",\r\n \"description\": \"woman bouncing ball\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bouncing_ball_woman\",\r\n \"basketball_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏋️\",\r\n \"description\": \"person lifting weights\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"weight_lifting\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏋️♂️\",\r\n \"description\": \"man lifting weights\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"weight_lifting_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏋️♀️\",\r\n \"description\": \"woman lifting weights\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"weight_lifting_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚴\",\r\n \"description\": \"person biking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bicyclist\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚴♂️\",\r\n \"description\": \"man biking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"biking_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚴♀️\",\r\n \"description\": \"woman biking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"biking_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚵\",\r\n \"description\": \"person mountain biking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mountain_bicyclist\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚵♂️\",\r\n \"description\": \"man mountain biking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mountain_biking_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚵♀️\",\r\n \"description\": \"woman mountain biking\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"mountain_biking_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤸\",\r\n \"description\": \"person cartwheeling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"cartwheeling\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤸♂️\",\r\n \"description\": \"man cartwheeling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_cartwheeling\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤸♀️\",\r\n \"description\": \"woman cartwheeling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_cartwheeling\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤼\",\r\n \"description\": \"people wrestling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"wrestling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤼♂️\",\r\n \"description\": \"men wrestling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"men_wrestling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤼♀️\",\r\n \"description\": \"women wrestling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"women_wrestling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤽\",\r\n \"description\": \"person playing water polo\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"water_polo\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤽♂️\",\r\n \"description\": \"man playing water polo\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_playing_water_polo\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤽♀️\",\r\n \"description\": \"woman playing water polo\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_playing_water_polo\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤾\",\r\n \"description\": \"person playing handball\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"handball_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤾♂️\",\r\n \"description\": \"man playing handball\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_playing_handball\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤾♀️\",\r\n \"description\": \"woman playing handball\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_playing_handball\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤹\",\r\n \"description\": \"person juggling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"juggling_person\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤹♂️\",\r\n \"description\": \"man juggling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"man_juggling\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤹♀️\",\r\n \"description\": \"woman juggling\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"woman_juggling\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧘\",\r\n \"description\": \"person in lotus position\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"lotus_position\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧘♂️\",\r\n \"description\": \"man in lotus position\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"lotus_position_man\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧘♀️\",\r\n \"description\": \"woman in lotus position\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"lotus_position_woman\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛀\",\r\n \"description\": \"person taking bath\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bath\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛌\",\r\n \"description\": \"person in bed\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"sleeping_bed\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧑🤝🧑\",\r\n \"description\": \"people holding hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"people_holding_hands\"\r\n ],\r\n \"supportsSkinTone\": false,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👭\",\r\n \"description\": \"women holding hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"two_women_holding_hands\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👫\",\r\n \"description\": \"woman and man holding hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couple\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👬\",\r\n \"description\": \"men holding hands\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"two_men_holding_hands\"\r\n ],\r\n \"supportsSkinTone\": true,\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💏\",\r\n \"description\": \"kiss\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couplekiss\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩❤️💋👨\",\r\n \"description\": \"kiss: woman, man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couplekiss_man_woman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨❤️💋👨\",\r\n \"description\": \"kiss: man, man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couplekiss_man_man\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩❤️💋👩\",\r\n \"description\": \"kiss: woman, woman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couplekiss_woman_woman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💑\",\r\n \"description\": \"couple with heart\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couple_with_heart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩❤️👨\",\r\n \"description\": \"couple with heart: woman, man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couple_with_heart_woman_man\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨❤️👨\",\r\n \"description\": \"couple with heart: man, man\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couple_with_heart_man_man\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩❤️👩\",\r\n \"description\": \"couple with heart: woman, woman\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"couple_with_heart_woman_woman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👪\",\r\n \"description\": \"family\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👩👦\",\r\n \"description\": \"family: man, woman, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_woman_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👩👧\",\r\n \"description\": \"family: man, woman, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_woman_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👩👧👦\",\r\n \"description\": \"family: man, woman, girl, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_woman_girl_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👩👦👦\",\r\n \"description\": \"family: man, woman, boy, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_woman_boy_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👩👧👧\",\r\n \"description\": \"family: man, woman, girl, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_woman_girl_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👨👦\",\r\n \"description\": \"family: man, man, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_man_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👨👧\",\r\n \"description\": \"family: man, man, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_man_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👨👧👦\",\r\n \"description\": \"family: man, man, girl, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_man_girl_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👨👦👦\",\r\n \"description\": \"family: man, man, boy, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_man_boy_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👨👧👧\",\r\n \"description\": \"family: man, man, girl, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_man_girl_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👩👦\",\r\n \"description\": \"family: woman, woman, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_woman_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👩👧\",\r\n \"description\": \"family: woman, woman, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_woman_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👩👧👦\",\r\n \"description\": \"family: woman, woman, girl, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_woman_girl_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👩👦👦\",\r\n \"description\": \"family: woman, woman, boy, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_woman_boy_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👩👧👧\",\r\n \"description\": \"family: woman, woman, girl, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_woman_girl_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👦\",\r\n \"description\": \"family: man, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👦👦\",\r\n \"description\": \"family: man, boy, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_boy_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👧\",\r\n \"description\": \"family: man, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👧👦\",\r\n \"description\": \"family: man, girl, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_girl_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👨👧👧\",\r\n \"description\": \"family: man, girl, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_man_girl_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👦\",\r\n \"description\": \"family: woman, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👦👦\",\r\n \"description\": \"family: woman, boy, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_boy_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👧\",\r\n \"description\": \"family: woman, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👧👦\",\r\n \"description\": \"family: woman, girl, boy\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_girl_boy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👩👧👧\",\r\n \"description\": \"family: woman, girl, girl\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"family_woman_girl_girl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗣️\",\r\n \"description\": \"speaking head\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"speaking_head\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👤\",\r\n \"description\": \"bust in silhouette\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"bust_in_silhouette\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👥\",\r\n \"description\": \"busts in silhouette\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"busts_in_silhouette\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👣\",\r\n \"description\": \"footprints\",\r\n \"category\": \"People & Body\",\r\n \"aliases\": [\r\n \"footprints\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐵\",\r\n \"description\": \"monkey face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"monkey_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐒\",\r\n \"description\": \"monkey\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"monkey\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦍\",\r\n \"description\": \"gorilla\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"gorilla\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦧\",\r\n \"description\": \"orangutan\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"orangutan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐶\",\r\n \"description\": \"dog face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐕\",\r\n \"description\": \"dog\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dog2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦮\",\r\n \"description\": \"guide dog\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"guide_dog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐕🦺\",\r\n \"description\": \"service dog\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"service_dog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐩\",\r\n \"description\": \"poodle\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"poodle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐺\",\r\n \"description\": \"wolf\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"wolf\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦊\",\r\n \"description\": \"fox\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"fox_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦝\",\r\n \"description\": \"raccoon\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"raccoon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐱\",\r\n \"description\": \"cat face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐈\",\r\n \"description\": \"cat\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cat2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦁\",\r\n \"description\": \"lion\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"lion\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐯\",\r\n \"description\": \"tiger face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"tiger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐅\",\r\n \"description\": \"tiger\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"tiger2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐆\",\r\n \"description\": \"leopard\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"leopard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐴\",\r\n \"description\": \"horse face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"horse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐎\",\r\n \"description\": \"horse\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"racehorse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦄\",\r\n \"description\": \"unicorn\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"unicorn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦓\",\r\n \"description\": \"zebra\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"zebra\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦌\",\r\n \"description\": \"deer\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"deer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐮\",\r\n \"description\": \"cow face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐂\",\r\n \"description\": \"ox\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"ox\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐃\",\r\n \"description\": \"water buffalo\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"water_buffalo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐄\",\r\n \"description\": \"cow\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cow2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐷\",\r\n \"description\": \"pig face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"pig\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐖\",\r\n \"description\": \"pig\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"pig2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐗\",\r\n \"description\": \"boar\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"boar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐽\",\r\n \"description\": \"pig nose\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"pig_nose\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐏\",\r\n \"description\": \"ram\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"ram\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐑\",\r\n \"description\": \"ewe\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"sheep\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐐\",\r\n \"description\": \"goat\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"goat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐪\",\r\n \"description\": \"camel\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dromedary_camel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐫\",\r\n \"description\": \"two-hump camel\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"camel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦙\",\r\n \"description\": \"llama\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"llama\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦒\",\r\n \"description\": \"giraffe\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"giraffe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐘\",\r\n \"description\": \"elephant\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"elephant\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦏\",\r\n \"description\": \"rhinoceros\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rhinoceros\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦛\",\r\n \"description\": \"hippopotamus\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"hippopotamus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐭\",\r\n \"description\": \"mouse face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"mouse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐁\",\r\n \"description\": \"mouse\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"mouse2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐀\",\r\n \"description\": \"rat\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐹\",\r\n \"description\": \"hamster\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"hamster\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐰\",\r\n \"description\": \"rabbit face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rabbit\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐇\",\r\n \"description\": \"rabbit\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rabbit2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐿️\",\r\n \"description\": \"chipmunk\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"chipmunk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦔\",\r\n \"description\": \"hedgehog\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"hedgehog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦇\",\r\n \"description\": \"bat\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"bat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐻\",\r\n \"description\": \"bear\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"bear\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐻❄️\",\r\n \"description\": \"polar bear\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"polar_bear\"\r\n ],\r\n \"hasMarkdownRepresentation\": false\r\n },\r\n {\r\n \"emojiRaw\": \"🐨\",\r\n \"description\": \"koala\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"koala\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐼\",\r\n \"description\": \"panda\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"panda_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦥\",\r\n \"description\": \"sloth\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"sloth\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦦\",\r\n \"description\": \"otter\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"otter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦨\",\r\n \"description\": \"skunk\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"skunk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦘\",\r\n \"description\": \"kangaroo\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"kangaroo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦡\",\r\n \"description\": \"badger\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"badger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐾\",\r\n \"description\": \"paw prints\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"feet\",\r\n \"paw_prints\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦃\",\r\n \"description\": \"turkey\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"turkey\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐔\",\r\n \"description\": \"chicken\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"chicken\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐓\",\r\n \"description\": \"rooster\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rooster\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐣\",\r\n \"description\": \"hatching chick\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"hatching_chick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐤\",\r\n \"description\": \"baby chick\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"baby_chick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐥\",\r\n \"description\": \"front-facing baby chick\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"hatched_chick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐦\",\r\n \"description\": \"bird\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"bird\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐧\",\r\n \"description\": \"penguin\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"penguin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕊️\",\r\n \"description\": \"dove\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dove\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦅\",\r\n \"description\": \"eagle\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"eagle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦆\",\r\n \"description\": \"duck\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"duck\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦢\",\r\n \"description\": \"swan\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"swan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦉\",\r\n \"description\": \"owl\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"owl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦩\",\r\n \"description\": \"flamingo\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"flamingo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦚\",\r\n \"description\": \"peacock\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"peacock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦜\",\r\n \"description\": \"parrot\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"parrot\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐸\",\r\n \"description\": \"frog\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"frog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐊\",\r\n \"description\": \"crocodile\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"crocodile\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐢\",\r\n \"description\": \"turtle\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"turtle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦎\",\r\n \"description\": \"lizard\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"lizard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐍\",\r\n \"description\": \"snake\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"snake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐲\",\r\n \"description\": \"dragon face\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dragon_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐉\",\r\n \"description\": \"dragon\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dragon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦕\",\r\n \"description\": \"sauropod\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"sauropod\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦖\",\r\n \"description\": \"T-Rex\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"t-rex\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐳\",\r\n \"description\": \"spouting whale\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"whale\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐋\",\r\n \"description\": \"whale\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"whale2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐬\",\r\n \"description\": \"dolphin\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"dolphin\",\r\n \"flipper\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐟\",\r\n \"description\": \"fish\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"fish\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐠\",\r\n \"description\": \"tropical fish\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"tropical_fish\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐡\",\r\n \"description\": \"blowfish\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"blowfish\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦈\",\r\n \"description\": \"shark\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"shark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐙\",\r\n \"description\": \"octopus\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"octopus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐚\",\r\n \"description\": \"spiral shell\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"shell\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐌\",\r\n \"description\": \"snail\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"snail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦋\",\r\n \"description\": \"butterfly\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"butterfly\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐛\",\r\n \"description\": \"bug\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"bug\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐜\",\r\n \"description\": \"ant\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"ant\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐝\",\r\n \"description\": \"honeybee\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"bee\",\r\n \"honeybee\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🐞\",\r\n \"description\": \"lady beetle\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"lady_beetle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦗\",\r\n \"description\": \"cricket\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cricket\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕷️\",\r\n \"description\": \"spider\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"spider\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕸️\",\r\n \"description\": \"spider web\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"spider_web\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦂\",\r\n \"description\": \"scorpion\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"scorpion\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦟\",\r\n \"description\": \"mosquito\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"mosquito\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦠\",\r\n \"description\": \"microbe\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"microbe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💐\",\r\n \"description\": \"bouquet\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"bouquet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌸\",\r\n \"description\": \"cherry blossom\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cherry_blossom\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💮\",\r\n \"description\": \"white flower\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"white_flower\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏵️\",\r\n \"description\": \"rosette\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rosette\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌹\",\r\n \"description\": \"rose\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"rose\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥀\",\r\n \"description\": \"wilted flower\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"wilted_flower\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌺\",\r\n \"description\": \"hibiscus\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"hibiscus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌻\",\r\n \"description\": \"sunflower\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"sunflower\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌼\",\r\n \"description\": \"blossom\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"blossom\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌷\",\r\n \"description\": \"tulip\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"tulip\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌱\",\r\n \"description\": \"seedling\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"seedling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌲\",\r\n \"description\": \"evergreen tree\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"evergreen_tree\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌳\",\r\n \"description\": \"deciduous tree\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"deciduous_tree\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌴\",\r\n \"description\": \"palm tree\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"palm_tree\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌵\",\r\n \"description\": \"cactus\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"cactus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌾\",\r\n \"description\": \"sheaf of rice\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"ear_of_rice\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌿\",\r\n \"description\": \"herb\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"herb\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☘️\",\r\n \"description\": \"shamrock\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"shamrock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍀\",\r\n \"description\": \"four leaf clover\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"four_leaf_clover\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍁\",\r\n \"description\": \"maple leaf\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"maple_leaf\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍂\",\r\n \"description\": \"fallen leaf\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"fallen_leaf\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍃\",\r\n \"description\": \"leaf fluttering in wind\",\r\n \"category\": \"Animals & Nature\",\r\n \"aliases\": [\r\n \"leaves\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍇\",\r\n \"description\": \"grapes\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"grapes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍈\",\r\n \"description\": \"melon\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"melon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍉\",\r\n \"description\": \"watermelon\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"watermelon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍊\",\r\n \"description\": \"tangerine\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"tangerine\",\r\n \"orange\",\r\n \"mandarin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍋\",\r\n \"description\": \"lemon\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"lemon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍌\",\r\n \"description\": \"banana\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"banana\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍍\",\r\n \"description\": \"pineapple\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"pineapple\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥭\",\r\n \"description\": \"mango\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"mango\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍎\",\r\n \"description\": \"red apple\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"apple\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍏\",\r\n \"description\": \"green apple\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"green_apple\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍐\",\r\n \"description\": \"pear\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"pear\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍑\",\r\n \"description\": \"peach\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"peach\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍒\",\r\n \"description\": \"cherries\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cherries\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍓\",\r\n \"description\": \"strawberry\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"strawberry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥝\",\r\n \"description\": \"kiwi fruit\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"kiwi_fruit\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍅\",\r\n \"description\": \"tomato\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"tomato\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥥\",\r\n \"description\": \"coconut\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"coconut\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥑\",\r\n \"description\": \"avocado\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"avocado\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍆\",\r\n \"description\": \"eggplant\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"eggplant\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥔\",\r\n \"description\": \"potato\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"potato\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥕\",\r\n \"description\": \"carrot\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"carrot\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌽\",\r\n \"description\": \"ear of corn\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"corn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌶️\",\r\n \"description\": \"hot pepper\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"hot_pepper\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥒\",\r\n \"description\": \"cucumber\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cucumber\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥬\",\r\n \"description\": \"leafy green\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"leafy_green\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥦\",\r\n \"description\": \"broccoli\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"broccoli\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧄\",\r\n \"description\": \"garlic\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"garlic\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧅\",\r\n \"description\": \"onion\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"onion\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍄\",\r\n \"description\": \"mushroom\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"mushroom\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥜\",\r\n \"description\": \"peanuts\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"peanuts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌰\",\r\n \"description\": \"chestnut\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"chestnut\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍞\",\r\n \"description\": \"bread\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"bread\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥐\",\r\n \"description\": \"croissant\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"croissant\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥖\",\r\n \"description\": \"baguette bread\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"baguette_bread\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥨\",\r\n \"description\": \"pretzel\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"pretzel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥯\",\r\n \"description\": \"bagel\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"bagel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥞\",\r\n \"description\": \"pancakes\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"pancakes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧇\",\r\n \"description\": \"waffle\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"waffle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧀\",\r\n \"description\": \"cheese wedge\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cheese\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍖\",\r\n \"description\": \"meat on bone\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"meat_on_bone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍗\",\r\n \"description\": \"poultry leg\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"poultry_leg\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥩\",\r\n \"description\": \"cut of meat\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cut_of_meat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥓\",\r\n \"description\": \"bacon\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"bacon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍔\",\r\n \"description\": \"hamburger\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"hamburger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍟\",\r\n \"description\": \"french fries\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"fries\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍕\",\r\n \"description\": \"pizza\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"pizza\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌭\",\r\n \"description\": \"hot dog\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"hotdog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥪\",\r\n \"description\": \"sandwich\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"sandwich\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌮\",\r\n \"description\": \"taco\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"taco\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌯\",\r\n \"description\": \"burrito\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"burrito\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥙\",\r\n \"description\": \"stuffed flatbread\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"stuffed_flatbread\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧆\",\r\n \"description\": \"falafel\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"falafel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥚\",\r\n \"description\": \"egg\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"egg\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍳\",\r\n \"description\": \"cooking\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"fried_egg\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥘\",\r\n \"description\": \"shallow pan of food\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"shallow_pan_of_food\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍲\",\r\n \"description\": \"pot of food\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"stew\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥣\",\r\n \"description\": \"bowl with spoon\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"bowl_with_spoon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥗\",\r\n \"description\": \"green salad\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"green_salad\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍿\",\r\n \"description\": \"popcorn\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"popcorn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧈\",\r\n \"description\": \"butter\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"butter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧂\",\r\n \"description\": \"salt\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"salt\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥫\",\r\n \"description\": \"canned food\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"canned_food\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍱\",\r\n \"description\": \"bento box\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"bento\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍘\",\r\n \"description\": \"rice cracker\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"rice_cracker\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍙\",\r\n \"description\": \"rice ball\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"rice_ball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍚\",\r\n \"description\": \"cooked rice\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"rice\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍛\",\r\n \"description\": \"curry rice\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"curry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍜\",\r\n \"description\": \"steaming bowl\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"ramen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍝\",\r\n \"description\": \"spaghetti\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"spaghetti\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍠\",\r\n \"description\": \"roasted sweet potato\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"sweet_potato\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍢\",\r\n \"description\": \"oden\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"oden\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍣\",\r\n \"description\": \"sushi\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"sushi\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍤\",\r\n \"description\": \"fried shrimp\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"fried_shrimp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍥\",\r\n \"description\": \"fish cake with swirl\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"fish_cake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥮\",\r\n \"description\": \"moon cake\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"moon_cake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍡\",\r\n \"description\": \"dango\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"dango\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥟\",\r\n \"description\": \"dumpling\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"dumpling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥠\",\r\n \"description\": \"fortune cookie\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"fortune_cookie\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥡\",\r\n \"description\": \"takeout box\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"takeout_box\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦀\",\r\n \"description\": \"crab\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"crab\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦞\",\r\n \"description\": \"lobster\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"lobster\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦐\",\r\n \"description\": \"shrimp\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"shrimp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦑\",\r\n \"description\": \"squid\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"squid\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦪\",\r\n \"description\": \"oyster\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"oyster\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍦\",\r\n \"description\": \"soft ice cream\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"icecream\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍧\",\r\n \"description\": \"shaved ice\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"shaved_ice\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍨\",\r\n \"description\": \"ice cream\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"ice_cream\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍩\",\r\n \"description\": \"doughnut\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"doughnut\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍪\",\r\n \"description\": \"cookie\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cookie\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎂\",\r\n \"description\": \"birthday cake\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"birthday\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍰\",\r\n \"description\": \"shortcake\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧁\",\r\n \"description\": \"cupcake\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cupcake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥧\",\r\n \"description\": \"pie\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"pie\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍫\",\r\n \"description\": \"chocolate bar\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"chocolate_bar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍬\",\r\n \"description\": \"candy\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"candy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍭\",\r\n \"description\": \"lollipop\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"lollipop\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍮\",\r\n \"description\": \"custard\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"custard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍯\",\r\n \"description\": \"honey pot\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"honey_pot\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍼\",\r\n \"description\": \"baby bottle\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"baby_bottle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥛\",\r\n \"description\": \"glass of milk\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"milk_glass\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☕\",\r\n \"description\": \"hot beverage\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"coffee\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍵\",\r\n \"description\": \"teacup without handle\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"tea\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍶\",\r\n \"description\": \"sake\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"sake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍾\",\r\n \"description\": \"bottle with popping cork\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"champagne\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍷\",\r\n \"description\": \"wine glass\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"wine_glass\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍸\",\r\n \"description\": \"cocktail glass\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cocktail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍹\",\r\n \"description\": \"tropical drink\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"tropical_drink\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍺\",\r\n \"description\": \"beer mug\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"beer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍻\",\r\n \"description\": \"clinking beer mugs\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"beers\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥂\",\r\n \"description\": \"clinking glasses\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"clinking_glasses\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥃\",\r\n \"description\": \"tumbler glass\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"tumbler_glass\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥤\",\r\n \"description\": \"cup with straw\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"cup_with_straw\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧃\",\r\n \"description\": \"beverage box\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"beverage_box\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧉\",\r\n \"description\": \"mate\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"mate\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧊\",\r\n \"description\": \"ice\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"ice_cube\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥢\",\r\n \"description\": \"chopsticks\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"chopsticks\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍽️\",\r\n \"description\": \"fork and knife with plate\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"plate_with_cutlery\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🍴\",\r\n \"description\": \"fork and knife\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"fork_and_knife\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥄\",\r\n \"description\": \"spoon\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"spoon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔪\",\r\n \"description\": \"kitchen knife\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"hocho\",\r\n \"knife\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏺\",\r\n \"description\": \"amphora\",\r\n \"category\": \"Food & Drink\",\r\n \"aliases\": [\r\n \"amphora\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌍\",\r\n \"description\": \"globe showing Europe-Africa\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"earth_africa\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌎\",\r\n \"description\": \"globe showing Americas\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"earth_americas\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌏\",\r\n \"description\": \"globe showing Asia-Australia\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"earth_asia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌐\",\r\n \"description\": \"globe with meridians\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"globe_with_meridians\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗺️\",\r\n \"description\": \"world map\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"world_map\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗾\",\r\n \"description\": \"map of Japan\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"japan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧭\",\r\n \"description\": \"compass\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"compass\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏔️\",\r\n \"description\": \"snow-capped mountain\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mountain_snow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛰️\",\r\n \"description\": \"mountain\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mountain\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌋\",\r\n \"description\": \"volcano\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"volcano\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗻\",\r\n \"description\": \"mount fuji\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mount_fuji\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏕️\",\r\n \"description\": \"camping\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"camping\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏖️\",\r\n \"description\": \"beach with umbrella\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"beach_umbrella\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏜️\",\r\n \"description\": \"desert\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"desert\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏝️\",\r\n \"description\": \"desert island\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"desert_island\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏞️\",\r\n \"description\": \"national park\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"national_park\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏟️\",\r\n \"description\": \"stadium\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"stadium\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏛️\",\r\n \"description\": \"classical building\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"classical_building\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏗️\",\r\n \"description\": \"building construction\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"building_construction\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧱\",\r\n \"description\": \"brick\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bricks\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏘️\",\r\n \"description\": \"houses\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"houses\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏚️\",\r\n \"description\": \"derelict house\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"derelict_house\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏠\",\r\n \"description\": \"house\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"house\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏡\",\r\n \"description\": \"house with garden\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"house_with_garden\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏢\",\r\n \"description\": \"office building\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"office\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏣\",\r\n \"description\": \"Japanese post office\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"post_office\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏤\",\r\n \"description\": \"post office\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"european_post_office\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏥\",\r\n \"description\": \"hospital\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"hospital\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏦\",\r\n \"description\": \"bank\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bank\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏨\",\r\n \"description\": \"hotel\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"hotel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏩\",\r\n \"description\": \"love hotel\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"love_hotel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏪\",\r\n \"description\": \"convenience store\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"convenience_store\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏫\",\r\n \"description\": \"school\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"school\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏬\",\r\n \"description\": \"department store\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"department_store\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏭\",\r\n \"description\": \"factory\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"factory\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏯\",\r\n \"description\": \"Japanese castle\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"japanese_castle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏰\",\r\n \"description\": \"castle\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"european_castle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💒\",\r\n \"description\": \"wedding\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"wedding\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗼\",\r\n \"description\": \"Tokyo tower\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"tokyo_tower\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗽\",\r\n \"description\": \"Statue of Liberty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"statue_of_liberty\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛪\",\r\n \"description\": \"church\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"church\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕌\",\r\n \"description\": \"mosque\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mosque\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛕\",\r\n \"description\": \"hindu temple\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"hindu_temple\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕍\",\r\n \"description\": \"synagogue\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"synagogue\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛩️\",\r\n \"description\": \"shinto shrine\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"shinto_shrine\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕋\",\r\n \"description\": \"kaaba\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"kaaba\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛲\",\r\n \"description\": \"fountain\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"fountain\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛺\",\r\n \"description\": \"tent\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"tent\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌁\",\r\n \"description\": \"foggy\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"foggy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌃\",\r\n \"description\": \"night with stars\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"night_with_stars\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏙️\",\r\n \"description\": \"cityscape\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cityscape\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌄\",\r\n \"description\": \"sunrise over mountains\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sunrise_over_mountains\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌅\",\r\n \"description\": \"sunrise\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sunrise\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌆\",\r\n \"description\": \"cityscape at dusk\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"city_sunset\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌇\",\r\n \"description\": \"sunset\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"city_sunrise\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌉\",\r\n \"description\": \"bridge at night\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bridge_at_night\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♨️\",\r\n \"description\": \"hot springs\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"hotsprings\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎠\",\r\n \"description\": \"carousel horse\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"carousel_horse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎡\",\r\n \"description\": \"ferris wheel\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"ferris_wheel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎢\",\r\n \"description\": \"roller coaster\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"roller_coaster\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💈\",\r\n \"description\": \"barber pole\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"barber\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎪\",\r\n \"description\": \"circus tent\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"circus_tent\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚂\",\r\n \"description\": \"locomotive\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"steam_locomotive\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚃\",\r\n \"description\": \"railway car\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"railway_car\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚄\",\r\n \"description\": \"high-speed train\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bullettrain_side\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚅\",\r\n \"description\": \"bullet train\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bullettrain_front\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚆\",\r\n \"description\": \"train\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"train2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚇\",\r\n \"description\": \"metro\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"metro\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚈\",\r\n \"description\": \"light rail\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"light_rail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚉\",\r\n \"description\": \"station\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"station\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚊\",\r\n \"description\": \"tram\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"tram\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚝\",\r\n \"description\": \"monorail\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"monorail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚞\",\r\n \"description\": \"mountain railway\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mountain_railway\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚋\",\r\n \"description\": \"tram car\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"train\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚌\",\r\n \"description\": \"bus\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚍\",\r\n \"description\": \"oncoming bus\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"oncoming_bus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚎\",\r\n \"description\": \"trolleybus\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"trolleybus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚐\",\r\n \"description\": \"minibus\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"minibus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚑\",\r\n \"description\": \"ambulance\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"ambulance\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚒\",\r\n \"description\": \"fire engine\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"fire_engine\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚓\",\r\n \"description\": \"police car\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"police_car\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚔\",\r\n \"description\": \"oncoming police car\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"oncoming_police_car\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚕\",\r\n \"description\": \"taxi\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"taxi\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚖\",\r\n \"description\": \"oncoming taxi\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"oncoming_taxi\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚗\",\r\n \"description\": \"automobile\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"car\",\r\n \"red_car\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚘\",\r\n \"description\": \"oncoming automobile\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"oncoming_automobile\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚙\",\r\n \"description\": \"sport utility vehicle\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"blue_car\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚚\",\r\n \"description\": \"delivery truck\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"truck\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚛\",\r\n \"description\": \"articulated lorry\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"articulated_lorry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚜\",\r\n \"description\": \"tractor\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"tractor\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏎️\",\r\n \"description\": \"racing car\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"racing_car\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏍️\",\r\n \"description\": \"motorcycle\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"motorcycle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛵\",\r\n \"description\": \"motor scooter\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"motor_scooter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦽\",\r\n \"description\": \"manual wheelchair\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"manual_wheelchair\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦼\",\r\n \"description\": \"motorized wheelchair\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"motorized_wheelchair\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛺\",\r\n \"description\": \"auto rickshaw\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"auto_rickshaw\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚲\",\r\n \"description\": \"bicycle\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bike\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛴\",\r\n \"description\": \"kick scooter\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"kick_scooter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛹\",\r\n \"description\": \"skateboard\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"skateboard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚏\",\r\n \"description\": \"bus stop\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"busstop\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛣️\",\r\n \"description\": \"motorway\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"motorway\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛤️\",\r\n \"description\": \"railway track\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"railway_track\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛢️\",\r\n \"description\": \"oil drum\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"oil_drum\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛽\",\r\n \"description\": \"fuel pump\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"fuelpump\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚨\",\r\n \"description\": \"police car light\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"rotating_light\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚥\",\r\n \"description\": \"horizontal traffic light\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"traffic_light\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚦\",\r\n \"description\": \"vertical traffic light\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"vertical_traffic_light\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛑\",\r\n \"description\": \"stop sign\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"stop_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚧\",\r\n \"description\": \"construction\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"construction\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚓\",\r\n \"description\": \"anchor\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"anchor\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛵\",\r\n \"description\": \"sailboat\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"boat\",\r\n \"sailboat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛶\",\r\n \"description\": \"canoe\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"canoe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚤\",\r\n \"description\": \"speedboat\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"speedboat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛳️\",\r\n \"description\": \"passenger ship\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"passenger_ship\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛴️\",\r\n \"description\": \"ferry\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"ferry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛥️\",\r\n \"description\": \"motor boat\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"motor_boat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚢\",\r\n \"description\": \"ship\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"ship\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✈️\",\r\n \"description\": \"airplane\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"airplane\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛩️\",\r\n \"description\": \"small airplane\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"small_airplane\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛫\",\r\n \"description\": \"airplane departure\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"flight_departure\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛬\",\r\n \"description\": \"airplane arrival\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"flight_arrival\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪂\",\r\n \"description\": \"parachute\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"parachute\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💺\",\r\n \"description\": \"seat\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"seat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚁\",\r\n \"description\": \"helicopter\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"helicopter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚟\",\r\n \"description\": \"suspension railway\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"suspension_railway\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚠\",\r\n \"description\": \"mountain cableway\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mountain_cableway\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚡\",\r\n \"description\": \"aerial tramway\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"aerial_tramway\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛰️\",\r\n \"description\": \"satellite\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"artificial_satellite\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚀\",\r\n \"description\": \"rocket\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"rocket\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛸\",\r\n \"description\": \"flying saucer\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"flying_saucer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛎️\",\r\n \"description\": \"bellhop bell\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"bellhop_bell\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧳\",\r\n \"description\": \"luggage\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"luggage\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⌛\",\r\n \"description\": \"hourglass done\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"hourglass\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏳\",\r\n \"description\": \"hourglass not done\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"hourglass_flowing_sand\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⌚\",\r\n \"description\": \"watch\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"watch\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏰\",\r\n \"description\": \"alarm clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"alarm_clock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏱️\",\r\n \"description\": \"stopwatch\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"stopwatch\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏲️\",\r\n \"description\": \"timer clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"timer_clock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕰️\",\r\n \"description\": \"mantelpiece clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"mantelpiece_clock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕛\",\r\n \"description\": \"twelve o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock12\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕧\",\r\n \"description\": \"twelve-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock1230\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕐\",\r\n \"description\": \"one o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock1\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕜\",\r\n \"description\": \"one-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock130\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕑\",\r\n \"description\": \"two o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕝\",\r\n \"description\": \"two-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock230\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕒\",\r\n \"description\": \"three o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock3\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕞\",\r\n \"description\": \"three-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock330\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕓\",\r\n \"description\": \"four o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock4\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕟\",\r\n \"description\": \"four-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock430\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕔\",\r\n \"description\": \"five o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock5\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕠\",\r\n \"description\": \"five-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock530\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕕\",\r\n \"description\": \"six o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock6\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕡\",\r\n \"description\": \"six-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock630\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕖\",\r\n \"description\": \"seven o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock7\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕢\",\r\n \"description\": \"seven-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock730\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕗\",\r\n \"description\": \"eight o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock8\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕣\",\r\n \"description\": \"eight-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock830\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕘\",\r\n \"description\": \"nine o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock9\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕤\",\r\n \"description\": \"nine-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock930\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕙\",\r\n \"description\": \"ten o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock10\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕥\",\r\n \"description\": \"ten-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock1030\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕚\",\r\n \"description\": \"eleven o’clock\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock11\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕦\",\r\n \"description\": \"eleven-thirty\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"clock1130\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌑\",\r\n \"description\": \"new moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"new_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌒\",\r\n \"description\": \"waxing crescent moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"waxing_crescent_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌓\",\r\n \"description\": \"first quarter moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"first_quarter_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌔\",\r\n \"description\": \"waxing gibbous moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"moon\",\r\n \"waxing_gibbous_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌕\",\r\n \"description\": \"full moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"full_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌖\",\r\n \"description\": \"waning gibbous moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"waning_gibbous_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌗\",\r\n \"description\": \"last quarter moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"last_quarter_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌘\",\r\n \"description\": \"waning crescent moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"waning_crescent_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌙\",\r\n \"description\": \"crescent moon\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"crescent_moon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌚\",\r\n \"description\": \"new moon face\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"new_moon_with_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌛\",\r\n \"description\": \"first quarter moon face\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"first_quarter_moon_with_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌜\",\r\n \"description\": \"last quarter moon face\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"last_quarter_moon_with_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌡️\",\r\n \"description\": \"thermometer\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"thermometer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☀️\",\r\n \"description\": \"sun\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sunny\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌝\",\r\n \"description\": \"full moon face\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"full_moon_with_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌞\",\r\n \"description\": \"sun with face\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sun_with_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪐\",\r\n \"description\": \"ringed planet\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"ringed_planet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⭐\",\r\n \"description\": \"star\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"star\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌟\",\r\n \"description\": \"glowing star\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"star2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌠\",\r\n \"description\": \"shooting star\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"stars\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌌\",\r\n \"description\": \"milky way\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"milky_way\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☁️\",\r\n \"description\": \"cloud\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cloud\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛅\",\r\n \"description\": \"sun behind cloud\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"partly_sunny\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛈️\",\r\n \"description\": \"cloud with lightning and rain\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cloud_with_lightning_and_rain\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌤️\",\r\n \"description\": \"sun behind small cloud\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sun_behind_small_cloud\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌥️\",\r\n \"description\": \"sun behind large cloud\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sun_behind_large_cloud\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌦️\",\r\n \"description\": \"sun behind rain cloud\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"sun_behind_rain_cloud\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌧️\",\r\n \"description\": \"cloud with rain\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cloud_with_rain\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌨️\",\r\n \"description\": \"cloud with snow\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cloud_with_snow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌩️\",\r\n \"description\": \"cloud with lightning\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cloud_with_lightning\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌪️\",\r\n \"description\": \"tornado\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"tornado\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌫️\",\r\n \"description\": \"fog\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"fog\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌬️\",\r\n \"description\": \"wind face\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"wind_face\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌀\",\r\n \"description\": \"cyclone\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"cyclone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌈\",\r\n \"description\": \"rainbow\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"rainbow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌂\",\r\n \"description\": \"closed umbrella\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"closed_umbrella\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☂️\",\r\n \"description\": \"umbrella\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"open_umbrella\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☔\",\r\n \"description\": \"umbrella with rain drops\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"umbrella\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛱️\",\r\n \"description\": \"umbrella on ground\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"parasol_on_ground\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚡\",\r\n \"description\": \"high voltage\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"zap\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❄️\",\r\n \"description\": \"snowflake\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"snowflake\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☃️\",\r\n \"description\": \"snowman\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"snowman_with_snow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛄\",\r\n \"description\": \"snowman without snow\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"snowman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☄️\",\r\n \"description\": \"comet\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"comet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔥\",\r\n \"description\": \"fire\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"fire\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💧\",\r\n \"description\": \"droplet\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"droplet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🌊\",\r\n \"description\": \"water wave\",\r\n \"category\": \"Travel & Places\",\r\n \"aliases\": [\r\n \"ocean\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎃\",\r\n \"description\": \"jack-o-lantern\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"jack_o_lantern\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎄\",\r\n \"description\": \"Christmas tree\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"christmas_tree\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎆\",\r\n \"description\": \"fireworks\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"fireworks\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎇\",\r\n \"description\": \"sparkler\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"sparkler\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧨\",\r\n \"description\": \"firecracker\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"firecracker\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✨\",\r\n \"description\": \"sparkles\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"sparkles\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎈\",\r\n \"description\": \"balloon\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"balloon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎉\",\r\n \"description\": \"party popper\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"tada\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎊\",\r\n \"description\": \"confetti ball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"confetti_ball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎋\",\r\n \"description\": \"tanabata tree\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"tanabata_tree\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎍\",\r\n \"description\": \"pine decoration\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"bamboo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎎\",\r\n \"description\": \"Japanese dolls\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"dolls\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎏\",\r\n \"description\": \"carp streamer\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"flags\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎐\",\r\n \"description\": \"wind chime\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"wind_chime\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎑\",\r\n \"description\": \"moon viewing ceremony\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"rice_scene\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧧\",\r\n \"description\": \"red envelope\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"red_envelope\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎀\",\r\n \"description\": \"ribbon\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"ribbon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎁\",\r\n \"description\": \"wrapped gift\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"gift\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎗️\",\r\n \"description\": \"reminder ribbon\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"reminder_ribbon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎟️\",\r\n \"description\": \"admission tickets\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"tickets\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎫\",\r\n \"description\": \"ticket\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"ticket\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎖️\",\r\n \"description\": \"military medal\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"medal_military\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏆\",\r\n \"description\": \"trophy\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"trophy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏅\",\r\n \"description\": \"sports medal\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"medal_sports\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥇\",\r\n \"description\": \"1st place medal\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"1st_place_medal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥈\",\r\n \"description\": \"2nd place medal\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"2nd_place_medal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥉\",\r\n \"description\": \"3rd place medal\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"3rd_place_medal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚽\",\r\n \"description\": \"soccer ball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"soccer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚾\",\r\n \"description\": \"baseball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"baseball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥎\",\r\n \"description\": \"softball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"softball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏀\",\r\n \"description\": \"basketball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"basketball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏐\",\r\n \"description\": \"volleyball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"volleyball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏈\",\r\n \"description\": \"american football\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"football\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏉\",\r\n \"description\": \"rugby football\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"rugby_football\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎾\",\r\n \"description\": \"tennis\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"tennis\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥏\",\r\n \"description\": \"flying disc\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"flying_disc\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎳\",\r\n \"description\": \"bowling\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"bowling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏏\",\r\n \"description\": \"cricket game\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"cricket_game\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏑\",\r\n \"description\": \"field hockey\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"field_hockey\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏒\",\r\n \"description\": \"ice hockey\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"ice_hockey\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥍\",\r\n \"description\": \"lacrosse\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"lacrosse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏓\",\r\n \"description\": \"ping pong\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"ping_pong\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏸\",\r\n \"description\": \"badminton\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"badminton\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥊\",\r\n \"description\": \"boxing glove\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"boxing_glove\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥋\",\r\n \"description\": \"martial arts uniform\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"martial_arts_uniform\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥅\",\r\n \"description\": \"goal net\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"goal_net\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛳\",\r\n \"description\": \"flag in hole\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"golf\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛸️\",\r\n \"description\": \"ice skate\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"ice_skate\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎣\",\r\n \"description\": \"fishing pole\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"fishing_pole_and_fish\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🤿\",\r\n \"description\": \"diving mask\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"diving_mask\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎽\",\r\n \"description\": \"running shirt\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"running_shirt_with_sash\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎿\",\r\n \"description\": \"skis\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"ski\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛷\",\r\n \"description\": \"sled\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"sled\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥌\",\r\n \"description\": \"curling stone\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"curling_stone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎯\",\r\n \"description\": \"direct hit\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"dart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪀\",\r\n \"description\": \"yo-yo\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"yo_yo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪁\",\r\n \"description\": \"kite\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"kite\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎱\",\r\n \"description\": \"pool 8 ball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"8ball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔮\",\r\n \"description\": \"crystal ball\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"crystal_ball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧿\",\r\n \"description\": \"nazar amulet\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"nazar_amulet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎮\",\r\n \"description\": \"video game\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"video_game\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕹️\",\r\n \"description\": \"joystick\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"joystick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎰\",\r\n \"description\": \"slot machine\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"slot_machine\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎲\",\r\n \"description\": \"game die\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"game_die\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧩\",\r\n \"description\": \"puzzle piece\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"jigsaw\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧸\",\r\n \"description\": \"teddy bear\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"teddy_bear\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪅\",\r\n \"description\": \"piñata\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"pinata\"\r\n ],\r\n \"hasMarkdownRepresentation\": false\r\n },\r\n {\r\n \"emojiRaw\": \"♠️\",\r\n \"description\": \"spade suit\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"spades\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♥️\",\r\n \"description\": \"heart suit\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"hearts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♦️\",\r\n \"description\": \"diamond suit\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"diamonds\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♣️\",\r\n \"description\": \"club suit\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"clubs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♟️\",\r\n \"description\": \"chess pawn\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"chess_pawn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🃏\",\r\n \"description\": \"joker\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"black_joker\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🀄\",\r\n \"description\": \"mahjong red dragon\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"mahjong\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎴\",\r\n \"description\": \"flower playing cards\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"flower_playing_cards\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎭\",\r\n \"description\": \"performing arts\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"performing_arts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖼️\",\r\n \"description\": \"framed picture\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"framed_picture\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎨\",\r\n \"description\": \"artist palette\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"art\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧵\",\r\n \"description\": \"thread\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"thread\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧶\",\r\n \"description\": \"yarn\",\r\n \"category\": \"Activities\",\r\n \"aliases\": [\r\n \"yarn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👓\",\r\n \"description\": \"glasses\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"eyeglasses\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕶️\",\r\n \"description\": \"sunglasses\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"dark_sunglasses\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥽\",\r\n \"description\": \"goggles\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"goggles\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥼\",\r\n \"description\": \"lab coat\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"lab_coat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦺\",\r\n \"description\": \"safety vest\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"safety_vest\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👔\",\r\n \"description\": \"necktie\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"necktie\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👕\",\r\n \"description\": \"t-shirt\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"shirt\",\r\n \"tshirt\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👖\",\r\n \"description\": \"jeans\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"jeans\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧣\",\r\n \"description\": \"scarf\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"scarf\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧤\",\r\n \"description\": \"gloves\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"gloves\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧥\",\r\n \"description\": \"coat\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"coat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧦\",\r\n \"description\": \"socks\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"socks\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👗\",\r\n \"description\": \"dress\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"dress\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👘\",\r\n \"description\": \"kimono\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"kimono\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥻\",\r\n \"description\": \"sari\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"sari\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩱\",\r\n \"description\": \"one-piece swimsuit\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"one_piece_swimsuit\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩲\",\r\n \"description\": \"briefs\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"swim_brief\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩳\",\r\n \"description\": \"shorts\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"shorts\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👙\",\r\n \"description\": \"bikini\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bikini\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👚\",\r\n \"description\": \"woman’s clothes\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"womans_clothes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👛\",\r\n \"description\": \"purse\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"purse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👜\",\r\n \"description\": \"handbag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"handbag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👝\",\r\n \"description\": \"clutch bag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pouch\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛍️\",\r\n \"description\": \"shopping bags\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"shopping\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎒\",\r\n \"description\": \"backpack\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"school_satchel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👞\",\r\n \"description\": \"man’s shoe\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mans_shoe\",\r\n \"shoe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👟\",\r\n \"description\": \"running shoe\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"athletic_shoe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥾\",\r\n \"description\": \"hiking boot\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"hiking_boot\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥿\",\r\n \"description\": \"flat shoe\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"flat_shoe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👠\",\r\n \"description\": \"high-heeled shoe\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"high_heel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👡\",\r\n \"description\": \"woman’s sandal\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"sandal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩰\",\r\n \"description\": \"ballet shoes\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"ballet_shoes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👢\",\r\n \"description\": \"woman’s boot\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"boot\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👑\",\r\n \"description\": \"crown\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"crown\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"👒\",\r\n \"description\": \"woman’s hat\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"womans_hat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎩\",\r\n \"description\": \"top hat\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"tophat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎓\",\r\n \"description\": \"graduation cap\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mortar_board\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧢\",\r\n \"description\": \"billed cap\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"billed_cap\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛑️\",\r\n \"description\": \"rescue worker’s helmet\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"rescue_worker_helmet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📿\",\r\n \"description\": \"prayer beads\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"prayer_beads\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💄\",\r\n \"description\": \"lipstick\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"lipstick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💍\",\r\n \"description\": \"ring\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"ring\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💎\",\r\n \"description\": \"gem stone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"gem\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔇\",\r\n \"description\": \"muted speaker\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mute\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔈\",\r\n \"description\": \"speaker low volume\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"speaker\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔉\",\r\n \"description\": \"speaker medium volume\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"sound\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔊\",\r\n \"description\": \"speaker high volume\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"loud_sound\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📢\",\r\n \"description\": \"loudspeaker\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"loudspeaker\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📣\",\r\n \"description\": \"megaphone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mega\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📯\",\r\n \"description\": \"postal horn\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"postal_horn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔔\",\r\n \"description\": \"bell\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bell\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔕\",\r\n \"description\": \"bell with slash\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"no_bell\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎼\",\r\n \"description\": \"musical score\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"musical_score\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎵\",\r\n \"description\": \"musical note\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"musical_note\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎶\",\r\n \"description\": \"musical notes\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"notes\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎙️\",\r\n \"description\": \"studio microphone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"studio_microphone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎚️\",\r\n \"description\": \"level slider\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"level_slider\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎛️\",\r\n \"description\": \"control knobs\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"control_knobs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎤\",\r\n \"description\": \"microphone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"microphone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎧\",\r\n \"description\": \"headphone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"headphones\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📻\",\r\n \"description\": \"radio\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"radio\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎷\",\r\n \"description\": \"saxophone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"saxophone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎸\",\r\n \"description\": \"guitar\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"guitar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎹\",\r\n \"description\": \"musical keyboard\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"musical_keyboard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎺\",\r\n \"description\": \"trumpet\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"trumpet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎻\",\r\n \"description\": \"violin\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"violin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪕\",\r\n \"description\": \"banjo\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"banjo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🥁\",\r\n \"description\": \"drum\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"drum\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪘\",\r\n \"description\": \"long drum\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"long_drum\"\r\n ],\r\n \"hasMarkdownRepresentation\": false\r\n },\r\n {\r\n \"emojiRaw\": \"📱\",\r\n \"description\": \"mobile phone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"iphone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📲\",\r\n \"description\": \"mobile phone with arrow\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"calling\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☎️\",\r\n \"description\": \"telephone\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"phone\",\r\n \"telephone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📞\",\r\n \"description\": \"telephone receiver\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"telephone_receiver\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📟\",\r\n \"description\": \"pager\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pager\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📠\",\r\n \"description\": \"fax machine\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"fax\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔋\",\r\n \"description\": \"battery\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"battery\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔌\",\r\n \"description\": \"electric plug\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"electric_plug\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💻\",\r\n \"description\": \"laptop\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"computer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖥️\",\r\n \"description\": \"desktop computer\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"desktop_computer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖨️\",\r\n \"description\": \"printer\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"printer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⌨️\",\r\n \"description\": \"keyboard\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"keyboard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖱️\",\r\n \"description\": \"computer mouse\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"computer_mouse\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖲️\",\r\n \"description\": \"trackball\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"trackball\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💽\",\r\n \"description\": \"computer disk\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"minidisc\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💾\",\r\n \"description\": \"floppy disk\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"floppy_disk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💿\",\r\n \"description\": \"optical disk\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"cd\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📀\",\r\n \"description\": \"dvd\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"dvd\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧮\",\r\n \"description\": \"abacus\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"abacus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎥\",\r\n \"description\": \"movie camera\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"movie_camera\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎞️\",\r\n \"description\": \"film frames\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"film_strip\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📽️\",\r\n \"description\": \"film projector\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"film_projector\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎬\",\r\n \"description\": \"clapper board\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"clapper\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📺\",\r\n \"description\": \"television\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"tv\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📷\",\r\n \"description\": \"camera\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"camera\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📸\",\r\n \"description\": \"camera with flash\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"camera_flash\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📹\",\r\n \"description\": \"video camera\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"video_camera\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📼\",\r\n \"description\": \"videocassette\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"vhs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔍\",\r\n \"description\": \"magnifying glass tilted left\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔎\",\r\n \"description\": \"magnifying glass tilted right\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mag_right\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕯️\",\r\n \"description\": \"candle\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"candle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💡\",\r\n \"description\": \"light bulb\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bulb\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔦\",\r\n \"description\": \"flashlight\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"flashlight\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏮\",\r\n \"description\": \"red paper lantern\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"izakaya_lantern\",\r\n \"lantern\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪔\",\r\n \"description\": \"diya lamp\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"diya_lamp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📔\",\r\n \"description\": \"notebook with decorative cover\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"notebook_with_decorative_cover\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📕\",\r\n \"description\": \"closed book\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"closed_book\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📖\",\r\n \"description\": \"open book\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"book\",\r\n \"open_book\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📗\",\r\n \"description\": \"green book\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"green_book\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📘\",\r\n \"description\": \"blue book\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"blue_book\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📙\",\r\n \"description\": \"orange book\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"orange_book\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📚\",\r\n \"description\": \"books\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"books\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📓\",\r\n \"description\": \"notebook\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"notebook\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📒\",\r\n \"description\": \"ledger\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"ledger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📃\",\r\n \"description\": \"page with curl\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"page_with_curl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📜\",\r\n \"description\": \"scroll\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"scroll\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📄\",\r\n \"description\": \"page facing up\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"page_facing_up\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📰\",\r\n \"description\": \"newspaper\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"newspaper\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗞️\",\r\n \"description\": \"rolled-up newspaper\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"newspaper_roll\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📑\",\r\n \"description\": \"bookmark tabs\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bookmark_tabs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔖\",\r\n \"description\": \"bookmark\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bookmark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏷️\",\r\n \"description\": \"label\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"label\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💰\",\r\n \"description\": \"money bag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"moneybag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💴\",\r\n \"description\": \"yen banknote\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"yen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💵\",\r\n \"description\": \"dollar banknote\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"dollar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💶\",\r\n \"description\": \"euro banknote\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"euro\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💷\",\r\n \"description\": \"pound banknote\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pound\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💸\",\r\n \"description\": \"money with wings\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"money_with_wings\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💳\",\r\n \"description\": \"credit card\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"credit_card\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧾\",\r\n \"description\": \"receipt\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"receipt\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💹\",\r\n \"description\": \"chart increasing with yen\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"chart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✉️\",\r\n \"description\": \"envelope\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"envelope\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📧\",\r\n \"description\": \"e-mail\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"email\",\r\n \"e-mail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📨\",\r\n \"description\": \"incoming envelope\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"incoming_envelope\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📩\",\r\n \"description\": \"envelope with arrow\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"envelope_with_arrow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📤\",\r\n \"description\": \"outbox tray\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"outbox_tray\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📥\",\r\n \"description\": \"inbox tray\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"inbox_tray\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📦\",\r\n \"description\": \"package\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"package\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📫\",\r\n \"description\": \"closed mailbox with raised flag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mailbox\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📪\",\r\n \"description\": \"closed mailbox with lowered flag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mailbox_closed\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📬\",\r\n \"description\": \"open mailbox with raised flag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mailbox_with_mail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📭\",\r\n \"description\": \"open mailbox with lowered flag\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"mailbox_with_no_mail\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📮\",\r\n \"description\": \"postbox\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"postbox\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗳️\",\r\n \"description\": \"ballot box with ballot\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"ballot_box\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✏️\",\r\n \"description\": \"pencil\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pencil2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✒️\",\r\n \"description\": \"black nib\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"black_nib\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖋️\",\r\n \"description\": \"fountain pen\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"fountain_pen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖊️\",\r\n \"description\": \"pen\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖌️\",\r\n \"description\": \"paintbrush\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"paintbrush\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖍️\",\r\n \"description\": \"crayon\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"crayon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📝\",\r\n \"description\": \"memo\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"memo\",\r\n \"pencil\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💼\",\r\n \"description\": \"briefcase\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"briefcase\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📁\",\r\n \"description\": \"file folder\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"file_folder\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📂\",\r\n \"description\": \"open file folder\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"open_file_folder\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗂️\",\r\n \"description\": \"card index dividers\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"card_index_dividers\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📅\",\r\n \"description\": \"calendar\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"date\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📆\",\r\n \"description\": \"tear-off calendar\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"calendar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗒️\",\r\n \"description\": \"spiral notepad\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"spiral_notepad\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗓️\",\r\n \"description\": \"spiral calendar\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"spiral_calendar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📇\",\r\n \"description\": \"card index\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"card_index\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📈\",\r\n \"description\": \"chart increasing\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"chart_with_upwards_trend\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📉\",\r\n \"description\": \"chart decreasing\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"chart_with_downwards_trend\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📊\",\r\n \"description\": \"bar chart\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bar_chart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📋\",\r\n \"description\": \"clipboard\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"clipboard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📌\",\r\n \"description\": \"pushpin\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pushpin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📍\",\r\n \"description\": \"round pushpin\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"round_pushpin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📎\",\r\n \"description\": \"paperclip\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"paperclip\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🖇️\",\r\n \"description\": \"linked paperclips\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"paperclips\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📏\",\r\n \"description\": \"straight ruler\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"straight_ruler\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📐\",\r\n \"description\": \"triangular ruler\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"triangular_ruler\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✂️\",\r\n \"description\": \"scissors\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"scissors\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗃️\",\r\n \"description\": \"card file box\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"card_file_box\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗄️\",\r\n \"description\": \"file cabinet\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"file_cabinet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗑️\",\r\n \"description\": \"wastebasket\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"wastebasket\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔒\",\r\n \"description\": \"locked\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"lock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔓\",\r\n \"description\": \"unlocked\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"unlock\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔏\",\r\n \"description\": \"locked with pen\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"lock_with_ink_pen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔐\",\r\n \"description\": \"locked with key\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"closed_lock_with_key\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔑\",\r\n \"description\": \"key\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"key\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗝️\",\r\n \"description\": \"old key\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"old_key\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔨\",\r\n \"description\": \"hammer\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"hammer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪓\",\r\n \"description\": \"axe\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"axe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛏️\",\r\n \"description\": \"pick\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚒️\",\r\n \"description\": \"hammer and pick\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"hammer_and_pick\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛠️\",\r\n \"description\": \"hammer and wrench\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"hammer_and_wrench\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗡️\",\r\n \"description\": \"dagger\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"dagger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚔️\",\r\n \"description\": \"crossed swords\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"crossed_swords\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔫\",\r\n \"description\": \"pistol\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"gun\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏹\",\r\n \"description\": \"bow and arrow\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bow_and_arrow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛡️\",\r\n \"description\": \"shield\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"shield\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔧\",\r\n \"description\": \"wrench\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"wrench\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔩\",\r\n \"description\": \"nut and bolt\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"nut_and_bolt\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚙️\",\r\n \"description\": \"gear\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"gear\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗜️\",\r\n \"description\": \"clamp\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"clamp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚖️\",\r\n \"description\": \"balance scale\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"balance_scale\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🦯\",\r\n \"description\": \"white cane\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"probing_cane\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔗\",\r\n \"description\": \"link\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"link\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛓️\",\r\n \"description\": \"chains\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"chains\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧰\",\r\n \"description\": \"toolbox\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"toolbox\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧲\",\r\n \"description\": \"magnet\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"magnet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚗️\",\r\n \"description\": \"alembic\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"alembic\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧪\",\r\n \"description\": \"test tube\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"test_tube\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧫\",\r\n \"description\": \"petri dish\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"petri_dish\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧬\",\r\n \"description\": \"dna\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"dna\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔬\",\r\n \"description\": \"microscope\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"microscope\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔭\",\r\n \"description\": \"telescope\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"telescope\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📡\",\r\n \"description\": \"satellite antenna\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"satellite\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💉\",\r\n \"description\": \"syringe\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"syringe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩸\",\r\n \"description\": \"drop of blood\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"drop_of_blood\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💊\",\r\n \"description\": \"pill\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"pill\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩹\",\r\n \"description\": \"adhesive bandage\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"adhesive_bandage\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🩺\",\r\n \"description\": \"stethoscope\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"stethoscope\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚪\",\r\n \"description\": \"door\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"door\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛏️\",\r\n \"description\": \"bed\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bed\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛋️\",\r\n \"description\": \"couch and lamp\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"couch_and_lamp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪑\",\r\n \"description\": \"chair\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"chair\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚽\",\r\n \"description\": \"toilet\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"toilet\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚿\",\r\n \"description\": \"shower\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"shower\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛁\",\r\n \"description\": \"bathtub\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"bathtub\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🪒\",\r\n \"description\": \"razor\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"razor\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧴\",\r\n \"description\": \"lotion bottle\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"lotion_bottle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧷\",\r\n \"description\": \"safety pin\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"safety_pin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧹\",\r\n \"description\": \"broom\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"broom\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧺\",\r\n \"description\": \"basket\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"basket\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧻\",\r\n \"description\": \"roll of paper\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"roll_of_paper\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧼\",\r\n \"description\": \"soap\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"soap\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧽\",\r\n \"description\": \"sponge\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"sponge\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🧯\",\r\n \"description\": \"fire extinguisher\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"fire_extinguisher\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛒\",\r\n \"description\": \"shopping cart\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"shopping_cart\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚬\",\r\n \"description\": \"cigarette\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"smoking\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚰️\",\r\n \"description\": \"coffin\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"coffin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚱️\",\r\n \"description\": \"funeral urn\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"funeral_urn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🗿\",\r\n \"description\": \"moai\",\r\n \"category\": \"Objects\",\r\n \"aliases\": [\r\n \"moyai\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏧\",\r\n \"description\": \"ATM sign\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"atm\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚮\",\r\n \"description\": \"litter in bin sign\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"put_litter_in_its_place\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚰\",\r\n \"description\": \"potable water\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"potable_water\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♿\",\r\n \"description\": \"wheelchair symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"wheelchair\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚹\",\r\n \"description\": \"men’s room\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"mens\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚺\",\r\n \"description\": \"women’s room\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"womens\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚻\",\r\n \"description\": \"restroom\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"restroom\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚼\",\r\n \"description\": \"baby symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"baby_symbol\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚾\",\r\n \"description\": \"water closet\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"wc\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛂\",\r\n \"description\": \"passport control\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"passport_control\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛃\",\r\n \"description\": \"customs\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"customs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛄\",\r\n \"description\": \"baggage claim\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"baggage_claim\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛅\",\r\n \"description\": \"left luggage\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"left_luggage\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚠️\",\r\n \"description\": \"warning\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"warning\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚸\",\r\n \"description\": \"children crossing\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"children_crossing\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛔\",\r\n \"description\": \"no entry\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"no_entry\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚫\",\r\n \"description\": \"prohibited\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"no_entry_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚳\",\r\n \"description\": \"no bicycles\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"no_bicycles\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚭\",\r\n \"description\": \"no smoking\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"no_smoking\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚯\",\r\n \"description\": \"no littering\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"do_not_litter\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚱\",\r\n \"description\": \"non-potable water\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"non-potable_water\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚷\",\r\n \"description\": \"no pedestrians\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"no_pedestrians\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📵\",\r\n \"description\": \"no mobile phones\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"no_mobile_phones\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔞\",\r\n \"description\": \"no one under eighteen\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"underage\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☢️\",\r\n \"description\": \"radioactive\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"radioactive\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☣️\",\r\n \"description\": \"biohazard\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"biohazard\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⬆️\",\r\n \"description\": \"up arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_up\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↗️\",\r\n \"description\": \"up-right arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_upper_right\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"➡️\",\r\n \"description\": \"right arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_right\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↘️\",\r\n \"description\": \"down-right arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_lower_right\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⬇️\",\r\n \"description\": \"down arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_down\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↙️\",\r\n \"description\": \"down-left arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_lower_left\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⬅️\",\r\n \"description\": \"left arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_left\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↖️\",\r\n \"description\": \"up-left arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_upper_left\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↕️\",\r\n \"description\": \"up-down arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_up_down\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↔️\",\r\n \"description\": \"left-right arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"left_right_arrow\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↩️\",\r\n \"description\": \"right arrow curving left\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"leftwards_arrow_with_hook\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"↪️\",\r\n \"description\": \"left arrow curving right\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_right_hook\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⤴️\",\r\n \"description\": \"right arrow curving up\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_heading_up\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⤵️\",\r\n \"description\": \"right arrow curving down\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_heading_down\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔃\",\r\n \"description\": \"clockwise vertical arrows\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrows_clockwise\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔄\",\r\n \"description\": \"counterclockwise arrows button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrows_counterclockwise\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔙\",\r\n \"description\": \"BACK arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"back\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔚\",\r\n \"description\": \"END arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"end\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔛\",\r\n \"description\": \"ON! arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"on\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔜\",\r\n \"description\": \"SOON arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"soon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔝\",\r\n \"description\": \"TOP arrow\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"top\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🛐\",\r\n \"description\": \"place of worship\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"place_of_worship\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚛️\",\r\n \"description\": \"atom symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"atom_symbol\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕉️\",\r\n \"description\": \"om\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"om\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✡️\",\r\n \"description\": \"star of David\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"star_of_david\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☸️\",\r\n \"description\": \"wheel of dharma\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"wheel_of_dharma\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☯️\",\r\n \"description\": \"yin yang\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"yin_yang\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✝️\",\r\n \"description\": \"latin cross\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"latin_cross\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☦️\",\r\n \"description\": \"orthodox cross\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"orthodox_cross\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☪️\",\r\n \"description\": \"star and crescent\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"star_and_crescent\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☮️\",\r\n \"description\": \"peace symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"peace_symbol\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🕎\",\r\n \"description\": \"menorah\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"menorah\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔯\",\r\n \"description\": \"dotted six-pointed star\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"six_pointed_star\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♈\",\r\n \"description\": \"Aries\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"aries\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♉\",\r\n \"description\": \"Taurus\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"taurus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♊\",\r\n \"description\": \"Gemini\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"gemini\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♋\",\r\n \"description\": \"Cancer\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"cancer\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♌\",\r\n \"description\": \"Leo\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"leo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♍\",\r\n \"description\": \"Virgo\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"virgo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♎\",\r\n \"description\": \"Libra\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"libra\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♏\",\r\n \"description\": \"Scorpio\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"scorpius\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♐\",\r\n \"description\": \"Sagittarius\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"sagittarius\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♑\",\r\n \"description\": \"Capricorn\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"capricorn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♒\",\r\n \"description\": \"Aquarius\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"aquarius\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♓\",\r\n \"description\": \"Pisces\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"pisces\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⛎\",\r\n \"description\": \"Ophiuchus\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"ophiuchus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔀\",\r\n \"description\": \"shuffle tracks button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"twisted_rightwards_arrows\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔁\",\r\n \"description\": \"repeat button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"repeat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔂\",\r\n \"description\": \"repeat single button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"repeat_one\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"▶️\",\r\n \"description\": \"play button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_forward\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏩\",\r\n \"description\": \"fast-forward button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"fast_forward\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏭️\",\r\n \"description\": \"next track button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"next_track_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏯️\",\r\n \"description\": \"play or pause button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"play_or_pause_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"◀️\",\r\n \"description\": \"reverse button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_backward\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏪\",\r\n \"description\": \"fast reverse button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"rewind\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏮️\",\r\n \"description\": \"last track button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"previous_track_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔼\",\r\n \"description\": \"upwards button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_up_small\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏫\",\r\n \"description\": \"fast up button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_double_up\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔽\",\r\n \"description\": \"downwards button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_down_small\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏬\",\r\n \"description\": \"fast down button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"arrow_double_down\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏸️\",\r\n \"description\": \"pause button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"pause_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏹️\",\r\n \"description\": \"stop button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"stop_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏺️\",\r\n \"description\": \"record button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"record_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⏏️\",\r\n \"description\": \"eject button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"eject_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎦\",\r\n \"description\": \"cinema\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"cinema\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔅\",\r\n \"description\": \"dim button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"low_brightness\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔆\",\r\n \"description\": \"bright button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"high_brightness\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📶\",\r\n \"description\": \"antenna bars\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"signal_strength\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📳\",\r\n \"description\": \"vibration mode\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"vibration_mode\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📴\",\r\n \"description\": \"mobile phone off\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"mobile_phone_off\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♀️\",\r\n \"description\": \"female sign\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"female_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♂️\",\r\n \"description\": \"male sign\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"male_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚧️\",\r\n \"description\": \"transgender symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"transgender_symbol\"\r\n ],\r\n \"hasMarkdownRepresentation\": false\r\n },\r\n {\r\n \"emojiRaw\": \"✖️\",\r\n \"description\": \"multiply\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"heavy_multiplication_x\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"➕\",\r\n \"description\": \"plus\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"heavy_plus_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"➖\",\r\n \"description\": \"minus\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"heavy_minus_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"➗\",\r\n \"description\": \"divide\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"heavy_division_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♾️\",\r\n \"description\": \"infinity\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"infinity\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"‼️\",\r\n \"description\": \"double exclamation mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"bangbang\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⁉️\",\r\n \"description\": \"exclamation question mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"interrobang\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❓\",\r\n \"description\": \"question mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"question\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❔\",\r\n \"description\": \"white question mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"grey_question\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❕\",\r\n \"description\": \"white exclamation mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"grey_exclamation\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❗\",\r\n \"description\": \"exclamation mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"exclamation\",\r\n \"heavy_exclamation_mark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"〰️\",\r\n \"description\": \"wavy dash\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"wavy_dash\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💱\",\r\n \"description\": \"currency exchange\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"currency_exchange\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💲\",\r\n \"description\": \"heavy dollar sign\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"heavy_dollar_sign\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚕️\",\r\n \"description\": \"medical symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"medical_symbol\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"♻️\",\r\n \"description\": \"recycling symbol\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"recycle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚜️\",\r\n \"description\": \"fleur-de-lis\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"fleur_de_lis\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔱\",\r\n \"description\": \"trident emblem\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"trident\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"📛\",\r\n \"description\": \"name badge\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"name_badge\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔰\",\r\n \"description\": \"Japanese symbol for beginner\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"beginner\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⭕\",\r\n \"description\": \"hollow red circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"o\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✅\",\r\n \"description\": \"check mark button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_check_mark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"☑️\",\r\n \"description\": \"check box with check\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"ballot_box_with_check\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✔️\",\r\n \"description\": \"check mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"heavy_check_mark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❌\",\r\n \"description\": \"cross mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"x\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❎\",\r\n \"description\": \"cross mark button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"negative_squared_cross_mark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"➰\",\r\n \"description\": \"curly loop\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"curly_loop\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"➿\",\r\n \"description\": \"double curly loop\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"loop\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"〽️\",\r\n \"description\": \"part alternation mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"part_alternation_mark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✳️\",\r\n \"description\": \"eight-spoked asterisk\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"eight_spoked_asterisk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"✴️\",\r\n \"description\": \"eight-pointed star\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"eight_pointed_black_star\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"❇️\",\r\n \"description\": \"sparkle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"sparkle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"©️\",\r\n \"description\": \"copyright\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"copyright\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"®️\",\r\n \"description\": \"registered\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"registered\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"™️\",\r\n \"description\": \"trade mark\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"tm\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"#️⃣\",\r\n \"description\": \"keycap: #\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"hash\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"*️⃣\",\r\n \"description\": \"keycap: *\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"asterisk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"0️⃣\",\r\n \"description\": \"keycap: 0\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"zero\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"1️⃣\",\r\n \"description\": \"keycap: 1\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"one\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"2️⃣\",\r\n \"description\": \"keycap: 2\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"two\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"3️⃣\",\r\n \"description\": \"keycap: 3\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"three\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"4️⃣\",\r\n \"description\": \"keycap: 4\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"four\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"5️⃣\",\r\n \"description\": \"keycap: 5\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"five\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"6️⃣\",\r\n \"description\": \"keycap: 6\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"six\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"7️⃣\",\r\n \"description\": \"keycap: 7\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"seven\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"8️⃣\",\r\n \"description\": \"keycap: 8\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"eight\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"9️⃣\",\r\n \"description\": \"keycap: 9\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"nine\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔟\",\r\n \"description\": \"keycap: 10\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"keycap_ten\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔠\",\r\n \"description\": \"input latin uppercase\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"capital_abcd\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔡\",\r\n \"description\": \"input latin lowercase\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"abcd\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔢\",\r\n \"description\": \"input numbers\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"1234\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔣\",\r\n \"description\": \"input symbols\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"symbols\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔤\",\r\n \"description\": \"input latin letters\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"abc\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🅰️\",\r\n \"description\": \"A button (blood type)\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"a\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆎\",\r\n \"description\": \"AB button (blood type)\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"ab\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🅱️\",\r\n \"description\": \"B button (blood type)\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"b\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆑\",\r\n \"description\": \"CL button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"cl\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆒\",\r\n \"description\": \"COOL button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"cool\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆓\",\r\n \"description\": \"FREE button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"free\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"ℹ️\",\r\n \"description\": \"information\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"information_source\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆔\",\r\n \"description\": \"ID button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"id\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"Ⓜ️\",\r\n \"description\": \"circled M\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"m\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆕\",\r\n \"description\": \"NEW button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"new\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆖\",\r\n \"description\": \"NG button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"ng\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🅾️\",\r\n \"description\": \"O button (blood type)\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"o2\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆗\",\r\n \"description\": \"OK button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"ok\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🅿️\",\r\n \"description\": \"P button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"parking\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆘\",\r\n \"description\": \"SOS button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"sos\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆙\",\r\n \"description\": \"UP! button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"up\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🆚\",\r\n \"description\": \"VS button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"vs\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈁\",\r\n \"description\": \"Japanese “here” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"koko\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈂️\",\r\n \"description\": \"Japanese “service charge” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"sa\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈷️\",\r\n \"description\": \"Japanese “monthly amount” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u6708\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈶\",\r\n \"description\": \"Japanese “not free of charge” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u6709\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈯\",\r\n \"description\": \"Japanese “reserved” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u6307\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🉐\",\r\n \"description\": \"Japanese “bargain” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"ideograph_advantage\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈹\",\r\n \"description\": \"Japanese “discount” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u5272\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈚\",\r\n \"description\": \"Japanese “free of charge” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u7121\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈲\",\r\n \"description\": \"Japanese “prohibited” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u7981\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🉑\",\r\n \"description\": \"Japanese “acceptable” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"accept\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈸\",\r\n \"description\": \"Japanese “application” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u7533\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈴\",\r\n \"description\": \"Japanese “passing grade” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u5408\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈳\",\r\n \"description\": \"Japanese “vacancy” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u7a7a\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"㊗️\",\r\n \"description\": \"Japanese “congratulations” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"congratulations\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"㊙️\",\r\n \"description\": \"Japanese “secret” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"secret\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈺\",\r\n \"description\": \"Japanese “open for business” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u55b6\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🈵\",\r\n \"description\": \"Japanese “no vacancy” button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"u6e80\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔴\",\r\n \"description\": \"red circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"red_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟠\",\r\n \"description\": \"orange circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"orange_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟡\",\r\n \"description\": \"yellow circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"yellow_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟢\",\r\n \"description\": \"green circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"green_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔵\",\r\n \"description\": \"blue circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"large_blue_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟣\",\r\n \"description\": \"purple circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"purple_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟤\",\r\n \"description\": \"brown circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"brown_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚫\",\r\n \"description\": \"black circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"black_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⚪\",\r\n \"description\": \"white circle\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_circle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟥\",\r\n \"description\": \"red square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"red_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟧\",\r\n \"description\": \"orange square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"orange_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟨\",\r\n \"description\": \"yellow square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"yellow_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟩\",\r\n \"description\": \"green square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"green_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟦\",\r\n \"description\": \"blue square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"blue_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟪\",\r\n \"description\": \"purple square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"purple_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🟫\",\r\n \"description\": \"brown square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"brown_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⬛\",\r\n \"description\": \"black large square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"black_large_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"⬜\",\r\n \"description\": \"white large square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_large_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"◼️\",\r\n \"description\": \"black medium square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"black_medium_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"◻️\",\r\n \"description\": \"white medium square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_medium_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"◾\",\r\n \"description\": \"black medium-small square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"black_medium_small_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"◽\",\r\n \"description\": \"white medium-small square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_medium_small_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"▪️\",\r\n \"description\": \"black small square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"black_small_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"▫️\",\r\n \"description\": \"white small square\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_small_square\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔶\",\r\n \"description\": \"large orange diamond\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"large_orange_diamond\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔷\",\r\n \"description\": \"large blue diamond\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"large_blue_diamond\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔸\",\r\n \"description\": \"small orange diamond\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"small_orange_diamond\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔹\",\r\n \"description\": \"small blue diamond\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"small_blue_diamond\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔺\",\r\n \"description\": \"red triangle pointed up\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"small_red_triangle\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔻\",\r\n \"description\": \"red triangle pointed down\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"small_red_triangle_down\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"💠\",\r\n \"description\": \"diamond with a dot\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"diamond_shape_with_a_dot_inside\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔘\",\r\n \"description\": \"radio button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"radio_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔳\",\r\n \"description\": \"white square button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"white_square_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🔲\",\r\n \"description\": \"black square button\",\r\n \"category\": \"Symbols\",\r\n \"aliases\": [\r\n \"black_square_button\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏁\",\r\n \"description\": \"chequered flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"checkered_flag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🚩\",\r\n \"description\": \"triangular flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"triangular_flag_on_post\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🎌\",\r\n \"description\": \"crossed flags\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"crossed_flags\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏴\",\r\n \"description\": \"black flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"black_flag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏳️\",\r\n \"description\": \"white flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"white_flag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏳️🌈\",\r\n \"description\": \"rainbow flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"rainbow_flag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏳️⚧️\",\r\n \"description\": \"transgender flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"transgender_flag\"\r\n ],\r\n \"hasMarkdownRepresentation\": false\r\n },\r\n {\r\n \"emojiRaw\": \"🏴☠️\",\r\n \"description\": \"pirate flag\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"pirate_flag\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇨\",\r\n \"description\": \"flag: Ascension Island\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ascension_island\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇩\",\r\n \"description\": \"flag: Andorra\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"andorra\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇪\",\r\n \"description\": \"flag: United Arab Emirates\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"united_arab_emirates\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇫\",\r\n \"description\": \"flag: Afghanistan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"afghanistan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇬\",\r\n \"description\": \"flag: Antigua & Barbuda\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"antigua_barbuda\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇮\",\r\n \"description\": \"flag: Anguilla\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"anguilla\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇱\",\r\n \"description\": \"flag: Albania\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"albania\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇲\",\r\n \"description\": \"flag: Armenia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"armenia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇴\",\r\n \"description\": \"flag: Angola\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"angola\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇶\",\r\n \"description\": \"flag: Antarctica\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"antarctica\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇷\",\r\n \"description\": \"flag: Argentina\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"argentina\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇸\",\r\n \"description\": \"flag: American Samoa\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"american_samoa\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇹\",\r\n \"description\": \"flag: Austria\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"austria\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇺\",\r\n \"description\": \"flag: Australia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"australia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇼\",\r\n \"description\": \"flag: Aruba\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"aruba\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇽\",\r\n \"description\": \"flag: Åland Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"aland_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇦🇿\",\r\n \"description\": \"flag: Azerbaijan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"azerbaijan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇦\",\r\n \"description\": \"flag: Bosnia & Herzegovina\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bosnia_herzegovina\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇧\",\r\n \"description\": \"flag: Barbados\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"barbados\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇩\",\r\n \"description\": \"flag: Bangladesh\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bangladesh\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇪\",\r\n \"description\": \"flag: Belgium\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"belgium\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇫\",\r\n \"description\": \"flag: Burkina Faso\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"burkina_faso\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇬\",\r\n \"description\": \"flag: Bulgaria\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bulgaria\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇭\",\r\n \"description\": \"flag: Bahrain\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bahrain\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇮\",\r\n \"description\": \"flag: Burundi\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"burundi\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇯\",\r\n \"description\": \"flag: Benin\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"benin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇱\",\r\n \"description\": \"flag: St. Barthélemy\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_barthelemy\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇲\",\r\n \"description\": \"flag: Bermuda\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bermuda\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇳\",\r\n \"description\": \"flag: Brunei\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"brunei\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇴\",\r\n \"description\": \"flag: Bolivia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bolivia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇶\",\r\n \"description\": \"flag: Caribbean Netherlands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"caribbean_netherlands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇷\",\r\n \"description\": \"flag: Brazil\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"brazil\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇸\",\r\n \"description\": \"flag: Bahamas\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bahamas\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇹\",\r\n \"description\": \"flag: Bhutan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bhutan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇻\",\r\n \"description\": \"flag: Bouvet Island\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"bouvet_island\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇼\",\r\n \"description\": \"flag: Botswana\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"botswana\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇾\",\r\n \"description\": \"flag: Belarus\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"belarus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇧🇿\",\r\n \"description\": \"flag: Belize\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"belize\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇦\",\r\n \"description\": \"flag: Canada\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"canada\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇨\",\r\n \"description\": \"flag: Cocos (Keeling) Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cocos_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇩\",\r\n \"description\": \"flag: Congo - Kinshasa\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"congo_kinshasa\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇫\",\r\n \"description\": \"flag: Central African Republic\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"central_african_republic\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇬\",\r\n \"description\": \"flag: Congo - Brazzaville\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"congo_brazzaville\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇭\",\r\n \"description\": \"flag: Switzerland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"switzerland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇮\",\r\n \"description\": \"flag: Côte d’Ivoire\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cote_divoire\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇰\",\r\n \"description\": \"flag: Cook Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cook_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇱\",\r\n \"description\": \"flag: Chile\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"chile\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇲\",\r\n \"description\": \"flag: Cameroon\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cameroon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇳\",\r\n \"description\": \"flag: China\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cn\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇴\",\r\n \"description\": \"flag: Colombia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"colombia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇵\",\r\n \"description\": \"flag: Clipperton Island\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"clipperton_island\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇷\",\r\n \"description\": \"flag: Costa Rica\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"costa_rica\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇺\",\r\n \"description\": \"flag: Cuba\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cuba\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇻\",\r\n \"description\": \"flag: Cape Verde\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cape_verde\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇼\",\r\n \"description\": \"flag: Curaçao\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"curacao\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇽\",\r\n \"description\": \"flag: Christmas Island\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"christmas_island\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇾\",\r\n \"description\": \"flag: Cyprus\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cyprus\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇨🇿\",\r\n \"description\": \"flag: Czechia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"czech_republic\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇪\",\r\n \"description\": \"flag: Germany\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"de\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇬\",\r\n \"description\": \"flag: Diego Garcia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"diego_garcia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇯\",\r\n \"description\": \"flag: Djibouti\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"djibouti\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇰\",\r\n \"description\": \"flag: Denmark\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"denmark\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇲\",\r\n \"description\": \"flag: Dominica\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"dominica\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇴\",\r\n \"description\": \"flag: Dominican Republic\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"dominican_republic\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇩🇿\",\r\n \"description\": \"flag: Algeria\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"algeria\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇦\",\r\n \"description\": \"flag: Ceuta & Melilla\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ceuta_melilla\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇨\",\r\n \"description\": \"flag: Ecuador\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ecuador\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇪\",\r\n \"description\": \"flag: Estonia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"estonia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇬\",\r\n \"description\": \"flag: Egypt\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"egypt\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇭\",\r\n \"description\": \"flag: Western Sahara\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"western_sahara\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇷\",\r\n \"description\": \"flag: Eritrea\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"eritrea\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇸\",\r\n \"description\": \"flag: Spain\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"es\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇹\",\r\n \"description\": \"flag: Ethiopia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ethiopia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇪🇺\",\r\n \"description\": \"flag: European Union\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"eu\",\r\n \"european_union\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇫🇮\",\r\n \"description\": \"flag: Finland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"finland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇫🇯\",\r\n \"description\": \"flag: Fiji\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"fiji\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇫🇰\",\r\n \"description\": \"flag: Falkland Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"falkland_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇫🇲\",\r\n \"description\": \"flag: Micronesia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"micronesia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇫🇴\",\r\n \"description\": \"flag: Faroe Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"faroe_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇫🇷\",\r\n \"description\": \"flag: France\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"fr\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇦\",\r\n \"description\": \"flag: Gabon\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"gabon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇧\",\r\n \"description\": \"flag: United Kingdom\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"gb\",\r\n \"uk\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇩\",\r\n \"description\": \"flag: Grenada\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"grenada\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇪\",\r\n \"description\": \"flag: Georgia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"georgia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇫\",\r\n \"description\": \"flag: French Guiana\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"french_guiana\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇬\",\r\n \"description\": \"flag: Guernsey\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guernsey\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇭\",\r\n \"description\": \"flag: Ghana\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ghana\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇮\",\r\n \"description\": \"flag: Gibraltar\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"gibraltar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇱\",\r\n \"description\": \"flag: Greenland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"greenland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇲\",\r\n \"description\": \"flag: Gambia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"gambia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇳\",\r\n \"description\": \"flag: Guinea\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guinea\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇵\",\r\n \"description\": \"flag: Guadeloupe\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guadeloupe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇶\",\r\n \"description\": \"flag: Equatorial Guinea\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"equatorial_guinea\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇷\",\r\n \"description\": \"flag: Greece\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"greece\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇸\",\r\n \"description\": \"flag: South Georgia & South Sandwich Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"south_georgia_south_sandwich_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇹\",\r\n \"description\": \"flag: Guatemala\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guatemala\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇺\",\r\n \"description\": \"flag: Guam\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guam\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇼\",\r\n \"description\": \"flag: Guinea-Bissau\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guinea_bissau\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇬🇾\",\r\n \"description\": \"flag: Guyana\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"guyana\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇭🇰\",\r\n \"description\": \"flag: Hong Kong SAR China\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"hong_kong\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇭🇲\",\r\n \"description\": \"flag: Heard & McDonald Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"heard_mcdonald_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇭🇳\",\r\n \"description\": \"flag: Honduras\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"honduras\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇭🇷\",\r\n \"description\": \"flag: Croatia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"croatia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇭🇹\",\r\n \"description\": \"flag: Haiti\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"haiti\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇭🇺\",\r\n \"description\": \"flag: Hungary\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"hungary\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇨\",\r\n \"description\": \"flag: Canary Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"canary_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇩\",\r\n \"description\": \"flag: Indonesia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"indonesia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇪\",\r\n \"description\": \"flag: Ireland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ireland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇱\",\r\n \"description\": \"flag: Israel\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"israel\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇲\",\r\n \"description\": \"flag: Isle of Man\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"isle_of_man\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇳\",\r\n \"description\": \"flag: India\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"india\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇴\",\r\n \"description\": \"flag: British Indian Ocean Territory\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"british_indian_ocean_territory\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇶\",\r\n \"description\": \"flag: Iraq\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"iraq\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇷\",\r\n \"description\": \"flag: Iran\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"iran\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇸\",\r\n \"description\": \"flag: Iceland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"iceland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇮🇹\",\r\n \"description\": \"flag: Italy\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"it\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇯🇪\",\r\n \"description\": \"flag: Jersey\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"jersey\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇯🇲\",\r\n \"description\": \"flag: Jamaica\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"jamaica\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇯🇴\",\r\n \"description\": \"flag: Jordan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"jordan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇯🇵\",\r\n \"description\": \"flag: Japan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"jp\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇪\",\r\n \"description\": \"flag: Kenya\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kenya\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇬\",\r\n \"description\": \"flag: Kyrgyzstan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kyrgyzstan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇭\",\r\n \"description\": \"flag: Cambodia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cambodia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇮\",\r\n \"description\": \"flag: Kiribati\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kiribati\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇲\",\r\n \"description\": \"flag: Comoros\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"comoros\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇳\",\r\n \"description\": \"flag: St. Kitts & Nevis\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_kitts_nevis\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇵\",\r\n \"description\": \"flag: North Korea\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"north_korea\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇷\",\r\n \"description\": \"flag: South Korea\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kr\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇼\",\r\n \"description\": \"flag: Kuwait\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kuwait\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇾\",\r\n \"description\": \"flag: Cayman Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"cayman_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇰🇿\",\r\n \"description\": \"flag: Kazakhstan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kazakhstan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇦\",\r\n \"description\": \"flag: Laos\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"laos\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇧\",\r\n \"description\": \"flag: Lebanon\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"lebanon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇨\",\r\n \"description\": \"flag: St. Lucia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_lucia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇮\",\r\n \"description\": \"flag: Liechtenstein\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"liechtenstein\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇰\",\r\n \"description\": \"flag: Sri Lanka\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"sri_lanka\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇷\",\r\n \"description\": \"flag: Liberia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"liberia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇸\",\r\n \"description\": \"flag: Lesotho\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"lesotho\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇹\",\r\n \"description\": \"flag: Lithuania\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"lithuania\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇺\",\r\n \"description\": \"flag: Luxembourg\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"luxembourg\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇻\",\r\n \"description\": \"flag: Latvia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"latvia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇱🇾\",\r\n \"description\": \"flag: Libya\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"libya\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇦\",\r\n \"description\": \"flag: Morocco\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"morocco\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇨\",\r\n \"description\": \"flag: Monaco\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"monaco\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇩\",\r\n \"description\": \"flag: Moldova\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"moldova\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇪\",\r\n \"description\": \"flag: Montenegro\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"montenegro\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇫\",\r\n \"description\": \"flag: St. Martin\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_martin\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇬\",\r\n \"description\": \"flag: Madagascar\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"madagascar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇭\",\r\n \"description\": \"flag: Marshall Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"marshall_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇰\",\r\n \"description\": \"flag: North Macedonia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"macedonia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇱\",\r\n \"description\": \"flag: Mali\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mali\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇲\",\r\n \"description\": \"flag: Myanmar (Burma)\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"myanmar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇳\",\r\n \"description\": \"flag: Mongolia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mongolia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇴\",\r\n \"description\": \"flag: Macao SAR China\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"macau\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇵\",\r\n \"description\": \"flag: Northern Mariana Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"northern_mariana_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇶\",\r\n \"description\": \"flag: Martinique\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"martinique\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇷\",\r\n \"description\": \"flag: Mauritania\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mauritania\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇸\",\r\n \"description\": \"flag: Montserrat\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"montserrat\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇹\",\r\n \"description\": \"flag: Malta\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"malta\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇺\",\r\n \"description\": \"flag: Mauritius\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mauritius\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇻\",\r\n \"description\": \"flag: Maldives\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"maldives\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇼\",\r\n \"description\": \"flag: Malawi\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"malawi\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇽\",\r\n \"description\": \"flag: Mexico\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mexico\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇾\",\r\n \"description\": \"flag: Malaysia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"malaysia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇲🇿\",\r\n \"description\": \"flag: Mozambique\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mozambique\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇦\",\r\n \"description\": \"flag: Namibia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"namibia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇨\",\r\n \"description\": \"flag: New Caledonia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"new_caledonia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇪\",\r\n \"description\": \"flag: Niger\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"niger\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇫\",\r\n \"description\": \"flag: Norfolk Island\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"norfolk_island\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇬\",\r\n \"description\": \"flag: Nigeria\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"nigeria\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇮\",\r\n \"description\": \"flag: Nicaragua\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"nicaragua\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇱\",\r\n \"description\": \"flag: Netherlands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"netherlands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇴\",\r\n \"description\": \"flag: Norway\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"norway\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇵\",\r\n \"description\": \"flag: Nepal\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"nepal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇷\",\r\n \"description\": \"flag: Nauru\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"nauru\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇺\",\r\n \"description\": \"flag: Niue\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"niue\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇳🇿\",\r\n \"description\": \"flag: New Zealand\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"new_zealand\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇴🇲\",\r\n \"description\": \"flag: Oman\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"oman\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇦\",\r\n \"description\": \"flag: Panama\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"panama\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇪\",\r\n \"description\": \"flag: Peru\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"peru\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇫\",\r\n \"description\": \"flag: French Polynesia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"french_polynesia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇬\",\r\n \"description\": \"flag: Papua New Guinea\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"papua_new_guinea\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇭\",\r\n \"description\": \"flag: Philippines\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"philippines\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇰\",\r\n \"description\": \"flag: Pakistan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"pakistan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇱\",\r\n \"description\": \"flag: Poland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"poland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇲\",\r\n \"description\": \"flag: St. Pierre & Miquelon\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_pierre_miquelon\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇳\",\r\n \"description\": \"flag: Pitcairn Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"pitcairn_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇷\",\r\n \"description\": \"flag: Puerto Rico\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"puerto_rico\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇸\",\r\n \"description\": \"flag: Palestinian Territories\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"palestinian_territories\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇹\",\r\n \"description\": \"flag: Portugal\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"portugal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇼\",\r\n \"description\": \"flag: Palau\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"palau\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇵🇾\",\r\n \"description\": \"flag: Paraguay\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"paraguay\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇶🇦\",\r\n \"description\": \"flag: Qatar\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"qatar\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇷🇪\",\r\n \"description\": \"flag: Réunion\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"reunion\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇷🇴\",\r\n \"description\": \"flag: Romania\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"romania\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇷🇸\",\r\n \"description\": \"flag: Serbia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"serbia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇷🇺\",\r\n \"description\": \"flag: Russia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ru\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇷🇼\",\r\n \"description\": \"flag: Rwanda\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"rwanda\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇦\",\r\n \"description\": \"flag: Saudi Arabia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"saudi_arabia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇧\",\r\n \"description\": \"flag: Solomon Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"solomon_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇨\",\r\n \"description\": \"flag: Seychelles\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"seychelles\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇩\",\r\n \"description\": \"flag: Sudan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"sudan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇪\",\r\n \"description\": \"flag: Sweden\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"sweden\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇬\",\r\n \"description\": \"flag: Singapore\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"singapore\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇭\",\r\n \"description\": \"flag: St. Helena\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_helena\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇮\",\r\n \"description\": \"flag: Slovenia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"slovenia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇯\",\r\n \"description\": \"flag: Svalbard & Jan Mayen\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"svalbard_jan_mayen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇰\",\r\n \"description\": \"flag: Slovakia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"slovakia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇱\",\r\n \"description\": \"flag: Sierra Leone\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"sierra_leone\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇲\",\r\n \"description\": \"flag: San Marino\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"san_marino\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇳\",\r\n \"description\": \"flag: Senegal\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"senegal\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇴\",\r\n \"description\": \"flag: Somalia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"somalia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇷\",\r\n \"description\": \"flag: Suriname\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"suriname\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇸\",\r\n \"description\": \"flag: South Sudan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"south_sudan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇹\",\r\n \"description\": \"flag: São Tomé & Príncipe\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"sao_tome_principe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇻\",\r\n \"description\": \"flag: El Salvador\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"el_salvador\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇽\",\r\n \"description\": \"flag: Sint Maarten\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"sint_maarten\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇾\",\r\n \"description\": \"flag: Syria\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"syria\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇸🇿\",\r\n \"description\": \"flag: Eswatini\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"swaziland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇦\",\r\n \"description\": \"flag: Tristan da Cunha\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tristan_da_cunha\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇨\",\r\n \"description\": \"flag: Turks & Caicos Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"turks_caicos_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇩\",\r\n \"description\": \"flag: Chad\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"chad\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇫\",\r\n \"description\": \"flag: French Southern Territories\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"french_southern_territories\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇬\",\r\n \"description\": \"flag: Togo\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"togo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇭\",\r\n \"description\": \"flag: Thailand\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"thailand\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇯\",\r\n \"description\": \"flag: Tajikistan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tajikistan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇰\",\r\n \"description\": \"flag: Tokelau\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tokelau\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇱\",\r\n \"description\": \"flag: Timor-Leste\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"timor_leste\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇲\",\r\n \"description\": \"flag: Turkmenistan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"turkmenistan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇳\",\r\n \"description\": \"flag: Tunisia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tunisia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇴\",\r\n \"description\": \"flag: Tonga\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tonga\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇷\",\r\n \"description\": \"flag: Turkey\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tr\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇹\",\r\n \"description\": \"flag: Trinidad & Tobago\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"trinidad_tobago\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇻\",\r\n \"description\": \"flag: Tuvalu\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tuvalu\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇼\",\r\n \"description\": \"flag: Taiwan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"taiwan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇹🇿\",\r\n \"description\": \"flag: Tanzania\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"tanzania\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇦\",\r\n \"description\": \"flag: Ukraine\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"ukraine\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇬\",\r\n \"description\": \"flag: Uganda\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"uganda\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇲\",\r\n \"description\": \"flag: U.S. Outlying Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"us_outlying_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇳\",\r\n \"description\": \"flag: United Nations\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"united_nations\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇸\",\r\n \"description\": \"flag: United States\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"us\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇾\",\r\n \"description\": \"flag: Uruguay\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"uruguay\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇺🇿\",\r\n \"description\": \"flag: Uzbekistan\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"uzbekistan\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇦\",\r\n \"description\": \"flag: Vatican City\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"vatican_city\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇨\",\r\n \"description\": \"flag: St. Vincent & Grenadines\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"st_vincent_grenadines\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇪\",\r\n \"description\": \"flag: Venezuela\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"venezuela\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇬\",\r\n \"description\": \"flag: British Virgin Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"british_virgin_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇮\",\r\n \"description\": \"flag: U.S. Virgin Islands\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"us_virgin_islands\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇳\",\r\n \"description\": \"flag: Vietnam\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"vietnam\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇻🇺\",\r\n \"description\": \"flag: Vanuatu\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"vanuatu\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇼🇫\",\r\n \"description\": \"flag: Wallis & Futuna\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"wallis_futuna\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇼🇸\",\r\n \"description\": \"flag: Samoa\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"samoa\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇽🇰\",\r\n \"description\": \"flag: Kosovo\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"kosovo\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇾🇪\",\r\n \"description\": \"flag: Yemen\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"yemen\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇾🇹\",\r\n \"description\": \"flag: Mayotte\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"mayotte\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇿🇦\",\r\n \"description\": \"flag: South Africa\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"south_africa\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇿🇲\",\r\n \"description\": \"flag: Zambia\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"zambia\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🇿🇼\",\r\n \"description\": \"flag: Zimbabwe\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"zimbabwe\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏴\",\r\n \"description\": \"flag: England\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"england\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏴\",\r\n \"description\": \"flag: Scotland\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"scotland\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n },\r\n {\r\n \"emojiRaw\": \"🏴\",\r\n \"description\": \"flag: Wales\",\r\n \"category\": \"Flags\",\r\n \"aliases\": [\r\n \"wales\"\r\n ],\r\n \"hasMarkdownRepresentation\": true\r\n }\r\n];\r\n\r\nexport default emjois;\r\n","/*\r\n * emoji.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport kEmojis from './emojis-all';\r\n\r\nexport const kEmojiAttr = 0;\r\nexport const kEmojiContent = 1;\r\n\r\n// A raw emoji which doesn't include skin tone information\r\nexport interface EmojiRaw {\r\n emojiRaw: string;\r\n aliases: string[];\r\n category: string;\r\n description: string;\r\n supportsSkinTone?: boolean;\r\n hasMarkdownRepresentation: boolean;\r\n}\r\n\r\n// A complete emoji that may additional render skintone\r\nexport interface Emoji extends EmojiRaw {\r\n emoji: string;\r\n skinTone: SkinTone;\r\n}\r\n\r\n// Skin tones that are permitted for emoji\r\n// None = user hasn't expressed a preference\r\n// Default = don't apply a skin tone (use yellow emoji)\r\nexport enum SkinTone {\r\n None = -1,\r\n Default = 0,\r\n Light = 0x1f3fb,\r\n MediumLight = 0x1f3fc,\r\n Medium = 0x1f3fd,\r\n MediumDark = 0x1f3fe,\r\n Dark = 0x1f3ff,\r\n}\r\n\r\nfunction hasSkinTone(skinTone: SkinTone): boolean {\r\n return skinTone !== SkinTone.None && skinTone !== SkinTone.Default;\r\n}\r\n\r\nexport function emojis(skinTone: SkinTone): Emoji[] {\r\n return kEmojis.map(emoji => emojiWithSkinTone(emoji, skinTone));\r\n}\r\n\r\nexport function emojiCategories(): string[] {\r\n return kEmojis\r\n .map(emoji => emoji.category)\r\n .filter((catgegory, index, categories) => categories.indexOf(catgegory) === index);\r\n}\r\n\r\nexport function emojiFromString(emojiString: string, skinTone: SkinTone): Emoji | undefined {\r\n return emojis(skinTone).find(em => em.emoji === emojiString);\r\n}\r\n\r\nexport function emojiWithSkinTonePreference(emoji: EmojiRaw, skinTone: SkinTone): Emoji {\r\n return emojiWithSkinTone(emoji, skinTone);\r\n}\r\n\r\n// Find a matching non skin toned emoji for a given string\r\nexport function emojiFromChar(emojiString: string): EmojiRaw | undefined {\r\n return kEmojis.find(emoji => emoji.emojiRaw === emojiString);\r\n}\r\n\r\n// Returns a non skin tonned emoji for a given alias.\r\nexport function emojiFromAlias(emojiAlias: string): EmojiRaw | undefined {\r\n for (const emoji of kEmojis) {\r\n if (emoji.aliases.includes(emojiAlias)) {\r\n return emoji;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\n// Returns an array of skin toned emoji including the unskintoned emoji. If the emoji\r\n// doesn't support skin tones, this returns the original emoji.\r\nexport function emojiForAllSkinTones(emoji: EmojiRaw): Emoji[] {\r\n if (emoji.supportsSkinTone) {\r\n return [\r\n emojiWithSkinTone(emoji, SkinTone.Default),\r\n emojiWithSkinTone(emoji, SkinTone.Light),\r\n emojiWithSkinTone(emoji, SkinTone.MediumLight),\r\n emojiWithSkinTone(emoji, SkinTone.Medium),\r\n emojiWithSkinTone(emoji, SkinTone.MediumDark),\r\n emojiWithSkinTone(emoji, SkinTone.Dark),\r\n ];\r\n } else {\r\n return [emojiWithSkinTone(emoji, SkinTone.Default)];\r\n }\r\n}\r\n\r\n// Returns a skin toned version of the emoji, or the original emoji if it\r\n// doesn't support skin tones\r\nfunction emojiWithSkinTone(emoji: EmojiRaw, skinTone: SkinTone): Emoji {\r\n if (!emoji.supportsSkinTone) {\r\n return { ...emoji, emoji: emoji.emojiRaw, skinTone: SkinTone.Default };\r\n }\r\n\r\n const skinToneEmoji: Emoji = {\r\n emojiRaw: emoji.emojiRaw,\r\n aliases: emoji.aliases,\r\n category: emoji.category,\r\n description: emoji.description,\r\n supportsSkinTone: emoji.supportsSkinTone,\r\n hasMarkdownRepresentation: emoji.hasMarkdownRepresentation,\r\n emoji: emoji.emojiRaw + characterForSkinTone(skinTone), //\r\n skinTone,\r\n };\r\n return skinToneEmoji;\r\n}\r\n\r\n// No skin tone returns an empty string, otherwise the skintone codepoint\r\n// is converted into a string\r\nfunction characterForSkinTone(skinTone: SkinTone): string {\r\n return hasSkinTone(skinTone) ? String.fromCodePoint(skinTone) : '';\r\n}\r\n","/*\r\n * ui.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { CompletionList } from 'vscode-languageserver-types';\r\n\r\nimport { SkinTone } from './emoji';\r\n\r\nimport { \r\n EditorUISpelling, \r\n EditorDialogs, \r\n EditorDisplay, \r\n EditorUIImageResolver, \r\n CodeViewCompletionContext, \r\n CodeViewExecute, \r\n CodeViewActiveBlockContext, \r\n DiagramState, \r\n CodeViewCellContext\r\n} from 'editor-types';\r\n\r\nexport * from './spelling';\r\nexport { SkinTone } from './emoji';\r\nexport type { EditorDisplay };\r\n\r\nexport interface EditorUI {\r\n dialogs: EditorDialogs;\r\n display: EditorDisplay;\r\n context: EditorUIContext;\r\n prefs: EditorUIPrefs;\r\n images: EditorUIImages;\r\n math?: EditorUIMath;\r\n spelling?: EditorUISpelling;\r\n codeview?: EditorUICodeView;\r\n chunks?: EditorUIChunks;\r\n}\r\n\r\n/**\r\n * Callbacks supplied to the host to interact with a code chunk and its output.\r\n */\r\nexport interface EditorUIChunkCallbacks {\r\n getPos: () => number;\r\n scrollIntoView: (ele: HTMLElement) => void;\r\n scrollCursorIntoView: () => void;\r\n getTextContent: () => string;\r\n}\r\n\r\nexport interface EditorUIChunks {\r\n // create a code chunk editor\r\n createChunkEditor: (type: string, element: Element, index: number, classes: string[], callbacks: EditorUIChunkCallbacks) => ChunkEditor;\r\n\r\n // expand or collapse all chunk editors\r\n setChunksExpanded: (expanded: boolean) => void;\r\n}\r\n\r\nexport interface ChunkEditor {\r\n editor: unknown;\r\n setMode(mode: string): void;\r\n executeSelection(): void;\r\n element: HTMLElement;\r\n destroy(): void;\r\n setExpanded(expanded: boolean): void;\r\n getExpanded(): boolean;\r\n}\r\n\r\n\r\nexport interface EditorMath {\r\n typeset: (el: HTMLElement, math: string, priority: boolean) => Promise<boolean>;\r\n}\r\n\r\nexport interface EditorUIContext extends EditorUIImageResolver {\r\n\r\n // are we running in windows desktop mode?\r\n isWindowsDesktop: () => boolean;\r\n\r\n // check if we are the active tab\r\n isActiveTab: () => boolean;\r\n\r\n // get the path to the current document\r\n getDocumentPath: () => string | null;\r\n\r\n // ensure the edited document is saved on the server before proceeding\r\n // (note this just means that the server has a copy of it for e.g.\r\n // indexing xrefs, from the user's standpoint the doc is still dirty)\r\n withSavedDocument: () => Promise<boolean>;\r\n\r\n // get the default directory for resources (e.g. where relative links point to)\r\n getDefaultResourceDir: () => string;\r\n\r\n // map from a resource reference (e.g. images/foo.png) to a URL we can use in the document\r\n mapResourceToURL: (path: string) => string | Promise<string>;\r\n\r\n // watch a resource for changes (returns an unsubscribe function)\r\n watchResource: (path: string, notify: VoidFunction) => VoidFunction;\r\n\r\n // translate a string\r\n translateText: (text: string) => string;\r\n\r\n // are there dropped uris available?\r\n droppedUris: () => string[] | null;\r\n\r\n // uris from the clipboard\r\n clipboardUris: () => Promise<string[] | null>;\r\n\r\n // image from the clipboard (returned as file path)\r\n clipboardImage: () => Promise<string | null>;\r\n\r\n // get the current username\r\n getUsername?: () => string;\r\n\r\n // reopen the file in source mode\r\n reopenInSourceMode?: () => void,\r\n\r\n // executable languages\r\n executableLanguges?: () => string[]\r\n}\r\n\r\nexport interface EditorUIMath {\r\n typeset: (el: HTMLElement, text: string, priority: boolean) => Promise<boolean>;\r\n}\r\n\r\nexport interface EditorUICodeView {\r\n codeViewAssist: (context: CodeViewCellContext) => Promise<void>;\r\n codeViewExecute: (execute: CodeViewExecute, context: CodeViewActiveBlockContext) => Promise<void>;\r\n codeViewCompletions: (context: CodeViewCompletionContext) => Promise<CompletionList>;\r\n codeViewPreviewDiagram: (state: DiagramState, activate: boolean) => Promise<void>;\r\n}\r\n\r\nexport const kListSpacingTight = 'tight';\r\nexport const kListSpacingSpaced = 'spaced';\r\nexport type ListSpacing = 'tight' | 'spaced';\r\n\r\n\r\nexport interface EditorUIPrefs {\r\n realtimeSpelling: () => boolean;\r\n darkMode: () => boolean;\r\n listSpacing: () => ListSpacing;\r\n equationPreview: () => boolean;\r\n packageListingEnabled: () => boolean;\r\n tabKeyMoveFocus: () => boolean;\r\n emojiSkinTone: () => SkinTone;\r\n setEmojiSkinTone: (skinTone: SkinTone) => void;\r\n zoteroUseBetterBibtex: () => boolean;\r\n setBibliographyDefaultType: (type: string) => void;\r\n bibliographyDefaultType: () => string;\r\n citationDefaultInText: () => boolean;\r\n setCitationDefaultInText: (value: boolean) => void;\r\n spacesForTab: () => boolean,\r\n tabWidth: () => number,\r\n autoClosingBrackets: () => boolean,\r\n highlightSelectedWord: () => boolean,\r\n lineNumbers: () => boolean,\r\n showWhitespace: () => boolean,\r\n blinkingCursor: () => boolean,\r\n quickSuggestions: () => boolean\r\n}\r\n\r\n\r\nexport interface EditorUIImages {\r\n copy: string;\r\n properties: string;\r\n properties_deco: string;\r\n properties_deco_dark: string;\r\n removelink: string;\r\n runchunk: string;\r\n runprevchunks: string;\r\n search: string;\r\n search_progress: string;\r\n omni_insert: {\r\n generic: string;\r\n heading1: string;\r\n heading1_dark: string;\r\n heading2: string;\r\n heading2_dark: string;\r\n heading3: string;\r\n heading3_dark: string;\r\n heading4: string;\r\n heading4_dark: string;\r\n ordered_list: string;\r\n ordered_list_dark: string;\r\n bullet_list: string;\r\n bullet_list_dark: string;\r\n blockquote: string;\r\n blockquote_dark: string;\r\n math_inline: string;\r\n math_inline_dark: string;\r\n math_display: string;\r\n math_display_dark: string;\r\n html_block: string;\r\n html_block_dark: string;\r\n line_block: string;\r\n line_block_dark: string;\r\n emoji: string;\r\n emoji_dark: string;\r\n comment: string;\r\n comment_dark: string;\r\n div: string;\r\n div_dark: string;\r\n code_block: string;\r\n code_block_dark: string;\r\n footnote: string;\r\n footnote_dark: string;\r\n citation: string;\r\n citation_dark: string;\r\n cross_reference: string;\r\n cross_reference_dark: string;\r\n symbol: string;\r\n symbol_dark: string;\r\n table: string;\r\n table_dark: string;\r\n definition_list: string;\r\n definition_list_dark: string;\r\n horizontal_rule: string;\r\n horizontal_rule_dark: string;\r\n image: string;\r\n image_dark: string;\r\n link: string;\r\n link_dark: string;\r\n paragraph: string;\r\n paragraph_dark: string;\r\n raw_block: string;\r\n raw_block_dark: string;\r\n raw_inline: string;\r\n raw_inline_dark: string;\r\n tex_block: string;\r\n tex_block_dark: string;\r\n yaml_block: string;\r\n yaml_block_dark: string;\r\n python_chunk: string;\r\n sql_chunk: string;\r\n d3_chunk: string;\r\n stan_chunk: string;\r\n bash_chunk: string;\r\n bash_chunk_dark: string;\r\n r_chunk: string;\r\n r_chunk_dark: string;\r\n rcpp_chunk: string;\r\n rcpp_chunk_dark: string;\r\n tabset: string;\r\n tabset_dark: string;\r\n slide_columns: string;\r\n slide_columns_dark: string;\r\n slide_pause: string;\r\n slide_pause_dark: string;\r\n slide_notes: string;\r\n slide_notes_dark: string;\r\n };\r\n citations: {\r\n article: string;\r\n article_dark: string;\r\n book: string;\r\n book_dark: string;\r\n broadcast: string;\r\n broadcast_dark: string;\r\n data: string;\r\n data_dark: string;\r\n entry: string;\r\n entry_dark: string;\r\n image: string;\r\n image_dark: string;\r\n legal: string;\r\n legal_dark: string;\r\n map: string;\r\n map_dark: string;\r\n movie: string;\r\n movie_dark: string;\r\n other: string;\r\n other_dark: string;\r\n song: string;\r\n song_dark: string;\r\n web: string;\r\n web_dark: string;\r\n zoteroOverlay: string;\r\n local_sources: string;\r\n packages: string;\r\n bibligraphy: string;\r\n bibligraphy_folder: string;\r\n zotero_library: string;\r\n zotero_collection: string;\r\n zotero_root: string;\r\n doi: string;\r\n crossref: string;\r\n pubmed: string;\r\n datacite: string;\r\n };\r\n xrefs: {\r\n section_dark: string;\r\n section: string;\r\n equation: string;\r\n equation_dark: string;\r\n table: string;\r\n table_dark: string;\r\n listing: string;\r\n listing_dark: string;\r\n theorem: string;\r\n theorem_dark: string;\r\n figure: string;\r\n figure_dark: string;\r\n type_all: string;\r\n type_section: string;\r\n type_figure: string;\r\n type_table: string;\r\n type_listing: string;\r\n type_equation: string;\r\n type_theorem: string;\r\n };\r\n widgets: {\r\n tag_delete: string;\r\n tag_edit: string;\r\n };\r\n}\r\n\r\n","/*\r\n * format.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport interface EditorFormat {\r\n readonly pandocMode: string;\r\n readonly pandocExtensions: string;\r\n readonly rmdExtensions: EditorRmdExtensions;\r\n readonly hugoExtensions: EditorHugoExtensions;\r\n readonly docTypes: EditorExtendedDocType[];\r\n}\r\n\r\nexport interface EditorRmdExtensions {\r\n readonly codeChunks?: boolean;\r\n readonly bookdownXRef?: boolean;\r\n readonly bookdownXRefUI?: boolean;\r\n readonly bookdownPart?: boolean;\r\n readonly blogdownMathInCode?: boolean;\r\n}\r\n\r\nexport interface EditorHugoExtensions {\r\n readonly shortcodes?: boolean;\r\n}\r\n\r\nexport const kBookdownDocType = 'bookdown';\r\nexport const kHugoDocType = 'hugo';\r\nexport const kQuartoDocType = 'quarto';\r\nexport const kPresentationDocType = 'presentation';\r\n\r\nexport type EditorExtendedDocType = 'bookdown' | 'hugo' | 'quarto' | 'presentation';\r\n","/*\r\n * command-types.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nexport enum EditorCommandId {\r\n // text editing\r\n Undo = '201CA961-829E-4708-8FBC-8896FDE85A10',\r\n Redo = 'B6272475-04E0-48C0-86E3-DAFA763BDF7B',\r\n SelectAll = 'E42BF0DA-8A02-4FCE-A202-7EA8A4833FC5',\r\n ClearFormatting = 'C22D8CC4-0A9F-41D5-B540-7DAAAB80F344',\r\n PasteRaw = '228322A2-3679-401A-AC31-AC21540C72F3',\r\n\r\n // formatting\r\n Strong = '83B04020-1195-4A65-8A8E-7C173C87F439',\r\n Em = '9E1B73E4-8140-43C3-92E4-A5E2583F40E6',\r\n Code = '32621150-F829-4B8F-B5BD-627FABBBCF53',\r\n Strikeout = 'D5F0225B-EC73-4600-A1F3-01F418EE8CB4',\r\n Superscript = '0200D2FC-B5AF-423B-8B7A-4A7FC3DAA6AF',\r\n Subscript = '3150428F-E468-4E6E-BF53-A2713E59B4A0',\r\n Smallcaps = '41D8030F-5E8B-48F2-B1EE-6BC40FD502E4',\r\n Underline = '7F0E6AE2-08F4-4594-9BA2-E6B8B27FA8F7',\r\n Paragraph = '20EC2695-75CE-4DCD-A644-266E9F5F5913',\r\n Heading1 = '5B77642B-923D-4440-B85D-1A27C9CF9D77',\r\n Heading2 = '42985A4B-6BF2-4EEF-AA30-3E84A8B9111C',\r\n Heading3 = '3F84D9DF-5EF6-484C-8615-BAAE2AC9ECE2',\r\n Heading4 = 'DA76731D-1D84-4DBA-9BEF-A6F73536F0B9',\r\n Heading5 = '59E24247-A140-466A-BC96-3C8ADABB57A5',\r\n Heading6 = 'DB495DF5-8501-43C7-AE07-59CE9D9C373D',\r\n CodeBlock = '3BA12A49-3E29-4ABC-9A49-436A3B49B880',\r\n CodeBlockFormat = '07A6F2AA-01DC-41D7-9F01-AA91EAD856EE',\r\n Blockquote = 'AF0717E7-E4BA-4909-9F10-17EB757CDD0F',\r\n LineBlock = 'F401687C-B995-49AF-B2B0-59C158174FD5',\r\n AttrEdit = '0F8A254D-9272-46BF-904D-3A9D68B91032',\r\n Span = '852CF3E3-8A2B-420D-BD95-F79C54118E7E',\r\n Div = '15EDB8F1-6015-4DA9-AE50-5987B24C1D96',\r\n InsertDiv = 'ACA1521B-8875-4113-9D43-B47F0038B19F',\r\n\r\n // lists\r\n BulletList = 'D897FD2B-D6A4-44A7-A404-57B5251FBF64',\r\n OrderedList = '3B8B82D5-7B6C-4480-B7DD-CF79C6817980',\r\n TightList = 'A32B668F-74F3-43D7-8759-6576DDE1D603',\r\n ListItemSink = '7B503FA6-6576-4397-89EF-37887A1B2EED',\r\n ListItemLift = '53F89F57-22E2-4FCC-AF71-3E382EC10FC8',\r\n ListItemSplit = '19BBD87F-96D6-4276-B7B8-470652CF4106',\r\n ListItemCheck = '2F6DA9D8-EE57-418C-9459-50B6FD84137F',\r\n ListItemCheckToggle = '34D30F3D-8441-44AD-B75A-415DA8AC740B',\r\n EditListProperties = 'E006A68C-EA39-4954-91B9-DDB07D1CBDA2',\r\n\r\n // tables\r\n TableInsertTable = 'FBE39613-2DAA-445D-9E92-E1EABFB33E2C',\r\n TableToggleHeader = 'A5EDA226-A3CA-4C1B-8D4D-C2675EF51AFF',\r\n TableToggleCaption = 'C598D85C-E15C-4E10-9850-95882AEC7E60',\r\n TableNextCell = '14299819-3E19-4A27-8D0B-8035315CF0B4',\r\n TablePreviousCell = '0F041FB5-0203-4FF1-9D13-B16606A80F3E',\r\n TableAddColumnBefore = '2447B81F-E07A-4C7D-8026-F2B148D5FF4A',\r\n TableAddColumnAfter = 'ED86CFAF-D0B3-4B1F-9BB8-89987A939C8C',\r\n TableDeleteColumn = 'B3D077BC-DD51-4E3A-8AD4-DE5DE686F7C4',\r\n TableAddRowBefore = 'E97FB318-4052-41E5-A2F5-55B64E9826A5',\r\n TableAddRowAfter = '3F28FA24-4BDD-4C13-84FF-9C5E1D4B04D6',\r\n TableDeleteRow = '5F3B4DCD-5006-43A5-A069-405A946CAC68',\r\n TableDeleteTable = '116D1E68-9315-4FEB-B6A0-AD25B3B9C881',\r\n TableAlignColumnLeft = '0CD6A2A4-06F9-435D-B8C9-070B22B19D8',\r\n TableAlignColumnRight = '86D90C12-BB12-4A9D-802F-D00EB7CEF2C5',\r\n TableAlignColumnCenter = '63333996-2F65-4586-8494-EA9CAB5A7751',\r\n TableAlignColumnDefault = '7860A9C1-60AF-40AD-9EB8-A10F6ADF25C5',\r\n\r\n // insert\r\n OmniInsert = '12F96C13-38C1-4266-A0A1-E871D8C709FB',\r\n Table = 'CBD3ACC6-B2A3-457D-885C-EDA600F6FC67',\r\n Link = '842FCB9A-CA61-4C5F-A0A0-43507B4B3FA9',\r\n RemoveLink = '072D2084-218D-4A34-AF1F-7E196AF684B2',\r\n Image = '808220A3-2B83-4CB6-BCC1-46565D54FA47',\r\n Footnote = '1D1A73C0-F0E1-4A0F-BEBC-08398DE14A4D',\r\n ParagraphInsert = '4E68830A-3E68-450A-B3F3-2591F4EB6B9A',\r\n HorizontalRule = 'EAA7115B-181C-49EC-BDB1-F0FF10369278',\r\n YamlMetadata = '431B5A45-1B25-4A55-9BAF-C0FE95D9B2B6',\r\n Shortcode = '0FDDA7E8-419D-4A5D-A1F5-74061466655D',\r\n InlineMath = 'A35C562A-0BD6-4B14-93D5-6FF3BE1A0C8A',\r\n DisplayMath = '3E36BA99-2AE9-47C3-8C85-7CC5314A88DF',\r\n InlineRCode = 'E7F3B2ED-7C45-4B1F-A2C6-C549C2913025',\r\n Citation = 'EFFCFC81-F2E7-441E-B7FA-C693146B4185',\r\n CrossReference = '48CEED4F-1D18-4AF9-8686-9FEB5DF6BCC8',\r\n DefinitionList = 'CFAB8F4D-3350-4398-9754-8DE0FB95167B',\r\n DefinitionTerm = '204D1A8F-8EE6-424A-8E69-99768C85B39E',\r\n DefinitionDescription = 'F0738D83-8E11-4CB5-B958-390190A2D7DD',\r\n Symbol = '1419765F-6E4A-4A4C-8670-D9E8578EA996',\r\n Emoji = 'F73896A2-02CC-4E5D-A596-78444A1D2A37',\r\n EmDash = '5B0DD33B-6209-4713-B8BB-60B5CA0BC3B3',\r\n EnDash = 'C32AFE32-0E57-4A16-9C39-88EB1D82B8B4',\r\n NonBreakingSpace = 'CF6428AB-F36E-446C-8661-2781B2CD1169',\r\n HardLineBreak = '3606FF87-866C-4729-8F3F-D065388FC339',\r\n Tabset = '7327AF95-3EA7-42C8-8C42-D4CB0D15CAE4',\r\n Callout = 'DC86C28A-0140-4EB5-A745-2C1EFA55C94D',\r\n\r\n // raw\r\n TexInline = 'CFE8E9E5-93BA-4FFA-9A77-BA7EFC373864',\r\n TexBlock = 'BD11A6A7-E528-40A2-8139-3F8F5F556ED2',\r\n HTMLComment = 'F973CBA4-2882-4AC5-A642-47F4733EBDD4',\r\n HTMLInline = 'C682C6B5-E58D-498C-A38F-FB07BEC3A82D',\r\n HTMLBlock = '6F9F64AF-711F-4F91-8642-B51C41717F31',\r\n RawInline = '984167C8-8582-469C-97D8-42CB12773657',\r\n RawBlock = 'F5757992-4D33-45E6-86DC-F7D7B174B1EC',\r\n\r\n // user comments\r\n UserComment = '201FA139-4C86-4A5D-AF98-DE9EFB1A867C',\r\n\r\n // chunk\r\n RCodeChunk = 'EBFD21FF-4A6E-4D88-A2E0-B38470B00BB9',\r\n BashCodeChunk = '5FBB7283-E8AB-450C-9359-A4658CBCD136',\r\n D3CodeChunk = 'C73CA46C-B56F-40B6-AEFA-DDBB30CA8C08',\r\n PythonCodeChunk = '42A7A138-421A-4DCF-8A88-FE2F8EC5B8F6',\r\n JuliaCodeChunk = '84386434-EE31-4F0D-BBE9-55F5199FAF04',\r\n RcppCodeChunk = '6BD2810B-6B20-4358-8AA4-74BBFFC92AC3',\r\n SQLCodeChunk = '41D61FD2-B56B-48A7-99BC-2F60BC0D9F78',\r\n StanCodeChunk = '65D33344-CBE9-438C-B337-A538F8D7FCE5',\r\n MermaidCodeChunk = 'FCA99491-2FCA-44BC-8349-A9AE2AE940DE',\r\n GraphVizCodeChunk = '29970A38-2921-4F32-8363-F78CFE3FEBB4',\r\n ExecuteCurentRmdChunk = '31C799F3-EF18-4F3A-92E6-51F7A3193A1B',\r\n ExecuteCurrentPreviousRmdChunks = 'D3FDE96-0264-4364-ADFF-E87A75405B0B',\r\n ExpandChunk = '0226518C-559A-4BFC-A5BD-244BEE8175AA',\r\n CollapseChunk = '4AFBBC0C-A6DA-4019-B85F-374636E349C3',\r\n ExpandAllChunks = 'B217913B-67C9-457F-B766-7FCCB502F611',\r\n CollapseAllChunks = '9907A864-D707-4410-93A4-07871A8C43A6',\r\n\r\n // outline\r\n GoToNextSection = 'AE827BDA-96F8-4E84-8030-298D98386765',\r\n GoToPreviousSection = 'E6AA728C-2B75-4939-9123-0F082837ACDF',\r\n GoToNextChunk = '50DD6E51-13B5-4F1E-A46B-6A33EB1609D9',\r\n GoToPreviousChunk = '8D105D33-78FE-4A98-8195-6B71361424C5',\r\n\r\n // slides\r\n InsertSlidePause = 'FCA8BF2E-2668-4919-92FC-02083EB48246',\r\n InsertSlideNotes = '9C709915-02BE-4F4F-9CEB-50E17973C9BE',\r\n InsertSlideColumns = 'AE62D05F-1415-4E1F-84AE-753EE2393002'\r\n}\r\n\r\nexport interface EditorCommand {\r\n readonly id: EditorCommandId;\r\n readonly keymap: readonly string[];\r\n readonly isEnabled: () => boolean;\r\n readonly isActive: () => boolean;\r\n readonly plural: () => number;\r\n readonly execute: () => void;\r\n}\r\n","/*\r\n * basekeys-types.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { CommandFn } from \"./command\";\r\n\r\nexport enum BaseKey {\r\n Home = 'Home',\r\n End = 'End',\r\n Enter = 'Enter',\r\n ModEnter = 'Mod-Enter',\r\n ShiftEnter = 'Shift-Enter',\r\n Backspace = 'Backspace',\r\n Delete = 'Delete|Mod-Delete', // Use pipes to register multiple commands\r\n Tab = 'Tab',\r\n ShiftTab = 'Shift-Tab',\r\n ArrowUp = 'Up|ArrowUp',\r\n ArrowDown = 'Down|ArrowDown',\r\n ArrowLeft = 'Left|ArrowLeft',\r\n ArrowRight = 'Right|ArrowRight',\r\n ModArrowUp = 'Mod-Up|Mod-ArrowUp',\r\n ModArrowDown = 'Mod-Down|Mod-ArrowDown',\r\n CtrlHome = 'Ctrl-Home',\r\n CtrlEnd = 'Ctrl-End',\r\n ShiftArrowLeft = 'Shift-Left|Shift-ArrowLeft',\r\n ShiftArrowRight = 'Shift-Right|Shift-ArrowRight',\r\n AltArrowLeft = 'Alt-Left|Alt-ArrowLeft',\r\n AltArrowRight = 'Alt-Right|Alt-ArrowRight',\r\n CtrlArrowLeft = 'Ctrl-Left|Ctrl-ArrowLeft',\r\n CtrlArrowRight = 'Ctrl-Right|Ctrl-ArrowRight',\r\n CtrlShiftArrowLeft = 'Ctrl-Shift-Left|Ctrl-Shift-ArrowLeft',\r\n CtrlShiftArrowRight = 'Ctrl-Shift-Right|Ctrl-Shift-ArrowRight',\r\n}\r\n\r\nexport interface BaseKeyBinding {\r\n key: BaseKey;\r\n command: CommandFn;\r\n}\r\n","/*\r\n * navigation-types.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nexport interface EditorNavigation {\r\n navigate: (type: NavigationType, location: string, animate?: boolean) => void;\r\n}\r\n\r\nexport enum NavigationType {\r\n Pos = 'pos',\r\n Id = 'id',\r\n Href = 'href',\r\n Heading = 'heading',\r\n XRef = 'xref'\r\n}\r\n\r\nexport interface Navigation {\r\n pos: number;\r\n prevPos: number;\r\n}\r\n\r\n","/*\r\n * events.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorEvents, EventHandler, EventType } from \"./event-types\";\r\n\r\n\r\n/**\r\n * Creates a new type of event. Use the TDetail type parameter to indicate the\r\n * type of data, if any, that event handlers can expect.\r\n */\r\nexport function makeEventType<TDetail = void>(eventName: string) {\r\n return { eventName: `panmirror${eventName}` } as EventType<TDetail>;\r\n}\r\n\r\n/**\r\n * An implementation of EditorEvents, using the DOM event system.\r\n */\r\nexport class DOMEditorEvents implements EditorEvents {\r\n private readonly el: HTMLElement;\r\n\r\n constructor(el: HTMLElement) {\r\n this.el = el;\r\n }\r\n\r\n public emit<TDetail>(eventType: EventType<TDetail>, detail?: TDetail) {\r\n // Note: CustomEvent requires polyfill for IE, see\r\n // https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\r\n const event = new CustomEvent(eventType.eventName, { detail });\r\n return this.el.dispatchEvent(event);\r\n }\r\n\r\n public subscribe<TDetail>(eventType: EventType<TDetail>, handler: EventHandler<TDetail>) {\r\n const listener = function(this: unknown, evt: Event) {\r\n const detail: TDetail | undefined = (evt as CustomEvent).detail;\r\n handler.call(this, detail);\r\n };\r\n this.el.addEventListener(eventType.eventName, listener);\r\n return () => {\r\n this.el.removeEventListener(eventType.eventName, listener);\r\n };\r\n }\r\n}\r\n","/*\r\n * event-types.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { makeEventType } from './events';\r\nimport { Navigation } from './navigation-types';\r\n\r\nexport const UpdateEvent = makeEventType('Update');\r\nexport const OutlineChangeEvent = makeEventType('OutlineChange');\r\nexport const StateChangeEvent = makeEventType('StateChange');\r\nexport const ResizeEvent = makeEventType('Resize');\r\nexport const LayoutEvent = makeEventType('Layout');\r\nexport const ScrollEvent = makeEventType('Scroll');\r\nexport const BlurEvent = makeEventType('Blur');\r\nexport const FocusEvent = makeEventType<ProsemirrorNode>('Focus');\r\nexport const DispatchEvent = makeEventType<Transaction>('Dispatch');\r\nexport const NavigateEvent = makeEventType<Navigation>('Navigate');\r\nexport const PrefsChangedEvent = makeEventType('PrefsChanged');\r\nexport const ThemeChangedEvent = makeEventType('ThemeChanged');\r\n\r\n/**\r\n * Represents an event type; only a single instance of this should exist per\r\n * event type (akin to PluginKey) and it should be visible to everyone who wants\r\n * to subscribe to or emit events of that type. Do not create one of these\r\n * directly, instead use makeEventType().\r\n */\r\n export interface EventType<TDetail> {\r\n readonly eventName: string;\r\n // This field is needed only to prevent TDetail from being ignored by the type\r\n // checker; if TDetail isn't used, tsc acts as if EventType isn't generic.\r\n readonly dummy?: TDetail;\r\n}\r\n\r\n/**\r\n * Type signature of event-handler functions; the TDetail must match with the\r\n * EventType<TDetail> being subscribed to.\r\n *\r\n * (Note that the detail is always optional. I couldn't figure out how to make\r\n * it mandatory for some event types, forbidden for others, and optional for\r\n * still others, so it's just optional for everyone.)\r\n */\r\nexport type EventHandler<TDetail> = (detail?: TDetail) => void;\r\n\r\n/**\r\n * Generic interface for objects that support eventing.\r\n *\r\n * TODO: I don't see a reason why this interface should support both\r\n * subscription *and* emitting, the latter seems like something private.\r\n */\r\nexport interface EditorEvents {\r\n subscribe<TDetail>(event: EventType<TDetail>, handler: EventHandler<TDetail>): VoidFunction;\r\n emit<TDetail>(event: EventType<TDetail>, detail?: TDetail): void;\r\n}\r\n\r\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n this.content = content;\n}\n\nOrderedMap.prototype = {\n constructor: OrderedMap,\n\n find: function(key) {\n for (var i = 0; i < this.content.length; i += 2)\n if (this.content[i] === key) return i\n return -1\n },\n\n // :: (string) → ?any\n // Retrieve the value stored under `key`, or return undefined when\n // no such key exists.\n get: function(key) {\n var found = this.find(key);\n return found == -1 ? undefined : this.content[found + 1]\n },\n\n // :: (string, any, ?string) → OrderedMap\n // Create a new map by replacing the value of `key` with a new\n // value, or adding a binding to the end of the map. If `newKey` is\n // given, the key of the binding will be replaced with that key.\n update: function(key, value, newKey) {\n var self = newKey && newKey != key ? this.remove(newKey) : this;\n var found = self.find(key), content = self.content.slice();\n if (found == -1) {\n content.push(newKey || key, value);\n } else {\n content[found + 1] = value;\n if (newKey) content[found] = newKey;\n }\n return new OrderedMap(content)\n },\n\n // :: (string) → OrderedMap\n // Return a map with the given key removed, if it existed.\n remove: function(key) {\n var found = this.find(key);\n if (found == -1) return this\n var content = this.content.slice();\n content.splice(found, 2);\n return new OrderedMap(content)\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the start of the map.\n addToStart: function(key, value) {\n return new OrderedMap([key, value].concat(this.remove(key).content))\n },\n\n // :: (string, any) → OrderedMap\n // Add a new key to the end of the map.\n addToEnd: function(key, value) {\n var content = this.remove(key).content.slice();\n content.push(key, value);\n return new OrderedMap(content)\n },\n\n // :: (string, string, any) → OrderedMap\n // Add a key after the given key. If `place` is not found, the new\n // key is added to the end.\n addBefore: function(place, key, value) {\n var without = this.remove(key), content = without.content.slice();\n var found = without.find(place);\n content.splice(found == -1 ? content.length : found, 0, key, value);\n return new OrderedMap(content)\n },\n\n // :: ((key: string, value: any))\n // Call the given function for each key/value pair in the map, in\n // order.\n forEach: function(f) {\n for (var i = 0; i < this.content.length; i += 2)\n f(this.content[i], this.content[i + 1]);\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by prepending the keys in this map that don't\n // appear in `map` before the keys in `map`.\n prepend: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(map.content.concat(this.subtract(map).content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a new map by appending the keys in this map that don't\n // appear in `map` after the keys in `map`.\n append: function(map) {\n map = OrderedMap.from(map);\n if (!map.size) return this\n return new OrderedMap(this.subtract(map).content.concat(map.content))\n },\n\n // :: (union<Object, OrderedMap>) → OrderedMap\n // Create a map containing all the keys in this map that don't\n // appear in `map`.\n subtract: function(map) {\n var result = this;\n map = OrderedMap.from(map);\n for (var i = 0; i < map.content.length; i += 2)\n result = result.remove(map.content[i]);\n return result\n },\n\n // :: () → Object\n // Turn ordered map into a plain object.\n toObject: function() {\n var result = {};\n this.forEach(function(key, value) { result[key] = value; });\n return result\n },\n\n // :: number\n // The amount of keys in this map.\n get size() {\n return this.content.length >> 1\n }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n if (value instanceof OrderedMap) return value\n var content = [];\n if (value) for (var prop in value) content.push(prop, value[prop]);\n return new OrderedMap(content)\n};\n\nexport default OrderedMap;\n","import OrderedMap from 'orderedmap';\n\nfunction findDiffStart(a, b, pos) {\n for (let i = 0;; i++) {\n if (i == a.childCount || i == b.childCount)\n return a.childCount == b.childCount ? null : pos;\n let childA = a.child(i), childB = b.child(i);\n if (childA == childB) {\n pos += childA.nodeSize;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return pos;\n if (childA.isText && childA.text != childB.text) {\n for (let j = 0; childA.text[j] == childB.text[j]; j++)\n pos++;\n return pos;\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffStart(childA.content, childB.content, pos + 1);\n if (inner != null)\n return inner;\n }\n pos += childA.nodeSize;\n }\n}\nfunction findDiffEnd(a, b, posA, posB) {\n for (let iA = a.childCount, iB = b.childCount;;) {\n if (iA == 0 || iB == 0)\n return iA == iB ? null : { a: posA, b: posB };\n let childA = a.child(--iA), childB = b.child(--iB), size = childA.nodeSize;\n if (childA == childB) {\n posA -= size;\n posB -= size;\n continue;\n }\n if (!childA.sameMarkup(childB))\n return { a: posA, b: posB };\n if (childA.isText && childA.text != childB.text) {\n let same = 0, minSize = Math.min(childA.text.length, childB.text.length);\n while (same < minSize && childA.text[childA.text.length - same - 1] == childB.text[childB.text.length - same - 1]) {\n same++;\n posA--;\n posB--;\n }\n return { a: posA, b: posB };\n }\n if (childA.content.size || childB.content.size) {\n let inner = findDiffEnd(childA.content, childB.content, posA - 1, posB - 1);\n if (inner)\n return inner;\n }\n posA -= size;\n posB -= size;\n }\n}\n\n/**\nA fragment represents a node's collection of child nodes.\n\nLike nodes, fragments are persistent data structures, and you\nshould not mutate them or their content. Rather, you create new\ninstances whenever needed. The API tries to make this easy.\n*/\nclass Fragment {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n content, size) {\n this.content = content;\n this.size = size || 0;\n if (size == null)\n for (let i = 0; i < content.length; i++)\n this.size += content[i].nodeSize;\n }\n /**\n Invoke a callback for all descendant nodes between the given two\n positions (relative to start of this fragment). Doesn't descend\n into a node when the callback returns `false`.\n */\n nodesBetween(from, to, f, nodeStart = 0, parent) {\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from && f(child, nodeStart + pos, parent || null, i) !== false && child.content.size) {\n let start = pos + 1;\n child.nodesBetween(Math.max(0, from - start), Math.min(child.content.size, to - start), f, nodeStart + start);\n }\n pos = end;\n }\n }\n /**\n Call the given callback for every descendant node. `pos` will be\n relative to the start of the fragment. The callback may return\n `false` to prevent traversal of a given node's children.\n */\n descendants(f) {\n this.nodesBetween(0, this.size, f);\n }\n /**\n Extract the text between `from` and `to`. See the same method on\n [`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).\n */\n textBetween(from, to, blockSeparator, leafText) {\n let text = \"\", separated = true;\n this.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n text += node.text.slice(Math.max(from, pos) - pos, to - pos);\n separated = !blockSeparator;\n }\n else if (node.isLeaf) {\n if (leafText) {\n text += typeof leafText === \"function\" ? leafText(node) : leafText;\n }\n else if (node.type.spec.leafText) {\n text += node.type.spec.leafText(node);\n }\n separated = !blockSeparator;\n }\n else if (!separated && node.isBlock) {\n text += blockSeparator;\n separated = true;\n }\n }, 0);\n return text;\n }\n /**\n Create a new fragment containing the combined content of this\n fragment and the other.\n */\n append(other) {\n if (!other.size)\n return this;\n if (!this.size)\n return other;\n let last = this.lastChild, first = other.firstChild, content = this.content.slice(), i = 0;\n if (last.isText && last.sameMarkup(first)) {\n content[content.length - 1] = last.withText(last.text + first.text);\n i = 1;\n }\n for (; i < other.content.length; i++)\n content.push(other.content[i]);\n return new Fragment(content, this.size + other.size);\n }\n /**\n Cut out the sub-fragment between the two given positions.\n */\n cut(from, to = this.size) {\n if (from == 0 && to == this.size)\n return this;\n let result = [], size = 0;\n if (to > from)\n for (let i = 0, pos = 0; pos < to; i++) {\n let child = this.content[i], end = pos + child.nodeSize;\n if (end > from) {\n if (pos < from || end > to) {\n if (child.isText)\n child = child.cut(Math.max(0, from - pos), Math.min(child.text.length, to - pos));\n else\n child = child.cut(Math.max(0, from - pos - 1), Math.min(child.content.size, to - pos - 1));\n }\n result.push(child);\n size += child.nodeSize;\n }\n pos = end;\n }\n return new Fragment(result, size);\n }\n /**\n @internal\n */\n cutByIndex(from, to) {\n if (from == to)\n return Fragment.empty;\n if (from == 0 && to == this.content.length)\n return this;\n return new Fragment(this.content.slice(from, to));\n }\n /**\n Create a new fragment in which the node at the given index is\n replaced by the given node.\n */\n replaceChild(index, node) {\n let current = this.content[index];\n if (current == node)\n return this;\n let copy = this.content.slice();\n let size = this.size + node.nodeSize - current.nodeSize;\n copy[index] = node;\n return new Fragment(copy, size);\n }\n /**\n Create a new fragment by prepending the given node to this\n fragment.\n */\n addToStart(node) {\n return new Fragment([node].concat(this.content), this.size + node.nodeSize);\n }\n /**\n Create a new fragment by appending the given node to this\n fragment.\n */\n addToEnd(node) {\n return new Fragment(this.content.concat(node), this.size + node.nodeSize);\n }\n /**\n Compare this fragment to another one.\n */\n eq(other) {\n if (this.content.length != other.content.length)\n return false;\n for (let i = 0; i < this.content.length; i++)\n if (!this.content[i].eq(other.content[i]))\n return false;\n return true;\n }\n /**\n The first child of the fragment, or `null` if it is empty.\n */\n get firstChild() { return this.content.length ? this.content[0] : null; }\n /**\n The last child of the fragment, or `null` if it is empty.\n */\n get lastChild() { return this.content.length ? this.content[this.content.length - 1] : null; }\n /**\n The number of child nodes in this fragment.\n */\n get childCount() { return this.content.length; }\n /**\n Get the child node at the given index. Raise an error when the\n index is out of range.\n */\n child(index) {\n let found = this.content[index];\n if (!found)\n throw new RangeError(\"Index \" + index + \" out of range for \" + this);\n return found;\n }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) {\n return this.content[index] || null;\n }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) {\n for (let i = 0, p = 0; i < this.content.length; i++) {\n let child = this.content[i];\n f(child, p, i);\n p += child.nodeSize;\n }\n }\n /**\n Find the first position at which this fragment and another\n fragment differ, or `null` if they are the same.\n */\n findDiffStart(other, pos = 0) {\n return findDiffStart(this, other, pos);\n }\n /**\n Find the first position, searching from the end, at which this\n fragment and the given fragment differ, or `null` if they are\n the same. Since this position will not be the same in both\n nodes, an object with two separate positions is returned.\n */\n findDiffEnd(other, pos = this.size, otherPos = other.size) {\n return findDiffEnd(this, other, pos, otherPos);\n }\n /**\n Find the index and inner offset corresponding to a given relative\n position in this fragment. The result object will be reused\n (overwritten) the next time the function is called. (Not public.)\n */\n findIndex(pos, round = -1) {\n if (pos == 0)\n return retIndex(0, pos);\n if (pos == this.size)\n return retIndex(this.content.length, pos);\n if (pos > this.size || pos < 0)\n throw new RangeError(`Position ${pos} outside of fragment (${this})`);\n for (let i = 0, curPos = 0;; i++) {\n let cur = this.child(i), end = curPos + cur.nodeSize;\n if (end >= pos) {\n if (end == pos || round > 0)\n return retIndex(i + 1, end);\n return retIndex(i, curPos);\n }\n curPos = end;\n }\n }\n /**\n Return a debugging string that describes this fragment.\n */\n toString() { return \"<\" + this.toStringInner() + \">\"; }\n /**\n @internal\n */\n toStringInner() { return this.content.join(\", \"); }\n /**\n Create a JSON-serializeable representation of this fragment.\n */\n toJSON() {\n return this.content.length ? this.content.map(n => n.toJSON()) : null;\n }\n /**\n Deserialize a fragment from its JSON representation.\n */\n static fromJSON(schema, value) {\n if (!value)\n return Fragment.empty;\n if (!Array.isArray(value))\n throw new RangeError(\"Invalid input for Fragment.fromJSON\");\n return new Fragment(value.map(schema.nodeFromJSON));\n }\n /**\n Build a fragment from an array of nodes. Ensures that adjacent\n text nodes with the same marks are joined together.\n */\n static fromArray(array) {\n if (!array.length)\n return Fragment.empty;\n let joined, size = 0;\n for (let i = 0; i < array.length; i++) {\n let node = array[i];\n size += node.nodeSize;\n if (i && node.isText && array[i - 1].sameMarkup(node)) {\n if (!joined)\n joined = array.slice(0, i);\n joined[joined.length - 1] = node\n .withText(joined[joined.length - 1].text + node.text);\n }\n else if (joined) {\n joined.push(node);\n }\n }\n return new Fragment(joined || array, size);\n }\n /**\n Create a fragment from something that can be interpreted as a\n set of nodes. For `null`, it returns the empty fragment. For a\n fragment, the fragment itself. For a node or array of nodes, a\n fragment containing those nodes.\n */\n static from(nodes) {\n if (!nodes)\n return Fragment.empty;\n if (nodes instanceof Fragment)\n return nodes;\n if (Array.isArray(nodes))\n return this.fromArray(nodes);\n if (nodes.attrs)\n return new Fragment([nodes], nodes.nodeSize);\n throw new RangeError(\"Can not convert \" + nodes + \" to a Fragment\" +\n (nodes.nodesBetween ? \" (looks like multiple versions of prosemirror-model were loaded)\" : \"\"));\n }\n}\n/**\nAn empty fragment. Intended to be reused whenever a node doesn't\ncontain anything (rather than allocating a new empty fragment for\neach leaf node).\n*/\nFragment.empty = new Fragment([], 0);\nconst found = { index: 0, offset: 0 };\nfunction retIndex(index, offset) {\n found.index = index;\n found.offset = offset;\n return found;\n}\n\nfunction compareDeep(a, b) {\n if (a === b)\n return true;\n if (!(a && typeof a == \"object\") ||\n !(b && typeof b == \"object\"))\n return false;\n let array = Array.isArray(a);\n if (Array.isArray(b) != array)\n return false;\n if (array) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!compareDeep(a[i], b[i]))\n return false;\n }\n else {\n for (let p in a)\n if (!(p in b) || !compareDeep(a[p], b[p]))\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n }\n return true;\n}\n\n/**\nA mark is a piece of information that can be attached to a node,\nsuch as it being emphasized, in code font, or a link. It has a\ntype and optionally a set of attributes that provide further\ninformation (such as the target of the link). Marks are created\nthrough a `Schema`, which controls which types exist and which\nattributes they have.\n*/\nclass Mark {\n /**\n @internal\n */\n constructor(\n /**\n The type of this mark.\n */\n type, \n /**\n The attributes associated with this mark.\n */\n attrs) {\n this.type = type;\n this.attrs = attrs;\n }\n /**\n Given a set of marks, create a new set which contains this one as\n well, in the right position. If this mark is already in the set,\n the set itself is returned. If any marks that are set to be\n [exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,\n those are replaced by this one.\n */\n addToSet(set) {\n let copy, placed = false;\n for (let i = 0; i < set.length; i++) {\n let other = set[i];\n if (this.eq(other))\n return set;\n if (this.type.excludes(other.type)) {\n if (!copy)\n copy = set.slice(0, i);\n }\n else if (other.type.excludes(this.type)) {\n return set;\n }\n else {\n if (!placed && other.type.rank > this.type.rank) {\n if (!copy)\n copy = set.slice(0, i);\n copy.push(this);\n placed = true;\n }\n if (copy)\n copy.push(other);\n }\n }\n if (!copy)\n copy = set.slice();\n if (!placed)\n copy.push(this);\n return copy;\n }\n /**\n Remove this mark from the given set, returning a new set. If this\n mark is not in the set, the set itself is returned.\n */\n removeFromSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return set.slice(0, i).concat(set.slice(i + 1));\n return set;\n }\n /**\n Test whether this mark is in the given set of marks.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (this.eq(set[i]))\n return true;\n return false;\n }\n /**\n Test whether this mark has the same type and attributes as\n another mark.\n */\n eq(other) {\n return this == other ||\n (this.type == other.type && compareDeep(this.attrs, other.attrs));\n }\n /**\n Convert this mark to a JSON-serializeable representation.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n return obj;\n }\n /**\n Deserialize a mark from JSON.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Mark.fromJSON\");\n let type = schema.marks[json.type];\n if (!type)\n throw new RangeError(`There is no mark type ${json.type} in this schema`);\n return type.create(json.attrs);\n }\n /**\n Test whether two sets of marks are identical.\n */\n static sameSet(a, b) {\n if (a == b)\n return true;\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].eq(b[i]))\n return false;\n return true;\n }\n /**\n Create a properly sorted mark set from null, a single mark, or an\n unsorted array of marks.\n */\n static setFrom(marks) {\n if (!marks || Array.isArray(marks) && marks.length == 0)\n return Mark.none;\n if (marks instanceof Mark)\n return [marks];\n let copy = marks.slice();\n copy.sort((a, b) => a.type.rank - b.type.rank);\n return copy;\n }\n}\n/**\nThe empty set of marks.\n*/\nMark.none = [];\n\n/**\nError type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when\ngiven an invalid replacement.\n*/\nclass ReplaceError extends Error {\n}\n/*\nReplaceError = function(this: any, message: string) {\n let err = Error.call(this, message)\n ;(err as any).__proto__ = ReplaceError.prototype\n return err\n} as any\n\nReplaceError.prototype = Object.create(Error.prototype)\nReplaceError.prototype.constructor = ReplaceError\nReplaceError.prototype.name = \"ReplaceError\"\n*/\n/**\nA slice represents a piece cut out of a larger document. It\nstores not only a fragment, but also the depth up to which nodes on\nboth side are ‘open’ (cut through).\n*/\nclass Slice {\n /**\n Create a slice. When specifying a non-zero open depth, you must\n make sure that there are nodes of at least that depth at the\n appropriate side of the fragment—i.e. if the fragment is an\n empty paragraph node, `openStart` and `openEnd` can't be greater\n than 1.\n \n It is not necessary for the content of open nodes to conform to\n the schema's content constraints, though it should be a valid\n start/end/middle for such a node, depending on which sides are\n open.\n */\n constructor(\n /**\n The slice's content.\n */\n content, \n /**\n The open depth at the start of the fragment.\n */\n openStart, \n /**\n The open depth at the end.\n */\n openEnd) {\n this.content = content;\n this.openStart = openStart;\n this.openEnd = openEnd;\n }\n /**\n The size this slice would add when inserted into a document.\n */\n get size() {\n return this.content.size - this.openStart - this.openEnd;\n }\n /**\n @internal\n */\n insertAt(pos, fragment) {\n let content = insertInto(this.content, pos + this.openStart, fragment);\n return content && new Slice(content, this.openStart, this.openEnd);\n }\n /**\n @internal\n */\n removeBetween(from, to) {\n return new Slice(removeRange(this.content, from + this.openStart, to + this.openStart), this.openStart, this.openEnd);\n }\n /**\n Tests whether this slice is equal to another slice.\n */\n eq(other) {\n return this.content.eq(other.content) && this.openStart == other.openStart && this.openEnd == other.openEnd;\n }\n /**\n @internal\n */\n toString() {\n return this.content + \"(\" + this.openStart + \",\" + this.openEnd + \")\";\n }\n /**\n Convert a slice to a JSON-serializable representation.\n */\n toJSON() {\n if (!this.content.size)\n return null;\n let json = { content: this.content.toJSON() };\n if (this.openStart > 0)\n json.openStart = this.openStart;\n if (this.openEnd > 0)\n json.openEnd = this.openEnd;\n return json;\n }\n /**\n Deserialize a slice from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n return Slice.empty;\n let openStart = json.openStart || 0, openEnd = json.openEnd || 0;\n if (typeof openStart != \"number\" || typeof openEnd != \"number\")\n throw new RangeError(\"Invalid input for Slice.fromJSON\");\n return new Slice(Fragment.fromJSON(schema, json.content), openStart, openEnd);\n }\n /**\n Create a slice from a fragment by taking the maximum possible\n open value on both side of the fragment.\n */\n static maxOpen(fragment, openIsolating = true) {\n let openStart = 0, openEnd = 0;\n for (let n = fragment.firstChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.firstChild)\n openStart++;\n for (let n = fragment.lastChild; n && !n.isLeaf && (openIsolating || !n.type.spec.isolating); n = n.lastChild)\n openEnd++;\n return new Slice(fragment, openStart, openEnd);\n }\n}\n/**\nThe empty slice.\n*/\nSlice.empty = new Slice(Fragment.empty, 0, 0);\nfunction removeRange(content, from, to) {\n let { index, offset } = content.findIndex(from), child = content.maybeChild(index);\n let { index: indexTo, offset: offsetTo } = content.findIndex(to);\n if (offset == from || child.isText) {\n if (offsetTo != to && !content.child(indexTo).isText)\n throw new RangeError(\"Removing non-flat range\");\n return content.cut(0, from).append(content.cut(to));\n }\n if (index != indexTo)\n throw new RangeError(\"Removing non-flat range\");\n return content.replaceChild(index, child.copy(removeRange(child.content, from - offset - 1, to - offset - 1)));\n}\nfunction insertInto(content, dist, insert, parent) {\n let { index, offset } = content.findIndex(dist), child = content.maybeChild(index);\n if (offset == dist || child.isText) {\n if (parent && !parent.canReplace(index, index, insert))\n return null;\n return content.cut(0, dist).append(insert).append(content.cut(dist));\n }\n let inner = insertInto(child.content, dist - offset - 1, insert);\n return inner && content.replaceChild(index, child.copy(inner));\n}\nfunction replace($from, $to, slice) {\n if (slice.openStart > $from.depth)\n throw new ReplaceError(\"Inserted content deeper than insertion position\");\n if ($from.depth - slice.openStart != $to.depth - slice.openEnd)\n throw new ReplaceError(\"Inconsistent open depths\");\n return replaceOuter($from, $to, slice, 0);\n}\nfunction replaceOuter($from, $to, slice, depth) {\n let index = $from.index(depth), node = $from.node(depth);\n if (index == $to.index(depth) && depth < $from.depth - slice.openStart) {\n let inner = replaceOuter($from, $to, slice, depth + 1);\n return node.copy(node.content.replaceChild(index, inner));\n }\n else if (!slice.content.size) {\n return close(node, replaceTwoWay($from, $to, depth));\n }\n else if (!slice.openStart && !slice.openEnd && $from.depth == depth && $to.depth == depth) { // Simple, flat case\n let parent = $from.parent, content = parent.content;\n return close(parent, content.cut(0, $from.parentOffset).append(slice.content).append(content.cut($to.parentOffset)));\n }\n else {\n let { start, end } = prepareSliceForReplace(slice, $from);\n return close(node, replaceThreeWay($from, start, end, $to, depth));\n }\n}\nfunction checkJoin(main, sub) {\n if (!sub.type.compatibleContent(main.type))\n throw new ReplaceError(\"Cannot join \" + sub.type.name + \" onto \" + main.type.name);\n}\nfunction joinable($before, $after, depth) {\n let node = $before.node(depth);\n checkJoin(node, $after.node(depth));\n return node;\n}\nfunction addNode(child, target) {\n let last = target.length - 1;\n if (last >= 0 && child.isText && child.sameMarkup(target[last]))\n target[last] = child.withText(target[last].text + child.text);\n else\n target.push(child);\n}\nfunction addRange($start, $end, depth, target) {\n let node = ($end || $start).node(depth);\n let startIndex = 0, endIndex = $end ? $end.index(depth) : node.childCount;\n if ($start) {\n startIndex = $start.index(depth);\n if ($start.depth > depth) {\n startIndex++;\n }\n else if ($start.textOffset) {\n addNode($start.nodeAfter, target);\n startIndex++;\n }\n }\n for (let i = startIndex; i < endIndex; i++)\n addNode(node.child(i), target);\n if ($end && $end.depth == depth && $end.textOffset)\n addNode($end.nodeBefore, target);\n}\nfunction close(node, content) {\n node.type.checkContent(content);\n return node.copy(content);\n}\nfunction replaceThreeWay($from, $start, $end, $to, depth) {\n let openStart = $from.depth > depth && joinable($from, $start, depth + 1);\n let openEnd = $to.depth > depth && joinable($end, $to, depth + 1);\n let content = [];\n addRange(null, $from, depth, content);\n if (openStart && openEnd && $start.index(depth) == $end.index(depth)) {\n checkJoin(openStart, openEnd);\n addNode(close(openStart, replaceThreeWay($from, $start, $end, $to, depth + 1)), content);\n }\n else {\n if (openStart)\n addNode(close(openStart, replaceTwoWay($from, $start, depth + 1)), content);\n addRange($start, $end, depth, content);\n if (openEnd)\n addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction replaceTwoWay($from, $to, depth) {\n let content = [];\n addRange(null, $from, depth, content);\n if ($from.depth > depth) {\n let type = joinable($from, $to, depth + 1);\n addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);\n }\n addRange($to, null, depth, content);\n return new Fragment(content);\n}\nfunction prepareSliceForReplace(slice, $along) {\n let extra = $along.depth - slice.openStart, parent = $along.node(extra);\n let node = parent.copy(slice.content);\n for (let i = extra - 1; i >= 0; i--)\n node = $along.node(i).copy(Fragment.from(node));\n return { start: node.resolveNoCache(slice.openStart + extra),\n end: node.resolveNoCache(node.content.size - slice.openEnd - extra) };\n}\n\n/**\nYou can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more\ninformation about it. Objects of this class represent such a\nresolved position, providing various pieces of context\ninformation, and some helper methods.\n\nThroughout this interface, methods that take an optional `depth`\nparameter will interpret undefined as `this.depth` and negative\nnumbers as `this.depth + value`.\n*/\nclass ResolvedPos {\n /**\n @internal\n */\n constructor(\n /**\n The position that was resolved.\n */\n pos, \n /**\n @internal\n */\n path, \n /**\n The offset this position has into its parent node.\n */\n parentOffset) {\n this.pos = pos;\n this.path = path;\n this.parentOffset = parentOffset;\n this.depth = path.length / 3 - 1;\n }\n /**\n @internal\n */\n resolveDepth(val) {\n if (val == null)\n return this.depth;\n if (val < 0)\n return this.depth + val;\n return val;\n }\n /**\n The parent node that the position points into. Note that even if\n a position points into a text node, that node is not considered\n the parent—text nodes are ‘flat’ in this model, and have no content.\n */\n get parent() { return this.node(this.depth); }\n /**\n The root node in which the position was resolved.\n */\n get doc() { return this.node(0); }\n /**\n The ancestor node at the given level. `p.node(p.depth)` is the\n same as `p.parent`.\n */\n node(depth) { return this.path[this.resolveDepth(depth) * 3]; }\n /**\n The index into the ancestor at the given level. If this points\n at the 3rd node in the 2nd paragraph on the top level, for\n example, `p.index(0)` is 1 and `p.index(1)` is 2.\n */\n index(depth) { return this.path[this.resolveDepth(depth) * 3 + 1]; }\n /**\n The index pointing after this position into the ancestor at the\n given level.\n */\n indexAfter(depth) {\n depth = this.resolveDepth(depth);\n return this.index(depth) + (depth == this.depth && !this.textOffset ? 0 : 1);\n }\n /**\n The (absolute) position at the start of the node at the given\n level.\n */\n start(depth) {\n depth = this.resolveDepth(depth);\n return depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n }\n /**\n The (absolute) position at the end of the node at the given\n level.\n */\n end(depth) {\n depth = this.resolveDepth(depth);\n return this.start(depth) + this.node(depth).content.size;\n }\n /**\n The (absolute) position directly before the wrapping node at the\n given level, or, when `depth` is `this.depth + 1`, the original\n position.\n */\n before(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position before the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1];\n }\n /**\n The (absolute) position directly after the wrapping node at the\n given level, or the original position when `depth` is `this.depth + 1`.\n */\n after(depth) {\n depth = this.resolveDepth(depth);\n if (!depth)\n throw new RangeError(\"There is no position after the top-level node\");\n return depth == this.depth + 1 ? this.pos : this.path[depth * 3 - 1] + this.path[depth * 3].nodeSize;\n }\n /**\n When this position points into a text node, this returns the\n distance between the position and the start of the text node.\n Will be zero for positions that point between nodes.\n */\n get textOffset() { return this.pos - this.path[this.path.length - 1]; }\n /**\n Get the node directly after the position, if any. If the position\n points into a text node, only the part of that node after the\n position is returned.\n */\n get nodeAfter() {\n let parent = this.parent, index = this.index(this.depth);\n if (index == parent.childCount)\n return null;\n let dOff = this.pos - this.path[this.path.length - 1], child = parent.child(index);\n return dOff ? parent.child(index).cut(dOff) : child;\n }\n /**\n Get the node directly before the position, if any. If the\n position points into a text node, only the part of that node\n before the position is returned.\n */\n get nodeBefore() {\n let index = this.index(this.depth);\n let dOff = this.pos - this.path[this.path.length - 1];\n if (dOff)\n return this.parent.child(index).cut(0, dOff);\n return index == 0 ? null : this.parent.child(index - 1);\n }\n /**\n Get the position at the given index in the parent node at the\n given depth (which defaults to `this.depth`).\n */\n posAtIndex(index, depth) {\n depth = this.resolveDepth(depth);\n let node = this.path[depth * 3], pos = depth == 0 ? 0 : this.path[depth * 3 - 1] + 1;\n for (let i = 0; i < index; i++)\n pos += node.child(i).nodeSize;\n return pos;\n }\n /**\n Get the marks at this position, factoring in the surrounding\n marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the\n position is at the start of a non-empty node, the marks of the\n node after it (if any) are returned.\n */\n marks() {\n let parent = this.parent, index = this.index();\n // In an empty parent, return the empty array\n if (parent.content.size == 0)\n return Mark.none;\n // When inside a text node, just return the text node's marks\n if (this.textOffset)\n return parent.child(index).marks;\n let main = parent.maybeChild(index - 1), other = parent.maybeChild(index);\n // If the `after` flag is true of there is no node before, make\n // the node after this position the main reference.\n if (!main) {\n let tmp = main;\n main = other;\n other = tmp;\n }\n // Use all marks in the main node, except those that have\n // `inclusive` set to false and are not present in the other node.\n let marks = main.marks;\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!other || !marks[i].isInSet(other.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n Get the marks after the current position, if any, except those\n that are non-inclusive and not present at position `$end`. This\n is mostly useful for getting the set of marks to preserve after a\n deletion. Will return `null` if this position is at the end of\n its parent node or its parent node isn't a textblock (in which\n case no marks should be preserved).\n */\n marksAcross($end) {\n let after = this.parent.maybeChild(this.index());\n if (!after || !after.isInline)\n return null;\n let marks = after.marks, next = $end.parent.maybeChild($end.index());\n for (var i = 0; i < marks.length; i++)\n if (marks[i].type.spec.inclusive === false && (!next || !marks[i].isInSet(next.marks)))\n marks = marks[i--].removeFromSet(marks);\n return marks;\n }\n /**\n The depth up to which this position and the given (non-resolved)\n position share the same parent nodes.\n */\n sharedDepth(pos) {\n for (let depth = this.depth; depth > 0; depth--)\n if (this.start(depth) <= pos && this.end(depth) >= pos)\n return depth;\n return 0;\n }\n /**\n Returns a range based on the place where this position and the\n given position diverge around block content. If both point into\n the same textblock, for example, a range around that textblock\n will be returned. If they point into different blocks, the range\n around those blocks in their shared ancestor is returned. You can\n pass in an optional predicate that will be called with a parent\n node to see if a range into that parent is acceptable.\n */\n blockRange(other = this, pred) {\n if (other.pos < this.pos)\n return other.blockRange(this);\n for (let d = this.depth - (this.parent.inlineContent || this.pos == other.pos ? 1 : 0); d >= 0; d--)\n if (other.pos <= this.end(d) && (!pred || pred(this.node(d))))\n return new NodeRange(this, other, d);\n return null;\n }\n /**\n Query whether the given position shares the same parent node.\n */\n sameParent(other) {\n return this.pos - this.parentOffset == other.pos - other.parentOffset;\n }\n /**\n Return the greater of this and the given position.\n */\n max(other) {\n return other.pos > this.pos ? other : this;\n }\n /**\n Return the smaller of this and the given position.\n */\n min(other) {\n return other.pos < this.pos ? other : this;\n }\n /**\n @internal\n */\n toString() {\n let str = \"\";\n for (let i = 1; i <= this.depth; i++)\n str += (str ? \"/\" : \"\") + this.node(i).type.name + \"_\" + this.index(i - 1);\n return str + \":\" + this.parentOffset;\n }\n /**\n @internal\n */\n static resolve(doc, pos) {\n if (!(pos >= 0 && pos <= doc.content.size))\n throw new RangeError(\"Position \" + pos + \" out of range\");\n let path = [];\n let start = 0, parentOffset = pos;\n for (let node = doc;;) {\n let { index, offset } = node.content.findIndex(parentOffset);\n let rem = parentOffset - offset;\n path.push(node, index, start + offset);\n if (!rem)\n break;\n node = node.child(index);\n if (node.isText)\n break;\n parentOffset = rem - 1;\n start += offset + 1;\n }\n return new ResolvedPos(pos, path, parentOffset);\n }\n /**\n @internal\n */\n static resolveCached(doc, pos) {\n for (let i = 0; i < resolveCache.length; i++) {\n let cached = resolveCache[i];\n if (cached.pos == pos && cached.doc == doc)\n return cached;\n }\n let result = resolveCache[resolveCachePos] = ResolvedPos.resolve(doc, pos);\n resolveCachePos = (resolveCachePos + 1) % resolveCacheSize;\n return result;\n }\n}\nlet resolveCache = [], resolveCachePos = 0, resolveCacheSize = 12;\n/**\nRepresents a flat range of content, i.e. one that starts and\nends in the same node.\n*/\nclass NodeRange {\n /**\n Construct a node range. `$from` and `$to` should point into the\n same node until at least the given `depth`, since a node range\n denotes an adjacent set of nodes in a single parent node.\n */\n constructor(\n /**\n A resolved position along the start of the content. May have a\n `depth` greater than this object's `depth` property, since\n these are the positions that were used to compute the range,\n not re-resolved positions directly at its boundaries.\n */\n $from, \n /**\n A position along the end of the content. See\n caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).\n */\n $to, \n /**\n The depth of the node that this range points into.\n */\n depth) {\n this.$from = $from;\n this.$to = $to;\n this.depth = depth;\n }\n /**\n The position at the start of the range.\n */\n get start() { return this.$from.before(this.depth + 1); }\n /**\n The position at the end of the range.\n */\n get end() { return this.$to.after(this.depth + 1); }\n /**\n The parent node that the range points into.\n */\n get parent() { return this.$from.node(this.depth); }\n /**\n The start index of the range in the parent node.\n */\n get startIndex() { return this.$from.index(this.depth); }\n /**\n The end index of the range in the parent node.\n */\n get endIndex() { return this.$to.indexAfter(this.depth); }\n}\n\nconst emptyAttrs = Object.create(null);\n/**\nThis class represents a node in the tree that makes up a\nProseMirror document. So a document is an instance of `Node`, with\nchildren that are also instances of `Node`.\n\nNodes are persistent data structures. Instead of changing them, you\ncreate new ones with the content you want. Old ones keep pointing\nat the old document shape. This is made cheaper by sharing\nstructure between the old and new data as much as possible, which a\ntree shape like this (without back pointers) makes easy.\n\n**Do not** directly mutate the properties of a `Node` object. See\n[the guide](/docs/guide/#doc) for more information.\n*/\nclass Node {\n /**\n @internal\n */\n constructor(\n /**\n The type of node that this is.\n */\n type, \n /**\n An object mapping attribute names to values. The kind of\n attributes allowed and required are\n [determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.\n */\n attrs, \n // A fragment holding the node's children.\n content, \n /**\n The marks (things like whether it is emphasized or part of a\n link) applied to this node.\n */\n marks = Mark.none) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.content = content || Fragment.empty;\n }\n /**\n The size of this node, as defined by the integer-based [indexing\n scheme](/docs/guide/#doc.indexing). For text nodes, this is the\n amount of characters. For other leaf nodes, it is one. For\n non-leaf nodes, it is the size of the content plus two (the\n start and end token).\n */\n get nodeSize() { return this.isLeaf ? 1 : 2 + this.content.size; }\n /**\n The number of children that the node has.\n */\n get childCount() { return this.content.childCount; }\n /**\n Get the child node at the given index. Raises an error when the\n index is out of range.\n */\n child(index) { return this.content.child(index); }\n /**\n Get the child node at the given index, if it exists.\n */\n maybeChild(index) { return this.content.maybeChild(index); }\n /**\n Call `f` for every child node, passing the node, its offset\n into this parent node, and its index.\n */\n forEach(f) { this.content.forEach(f); }\n /**\n Invoke a callback for all descendant nodes recursively between\n the given two positions that are relative to start of this\n node's content. The callback is invoked with the node, its\n parent-relative position, its parent node, and its child index.\n When the callback returns false for a given node, that node's\n children will not be recursed over. The last parameter can be\n used to specify a starting position to count from.\n */\n nodesBetween(from, to, f, startPos = 0) {\n this.content.nodesBetween(from, to, f, startPos, this);\n }\n /**\n Call the given callback for every descendant node. Doesn't\n descend into a node when the callback returns `false`.\n */\n descendants(f) {\n this.nodesBetween(0, this.content.size, f);\n }\n /**\n Concatenates all the text nodes found in this fragment and its\n children.\n */\n get textContent() {\n return (this.isLeaf && this.type.spec.leafText)\n ? this.type.spec.leafText(this)\n : this.textBetween(0, this.content.size, \"\");\n }\n /**\n Get all text between positions `from` and `to`. When\n `blockSeparator` is given, it will be inserted to separate text\n from different block nodes. If `leafText` is given, it'll be\n inserted for every non-text leaf node encountered, otherwise\n [`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec^leafText) will be used.\n */\n textBetween(from, to, blockSeparator, leafText) {\n return this.content.textBetween(from, to, blockSeparator, leafText);\n }\n /**\n Returns this node's first child, or `null` if there are no\n children.\n */\n get firstChild() { return this.content.firstChild; }\n /**\n Returns this node's last child, or `null` if there are no\n children.\n */\n get lastChild() { return this.content.lastChild; }\n /**\n Test whether two nodes represent the same piece of document.\n */\n eq(other) {\n return this == other || (this.sameMarkup(other) && this.content.eq(other.content));\n }\n /**\n Compare the markup (type, attributes, and marks) of this node to\n those of another. Returns `true` if both have the same markup.\n */\n sameMarkup(other) {\n return this.hasMarkup(other.type, other.attrs, other.marks);\n }\n /**\n Check whether this node's markup correspond to the given type,\n attributes, and marks.\n */\n hasMarkup(type, attrs, marks) {\n return this.type == type &&\n compareDeep(this.attrs, attrs || type.defaultAttrs || emptyAttrs) &&\n Mark.sameSet(this.marks, marks || Mark.none);\n }\n /**\n Create a new node with the same markup as this node, containing\n the given content (or empty, if no content is given).\n */\n copy(content = null) {\n if (content == this.content)\n return this;\n return new Node(this.type, this.attrs, content, this.marks);\n }\n /**\n Create a copy of this node, with the given set of marks instead\n of the node's own marks.\n */\n mark(marks) {\n return marks == this.marks ? this : new Node(this.type, this.attrs, this.content, marks);\n }\n /**\n Create a copy of this node with only the content between the\n given positions. If `to` is not given, it defaults to the end of\n the node.\n */\n cut(from, to = this.content.size) {\n if (from == 0 && to == this.content.size)\n return this;\n return this.copy(this.content.cut(from, to));\n }\n /**\n Cut out the part of the document between the given positions, and\n return it as a `Slice` object.\n */\n slice(from, to = this.content.size, includeParents = false) {\n if (from == to)\n return Slice.empty;\n let $from = this.resolve(from), $to = this.resolve(to);\n let depth = includeParents ? 0 : $from.sharedDepth(to);\n let start = $from.start(depth), node = $from.node(depth);\n let content = node.content.cut($from.pos - start, $to.pos - start);\n return new Slice(content, $from.depth - depth, $to.depth - depth);\n }\n /**\n Replace the part of the document between the given positions with\n the given slice. The slice must 'fit', meaning its open sides\n must be able to connect to the surrounding content, and its\n content nodes must be valid children for the node they are placed\n into. If any of this is violated, an error of type\n [`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.\n */\n replace(from, to, slice) {\n return replace(this.resolve(from), this.resolve(to), slice);\n }\n /**\n Find the node directly after the given position.\n */\n nodeAt(pos) {\n for (let node = this;;) {\n let { index, offset } = node.content.findIndex(pos);\n node = node.maybeChild(index);\n if (!node)\n return null;\n if (offset == pos || node.isText)\n return node;\n pos -= offset + 1;\n }\n }\n /**\n Find the (direct) child node after the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childAfter(pos) {\n let { index, offset } = this.content.findIndex(pos);\n return { node: this.content.maybeChild(index), index, offset };\n }\n /**\n Find the (direct) child node before the given offset, if any,\n and return it along with its index and offset relative to this\n node.\n */\n childBefore(pos) {\n if (pos == 0)\n return { node: null, index: 0, offset: 0 };\n let { index, offset } = this.content.findIndex(pos);\n if (offset < pos)\n return { node: this.content.child(index), index, offset };\n let node = this.content.child(index - 1);\n return { node, index: index - 1, offset: offset - node.nodeSize };\n }\n /**\n Resolve the given position in the document, returning an\n [object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.\n */\n resolve(pos) { return ResolvedPos.resolveCached(this, pos); }\n /**\n @internal\n */\n resolveNoCache(pos) { return ResolvedPos.resolve(this, pos); }\n /**\n Test whether a given mark or mark type occurs in this document\n between the two given positions.\n */\n rangeHasMark(from, to, type) {\n let found = false;\n if (to > from)\n this.nodesBetween(from, to, node => {\n if (type.isInSet(node.marks))\n found = true;\n return !found;\n });\n return found;\n }\n /**\n True when this is a block (non-inline node)\n */\n get isBlock() { return this.type.isBlock; }\n /**\n True when this is a textblock node, a block node with inline\n content.\n */\n get isTextblock() { return this.type.isTextblock; }\n /**\n True when this node allows inline content.\n */\n get inlineContent() { return this.type.inlineContent; }\n /**\n True when this is an inline node (a text node or a node that can\n appear among text).\n */\n get isInline() { return this.type.isInline; }\n /**\n True when this is a text node.\n */\n get isText() { return this.type.isText; }\n /**\n True when this is a leaf node.\n */\n get isLeaf() { return this.type.isLeaf; }\n /**\n True when this is an atom, i.e. when it does not have directly\n editable content. This is usually the same as `isLeaf`, but can\n be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)\n on a node's spec (typically used when the node is displayed as\n an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).\n */\n get isAtom() { return this.type.isAtom; }\n /**\n Return a string representation of this node for debugging\n purposes.\n */\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n let name = this.type.name;\n if (this.content.size)\n name += \"(\" + this.content.toStringInner() + \")\";\n return wrapMarks(this.marks, name);\n }\n /**\n Get the content match in this node at the given index.\n */\n contentMatchAt(index) {\n let match = this.type.contentMatch.matchFragment(this.content, 0, index);\n if (!match)\n throw new Error(\"Called contentMatchAt on a node with invalid content\");\n return match;\n }\n /**\n Test whether replacing the range between `from` and `to` (by\n child index) with the given replacement fragment (which defaults\n to the empty fragment) would leave the node's content valid. You\n can optionally pass `start` and `end` indices into the\n replacement fragment.\n */\n canReplace(from, to, replacement = Fragment.empty, start = 0, end = replacement.childCount) {\n let one = this.contentMatchAt(from).matchFragment(replacement, start, end);\n let two = one && one.matchFragment(this.content, to);\n if (!two || !two.validEnd)\n return false;\n for (let i = start; i < end; i++)\n if (!this.type.allowsMarks(replacement.child(i).marks))\n return false;\n return true;\n }\n /**\n Test whether replacing the range `from` to `to` (by index) with\n a node of the given type would leave the node's content valid.\n */\n canReplaceWith(from, to, type, marks) {\n if (marks && !this.type.allowsMarks(marks))\n return false;\n let start = this.contentMatchAt(from).matchType(type);\n let end = start && start.matchFragment(this.content, to);\n return end ? end.validEnd : false;\n }\n /**\n Test whether the given node's content could be appended to this\n node. If that node is empty, this will only return true if there\n is at least one node type that can appear in both nodes (to avoid\n merging completely incompatible nodes).\n */\n canAppend(other) {\n if (other.content.size)\n return this.canReplace(this.childCount, this.childCount, other.content);\n else\n return this.type.compatibleContent(other.type);\n }\n /**\n Check whether this node and its descendants conform to the\n schema, and raise error when they do not.\n */\n check() {\n this.type.checkContent(this.content);\n let copy = Mark.none;\n for (let i = 0; i < this.marks.length; i++)\n copy = this.marks[i].addToSet(copy);\n if (!Mark.sameSet(copy, this.marks))\n throw new RangeError(`Invalid collection of marks for node ${this.type.name}: ${this.marks.map(m => m.type.name)}`);\n this.content.forEach(node => node.check());\n }\n /**\n Return a JSON-serializeable representation of this node.\n */\n toJSON() {\n let obj = { type: this.type.name };\n for (let _ in this.attrs) {\n obj.attrs = this.attrs;\n break;\n }\n if (this.content.size)\n obj.content = this.content.toJSON();\n if (this.marks.length)\n obj.marks = this.marks.map(n => n.toJSON());\n return obj;\n }\n /**\n Deserialize a node from its JSON representation.\n */\n static fromJSON(schema, json) {\n if (!json)\n throw new RangeError(\"Invalid input for Node.fromJSON\");\n let marks = null;\n if (json.marks) {\n if (!Array.isArray(json.marks))\n throw new RangeError(\"Invalid mark data for Node.fromJSON\");\n marks = json.marks.map(schema.markFromJSON);\n }\n if (json.type == \"text\") {\n if (typeof json.text != \"string\")\n throw new RangeError(\"Invalid text node in JSON\");\n return schema.text(json.text, marks);\n }\n let content = Fragment.fromJSON(schema, json.content);\n return schema.nodeType(json.type).create(json.attrs, content, marks);\n }\n}\nNode.prototype.text = undefined;\nclass TextNode extends Node {\n /**\n @internal\n */\n constructor(type, attrs, content, marks) {\n super(type, attrs, null, marks);\n if (!content)\n throw new RangeError(\"Empty text nodes are not allowed\");\n this.text = content;\n }\n toString() {\n if (this.type.spec.toDebugString)\n return this.type.spec.toDebugString(this);\n return wrapMarks(this.marks, JSON.stringify(this.text));\n }\n get textContent() { return this.text; }\n textBetween(from, to) { return this.text.slice(from, to); }\n get nodeSize() { return this.text.length; }\n mark(marks) {\n return marks == this.marks ? this : new TextNode(this.type, this.attrs, this.text, marks);\n }\n withText(text) {\n if (text == this.text)\n return this;\n return new TextNode(this.type, this.attrs, text, this.marks);\n }\n cut(from = 0, to = this.text.length) {\n if (from == 0 && to == this.text.length)\n return this;\n return this.withText(this.text.slice(from, to));\n }\n eq(other) {\n return this.sameMarkup(other) && this.text == other.text;\n }\n toJSON() {\n let base = super.toJSON();\n base.text = this.text;\n return base;\n }\n}\nfunction wrapMarks(marks, str) {\n for (let i = marks.length - 1; i >= 0; i--)\n str = marks[i].type.name + \"(\" + str + \")\";\n return str;\n}\n\n/**\nInstances of this class represent a match state of a node type's\n[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to\nfind out whether further content matches here, and whether a given\nposition is a valid end of the node.\n*/\nclass ContentMatch {\n /**\n @internal\n */\n constructor(\n /**\n True when this match state represents a valid end of the node.\n */\n validEnd) {\n this.validEnd = validEnd;\n /**\n @internal\n */\n this.next = [];\n /**\n @internal\n */\n this.wrapCache = [];\n }\n /**\n @internal\n */\n static parse(string, nodeTypes) {\n let stream = new TokenStream(string, nodeTypes);\n if (stream.next == null)\n return ContentMatch.empty;\n let expr = parseExpr(stream);\n if (stream.next)\n stream.err(\"Unexpected trailing text\");\n let match = dfa(nfa(expr));\n checkForDeadEnds(match, stream);\n return match;\n }\n /**\n Match a node type, returning a match after that node if\n successful.\n */\n matchType(type) {\n for (let i = 0; i < this.next.length; i++)\n if (this.next[i].type == type)\n return this.next[i].next;\n return null;\n }\n /**\n Try to match a fragment. Returns the resulting match when\n successful.\n */\n matchFragment(frag, start = 0, end = frag.childCount) {\n let cur = this;\n for (let i = start; cur && i < end; i++)\n cur = cur.matchType(frag.child(i).type);\n return cur;\n }\n /**\n @internal\n */\n get inlineContent() {\n return this.next.length != 0 && this.next[0].type.isInline;\n }\n /**\n Get the first matching node type at this match position that can\n be generated.\n */\n get defaultType() {\n for (let i = 0; i < this.next.length; i++) {\n let { type } = this.next[i];\n if (!(type.isText || type.hasRequiredAttrs()))\n return type;\n }\n return null;\n }\n /**\n @internal\n */\n compatible(other) {\n for (let i = 0; i < this.next.length; i++)\n for (let j = 0; j < other.next.length; j++)\n if (this.next[i].type == other.next[j].type)\n return true;\n return false;\n }\n /**\n Try to match the given fragment, and if that fails, see if it can\n be made to match by inserting nodes in front of it. When\n successful, return a fragment of inserted nodes (which may be\n empty if nothing had to be inserted). When `toEnd` is true, only\n return a fragment if the resulting match goes to the end of the\n content expression.\n */\n fillBefore(after, toEnd = false, startIndex = 0) {\n let seen = [this];\n function search(match, types) {\n let finished = match.matchFragment(after, startIndex);\n if (finished && (!toEnd || finished.validEnd))\n return Fragment.from(types.map(tp => tp.createAndFill()));\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {\n seen.push(next);\n let found = search(next, types.concat(type));\n if (found)\n return found;\n }\n }\n return null;\n }\n return search(this, []);\n }\n /**\n Find a set of wrapping node types that would allow a node of the\n given type to appear at this position. The result may be empty\n (when it fits directly) and will be null when no such wrapping\n exists.\n */\n findWrapping(target) {\n for (let i = 0; i < this.wrapCache.length; i += 2)\n if (this.wrapCache[i] == target)\n return this.wrapCache[i + 1];\n let computed = this.computeWrapping(target);\n this.wrapCache.push(target, computed);\n return computed;\n }\n /**\n @internal\n */\n computeWrapping(target) {\n let seen = Object.create(null), active = [{ match: this, type: null, via: null }];\n while (active.length) {\n let current = active.shift(), match = current.match;\n if (match.matchType(target)) {\n let result = [];\n for (let obj = current; obj.type; obj = obj.via)\n result.push(obj.type);\n return result.reverse();\n }\n for (let i = 0; i < match.next.length; i++) {\n let { type, next } = match.next[i];\n if (!type.isLeaf && !type.hasRequiredAttrs() && !(type.name in seen) && (!current.type || next.validEnd)) {\n active.push({ match: type.contentMatch, type, via: current });\n seen[type.name] = true;\n }\n }\n }\n return null;\n }\n /**\n The number of outgoing edges this node has in the finite\n automaton that describes the content expression.\n */\n get edgeCount() {\n return this.next.length;\n }\n /**\n Get the _n_th outgoing edge from this node in the finite\n automaton that describes the content expression.\n */\n edge(n) {\n if (n >= this.next.length)\n throw new RangeError(`There's no ${n}th edge in this content match`);\n return this.next[n];\n }\n /**\n @internal\n */\n toString() {\n let seen = [];\n function scan(m) {\n seen.push(m);\n for (let i = 0; i < m.next.length; i++)\n if (seen.indexOf(m.next[i].next) == -1)\n scan(m.next[i].next);\n }\n scan(this);\n return seen.map((m, i) => {\n let out = i + (m.validEnd ? \"*\" : \" \") + \" \";\n for (let i = 0; i < m.next.length; i++)\n out += (i ? \", \" : \"\") + m.next[i].type.name + \"->\" + seen.indexOf(m.next[i].next);\n return out;\n }).join(\"\\n\");\n }\n}\n/**\n@internal\n*/\nContentMatch.empty = new ContentMatch(true);\nclass TokenStream {\n constructor(string, nodeTypes) {\n this.string = string;\n this.nodeTypes = nodeTypes;\n this.inline = null;\n this.pos = 0;\n this.tokens = string.split(/\\s*(?=\\b|\\W|$)/);\n if (this.tokens[this.tokens.length - 1] == \"\")\n this.tokens.pop();\n if (this.tokens[0] == \"\")\n this.tokens.shift();\n }\n get next() { return this.tokens[this.pos]; }\n eat(tok) { return this.next == tok && (this.pos++ || true); }\n err(str) { throw new SyntaxError(str + \" (in content expression '\" + this.string + \"')\"); }\n}\nfunction parseExpr(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSeq(stream));\n } while (stream.eat(\"|\"));\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n}\nfunction parseExprSeq(stream) {\n let exprs = [];\n do {\n exprs.push(parseExprSubscript(stream));\n } while (stream.next && stream.next != \")\" && stream.next != \"|\");\n return exprs.length == 1 ? exprs[0] : { type: \"seq\", exprs };\n}\nfunction parseExprSubscript(stream) {\n let expr = parseExprAtom(stream);\n for (;;) {\n if (stream.eat(\"+\"))\n expr = { type: \"plus\", expr };\n else if (stream.eat(\"*\"))\n expr = { type: \"star\", expr };\n else if (stream.eat(\"?\"))\n expr = { type: \"opt\", expr };\n else if (stream.eat(\"{\"))\n expr = parseExprRange(stream, expr);\n else\n break;\n }\n return expr;\n}\nfunction parseNum(stream) {\n if (/\\D/.test(stream.next))\n stream.err(\"Expected number, got '\" + stream.next + \"'\");\n let result = Number(stream.next);\n stream.pos++;\n return result;\n}\nfunction parseExprRange(stream, expr) {\n let min = parseNum(stream), max = min;\n if (stream.eat(\",\")) {\n if (stream.next != \"}\")\n max = parseNum(stream);\n else\n max = -1;\n }\n if (!stream.eat(\"}\"))\n stream.err(\"Unclosed braced range\");\n return { type: \"range\", min, max, expr };\n}\nfunction resolveName(stream, name) {\n let types = stream.nodeTypes, type = types[name];\n if (type)\n return [type];\n let result = [];\n for (let typeName in types) {\n let type = types[typeName];\n if (type.groups.indexOf(name) > -1)\n result.push(type);\n }\n if (result.length == 0)\n stream.err(\"No node type or group '\" + name + \"' found\");\n return result;\n}\nfunction parseExprAtom(stream) {\n if (stream.eat(\"(\")) {\n let expr = parseExpr(stream);\n if (!stream.eat(\")\"))\n stream.err(\"Missing closing paren\");\n return expr;\n }\n else if (!/\\W/.test(stream.next)) {\n let exprs = resolveName(stream, stream.next).map(type => {\n if (stream.inline == null)\n stream.inline = type.isInline;\n else if (stream.inline != type.isInline)\n stream.err(\"Mixing inline and block content\");\n return { type: \"name\", value: type };\n });\n stream.pos++;\n return exprs.length == 1 ? exprs[0] : { type: \"choice\", exprs };\n }\n else {\n stream.err(\"Unexpected token '\" + stream.next + \"'\");\n }\n}\n/**\nConstruct an NFA from an expression as returned by the parser. The\nNFA is represented as an array of states, which are themselves\narrays of edges, which are `{term, to}` objects. The first state is\nthe entry state and the last node is the success state.\n\nNote that unlike typical NFAs, the edge ordering in this one is\nsignificant, in that it is used to contruct filler content when\nnecessary.\n*/\nfunction nfa(expr) {\n let nfa = [[]];\n connect(compile(expr, 0), node());\n return nfa;\n function node() { return nfa.push([]) - 1; }\n function edge(from, to, term) {\n let edge = { term, to };\n nfa[from].push(edge);\n return edge;\n }\n function connect(edges, to) {\n edges.forEach(edge => edge.to = to);\n }\n function compile(expr, from) {\n if (expr.type == \"choice\") {\n return expr.exprs.reduce((out, expr) => out.concat(compile(expr, from)), []);\n }\n else if (expr.type == \"seq\") {\n for (let i = 0;; i++) {\n let next = compile(expr.exprs[i], from);\n if (i == expr.exprs.length - 1)\n return next;\n connect(next, from = node());\n }\n }\n else if (expr.type == \"star\") {\n let loop = node();\n edge(from, loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"plus\") {\n let loop = node();\n connect(compile(expr.expr, from), loop);\n connect(compile(expr.expr, loop), loop);\n return [edge(loop)];\n }\n else if (expr.type == \"opt\") {\n return [edge(from)].concat(compile(expr.expr, from));\n }\n else if (expr.type == \"range\") {\n let cur = from;\n for (let i = 0; i < expr.min; i++) {\n let next = node();\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n if (expr.max == -1) {\n connect(compile(expr.expr, cur), cur);\n }\n else {\n for (let i = expr.min; i < expr.max; i++) {\n let next = node();\n edge(cur, next);\n connect(compile(expr.expr, cur), next);\n cur = next;\n }\n }\n return [edge(cur)];\n }\n else if (expr.type == \"name\") {\n return [edge(from, undefined, expr.value)];\n }\n else {\n throw new Error(\"Unknown expr type\");\n }\n }\n}\nfunction cmp(a, b) { return b - a; }\n// Get the set of nodes reachable by null edges from `node`. Omit\n// nodes with only a single null-out-edge, since they may lead to\n// needless duplicated nodes.\nfunction nullFrom(nfa, node) {\n let result = [];\n scan(node);\n return result.sort(cmp);\n function scan(node) {\n let edges = nfa[node];\n if (edges.length == 1 && !edges[0].term)\n return scan(edges[0].to);\n result.push(node);\n for (let i = 0; i < edges.length; i++) {\n let { term, to } = edges[i];\n if (!term && result.indexOf(to) == -1)\n scan(to);\n }\n }\n}\n// Compiles an NFA as produced by `nfa` into a DFA, modeled as a set\n// of state objects (`ContentMatch` instances) with transitions\n// between them.\nfunction dfa(nfa) {\n let labeled = Object.create(null);\n return explore(nullFrom(nfa, 0));\n function explore(states) {\n let out = [];\n states.forEach(node => {\n nfa[node].forEach(({ term, to }) => {\n if (!term)\n return;\n let set;\n for (let i = 0; i < out.length; i++)\n if (out[i][0] == term)\n set = out[i][1];\n nullFrom(nfa, to).forEach(node => {\n if (!set)\n out.push([term, set = []]);\n if (set.indexOf(node) == -1)\n set.push(node);\n });\n });\n });\n let state = labeled[states.join(\",\")] = new ContentMatch(states.indexOf(nfa.length - 1) > -1);\n for (let i = 0; i < out.length; i++) {\n let states = out[i][1].sort(cmp);\n state.next.push({ type: out[i][0], next: labeled[states.join(\",\")] || explore(states) });\n }\n return state;\n }\n}\nfunction checkForDeadEnds(match, stream) {\n for (let i = 0, work = [match]; i < work.length; i++) {\n let state = work[i], dead = !state.validEnd, nodes = [];\n for (let j = 0; j < state.next.length; j++) {\n let { type, next } = state.next[j];\n nodes.push(type.name);\n if (dead && !(type.isText || type.hasRequiredAttrs()))\n dead = false;\n if (work.indexOf(next) == -1)\n work.push(next);\n }\n if (dead)\n stream.err(\"Only non-generatable nodes (\" + nodes.join(\", \") + \") in a required position (see https://prosemirror.net/docs/guide/#generatable)\");\n }\n}\n\n// For node types where all attrs have a default value (or which don't\n// have any attributes), build up a single reusable default attribute\n// object, and use it for all nodes that don't specify specific\n// attributes.\nfunction defaultAttrs(attrs) {\n let defaults = Object.create(null);\n for (let attrName in attrs) {\n let attr = attrs[attrName];\n if (!attr.hasDefault)\n return null;\n defaults[attrName] = attr.default;\n }\n return defaults;\n}\nfunction computeAttrs(attrs, value) {\n let built = Object.create(null);\n for (let name in attrs) {\n let given = value && value[name];\n if (given === undefined) {\n let attr = attrs[name];\n if (attr.hasDefault)\n given = attr.default;\n else\n throw new RangeError(\"No value supplied for attribute \" + name);\n }\n built[name] = given;\n }\n return built;\n}\nfunction initAttrs(attrs) {\n let result = Object.create(null);\n if (attrs)\n for (let name in attrs)\n result[name] = new Attribute(attrs[name]);\n return result;\n}\n/**\nNode types are objects allocated once per `Schema` and used to\n[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information\nabout the node type, such as its name and what kind of node it\nrepresents.\n*/\nclass NodeType {\n /**\n @internal\n */\n constructor(\n /**\n The name the node type has in this schema.\n */\n name, \n /**\n A link back to the `Schema` the node type belongs to.\n */\n schema, \n /**\n The spec that this type is based on\n */\n spec) {\n this.name = name;\n this.schema = schema;\n this.spec = spec;\n /**\n The set of marks allowed in this node. `null` means all marks\n are allowed.\n */\n this.markSet = null;\n this.groups = spec.group ? spec.group.split(\" \") : [];\n this.attrs = initAttrs(spec.attrs);\n this.defaultAttrs = defaultAttrs(this.attrs);\n this.contentMatch = null;\n this.inlineContent = null;\n this.isBlock = !(spec.inline || name == \"text\");\n this.isText = name == \"text\";\n }\n /**\n True if this is an inline type.\n */\n get isInline() { return !this.isBlock; }\n /**\n True if this is a textblock type, a block that contains inline\n content.\n */\n get isTextblock() { return this.isBlock && this.inlineContent; }\n /**\n True for node types that allow no content.\n */\n get isLeaf() { return this.contentMatch == ContentMatch.empty; }\n /**\n True when this node is an atom, i.e. when it does not have\n directly editable content.\n */\n get isAtom() { return this.isLeaf || !!this.spec.atom; }\n /**\n The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.\n */\n get whitespace() {\n return this.spec.whitespace || (this.spec.code ? \"pre\" : \"normal\");\n }\n /**\n Tells you whether this node type has any required attributes.\n */\n hasRequiredAttrs() {\n for (let n in this.attrs)\n if (this.attrs[n].isRequired)\n return true;\n return false;\n }\n /**\n Indicates whether this node allows some of the same content as\n the given node type.\n */\n compatibleContent(other) {\n return this == other || this.contentMatch.compatible(other.contentMatch);\n }\n /**\n @internal\n */\n computeAttrs(attrs) {\n if (!attrs && this.defaultAttrs)\n return this.defaultAttrs;\n else\n return computeAttrs(this.attrs, attrs);\n }\n /**\n Create a `Node` of this type. The given attributes are\n checked and defaulted (you can pass `null` to use the type's\n defaults entirely, if no required attributes exist). `content`\n may be a `Fragment`, a node, an array of nodes, or\n `null`. Similarly `marks` may be `null` to default to the empty\n set of marks.\n */\n create(attrs = null, content, marks) {\n if (this.isText)\n throw new Error(\"NodeType.create can't construct text nodes\");\n return new Node(this, this.computeAttrs(attrs), Fragment.from(content), Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content\n against the node type's content restrictions, and throw an error\n if it doesn't match.\n */\n createChecked(attrs = null, content, marks) {\n content = Fragment.from(content);\n this.checkContent(content);\n return new Node(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));\n }\n /**\n Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is\n necessary to add nodes to the start or end of the given fragment\n to make it fit the node. If no fitting wrapping can be found,\n return null. Note that, due to the fact that required nodes can\n always be created, this will always succeed if you pass null or\n `Fragment.empty` as content.\n */\n createAndFill(attrs = null, content, marks) {\n attrs = this.computeAttrs(attrs);\n content = Fragment.from(content);\n if (content.size) {\n let before = this.contentMatch.fillBefore(content);\n if (!before)\n return null;\n content = before.append(content);\n }\n let matched = this.contentMatch.matchFragment(content);\n let after = matched && matched.fillBefore(Fragment.empty, true);\n if (!after)\n return null;\n return new Node(this, attrs, content.append(after), Mark.setFrom(marks));\n }\n /**\n Returns true if the given fragment is valid content for this node\n type with the given attributes.\n */\n validContent(content) {\n let result = this.contentMatch.matchFragment(content);\n if (!result || !result.validEnd)\n return false;\n for (let i = 0; i < content.childCount; i++)\n if (!this.allowsMarks(content.child(i).marks))\n return false;\n return true;\n }\n /**\n Throws a RangeError if the given fragment is not valid content for this\n node type.\n @internal\n */\n checkContent(content) {\n if (!this.validContent(content))\n throw new RangeError(`Invalid content for node ${this.name}: ${content.toString().slice(0, 50)}`);\n }\n /**\n Check whether the given mark type is allowed in this node.\n */\n allowsMarkType(markType) {\n return this.markSet == null || this.markSet.indexOf(markType) > -1;\n }\n /**\n Test whether the given set of marks are allowed in this node.\n */\n allowsMarks(marks) {\n if (this.markSet == null)\n return true;\n for (let i = 0; i < marks.length; i++)\n if (!this.allowsMarkType(marks[i].type))\n return false;\n return true;\n }\n /**\n Removes the marks that are not allowed in this node from the given set.\n */\n allowedMarks(marks) {\n if (this.markSet == null)\n return marks;\n let copy;\n for (let i = 0; i < marks.length; i++) {\n if (!this.allowsMarkType(marks[i].type)) {\n if (!copy)\n copy = marks.slice(0, i);\n }\n else if (copy) {\n copy.push(marks[i]);\n }\n }\n return !copy ? marks : copy.length ? copy : Mark.none;\n }\n /**\n @internal\n */\n static compile(nodes, schema) {\n let result = Object.create(null);\n nodes.forEach((name, spec) => result[name] = new NodeType(name, schema, spec));\n let topType = schema.spec.topNode || \"doc\";\n if (!result[topType])\n throw new RangeError(\"Schema is missing its top node type ('\" + topType + \"')\");\n if (!result.text)\n throw new RangeError(\"Every schema needs a 'text' type\");\n for (let _ in result.text.attrs)\n throw new RangeError(\"The text node type should not have attributes\");\n return result;\n }\n}\n// Attribute descriptors\nclass Attribute {\n constructor(options) {\n this.hasDefault = Object.prototype.hasOwnProperty.call(options, \"default\");\n this.default = options.default;\n }\n get isRequired() {\n return !this.hasDefault;\n }\n}\n// Marks\n/**\nLike nodes, marks (which are associated with nodes to signify\nthings like emphasis or being part of a link) are\n[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are\ninstantiated once per `Schema`.\n*/\nclass MarkType {\n /**\n @internal\n */\n constructor(\n /**\n The name of the mark type.\n */\n name, \n /**\n @internal\n */\n rank, \n /**\n The schema that this mark type instance is part of.\n */\n schema, \n /**\n The spec on which the type is based.\n */\n spec) {\n this.name = name;\n this.rank = rank;\n this.schema = schema;\n this.spec = spec;\n this.attrs = initAttrs(spec.attrs);\n this.excluded = null;\n let defaults = defaultAttrs(this.attrs);\n this.instance = defaults ? new Mark(this, defaults) : null;\n }\n /**\n Create a mark of this type. `attrs` may be `null` or an object\n containing only some of the mark's attributes. The others, if\n they have defaults, will be added.\n */\n create(attrs = null) {\n if (!attrs && this.instance)\n return this.instance;\n return new Mark(this, computeAttrs(this.attrs, attrs));\n }\n /**\n @internal\n */\n static compile(marks, schema) {\n let result = Object.create(null), rank = 0;\n marks.forEach((name, spec) => result[name] = new MarkType(name, rank++, schema, spec));\n return result;\n }\n /**\n When there is a mark of this type in the given set, a new set\n without it is returned. Otherwise, the input set is returned.\n */\n removeFromSet(set) {\n for (var i = 0; i < set.length; i++)\n if (set[i].type == this) {\n set = set.slice(0, i).concat(set.slice(i + 1));\n i--;\n }\n return set;\n }\n /**\n Tests whether there is a mark of this type in the given set.\n */\n isInSet(set) {\n for (let i = 0; i < set.length; i++)\n if (set[i].type == this)\n return set[i];\n }\n /**\n Queries whether a given mark type is\n [excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.\n */\n excludes(other) {\n return this.excluded.indexOf(other) > -1;\n }\n}\n/**\nA document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark\ntype](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may\noccur in conforming documents, and provides functionality for\ncreating and deserializing such documents.\n\nWhen given, the type parameters provide the names of the nodes and\nmarks in this schema.\n*/\nclass Schema {\n /**\n Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).\n */\n constructor(spec) {\n /**\n An object for storing whatever values modules may want to\n compute and cache per schema. (If you want to store something\n in it, try to use property names unlikely to clash.)\n */\n this.cached = Object.create(null);\n let instanceSpec = this.spec = {};\n for (let prop in spec)\n instanceSpec[prop] = spec[prop];\n instanceSpec.nodes = OrderedMap.from(spec.nodes),\n instanceSpec.marks = OrderedMap.from(spec.marks || {}),\n this.nodes = NodeType.compile(this.spec.nodes, this);\n this.marks = MarkType.compile(this.spec.marks, this);\n let contentExprCache = Object.create(null);\n for (let prop in this.nodes) {\n if (prop in this.marks)\n throw new RangeError(prop + \" can not be both a node and a mark\");\n let type = this.nodes[prop], contentExpr = type.spec.content || \"\", markExpr = type.spec.marks;\n type.contentMatch = contentExprCache[contentExpr] ||\n (contentExprCache[contentExpr] = ContentMatch.parse(contentExpr, this.nodes));\n type.inlineContent = type.contentMatch.inlineContent;\n type.markSet = markExpr == \"_\" ? null :\n markExpr ? gatherMarks(this, markExpr.split(\" \")) :\n markExpr == \"\" || !type.inlineContent ? [] : null;\n }\n for (let prop in this.marks) {\n let type = this.marks[prop], excl = type.spec.excludes;\n type.excluded = excl == null ? [type] : excl == \"\" ? [] : gatherMarks(this, excl.split(\" \"));\n }\n this.nodeFromJSON = this.nodeFromJSON.bind(this);\n this.markFromJSON = this.markFromJSON.bind(this);\n this.topNodeType = this.nodes[this.spec.topNode || \"doc\"];\n this.cached.wrappings = Object.create(null);\n }\n /**\n Create a node in this schema. The `type` may be a string or a\n `NodeType` instance. Attributes will be extended with defaults,\n `content` may be a `Fragment`, `null`, a `Node`, or an array of\n nodes.\n */\n node(type, attrs = null, content, marks) {\n if (typeof type == \"string\")\n type = this.nodeType(type);\n else if (!(type instanceof NodeType))\n throw new RangeError(\"Invalid node type: \" + type);\n else if (type.schema != this)\n throw new RangeError(\"Node type from different schema used (\" + type.name + \")\");\n return type.createChecked(attrs, content, marks);\n }\n /**\n Create a text node in the schema. Empty text nodes are not\n allowed.\n */\n text(text, marks) {\n let type = this.nodes.text;\n return new TextNode(type, type.defaultAttrs, text, Mark.setFrom(marks));\n }\n /**\n Create a mark with the given type and attributes.\n */\n mark(type, attrs) {\n if (typeof type == \"string\")\n type = this.marks[type];\n return type.create(attrs);\n }\n /**\n Deserialize a node from its JSON representation. This method is\n bound.\n */\n nodeFromJSON(json) {\n return Node.fromJSON(this, json);\n }\n /**\n Deserialize a mark from its JSON representation. This method is\n bound.\n */\n markFromJSON(json) {\n return Mark.fromJSON(this, json);\n }\n /**\n @internal\n */\n nodeType(name) {\n let found = this.nodes[name];\n if (!found)\n throw new RangeError(\"Unknown node type: \" + name);\n return found;\n }\n}\nfunction gatherMarks(schema, marks) {\n let found = [];\n for (let i = 0; i < marks.length; i++) {\n let name = marks[i], mark = schema.marks[name], ok = mark;\n if (mark) {\n found.push(mark);\n }\n else {\n for (let prop in schema.marks) {\n let mark = schema.marks[prop];\n if (name == \"_\" || (mark.spec.group && mark.spec.group.split(\" \").indexOf(name) > -1))\n found.push(ok = mark);\n }\n }\n if (!ok)\n throw new SyntaxError(\"Unknown mark type: '\" + marks[i] + \"'\");\n }\n return found;\n}\n\n/**\nA DOM parser represents a strategy for parsing DOM content into a\nProseMirror document conforming to a given schema. Its behavior is\ndefined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).\n*/\nclass DOMParser {\n /**\n Create a parser that targets the given schema, using the given\n parsing rules.\n */\n constructor(\n /**\n The schema into which the parser parses.\n */\n schema, \n /**\n The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser\n uses, in order of precedence.\n */\n rules) {\n this.schema = schema;\n this.rules = rules;\n /**\n @internal\n */\n this.tags = [];\n /**\n @internal\n */\n this.styles = [];\n rules.forEach(rule => {\n if (rule.tag)\n this.tags.push(rule);\n else if (rule.style)\n this.styles.push(rule);\n });\n // Only normalize list elements when lists in the schema can't directly contain themselves\n this.normalizeLists = !this.tags.some(r => {\n if (!/^(ul|ol)\\b/.test(r.tag) || !r.node)\n return false;\n let node = schema.nodes[r.node];\n return node.contentMatch.matchType(node);\n });\n }\n /**\n Parse a document from the content of a DOM node.\n */\n parse(dom, options = {}) {\n let context = new ParseContext(this, options, false);\n context.addAll(dom, options.from, options.to);\n return context.finish();\n }\n /**\n Parses the content of the given DOM node, like\n [`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of\n options. But unlike that method, which produces a whole node,\n this one returns a slice that is open at the sides, meaning that\n the schema constraints aren't applied to the start of nodes to\n the left of the input and the end of nodes at the end.\n */\n parseSlice(dom, options = {}) {\n let context = new ParseContext(this, options, true);\n context.addAll(dom, options.from, options.to);\n return Slice.maxOpen(context.finish());\n }\n /**\n @internal\n */\n matchTag(dom, context, after) {\n for (let i = after ? this.tags.indexOf(after) + 1 : 0; i < this.tags.length; i++) {\n let rule = this.tags[i];\n if (matches(dom, rule.tag) &&\n (rule.namespace === undefined || dom.namespaceURI == rule.namespace) &&\n (!rule.context || context.matchesContext(rule.context))) {\n if (rule.getAttrs) {\n let result = rule.getAttrs(dom);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n }\n /**\n @internal\n */\n matchStyle(prop, value, context, after) {\n for (let i = after ? this.styles.indexOf(after) + 1 : 0; i < this.styles.length; i++) {\n let rule = this.styles[i], style = rule.style;\n if (style.indexOf(prop) != 0 ||\n rule.context && !context.matchesContext(rule.context) ||\n // Test that the style string either precisely matches the prop,\n // or has an '=' sign after the prop, followed by the given\n // value.\n style.length > prop.length &&\n (style.charCodeAt(prop.length) != 61 || style.slice(prop.length + 1) != value))\n continue;\n if (rule.getAttrs) {\n let result = rule.getAttrs(value);\n if (result === false)\n continue;\n rule.attrs = result || undefined;\n }\n return rule;\n }\n }\n /**\n @internal\n */\n static schemaRules(schema) {\n let result = [];\n function insert(rule) {\n let priority = rule.priority == null ? 50 : rule.priority, i = 0;\n for (; i < result.length; i++) {\n let next = result[i], nextPriority = next.priority == null ? 50 : next.priority;\n if (nextPriority < priority)\n break;\n }\n result.splice(i, 0, rule);\n }\n for (let name in schema.marks) {\n let rules = schema.marks[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n rule.mark = name;\n });\n }\n for (let name in schema.nodes) {\n let rules = schema.nodes[name].spec.parseDOM;\n if (rules)\n rules.forEach(rule => {\n insert(rule = copy(rule));\n rule.node = name;\n });\n }\n return result;\n }\n /**\n Construct a DOM parser using the parsing rules listed in a\n schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by\n [priority](https://prosemirror.net/docs/ref/#model.ParseRule.priority).\n */\n static fromSchema(schema) {\n return schema.cached.domParser ||\n (schema.cached.domParser = new DOMParser(schema, DOMParser.schemaRules(schema)));\n }\n}\nconst blockTags = {\n address: true, article: true, aside: true, blockquote: true, canvas: true,\n dd: true, div: true, dl: true, fieldset: true, figcaption: true, figure: true,\n footer: true, form: true, h1: true, h2: true, h3: true, h4: true, h5: true,\n h6: true, header: true, hgroup: true, hr: true, li: true, noscript: true, ol: true,\n output: true, p: true, pre: true, section: true, table: true, tfoot: true, ul: true\n};\nconst ignoreTags = {\n head: true, noscript: true, object: true, script: true, style: true, title: true\n};\nconst listTags = { ol: true, ul: true };\n// Using a bitfield for node context options\nconst OPT_PRESERVE_WS = 1, OPT_PRESERVE_WS_FULL = 2, OPT_OPEN_LEFT = 4;\nfunction wsOptionsFor(type, preserveWhitespace, base) {\n if (preserveWhitespace != null)\n return (preserveWhitespace ? OPT_PRESERVE_WS : 0) |\n (preserveWhitespace === \"full\" ? OPT_PRESERVE_WS_FULL : 0);\n return type && type.whitespace == \"pre\" ? OPT_PRESERVE_WS | OPT_PRESERVE_WS_FULL : base & ~OPT_OPEN_LEFT;\n}\nclass NodeContext {\n constructor(type, attrs, \n // Marks applied to this node itself\n marks, \n // Marks that can't apply here, but will be used in children if possible\n pendingMarks, solid, match, options) {\n this.type = type;\n this.attrs = attrs;\n this.marks = marks;\n this.pendingMarks = pendingMarks;\n this.solid = solid;\n this.options = options;\n this.content = [];\n // Marks applied to the node's children\n this.activeMarks = Mark.none;\n // Nested Marks with same type\n this.stashMarks = [];\n this.match = match || (options & OPT_OPEN_LEFT ? null : type.contentMatch);\n }\n findWrapping(node) {\n if (!this.match) {\n if (!this.type)\n return [];\n let fill = this.type.contentMatch.fillBefore(Fragment.from(node));\n if (fill) {\n this.match = this.type.contentMatch.matchFragment(fill);\n }\n else {\n let start = this.type.contentMatch, wrap;\n if (wrap = start.findWrapping(node.type)) {\n this.match = start;\n return wrap;\n }\n else {\n return null;\n }\n }\n }\n return this.match.findWrapping(node.type);\n }\n finish(openEnd) {\n if (!(this.options & OPT_PRESERVE_WS)) { // Strip trailing whitespace\n let last = this.content[this.content.length - 1], m;\n if (last && last.isText && (m = /[ \\t\\r\\n\\u000c]+$/.exec(last.text))) {\n let text = last;\n if (last.text.length == m[0].length)\n this.content.pop();\n else\n this.content[this.content.length - 1] = text.withText(text.text.slice(0, text.text.length - m[0].length));\n }\n }\n let content = Fragment.from(this.content);\n if (!openEnd && this.match)\n content = content.append(this.match.fillBefore(Fragment.empty, true));\n return this.type ? this.type.create(this.attrs, content, this.marks) : content;\n }\n popFromStashMark(mark) {\n for (let i = this.stashMarks.length - 1; i >= 0; i--)\n if (mark.eq(this.stashMarks[i]))\n return this.stashMarks.splice(i, 1)[0];\n }\n applyPending(nextType) {\n for (let i = 0, pending = this.pendingMarks; i < pending.length; i++) {\n let mark = pending[i];\n if ((this.type ? this.type.allowsMarkType(mark.type) : markMayApply(mark.type, nextType)) &&\n !mark.isInSet(this.activeMarks)) {\n this.activeMarks = mark.addToSet(this.activeMarks);\n this.pendingMarks = mark.removeFromSet(this.pendingMarks);\n }\n }\n }\n inlineContext(node) {\n if (this.type)\n return this.type.inlineContent;\n if (this.content.length)\n return this.content[0].isInline;\n return node.parentNode && !blockTags.hasOwnProperty(node.parentNode.nodeName.toLowerCase());\n }\n}\nclass ParseContext {\n constructor(\n // The parser we are using.\n parser, \n // The options passed to this parse.\n options, isOpen) {\n this.parser = parser;\n this.options = options;\n this.isOpen = isOpen;\n this.open = 0;\n let topNode = options.topNode, topContext;\n let topOptions = wsOptionsFor(null, options.preserveWhitespace, 0) | (isOpen ? OPT_OPEN_LEFT : 0);\n if (topNode)\n topContext = new NodeContext(topNode.type, topNode.attrs, Mark.none, Mark.none, true, options.topMatch || topNode.type.contentMatch, topOptions);\n else if (isOpen)\n topContext = new NodeContext(null, null, Mark.none, Mark.none, true, null, topOptions);\n else\n topContext = new NodeContext(parser.schema.topNodeType, null, Mark.none, Mark.none, true, null, topOptions);\n this.nodes = [topContext];\n this.find = options.findPositions;\n this.needsBlock = false;\n }\n get top() {\n return this.nodes[this.open];\n }\n // Add a DOM node to the content. Text is inserted as text node,\n // otherwise, the node is passed to `addElement` or, if it has a\n // `style` attribute, `addElementWithStyles`.\n addDOM(dom) {\n if (dom.nodeType == 3) {\n this.addTextNode(dom);\n }\n else if (dom.nodeType == 1) {\n let style = dom.getAttribute(\"style\");\n let marks = style ? this.readStyles(parseStyles(style)) : null, top = this.top;\n if (marks != null)\n for (let i = 0; i < marks.length; i++)\n this.addPendingMark(marks[i]);\n this.addElement(dom);\n if (marks != null)\n for (let i = 0; i < marks.length; i++)\n this.removePendingMark(marks[i], top);\n }\n }\n addTextNode(dom) {\n let value = dom.nodeValue;\n let top = this.top;\n if (top.options & OPT_PRESERVE_WS_FULL ||\n top.inlineContext(dom) ||\n /[^ \\t\\r\\n\\u000c]/.test(value)) {\n if (!(top.options & OPT_PRESERVE_WS)) {\n value = value.replace(/[ \\t\\r\\n\\u000c]+/g, \" \");\n // If this starts with whitespace, and there is no node before it, or\n // a hard break, or a text node that ends with whitespace, strip the\n // leading space.\n if (/^[ \\t\\r\\n\\u000c]/.test(value) && this.open == this.nodes.length - 1) {\n let nodeBefore = top.content[top.content.length - 1];\n let domNodeBefore = dom.previousSibling;\n if (!nodeBefore ||\n (domNodeBefore && domNodeBefore.nodeName == 'BR') ||\n (nodeBefore.isText && /[ \\t\\r\\n\\u000c]$/.test(nodeBefore.text)))\n value = value.slice(1);\n }\n }\n else if (!(top.options & OPT_PRESERVE_WS_FULL)) {\n value = value.replace(/\\r?\\n|\\r/g, \" \");\n }\n else {\n value = value.replace(/\\r\\n?/g, \"\\n\");\n }\n if (value)\n this.insertNode(this.parser.schema.text(value));\n this.findInText(dom);\n }\n else {\n this.findInside(dom);\n }\n }\n // Try to find a handler for the given tag and use that to parse. If\n // none is found, the element's content nodes are added directly.\n addElement(dom, matchAfter) {\n let name = dom.nodeName.toLowerCase(), ruleID;\n if (listTags.hasOwnProperty(name) && this.parser.normalizeLists)\n normalizeList(dom);\n let rule = (this.options.ruleFromNode && this.options.ruleFromNode(dom)) ||\n (ruleID = this.parser.matchTag(dom, this, matchAfter));\n if (rule ? rule.ignore : ignoreTags.hasOwnProperty(name)) {\n this.findInside(dom);\n this.ignoreFallback(dom);\n }\n else if (!rule || rule.skip || rule.closeParent) {\n if (rule && rule.closeParent)\n this.open = Math.max(0, this.open - 1);\n else if (rule && rule.skip.nodeType)\n dom = rule.skip;\n let sync, top = this.top, oldNeedsBlock = this.needsBlock;\n if (blockTags.hasOwnProperty(name)) {\n if (top.content.length && top.content[0].isInline && this.open) {\n this.open--;\n top = this.top;\n }\n sync = true;\n if (!top.type)\n this.needsBlock = true;\n }\n else if (!dom.firstChild) {\n this.leafFallback(dom);\n return;\n }\n this.addAll(dom);\n if (sync)\n this.sync(top);\n this.needsBlock = oldNeedsBlock;\n }\n else {\n this.addElementByRule(dom, rule, rule.consuming === false ? ruleID : undefined);\n }\n }\n // Called for leaf DOM nodes that would otherwise be ignored\n leafFallback(dom) {\n if (dom.nodeName == \"BR\" && this.top.type && this.top.type.inlineContent)\n this.addTextNode(dom.ownerDocument.createTextNode(\"\\n\"));\n }\n // Called for ignored nodes\n ignoreFallback(dom) {\n // Ignored BR nodes should at least create an inline context\n if (dom.nodeName == \"BR\" && (!this.top.type || !this.top.type.inlineContent))\n this.findPlace(this.parser.schema.text(\"-\"));\n }\n // Run any style parser associated with the node's styles. Either\n // return an array of marks, or null to indicate some of the styles\n // had a rule with `ignore` set.\n readStyles(styles) {\n let marks = Mark.none;\n style: for (let i = 0; i < styles.length; i += 2) {\n for (let after = undefined;;) {\n let rule = this.parser.matchStyle(styles[i], styles[i + 1], this, after);\n if (!rule)\n continue style;\n if (rule.ignore)\n return null;\n marks = this.parser.schema.marks[rule.mark].create(rule.attrs).addToSet(marks);\n if (rule.consuming === false)\n after = rule;\n else\n break;\n }\n }\n return marks;\n }\n // Look up a handler for the given node. If none are found, return\n // false. Otherwise, apply it, use its return value to drive the way\n // the node's content is wrapped, and return true.\n addElementByRule(dom, rule, continueAfter) {\n let sync, nodeType, mark;\n if (rule.node) {\n nodeType = this.parser.schema.nodes[rule.node];\n if (!nodeType.isLeaf) {\n sync = this.enter(nodeType, rule.attrs || null, rule.preserveWhitespace);\n }\n else if (!this.insertNode(nodeType.create(rule.attrs))) {\n this.leafFallback(dom);\n }\n }\n else {\n let markType = this.parser.schema.marks[rule.mark];\n mark = markType.create(rule.attrs);\n this.addPendingMark(mark);\n }\n let startIn = this.top;\n if (nodeType && nodeType.isLeaf) {\n this.findInside(dom);\n }\n else if (continueAfter) {\n this.addElement(dom, continueAfter);\n }\n else if (rule.getContent) {\n this.findInside(dom);\n rule.getContent(dom, this.parser.schema).forEach(node => this.insertNode(node));\n }\n else {\n let contentDOM = dom;\n if (typeof rule.contentElement == \"string\")\n contentDOM = dom.querySelector(rule.contentElement);\n else if (typeof rule.contentElement == \"function\")\n contentDOM = rule.contentElement(dom);\n else if (rule.contentElement)\n contentDOM = rule.contentElement;\n this.findAround(dom, contentDOM, true);\n this.addAll(contentDOM);\n }\n if (sync && this.sync(startIn))\n this.open--;\n if (mark)\n this.removePendingMark(mark, startIn);\n }\n // Add all child nodes between `startIndex` and `endIndex` (or the\n // whole node, if not given). If `sync` is passed, use it to\n // synchronize after every block element.\n addAll(parent, startIndex, endIndex) {\n let index = startIndex || 0;\n for (let dom = startIndex ? parent.childNodes[startIndex] : parent.firstChild, end = endIndex == null ? null : parent.childNodes[endIndex]; dom != end; dom = dom.nextSibling, ++index) {\n this.findAtPoint(parent, index);\n this.addDOM(dom);\n }\n this.findAtPoint(parent, index);\n }\n // Try to find a way to fit the given node type into the current\n // context. May add intermediate wrappers and/or leave non-solid\n // nodes that we're in.\n findPlace(node) {\n let route, sync;\n for (let depth = this.open; depth >= 0; depth--) {\n let cx = this.nodes[depth];\n let found = cx.findWrapping(node);\n if (found && (!route || route.length > found.length)) {\n route = found;\n sync = cx;\n if (!found.length)\n break;\n }\n if (cx.solid)\n break;\n }\n if (!route)\n return false;\n this.sync(sync);\n for (let i = 0; i < route.length; i++)\n this.enterInner(route[i], null, false);\n return true;\n }\n // Try to insert the given node, adjusting the context when needed.\n insertNode(node) {\n if (node.isInline && this.needsBlock && !this.top.type) {\n let block = this.textblockFromContext();\n if (block)\n this.enterInner(block);\n }\n if (this.findPlace(node)) {\n this.closeExtra();\n let top = this.top;\n top.applyPending(node.type);\n if (top.match)\n top.match = top.match.matchType(node.type);\n let marks = top.activeMarks;\n for (let i = 0; i < node.marks.length; i++)\n if (!top.type || top.type.allowsMarkType(node.marks[i].type))\n marks = node.marks[i].addToSet(marks);\n top.content.push(node.mark(marks));\n return true;\n }\n return false;\n }\n // Try to start a node of the given type, adjusting the context when\n // necessary.\n enter(type, attrs, preserveWS) {\n let ok = this.findPlace(type.create(attrs));\n if (ok)\n this.enterInner(type, attrs, true, preserveWS);\n return ok;\n }\n // Open a node of the given type\n enterInner(type, attrs = null, solid = false, preserveWS) {\n this.closeExtra();\n let top = this.top;\n top.applyPending(type);\n top.match = top.match && top.match.matchType(type);\n let options = wsOptionsFor(type, preserveWS, top.options);\n if ((top.options & OPT_OPEN_LEFT) && top.content.length == 0)\n options |= OPT_OPEN_LEFT;\n this.nodes.push(new NodeContext(type, attrs, top.activeMarks, top.pendingMarks, solid, null, options));\n this.open++;\n }\n // Make sure all nodes above this.open are finished and added to\n // their parents\n closeExtra(openEnd = false) {\n let i = this.nodes.length - 1;\n if (i > this.open) {\n for (; i > this.open; i--)\n this.nodes[i - 1].content.push(this.nodes[i].finish(openEnd));\n this.nodes.length = this.open + 1;\n }\n }\n finish() {\n this.open = 0;\n this.closeExtra(this.isOpen);\n return this.nodes[0].finish(this.isOpen || this.options.topOpen);\n }\n sync(to) {\n for (let i = this.open; i >= 0; i--)\n if (this.nodes[i] == to) {\n this.open = i;\n return true;\n }\n return false;\n }\n get currentPos() {\n this.closeExtra();\n let pos = 0;\n for (let i = this.open; i >= 0; i--) {\n let content = this.nodes[i].content;\n for (let j = content.length - 1; j >= 0; j--)\n pos += content[j].nodeSize;\n if (i)\n pos++;\n }\n return pos;\n }\n findAtPoint(parent, offset) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == parent && this.find[i].offset == offset)\n this.find[i].pos = this.currentPos;\n }\n }\n findInside(parent) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node))\n this.find[i].pos = this.currentPos;\n }\n }\n findAround(parent, content, before) {\n if (parent != content && this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].pos == null && parent.nodeType == 1 && parent.contains(this.find[i].node)) {\n let pos = content.compareDocumentPosition(this.find[i].node);\n if (pos & (before ? 2 : 4))\n this.find[i].pos = this.currentPos;\n }\n }\n }\n findInText(textNode) {\n if (this.find)\n for (let i = 0; i < this.find.length; i++) {\n if (this.find[i].node == textNode)\n this.find[i].pos = this.currentPos - (textNode.nodeValue.length - this.find[i].offset);\n }\n }\n // Determines whether the given context string matches this context.\n matchesContext(context) {\n if (context.indexOf(\"|\") > -1)\n return context.split(/\\s*\\|\\s*/).some(this.matchesContext, this);\n let parts = context.split(\"/\");\n let option = this.options.context;\n let useRoot = !this.isOpen && (!option || option.parent.type == this.nodes[0].type);\n let minDepth = -(option ? option.depth + 1 : 0) + (useRoot ? 0 : 1);\n let match = (i, depth) => {\n for (; i >= 0; i--) {\n let part = parts[i];\n if (part == \"\") {\n if (i == parts.length - 1 || i == 0)\n continue;\n for (; depth >= minDepth; depth--)\n if (match(i - 1, depth))\n return true;\n return false;\n }\n else {\n let next = depth > 0 || (depth == 0 && useRoot) ? this.nodes[depth].type\n : option && depth >= minDepth ? option.node(depth - minDepth).type\n : null;\n if (!next || (next.name != part && next.groups.indexOf(part) == -1))\n return false;\n depth--;\n }\n }\n return true;\n };\n return match(parts.length - 1, this.open);\n }\n textblockFromContext() {\n let $context = this.options.context;\n if ($context)\n for (let d = $context.depth; d >= 0; d--) {\n let deflt = $context.node(d).contentMatchAt($context.indexAfter(d)).defaultType;\n if (deflt && deflt.isTextblock && deflt.defaultAttrs)\n return deflt;\n }\n for (let name in this.parser.schema.nodes) {\n let type = this.parser.schema.nodes[name];\n if (type.isTextblock && type.defaultAttrs)\n return type;\n }\n }\n addPendingMark(mark) {\n let found = findSameMarkInSet(mark, this.top.pendingMarks);\n if (found)\n this.top.stashMarks.push(found);\n this.top.pendingMarks = mark.addToSet(this.top.pendingMarks);\n }\n removePendingMark(mark, upto) {\n for (let depth = this.open; depth >= 0; depth--) {\n let level = this.nodes[depth];\n let found = level.pendingMarks.lastIndexOf(mark);\n if (found > -1) {\n level.pendingMarks = mark.removeFromSet(level.pendingMarks);\n }\n else {\n level.activeMarks = mark.removeFromSet(level.activeMarks);\n let stashMark = level.popFromStashMark(mark);\n if (stashMark && level.type && level.type.allowsMarkType(stashMark.type))\n level.activeMarks = stashMark.addToSet(level.activeMarks);\n }\n if (level == upto)\n break;\n }\n }\n}\n// Kludge to work around directly nested list nodes produced by some\n// tools and allowed by browsers to mean that the nested list is\n// actually part of the list item above it.\nfunction normalizeList(dom) {\n for (let child = dom.firstChild, prevItem = null; child; child = child.nextSibling) {\n let name = child.nodeType == 1 ? child.nodeName.toLowerCase() : null;\n if (name && listTags.hasOwnProperty(name) && prevItem) {\n prevItem.appendChild(child);\n child = prevItem;\n }\n else if (name == \"li\") {\n prevItem = child;\n }\n else if (name) {\n prevItem = null;\n }\n }\n}\n// Apply a CSS selector.\nfunction matches(dom, selector) {\n return (dom.matches || dom.msMatchesSelector || dom.webkitMatchesSelector || dom.mozMatchesSelector).call(dom, selector);\n}\n// Tokenize a style attribute into property/value pairs.\nfunction parseStyles(style) {\n let re = /\\s*([\\w-]+)\\s*:\\s*([^;]+)/g, m, result = [];\n while (m = re.exec(style))\n result.push(m[1], m[2].trim());\n return result;\n}\nfunction copy(obj) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n return copy;\n}\n// Used when finding a mark at the top level of a fragment parse.\n// Checks whether it would be reasonable to apply a given mark type to\n// a given node, by looking at the way the mark occurs in the schema.\nfunction markMayApply(markType, nodeType) {\n let nodes = nodeType.schema.nodes;\n for (let name in nodes) {\n let parent = nodes[name];\n if (!parent.allowsMarkType(markType))\n continue;\n let seen = [], scan = (match) => {\n seen.push(match);\n for (let i = 0; i < match.edgeCount; i++) {\n let { type, next } = match.edge(i);\n if (type == nodeType)\n return true;\n if (seen.indexOf(next) < 0 && scan(next))\n return true;\n }\n };\n if (scan(parent.contentMatch))\n return true;\n }\n}\nfunction findSameMarkInSet(mark, set) {\n for (let i = 0; i < set.length; i++) {\n if (mark.eq(set[i]))\n return set[i];\n }\n}\n\n/**\nA DOM serializer knows how to convert ProseMirror nodes and\nmarks of various types to DOM nodes.\n*/\nclass DOMSerializer {\n /**\n Create a serializer. `nodes` should map node names to functions\n that take a node and return a description of the corresponding\n DOM. `marks` does the same for mark names, but also gets an\n argument that tells it whether the mark's content is block or\n inline content (for typical use, it'll always be inline). A mark\n serializer may be `null` to indicate that marks of that type\n should not be serialized.\n */\n constructor(\n /**\n The node serialization functions.\n */\n nodes, \n /**\n The mark serialization functions.\n */\n marks) {\n this.nodes = nodes;\n this.marks = marks;\n }\n /**\n Serialize the content of this fragment to a DOM fragment. When\n not in the browser, the `document` option, containing a DOM\n document, should be passed so that the serializer can create\n nodes.\n */\n serializeFragment(fragment, options = {}, target) {\n if (!target)\n target = doc(options).createDocumentFragment();\n let top = target, active = [];\n fragment.forEach(node => {\n if (active.length || node.marks.length) {\n let keep = 0, rendered = 0;\n while (keep < active.length && rendered < node.marks.length) {\n let next = node.marks[rendered];\n if (!this.marks[next.type.name]) {\n rendered++;\n continue;\n }\n if (!next.eq(active[keep][0]) || next.type.spec.spanning === false)\n break;\n keep++;\n rendered++;\n }\n while (keep < active.length)\n top = active.pop()[1];\n while (rendered < node.marks.length) {\n let add = node.marks[rendered++];\n let markDOM = this.serializeMark(add, node.isInline, options);\n if (markDOM) {\n active.push([add, top]);\n top.appendChild(markDOM.dom);\n top = markDOM.contentDOM || markDOM.dom;\n }\n }\n }\n top.appendChild(this.serializeNodeInner(node, options));\n });\n return target;\n }\n /**\n @internal\n */\n serializeNodeInner(node, options) {\n let { dom, contentDOM } = DOMSerializer.renderSpec(doc(options), this.nodes[node.type.name](node));\n if (contentDOM) {\n if (node.isLeaf)\n throw new RangeError(\"Content hole not allowed in a leaf node spec\");\n this.serializeFragment(node.content, options, contentDOM);\n }\n return dom;\n }\n /**\n Serialize this node to a DOM node. This can be useful when you\n need to serialize a part of a document, as opposed to the whole\n document. To serialize a whole document, use\n [`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on\n its [content](https://prosemirror.net/docs/ref/#model.Node.content).\n */\n serializeNode(node, options = {}) {\n let dom = this.serializeNodeInner(node, options);\n for (let i = node.marks.length - 1; i >= 0; i--) {\n let wrap = this.serializeMark(node.marks[i], node.isInline, options);\n if (wrap) {\n (wrap.contentDOM || wrap.dom).appendChild(dom);\n dom = wrap.dom;\n }\n }\n return dom;\n }\n /**\n @internal\n */\n serializeMark(mark, inline, options = {}) {\n let toDOM = this.marks[mark.type.name];\n return toDOM && DOMSerializer.renderSpec(doc(options), toDOM(mark, inline));\n }\n /**\n Render an [output spec](https://prosemirror.net/docs/ref/#model.DOMOutputSpec) to a DOM node. If\n the spec has a hole (zero) in it, `contentDOM` will point at the\n node with the hole.\n */\n static renderSpec(doc, structure, xmlNS = null) {\n if (typeof structure == \"string\")\n return { dom: doc.createTextNode(structure) };\n if (structure.nodeType != null)\n return { dom: structure };\n if (structure.dom && structure.dom.nodeType != null)\n return structure;\n let tagName = structure[0], space = tagName.indexOf(\" \");\n if (space > 0) {\n xmlNS = tagName.slice(0, space);\n tagName = tagName.slice(space + 1);\n }\n let contentDOM;\n let dom = (xmlNS ? doc.createElementNS(xmlNS, tagName) : doc.createElement(tagName));\n let attrs = structure[1], start = 1;\n if (attrs && typeof attrs == \"object\" && attrs.nodeType == null && !Array.isArray(attrs)) {\n start = 2;\n for (let name in attrs)\n if (attrs[name] != null) {\n let space = name.indexOf(\" \");\n if (space > 0)\n dom.setAttributeNS(name.slice(0, space), name.slice(space + 1), attrs[name]);\n else\n dom.setAttribute(name, attrs[name]);\n }\n }\n for (let i = start; i < structure.length; i++) {\n let child = structure[i];\n if (child === 0) {\n if (i < structure.length - 1 || i > start)\n throw new RangeError(\"Content hole must be the only child of its parent node\");\n return { dom, contentDOM: dom };\n }\n else {\n let { dom: inner, contentDOM: innerContent } = DOMSerializer.renderSpec(doc, child, xmlNS);\n dom.appendChild(inner);\n if (innerContent) {\n if (contentDOM)\n throw new RangeError(\"Multiple content holes\");\n contentDOM = innerContent;\n }\n }\n }\n return { dom, contentDOM };\n }\n /**\n Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)\n properties in a schema's node and mark specs.\n */\n static fromSchema(schema) {\n return schema.cached.domSerializer ||\n (schema.cached.domSerializer = new DOMSerializer(this.nodesFromSchema(schema), this.marksFromSchema(schema)));\n }\n /**\n Gather the serializers in a schema's node specs into an object.\n This can be useful as a base to build a custom serializer from.\n */\n static nodesFromSchema(schema) {\n let result = gatherToDOM(schema.nodes);\n if (!result.text)\n result.text = node => node.text;\n return result;\n }\n /**\n Gather the serializers in a schema's mark specs into an object.\n */\n static marksFromSchema(schema) {\n return gatherToDOM(schema.marks);\n }\n}\nfunction gatherToDOM(obj) {\n let result = {};\n for (let name in obj) {\n let toDOM = obj[name].spec.toDOM;\n if (toDOM)\n result[name] = toDOM;\n }\n return result;\n}\nfunction doc(options) {\n return options.document || window.document;\n}\n\nexport { ContentMatch, DOMParser, DOMSerializer, Fragment, Mark, MarkType, Node, NodeRange, NodeType, ReplaceError, ResolvedPos, Schema, Slice };\n","import { ReplaceError, Slice, Fragment, MarkType, Mark } from 'prosemirror-model';\n\n// Recovery values encode a range index and an offset. They are\n// represented as numbers, because tons of them will be created when\n// mapping, for example, a large number of decorations. The number's\n// lower 16 bits provide the index, the remaining bits the offset.\n//\n// Note: We intentionally don't use bit shift operators to en- and\n// decode these, since those clip to 32 bits, which we might in rare\n// cases want to overflow. A 64-bit float can represent 48-bit\n// integers precisely.\nconst lower16 = 0xffff;\nconst factor16 = Math.pow(2, 16);\nfunction makeRecover(index, offset) { return index + offset * factor16; }\nfunction recoverIndex(value) { return value & lower16; }\nfunction recoverOffset(value) { return (value - (value & lower16)) / factor16; }\nconst DEL_BEFORE = 1, DEL_AFTER = 2, DEL_ACROSS = 4, DEL_SIDE = 8;\n/**\nAn object representing a mapped position with extra\ninformation.\n*/\nclass MapResult {\n /**\n @internal\n */\n constructor(\n /**\n The mapped version of the position.\n */\n pos, \n /**\n @internal\n */\n delInfo, \n /**\n @internal\n */\n recover) {\n this.pos = pos;\n this.delInfo = delInfo;\n this.recover = recover;\n }\n /**\n Tells you whether the position was deleted, that is, whether the\n step removed the token on the side queried (via the `assoc`)\n argument from the document.\n */\n get deleted() { return (this.delInfo & DEL_SIDE) > 0; }\n /**\n Tells you whether the token before the mapped position was deleted.\n */\n get deletedBefore() { return (this.delInfo & (DEL_BEFORE | DEL_ACROSS)) > 0; }\n /**\n True when the token after the mapped position was deleted.\n */\n get deletedAfter() { return (this.delInfo & (DEL_AFTER | DEL_ACROSS)) > 0; }\n /**\n Tells whether any of the steps mapped through deletes across the\n position (including both the token before and after the\n position).\n */\n get deletedAcross() { return (this.delInfo & DEL_ACROSS) > 0; }\n}\n/**\nA map describing the deletions and insertions made by a step, which\ncan be used to find the correspondence between positions in the\npre-step version of a document and the same position in the\npost-step version.\n*/\nclass StepMap {\n /**\n Create a position map. The modifications to the document are\n represented as an array of numbers, in which each group of three\n represents a modified chunk as `[start, oldSize, newSize]`.\n */\n constructor(\n /**\n @internal\n */\n ranges, \n /**\n @internal\n */\n inverted = false) {\n this.ranges = ranges;\n this.inverted = inverted;\n if (!ranges.length && StepMap.empty)\n return StepMap.empty;\n }\n /**\n @internal\n */\n recover(value) {\n let diff = 0, index = recoverIndex(value);\n if (!this.inverted)\n for (let i = 0; i < index; i++)\n diff += this.ranges[i * 3 + 2] - this.ranges[i * 3 + 1];\n return this.ranges[index * 3] + diff + recoverOffset(value);\n }\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n map(pos, assoc = 1) { return this._map(pos, assoc, true); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let diff = 0, oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex], end = start + oldSize;\n if (pos <= end) {\n let side = !oldSize ? assoc : pos == start ? -1 : pos == end ? 1 : assoc;\n let result = start + diff + (side < 0 ? 0 : newSize);\n if (simple)\n return result;\n let recover = pos == (assoc < 0 ? start : end) ? null : makeRecover(i / 3, pos - start);\n let del = pos == start ? DEL_AFTER : pos == end ? DEL_BEFORE : DEL_ACROSS;\n if (assoc < 0 ? pos != start : pos != end)\n del |= DEL_SIDE;\n return new MapResult(result, del, recover);\n }\n diff += newSize - oldSize;\n }\n return simple ? pos + diff : new MapResult(pos + diff, 0, null);\n }\n /**\n @internal\n */\n touches(pos, recover) {\n let diff = 0, index = recoverIndex(recover);\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i] - (this.inverted ? diff : 0);\n if (start > pos)\n break;\n let oldSize = this.ranges[i + oldIndex], end = start + oldSize;\n if (pos <= end && i == index * 3)\n return true;\n diff += this.ranges[i + newIndex] - oldSize;\n }\n return false;\n }\n /**\n Calls the given function on each of the changed ranges included in\n this map.\n */\n forEach(f) {\n let oldIndex = this.inverted ? 2 : 1, newIndex = this.inverted ? 1 : 2;\n for (let i = 0, diff = 0; i < this.ranges.length; i += 3) {\n let start = this.ranges[i], oldStart = start - (this.inverted ? diff : 0), newStart = start + (this.inverted ? 0 : diff);\n let oldSize = this.ranges[i + oldIndex], newSize = this.ranges[i + newIndex];\n f(oldStart, oldStart + oldSize, newStart, newStart + newSize);\n diff += newSize - oldSize;\n }\n }\n /**\n Create an inverted version of this map. The result can be used to\n map positions in the post-step document to the pre-step document.\n */\n invert() {\n return new StepMap(this.ranges, !this.inverted);\n }\n /**\n @internal\n */\n toString() {\n return (this.inverted ? \"-\" : \"\") + JSON.stringify(this.ranges);\n }\n /**\n Create a map that moves all positions by offset `n` (which may be\n negative). This can be useful when applying steps meant for a\n sub-document to a larger document, or vice-versa.\n */\n static offset(n) {\n return n == 0 ? StepMap.empty : new StepMap(n < 0 ? [0, -n, 0] : [0, 0, n]);\n }\n}\n/**\nA StepMap that contains no changed ranges.\n*/\nStepMap.empty = new StepMap([]);\n/**\nA mapping represents a pipeline of zero or more [step\nmaps](https://prosemirror.net/docs/ref/#transform.StepMap). It has special provisions for losslessly\nhandling mapping positions through a series of steps in which some\nsteps are inverted versions of earlier steps. (This comes up when\n‘[rebasing](/docs/guide/#transform.rebasing)’ steps for\ncollaboration or history management.)\n*/\nclass Mapping {\n /**\n Create a new mapping with the given position maps.\n */\n constructor(\n /**\n The step maps in this mapping.\n */\n maps = [], \n /**\n @internal\n */\n mirror, \n /**\n The starting position in the `maps` array, used when `map` or\n `mapResult` is called.\n */\n from = 0, \n /**\n The end position in the `maps` array.\n */\n to = maps.length) {\n this.maps = maps;\n this.mirror = mirror;\n this.from = from;\n this.to = to;\n }\n /**\n Create a mapping that maps only through a part of this one.\n */\n slice(from = 0, to = this.maps.length) {\n return new Mapping(this.maps, this.mirror, from, to);\n }\n /**\n @internal\n */\n copy() {\n return new Mapping(this.maps.slice(), this.mirror && this.mirror.slice(), this.from, this.to);\n }\n /**\n Add a step map to the end of this mapping. If `mirrors` is\n given, it should be the index of the step map that is the mirror\n image of this one.\n */\n appendMap(map, mirrors) {\n this.to = this.maps.push(map);\n if (mirrors != null)\n this.setMirror(this.maps.length - 1, mirrors);\n }\n /**\n Add all the step maps in a given mapping to this one (preserving\n mirroring information).\n */\n appendMapping(mapping) {\n for (let i = 0, startSize = this.maps.length; i < mapping.maps.length; i++) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i], mirr != null && mirr < i ? startSize + mirr : undefined);\n }\n }\n /**\n Finds the offset of the step map that mirrors the map at the\n given offset, in this mapping (as per the second argument to\n `appendMap`).\n */\n getMirror(n) {\n if (this.mirror)\n for (let i = 0; i < this.mirror.length; i++)\n if (this.mirror[i] == n)\n return this.mirror[i + (i % 2 ? -1 : 1)];\n }\n /**\n @internal\n */\n setMirror(n, m) {\n if (!this.mirror)\n this.mirror = [];\n this.mirror.push(n, m);\n }\n /**\n Append the inverse of the given mapping to this one.\n */\n appendMappingInverted(mapping) {\n for (let i = mapping.maps.length - 1, totalSize = this.maps.length + mapping.maps.length; i >= 0; i--) {\n let mirr = mapping.getMirror(i);\n this.appendMap(mapping.maps[i].invert(), mirr != null && mirr > i ? totalSize - mirr - 1 : undefined);\n }\n }\n /**\n Create an inverted version of this mapping.\n */\n invert() {\n let inverse = new Mapping;\n inverse.appendMappingInverted(this);\n return inverse;\n }\n /**\n Map a position through this mapping.\n */\n map(pos, assoc = 1) {\n if (this.mirror)\n return this._map(pos, assoc, true);\n for (let i = this.from; i < this.to; i++)\n pos = this.maps[i].map(pos, assoc);\n return pos;\n }\n /**\n Map a position through this mapping, returning a mapping\n result.\n */\n mapResult(pos, assoc = 1) { return this._map(pos, assoc, false); }\n /**\n @internal\n */\n _map(pos, assoc, simple) {\n let delInfo = 0;\n for (let i = this.from; i < this.to; i++) {\n let map = this.maps[i], result = map.mapResult(pos, assoc);\n if (result.recover != null) {\n let corr = this.getMirror(i);\n if (corr != null && corr > i && corr < this.to) {\n i = corr;\n pos = this.maps[corr].recover(result.recover);\n continue;\n }\n }\n delInfo |= result.delInfo;\n pos = result.pos;\n }\n return simple ? pos : new MapResult(pos, delInfo, null);\n }\n}\n\nconst stepsByID = Object.create(null);\n/**\nA step object represents an atomic change. It generally applies\nonly to the document it was created for, since the positions\nstored in it will only make sense for that document.\n\nNew steps are defined by creating classes that extend `Step`,\noverriding the `apply`, `invert`, `map`, `getMap` and `fromJSON`\nmethods, and registering your class with a unique\nJSON-serialization identifier using\n[`Step.jsonID`](https://prosemirror.net/docs/ref/#transform.Step^jsonID).\n*/\nclass Step {\n /**\n Get the step map that represents the changes made by this step,\n and which can be used to transform between positions in the old\n and the new document.\n */\n getMap() { return StepMap.empty; }\n /**\n Try to merge this step with another one, to be applied directly\n after it. Returns the merged step when possible, null if the\n steps can't be merged.\n */\n merge(other) { return null; }\n /**\n Deserialize a step from its JSON representation. Will call\n through to the step class' own implementation of this method.\n */\n static fromJSON(schema, json) {\n if (!json || !json.stepType)\n throw new RangeError(\"Invalid input for Step.fromJSON\");\n let type = stepsByID[json.stepType];\n if (!type)\n throw new RangeError(`No step type ${json.stepType} defined`);\n return type.fromJSON(schema, json);\n }\n /**\n To be able to serialize steps to JSON, each step needs a string\n ID to attach to its JSON representation. Use this method to\n register an ID for your step classes. Try to pick something\n that's unlikely to clash with steps from other modules.\n */\n static jsonID(id, stepClass) {\n if (id in stepsByID)\n throw new RangeError(\"Duplicate use of step JSON ID \" + id);\n stepsByID[id] = stepClass;\n stepClass.prototype.jsonID = id;\n return stepClass;\n }\n}\n/**\nThe result of [applying](https://prosemirror.net/docs/ref/#transform.Step.apply) a step. Contains either a\nnew document or a failure value.\n*/\nclass StepResult {\n /**\n @internal\n */\n constructor(\n /**\n The transformed document, if successful.\n */\n doc, \n /**\n The failure message, if unsuccessful.\n */\n failed) {\n this.doc = doc;\n this.failed = failed;\n }\n /**\n Create a successful step result.\n */\n static ok(doc) { return new StepResult(doc, null); }\n /**\n Create a failed step result.\n */\n static fail(message) { return new StepResult(null, message); }\n /**\n Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given\n arguments. Create a successful result if it succeeds, and a\n failed one if it throws a `ReplaceError`.\n */\n static fromReplace(doc, from, to, slice) {\n try {\n return StepResult.ok(doc.replace(from, to, slice));\n }\n catch (e) {\n if (e instanceof ReplaceError)\n return StepResult.fail(e.message);\n throw e;\n }\n }\n}\n\nfunction mapFragment(fragment, f, parent) {\n let mapped = [];\n for (let i = 0; i < fragment.childCount; i++) {\n let child = fragment.child(i);\n if (child.content.size)\n child = child.copy(mapFragment(child.content, f, child));\n if (child.isInline)\n child = f(child, parent, i);\n mapped.push(child);\n }\n return Fragment.fromArray(mapped);\n}\n/**\nAdd a mark to all inline content between two positions.\n*/\nclass AddMarkStep extends Step {\n /**\n Create a mark step.\n */\n constructor(\n /**\n The start of the marked range.\n */\n from, \n /**\n The end of the marked range.\n */\n to, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to), $from = doc.resolve(this.from);\n let parent = $from.node($from.sharedDepth(this.to));\n let slice = new Slice(mapFragment(oldSlice.content, (node, parent) => {\n if (!node.isAtom || !parent.type.allowsMarkType(this.mark.type))\n return node;\n return node.mark(this.mark.addToSet(node.marks));\n }, parent), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new RemoveMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new AddMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof AddMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new AddMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"addMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for AddMarkStep.fromJSON\");\n return new AddMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addMark\", AddMarkStep);\n/**\nRemove a mark from all inline content between two positions.\n*/\nclass RemoveMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The start of the unmarked range.\n */\n from, \n /**\n The end of the unmarked range.\n */\n to, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.from = from;\n this.to = to;\n this.mark = mark;\n }\n apply(doc) {\n let oldSlice = doc.slice(this.from, this.to);\n let slice = new Slice(mapFragment(oldSlice.content, node => {\n return node.mark(this.mark.removeFromSet(node.marks));\n }, doc), oldSlice.openStart, oldSlice.openEnd);\n return StepResult.fromReplace(doc, this.from, this.to, slice);\n }\n invert() {\n return new AddMarkStep(this.from, this.to, this.mark);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deleted && to.deleted || from.pos >= to.pos)\n return null;\n return new RemoveMarkStep(from.pos, to.pos, this.mark);\n }\n merge(other) {\n if (other instanceof RemoveMarkStep &&\n other.mark.eq(this.mark) &&\n this.from <= other.to && this.to >= other.from)\n return new RemoveMarkStep(Math.min(this.from, other.from), Math.max(this.to, other.to), this.mark);\n return null;\n }\n toJSON() {\n return { stepType: \"removeMark\", mark: this.mark.toJSON(),\n from: this.from, to: this.to };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for RemoveMarkStep.fromJSON\");\n return new RemoveMarkStep(json.from, json.to, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeMark\", RemoveMarkStep);\n/**\nAdd a mark to a specific node.\n*/\nclass AddNodeMarkStep extends Step {\n /**\n Create a node mark step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to add.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (node) {\n let newSet = this.mark.addToSet(node.marks);\n if (newSet.length == node.marks.length) {\n for (let i = 0; i < node.marks.length; i++)\n if (!node.marks[i].isInSet(newSet))\n return new AddNodeMarkStep(this.pos, node.marks[i]);\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n }\n return new RemoveNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AddNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"addNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for AddNodeMarkStep.fromJSON\");\n return new AddNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"addNodeMark\", AddNodeMarkStep);\n/**\nRemove a mark from a specific node.\n*/\nclass RemoveNodeMarkStep extends Step {\n /**\n Create a mark-removing step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The mark to remove.\n */\n mark) {\n super();\n this.pos = pos;\n this.mark = mark;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at mark step's position\");\n let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n invert(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node || !this.mark.isInSet(node.marks))\n return this;\n return new AddNodeMarkStep(this.pos, this.mark);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new RemoveNodeMarkStep(pos.pos, this.mark);\n }\n toJSON() {\n return { stepType: \"removeNodeMark\", pos: this.pos, mark: this.mark.toJSON() };\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for RemoveNodeMarkStep.fromJSON\");\n return new RemoveNodeMarkStep(json.pos, schema.markFromJSON(json.mark));\n }\n}\nStep.jsonID(\"removeNodeMark\", RemoveNodeMarkStep);\n\n/**\nReplace a part of the document with a slice of new content.\n*/\nclass ReplaceStep extends Step {\n /**\n The given `slice` should fit the 'gap' between `from` and\n `to`—the depths must line up, and the surrounding nodes must be\n able to be joined with the open sides of the slice. When\n `structure` is true, the step will fail if the content between\n from and to is not just a sequence of closing and then opening\n tokens (this is to guard against rebased replace steps\n overwriting something they weren't supposed to).\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The slice to insert.\n */\n slice, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.slice = slice;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && contentBetween(doc, this.from, this.to))\n return StepResult.fail(\"Structure replace would overwrite content\");\n return StepResult.fromReplace(doc, this.from, this.to, this.slice);\n }\n getMap() {\n return new StepMap([this.from, this.to - this.from, this.slice.size]);\n }\n invert(doc) {\n return new ReplaceStep(this.from, this.from + this.slice.size, doc.slice(this.from, this.to));\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n if (from.deletedAcross && to.deletedAcross)\n return null;\n return new ReplaceStep(from.pos, Math.max(from.pos, to.pos), this.slice);\n }\n merge(other) {\n if (!(other instanceof ReplaceStep) || other.structure || this.structure)\n return null;\n if (this.from + this.slice.size == other.from && !this.slice.openEnd && !other.slice.openStart) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(this.slice.content.append(other.slice.content), this.slice.openStart, other.slice.openEnd);\n return new ReplaceStep(this.from, this.to + (other.to - other.from), slice, this.structure);\n }\n else if (other.to == this.from && !this.slice.openStart && !other.slice.openEnd) {\n let slice = this.slice.size + other.slice.size == 0 ? Slice.empty\n : new Slice(other.slice.content.append(this.slice.content), other.slice.openStart, this.slice.openEnd);\n return new ReplaceStep(other.from, this.to, slice, this.structure);\n }\n else {\n return null;\n }\n }\n toJSON() {\n let json = { stepType: \"replace\", from: this.from, to: this.to };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\")\n throw new RangeError(\"Invalid input for ReplaceStep.fromJSON\");\n return new ReplaceStep(json.from, json.to, Slice.fromJSON(schema, json.slice), !!json.structure);\n }\n}\nStep.jsonID(\"replace\", ReplaceStep);\n/**\nReplace a part of the document with a slice of content, but\npreserve a range of the replaced content by moving it into the\nslice.\n*/\nclass ReplaceAroundStep extends Step {\n /**\n Create a replace-around step with the given range and gap.\n `insert` should be the point in the slice into which the content\n of the gap should be moved. `structure` has the same meaning as\n it has in the [`ReplaceStep`](https://prosemirror.net/docs/ref/#transform.ReplaceStep) class.\n */\n constructor(\n /**\n The start position of the replaced range.\n */\n from, \n /**\n The end position of the replaced range.\n */\n to, \n /**\n The start of preserved range.\n */\n gapFrom, \n /**\n The end of preserved range.\n */\n gapTo, \n /**\n The slice to insert.\n */\n slice, \n /**\n The position in the slice where the preserved range should be\n inserted.\n */\n insert, \n /**\n @internal\n */\n structure = false) {\n super();\n this.from = from;\n this.to = to;\n this.gapFrom = gapFrom;\n this.gapTo = gapTo;\n this.slice = slice;\n this.insert = insert;\n this.structure = structure;\n }\n apply(doc) {\n if (this.structure && (contentBetween(doc, this.from, this.gapFrom) ||\n contentBetween(doc, this.gapTo, this.to)))\n return StepResult.fail(\"Structure gap-replace would overwrite content\");\n let gap = doc.slice(this.gapFrom, this.gapTo);\n if (gap.openStart || gap.openEnd)\n return StepResult.fail(\"Gap is not a flat range\");\n let inserted = this.slice.insertAt(this.insert, gap.content);\n if (!inserted)\n return StepResult.fail(\"Content does not fit in gap\");\n return StepResult.fromReplace(doc, this.from, this.to, inserted);\n }\n getMap() {\n return new StepMap([this.from, this.gapFrom - this.from, this.insert,\n this.gapTo, this.to - this.gapTo, this.slice.size - this.insert]);\n }\n invert(doc) {\n let gap = this.gapTo - this.gapFrom;\n return new ReplaceAroundStep(this.from, this.from + this.slice.size + gap, this.from + this.insert, this.from + this.insert + gap, doc.slice(this.from, this.to).removeBetween(this.gapFrom - this.from, this.gapTo - this.from), this.gapFrom - this.from, this.structure);\n }\n map(mapping) {\n let from = mapping.mapResult(this.from, 1), to = mapping.mapResult(this.to, -1);\n let gapFrom = mapping.map(this.gapFrom, -1), gapTo = mapping.map(this.gapTo, 1);\n if ((from.deletedAcross && to.deletedAcross) || gapFrom < from.pos || gapTo > to.pos)\n return null;\n return new ReplaceAroundStep(from.pos, to.pos, gapFrom, gapTo, this.slice, this.insert, this.structure);\n }\n toJSON() {\n let json = { stepType: \"replaceAround\", from: this.from, to: this.to,\n gapFrom: this.gapFrom, gapTo: this.gapTo, insert: this.insert };\n if (this.slice.size)\n json.slice = this.slice.toJSON();\n if (this.structure)\n json.structure = true;\n return json;\n }\n /**\n @internal\n */\n static fromJSON(schema, json) {\n if (typeof json.from != \"number\" || typeof json.to != \"number\" ||\n typeof json.gapFrom != \"number\" || typeof json.gapTo != \"number\" || typeof json.insert != \"number\")\n throw new RangeError(\"Invalid input for ReplaceAroundStep.fromJSON\");\n return new ReplaceAroundStep(json.from, json.to, json.gapFrom, json.gapTo, Slice.fromJSON(schema, json.slice), json.insert, !!json.structure);\n }\n}\nStep.jsonID(\"replaceAround\", ReplaceAroundStep);\nfunction contentBetween(doc, from, to) {\n let $from = doc.resolve(from), dist = to - from, depth = $from.depth;\n while (dist > 0 && depth > 0 && $from.indexAfter(depth) == $from.node(depth).childCount) {\n depth--;\n dist--;\n }\n if (dist > 0) {\n let next = $from.node(depth).maybeChild($from.indexAfter(depth));\n while (dist > 0) {\n if (!next || next.isLeaf)\n return true;\n next = next.firstChild;\n dist--;\n }\n }\n return false;\n}\n\nfunction addMark(tr, from, to, mark) {\n let removed = [], added = [];\n let removing, adding;\n tr.doc.nodesBetween(from, to, (node, pos, parent) => {\n if (!node.isInline)\n return;\n let marks = node.marks;\n if (!mark.isInSet(marks) && parent.type.allowsMarkType(mark.type)) {\n let start = Math.max(pos, from), end = Math.min(pos + node.nodeSize, to);\n let newSet = mark.addToSet(marks);\n for (let i = 0; i < marks.length; i++) {\n if (!marks[i].isInSet(newSet)) {\n if (removing && removing.to == start && removing.mark.eq(marks[i]))\n removing.to = end;\n else\n removed.push(removing = new RemoveMarkStep(start, end, marks[i]));\n }\n }\n if (adding && adding.to == start)\n adding.to = end;\n else\n added.push(adding = new AddMarkStep(start, end, mark));\n }\n });\n removed.forEach(s => tr.step(s));\n added.forEach(s => tr.step(s));\n}\nfunction removeMark(tr, from, to, mark) {\n let matched = [], step = 0;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isInline)\n return;\n step++;\n let toRemove = null;\n if (mark instanceof MarkType) {\n let set = node.marks, found;\n while (found = mark.isInSet(set)) {\n (toRemove || (toRemove = [])).push(found);\n set = found.removeFromSet(set);\n }\n }\n else if (mark) {\n if (mark.isInSet(node.marks))\n toRemove = [mark];\n }\n else {\n toRemove = node.marks;\n }\n if (toRemove && toRemove.length) {\n let end = Math.min(pos + node.nodeSize, to);\n for (let i = 0; i < toRemove.length; i++) {\n let style = toRemove[i], found;\n for (let j = 0; j < matched.length; j++) {\n let m = matched[j];\n if (m.step == step - 1 && style.eq(matched[j].style))\n found = m;\n }\n if (found) {\n found.to = end;\n found.step = step;\n }\n else {\n matched.push({ style, from: Math.max(pos, from), to: end, step });\n }\n }\n }\n });\n matched.forEach(m => tr.step(new RemoveMarkStep(m.from, m.to, m.style)));\n}\nfunction clearIncompatible(tr, pos, parentType, match = parentType.contentMatch) {\n let node = tr.doc.nodeAt(pos);\n let delSteps = [], cur = pos + 1;\n for (let i = 0; i < node.childCount; i++) {\n let child = node.child(i), end = cur + child.nodeSize;\n let allowed = match.matchType(child.type);\n if (!allowed) {\n delSteps.push(new ReplaceStep(cur, end, Slice.empty));\n }\n else {\n match = allowed;\n for (let j = 0; j < child.marks.length; j++)\n if (!parentType.allowsMarkType(child.marks[j].type))\n tr.step(new RemoveMarkStep(cur, end, child.marks[j]));\n }\n cur = end;\n }\n if (!match.validEnd) {\n let fill = match.fillBefore(Fragment.empty, true);\n tr.replace(cur, cur, new Slice(fill, 0, 0));\n }\n for (let i = delSteps.length - 1; i >= 0; i--)\n tr.step(delSteps[i]);\n}\n\nfunction canCut(node, start, end) {\n return (start == 0 || node.canReplace(start, node.childCount)) &&\n (end == node.childCount || node.canReplace(0, end));\n}\n/**\nTry to find a target depth to which the content in the given range\ncan be lifted. Will not go across\n[isolating](https://prosemirror.net/docs/ref/#model.NodeSpec.isolating) parent nodes.\n*/\nfunction liftTarget(range) {\n let parent = range.parent;\n let content = parent.content.cutByIndex(range.startIndex, range.endIndex);\n for (let depth = range.depth;; --depth) {\n let node = range.$from.node(depth);\n let index = range.$from.index(depth), endIndex = range.$to.indexAfter(depth);\n if (depth < range.depth && node.canReplace(index, endIndex, content))\n return depth;\n if (depth == 0 || node.type.spec.isolating || !canCut(node, index, endIndex))\n break;\n }\n return null;\n}\nfunction lift(tr, range, target) {\n let { $from, $to, depth } = range;\n let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);\n let start = gapStart, end = gapEnd;\n let before = Fragment.empty, openStart = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $from.index(d) > 0) {\n splitting = true;\n before = Fragment.from($from.node(d).copy(before));\n openStart++;\n }\n else {\n start--;\n }\n let after = Fragment.empty, openEnd = 0;\n for (let d = depth, splitting = false; d > target; d--)\n if (splitting || $to.after(d + 1) < $to.end(d)) {\n splitting = true;\n after = Fragment.from($to.node(d).copy(after));\n openEnd++;\n }\n else {\n end++;\n }\n tr.step(new ReplaceAroundStep(start, end, gapStart, gapEnd, new Slice(before.append(after), openStart, openEnd), before.size - openStart, true));\n}\n/**\nTry to find a valid way to wrap the content in the given range in a\nnode of the given type. May introduce extra nodes around and inside\nthe wrapper node, if necessary. Returns null if no valid wrapping\ncould be found. When `innerRange` is given, that range's content is\nused as the content to fit into the wrapping, instead of the\ncontent of `range`.\n*/\nfunction findWrapping(range, nodeType, attrs = null, innerRange = range) {\n let around = findWrappingOutside(range, nodeType);\n let inner = around && findWrappingInside(innerRange, nodeType);\n if (!inner)\n return null;\n return around.map(withAttrs)\n .concat({ type: nodeType, attrs }).concat(inner.map(withAttrs));\n}\nfunction withAttrs(type) { return { type, attrs: null }; }\nfunction findWrappingOutside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let around = parent.contentMatchAt(startIndex).findWrapping(type);\n if (!around)\n return null;\n let outer = around.length ? around[0] : type;\n return parent.canReplaceWith(startIndex, endIndex, outer) ? around : null;\n}\nfunction findWrappingInside(range, type) {\n let { parent, startIndex, endIndex } = range;\n let inner = parent.child(startIndex);\n let inside = type.contentMatch.findWrapping(inner.type);\n if (!inside)\n return null;\n let lastType = inside.length ? inside[inside.length - 1] : type;\n let innerMatch = lastType.contentMatch;\n for (let i = startIndex; innerMatch && i < endIndex; i++)\n innerMatch = innerMatch.matchType(parent.child(i).type);\n if (!innerMatch || !innerMatch.validEnd)\n return null;\n return inside;\n}\nfunction wrap(tr, range, wrappers) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--) {\n if (content.size) {\n let match = wrappers[i].type.contentMatch.matchFragment(content);\n if (!match || !match.validEnd)\n throw new RangeError(\"Wrapper type given to Transform.wrap does not form valid content of its parent wrapper\");\n }\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n }\n let start = range.start, end = range.end;\n tr.step(new ReplaceAroundStep(start, end, start, end, new Slice(content, 0, 0), wrappers.length, true));\n}\nfunction setBlockType(tr, from, to, type, attrs) {\n if (!type.isTextblock)\n throw new RangeError(\"Type given to setBlockType should be a textblock\");\n let mapFrom = tr.steps.length;\n tr.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isTextblock && !node.hasMarkup(type, attrs) && canChangeType(tr.doc, tr.mapping.slice(mapFrom).map(pos), type)) {\n // Ensure all markup that isn't allowed in the new node type is cleared\n tr.clearIncompatible(tr.mapping.slice(mapFrom).map(pos, 1), type);\n let mapping = tr.mapping.slice(mapFrom);\n let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);\n tr.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice(Fragment.from(type.create(attrs, null, node.marks)), 0, 0), 1, true));\n return false;\n }\n });\n}\nfunction canChangeType(doc, pos, type) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return $pos.parent.canReplaceWith(index, index + 1, type);\n}\n/**\nChange the type, attributes, and/or marks of the node at `pos`.\nWhen `type` isn't given, the existing node type is preserved,\n*/\nfunction setNodeMarkup(tr, pos, type, attrs, marks) {\n let node = tr.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at given position\");\n if (!type)\n type = node.type;\n let newNode = type.create(attrs, null, marks || node.marks);\n if (node.isLeaf)\n return tr.replaceWith(pos, pos + node.nodeSize, newNode);\n if (!type.validContent(node.content))\n throw new RangeError(\"Invalid content for node type \" + type.name);\n tr.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice(Fragment.from(newNode), 0, 0), 1, true));\n}\n/**\nCheck whether splitting at the given position is allowed.\n*/\nfunction canSplit(doc, pos, depth = 1, typesAfter) {\n let $pos = doc.resolve(pos), base = $pos.depth - depth;\n let innerType = (typesAfter && typesAfter[typesAfter.length - 1]) || $pos.parent;\n if (base < 0 || $pos.parent.type.spec.isolating ||\n !$pos.parent.canReplace($pos.index(), $pos.parent.childCount) ||\n !innerType.type.validContent($pos.parent.content.cutByIndex($pos.index(), $pos.parent.childCount)))\n return false;\n for (let d = $pos.depth - 1, i = depth - 2; d > base; d--, i--) {\n let node = $pos.node(d), index = $pos.index(d);\n if (node.type.spec.isolating)\n return false;\n let rest = node.content.cutByIndex(index, node.childCount);\n let after = (typesAfter && typesAfter[i]) || node;\n if (after != node)\n rest = rest.replaceChild(0, after.type.create(after.attrs));\n if (!node.canReplace(index + 1, node.childCount) || !after.type.validContent(rest))\n return false;\n }\n let index = $pos.indexAfter(base);\n let baseType = typesAfter && typesAfter[0];\n return $pos.node(base).canReplaceWith(index, index, baseType ? baseType.type : $pos.node(base + 1).type);\n}\nfunction split(tr, pos, depth = 1, typesAfter) {\n let $pos = tr.doc.resolve(pos), before = Fragment.empty, after = Fragment.empty;\n for (let d = $pos.depth, e = $pos.depth - depth, i = depth - 1; d > e; d--, i--) {\n before = Fragment.from($pos.node(d).copy(before));\n let typeAfter = typesAfter && typesAfter[i];\n after = Fragment.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d).copy(after));\n }\n tr.step(new ReplaceStep(pos, pos, new Slice(before.append(after), depth, depth), true));\n}\n/**\nTest whether the blocks before and after a given position can be\njoined.\n*/\nfunction canJoin(doc, pos) {\n let $pos = doc.resolve(pos), index = $pos.index();\n return joinable($pos.nodeBefore, $pos.nodeAfter) &&\n $pos.parent.canReplace(index, index + 1);\n}\nfunction joinable(a, b) {\n return !!(a && b && !a.isLeaf && a.canAppend(b));\n}\n/**\nFind an ancestor of the given position that can be joined to the\nblock before (or after if `dir` is positive). Returns the joinable\npoint, if any.\n*/\nfunction joinPoint(doc, pos, dir = -1) {\n let $pos = doc.resolve(pos);\n for (let d = $pos.depth;; d--) {\n let before, after, index = $pos.index(d);\n if (d == $pos.depth) {\n before = $pos.nodeBefore;\n after = $pos.nodeAfter;\n }\n else if (dir > 0) {\n before = $pos.node(d + 1);\n index++;\n after = $pos.node(d).maybeChild(index);\n }\n else {\n before = $pos.node(d).maybeChild(index - 1);\n after = $pos.node(d + 1);\n }\n if (before && !before.isTextblock && joinable(before, after) &&\n $pos.node(d).canReplace(index, index + 1))\n return pos;\n if (d == 0)\n break;\n pos = dir < 0 ? $pos.before(d) : $pos.after(d);\n }\n}\nfunction join(tr, pos, depth) {\n let step = new ReplaceStep(pos - depth, pos + depth, Slice.empty, true);\n tr.step(step);\n}\n/**\nTry to find a point where a node of the given type can be inserted\nnear `pos`, by searching up the node hierarchy when `pos` itself\nisn't a valid place but is at the start or end of a node. Return\nnull if no position was found.\n*/\nfunction insertPoint(doc, pos, nodeType) {\n let $pos = doc.resolve(pos);\n if ($pos.parent.canReplaceWith($pos.index(), $pos.index(), nodeType))\n return pos;\n if ($pos.parentOffset == 0)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.index(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.before(d + 1);\n if (index > 0)\n return null;\n }\n if ($pos.parentOffset == $pos.parent.content.size)\n for (let d = $pos.depth - 1; d >= 0; d--) {\n let index = $pos.indexAfter(d);\n if ($pos.node(d).canReplaceWith(index, index, nodeType))\n return $pos.after(d + 1);\n if (index < $pos.node(d).childCount)\n return null;\n }\n return null;\n}\n/**\nFinds a position at or around the given position where the given\nslice can be inserted. Will look at parent nodes' nearest boundary\nand try there, even if the original position wasn't directly at the\nstart or end of that node. Returns null when no position was found.\n*/\nfunction dropPoint(doc, pos, slice) {\n let $pos = doc.resolve(pos);\n if (!slice.content.size)\n return pos;\n let content = slice.content;\n for (let i = 0; i < slice.openStart; i++)\n content = content.firstChild.content;\n for (let pass = 1; pass <= (slice.openStart == 0 && slice.size ? 2 : 1); pass++) {\n for (let d = $pos.depth; d >= 0; d--) {\n let bias = d == $pos.depth ? 0 : $pos.pos <= ($pos.start(d + 1) + $pos.end(d + 1)) / 2 ? -1 : 1;\n let insertPos = $pos.index(d) + (bias > 0 ? 1 : 0);\n let parent = $pos.node(d), fits = false;\n if (pass == 1) {\n fits = parent.canReplace(insertPos, insertPos, content);\n }\n else {\n let wrapping = parent.contentMatchAt(insertPos).findWrapping(content.firstChild.type);\n fits = wrapping && parent.canReplaceWith(insertPos, insertPos, wrapping[0]);\n }\n if (fits)\n return bias == 0 ? $pos.pos : bias < 0 ? $pos.before(d + 1) : $pos.after(d + 1);\n }\n }\n return null;\n}\n\n/**\n‘Fit’ a slice into a given position in the document, producing a\n[step](https://prosemirror.net/docs/ref/#transform.Step) that inserts it. Will return null if\nthere's no meaningful way to insert the slice here, or inserting it\nwould be a no-op (an empty slice over an empty range).\n*/\nfunction replaceStep(doc, from, to = from, slice = Slice.empty) {\n if (from == to && !slice.size)\n return null;\n let $from = doc.resolve(from), $to = doc.resolve(to);\n // Optimization -- avoid work if it's obvious that it's not needed.\n if (fitsTrivially($from, $to, slice))\n return new ReplaceStep(from, to, slice);\n return new Fitter($from, $to, slice).fit();\n}\nfunction fitsTrivially($from, $to, slice) {\n return !slice.openStart && !slice.openEnd && $from.start() == $to.start() &&\n $from.parent.canReplace($from.index(), $to.index(), slice.content);\n}\n// Algorithm for 'placing' the elements of a slice into a gap:\n//\n// We consider the content of each node that is open to the left to be\n// independently placeable. I.e. in <p(\"foo\"), p(\"bar\")>, when the\n// paragraph on the left is open, \"foo\" can be placed (somewhere on\n// the left side of the replacement gap) independently from p(\"bar\").\n//\n// This class tracks the state of the placement progress in the\n// following properties:\n//\n// - `frontier` holds a stack of `{type, match}` objects that\n// represent the open side of the replacement. It starts at\n// `$from`, then moves forward as content is placed, and is finally\n// reconciled with `$to`.\n//\n// - `unplaced` is a slice that represents the content that hasn't\n// been placed yet.\n//\n// - `placed` is a fragment of placed content. Its open-start value\n// is implicit in `$from`, and its open-end value in `frontier`.\nclass Fitter {\n constructor($from, $to, unplaced) {\n this.$from = $from;\n this.$to = $to;\n this.unplaced = unplaced;\n this.frontier = [];\n this.placed = Fragment.empty;\n for (let i = 0; i <= $from.depth; i++) {\n let node = $from.node(i);\n this.frontier.push({\n type: node.type,\n match: node.contentMatchAt($from.indexAfter(i))\n });\n }\n for (let i = $from.depth; i > 0; i--)\n this.placed = Fragment.from($from.node(i).copy(this.placed));\n }\n get depth() { return this.frontier.length - 1; }\n fit() {\n // As long as there's unplaced content, try to place some of it.\n // If that fails, either increase the open score of the unplaced\n // slice, or drop nodes from it, and then try again.\n while (this.unplaced.size) {\n let fit = this.findFittable();\n if (fit)\n this.placeNodes(fit);\n else\n this.openMore() || this.dropNode();\n }\n // When there's inline content directly after the frontier _and_\n // directly after `this.$to`, we must generate a `ReplaceAround`\n // step that pulls that content into the node after the frontier.\n // That means the fitting must be done to the end of the textblock\n // node after `this.$to`, not `this.$to` itself.\n let moveInline = this.mustMoveInline(), placedSize = this.placed.size - this.depth - this.$from.depth;\n let $from = this.$from, $to = this.close(moveInline < 0 ? this.$to : $from.doc.resolve(moveInline));\n if (!$to)\n return null;\n // If closing to `$to` succeeded, create a step\n let content = this.placed, openStart = $from.depth, openEnd = $to.depth;\n while (openStart && openEnd && content.childCount == 1) { // Normalize by dropping open parent nodes\n content = content.firstChild.content;\n openStart--;\n openEnd--;\n }\n let slice = new Slice(content, openStart, openEnd);\n if (moveInline > -1)\n return new ReplaceAroundStep($from.pos, moveInline, this.$to.pos, this.$to.end(), slice, placedSize);\n if (slice.size || $from.pos != this.$to.pos) // Don't generate no-op steps\n return new ReplaceStep($from.pos, $to.pos, slice);\n return null;\n }\n // Find a position on the start spine of `this.unplaced` that has\n // content that can be moved somewhere on the frontier. Returns two\n // depths, one for the slice and one for the frontier.\n findFittable() {\n // Only try wrapping nodes (pass 2) after finding a place without\n // wrapping failed.\n for (let pass = 1; pass <= 2; pass++) {\n for (let sliceDepth = this.unplaced.openStart; sliceDepth >= 0; sliceDepth--) {\n let fragment, parent = null;\n if (sliceDepth) {\n parent = contentAt(this.unplaced.content, sliceDepth - 1).firstChild;\n fragment = parent.content;\n }\n else {\n fragment = this.unplaced.content;\n }\n let first = fragment.firstChild;\n for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {\n let { type, match } = this.frontier[frontierDepth], wrap, inject = null;\n // In pass 1, if the next node matches, or there is no next\n // node but the parents look compatible, we've found a\n // place.\n if (pass == 1 && (first ? match.matchType(first.type) || (inject = match.fillBefore(Fragment.from(first), false))\n : parent && type.compatibleContent(parent.type)))\n return { sliceDepth, frontierDepth, parent, inject };\n // In pass 2, look for a set of wrapping nodes that make\n // `first` fit here.\n else if (pass == 2 && first && (wrap = match.findWrapping(first.type)))\n return { sliceDepth, frontierDepth, parent, wrap };\n // Don't continue looking further up if the parent node\n // would fit here.\n if (parent && match.matchType(parent.type))\n break;\n }\n }\n }\n }\n openMore() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (!inner.childCount || inner.firstChild.isLeaf)\n return false;\n this.unplaced = new Slice(content, openStart + 1, Math.max(openEnd, inner.size + openStart >= content.size - openEnd ? openStart + 1 : 0));\n return true;\n }\n dropNode() {\n let { content, openStart, openEnd } = this.unplaced;\n let inner = contentAt(content, openStart);\n if (inner.childCount <= 1 && openStart > 0) {\n let openAtEnd = content.size - openStart <= openStart + inner.size;\n this.unplaced = new Slice(dropFromFragment(content, openStart - 1, 1), openStart - 1, openAtEnd ? openStart - 1 : openEnd);\n }\n else {\n this.unplaced = new Slice(dropFromFragment(content, openStart, 1), openStart, openEnd);\n }\n }\n // Move content from the unplaced slice at `sliceDepth` to the\n // frontier node at `frontierDepth`. Close that frontier node when\n // applicable.\n placeNodes({ sliceDepth, frontierDepth, parent, inject, wrap }) {\n while (this.depth > frontierDepth)\n this.closeFrontierNode();\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n this.openFrontierNode(wrap[i]);\n let slice = this.unplaced, fragment = parent ? parent.content : slice.content;\n let openStart = slice.openStart - sliceDepth;\n let taken = 0, add = [];\n let { match, type } = this.frontier[frontierDepth];\n if (inject) {\n for (let i = 0; i < inject.childCount; i++)\n add.push(inject.child(i));\n match = match.matchFragment(inject);\n }\n // Computes the amount of (end) open nodes at the end of the\n // fragment. When 0, the parent is open, but no more. When\n // negative, nothing is open.\n let openEndCount = (fragment.size + sliceDepth) - (slice.content.size - slice.openEnd);\n // Scan over the fragment, fitting as many child nodes as\n // possible.\n while (taken < fragment.childCount) {\n let next = fragment.child(taken), matches = match.matchType(next.type);\n if (!matches)\n break;\n taken++;\n if (taken > 1 || openStart == 0 || next.content.size) { // Drop empty open nodes\n match = matches;\n add.push(closeNodeStart(next.mark(type.allowedMarks(next.marks)), taken == 1 ? openStart : 0, taken == fragment.childCount ? openEndCount : -1));\n }\n }\n let toEnd = taken == fragment.childCount;\n if (!toEnd)\n openEndCount = -1;\n this.placed = addToFragment(this.placed, frontierDepth, Fragment.from(add));\n this.frontier[frontierDepth].match = match;\n // If the parent types match, and the entire node was moved, and\n // it's not open, close this frontier node right away.\n if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)\n this.closeFrontierNode();\n // Add new frontier nodes for any open nodes at the end.\n for (let i = 0, cur = fragment; i < openEndCount; i++) {\n let node = cur.lastChild;\n this.frontier.push({ type: node.type, match: node.contentMatchAt(node.childCount) });\n cur = node.content;\n }\n // Update `this.unplaced`. Drop the entire node from which we\n // placed it we got to its end, otherwise just drop the placed\n // nodes.\n this.unplaced = !toEnd ? new Slice(dropFromFragment(slice.content, sliceDepth, taken), slice.openStart, slice.openEnd)\n : sliceDepth == 0 ? Slice.empty\n : new Slice(dropFromFragment(slice.content, sliceDepth - 1, 1), sliceDepth - 1, openEndCount < 0 ? slice.openEnd : sliceDepth - 1);\n }\n mustMoveInline() {\n if (!this.$to.parent.isTextblock)\n return -1;\n let top = this.frontier[this.depth], level;\n if (!top.type.isTextblock || !contentAfterFits(this.$to, this.$to.depth, top.type, top.match, false) ||\n (this.$to.depth == this.depth && (level = this.findCloseLevel(this.$to)) && level.depth == this.depth))\n return -1;\n let { depth } = this.$to, after = this.$to.after(depth);\n while (depth > 1 && after == this.$to.end(--depth))\n ++after;\n return after;\n }\n findCloseLevel($to) {\n scan: for (let i = Math.min(this.depth, $to.depth); i >= 0; i--) {\n let { match, type } = this.frontier[i];\n let dropInner = i < $to.depth && $to.end(i + 1) == $to.pos + ($to.depth - (i + 1));\n let fit = contentAfterFits($to, i, type, match, dropInner);\n if (!fit)\n continue;\n for (let d = i - 1; d >= 0; d--) {\n let { match, type } = this.frontier[d];\n let matches = contentAfterFits($to, d, type, match, true);\n if (!matches || matches.childCount)\n continue scan;\n }\n return { depth: i, fit, move: dropInner ? $to.doc.resolve($to.after(i + 1)) : $to };\n }\n }\n close($to) {\n let close = this.findCloseLevel($to);\n if (!close)\n return null;\n while (this.depth > close.depth)\n this.closeFrontierNode();\n if (close.fit.childCount)\n this.placed = addToFragment(this.placed, close.depth, close.fit);\n $to = close.move;\n for (let d = close.depth + 1; d <= $to.depth; d++) {\n let node = $to.node(d), add = node.type.contentMatch.fillBefore(node.content, true, $to.index(d));\n this.openFrontierNode(node.type, node.attrs, add);\n }\n return $to;\n }\n openFrontierNode(type, attrs = null, content) {\n let top = this.frontier[this.depth];\n top.match = top.match.matchType(type);\n this.placed = addToFragment(this.placed, this.depth, Fragment.from(type.create(attrs, content)));\n this.frontier.push({ type, match: type.contentMatch });\n }\n closeFrontierNode() {\n let open = this.frontier.pop();\n let add = open.match.fillBefore(Fragment.empty, true);\n if (add.childCount)\n this.placed = addToFragment(this.placed, this.frontier.length, add);\n }\n}\nfunction dropFromFragment(fragment, depth, count) {\n if (depth == 0)\n return fragment.cutByIndex(count, fragment.childCount);\n return fragment.replaceChild(0, fragment.firstChild.copy(dropFromFragment(fragment.firstChild.content, depth - 1, count)));\n}\nfunction addToFragment(fragment, depth, content) {\n if (depth == 0)\n return fragment.append(content);\n return fragment.replaceChild(fragment.childCount - 1, fragment.lastChild.copy(addToFragment(fragment.lastChild.content, depth - 1, content)));\n}\nfunction contentAt(fragment, depth) {\n for (let i = 0; i < depth; i++)\n fragment = fragment.firstChild.content;\n return fragment;\n}\nfunction closeNodeStart(node, openStart, openEnd) {\n if (openStart <= 0)\n return node;\n let frag = node.content;\n if (openStart > 1)\n frag = frag.replaceChild(0, closeNodeStart(frag.firstChild, openStart - 1, frag.childCount == 1 ? openEnd - 1 : 0));\n if (openStart > 0) {\n frag = node.type.contentMatch.fillBefore(frag).append(frag);\n if (openEnd <= 0)\n frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment.empty, true));\n }\n return node.copy(frag);\n}\nfunction contentAfterFits($to, depth, type, match, open) {\n let node = $to.node(depth), index = open ? $to.indexAfter(depth) : $to.index(depth);\n if (index == node.childCount && !type.compatibleContent(node.type))\n return null;\n let fit = match.fillBefore(node.content, true, index);\n return fit && !invalidMarks(type, node.content, index) ? fit : null;\n}\nfunction invalidMarks(type, fragment, start) {\n for (let i = start; i < fragment.childCount; i++)\n if (!type.allowsMarks(fragment.child(i).marks))\n return true;\n return false;\n}\nfunction definesContent(type) {\n return type.spec.defining || type.spec.definingForContent;\n}\nfunction replaceRange(tr, from, to, slice) {\n if (!slice.size)\n return tr.deleteRange(from, to);\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n if (fitsTrivially($from, $to, slice))\n return tr.step(new ReplaceStep(from, to, slice));\n let targetDepths = coveredDepths($from, tr.doc.resolve(to));\n // Can't replace the whole document, so remove 0 if it's present\n if (targetDepths[targetDepths.length - 1] == 0)\n targetDepths.pop();\n // Negative numbers represent not expansion over the whole node at\n // that depth, but replacing from $from.before(-D) to $to.pos.\n let preferredTarget = -($from.depth + 1);\n targetDepths.unshift(preferredTarget);\n // This loop picks a preferred target depth, if one of the covering\n // depths is not outside of a defining node, and adds negative\n // depths for any depth that has $from at its start and does not\n // cross a defining node.\n for (let d = $from.depth, pos = $from.pos - 1; d > 0; d--, pos--) {\n let spec = $from.node(d).type.spec;\n if (spec.defining || spec.definingAsContext || spec.isolating)\n break;\n if (targetDepths.indexOf(d) > -1)\n preferredTarget = d;\n else if ($from.before(d) == pos)\n targetDepths.splice(1, 0, -d);\n }\n // Try to fit each possible depth of the slice into each possible\n // target depth, starting with the preferred depths.\n let preferredTargetIndex = targetDepths.indexOf(preferredTarget);\n let leftNodes = [], preferredDepth = slice.openStart;\n for (let content = slice.content, i = 0;; i++) {\n let node = content.firstChild;\n leftNodes.push(node);\n if (i == slice.openStart)\n break;\n content = node.content;\n }\n // Back up preferredDepth to cover defining textblocks directly\n // above it, possibly skipping a non-defining textblock.\n for (let d = preferredDepth - 1; d >= 0; d--) {\n let type = leftNodes[d].type, def = definesContent(type);\n if (def && $from.node(preferredTargetIndex).type != type)\n preferredDepth = d;\n else if (def || !type.isTextblock)\n break;\n }\n for (let j = slice.openStart; j >= 0; j--) {\n let openDepth = (j + preferredDepth + 1) % (slice.openStart + 1);\n let insert = leftNodes[openDepth];\n if (!insert)\n continue;\n for (let i = 0; i < targetDepths.length; i++) {\n // Loop over possible expansion levels, starting with the\n // preferred one\n let targetDepth = targetDepths[(i + preferredTargetIndex) % targetDepths.length], expand = true;\n if (targetDepth < 0) {\n expand = false;\n targetDepth = -targetDepth;\n }\n let parent = $from.node(targetDepth - 1), index = $from.index(targetDepth - 1);\n if (parent.canReplaceWith(index, index, insert.type, insert.marks))\n return tr.replace($from.before(targetDepth), expand ? $to.after(targetDepth) : to, new Slice(closeFragment(slice.content, 0, slice.openStart, openDepth), openDepth, slice.openEnd));\n }\n }\n let startSteps = tr.steps.length;\n for (let i = targetDepths.length - 1; i >= 0; i--) {\n tr.replace(from, to, slice);\n if (tr.steps.length > startSteps)\n break;\n let depth = targetDepths[i];\n if (depth < 0)\n continue;\n from = $from.before(depth);\n to = $to.after(depth);\n }\n}\nfunction closeFragment(fragment, depth, oldOpen, newOpen, parent) {\n if (depth < oldOpen) {\n let first = fragment.firstChild;\n fragment = fragment.replaceChild(0, first.copy(closeFragment(first.content, depth + 1, oldOpen, newOpen, first)));\n }\n if (depth > newOpen) {\n let match = parent.contentMatchAt(0);\n let start = match.fillBefore(fragment).append(fragment);\n fragment = start.append(match.matchFragment(start).fillBefore(Fragment.empty, true));\n }\n return fragment;\n}\nfunction replaceRangeWith(tr, from, to, node) {\n if (!node.isInline && from == to && tr.doc.resolve(from).parent.content.size) {\n let point = insertPoint(tr.doc, from, node.type);\n if (point != null)\n from = to = point;\n }\n tr.replaceRange(from, to, new Slice(Fragment.from(node), 0, 0));\n}\nfunction deleteRange(tr, from, to) {\n let $from = tr.doc.resolve(from), $to = tr.doc.resolve(to);\n let covered = coveredDepths($from, $to);\n for (let i = 0; i < covered.length; i++) {\n let depth = covered[i], last = i == covered.length - 1;\n if ((last && depth == 0) || $from.node(depth).type.contentMatch.validEnd)\n return tr.delete($from.start(depth), $to.end(depth));\n if (depth > 0 && (last || $from.node(depth - 1).canReplace($from.index(depth - 1), $to.indexAfter(depth - 1))))\n return tr.delete($from.before(depth), $to.after(depth));\n }\n for (let d = 1; d <= $from.depth && d <= $to.depth; d++) {\n if (from - $from.start(d) == $from.depth - d && to > $from.end(d) && $to.end(d) - to != $to.depth - d)\n return tr.delete($from.before(d), to);\n }\n tr.delete(from, to);\n}\n// Returns an array of all depths for which $from - $to spans the\n// whole content of the nodes at that depth.\nfunction coveredDepths($from, $to) {\n let result = [], minDepth = Math.min($from.depth, $to.depth);\n for (let d = minDepth; d >= 0; d--) {\n let start = $from.start(d);\n if (start < $from.pos - ($from.depth - d) ||\n $to.end(d) > $to.pos + ($to.depth - d) ||\n $from.node(d).type.spec.isolating ||\n $to.node(d).type.spec.isolating)\n break;\n if (start == $to.start(d) ||\n (d == $from.depth && d == $to.depth && $from.parent.inlineContent && $to.parent.inlineContent &&\n d && $to.start(d - 1) == start - 1))\n result.push(d);\n }\n return result;\n}\n\n/**\nUpdate an attribute in a specific node.\n*/\nclass AttrStep extends Step {\n /**\n Construct an attribute step.\n */\n constructor(\n /**\n The position of the target node.\n */\n pos, \n /**\n The attribute to set.\n */\n attr, \n // The attribute's new value.\n value) {\n super();\n this.pos = pos;\n this.attr = attr;\n this.value = value;\n }\n apply(doc) {\n let node = doc.nodeAt(this.pos);\n if (!node)\n return StepResult.fail(\"No node at attribute step's position\");\n let attrs = Object.create(null);\n for (let name in node.attrs)\n attrs[name] = node.attrs[name];\n attrs[this.attr] = this.value;\n let updated = node.type.create(attrs, null, node.marks);\n return StepResult.fromReplace(doc, this.pos, this.pos + 1, new Slice(Fragment.from(updated), 0, node.isLeaf ? 0 : 1));\n }\n getMap() {\n return StepMap.empty;\n }\n invert(doc) {\n return new AttrStep(this.pos, this.attr, doc.nodeAt(this.pos).attrs[this.attr]);\n }\n map(mapping) {\n let pos = mapping.mapResult(this.pos, 1);\n return pos.deletedAfter ? null : new AttrStep(pos.pos, this.attr, this.value);\n }\n toJSON() {\n return { stepType: \"attr\", pos: this.pos, attr: this.attr, value: this.value };\n }\n static fromJSON(schema, json) {\n if (typeof json.pos != \"number\" || typeof json.attr != \"string\")\n throw new RangeError(\"Invalid input for AttrStep.fromJSON\");\n return new AttrStep(json.pos, json.attr, json.value);\n }\n}\nStep.jsonID(\"attr\", AttrStep);\n\n/**\n@internal\n*/\nlet TransformError = class extends Error {\n};\nTransformError = function TransformError(message) {\n let err = Error.call(this, message);\n err.__proto__ = TransformError.prototype;\n return err;\n};\nTransformError.prototype = Object.create(Error.prototype);\nTransformError.prototype.constructor = TransformError;\nTransformError.prototype.name = \"TransformError\";\n/**\nAbstraction to build up and track an array of\n[steps](https://prosemirror.net/docs/ref/#transform.Step) representing a document transformation.\n\nMost transforming methods return the `Transform` object itself, so\nthat they can be chained.\n*/\nclass Transform {\n /**\n Create a transform that starts with the given document.\n */\n constructor(\n /**\n The current document (the result of applying the steps in the\n transform).\n */\n doc) {\n this.doc = doc;\n /**\n The steps in this transform.\n */\n this.steps = [];\n /**\n The documents before each of the steps.\n */\n this.docs = [];\n /**\n A mapping with the maps for each of the steps in this transform.\n */\n this.mapping = new Mapping;\n }\n /**\n The starting document.\n */\n get before() { return this.docs.length ? this.docs[0] : this.doc; }\n /**\n Apply a new step in this transform, saving the result. Throws an\n error when the step fails.\n */\n step(step) {\n let result = this.maybeStep(step);\n if (result.failed)\n throw new TransformError(result.failed);\n return this;\n }\n /**\n Try to apply a step in this transformation, ignoring it if it\n fails. Returns the step result.\n */\n maybeStep(step) {\n let result = step.apply(this.doc);\n if (!result.failed)\n this.addStep(step, result.doc);\n return result;\n }\n /**\n True when the document has been changed (when there are any\n steps).\n */\n get docChanged() {\n return this.steps.length > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n this.docs.push(this.doc);\n this.steps.push(step);\n this.mapping.appendMap(step.getMap());\n this.doc = doc;\n }\n /**\n Replace the part of the document between `from` and `to` with the\n given `slice`.\n */\n replace(from, to = from, slice = Slice.empty) {\n let step = replaceStep(this.doc, from, to, slice);\n if (step)\n this.step(step);\n return this;\n }\n /**\n Replace the given range with the given content, which may be a\n fragment, node, or array of nodes.\n */\n replaceWith(from, to, content) {\n return this.replace(from, to, new Slice(Fragment.from(content), 0, 0));\n }\n /**\n Delete the content between the given positions.\n */\n delete(from, to) {\n return this.replace(from, to, Slice.empty);\n }\n /**\n Insert the given content at the given position.\n */\n insert(pos, content) {\n return this.replaceWith(pos, pos, content);\n }\n /**\n Replace a range of the document with a given slice, using\n `from`, `to`, and the slice's\n [`openStart`](https://prosemirror.net/docs/ref/#model.Slice.openStart) property as hints, rather\n than fixed start and end points. This method may grow the\n replaced area or close open nodes in the slice in order to get a\n fit that is more in line with WYSIWYG expectations, by dropping\n fully covered parent nodes of the replaced region when they are\n marked [non-defining as\n context](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext), or including an\n open parent node from the slice that _is_ marked as [defining\n its content](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).\n \n This is the method, for example, to handle paste. The similar\n [`replace`](https://prosemirror.net/docs/ref/#transform.Transform.replace) method is a more\n primitive tool which will _not_ move the start and end of its given\n range, and is useful in situations where you need more precise\n control over what happens.\n */\n replaceRange(from, to, slice) {\n replaceRange(this, from, to, slice);\n return this;\n }\n /**\n Replace the given range with a node, but use `from` and `to` as\n hints, rather than precise positions. When from and to are the same\n and are at the start or end of a parent node in which the given\n node doesn't fit, this method may _move_ them out towards a parent\n that does allow the given node to be placed. When the given range\n completely covers a parent node, this method may completely replace\n that parent node.\n */\n replaceRangeWith(from, to, node) {\n replaceRangeWith(this, from, to, node);\n return this;\n }\n /**\n Delete the given range, expanding it to cover fully covered\n parent nodes until a valid replace is found.\n */\n deleteRange(from, to) {\n deleteRange(this, from, to);\n return this;\n }\n /**\n Split the content in the given range off from its parent, if there\n is sibling content before or after it, and move it up the tree to\n the depth specified by `target`. You'll probably want to use\n [`liftTarget`](https://prosemirror.net/docs/ref/#transform.liftTarget) to compute `target`, to make\n sure the lift is valid.\n */\n lift(range, target) {\n lift(this, range, target);\n return this;\n }\n /**\n Join the blocks around the given position. If depth is 2, their\n last and first siblings are also joined, and so on.\n */\n join(pos, depth = 1) {\n join(this, pos, depth);\n return this;\n }\n /**\n Wrap the given [range](https://prosemirror.net/docs/ref/#model.NodeRange) in the given set of wrappers.\n The wrappers are assumed to be valid in this position, and should\n probably be computed with [`findWrapping`](https://prosemirror.net/docs/ref/#transform.findWrapping).\n */\n wrap(range, wrappers) {\n wrap(this, range, wrappers);\n return this;\n }\n /**\n Set the type of all textblocks (partly) between `from` and `to` to\n the given node type with the given attributes.\n */\n setBlockType(from, to = from, type, attrs = null) {\n setBlockType(this, from, to, type, attrs);\n return this;\n }\n /**\n Change the type, attributes, and/or marks of the node at `pos`.\n When `type` isn't given, the existing node type is preserved,\n */\n setNodeMarkup(pos, type, attrs = null, marks = []) {\n setNodeMarkup(this, pos, type, attrs, marks);\n return this;\n }\n /**\n Set a single attribute on a given node to a new value.\n */\n setNodeAttribute(pos, attr, value) {\n this.step(new AttrStep(pos, attr, value));\n return this;\n }\n /**\n Add a mark to the node at position `pos`.\n */\n addNodeMark(pos, mark) {\n this.step(new AddNodeMarkStep(pos, mark));\n return this;\n }\n /**\n Remove a mark (or a mark of the given type) from the node at\n position `pos`.\n */\n removeNodeMark(pos, mark) {\n if (!(mark instanceof Mark)) {\n let node = this.doc.nodeAt(pos);\n if (!node)\n throw new RangeError(\"No node at position \" + pos);\n mark = mark.isInSet(node.marks);\n if (!mark)\n return this;\n }\n this.step(new RemoveNodeMarkStep(pos, mark));\n return this;\n }\n /**\n Split the node at the given position, and optionally, if `depth` is\n greater than one, any number of nodes above that. By default, the\n parts split off will inherit the node type of the original node.\n This can be changed by passing an array of types and attributes to\n use after the split.\n */\n split(pos, depth = 1, typesAfter) {\n split(this, pos, depth, typesAfter);\n return this;\n }\n /**\n Add the given mark to the inline content between `from` and `to`.\n */\n addMark(from, to, mark) {\n addMark(this, from, to, mark);\n return this;\n }\n /**\n Remove marks from inline nodes between `from` and `to`. When\n `mark` is a single mark, remove precisely that mark. When it is\n a mark type, remove all marks of that type. When it is null,\n remove all marks of any type.\n */\n removeMark(from, to, mark) {\n removeMark(this, from, to, mark);\n return this;\n }\n /**\n Removes all marks and nodes from the content of the node at\n `pos` that don't match the given new parent node type. Accepts\n an optional starting [content match](https://prosemirror.net/docs/ref/#model.ContentMatch) as\n third argument.\n */\n clearIncompatible(pos, parentType, match) {\n clearIncompatible(this, pos, parentType, match);\n return this;\n }\n}\n\nexport { AddMarkStep, AddNodeMarkStep, AttrStep, MapResult, Mapping, RemoveMarkStep, RemoveNodeMarkStep, ReplaceAroundStep, ReplaceStep, Step, StepMap, StepResult, Transform, TransformError, canJoin, canSplit, dropPoint, findWrapping, insertPoint, joinPoint, liftTarget, replaceStep };\n","import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nconst classesById = Object.create(null);\n/**\nSuperclass for editor selections. Every selection type should\nextend this. Should not be instantiated directly.\n*/\nclass Selection {\n /**\n Initialize a selection with the head and anchor and ranges. If no\n ranges are given, constructs a single range across `$anchor` and\n `$head`.\n */\n constructor(\n /**\n The resolved anchor of the selection (the side that stays in\n place when the selection is modified).\n */\n $anchor, \n /**\n The resolved head of the selection (the side that moves when\n the selection is modified).\n */\n $head, ranges) {\n this.$anchor = $anchor;\n this.$head = $head;\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n }\n /**\n The selection's anchor, as an unresolved position.\n */\n get anchor() { return this.$anchor.pos; }\n /**\n The selection's head.\n */\n get head() { return this.$head.pos; }\n /**\n The lower bound of the selection's main range.\n */\n get from() { return this.$from.pos; }\n /**\n The upper bound of the selection's main range.\n */\n get to() { return this.$to.pos; }\n /**\n The resolved lower bound of the selection's main range.\n */\n get $from() {\n return this.ranges[0].$from;\n }\n /**\n The resolved upper bound of the selection's main range.\n */\n get $to() {\n return this.ranges[0].$to;\n }\n /**\n Indicates whether the selection contains any content.\n */\n get empty() {\n let ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++)\n if (ranges[i].$from.pos != ranges[i].$to.pos)\n return false;\n return true;\n }\n /**\n Get the content of this selection as a slice.\n */\n content() {\n return this.$from.doc.slice(this.from, this.to, true);\n }\n /**\n Replace the selection with a slice or, if no slice is given,\n delete the selection. Will append to the given transaction.\n */\n replace(tr, content = Slice.empty) {\n // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n let lastNode = content.content.lastChild, lastParent = null;\n for (let i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n if (i == 0)\n selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n }\n }\n /**\n Replace the selection with the given node, appending the changes\n to the given transaction.\n */\n replaceWith(tr, node) {\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n let from = mapping.map($from.pos), to = mapping.map($to.pos);\n if (i) {\n tr.deleteRange(from, to);\n }\n else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n }\n /**\n Find a valid cursor or leaf node selection starting at the given\n position and searching back if `dir` is negative, and forward if\n positive. When `textOnly` is true, only consider cursor\n selections. Will return null when no valid selection position is\n found.\n */\n static findFrom($pos, dir, textOnly = false) {\n let inner = $pos.parent.inlineContent ? new TextSelection($pos)\n : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n if (inner)\n return inner;\n for (let depth = $pos.depth - 1; depth >= 0; depth--) {\n let found = dir < 0\n ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n if (found)\n return found;\n }\n return null;\n }\n /**\n Find a valid cursor or leaf node selection near the given\n position. Searches forward first by default, but if `bias` is\n negative, it will search backwards first.\n */\n static near($pos, bias = 1) {\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n }\n /**\n Find the cursor or leaf node selection closest to the start of\n the given document. Will return an\n [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position\n exists.\n */\n static atStart(doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n }\n /**\n Find the cursor or leaf node selection closest to the end of the\n given document.\n */\n static atEnd(doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n }\n /**\n Deserialize the JSON representation of a selection. Must be\n implemented for custom classes (as a static class method).\n */\n static fromJSON(doc, json) {\n if (!json || !json.type)\n throw new RangeError(\"Invalid input for Selection.fromJSON\");\n let cls = classesById[json.type];\n if (!cls)\n throw new RangeError(`No selection type ${json.type} defined`);\n return cls.fromJSON(doc, json);\n }\n /**\n To be able to deserialize selections from JSON, custom selection\n classes must register themselves with an ID string, so that they\n can be disambiguated. Try to pick something that's unlikely to\n clash with classes from other modules.\n */\n static jsonID(id, selectionClass) {\n if (id in classesById)\n throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass;\n }\n /**\n Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,\n which is a value that can be mapped without having access to a\n current document, and later resolved to a real selection for a\n given document again. (This is used mostly by the history to\n track and restore old selections.) The default implementation of\n this method just converts the selection to a text selection and\n returns the bookmark for that.\n */\n getBookmark() {\n return TextSelection.between(this.$anchor, this.$head).getBookmark();\n }\n}\nSelection.prototype.visible = true;\n/**\nRepresents a selected range in a document.\n*/\nclass SelectionRange {\n /**\n Create a range.\n */\n constructor(\n /**\n The lower bound of the range.\n */\n $from, \n /**\n The upper bound of the range.\n */\n $to) {\n this.$from = $from;\n this.$to = $to;\n }\n}\nlet warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n warnedAboutTextSelection = true;\n console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n }\n}\n/**\nA text selection represents a classical editor selection, with a\nhead (the moving side) and anchor (immobile side), both of which\npoint into textblock nodes. It can be empty (a regular cursor\nposition).\n*/\nclass TextSelection extends Selection {\n /**\n Construct a text selection between the given points.\n */\n constructor($anchor, $head = $anchor) {\n checkTextSelection($anchor);\n checkTextSelection($head);\n super($anchor, $head);\n }\n /**\n Returns a resolved position if this is a cursor selection (an\n empty text selection), and null otherwise.\n */\n get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; }\n map(doc, mapping) {\n let $head = doc.resolve(mapping.map(this.head));\n if (!$head.parent.inlineContent)\n return Selection.near($head);\n let $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n }\n replace(tr, content = Slice.empty) {\n super.replace(tr, content);\n if (content == Slice.empty) {\n let marks = this.$from.marksAcross(this.$to);\n if (marks)\n tr.ensureMarks(marks);\n }\n }\n eq(other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n }\n getBookmark() {\n return new TextBookmark(this.anchor, this.head);\n }\n toJSON() {\n return { type: \"text\", anchor: this.anchor, head: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n /**\n Create a text selection from non-resolved positions.\n */\n static create(doc, anchor, head = anchor) {\n let $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n }\n /**\n Return a text selection that spans the given positions or, if\n they aren't text positions, find a text selection near them.\n `bias` determines whether the method searches forward (default)\n or backwards (negative number) first. Will fall back to calling\n [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document\n doesn't contain a valid text position.\n */\n static between($anchor, $head, bias) {\n let dPos = $anchor.pos - $head.pos;\n if (!bias || dPos)\n bias = dPos >= 0 ? 1 : -1;\n if (!$head.parent.inlineContent) {\n let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n if (found)\n $head = found.$head;\n else\n return Selection.near($head, bias);\n }\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n }\n else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n if (($anchor.pos < $head.pos) != (dPos < 0))\n $anchor = $head;\n }\n }\n return new TextSelection($anchor, $head);\n }\n}\nSelection.jsonID(\"text\", TextSelection);\nclass TextBookmark {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n }\n}\n/**\nA node selection is a selection that points at a single node. All\nnodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the\ntarget of a node selection. In such a selection, `from` and `to`\npoint directly before and after the selected node, `anchor` equals\n`from`, and `head` equals `to`..\n*/\nclass NodeSelection extends Selection {\n /**\n Create a node selection. Does not verify the validity of its\n argument.\n */\n constructor($pos) {\n let node = $pos.nodeAfter;\n let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n super($pos, $end);\n this.node = node;\n }\n map(doc, mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n let $pos = doc.resolve(pos);\n if (deleted)\n return Selection.near($pos);\n return new NodeSelection($pos);\n }\n content() {\n return new Slice(Fragment.from(this.node), 0, 0);\n }\n eq(other) {\n return other instanceof NodeSelection && other.anchor == this.anchor;\n }\n toJSON() {\n return { type: \"node\", anchor: this.anchor };\n }\n getBookmark() { return new NodeBookmark(this.anchor); }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\")\n throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n return new NodeSelection(doc.resolve(json.anchor));\n }\n /**\n Create a node selection from non-resolved positions.\n */\n static create(doc, from) {\n return new NodeSelection(doc.resolve(from));\n }\n /**\n Determines whether the given node may be selected as a node\n selection.\n */\n static isSelectable(node) {\n return !node.isText && node.type.spec.selectable !== false;\n }\n}\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nclass NodeBookmark {\n constructor(anchor) {\n this.anchor = anchor;\n }\n map(mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n }\n resolve(doc) {\n let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n if (node && NodeSelection.isSelectable(node))\n return new NodeSelection($pos);\n return Selection.near($pos);\n }\n}\n/**\nA selection type that represents selecting the whole document\n(which can not necessarily be expressed with a text selection, when\nthere are for example leaf block nodes at the start or end of the\ndocument).\n*/\nclass AllSelection extends Selection {\n /**\n Create an all-selection over the given document.\n */\n constructor(doc) {\n super(doc.resolve(0), doc.resolve(doc.content.size));\n }\n replace(tr, content = Slice.empty) {\n if (content == Slice.empty) {\n tr.delete(0, tr.doc.content.size);\n let sel = Selection.atStart(tr.doc);\n if (!sel.eq(tr.selection))\n tr.setSelection(sel);\n }\n else {\n super.replace(tr, content);\n }\n }\n toJSON() { return { type: \"all\" }; }\n /**\n @internal\n */\n static fromJSON(doc) { return new AllSelection(doc); }\n map(doc) { return new AllSelection(doc); }\n eq(other) { return other instanceof AllSelection; }\n getBookmark() { return AllBookmark; }\n}\nSelection.jsonID(\"all\", AllSelection);\nconst AllBookmark = {\n map() { return this; },\n resolve(doc) { return new AllSelection(doc); }\n};\n// FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text = false) {\n if (node.inlineContent)\n return TextSelection.create(doc, pos);\n for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n let child = node.child(i);\n if (!child.isAtom) {\n let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n if (inner)\n return inner;\n }\n else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n }\n pos += child.nodeSize * dir;\n }\n return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n let last = tr.steps.length - 1;\n if (last < startLen)\n return;\n let step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))\n return;\n let map = tr.mapping.maps[last], end;\n map.forEach((_from, _to, _newFrom, newTo) => { if (end == null)\n end = newTo; });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n/**\nAn editor state transaction, which can be applied to a state to\ncreate an updated state. Use\n[`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance.\n\nTransactions track changes to the document (they are a subclass of\n[`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes,\nlike selection updates and adjustments of the set of [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store\nmetadata properties in a transaction, which are extra pieces of\ninformation that client code or plugins can use to describe what a\ntransaction represents, so that they can update their [own\nstate](https://prosemirror.net/docs/ref/#state.StateField) accordingly.\n\nThe [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata properties:\nit will attach a property `\"pointer\"` with the value `true` to\nselection transactions directly caused by mouse or touch input, and\na `\"uiEvent\"` property of that may be `\"paste\"`, `\"cut\"`, or `\"drop\"`.\n*/\nclass Transaction extends Transform {\n /**\n @internal\n */\n constructor(state) {\n super(state.doc);\n // The step count for which the current selection is valid.\n this.curSelectionFor = 0;\n // Bitfield to track which aspects of the state were updated by\n // this transaction.\n this.updated = 0;\n // Object used to store metadata properties for the transaction.\n this.meta = Object.create(null);\n this.time = Date.now();\n this.curSelection = state.selection;\n this.storedMarks = state.storedMarks;\n }\n /**\n The transaction's current selection. This defaults to the editor\n selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the\n transaction, but can be overwritten with\n [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).\n */\n get selection() {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n return this.curSelection;\n }\n /**\n Update the transaction's current selection. Will determine the\n selection that the editor gets when the transaction is applied.\n */\n setSelection(selection) {\n if (selection.$from.doc != this.doc)\n throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this;\n }\n /**\n Whether the selection was explicitly updated by this transaction.\n */\n get selectionSet() {\n return (this.updated & UPDATED_SEL) > 0;\n }\n /**\n Set the current stored marks.\n */\n setStoredMarks(marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this;\n }\n /**\n Make sure the current stored marks or, if that is null, the marks\n at the selection, match the given set of marks. Does nothing if\n this is already the case.\n */\n ensureMarks(marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n this.setStoredMarks(marks);\n return this;\n }\n /**\n Add a mark to the set of stored marks.\n */\n addStoredMark(mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Remove a mark or mark type from the set of stored marks.\n */\n removeStoredMark(mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Whether the stored marks were explicitly set for this transaction.\n */\n get storedMarksSet() {\n return (this.updated & UPDATED_MARKS) > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n super.addStep(step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n }\n /**\n Update the timestamp for the transaction.\n */\n setTime(time) {\n this.time = time;\n return this;\n }\n /**\n Replace the current selection with the given slice.\n */\n replaceSelection(slice) {\n this.selection.replace(this, slice);\n return this;\n }\n /**\n Replace the selection with the given node. When `inheritMarks` is\n true and the content is inline, it inherits the marks from the\n place where it is inserted.\n */\n replaceSelectionWith(node, inheritMarks = true) {\n let selection = this.selection;\n if (inheritMarks)\n node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)));\n selection.replaceWith(this, node);\n return this;\n }\n /**\n Delete the selection.\n */\n deleteSelection() {\n this.selection.replace(this);\n return this;\n }\n /**\n Replace the given range, or the selection if no range is given,\n with a text node containing the given string.\n */\n insertText(text, from, to) {\n let schema = this.doc.type.schema;\n if (from == null) {\n if (!text)\n return this.deleteSelection();\n return this.replaceSelectionWith(schema.text(text), true);\n }\n else {\n if (to == null)\n to = from;\n to = to == null ? from : to;\n if (!text)\n return this.deleteRange(from, to);\n let marks = this.storedMarks;\n if (!marks) {\n let $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n this.replaceRangeWith(from, to, schema.text(text, marks));\n if (!this.selection.empty)\n this.setSelection(Selection.near(this.selection.$to));\n return this;\n }\n }\n /**\n Store a metadata property in this transaction, keyed either by\n name or by plugin.\n */\n setMeta(key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this;\n }\n /**\n Retrieve a metadata property for a given name or plugin.\n */\n getMeta(key) {\n return this.meta[typeof key == \"string\" ? key : key.key];\n }\n /**\n Returns true if this transaction doesn't contain any metadata,\n and can thus safely be extended.\n */\n get isGeneric() {\n for (let _ in this.meta)\n return false;\n return true;\n }\n /**\n Indicate that the editor should scroll the selection into view\n when updated to the state produced by this transaction.\n */\n scrollIntoView() {\n this.updated |= UPDATED_SCROLL;\n return this;\n }\n /**\n True when this transaction has had `scrollIntoView` called on it.\n */\n get scrolledIntoView() {\n return (this.updated & UPDATED_SCROLL) > 0;\n }\n}\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self);\n}\nclass FieldDesc {\n constructor(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n }\n}\nconst baseFields = [\n new FieldDesc(\"doc\", {\n init(config) { return config.doc || config.schema.topNodeType.createAndFill(); },\n apply(tr) { return tr.doc; }\n }),\n new FieldDesc(\"selection\", {\n init(config, instance) { return config.selection || Selection.atStart(instance.doc); },\n apply(tr) { return tr.selection; }\n }),\n new FieldDesc(\"storedMarks\", {\n init(config) { return config.storedMarks || null; },\n apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; }\n }),\n new FieldDesc(\"scrollToSelection\", {\n init() { return 0; },\n apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; }\n })\n];\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n constructor(schema, plugins) {\n this.schema = schema;\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n this.fields = baseFields.slice();\n if (plugins)\n plugins.forEach(plugin => {\n if (this.pluginsByKey[plugin.key])\n throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n this.plugins.push(plugin);\n this.pluginsByKey[plugin.key] = plugin;\n if (plugin.spec.state)\n this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n });\n }\n}\n/**\nThe state of a ProseMirror editor is represented by an object of\nthis type. A state is a persistent data structure—it isn't\nupdated, but rather a new state value is computed from an old one\nusing the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method.\n\nA state holds a number of built-in fields, and plugins can\n[define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields.\n*/\nclass EditorState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n config) {\n this.config = config;\n }\n /**\n The schema of the state's document.\n */\n get schema() {\n return this.config.schema;\n }\n /**\n The plugins that are active in this state.\n */\n get plugins() {\n return this.config.plugins;\n }\n /**\n Apply the given transaction to produce a new state.\n */\n apply(tr) {\n return this.applyTransaction(tr).state;\n }\n /**\n @internal\n */\n filterTransaction(tr, ignore = -1) {\n for (let i = 0; i < this.config.plugins.length; i++)\n if (i != ignore) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n return false;\n }\n return true;\n }\n /**\n Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that\n returns the precise transactions that were applied (which might\n be influenced by the [transaction\n hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of\n plugins) along with the new state.\n */\n applyTransaction(rootTr) {\n if (!this.filterTransaction(rootTr))\n return { state: this, transactions: [] };\n let trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n for (;;) {\n let haveNew = false;\n for (let i = 0; i < this.config.plugins.length; i++) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.appendTransaction) {\n let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n let tr = n < trs.length &&\n plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n if (!seen) {\n seen = [];\n for (let j = 0; j < this.config.plugins.length; j++)\n seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 });\n }\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n if (seen)\n seen[i] = { state: newState, n: trs.length };\n }\n }\n if (!haveNew)\n return { state: newState, transactions: trs };\n }\n }\n /**\n @internal\n */\n applyInner(tr) {\n if (!tr.before.eq(this.doc))\n throw new RangeError(\"Applying a mismatched transaction\");\n let newInstance = new EditorState(this.config), fields = this.config.fields;\n for (let i = 0; i < fields.length; i++) {\n let field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n return newInstance;\n }\n /**\n Start a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.\n */\n get tr() { return new Transaction(this); }\n /**\n Create a new state.\n */\n static create(config) {\n let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n let instance = new EditorState($config);\n for (let i = 0; i < $config.fields.length; i++)\n instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n return instance;\n }\n /**\n Create a new state based on this one, but with an adjusted set\n of active plugins. State fields that exist in both sets of\n plugins are kept unchanged. Those that no longer exist are\n dropped, and those that are new are initialized using their\n [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new\n configuration object..\n */\n reconfigure(config) {\n let $config = new Configuration(this.schema, config.plugins);\n let fields = $config.fields, instance = new EditorState($config);\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n return instance;\n }\n /**\n Serialize this state to JSON. If you want to serialize the state\n of plugins, pass an object mapping property names to use in the\n resulting JSON object to plugin objects. The argument may also be\n a string or number, in which case it is ignored, to support the\n way `JSON.stringify` calls `toString` methods.\n */\n toJSON(pluginFields) {\n let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };\n if (this.storedMarks)\n result.storedMarks = this.storedMarks.map(m => m.toJSON());\n if (pluginFields && typeof pluginFields == 'object')\n for (let prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\")\n throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (state && state.toJSON)\n result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n }\n return result;\n }\n /**\n Deserialize a JSON representation of a state. `config` should\n have at least a `schema` field, and should contain array of\n plugins to initialize the state with. `pluginFields` can be used\n to deserialize the state of plugins, by associating plugin\n instances with the property names they use in the JSON object.\n */\n static fromJSON(config, json, pluginFields) {\n if (!json)\n throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n if (!config.schema)\n throw new RangeError(\"Required config field 'schema' missing\");\n let $config = new Configuration(config.schema, config.plugins);\n let instance = new EditorState($config);\n $config.fields.forEach(field => {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n }\n else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n }\n else if (field.name == \"storedMarks\") {\n if (json.storedMarks)\n instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n }\n else {\n if (pluginFields)\n for (let prop in pluginFields) {\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (plugin.key == field.name && state && state.fromJSON &&\n Object.prototype.hasOwnProperty.call(json, prop)) {\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return;\n }\n }\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance;\n }\n}\n\nfunction bindProps(obj, self, target) {\n for (let prop in obj) {\n let val = obj[prop];\n if (val instanceof Function)\n val = val.bind(self);\n else if (prop == \"handleDOMEvents\")\n val = bindProps(val, self, {});\n target[prop] = val;\n }\n return target;\n}\n/**\nPlugins bundle functionality that can be added to an editor.\nThey are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and\nmay influence that state and the view that contains it.\n*/\nclass Plugin {\n /**\n Create a plugin.\n */\n constructor(\n /**\n The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec).\n */\n spec) {\n this.spec = spec;\n /**\n The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin.\n */\n this.props = {};\n if (spec.props)\n bindProps(spec.props, this, this.props);\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n }\n /**\n Extract the plugin's state field from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\nconst keys = Object.create(null);\nfunction createKey(name) {\n if (name in keys)\n return name + \"$\" + ++keys[name];\n keys[name] = 0;\n return name + \"$\";\n}\n/**\nA key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way\nthat makes it possible to find them, given an editor state.\nAssigning a key does mean only one plugin of that type can be\nactive in a state.\n*/\nclass PluginKey {\n /**\n Create a plugin key.\n */\n constructor(name = \"key\") { this.key = createKey(name); }\n /**\n Get the active plugin with this key, if any, from an editor\n state.\n */\n get(state) { return state.config.pluginsByKey[this.key]; }\n /**\n Get the plugin's state from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n","import { TextSelection, NodeSelection, Selection, AllSelection } from 'prosemirror-state';\nimport { DOMSerializer, Fragment, Mark, Slice, DOMParser } from 'prosemirror-model';\nimport { dropPoint } from 'prosemirror-transform';\n\nconst domIndex = function (node) {\n for (var index = 0;; index++) {\n node = node.previousSibling;\n if (!node)\n return index;\n }\n};\nconst parentNode = function (node) {\n let parent = node.assignedSlot || node.parentNode;\n return parent && parent.nodeType == 11 ? parent.host : parent;\n};\nlet reusedRange = null;\n// Note that this will always return the same range, because DOM range\n// objects are every expensive, and keep slowing down subsequent DOM\n// updates, for some reason.\nconst textRange = function (node, from, to) {\n let range = reusedRange || (reusedRange = document.createRange());\n range.setEnd(node, to == null ? node.nodeValue.length : to);\n range.setStart(node, from || 0);\n return range;\n};\n// Scans forward and backward through DOM positions equivalent to the\n// given one to see if the two are in the same place (i.e. after a\n// text node vs at the end of that text node)\nconst isEquivalentPosition = function (node, off, targetNode, targetOff) {\n return targetNode && (scanFor(node, off, targetNode, targetOff, -1) ||\n scanFor(node, off, targetNode, targetOff, 1));\n};\nconst atomElements = /^(img|br|input|textarea|hr)$/i;\nfunction scanFor(node, off, targetNode, targetOff, dir) {\n for (;;) {\n if (node == targetNode && off == targetOff)\n return true;\n if (off == (dir < 0 ? 0 : nodeSize(node))) {\n let parent = node.parentNode;\n if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||\n node.contentEditable == \"false\")\n return false;\n off = domIndex(node) + (dir < 0 ? 0 : 1);\n node = parent;\n }\n else if (node.nodeType == 1) {\n node = node.childNodes[off + (dir < 0 ? -1 : 0)];\n if (node.contentEditable == \"false\")\n return false;\n off = dir < 0 ? nodeSize(node) : 0;\n }\n else {\n return false;\n }\n }\n}\nfunction nodeSize(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isOnEdge(node, offset, parent) {\n for (let atStart = offset == 0, atEnd = offset == nodeSize(node); atStart || atEnd;) {\n if (node == parent)\n return true;\n let index = domIndex(node);\n node = node.parentNode;\n if (!node)\n return false;\n atStart = atStart && index == 0;\n atEnd = atEnd && index == nodeSize(node);\n }\n}\nfunction hasBlockDesc(dom) {\n let desc;\n for (let cur = dom; cur; cur = cur.parentNode)\n if (desc = cur.pmViewDesc)\n break;\n return desc && desc.node && desc.node.isBlock && (desc.dom == dom || desc.contentDOM == dom);\n}\n// Work around Chrome issue https://bugs.chromium.org/p/chromium/issues/detail?id=447523\n// (isCollapsed inappropriately returns true in shadow dom)\nconst selectionCollapsed = function (domSel) {\n return domSel.focusNode && isEquivalentPosition(domSel.focusNode, domSel.focusOffset, domSel.anchorNode, domSel.anchorOffset);\n};\nfunction keyEvent(keyCode, key) {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"keydown\", true, true);\n event.keyCode = keyCode;\n event.key = event.code = key;\n return event;\n}\nfunction deepActiveElement(doc) {\n let elt = doc.activeElement;\n while (elt && elt.shadowRoot)\n elt = elt.shadowRoot.activeElement;\n return elt;\n}\n\nconst nav = typeof navigator != \"undefined\" ? navigator : null;\nconst doc = typeof document != \"undefined\" ? document : null;\nconst agent = (nav && nav.userAgent) || \"\";\nconst ie_edge = /Edge\\/(\\d+)/.exec(agent);\nconst ie_upto10 = /MSIE \\d/.exec(agent);\nconst ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(agent);\nconst ie = !!(ie_upto10 || ie_11up || ie_edge);\nconst ie_version = ie_upto10 ? document.documentMode : ie_11up ? +ie_11up[1] : ie_edge ? +ie_edge[1] : 0;\nconst gecko = !ie && /gecko\\/(\\d+)/i.test(agent);\ngecko && +(/Firefox\\/(\\d+)/.exec(agent) || [0, 0])[1];\nconst _chrome = !ie && /Chrome\\/(\\d+)/.exec(agent);\nconst chrome = !!_chrome;\nconst chrome_version = _chrome ? +_chrome[1] : 0;\nconst safari = !ie && !!nav && /Apple Computer/.test(nav.vendor);\n// Is true for both iOS and iPadOS for convenience\nconst ios = safari && (/Mobile\\/\\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);\nconst mac = ios || (nav ? /Mac/.test(nav.platform) : false);\nconst android = /Android \\d/.test(agent);\nconst webkit = !!doc && \"webkitFontSmoothing\" in doc.documentElement.style;\nconst webkit_version = webkit ? +(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;\n\nfunction windowRect(doc) {\n return { left: 0, right: doc.documentElement.clientWidth,\n top: 0, bottom: doc.documentElement.clientHeight };\n}\nfunction getSide(value, side) {\n return typeof value == \"number\" ? value : value[side];\n}\nfunction clientRect(node) {\n let rect = node.getBoundingClientRect();\n // Adjust for elements with style \"transform: scale()\"\n let scaleX = (rect.width / node.offsetWidth) || 1;\n let scaleY = (rect.height / node.offsetHeight) || 1;\n // Make sure scrollbar width isn't included in the rectangle\n return { left: rect.left, right: rect.left + node.clientWidth * scaleX,\n top: rect.top, bottom: rect.top + node.clientHeight * scaleY };\n}\nfunction scrollRectIntoView(view, rect, startDOM) {\n let scrollThreshold = view.someProp(\"scrollThreshold\") || 0, scrollMargin = view.someProp(\"scrollMargin\") || 5;\n let doc = view.dom.ownerDocument;\n for (let parent = startDOM || view.dom;; parent = parentNode(parent)) {\n if (!parent)\n break;\n if (parent.nodeType != 1)\n continue;\n let elt = parent;\n let atTop = elt == doc.body;\n let bounding = atTop ? windowRect(doc) : clientRect(elt);\n let moveX = 0, moveY = 0;\n if (rect.top < bounding.top + getSide(scrollThreshold, \"top\"))\n moveY = -(bounding.top - rect.top + getSide(scrollMargin, \"top\"));\n else if (rect.bottom > bounding.bottom - getSide(scrollThreshold, \"bottom\"))\n moveY = rect.bottom - bounding.bottom + getSide(scrollMargin, \"bottom\");\n if (rect.left < bounding.left + getSide(scrollThreshold, \"left\"))\n moveX = -(bounding.left - rect.left + getSide(scrollMargin, \"left\"));\n else if (rect.right > bounding.right - getSide(scrollThreshold, \"right\"))\n moveX = rect.right - bounding.right + getSide(scrollMargin, \"right\");\n if (moveX || moveY) {\n if (atTop) {\n doc.defaultView.scrollBy(moveX, moveY);\n }\n else {\n let startX = elt.scrollLeft, startY = elt.scrollTop;\n if (moveY)\n elt.scrollTop += moveY;\n if (moveX)\n elt.scrollLeft += moveX;\n let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;\n rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };\n }\n }\n if (atTop)\n break;\n }\n}\n// Store the scroll position of the editor's parent nodes, along with\n// the top position of an element near the top of the editor, which\n// will be used to make sure the visible viewport remains stable even\n// when the size of the content above changes.\nfunction storeScrollPos(view) {\n let rect = view.dom.getBoundingClientRect(), startY = Math.max(0, rect.top);\n let refDOM, refTop;\n for (let x = (rect.left + rect.right) / 2, y = startY + 1; y < Math.min(innerHeight, rect.bottom); y += 5) {\n let dom = view.root.elementFromPoint(x, y);\n if (!dom || dom == view.dom || !view.dom.contains(dom))\n continue;\n let localRect = dom.getBoundingClientRect();\n if (localRect.top >= startY - 20) {\n refDOM = dom;\n refTop = localRect.top;\n break;\n }\n }\n return { refDOM: refDOM, refTop: refTop, stack: scrollStack(view.dom) };\n}\nfunction scrollStack(dom) {\n let stack = [], doc = dom.ownerDocument;\n for (let cur = dom; cur; cur = parentNode(cur)) {\n stack.push({ dom: cur, top: cur.scrollTop, left: cur.scrollLeft });\n if (dom == doc)\n break;\n }\n return stack;\n}\n// Reset the scroll position of the editor's parent nodes to that what\n// it was before, when storeScrollPos was called.\nfunction resetScrollPos({ refDOM, refTop, stack }) {\n let newRefTop = refDOM ? refDOM.getBoundingClientRect().top : 0;\n restoreScrollStack(stack, newRefTop == 0 ? 0 : newRefTop - refTop);\n}\nfunction restoreScrollStack(stack, dTop) {\n for (let i = 0; i < stack.length; i++) {\n let { dom, top, left } = stack[i];\n if (dom.scrollTop != top + dTop)\n dom.scrollTop = top + dTop;\n if (dom.scrollLeft != left)\n dom.scrollLeft = left;\n }\n}\nlet preventScrollSupported = null;\n// Feature-detects support for .focus({preventScroll: true}), and uses\n// a fallback kludge when not supported.\nfunction focusPreventScroll(dom) {\n if (dom.setActive)\n return dom.setActive(); // in IE\n if (preventScrollSupported)\n return dom.focus(preventScrollSupported);\n let stored = scrollStack(dom);\n dom.focus(preventScrollSupported == null ? {\n get preventScroll() {\n preventScrollSupported = { preventScroll: true };\n return true;\n }\n } : undefined);\n if (!preventScrollSupported) {\n preventScrollSupported = false;\n restoreScrollStack(stored, 0);\n }\n}\nfunction findOffsetInNode(node, coords) {\n let closest, dxClosest = 2e8, coordsClosest, offset = 0;\n let rowBot = coords.top, rowTop = coords.top;\n for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {\n let rects;\n if (child.nodeType == 1)\n rects = child.getClientRects();\n else if (child.nodeType == 3)\n rects = textRange(child).getClientRects();\n else\n continue;\n for (let i = 0; i < rects.length; i++) {\n let rect = rects[i];\n if (rect.top <= rowBot && rect.bottom >= rowTop) {\n rowBot = Math.max(rect.bottom, rowBot);\n rowTop = Math.min(rect.top, rowTop);\n let dx = rect.left > coords.left ? rect.left - coords.left\n : rect.right < coords.left ? coords.left - rect.right : 0;\n if (dx < dxClosest) {\n closest = child;\n dxClosest = dx;\n coordsClosest = dx && closest.nodeType == 3 ? {\n left: rect.right < coords.left ? rect.right : rect.left,\n top: coords.top\n } : coords;\n if (child.nodeType == 1 && dx)\n offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);\n continue;\n }\n }\n if (!closest && (coords.left >= rect.right && coords.top >= rect.top ||\n coords.left >= rect.left && coords.top >= rect.bottom))\n offset = childIndex + 1;\n }\n }\n if (closest && closest.nodeType == 3)\n return findOffsetInText(closest, coordsClosest);\n if (!closest || (dxClosest && closest.nodeType == 1))\n return { node, offset };\n return findOffsetInNode(closest, coordsClosest);\n}\nfunction findOffsetInText(node, coords) {\n let len = node.nodeValue.length;\n let range = document.createRange();\n for (let i = 0; i < len; i++) {\n range.setEnd(node, i + 1);\n range.setStart(node, i);\n let rect = singleRect(range, 1);\n if (rect.top == rect.bottom)\n continue;\n if (inRect(coords, rect))\n return { node, offset: i + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0) };\n }\n return { node, offset: 0 };\n}\nfunction inRect(coords, rect) {\n return coords.left >= rect.left - 1 && coords.left <= rect.right + 1 &&\n coords.top >= rect.top - 1 && coords.top <= rect.bottom + 1;\n}\nfunction targetKludge(dom, coords) {\n let parent = dom.parentNode;\n if (parent && /^li$/i.test(parent.nodeName) && coords.left < dom.getBoundingClientRect().left)\n return parent;\n return dom;\n}\nfunction posFromElement(view, elt, coords) {\n let { node, offset } = findOffsetInNode(elt, coords), bias = -1;\n if (node.nodeType == 1 && !node.firstChild) {\n let rect = node.getBoundingClientRect();\n bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;\n }\n return view.docView.posFromDOM(node, offset, bias);\n}\nfunction posFromCaret(view, node, offset, coords) {\n // Browser (in caretPosition/RangeFromPoint) will agressively\n // normalize towards nearby inline nodes. Since we are interested in\n // positions between block nodes too, we first walk up the hierarchy\n // of nodes to see if there are block nodes that the coordinates\n // fall outside of. If so, we take the position before/after that\n // block. If not, we call `posFromDOM` on the raw node/offset.\n let outside = -1;\n for (let cur = node;;) {\n if (cur == view.dom)\n break;\n let desc = view.docView.nearestDesc(cur, true);\n if (!desc)\n return null;\n if (desc.node.isBlock && desc.parent) {\n let rect = desc.dom.getBoundingClientRect();\n if (rect.left > coords.left || rect.top > coords.top)\n outside = desc.posBefore;\n else if (rect.right < coords.left || rect.bottom < coords.top)\n outside = desc.posAfter;\n else\n break;\n }\n cur = desc.dom.parentNode;\n }\n return outside > -1 ? outside : view.docView.posFromDOM(node, offset, 1);\n}\nfunction elementFromPoint(element, coords, box) {\n let len = element.childNodes.length;\n if (len && box.top < box.bottom) {\n for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {\n let child = element.childNodes[i];\n if (child.nodeType == 1) {\n let rects = child.getClientRects();\n for (let j = 0; j < rects.length; j++) {\n let rect = rects[j];\n if (inRect(coords, rect))\n return elementFromPoint(child, coords, rect);\n }\n }\n if ((i = (i + 1) % len) == startI)\n break;\n }\n }\n return element;\n}\n// Given an x,y position on the editor, get the position in the document.\nfunction posAtCoords(view, coords) {\n let doc = view.dom.ownerDocument, node, offset = 0;\n if (doc.caretPositionFromPoint) {\n try { // Firefox throws for this call in hard-to-predict circumstances (#994)\n let pos = doc.caretPositionFromPoint(coords.left, coords.top);\n if (pos)\n ({ offsetNode: node, offset } = pos);\n }\n catch (_) { }\n }\n if (!node && doc.caretRangeFromPoint) {\n let range = doc.caretRangeFromPoint(coords.left, coords.top);\n if (range)\n ({ startContainer: node, startOffset: offset } = range);\n }\n let elt = (view.root.elementFromPoint ? view.root : doc)\n .elementFromPoint(coords.left, coords.top);\n let pos;\n if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {\n let box = view.dom.getBoundingClientRect();\n if (!inRect(coords, box))\n return null;\n elt = elementFromPoint(view.dom, coords, box);\n if (!elt)\n return null;\n }\n // Safari's caretRangeFromPoint returns nonsense when on a draggable element\n if (safari) {\n for (let p = elt; node && p; p = parentNode(p))\n if (p.draggable)\n node = undefined;\n }\n elt = targetKludge(elt, coords);\n if (node) {\n if (gecko && node.nodeType == 1) {\n // Firefox will sometimes return offsets into <input> nodes, which\n // have no actual children, from caretPositionFromPoint (#953)\n offset = Math.min(offset, node.childNodes.length);\n // It'll also move the returned position before image nodes,\n // even if those are behind it.\n if (offset < node.childNodes.length) {\n let next = node.childNodes[offset], box;\n if (next.nodeName == \"IMG\" && (box = next.getBoundingClientRect()).right <= coords.left &&\n box.bottom > coords.top)\n offset++;\n }\n }\n // Suspiciously specific kludge to work around caret*FromPoint\n // never returning a position at the end of the document\n if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&\n coords.top > node.lastChild.getBoundingClientRect().bottom)\n pos = view.state.doc.content.size;\n // Ignore positions directly after a BR, since caret*FromPoint\n // 'round up' positions that would be more accurately placed\n // before the BR node.\n else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != \"BR\")\n pos = posFromCaret(view, node, offset, coords);\n }\n if (pos == null)\n pos = posFromElement(view, elt, coords);\n let desc = view.docView.nearestDesc(elt, true);\n return { pos, inside: desc ? desc.posAtStart - desc.border : -1 };\n}\nfunction singleRect(target, bias) {\n let rects = target.getClientRects();\n return !rects.length ? target.getBoundingClientRect() : rects[bias < 0 ? 0 : rects.length - 1];\n}\nconst BIDI = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n// Given a position in the document model, get a bounding box of the\n// character at that position, relative to the window.\nfunction coordsAtPos(view, pos, side) {\n let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);\n let supportEmptyRange = webkit || gecko;\n if (node.nodeType == 3) {\n // These browsers support querying empty text ranges. Prefer that in\n // bidi context or when at the end of a node.\n if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {\n let rect = singleRect(textRange(node, offset, offset), side);\n // Firefox returns bad results (the position before the space)\n // when querying a position directly after line-broken\n // whitespace. Detect this situation and and kludge around it\n if (gecko && offset && /\\s/.test(node.nodeValue[offset - 1]) && offset < node.nodeValue.length) {\n let rectBefore = singleRect(textRange(node, offset - 1, offset - 1), -1);\n if (rectBefore.top == rect.top) {\n let rectAfter = singleRect(textRange(node, offset, offset + 1), -1);\n if (rectAfter.top != rect.top)\n return flattenV(rectAfter, rectAfter.left < rectBefore.left);\n }\n }\n return rect;\n }\n else {\n let from = offset, to = offset, takeSide = side < 0 ? 1 : -1;\n if (side < 0 && !offset) {\n to++;\n takeSide = -1;\n }\n else if (side >= 0 && offset == node.nodeValue.length) {\n from--;\n takeSide = 1;\n }\n else if (side < 0) {\n from--;\n }\n else {\n to++;\n }\n return flattenV(singleRect(textRange(node, from, to), 1), takeSide < 0);\n }\n }\n let $dom = view.state.doc.resolve(pos - (atom || 0));\n // Return a horizontal line in block context\n if (!$dom.parent.inlineContent) {\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n if (before.nodeType == 1)\n return flattenH(before.getBoundingClientRect(), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n if (after.nodeType == 1)\n return flattenH(after.getBoundingClientRect(), true);\n }\n return flattenH(node.getBoundingClientRect(), side >= 0);\n }\n // Inline, not in text node (this is not Bidi-safe)\n if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {\n let before = node.childNodes[offset - 1];\n let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))\n // BR nodes tend to only return the rectangle before them.\n // Only use them if they are the last element in their parent\n : before.nodeType == 1 && (before.nodeName != \"BR\" || !before.nextSibling) ? before : null;\n if (target)\n return flattenV(singleRect(target, 1), false);\n }\n if (atom == null && offset < nodeSize(node)) {\n let after = node.childNodes[offset];\n while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)\n after = after.nextSibling;\n let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))\n : after.nodeType == 1 ? after : null;\n if (target)\n return flattenV(singleRect(target, -1), true);\n }\n // All else failed, just try to get a rectangle for the target node\n return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);\n}\nfunction flattenV(rect, left) {\n if (rect.width == 0)\n return rect;\n let x = left ? rect.left : rect.right;\n return { top: rect.top, bottom: rect.bottom, left: x, right: x };\n}\nfunction flattenH(rect, top) {\n if (rect.height == 0)\n return rect;\n let y = top ? rect.top : rect.bottom;\n return { top: y, bottom: y, left: rect.left, right: rect.right };\n}\nfunction withFlushedState(view, state, f) {\n let viewState = view.state, active = view.root.activeElement;\n if (viewState != state)\n view.updateState(state);\n if (active != view.dom)\n view.focus();\n try {\n return f();\n }\n finally {\n if (viewState != state)\n view.updateState(viewState);\n if (active != view.dom && active)\n active.focus();\n }\n}\n// Whether vertical position motion in a given direction\n// from a position would leave a text block.\nfunction endOfTextblockVertical(view, state, dir) {\n let sel = state.selection;\n let $pos = dir == \"up\" ? sel.$from : sel.$to;\n return withFlushedState(view, state, () => {\n let { node: dom } = view.docView.domFromPos($pos.pos, dir == \"up\" ? -1 : 1);\n for (;;) {\n let nearest = view.docView.nearestDesc(dom, true);\n if (!nearest)\n break;\n if (nearest.node.isBlock) {\n dom = nearest.dom;\n break;\n }\n dom = nearest.dom.parentNode;\n }\n let coords = coordsAtPos(view, $pos.pos, 1);\n for (let child = dom.firstChild; child; child = child.nextSibling) {\n let boxes;\n if (child.nodeType == 1)\n boxes = child.getClientRects();\n else if (child.nodeType == 3)\n boxes = textRange(child, 0, child.nodeValue.length).getClientRects();\n else\n continue;\n for (let i = 0; i < boxes.length; i++) {\n let box = boxes[i];\n if (box.bottom > box.top + 1 &&\n (dir == \"up\" ? coords.top - box.top > (box.bottom - coords.top) * 2\n : box.bottom - coords.bottom > (coords.bottom - box.top) * 2))\n return false;\n }\n }\n return true;\n });\n}\nconst maybeRTL = /[\\u0590-\\u08ac]/;\nfunction endOfTextblockHorizontal(view, state, dir) {\n let { $head } = state.selection;\n if (!$head.parent.isTextblock)\n return false;\n let offset = $head.parentOffset, atStart = !offset, atEnd = offset == $head.parent.content.size;\n let sel = view.domSelection();\n // If the textblock is all LTR, or the browser doesn't support\n // Selection.modify (Edge), fall back to a primitive approach\n if (!maybeRTL.test($head.parent.textContent) || !sel.modify)\n return dir == \"left\" || dir == \"backward\" ? atStart : atEnd;\n return withFlushedState(view, state, () => {\n // This is a huge hack, but appears to be the best we can\n // currently do: use `Selection.modify` to move the selection by\n // one character, and see if that moves the cursor out of the\n // textblock (or doesn't move it at all, when at the start/end of\n // the document).\n let { focusNode: oldNode, focusOffset: oldOff, anchorNode, anchorOffset } = view.domSelectionRange();\n let oldBidiLevel = sel.caretBidiLevel // Only for Firefox\n ;\n sel.modify(\"move\", dir, \"character\");\n let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;\n let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();\n let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||\n (oldNode == newNode && oldOff == newOff);\n // Restore the previous selection\n try {\n sel.collapse(anchorNode, anchorOffset);\n if (oldNode && (oldNode != anchorNode || oldOff != anchorOffset) && sel.extend)\n sel.extend(oldNode, oldOff);\n }\n catch (_) { }\n if (oldBidiLevel != null)\n sel.caretBidiLevel = oldBidiLevel;\n return result;\n });\n}\nlet cachedState = null;\nlet cachedDir = null;\nlet cachedResult = false;\nfunction endOfTextblock(view, state, dir) {\n if (cachedState == state && cachedDir == dir)\n return cachedResult;\n cachedState = state;\n cachedDir = dir;\n return cachedResult = dir == \"up\" || dir == \"down\"\n ? endOfTextblockVertical(view, state, dir)\n : endOfTextblockHorizontal(view, state, dir);\n}\n\n// View descriptions are data structures that describe the DOM that is\n// used to represent the editor's content. They are used for:\n//\n// - Incremental redrawing when the document changes\n//\n// - Figuring out what part of the document a given DOM position\n// corresponds to\n//\n// - Wiring in custom implementations of the editing interface for a\n// given node\n//\n// They form a doubly-linked mutable tree, starting at `view.docView`.\nconst NOT_DIRTY = 0, CHILD_DIRTY = 1, CONTENT_DIRTY = 2, NODE_DIRTY = 3;\n// Superclass for the various kinds of descriptions. Defines their\n// basic structure and shared methods.\nclass ViewDesc {\n constructor(parent, children, dom, \n // This is the node that holds the child views. It may be null for\n // descs that don't have children.\n contentDOM) {\n this.parent = parent;\n this.children = children;\n this.dom = dom;\n this.contentDOM = contentDOM;\n this.dirty = NOT_DIRTY;\n // An expando property on the DOM node provides a link back to its\n // description.\n dom.pmViewDesc = this;\n }\n // Used to check whether a given description corresponds to a\n // widget/mark/node.\n matchesWidget(widget) { return false; }\n matchesMark(mark) { return false; }\n matchesNode(node, outerDeco, innerDeco) { return false; }\n matchesHack(nodeName) { return false; }\n // When parsing in-editor content (in domchange.js), we allow\n // descriptions to determine the parse rules that should be used to\n // parse them.\n parseRule() { return null; }\n // Used by the editor's event handler to ignore events that come\n // from certain descs.\n stopEvent(event) { return false; }\n // The size of the content represented by this desc.\n get size() {\n let size = 0;\n for (let i = 0; i < this.children.length; i++)\n size += this.children[i].size;\n return size;\n }\n // For block nodes, this represents the space taken up by their\n // start/end tokens.\n get border() { return 0; }\n destroy() {\n this.parent = undefined;\n if (this.dom.pmViewDesc == this)\n this.dom.pmViewDesc = undefined;\n for (let i = 0; i < this.children.length; i++)\n this.children[i].destroy();\n }\n posBeforeChild(child) {\n for (let i = 0, pos = this.posAtStart;; i++) {\n let cur = this.children[i];\n if (cur == child)\n return pos;\n pos += cur.size;\n }\n }\n get posBefore() {\n return this.parent.posBeforeChild(this);\n }\n get posAtStart() {\n return this.parent ? this.parent.posBeforeChild(this) + this.border : 0;\n }\n get posAfter() {\n return this.posBefore + this.size;\n }\n get posAtEnd() {\n return this.posAtStart + this.size - 2 * this.border;\n }\n localPosFromDOM(dom, offset, bias) {\n // If the DOM position is in the content, use the child desc after\n // it to figure out a position.\n if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {\n if (bias < 0) {\n let domBefore, desc;\n if (dom == this.contentDOM) {\n domBefore = dom.childNodes[offset - 1];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domBefore = dom.previousSibling;\n }\n while (domBefore && !((desc = domBefore.pmViewDesc) && desc.parent == this))\n domBefore = domBefore.previousSibling;\n return domBefore ? this.posBeforeChild(desc) + desc.size : this.posAtStart;\n }\n else {\n let domAfter, desc;\n if (dom == this.contentDOM) {\n domAfter = dom.childNodes[offset];\n }\n else {\n while (dom.parentNode != this.contentDOM)\n dom = dom.parentNode;\n domAfter = dom.nextSibling;\n }\n while (domAfter && !((desc = domAfter.pmViewDesc) && desc.parent == this))\n domAfter = domAfter.nextSibling;\n return domAfter ? this.posBeforeChild(desc) : this.posAtEnd;\n }\n }\n // Otherwise, use various heuristics, falling back on the bias\n // parameter, to determine whether to return the position at the\n // start or at the end of this view desc.\n let atEnd;\n if (dom == this.dom && this.contentDOM) {\n atEnd = offset > domIndex(this.contentDOM);\n }\n else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {\n atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;\n }\n else if (this.dom.firstChild) {\n if (offset == 0)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = false;\n break;\n }\n if (search.previousSibling)\n break;\n }\n if (atEnd == null && offset == dom.childNodes.length)\n for (let search = dom;; search = search.parentNode) {\n if (search == this.dom) {\n atEnd = true;\n break;\n }\n if (search.nextSibling)\n break;\n }\n }\n return (atEnd == null ? bias > 0 : atEnd) ? this.posAtEnd : this.posAtStart;\n }\n // Scan up the dom finding the first desc that is a descendant of\n // this one.\n nearestDesc(dom, onlyNodes = false) {\n for (let first = true, cur = dom; cur; cur = cur.parentNode) {\n let desc = this.getDesc(cur), nodeDOM;\n if (desc && (!onlyNodes || desc.node)) {\n // If dom is outside of this desc's nodeDOM, don't count it.\n if (first && (nodeDOM = desc.nodeDOM) &&\n !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))\n first = false;\n else\n return desc;\n }\n }\n }\n getDesc(dom) {\n let desc = dom.pmViewDesc;\n for (let cur = desc; cur; cur = cur.parent)\n if (cur == this)\n return desc;\n }\n posFromDOM(dom, offset, bias) {\n for (let scan = dom; scan; scan = scan.parentNode) {\n let desc = this.getDesc(scan);\n if (desc)\n return desc.localPosFromDOM(dom, offset, bias);\n }\n return -1;\n }\n // Find the desc for the node after the given pos, if any. (When a\n // parent node overrode rendering, there might not be one.)\n descAt(pos) {\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == pos && end != offset) {\n while (!child.border && child.children.length)\n child = child.children[0];\n return child;\n }\n if (pos < end)\n return child.descAt(pos - offset - child.border);\n offset = end;\n }\n }\n domFromPos(pos, side) {\n if (!this.contentDOM)\n return { node: this.dom, offset: 0, atom: pos + 1 };\n // First find the position in the child array\n let i = 0, offset = 0;\n for (let curPos = 0; i < this.children.length; i++) {\n let child = this.children[i], end = curPos + child.size;\n if (end > pos || child instanceof TrailingHackViewDesc) {\n offset = pos - curPos;\n break;\n }\n curPos = end;\n }\n // If this points into the middle of a child, call through\n if (offset)\n return this.children[i].domFromPos(offset - this.children[i].border, side);\n // Go back if there were any zero-length widgets with side >= 0 before this point\n for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }\n // Scan towards the first useable node\n if (side <= 0) {\n let prev, enter = true;\n for (;; i--, enter = false) {\n prev = i ? this.children[i - 1] : null;\n if (!prev || prev.dom.parentNode == this.contentDOM)\n break;\n }\n if (prev && side && enter && !prev.border && !prev.domAtom)\n return prev.domFromPos(prev.size, side);\n return { node: this.contentDOM, offset: prev ? domIndex(prev.dom) + 1 : 0 };\n }\n else {\n let next, enter = true;\n for (;; i++, enter = false) {\n next = i < this.children.length ? this.children[i] : null;\n if (!next || next.dom.parentNode == this.contentDOM)\n break;\n }\n if (next && enter && !next.border && !next.domAtom)\n return next.domFromPos(0, side);\n return { node: this.contentDOM, offset: next ? domIndex(next.dom) : this.contentDOM.childNodes.length };\n }\n }\n // Used to find a DOM range in a single parent for a given changed\n // range.\n parseRange(from, to, base = 0) {\n if (this.children.length == 0)\n return { node: this.contentDOM, from, to, fromOffset: 0, toOffset: this.contentDOM.childNodes.length };\n let fromOffset = -1, toOffset = -1;\n for (let offset = base, i = 0;; i++) {\n let child = this.children[i], end = offset + child.size;\n if (fromOffset == -1 && from <= end) {\n let childBase = offset + child.border;\n // FIXME maybe descend mark views to parse a narrower range?\n if (from >= childBase && to <= end - child.border && child.node &&\n child.contentDOM && this.contentDOM.contains(child.contentDOM))\n return child.parseRange(from, to, childBase);\n from = offset;\n for (let j = i; j > 0; j--) {\n let prev = this.children[j - 1];\n if (prev.size && prev.dom.parentNode == this.contentDOM && !prev.emptyChildAt(1)) {\n fromOffset = domIndex(prev.dom) + 1;\n break;\n }\n from -= prev.size;\n }\n if (fromOffset == -1)\n fromOffset = 0;\n }\n if (fromOffset > -1 && (end > to || i == this.children.length - 1)) {\n to = end;\n for (let j = i + 1; j < this.children.length; j++) {\n let next = this.children[j];\n if (next.size && next.dom.parentNode == this.contentDOM && !next.emptyChildAt(-1)) {\n toOffset = domIndex(next.dom);\n break;\n }\n to += next.size;\n }\n if (toOffset == -1)\n toOffset = this.contentDOM.childNodes.length;\n break;\n }\n offset = end;\n }\n return { node: this.contentDOM, from, to, fromOffset, toOffset };\n }\n emptyChildAt(side) {\n if (this.border || !this.contentDOM || !this.children.length)\n return false;\n let child = this.children[side < 0 ? 0 : this.children.length - 1];\n return child.size == 0 || child.emptyChildAt(side);\n }\n domAfterPos(pos) {\n let { node, offset } = this.domFromPos(pos, 0);\n if (node.nodeType != 1 || offset == node.childNodes.length)\n throw new RangeError(\"No node after pos \" + pos);\n return node.childNodes[offset];\n }\n // View descs are responsible for setting any selection that falls\n // entirely inside of them, so that custom implementations can do\n // custom things with the selection. Note that this falls apart when\n // a selection starts in such a node and ends in another, in which\n // case we just use whatever domFromPos produces as a best effort.\n setSelection(anchor, head, root, force = false) {\n // If the selection falls entirely in a child, give it to that child\n let from = Math.min(anchor, head), to = Math.max(anchor, head);\n for (let i = 0, offset = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (from > offset && to < end)\n return child.setSelection(anchor - offset - child.border, head - offset - child.border, root, force);\n offset = end;\n }\n let anchorDOM = this.domFromPos(anchor, anchor ? -1 : 1);\n let headDOM = head == anchor ? anchorDOM : this.domFromPos(head, head ? -1 : 1);\n let domSel = root.getSelection();\n let brKludge = false;\n // On Firefox, using Selection.collapse to put the cursor after a\n // BR node for some reason doesn't always work (#1073). On Safari,\n // the cursor sometimes inexplicable visually lags behind its\n // reported position in such situations (#1092).\n if ((gecko || safari) && anchor == head) {\n let { node, offset } = anchorDOM;\n if (node.nodeType == 3) {\n brKludge = !!(offset && node.nodeValue[offset - 1] == \"\\n\");\n // Issue #1128\n if (brKludge && offset == node.nodeValue.length) {\n for (let scan = node, after; scan; scan = scan.parentNode) {\n if (after = scan.nextSibling) {\n if (after.nodeName == \"BR\")\n anchorDOM = headDOM = { node: after.parentNode, offset: domIndex(after) + 1 };\n break;\n }\n let desc = scan.pmViewDesc;\n if (desc && desc.node && desc.node.isBlock)\n break;\n }\n }\n }\n else {\n let prev = node.childNodes[offset - 1];\n brKludge = prev && (prev.nodeName == \"BR\" || prev.contentEditable == \"false\");\n }\n }\n // Firefox can act strangely when the selection is in front of an\n // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536\n if (gecko && domSel.focusNode && domSel.focusNode != headDOM.node && domSel.focusNode.nodeType == 1) {\n let after = domSel.focusNode.childNodes[domSel.focusOffset];\n if (after && after.contentEditable == \"false\")\n force = true;\n }\n if (!(force || brKludge && safari) &&\n isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset) &&\n isEquivalentPosition(headDOM.node, headDOM.offset, domSel.focusNode, domSel.focusOffset))\n return;\n // Selection.extend can be used to create an 'inverted' selection\n // (one where the focus is before the anchor), but not all\n // browsers support it yet.\n let domSelExtended = false;\n if ((domSel.extend || anchor == head) && !brKludge) {\n domSel.collapse(anchorDOM.node, anchorDOM.offset);\n try {\n if (anchor != head)\n domSel.extend(headDOM.node, headDOM.offset);\n domSelExtended = true;\n }\n catch (_) {\n // In some cases with Chrome the selection is empty after calling\n // collapse, even when it should be valid. This appears to be a bug, but\n // it is difficult to isolate. If this happens fallback to the old path\n // without using extend.\n // Similarly, this could crash on Safari if the editor is hidden, and\n // there was no selection.\n }\n }\n if (!domSelExtended) {\n if (anchor > head) {\n let tmp = anchorDOM;\n anchorDOM = headDOM;\n headDOM = tmp;\n }\n let range = document.createRange();\n range.setEnd(headDOM.node, headDOM.offset);\n range.setStart(anchorDOM.node, anchorDOM.offset);\n domSel.removeAllRanges();\n domSel.addRange(range);\n }\n }\n ignoreMutation(mutation) {\n return !this.contentDOM && mutation.type != \"selection\";\n }\n get contentLost() {\n return this.contentDOM && this.contentDOM != this.dom && !this.dom.contains(this.contentDOM);\n }\n // Remove a subtree of the element tree that has been touched\n // by a DOM change, so that the next update will redraw it.\n markDirty(from, to) {\n for (let offset = 0, i = 0; i < this.children.length; i++) {\n let child = this.children[i], end = offset + child.size;\n if (offset == end ? from <= end && to >= offset : from < end && to > offset) {\n let startInside = offset + child.border, endInside = end - child.border;\n if (from >= startInside && to <= endInside) {\n this.dirty = from == offset || to == end ? CONTENT_DIRTY : CHILD_DIRTY;\n if (from == startInside && to == endInside &&\n (child.contentLost || child.dom.parentNode != this.contentDOM))\n child.dirty = NODE_DIRTY;\n else\n child.markDirty(from - startInside, to - startInside);\n return;\n }\n else {\n child.dirty = child.dom == child.contentDOM && child.dom.parentNode == this.contentDOM && !child.children.length\n ? CONTENT_DIRTY : NODE_DIRTY;\n }\n }\n offset = end;\n }\n this.dirty = CONTENT_DIRTY;\n }\n markParentsDirty() {\n let level = 1;\n for (let node = this.parent; node; node = node.parent, level++) {\n let dirty = level == 1 ? CONTENT_DIRTY : CHILD_DIRTY;\n if (node.dirty < dirty)\n node.dirty = dirty;\n }\n }\n get domAtom() { return false; }\n get ignoreForCoords() { return false; }\n}\n// A widget desc represents a widget decoration, which is a DOM node\n// drawn between the document nodes.\nclass WidgetViewDesc extends ViewDesc {\n constructor(parent, widget, view, pos) {\n let self, dom = widget.type.toDOM;\n if (typeof dom == \"function\")\n dom = dom(view, () => {\n if (!self)\n return pos;\n if (self.parent)\n return self.parent.posBeforeChild(self);\n });\n if (!widget.type.spec.raw) {\n if (dom.nodeType != 1) {\n let wrap = document.createElement(\"span\");\n wrap.appendChild(dom);\n dom = wrap;\n }\n dom.contentEditable = \"false\";\n dom.classList.add(\"ProseMirror-widget\");\n }\n super(parent, [], dom, null);\n this.widget = widget;\n this.widget = widget;\n self = this;\n }\n matchesWidget(widget) {\n return this.dirty == NOT_DIRTY && widget.type.eq(this.widget.type);\n }\n parseRule() { return { ignore: true }; }\n stopEvent(event) {\n let stop = this.widget.spec.stopEvent;\n return stop ? stop(event) : false;\n }\n ignoreMutation(mutation) {\n return mutation.type != \"selection\" || this.widget.spec.ignoreSelection;\n }\n destroy() {\n this.widget.type.destroy(this.dom);\n super.destroy();\n }\n get domAtom() { return true; }\n get side() { return this.widget.type.side; }\n}\nclass CompositionViewDesc extends ViewDesc {\n constructor(parent, dom, textDOM, text) {\n super(parent, [], dom, null);\n this.textDOM = textDOM;\n this.text = text;\n }\n get size() { return this.text.length; }\n localPosFromDOM(dom, offset) {\n if (dom != this.textDOM)\n return this.posAtStart + (offset ? this.size : 0);\n return this.posAtStart + offset;\n }\n domFromPos(pos) {\n return { node: this.textDOM, offset: pos };\n }\n ignoreMutation(mut) {\n return mut.type === 'characterData' && mut.target.nodeValue == mut.oldValue;\n }\n}\n// A mark desc represents a mark. May have multiple children,\n// depending on how the mark is split. Note that marks are drawn using\n// a fixed nesting order, for simplicity and predictability, so in\n// some cases they will be split more often than would appear\n// necessary.\nclass MarkViewDesc extends ViewDesc {\n constructor(parent, mark, dom, contentDOM) {\n super(parent, [], dom, contentDOM);\n this.mark = mark;\n }\n static create(parent, mark, inline, view) {\n let custom = view.nodeViews[mark.type.name];\n let spec = custom && custom(mark, view, inline);\n if (!spec || !spec.dom)\n spec = DOMSerializer.renderSpec(document, mark.type.spec.toDOM(mark, inline));\n return new MarkViewDesc(parent, mark, spec.dom, spec.contentDOM || spec.dom);\n }\n parseRule() {\n if ((this.dirty & NODE_DIRTY) || this.mark.type.spec.reparseInView)\n return null;\n return { mark: this.mark.type.name, attrs: this.mark.attrs, contentElement: this.contentDOM || undefined };\n }\n matchesMark(mark) { return this.dirty != NODE_DIRTY && this.mark.eq(mark); }\n markDirty(from, to) {\n super.markDirty(from, to);\n // Move dirty info to nearest node view\n if (this.dirty != NOT_DIRTY) {\n let parent = this.parent;\n while (!parent.node)\n parent = parent.parent;\n if (parent.dirty < this.dirty)\n parent.dirty = this.dirty;\n this.dirty = NOT_DIRTY;\n }\n }\n slice(from, to, view) {\n let copy = MarkViewDesc.create(this.parent, this.mark, true, view);\n let nodes = this.children, size = this.size;\n if (to < size)\n nodes = replaceNodes(nodes, to, size, view);\n if (from > 0)\n nodes = replaceNodes(nodes, 0, from, view);\n for (let i = 0; i < nodes.length; i++)\n nodes[i].parent = copy;\n copy.children = nodes;\n return copy;\n }\n}\n// Node view descs are the main, most common type of view desc, and\n// correspond to an actual node in the document. Unlike mark descs,\n// they populate their child array themselves.\nclass NodeViewDesc extends ViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {\n super(parent, [], dom, contentDOM);\n this.node = node;\n this.outerDeco = outerDeco;\n this.innerDeco = innerDeco;\n this.nodeDOM = nodeDOM;\n if (contentDOM)\n this.updateChildren(view, pos);\n }\n // By default, a node is rendered using the `toDOM` method from the\n // node type spec. But client code can use the `nodeViews` spec to\n // supply a custom node view, which can influence various aspects of\n // the way the node works.\n //\n // (Using subclassing for this was intentionally decided against,\n // since it'd require exposing a whole slew of finicky\n // implementation details to the user code that they probably will\n // never need.)\n static create(parent, node, outerDeco, innerDeco, view, pos) {\n let custom = view.nodeViews[node.type.name], descObj;\n let spec = custom && custom(node, view, () => {\n // (This is a function that allows the custom view to find its\n // own position)\n if (!descObj)\n return pos;\n if (descObj.parent)\n return descObj.parent.posBeforeChild(descObj);\n }, outerDeco, innerDeco);\n let dom = spec && spec.dom, contentDOM = spec && spec.contentDOM;\n if (node.isText) {\n if (!dom)\n dom = document.createTextNode(node.text);\n else if (dom.nodeType != 3)\n throw new RangeError(\"Text must be rendered as a DOM text node\");\n }\n else if (!dom) {\n ({ dom, contentDOM } = DOMSerializer.renderSpec(document, node.type.spec.toDOM(node)));\n }\n if (!contentDOM && !node.isText && dom.nodeName != \"BR\") { // Chrome gets confused by <br contenteditable=false>\n if (!dom.hasAttribute(\"contenteditable\"))\n dom.contentEditable = \"false\";\n if (node.type.spec.draggable)\n dom.draggable = true;\n }\n let nodeDOM = dom;\n dom = applyOuterDeco(dom, outerDeco, node);\n if (spec)\n return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);\n else if (node.isText)\n return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);\n else\n return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);\n }\n parseRule() {\n // Experimental kludge to allow opt-in re-parsing of nodes\n if (this.node.type.spec.reparseInView)\n return null;\n // FIXME the assumption that this can always return the current\n // attrs means that if the user somehow manages to change the\n // attrs in the dom, that won't be picked up. Not entirely sure\n // whether this is a problem\n let rule = { node: this.node.type.name, attrs: this.node.attrs };\n if (this.node.type.whitespace == \"pre\")\n rule.preserveWhitespace = \"full\";\n if (!this.contentDOM) {\n rule.getContent = () => this.node.content;\n }\n else if (!this.contentLost) {\n rule.contentElement = this.contentDOM;\n }\n else {\n // Chrome likes to randomly recreate parent nodes when\n // backspacing things. When that happens, this tries to find the\n // new parent.\n for (let i = this.children.length - 1; i >= 0; i--) {\n let child = this.children[i];\n if (this.dom.contains(child.dom.parentNode)) {\n rule.contentElement = child.dom.parentNode;\n break;\n }\n }\n if (!rule.contentElement)\n rule.getContent = () => Fragment.empty;\n }\n return rule;\n }\n matchesNode(node, outerDeco, innerDeco) {\n return this.dirty == NOT_DIRTY && node.eq(this.node) &&\n sameOuterDeco(outerDeco, this.outerDeco) && innerDeco.eq(this.innerDeco);\n }\n get size() { return this.node.nodeSize; }\n get border() { return this.node.isLeaf ? 0 : 1; }\n // Syncs `this.children` to match `this.node.content` and the local\n // decorations, possibly introducing nesting for marks. Then, in a\n // separate step, syncs the DOM inside `this.contentDOM` to\n // `this.children`.\n updateChildren(view, pos) {\n let inline = this.node.inlineContent, off = pos;\n let composition = view.composing ? this.localCompositionInfo(view, pos) : null;\n let localComposition = composition && composition.pos > -1 ? composition : null;\n let compositionInChild = composition && composition.pos < 0;\n let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);\n iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {\n if (widget.spec.marks)\n updater.syncToMarks(widget.spec.marks, inline, view);\n else if (widget.type.side >= 0 && !insideNode)\n updater.syncToMarks(i == this.node.childCount ? Mark.none : this.node.child(i).marks, inline, view);\n // If the next node is a desc matching this widget, reuse it,\n // otherwise insert the widget as a new view desc.\n updater.placeWidget(widget, view, off);\n }, (child, outerDeco, innerDeco, i) => {\n // Make sure the wrapping mark descs match the node's marks.\n updater.syncToMarks(child.marks, inline, view);\n // Try several strategies for drawing this node\n let compIndex;\n if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;\n else if (compositionInChild && view.state.selection.from > off &&\n view.state.selection.to < off + child.nodeSize &&\n (compIndex = updater.findIndexWithChild(composition.node)) > -1 &&\n updater.updateNodeAt(child, outerDeco, innerDeco, compIndex, view)) ;\n else if (updater.updateNextNode(child, outerDeco, innerDeco, view, i)) ;\n else {\n // Add it as a new view\n updater.addNode(child, outerDeco, innerDeco, view, off);\n }\n off += child.nodeSize;\n });\n // Drop all remaining descs after the current position.\n updater.syncToMarks([], inline, view);\n if (this.node.isTextblock)\n updater.addTextblockHacks();\n updater.destroyRest();\n // Sync the DOM if anything changed\n if (updater.changed || this.dirty == CONTENT_DIRTY) {\n // May have to protect focused DOM from being changed if a composition is active\n if (localComposition)\n this.protectLocalComposition(view, localComposition);\n renderDescs(this.contentDOM, this.children, view);\n if (ios)\n iosHacks(this.dom);\n }\n }\n localCompositionInfo(view, pos) {\n // Only do something if both the selection and a focused text node\n // are inside of this node\n let { from, to } = view.state.selection;\n if (!(view.state.selection instanceof TextSelection) || from < pos || to > pos + this.node.content.size)\n return null;\n let sel = view.domSelectionRange();\n let textNode = nearbyTextNode(sel.focusNode, sel.focusOffset);\n if (!textNode || !this.dom.contains(textNode.parentNode))\n return null;\n if (this.node.inlineContent) {\n // Find the text in the focused node in the node, stop if it's not\n // there (may have been modified through other means, in which\n // case it should overwritten)\n let text = textNode.nodeValue;\n let textPos = findTextInFragment(this.node.content, text, from - pos, to - pos);\n return textPos < 0 ? null : { node: textNode, pos: textPos, text };\n }\n else {\n return { node: textNode, pos: -1, text: \"\" };\n }\n }\n protectLocalComposition(view, { node, pos, text }) {\n // The node is already part of a local view desc, leave it there\n if (this.getDesc(node))\n return;\n // Create a composition view for the orphaned nodes\n let topNode = node;\n for (;; topNode = topNode.parentNode) {\n if (topNode.parentNode == this.contentDOM)\n break;\n while (topNode.previousSibling)\n topNode.parentNode.removeChild(topNode.previousSibling);\n while (topNode.nextSibling)\n topNode.parentNode.removeChild(topNode.nextSibling);\n if (topNode.pmViewDesc)\n topNode.pmViewDesc = undefined;\n }\n let desc = new CompositionViewDesc(this, topNode, node, text);\n view.input.compositionNodes.push(desc);\n // Patch up this.children to contain the composition view\n this.children = replaceNodes(this.children, pos, pos + text.length, view, desc);\n }\n // If this desc must be updated to match the given node decoration,\n // do so and return true.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY ||\n !node.sameMarkup(this.node))\n return false;\n this.updateInner(node, outerDeco, innerDeco, view);\n return true;\n }\n updateInner(node, outerDeco, innerDeco, view) {\n this.updateOuterDeco(outerDeco);\n this.node = node;\n this.innerDeco = innerDeco;\n if (this.contentDOM)\n this.updateChildren(view, this.posAtStart);\n this.dirty = NOT_DIRTY;\n }\n updateOuterDeco(outerDeco) {\n if (sameOuterDeco(outerDeco, this.outerDeco))\n return;\n let needsWrap = this.nodeDOM.nodeType != 1;\n let oldDOM = this.dom;\n this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));\n if (this.dom != oldDOM) {\n oldDOM.pmViewDesc = undefined;\n this.dom.pmViewDesc = this;\n }\n this.outerDeco = outerDeco;\n }\n // Mark this node as being the selected node.\n selectNode() {\n if (this.nodeDOM.nodeType == 1)\n this.nodeDOM.classList.add(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.dom.draggable = true;\n }\n // Remove selected node marking from this node.\n deselectNode() {\n if (this.nodeDOM.nodeType == 1)\n this.nodeDOM.classList.remove(\"ProseMirror-selectednode\");\n if (this.contentDOM || !this.node.type.spec.draggable)\n this.dom.removeAttribute(\"draggable\");\n }\n get domAtom() { return this.node.isAtom; }\n}\n// Create a view desc for the top-level document node, to be exported\n// and used by the view class.\nfunction docViewDesc(doc, outerDeco, innerDeco, dom, view) {\n applyOuterDeco(dom, outerDeco, doc);\n return new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);\n}\nclass TextViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {\n super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);\n }\n parseRule() {\n let skip = this.nodeDOM.parentNode;\n while (skip && skip != this.dom && !skip.pmIsDeco)\n skip = skip.parentNode;\n return { skip: (skip || true) };\n }\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY || (this.dirty != NOT_DIRTY && !this.inParent()) ||\n !node.sameMarkup(this.node))\n return false;\n this.updateOuterDeco(outerDeco);\n if ((this.dirty != NOT_DIRTY || node.text != this.node.text) && node.text != this.nodeDOM.nodeValue) {\n this.nodeDOM.nodeValue = node.text;\n if (view.trackWrites == this.nodeDOM)\n view.trackWrites = null;\n }\n this.node = node;\n this.dirty = NOT_DIRTY;\n return true;\n }\n inParent() {\n let parentDOM = this.parent.contentDOM;\n for (let n = this.nodeDOM; n; n = n.parentNode)\n if (n == parentDOM)\n return true;\n return false;\n }\n domFromPos(pos) {\n return { node: this.nodeDOM, offset: pos };\n }\n localPosFromDOM(dom, offset, bias) {\n if (dom == this.nodeDOM)\n return this.posAtStart + Math.min(offset, this.node.text.length);\n return super.localPosFromDOM(dom, offset, bias);\n }\n ignoreMutation(mutation) {\n return mutation.type != \"characterData\" && mutation.type != \"selection\";\n }\n slice(from, to, view) {\n let node = this.node.cut(from, to), dom = document.createTextNode(node.text);\n return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);\n }\n markDirty(from, to) {\n super.markDirty(from, to);\n if (this.dom != this.nodeDOM && (from == 0 || to == this.nodeDOM.nodeValue.length))\n this.dirty = NODE_DIRTY;\n }\n get domAtom() { return false; }\n}\n// A dummy desc used to tag trailing BR or IMG nodes created to work\n// around contentEditable terribleness.\nclass TrailingHackViewDesc extends ViewDesc {\n parseRule() { return { ignore: true }; }\n matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }\n get domAtom() { return true; }\n get ignoreForCoords() { return this.dom.nodeName == \"IMG\"; }\n}\n// A separate subclass is used for customized node views, so that the\n// extra checks only have to be made for nodes that are actually\n// customized.\nclass CustomNodeViewDesc extends NodeViewDesc {\n constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {\n super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);\n this.spec = spec;\n }\n // A custom `update` method gets to decide whether the update goes\n // through. If it does, and there's a `contentDOM` node, our logic\n // updates the children.\n update(node, outerDeco, innerDeco, view) {\n if (this.dirty == NODE_DIRTY)\n return false;\n if (this.spec.update) {\n let result = this.spec.update(node, outerDeco, innerDeco);\n if (result)\n this.updateInner(node, outerDeco, innerDeco, view);\n return result;\n }\n else if (!this.contentDOM && !node.isLeaf) {\n return false;\n }\n else {\n return super.update(node, outerDeco, innerDeco, view);\n }\n }\n selectNode() {\n this.spec.selectNode ? this.spec.selectNode() : super.selectNode();\n }\n deselectNode() {\n this.spec.deselectNode ? this.spec.deselectNode() : super.deselectNode();\n }\n setSelection(anchor, head, root, force) {\n this.spec.setSelection ? this.spec.setSelection(anchor, head, root)\n : super.setSelection(anchor, head, root, force);\n }\n destroy() {\n if (this.spec.destroy)\n this.spec.destroy();\n super.destroy();\n }\n stopEvent(event) {\n return this.spec.stopEvent ? this.spec.stopEvent(event) : false;\n }\n ignoreMutation(mutation) {\n return this.spec.ignoreMutation ? this.spec.ignoreMutation(mutation) : super.ignoreMutation(mutation);\n }\n}\n// Sync the content of the given DOM node with the nodes associated\n// with the given array of view descs, recursing into mark descs\n// because this should sync the subtree for a whole node at a time.\nfunction renderDescs(parentDOM, descs, view) {\n let dom = parentDOM.firstChild, written = false;\n for (let i = 0; i < descs.length; i++) {\n let desc = descs[i], childDOM = desc.dom;\n if (childDOM.parentNode == parentDOM) {\n while (childDOM != dom) {\n dom = rm(dom);\n written = true;\n }\n dom = dom.nextSibling;\n }\n else {\n written = true;\n parentDOM.insertBefore(childDOM, dom);\n }\n if (desc instanceof MarkViewDesc) {\n let pos = dom ? dom.previousSibling : parentDOM.lastChild;\n renderDescs(desc.contentDOM, desc.children, view);\n dom = pos ? pos.nextSibling : parentDOM.firstChild;\n }\n }\n while (dom) {\n dom = rm(dom);\n written = true;\n }\n if (written && view.trackWrites == parentDOM)\n view.trackWrites = null;\n}\nconst OuterDecoLevel = function (nodeName) {\n if (nodeName)\n this.nodeName = nodeName;\n};\nOuterDecoLevel.prototype = Object.create(null);\nconst noDeco = [new OuterDecoLevel];\nfunction computeOuterDeco(outerDeco, node, needsWrap) {\n if (outerDeco.length == 0)\n return noDeco;\n let top = needsWrap ? noDeco[0] : new OuterDecoLevel, result = [top];\n for (let i = 0; i < outerDeco.length; i++) {\n let attrs = outerDeco[i].type.attrs;\n if (!attrs)\n continue;\n if (attrs.nodeName)\n result.push(top = new OuterDecoLevel(attrs.nodeName));\n for (let name in attrs) {\n let val = attrs[name];\n if (val == null)\n continue;\n if (needsWrap && result.length == 1)\n result.push(top = new OuterDecoLevel(node.isInline ? \"span\" : \"div\"));\n if (name == \"class\")\n top.class = (top.class ? top.class + \" \" : \"\") + val;\n else if (name == \"style\")\n top.style = (top.style ? top.style + \";\" : \"\") + val;\n else if (name != \"nodeName\")\n top[name] = val;\n }\n }\n return result;\n}\nfunction patchOuterDeco(outerDOM, nodeDOM, prevComputed, curComputed) {\n // Shortcut for trivial case\n if (prevComputed == noDeco && curComputed == noDeco)\n return nodeDOM;\n let curDOM = nodeDOM;\n for (let i = 0; i < curComputed.length; i++) {\n let deco = curComputed[i], prev = prevComputed[i];\n if (i) {\n let parent;\n if (prev && prev.nodeName == deco.nodeName && curDOM != outerDOM &&\n (parent = curDOM.parentNode) && parent.nodeName.toLowerCase() == deco.nodeName) {\n curDOM = parent;\n }\n else {\n parent = document.createElement(deco.nodeName);\n parent.pmIsDeco = true;\n parent.appendChild(curDOM);\n prev = noDeco[0];\n curDOM = parent;\n }\n }\n patchAttributes(curDOM, prev || noDeco[0], deco);\n }\n return curDOM;\n}\nfunction patchAttributes(dom, prev, cur) {\n for (let name in prev)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && !(name in cur))\n dom.removeAttribute(name);\n for (let name in cur)\n if (name != \"class\" && name != \"style\" && name != \"nodeName\" && cur[name] != prev[name])\n dom.setAttribute(name, cur[name]);\n if (prev.class != cur.class) {\n let prevList = prev.class ? prev.class.split(\" \").filter(Boolean) : [];\n let curList = cur.class ? cur.class.split(\" \").filter(Boolean) : [];\n for (let i = 0; i < prevList.length; i++)\n if (curList.indexOf(prevList[i]) == -1)\n dom.classList.remove(prevList[i]);\n for (let i = 0; i < curList.length; i++)\n if (prevList.indexOf(curList[i]) == -1)\n dom.classList.add(curList[i]);\n if (dom.classList.length == 0)\n dom.removeAttribute(\"class\");\n }\n if (prev.style != cur.style) {\n if (prev.style) {\n let prop = /\\s*([\\w\\-\\xa1-\\uffff]+)\\s*:(?:\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|\\(.*?\\)|[^;])*/g, m;\n while (m = prop.exec(prev.style))\n dom.style.removeProperty(m[1]);\n }\n if (cur.style)\n dom.style.cssText += cur.style;\n }\n}\nfunction applyOuterDeco(dom, deco, node) {\n return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));\n}\nfunction sameOuterDeco(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (!a[i].type.eq(b[i].type))\n return false;\n return true;\n}\n// Remove a DOM node and return its next sibling.\nfunction rm(dom) {\n let next = dom.nextSibling;\n dom.parentNode.removeChild(dom);\n return next;\n}\n// Helper class for incrementally updating a tree of mark descs and\n// the widget and node descs inside of them.\nclass ViewTreeUpdater {\n constructor(top, lock, view) {\n this.lock = lock;\n this.view = view;\n // Index into `this.top`'s child array, represents the current\n // update position.\n this.index = 0;\n // When entering a mark, the current top and index are pushed\n // onto this.\n this.stack = [];\n // Tracks whether anything was changed\n this.changed = false;\n this.top = top;\n this.preMatch = preMatch(top.node.content, top);\n }\n // Destroy and remove the children between the given indices in\n // `this.top`.\n destroyBetween(start, end) {\n if (start == end)\n return;\n for (let i = start; i < end; i++)\n this.top.children[i].destroy();\n this.top.children.splice(start, end - start);\n this.changed = true;\n }\n // Destroy all remaining children in `this.top`.\n destroyRest() {\n this.destroyBetween(this.index, this.top.children.length);\n }\n // Sync the current stack of mark descs with the given array of\n // marks, reusing existing mark descs when possible.\n syncToMarks(marks, inline, view) {\n let keep = 0, depth = this.stack.length >> 1;\n let maxKeep = Math.min(depth, marks.length);\n while (keep < maxKeep &&\n (keep == depth - 1 ? this.top : this.stack[(keep + 1) << 1])\n .matchesMark(marks[keep]) && marks[keep].type.spec.spanning !== false)\n keep++;\n while (keep < depth) {\n this.destroyRest();\n this.top.dirty = NOT_DIRTY;\n this.index = this.stack.pop();\n this.top = this.stack.pop();\n depth--;\n }\n while (depth < marks.length) {\n this.stack.push(this.top, this.index + 1);\n let found = -1;\n for (let i = this.index; i < Math.min(this.index + 3, this.top.children.length); i++) {\n if (this.top.children[i].matchesMark(marks[depth])) {\n found = i;\n break;\n }\n }\n if (found > -1) {\n if (found > this.index) {\n this.changed = true;\n this.destroyBetween(this.index, found);\n }\n this.top = this.top.children[this.index];\n }\n else {\n let markDesc = MarkViewDesc.create(this.top, marks[depth], inline, view);\n this.top.children.splice(this.index, 0, markDesc);\n this.top = markDesc;\n this.changed = true;\n }\n this.index = 0;\n depth++;\n }\n }\n // Try to find a node desc matching the given data. Skip over it and\n // return true when successful.\n findNodeMatch(node, outerDeco, innerDeco, index) {\n let found = -1, targetDesc;\n if (index >= this.preMatch.index &&\n (targetDesc = this.preMatch.matches[index - this.preMatch.index]).parent == this.top &&\n targetDesc.matchesNode(node, outerDeco, innerDeco)) {\n found = this.top.children.indexOf(targetDesc, this.index);\n }\n else {\n for (let i = this.index, e = Math.min(this.top.children.length, i + 5); i < e; i++) {\n let child = this.top.children[i];\n if (child.matchesNode(node, outerDeco, innerDeco) && !this.preMatch.matched.has(child)) {\n found = i;\n break;\n }\n }\n }\n if (found < 0)\n return false;\n this.destroyBetween(this.index, found);\n this.index++;\n return true;\n }\n updateNodeAt(node, outerDeco, innerDeco, index, view) {\n let child = this.top.children[index];\n if (child.dirty == NODE_DIRTY && child.dom == child.contentDOM)\n child.dirty = CONTENT_DIRTY;\n if (!child.update(node, outerDeco, innerDeco, view))\n return false;\n this.destroyBetween(this.index, index);\n this.index++;\n return true;\n }\n findIndexWithChild(domNode) {\n for (;;) {\n let parent = domNode.parentNode;\n if (!parent)\n return -1;\n if (parent == this.top.contentDOM) {\n let desc = domNode.pmViewDesc;\n if (desc)\n for (let i = this.index; i < this.top.children.length; i++) {\n if (this.top.children[i] == desc)\n return i;\n }\n return -1;\n }\n domNode = parent;\n }\n }\n // Try to update the next node, if any, to the given data. Checks\n // pre-matches to avoid overwriting nodes that could still be used.\n updateNextNode(node, outerDeco, innerDeco, view, index) {\n for (let i = this.index; i < this.top.children.length; i++) {\n let next = this.top.children[i];\n if (next instanceof NodeViewDesc) {\n let preMatch = this.preMatch.matched.get(next);\n if (preMatch != null && preMatch != index)\n return false;\n let nextDOM = next.dom;\n // Can't update if nextDOM is or contains this.lock, except if\n // it's a text node whose content already matches the new text\n // and whose decorations match the new ones.\n let locked = this.lock && (nextDOM == this.lock || nextDOM.nodeType == 1 && nextDOM.contains(this.lock.parentNode)) &&\n !(node.isText && next.node && next.node.isText && next.nodeDOM.nodeValue == node.text &&\n next.dirty != NODE_DIRTY && sameOuterDeco(outerDeco, next.outerDeco));\n if (!locked && next.update(node, outerDeco, innerDeco, view)) {\n this.destroyBetween(this.index, i);\n if (next.dom != nextDOM)\n this.changed = true;\n this.index++;\n return true;\n }\n break;\n }\n }\n return false;\n }\n // Insert the node as a newly created node desc.\n addNode(node, outerDeco, innerDeco, view, pos) {\n this.top.children.splice(this.index++, 0, NodeViewDesc.create(this.top, node, outerDeco, innerDeco, view, pos));\n this.changed = true;\n }\n placeWidget(widget, view, pos) {\n let next = this.index < this.top.children.length ? this.top.children[this.index] : null;\n if (next && next.matchesWidget(widget) &&\n (widget == next.widget || !next.widget.type.toDOM.parentNode)) {\n this.index++;\n }\n else {\n let desc = new WidgetViewDesc(this.top, widget, view, pos);\n this.top.children.splice(this.index++, 0, desc);\n this.changed = true;\n }\n }\n // Make sure a textblock looks and behaves correctly in\n // contentEditable.\n addTextblockHacks() {\n let lastChild = this.top.children[this.index - 1], parent = this.top;\n while (lastChild instanceof MarkViewDesc) {\n parent = lastChild;\n lastChild = parent.children[parent.children.length - 1];\n }\n if (!lastChild || // Empty textblock\n !(lastChild instanceof TextViewDesc) ||\n /\\n$/.test(lastChild.node.text) ||\n (this.view.requiresGeckoHackNode && /\\s$/.test(lastChild.node.text))) {\n // Avoid bugs in Safari's cursor drawing (#1165) and Chrome's mouse selection (#1152)\n if ((safari || chrome) && lastChild && lastChild.dom.contentEditable == \"false\")\n this.addHackNode(\"IMG\", parent);\n this.addHackNode(\"BR\", this.top);\n }\n }\n addHackNode(nodeName, parent) {\n if (parent == this.top && this.index < parent.children.length && parent.children[this.index].matchesHack(nodeName)) {\n this.index++;\n }\n else {\n let dom = document.createElement(nodeName);\n if (nodeName == \"IMG\") {\n dom.className = \"ProseMirror-separator\";\n dom.alt = \"\";\n }\n if (nodeName == \"BR\")\n dom.className = \"ProseMirror-trailingBreak\";\n let hack = new TrailingHackViewDesc(this.top, [], dom, null);\n if (parent != this.top)\n parent.children.push(hack);\n else\n parent.children.splice(this.index++, 0, hack);\n this.changed = true;\n }\n }\n}\n// Iterate from the end of the fragment and array of descs to find\n// directly matching ones, in order to avoid overeagerly reusing those\n// for other nodes. Returns the fragment index of the first node that\n// is part of the sequence of matched nodes at the end of the\n// fragment.\nfunction preMatch(frag, parentDesc) {\n let curDesc = parentDesc, descI = curDesc.children.length;\n let fI = frag.childCount, matched = new Map, matches = [];\n outer: while (fI > 0) {\n let desc;\n for (;;) {\n if (descI) {\n let next = curDesc.children[descI - 1];\n if (next instanceof MarkViewDesc) {\n curDesc = next;\n descI = next.children.length;\n }\n else {\n desc = next;\n descI--;\n break;\n }\n }\n else if (curDesc == parentDesc) {\n break outer;\n }\n else {\n // FIXME\n descI = curDesc.parent.children.indexOf(curDesc);\n curDesc = curDesc.parent;\n }\n }\n let node = desc.node;\n if (!node)\n continue;\n if (node != frag.child(fI - 1))\n break;\n --fI;\n matched.set(desc, fI);\n matches.push(desc);\n }\n return { index: fI, matched, matches: matches.reverse() };\n}\nfunction compareSide(a, b) {\n return a.type.side - b.type.side;\n}\n// This function abstracts iterating over the nodes and decorations in\n// a fragment. Calls `onNode` for each node, with its local and child\n// decorations. Splits text nodes when there is a decoration starting\n// or ending inside of them. Calls `onWidget` for each widget.\nfunction iterDeco(parent, deco, onWidget, onNode) {\n let locals = deco.locals(parent), offset = 0;\n // Simple, cheap variant for when there are no local decorations\n if (locals.length == 0) {\n for (let i = 0; i < parent.childCount; i++) {\n let child = parent.child(i);\n onNode(child, locals, deco.forChild(offset, child), i);\n offset += child.nodeSize;\n }\n return;\n }\n let decoIndex = 0, active = [], restNode = null;\n for (let parentIndex = 0;;) {\n if (decoIndex < locals.length && locals[decoIndex].to == offset) {\n let widget = locals[decoIndex++], widgets;\n while (decoIndex < locals.length && locals[decoIndex].to == offset)\n (widgets || (widgets = [widget])).push(locals[decoIndex++]);\n if (widgets) {\n widgets.sort(compareSide);\n for (let i = 0; i < widgets.length; i++)\n onWidget(widgets[i], parentIndex, !!restNode);\n }\n else {\n onWidget(widget, parentIndex, !!restNode);\n }\n }\n let child, index;\n if (restNode) {\n index = -1;\n child = restNode;\n restNode = null;\n }\n else if (parentIndex < parent.childCount) {\n index = parentIndex;\n child = parent.child(parentIndex++);\n }\n else {\n break;\n }\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= offset)\n active.splice(i--, 1);\n while (decoIndex < locals.length && locals[decoIndex].from <= offset && locals[decoIndex].to > offset)\n active.push(locals[decoIndex++]);\n let end = offset + child.nodeSize;\n if (child.isText) {\n let cutAt = end;\n if (decoIndex < locals.length && locals[decoIndex].from < cutAt)\n cutAt = locals[decoIndex].from;\n for (let i = 0; i < active.length; i++)\n if (active[i].to < cutAt)\n cutAt = active[i].to;\n if (cutAt < end) {\n restNode = child.cut(cutAt - offset);\n child = child.cut(0, cutAt - offset);\n end = cutAt;\n index = -1;\n }\n }\n let outerDeco = child.isInline && !child.isLeaf ? active.filter(d => !d.inline) : active.slice();\n onNode(child, outerDeco, deco.forChild(offset, child), index);\n offset = end;\n }\n}\n// List markers in Mobile Safari will mysteriously disappear\n// sometimes. This works around that.\nfunction iosHacks(dom) {\n if (dom.nodeName == \"UL\" || dom.nodeName == \"OL\") {\n let oldCSS = dom.style.cssText;\n dom.style.cssText = oldCSS + \"; list-style: square !important\";\n window.getComputedStyle(dom).listStyle;\n dom.style.cssText = oldCSS;\n }\n}\nfunction nearbyTextNode(node, offset) {\n for (;;) {\n if (node.nodeType == 3)\n return node;\n if (node.nodeType == 1 && offset > 0) {\n if (node.childNodes.length > offset && node.childNodes[offset].nodeType == 3)\n return node.childNodes[offset];\n node = node.childNodes[offset - 1];\n offset = nodeSize(node);\n }\n else if (node.nodeType == 1 && offset < node.childNodes.length) {\n node = node.childNodes[offset];\n offset = 0;\n }\n else {\n return null;\n }\n }\n}\n// Find a piece of text in an inline fragment, overlapping from-to\nfunction findTextInFragment(frag, text, from, to) {\n for (let i = 0, pos = 0; i < frag.childCount && pos <= to;) {\n let child = frag.child(i++), childStart = pos;\n pos += child.nodeSize;\n if (!child.isText)\n continue;\n let str = child.text;\n while (i < frag.childCount) {\n let next = frag.child(i++);\n pos += next.nodeSize;\n if (!next.isText)\n break;\n str += next.text;\n }\n if (pos >= from) {\n let found = childStart < to ? str.lastIndexOf(text, to - childStart - 1) : -1;\n if (found >= 0 && found + text.length + childStart >= from)\n return childStart + found;\n if (from == to && str.length >= (to + text.length) - childStart &&\n str.slice(to - childStart, to - childStart + text.length) == text)\n return to;\n }\n }\n return -1;\n}\n// Replace range from-to in an array of view descs with replacement\n// (may be null to just delete). This goes very much against the grain\n// of the rest of this code, which tends to create nodes with the\n// right shape in one go, rather than messing with them after\n// creation, but is necessary in the composition hack.\nfunction replaceNodes(nodes, from, to, view, replacement) {\n let result = [];\n for (let i = 0, off = 0; i < nodes.length; i++) {\n let child = nodes[i], start = off, end = off += child.size;\n if (start >= to || end <= from) {\n result.push(child);\n }\n else {\n if (start < from)\n result.push(child.slice(0, from - start, view));\n if (replacement) {\n result.push(replacement);\n replacement = undefined;\n }\n if (end > to)\n result.push(child.slice(to - start, child.size, view));\n }\n }\n return result;\n}\n\nfunction selectionFromDOM(view, origin = null) {\n let domSel = view.domSelectionRange(), doc = view.state.doc;\n if (!domSel.focusNode)\n return null;\n let nearestDesc = view.docView.nearestDesc(domSel.focusNode), inWidget = nearestDesc && nearestDesc.size == 0;\n let head = view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset, 1);\n if (head < 0)\n return null;\n let $head = doc.resolve(head), $anchor, selection;\n if (selectionCollapsed(domSel)) {\n $anchor = $head;\n while (nearestDesc && !nearestDesc.node)\n nearestDesc = nearestDesc.parent;\n let nearestDescNode = nearestDesc.node;\n if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent\n && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {\n let pos = nearestDesc.posBefore;\n selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));\n }\n }\n else {\n let anchor = view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset, 1);\n if (anchor < 0)\n return null;\n $anchor = doc.resolve(anchor);\n }\n if (!selection) {\n let bias = origin == \"pointer\" || (view.state.selection.head < $head.pos && !inWidget) ? 1 : -1;\n selection = selectionBetween(view, $anchor, $head, bias);\n }\n return selection;\n}\nfunction editorOwnsSelection(view) {\n return view.editable ? view.hasFocus() :\n hasSelection(view) && document.activeElement && document.activeElement.contains(view.dom);\n}\nfunction selectionToDOM(view, force = false) {\n let sel = view.state.selection;\n syncNodeSelection(view, sel);\n if (!editorOwnsSelection(view))\n return;\n // The delayed drag selection causes issues with Cell Selections\n // in Safari. And the drag selection delay is to workarond issues\n // which only present in Chrome.\n if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {\n let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;\n if (domSel.anchorNode && curSel.anchorNode &&\n isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {\n view.input.mouseDown.delayedSelectionSync = true;\n view.domObserver.setCurSelection();\n return;\n }\n }\n view.domObserver.disconnectSelection();\n if (view.cursorWrapper) {\n selectCursorWrapper(view);\n }\n else {\n let { anchor, head } = sel, resetEditableFrom, resetEditableTo;\n if (brokenSelectBetweenUneditable && !(sel instanceof TextSelection)) {\n if (!sel.$from.parent.inlineContent)\n resetEditableFrom = temporarilyEditableNear(view, sel.from);\n if (!sel.empty && !sel.$from.parent.inlineContent)\n resetEditableTo = temporarilyEditableNear(view, sel.to);\n }\n view.docView.setSelection(anchor, head, view.root, force);\n if (brokenSelectBetweenUneditable) {\n if (resetEditableFrom)\n resetEditable(resetEditableFrom);\n if (resetEditableTo)\n resetEditable(resetEditableTo);\n }\n if (sel.visible) {\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }\n else {\n view.dom.classList.add(\"ProseMirror-hideselection\");\n if (\"onselectionchange\" in document)\n removeClassOnSelectionChange(view);\n }\n }\n view.domObserver.setCurSelection();\n view.domObserver.connectSelection();\n}\n// Kludge to work around Webkit not allowing a selection to start/end\n// between non-editable block nodes. We briefly make something\n// editable, set the selection, then set it uneditable again.\nconst brokenSelectBetweenUneditable = safari || chrome && chrome_version < 63;\nfunction temporarilyEditableNear(view, pos) {\n let { node, offset } = view.docView.domFromPos(pos, 0);\n let after = offset < node.childNodes.length ? node.childNodes[offset] : null;\n let before = offset ? node.childNodes[offset - 1] : null;\n if (safari && after && after.contentEditable == \"false\")\n return setEditable(after);\n if ((!after || after.contentEditable == \"false\") &&\n (!before || before.contentEditable == \"false\")) {\n if (after)\n return setEditable(after);\n else if (before)\n return setEditable(before);\n }\n}\nfunction setEditable(element) {\n element.contentEditable = \"true\";\n if (safari && element.draggable) {\n element.draggable = false;\n element.wasDraggable = true;\n }\n return element;\n}\nfunction resetEditable(element) {\n element.contentEditable = \"false\";\n if (element.wasDraggable) {\n element.draggable = true;\n element.wasDraggable = null;\n }\n}\nfunction removeClassOnSelectionChange(view) {\n let doc = view.dom.ownerDocument;\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n let domSel = view.domSelectionRange();\n let node = domSel.anchorNode, offset = domSel.anchorOffset;\n doc.addEventListener(\"selectionchange\", view.input.hideSelectionGuard = () => {\n if (domSel.anchorNode != node || domSel.anchorOffset != offset) {\n doc.removeEventListener(\"selectionchange\", view.input.hideSelectionGuard);\n setTimeout(() => {\n if (!editorOwnsSelection(view) || view.state.selection.visible)\n view.dom.classList.remove(\"ProseMirror-hideselection\");\n }, 20);\n }\n });\n}\nfunction selectCursorWrapper(view) {\n let domSel = view.domSelection(), range = document.createRange();\n let node = view.cursorWrapper.dom, img = node.nodeName == \"IMG\";\n if (img)\n range.setEnd(node.parentNode, domIndex(node) + 1);\n else\n range.setEnd(node, 0);\n range.collapse(false);\n domSel.removeAllRanges();\n domSel.addRange(range);\n // Kludge to kill 'control selection' in IE11 when selecting an\n // invisible cursor wrapper, since that would result in those weird\n // resize handles and a selection that considers the absolutely\n // positioned wrapper, rather than the root editable node, the\n // focused element.\n if (!img && !view.state.selection.visible && ie && ie_version <= 11) {\n node.disabled = true;\n node.disabled = false;\n }\n}\nfunction syncNodeSelection(view, sel) {\n if (sel instanceof NodeSelection) {\n let desc = view.docView.descAt(sel.from);\n if (desc != view.lastSelectedViewDesc) {\n clearNodeSelection(view);\n if (desc)\n desc.selectNode();\n view.lastSelectedViewDesc = desc;\n }\n }\n else {\n clearNodeSelection(view);\n }\n}\n// Clear all DOM statefulness of the last node selection.\nfunction clearNodeSelection(view) {\n if (view.lastSelectedViewDesc) {\n if (view.lastSelectedViewDesc.parent)\n view.lastSelectedViewDesc.deselectNode();\n view.lastSelectedViewDesc = undefined;\n }\n}\nfunction selectionBetween(view, $anchor, $head, bias) {\n return view.someProp(\"createSelectionBetween\", f => f(view, $anchor, $head))\n || TextSelection.between($anchor, $head, bias);\n}\nfunction hasFocusAndSelection(view) {\n if (view.editable && !view.hasFocus())\n return false;\n return hasSelection(view);\n}\nfunction hasSelection(view) {\n let sel = view.domSelectionRange();\n if (!sel.anchorNode)\n return false;\n try {\n // Firefox will raise 'permission denied' errors when accessing\n // properties of `sel.anchorNode` when it's in a generated CSS\n // element.\n return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&\n (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));\n }\n catch (_) {\n return false;\n }\n}\nfunction anchorInRightPlace(view) {\n let anchorDOM = view.docView.domFromPos(view.state.selection.anchor, 0);\n let domSel = view.domSelectionRange();\n return isEquivalentPosition(anchorDOM.node, anchorDOM.offset, domSel.anchorNode, domSel.anchorOffset);\n}\n\nfunction moveSelectionBlock(state, dir) {\n let { $anchor, $head } = state.selection;\n let $side = dir > 0 ? $anchor.max($head) : $anchor.min($head);\n let $start = !$side.parent.inlineContent ? $side : $side.depth ? state.doc.resolve(dir > 0 ? $side.after() : $side.before()) : null;\n return $start && Selection.findFrom($start, dir);\n}\nfunction apply(view, sel) {\n view.dispatch(view.state.tr.setSelection(sel).scrollIntoView());\n return true;\n}\nfunction selectHorizontally(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection) {\n if (!sel.empty || mods.indexOf(\"s\") > -1) {\n return false;\n }\n else if (view.endOfTextblock(dir > 0 ? \"right\" : \"left\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n return false;\n }\n else if (!(mac && mods.indexOf(\"m\") > -1)) {\n let $head = sel.$head, node = $head.textOffset ? null : dir < 0 ? $head.nodeBefore : $head.nodeAfter, desc;\n if (!node || node.isText)\n return false;\n let nodePos = dir < 0 ? $head.pos - node.nodeSize : $head.pos;\n if (!(node.isAtom || (desc = view.docView.descAt(nodePos)) && !desc.contentDOM))\n return false;\n if (NodeSelection.isSelectable(node)) {\n return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));\n }\n else if (webkit) {\n // Chrome and Safari will introduce extra pointless cursor\n // positions around inline uneditable nodes, so we have to\n // take over and move the cursor past them (#937)\n return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));\n }\n else {\n return false;\n }\n }\n }\n else if (sel instanceof NodeSelection && sel.node.isInline) {\n return apply(view, new TextSelection(dir > 0 ? sel.$to : sel.$from));\n }\n else {\n let next = moveSelectionBlock(view.state, dir);\n if (next)\n return apply(view, next);\n return false;\n }\n}\nfunction nodeLen(node) {\n return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;\n}\nfunction isIgnorable(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.size == 0 && (dom.nextSibling || dom.nodeName != \"BR\");\n}\n// Make sure the cursor isn't directly after one or more ignored\n// nodes, which will confuse the browser's cursor motion logic.\nfunction skipIgnoredNodesLeft(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let moveNode, moveOffset, force = false;\n // Gecko will do odd things when the selection is directly in front\n // of a non-editable node, so in that case, move it into the next\n // node if possible. Issue prosemirror/prosemirror#832.\n if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset]))\n force = true;\n for (;;) {\n if (offset > 0) {\n if (node.nodeType != 1) {\n break;\n }\n else {\n let before = node.childNodes[offset - 1];\n if (isIgnorable(before)) {\n moveNode = node;\n moveOffset = --offset;\n }\n else if (before.nodeType == 3) {\n node = before;\n offset = node.nodeValue.length;\n }\n else\n break;\n }\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let prev = node.previousSibling;\n while (prev && isIgnorable(prev)) {\n moveNode = node.parentNode;\n moveOffset = domIndex(prev);\n prev = prev.previousSibling;\n }\n if (!prev) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = 0;\n }\n else {\n node = prev;\n offset = nodeLen(node);\n }\n }\n }\n if (force)\n setSelFocus(view, node, offset);\n else if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\n// Make sure the cursor isn't directly before one or more ignored\n// nodes.\nfunction skipIgnoredNodesRight(view) {\n let sel = view.domSelectionRange();\n let node = sel.focusNode, offset = sel.focusOffset;\n if (!node)\n return;\n let len = nodeLen(node);\n let moveNode, moveOffset;\n for (;;) {\n if (offset < len) {\n if (node.nodeType != 1)\n break;\n let after = node.childNodes[offset];\n if (isIgnorable(after)) {\n moveNode = node;\n moveOffset = ++offset;\n }\n else\n break;\n }\n else if (isBlockNode(node)) {\n break;\n }\n else {\n let next = node.nextSibling;\n while (next && isIgnorable(next)) {\n moveNode = next.parentNode;\n moveOffset = domIndex(next) + 1;\n next = next.nextSibling;\n }\n if (!next) {\n node = node.parentNode;\n if (node == view.dom)\n break;\n offset = len = 0;\n }\n else {\n node = next;\n offset = 0;\n len = nodeLen(node);\n }\n }\n }\n if (moveNode)\n setSelFocus(view, moveNode, moveOffset);\n}\nfunction isBlockNode(dom) {\n let desc = dom.pmViewDesc;\n return desc && desc.node && desc.node.isBlock;\n}\nfunction setSelFocus(view, node, offset) {\n let sel = view.domSelection();\n if (selectionCollapsed(sel)) {\n let range = document.createRange();\n range.setEnd(node, offset);\n range.setStart(node, offset);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n else if (sel.extend) {\n sel.extend(node, offset);\n }\n view.domObserver.setCurSelection();\n let { state } = view;\n // If no state update ends up happening, reset the selection.\n setTimeout(() => {\n if (view.state == state)\n selectionToDOM(view);\n }, 50);\n}\n// Check whether vertical selection motion would involve node\n// selections. If so, apply it (if not, the result is left to the\n// browser)\nfunction selectVertically(view, dir, mods) {\n let sel = view.state.selection;\n if (sel instanceof TextSelection && !sel.empty || mods.indexOf(\"s\") > -1)\n return false;\n if (mac && mods.indexOf(\"m\") > -1)\n return false;\n let { $from, $to } = sel;\n if (!$from.parent.inlineContent || view.endOfTextblock(dir < 0 ? \"up\" : \"down\")) {\n let next = moveSelectionBlock(view.state, dir);\n if (next && (next instanceof NodeSelection))\n return apply(view, next);\n }\n if (!$from.parent.inlineContent) {\n let side = dir < 0 ? $from : $to;\n let beyond = sel instanceof AllSelection ? Selection.near(side, dir) : Selection.findFrom(side, dir);\n return beyond ? apply(view, beyond) : false;\n }\n return false;\n}\nfunction stopNativeHorizontalDelete(view, dir) {\n if (!(view.state.selection instanceof TextSelection))\n return true;\n let { $head, $anchor, empty } = view.state.selection;\n if (!$head.sameParent($anchor))\n return true;\n if (!empty)\n return false;\n if (view.endOfTextblock(dir > 0 ? \"forward\" : \"backward\"))\n return true;\n let nextNode = !$head.textOffset && (dir < 0 ? $head.nodeBefore : $head.nodeAfter);\n if (nextNode && !nextNode.isText) {\n let tr = view.state.tr;\n if (dir < 0)\n tr.delete($head.pos - nextNode.nodeSize, $head.pos);\n else\n tr.delete($head.pos, $head.pos + nextNode.nodeSize);\n view.dispatch(tr);\n return true;\n }\n return false;\n}\nfunction switchEditable(view, node, state) {\n view.domObserver.stop();\n node.contentEditable = state;\n view.domObserver.start();\n}\n// Issue #867 / #1090 / https://bugs.chromium.org/p/chromium/issues/detail?id=903821\n// In which Safari (and at some point in the past, Chrome) does really\n// wrong things when the down arrow is pressed when the cursor is\n// directly at the start of a textblock and has an uneditable node\n// after it\nfunction safariDownArrowBug(view) {\n if (!safari || view.state.selection.$head.parentOffset > 0)\n return false;\n let { focusNode, focusOffset } = view.domSelectionRange();\n if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&\n focusNode.firstChild && focusNode.firstChild.contentEditable == \"false\") {\n let child = focusNode.firstChild;\n switchEditable(view, child, \"true\");\n setTimeout(() => switchEditable(view, child, \"false\"), 20);\n }\n return false;\n}\n// A backdrop key mapping used to make sure we always suppress keys\n// that have a dangerous default effect, even if the commands they are\n// bound to return false, and to make sure that cursor-motion keys\n// find a cursor (as opposed to a node selection) when pressed. For\n// cursor-motion keys, the code in the handlers also takes care of\n// block selections.\nfunction getMods(event) {\n let result = \"\";\n if (event.ctrlKey)\n result += \"c\";\n if (event.metaKey)\n result += \"m\";\n if (event.altKey)\n result += \"a\";\n if (event.shiftKey)\n result += \"s\";\n return result;\n}\nfunction captureKeyDown(view, event) {\n let code = event.keyCode, mods = getMods(event);\n if (code == 8 || (mac && code == 72 && mods == \"c\")) { // Backspace, Ctrl-h on Mac\n return stopNativeHorizontalDelete(view, -1) || skipIgnoredNodesLeft(view);\n }\n else if (code == 46 || (mac && code == 68 && mods == \"c\")) { // Delete, Ctrl-d on Mac\n return stopNativeHorizontalDelete(view, 1) || skipIgnoredNodesRight(view);\n }\n else if (code == 13 || code == 27) { // Enter, Esc\n return true;\n }\n else if (code == 37 || (mac && code == 66 && mods == \"c\")) { // Left arrow, Ctrl-b on Mac\n return selectHorizontally(view, -1, mods) || skipIgnoredNodesLeft(view);\n }\n else if (code == 39 || (mac && code == 70 && mods == \"c\")) { // Right arrow, Ctrl-f on Mac\n return selectHorizontally(view, 1, mods) || skipIgnoredNodesRight(view);\n }\n else if (code == 38 || (mac && code == 80 && mods == \"c\")) { // Up arrow, Ctrl-p on Mac\n return selectVertically(view, -1, mods) || skipIgnoredNodesLeft(view);\n }\n else if (code == 40 || (mac && code == 78 && mods == \"c\")) { // Down arrow, Ctrl-n on Mac\n return safariDownArrowBug(view) || selectVertically(view, 1, mods) || skipIgnoredNodesRight(view);\n }\n else if (mods == (mac ? \"m\" : \"c\") &&\n (code == 66 || code == 73 || code == 89 || code == 90)) { // Mod-[biyz]\n return true;\n }\n return false;\n}\n\nfunction serializeForClipboard(view, slice) {\n view.someProp(\"transformCopied\", f => { slice = f(slice, view); });\n let context = [], { content, openStart, openEnd } = slice;\n while (openStart > 1 && openEnd > 1 && content.childCount == 1 && content.firstChild.childCount == 1) {\n openStart--;\n openEnd--;\n let node = content.firstChild;\n context.push(node.type.name, node.attrs != node.type.defaultAttrs ? node.attrs : null);\n content = node.content;\n }\n let serializer = view.someProp(\"clipboardSerializer\") || DOMSerializer.fromSchema(view.state.schema);\n let doc = detachedDoc(), wrap = doc.createElement(\"div\");\n wrap.appendChild(serializer.serializeFragment(content, { document: doc }));\n let firstChild = wrap.firstChild, needsWrap, wrappers = 0;\n while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {\n for (let i = needsWrap.length - 1; i >= 0; i--) {\n let wrapper = doc.createElement(needsWrap[i]);\n while (wrap.firstChild)\n wrapper.appendChild(wrap.firstChild);\n wrap.appendChild(wrapper);\n wrappers++;\n }\n firstChild = wrap.firstChild;\n }\n if (firstChild && firstChild.nodeType == 1)\n firstChild.setAttribute(\"data-pm-slice\", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : \"\"} ${JSON.stringify(context)}`);\n let text = view.someProp(\"clipboardTextSerializer\", f => f(slice, view)) ||\n slice.content.textBetween(0, slice.content.size, \"\\n\\n\");\n return { dom: wrap, text };\n}\n// Read a slice of content from the clipboard (or drop data).\nfunction parseFromClipboard(view, text, html, plainText, $context) {\n let inCode = $context.parent.type.spec.code;\n let dom, slice;\n if (!html && !text)\n return null;\n let asText = text && (plainText || inCode || !html);\n if (asText) {\n view.someProp(\"transformPastedText\", f => { text = f(text, inCode || plainText, view); });\n if (inCode)\n return text ? new Slice(Fragment.from(view.state.schema.text(text.replace(/\\r\\n?/g, \"\\n\"))), 0, 0) : Slice.empty;\n let parsed = view.someProp(\"clipboardTextParser\", f => f(text, $context, plainText, view));\n if (parsed) {\n slice = parsed;\n }\n else {\n let marks = $context.marks();\n let { schema } = view.state, serializer = DOMSerializer.fromSchema(schema);\n dom = document.createElement(\"div\");\n text.split(/(?:\\r\\n?|\\n)+/).forEach(block => {\n let p = dom.appendChild(document.createElement(\"p\"));\n if (block)\n p.appendChild(serializer.serializeNode(schema.text(block, marks)));\n });\n }\n }\n else {\n view.someProp(\"transformPastedHTML\", f => { html = f(html, view); });\n dom = readHTML(html);\n if (webkit)\n restoreReplacedSpaces(dom);\n }\n let contextNode = dom && dom.querySelector(\"[data-pm-slice]\");\n let sliceData = contextNode && /^(\\d+) (\\d+)(?: -(\\d+))? (.*)/.exec(contextNode.getAttribute(\"data-pm-slice\") || \"\");\n if (sliceData && sliceData[3])\n for (let i = +sliceData[3]; i > 0; i--) {\n let child = dom.firstChild;\n while (child && child.nodeType != 1)\n child = child.nextSibling;\n if (!child)\n break;\n dom = child;\n }\n if (!slice) {\n let parser = view.someProp(\"clipboardParser\") || view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n slice = parser.parseSlice(dom, {\n preserveWhitespace: !!(asText || sliceData),\n context: $context,\n ruleFromNode(dom) {\n if (dom.nodeName == \"BR\" && !dom.nextSibling &&\n dom.parentNode && !inlineParents.test(dom.parentNode.nodeName))\n return { ignore: true };\n return null;\n }\n });\n }\n if (sliceData) {\n slice = addContext(closeSlice(slice, +sliceData[1], +sliceData[2]), sliceData[4]);\n }\n else { // HTML wasn't created by ProseMirror. Make sure top-level siblings are coherent\n slice = Slice.maxOpen(normalizeSiblings(slice.content, $context), true);\n if (slice.openStart || slice.openEnd) {\n let openStart = 0, openEnd = 0;\n for (let node = slice.content.firstChild; openStart < slice.openStart && !node.type.spec.isolating; openStart++, node = node.firstChild) { }\n for (let node = slice.content.lastChild; openEnd < slice.openEnd && !node.type.spec.isolating; openEnd++, node = node.lastChild) { }\n slice = closeSlice(slice, openStart, openEnd);\n }\n }\n view.someProp(\"transformPasted\", f => { slice = f(slice, view); });\n return slice;\n}\nconst inlineParents = /^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var)$/i;\n// Takes a slice parsed with parseSlice, which means there hasn't been\n// any content-expression checking done on the top nodes, tries to\n// find a parent node in the current context that might fit the nodes,\n// and if successful, rebuilds the slice so that it fits into that parent.\n//\n// This addresses the problem that Transform.replace expects a\n// coherent slice, and will fail to place a set of siblings that don't\n// fit anywhere in the schema.\nfunction normalizeSiblings(fragment, $context) {\n if (fragment.childCount < 2)\n return fragment;\n for (let d = $context.depth; d >= 0; d--) {\n let parent = $context.node(d);\n let match = parent.contentMatchAt($context.index(d));\n let lastWrap, result = [];\n fragment.forEach(node => {\n if (!result)\n return;\n let wrap = match.findWrapping(node.type), inLast;\n if (!wrap)\n return result = null;\n if (inLast = result.length && lastWrap.length && addToSibling(wrap, lastWrap, node, result[result.length - 1], 0)) {\n result[result.length - 1] = inLast;\n }\n else {\n if (result.length)\n result[result.length - 1] = closeRight(result[result.length - 1], lastWrap.length);\n let wrapped = withWrappers(node, wrap);\n result.push(wrapped);\n match = match.matchType(wrapped.type);\n lastWrap = wrap;\n }\n });\n if (result)\n return Fragment.from(result);\n }\n return fragment;\n}\nfunction withWrappers(node, wrap, from = 0) {\n for (let i = wrap.length - 1; i >= from; i--)\n node = wrap[i].create(null, Fragment.from(node));\n return node;\n}\n// Used to group adjacent nodes wrapped in similar parents by\n// normalizeSiblings into the same parent node\nfunction addToSibling(wrap, lastWrap, node, sibling, depth) {\n if (depth < wrap.length && depth < lastWrap.length && wrap[depth] == lastWrap[depth]) {\n let inner = addToSibling(wrap, lastWrap, node, sibling.lastChild, depth + 1);\n if (inner)\n return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));\n let match = sibling.contentMatchAt(sibling.childCount);\n if (match.matchType(depth == wrap.length - 1 ? node.type : wrap[depth + 1]))\n return sibling.copy(sibling.content.append(Fragment.from(withWrappers(node, wrap, depth + 1))));\n }\n}\nfunction closeRight(node, depth) {\n if (depth == 0)\n return node;\n let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));\n let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true);\n return node.copy(fragment.append(fill));\n}\nfunction closeRange(fragment, side, from, to, depth, openEnd) {\n let node = side < 0 ? fragment.firstChild : fragment.lastChild, inner = node.content;\n if (depth < to - 1)\n inner = closeRange(inner, side, from, to, depth + 1, openEnd);\n if (depth >= from)\n inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, fragment.childCount > 1 || openEnd <= depth).append(inner)\n : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment.empty, true));\n return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));\n}\nfunction closeSlice(slice, openStart, openEnd) {\n if (openStart < slice.openStart)\n slice = new Slice(closeRange(slice.content, -1, openStart, slice.openStart, 0, slice.openEnd), openStart, slice.openEnd);\n if (openEnd < slice.openEnd)\n slice = new Slice(closeRange(slice.content, 1, openEnd, slice.openEnd, 0, 0), slice.openStart, openEnd);\n return slice;\n}\n// Trick from jQuery -- some elements must be wrapped in other\n// elements for innerHTML to work. I.e. if you do `div.innerHTML =\n// \"<td>..</td>\"` the table cells are ignored.\nconst wrapMap = {\n thead: [\"table\"],\n tbody: [\"table\"],\n tfoot: [\"table\"],\n caption: [\"table\"],\n colgroup: [\"table\"],\n col: [\"table\", \"colgroup\"],\n tr: [\"table\", \"tbody\"],\n td: [\"table\", \"tbody\", \"tr\"],\n th: [\"table\", \"tbody\", \"tr\"]\n};\nlet _detachedDoc = null;\nfunction detachedDoc() {\n return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument(\"title\"));\n}\nfunction readHTML(html) {\n let metas = /^(\\s*<meta [^>]*>)*/.exec(html);\n if (metas)\n html = html.slice(metas[0].length);\n let elt = detachedDoc().createElement(\"div\");\n let firstTag = /<([a-z][^>\\s]+)/i.exec(html), wrap;\n if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])\n html = wrap.map(n => \"<\" + n + \">\").join(\"\") + html + wrap.map(n => \"</\" + n + \">\").reverse().join(\"\");\n elt.innerHTML = html;\n if (wrap)\n for (let i = 0; i < wrap.length; i++)\n elt = elt.querySelector(wrap[i]) || elt;\n return elt;\n}\n// Webkit browsers do some hard-to-predict replacement of regular\n// spaces with non-breaking spaces when putting content on the\n// clipboard. This tries to convert such non-breaking spaces (which\n// will be wrapped in a plain span on Chrome, a span with class\n// Apple-converted-space on Safari) back to regular spaces.\nfunction restoreReplacedSpaces(dom) {\n let nodes = dom.querySelectorAll(chrome ? \"span:not([class]):not([style])\" : \"span.Apple-converted-space\");\n for (let i = 0; i < nodes.length; i++) {\n let node = nodes[i];\n if (node.childNodes.length == 1 && node.textContent == \"\\u00a0\" && node.parentNode)\n node.parentNode.replaceChild(dom.ownerDocument.createTextNode(\" \"), node);\n }\n}\nfunction addContext(slice, context) {\n if (!slice.size)\n return slice;\n let schema = slice.content.firstChild.type.schema, array;\n try {\n array = JSON.parse(context);\n }\n catch (e) {\n return slice;\n }\n let { content, openStart, openEnd } = slice;\n for (let i = array.length - 2; i >= 0; i -= 2) {\n let type = schema.nodes[array[i]];\n if (!type || type.hasRequiredAttrs())\n break;\n content = Fragment.from(type.create(array[i + 1], content));\n openStart++;\n openEnd++;\n }\n return new Slice(content, openStart, openEnd);\n}\n\n// A collection of DOM events that occur within the editor, and callback functions\n// to invoke when the event fires.\nconst handlers = {};\nconst editHandlers = {};\nconst passiveHandlers = { touchstart: true, touchmove: true };\nclass InputState {\n constructor() {\n this.shiftKey = false;\n this.mouseDown = null;\n this.lastKeyCode = null;\n this.lastKeyCodeTime = 0;\n this.lastClick = { time: 0, x: 0, y: 0, type: \"\" };\n this.lastSelectionOrigin = null;\n this.lastSelectionTime = 0;\n this.lastIOSEnter = 0;\n this.lastIOSEnterFallbackTimeout = -1;\n this.lastFocus = 0;\n this.lastTouch = 0;\n this.lastAndroidDelete = 0;\n this.composing = false;\n this.composingTimeout = -1;\n this.compositionNodes = [];\n this.compositionEndedAt = -2e8;\n this.domChangeCount = 0;\n this.eventHandlers = Object.create(null);\n this.hideSelectionGuard = null;\n }\n}\nfunction initInput(view) {\n for (let event in handlers) {\n let handler = handlers[event];\n view.dom.addEventListener(event, view.input.eventHandlers[event] = (event) => {\n if (eventBelongsToView(view, event) && !runCustomHandler(view, event) &&\n (view.editable || !(event.type in editHandlers)))\n handler(view, event);\n }, passiveHandlers[event] ? { passive: true } : undefined);\n }\n // On Safari, for reasons beyond my understanding, adding an input\n // event handler makes an issue where the composition vanishes when\n // you press enter go away.\n if (safari)\n view.dom.addEventListener(\"input\", () => null);\n ensureListeners(view);\n}\nfunction setSelectionOrigin(view, origin) {\n view.input.lastSelectionOrigin = origin;\n view.input.lastSelectionTime = Date.now();\n}\nfunction destroyInput(view) {\n view.domObserver.stop();\n for (let type in view.input.eventHandlers)\n view.dom.removeEventListener(type, view.input.eventHandlers[type]);\n clearTimeout(view.input.composingTimeout);\n clearTimeout(view.input.lastIOSEnterFallbackTimeout);\n}\nfunction ensureListeners(view) {\n view.someProp(\"handleDOMEvents\", currentHandlers => {\n for (let type in currentHandlers)\n if (!view.input.eventHandlers[type])\n view.dom.addEventListener(type, view.input.eventHandlers[type] = event => runCustomHandler(view, event));\n });\n}\nfunction runCustomHandler(view, event) {\n return view.someProp(\"handleDOMEvents\", handlers => {\n let handler = handlers[event.type];\n return handler ? handler(view, event) || event.defaultPrevented : false;\n });\n}\nfunction eventBelongsToView(view, event) {\n if (!event.bubbles)\n return true;\n if (event.defaultPrevented)\n return false;\n for (let node = event.target; node != view.dom; node = node.parentNode)\n if (!node || node.nodeType == 11 ||\n (node.pmViewDesc && node.pmViewDesc.stopEvent(event)))\n return false;\n return true;\n}\nfunction dispatchEvent(view, event) {\n if (!runCustomHandler(view, event) && handlers[event.type] &&\n (view.editable || !(event.type in editHandlers)))\n handlers[event.type](view, event);\n}\neditHandlers.keydown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.keyCode == 16 || event.shiftKey;\n if (inOrNearComposition(view, event))\n return;\n view.input.lastKeyCode = event.keyCode;\n view.input.lastKeyCodeTime = Date.now();\n // Suppress enter key events on Chrome Android, because those tend\n // to be part of a confused sequence of composition events fired,\n // and handling them eagerly tends to corrupt the input.\n if (android && chrome && event.keyCode == 13)\n return;\n if (event.keyCode != 229)\n view.domObserver.forceFlush();\n // On iOS, if we preventDefault enter key presses, the virtual\n // keyboard gets confused. So the hack here is to set a flag that\n // makes the DOM change code recognize that what just happens should\n // be replaced by whatever the Enter key handlers do.\n if (ios && event.keyCode == 13 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n let now = Date.now();\n view.input.lastIOSEnter = now;\n view.input.lastIOSEnterFallbackTimeout = setTimeout(() => {\n if (view.input.lastIOSEnter == now) {\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")));\n view.input.lastIOSEnter = 0;\n }\n }, 200);\n }\n else if (view.someProp(\"handleKeyDown\", f => f(view, event)) || captureKeyDown(view, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"key\");\n }\n};\neditHandlers.keyup = (view, event) => {\n if (event.keyCode == 16)\n view.input.shiftKey = false;\n};\neditHandlers.keypress = (view, _event) => {\n let event = _event;\n if (inOrNearComposition(view, event) || !event.charCode ||\n event.ctrlKey && !event.altKey || mac && event.metaKey)\n return;\n if (view.someProp(\"handleKeyPress\", f => f(view, event))) {\n event.preventDefault();\n return;\n }\n let sel = view.state.selection;\n if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {\n let text = String.fromCharCode(event.charCode);\n if (!view.someProp(\"handleTextInput\", f => f(view, sel.$from.pos, sel.$to.pos, text)))\n view.dispatch(view.state.tr.insertText(text).scrollIntoView());\n event.preventDefault();\n }\n};\nfunction eventCoords(event) { return { left: event.clientX, top: event.clientY }; }\nfunction isNear(event, click) {\n let dx = click.x - event.clientX, dy = click.y - event.clientY;\n return dx * dx + dy * dy < 100;\n}\nfunction runHandlerOnContext(view, propName, pos, inside, event) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n if (view.someProp(propName, f => i > $pos.depth ? f(view, pos, $pos.nodeAfter, $pos.before(i), event, true)\n : f(view, pos, $pos.node(i), $pos.before(i), event, false)))\n return true;\n }\n return false;\n}\nfunction updateSelection(view, selection, origin) {\n if (!view.focused)\n view.focus();\n let tr = view.state.tr.setSelection(selection);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n view.dispatch(tr);\n}\nfunction selectClickedLeaf(view, inside) {\n if (inside == -1)\n return false;\n let $pos = view.state.doc.resolve(inside), node = $pos.nodeAfter;\n if (node && node.isAtom && NodeSelection.isSelectable(node)) {\n updateSelection(view, new NodeSelection($pos), \"pointer\");\n return true;\n }\n return false;\n}\nfunction selectClickedNode(view, inside) {\n if (inside == -1)\n return false;\n let sel = view.state.selection, selectedNode, selectAt;\n if (sel instanceof NodeSelection)\n selectedNode = sel.node;\n let $pos = view.state.doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n if (NodeSelection.isSelectable(node)) {\n if (selectedNode && sel.$from.depth > 0 &&\n i >= sel.$from.depth && $pos.before(sel.$from.depth + 1) == sel.$from.pos)\n selectAt = $pos.before(sel.$from.depth);\n else\n selectAt = $pos.before(i);\n break;\n }\n }\n if (selectAt != null) {\n updateSelection(view, NodeSelection.create(view.state.doc, selectAt), \"pointer\");\n return true;\n }\n else {\n return false;\n }\n}\nfunction handleSingleClick(view, pos, inside, event, selectNode) {\n return runHandlerOnContext(view, \"handleClickOn\", pos, inside, event) ||\n view.someProp(\"handleClick\", f => f(view, pos, event)) ||\n (selectNode ? selectClickedNode(view, inside) : selectClickedLeaf(view, inside));\n}\nfunction handleDoubleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleDoubleClickOn\", pos, inside, event) ||\n view.someProp(\"handleDoubleClick\", f => f(view, pos, event));\n}\nfunction handleTripleClick(view, pos, inside, event) {\n return runHandlerOnContext(view, \"handleTripleClickOn\", pos, inside, event) ||\n view.someProp(\"handleTripleClick\", f => f(view, pos, event)) ||\n defaultTripleClick(view, inside, event);\n}\nfunction defaultTripleClick(view, inside, event) {\n if (event.button != 0)\n return false;\n let doc = view.state.doc;\n if (inside == -1) {\n if (doc.inlineContent) {\n updateSelection(view, TextSelection.create(doc, 0, doc.content.size), \"pointer\");\n return true;\n }\n return false;\n }\n let $pos = doc.resolve(inside);\n for (let i = $pos.depth + 1; i > 0; i--) {\n let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);\n let nodePos = $pos.before(i);\n if (node.inlineContent)\n updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size), \"pointer\");\n else if (NodeSelection.isSelectable(node))\n updateSelection(view, NodeSelection.create(doc, nodePos), \"pointer\");\n else\n continue;\n return true;\n }\n}\nfunction forceDOMFlush(view) {\n return endComposition(view);\n}\nconst selectNodeModifier = mac ? \"metaKey\" : \"ctrlKey\";\nhandlers.mousedown = (view, _event) => {\n let event = _event;\n view.input.shiftKey = event.shiftKey;\n let flushed = forceDOMFlush(view);\n let now = Date.now(), type = \"singleClick\";\n if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier]) {\n if (view.input.lastClick.type == \"singleClick\")\n type = \"doubleClick\";\n else if (view.input.lastClick.type == \"doubleClick\")\n type = \"tripleClick\";\n }\n view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type };\n let pos = view.posAtCoords(eventCoords(event));\n if (!pos)\n return;\n if (type == \"singleClick\") {\n if (view.input.mouseDown)\n view.input.mouseDown.done();\n view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);\n }\n else if ((type == \"doubleClick\" ? handleDoubleClick : handleTripleClick)(view, pos.pos, pos.inside, event)) {\n event.preventDefault();\n }\n else {\n setSelectionOrigin(view, \"pointer\");\n }\n};\nclass MouseDown {\n constructor(view, pos, event, flushed) {\n this.view = view;\n this.pos = pos;\n this.event = event;\n this.flushed = flushed;\n this.delayedSelectionSync = false;\n this.mightDrag = null;\n this.startDoc = view.state.doc;\n this.selectNode = !!event[selectNodeModifier];\n this.allowDefault = event.shiftKey;\n let targetNode, targetPos;\n if (pos.inside > -1) {\n targetNode = view.state.doc.nodeAt(pos.inside);\n targetPos = pos.inside;\n }\n else {\n let $pos = view.state.doc.resolve(pos.pos);\n targetNode = $pos.parent;\n targetPos = $pos.depth ? $pos.before() : 0;\n }\n const target = flushed ? null : event.target;\n const targetDesc = target ? view.docView.nearestDesc(target, true) : null;\n this.target = targetDesc ? targetDesc.dom : null;\n let { selection } = view.state;\n if (event.button == 0 &&\n targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||\n selection instanceof NodeSelection && selection.from <= targetPos && selection.to > targetPos)\n this.mightDrag = {\n node: targetNode,\n pos: targetPos,\n addAttr: !!(this.target && !this.target.draggable),\n setUneditable: !!(this.target && gecko && !this.target.hasAttribute(\"contentEditable\"))\n };\n if (this.target && this.mightDrag && (this.mightDrag.addAttr || this.mightDrag.setUneditable)) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.draggable = true;\n if (this.mightDrag.setUneditable)\n setTimeout(() => {\n if (this.view.input.mouseDown == this)\n this.target.setAttribute(\"contentEditable\", \"false\");\n }, 20);\n this.view.domObserver.start();\n }\n view.root.addEventListener(\"mouseup\", this.up = this.up.bind(this));\n view.root.addEventListener(\"mousemove\", this.move = this.move.bind(this));\n setSelectionOrigin(view, \"pointer\");\n }\n done() {\n this.view.root.removeEventListener(\"mouseup\", this.up);\n this.view.root.removeEventListener(\"mousemove\", this.move);\n if (this.mightDrag && this.target) {\n this.view.domObserver.stop();\n if (this.mightDrag.addAttr)\n this.target.removeAttribute(\"draggable\");\n if (this.mightDrag.setUneditable)\n this.target.removeAttribute(\"contentEditable\");\n this.view.domObserver.start();\n }\n if (this.delayedSelectionSync)\n setTimeout(() => selectionToDOM(this.view));\n this.view.input.mouseDown = null;\n }\n up(event) {\n this.done();\n if (!this.view.dom.contains(event.target))\n return;\n let pos = this.pos;\n if (this.view.state.doc != this.startDoc)\n pos = this.view.posAtCoords(eventCoords(event));\n this.updateAllowDefault(event);\n if (this.allowDefault || !pos) {\n setSelectionOrigin(this.view, \"pointer\");\n }\n else if (handleSingleClick(this.view, pos.pos, pos.inside, event, this.selectNode)) {\n event.preventDefault();\n }\n else if (event.button == 0 &&\n (this.flushed ||\n // Safari ignores clicks on draggable elements\n (safari && this.mightDrag && !this.mightDrag.node.isAtom) ||\n // Chrome will sometimes treat a node selection as a\n // cursor, but still report that the node is selected\n // when asked through getSelection. You'll then get a\n // situation where clicking at the point where that\n // (hidden) cursor is doesn't change the selection, and\n // thus doesn't get a reaction from ProseMirror. This\n // works around that.\n (chrome && !this.view.state.selection.visible &&\n Math.min(Math.abs(pos.pos - this.view.state.selection.from), Math.abs(pos.pos - this.view.state.selection.to)) <= 2))) {\n updateSelection(this.view, Selection.near(this.view.state.doc.resolve(pos.pos)), \"pointer\");\n event.preventDefault();\n }\n else {\n setSelectionOrigin(this.view, \"pointer\");\n }\n }\n move(event) {\n this.updateAllowDefault(event);\n setSelectionOrigin(this.view, \"pointer\");\n if (event.buttons == 0)\n this.done();\n }\n updateAllowDefault(event) {\n if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||\n Math.abs(this.event.y - event.clientY) > 4))\n this.allowDefault = true;\n }\n}\nhandlers.touchstart = view => {\n view.input.lastTouch = Date.now();\n forceDOMFlush(view);\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.touchmove = view => {\n view.input.lastTouch = Date.now();\n setSelectionOrigin(view, \"pointer\");\n};\nhandlers.contextmenu = view => forceDOMFlush(view);\nfunction inOrNearComposition(view, event) {\n if (view.composing)\n return true;\n // See https://www.stum.de/2016/06/24/handling-ime-events-in-javascript/.\n // On Japanese input method editors (IMEs), the Enter key is used to confirm character\n // selection. On Safari, when Enter is pressed, compositionend and keydown events are\n // emitted. The keydown event triggers newline insertion, which we don't want.\n // This method returns true if the keydown event should be ignored.\n // We only ignore it once, as pressing Enter a second time *should* insert a newline.\n // Furthermore, the keydown event timestamp must be close to the compositionEndedAt timestamp.\n // This guards against the case where compositionend is triggered without the keyboard\n // (e.g. character confirmation may be done with the mouse), and keydown is triggered\n // afterwards- we wouldn't want to ignore the keydown event in this case.\n if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {\n view.input.compositionEndedAt = -2e8;\n return true;\n }\n return false;\n}\n// Drop active composition after 5 seconds of inactivity on Android\nconst timeoutComposition = android ? 5000 : -1;\neditHandlers.compositionstart = editHandlers.compositionupdate = view => {\n if (!view.composing) {\n view.domObserver.flush();\n let { state } = view, $pos = state.selection.$from;\n if (state.selection.empty &&\n (state.storedMarks ||\n (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)))) {\n // Need to wrap the cursor in mark nodes different from the ones in the DOM context\n view.markCursor = view.state.storedMarks || $pos.marks();\n endComposition(view, true);\n view.markCursor = null;\n }\n else {\n endComposition(view);\n // In firefox, if the cursor is after but outside a marked node,\n // the inserted text won't inherit the marks. So this moves it\n // inside if necessary.\n if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {\n let sel = view.domSelectionRange();\n for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {\n let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];\n if (!before)\n break;\n if (before.nodeType == 3) {\n view.domSelection().collapse(before, before.nodeValue.length);\n break;\n }\n else {\n node = before;\n offset = -1;\n }\n }\n }\n }\n view.input.composing = true;\n }\n scheduleComposeEnd(view, timeoutComposition);\n};\neditHandlers.compositionend = (view, event) => {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = event.timeStamp;\n scheduleComposeEnd(view, 20);\n }\n};\nfunction scheduleComposeEnd(view, delay) {\n clearTimeout(view.input.composingTimeout);\n if (delay > -1)\n view.input.composingTimeout = setTimeout(() => endComposition(view), delay);\n}\nfunction clearComposition(view) {\n if (view.composing) {\n view.input.composing = false;\n view.input.compositionEndedAt = timestampFromCustomEvent();\n }\n while (view.input.compositionNodes.length > 0)\n view.input.compositionNodes.pop().markParentsDirty();\n}\nfunction timestampFromCustomEvent() {\n let event = document.createEvent(\"Event\");\n event.initEvent(\"event\", true, true);\n return event.timeStamp;\n}\n/**\n@internal\n*/\nfunction endComposition(view, forceUpdate = false) {\n if (android && view.domObserver.flushingSoon >= 0)\n return;\n view.domObserver.forceFlush();\n clearComposition(view);\n if (forceUpdate || view.docView && view.docView.dirty) {\n let sel = selectionFromDOM(view);\n if (sel && !sel.eq(view.state.selection))\n view.dispatch(view.state.tr.setSelection(sel));\n else\n view.updateState(view.state);\n return true;\n }\n return false;\n}\nfunction captureCopy(view, dom) {\n // The extra wrapper is somehow necessary on IE/Edge to prevent the\n // content from being mangled when it is put onto the clipboard\n if (!view.dom.parentNode)\n return;\n let wrap = view.dom.parentNode.appendChild(document.createElement(\"div\"));\n wrap.appendChild(dom);\n wrap.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n let sel = getSelection(), range = document.createRange();\n range.selectNodeContents(dom);\n // Done because IE will fire a selectionchange moving the selection\n // to its start when removeAllRanges is called and the editor still\n // has focus (which will mess up the editor's selection state).\n view.dom.blur();\n sel.removeAllRanges();\n sel.addRange(range);\n setTimeout(() => {\n if (wrap.parentNode)\n wrap.parentNode.removeChild(wrap);\n view.focus();\n }, 50);\n}\n// This is very crude, but unfortunately both these browsers _pretend_\n// that they have a clipboard API—all the objects and methods are\n// there, they just don't work, and they are hard to test.\nconst brokenClipboardAPI = (ie && ie_version < 15) ||\n (ios && webkit_version < 604);\nhandlers.copy = editHandlers.cut = (view, _event) => {\n let event = _event;\n let sel = view.state.selection, cut = event.type == \"cut\";\n if (sel.empty)\n return;\n // IE and Edge's clipboard interface is completely broken\n let data = brokenClipboardAPI ? null : event.clipboardData;\n let slice = sel.content(), { dom, text } = serializeForClipboard(view, slice);\n if (data) {\n event.preventDefault();\n data.clearData();\n data.setData(\"text/html\", dom.innerHTML);\n data.setData(\"text/plain\", text);\n }\n else {\n captureCopy(view, dom);\n }\n if (cut)\n view.dispatch(view.state.tr.deleteSelection().scrollIntoView().setMeta(\"uiEvent\", \"cut\"));\n};\nfunction sliceSingleNode(slice) {\n return slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1 ? slice.content.firstChild : null;\n}\nfunction capturePaste(view, event) {\n if (!view.dom.parentNode)\n return;\n let plainText = view.input.shiftKey || view.state.selection.$from.parent.type.spec.code;\n let target = view.dom.parentNode.appendChild(document.createElement(plainText ? \"textarea\" : \"div\"));\n if (!plainText)\n target.contentEditable = \"true\";\n target.style.cssText = \"position: fixed; left: -10000px; top: 10px\";\n target.focus();\n setTimeout(() => {\n view.focus();\n if (target.parentNode)\n target.parentNode.removeChild(target);\n if (plainText)\n doPaste(view, target.value, null, event);\n else\n doPaste(view, target.textContent, target.innerHTML, event);\n }, 50);\n}\nfunction doPaste(view, text, html, event) {\n let slice = parseFromClipboard(view, text, html, view.input.shiftKey, view.state.selection.$from);\n if (view.someProp(\"handlePaste\", f => f(view, event, slice || Slice.empty)))\n return true;\n if (!slice)\n return false;\n let singleNode = sliceSingleNode(slice);\n let tr = singleNode\n ? view.state.tr.replaceSelectionWith(singleNode, view.input.shiftKey)\n : view.state.tr.replaceSelection(slice);\n view.dispatch(tr.scrollIntoView().setMeta(\"paste\", true).setMeta(\"uiEvent\", \"paste\"));\n return true;\n}\neditHandlers.paste = (view, _event) => {\n let event = _event;\n // Handling paste from JavaScript during composition is very poorly\n // handled by browsers, so as a dodgy but preferable kludge, we just\n // let the browser do its native thing there, except on Android,\n // where the editor is almost always composing.\n if (view.composing && !android)\n return;\n let data = brokenClipboardAPI ? null : event.clipboardData;\n if (data && doPaste(view, data.getData(\"text/plain\"), data.getData(\"text/html\"), event))\n event.preventDefault();\n else\n capturePaste(view, event);\n};\nclass Dragging {\n constructor(slice, move) {\n this.slice = slice;\n this.move = move;\n }\n}\nconst dragCopyModifier = mac ? \"altKey\" : \"ctrlKey\";\nhandlers.dragstart = (view, _event) => {\n let event = _event;\n let mouseDown = view.input.mouseDown;\n if (mouseDown)\n mouseDown.done();\n if (!event.dataTransfer)\n return;\n let sel = view.state.selection;\n let pos = sel.empty ? null : view.posAtCoords(eventCoords(event));\n if (pos && pos.pos >= sel.from && pos.pos <= (sel instanceof NodeSelection ? sel.to - 1 : sel.to)) ;\n else if (mouseDown && mouseDown.mightDrag) {\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos)));\n }\n else if (event.target && event.target.nodeType == 1) {\n let desc = view.docView.nearestDesc(event.target, true);\n if (desc && desc.node.type.spec.draggable && desc != view.docView)\n view.dispatch(view.state.tr.setSelection(NodeSelection.create(view.state.doc, desc.posBefore)));\n }\n let slice = view.state.selection.content(), { dom, text } = serializeForClipboard(view, slice);\n event.dataTransfer.clearData();\n event.dataTransfer.setData(brokenClipboardAPI ? \"Text\" : \"text/html\", dom.innerHTML);\n // See https://github.com/ProseMirror/prosemirror/issues/1156\n event.dataTransfer.effectAllowed = \"copyMove\";\n if (!brokenClipboardAPI)\n event.dataTransfer.setData(\"text/plain\", text);\n view.dragging = new Dragging(slice, !event[dragCopyModifier]);\n};\nhandlers.dragend = view => {\n let dragging = view.dragging;\n window.setTimeout(() => {\n if (view.dragging == dragging)\n view.dragging = null;\n }, 50);\n};\neditHandlers.dragover = editHandlers.dragenter = (_, e) => e.preventDefault();\neditHandlers.drop = (view, _event) => {\n let event = _event;\n let dragging = view.dragging;\n view.dragging = null;\n if (!event.dataTransfer)\n return;\n let eventPos = view.posAtCoords(eventCoords(event));\n if (!eventPos)\n return;\n let $mouse = view.state.doc.resolve(eventPos.pos);\n let slice = dragging && dragging.slice;\n if (slice) {\n view.someProp(\"transformPasted\", f => { slice = f(slice, view); });\n }\n else {\n slice = parseFromClipboard(view, event.dataTransfer.getData(brokenClipboardAPI ? \"Text\" : \"text/plain\"), brokenClipboardAPI ? null : event.dataTransfer.getData(\"text/html\"), false, $mouse);\n }\n let move = !!(dragging && !event[dragCopyModifier]);\n if (view.someProp(\"handleDrop\", f => f(view, event, slice || Slice.empty, move))) {\n event.preventDefault();\n return;\n }\n if (!slice)\n return;\n event.preventDefault();\n let insertPos = slice ? dropPoint(view.state.doc, $mouse.pos, slice) : $mouse.pos;\n if (insertPos == null)\n insertPos = $mouse.pos;\n let tr = view.state.tr;\n if (move)\n tr.deleteSelection();\n let pos = tr.mapping.map(insertPos);\n let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1;\n let beforeInsert = tr.doc;\n if (isNode)\n tr.replaceRangeWith(pos, pos, slice.content.firstChild);\n else\n tr.replaceRange(pos, pos, slice);\n if (tr.doc.eq(beforeInsert))\n return;\n let $pos = tr.doc.resolve(pos);\n if (isNode && NodeSelection.isSelectable(slice.content.firstChild) &&\n $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild)) {\n tr.setSelection(new NodeSelection($pos));\n }\n else {\n let end = tr.mapping.map(insertPos);\n tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo);\n tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)));\n }\n view.focus();\n view.dispatch(tr.setMeta(\"uiEvent\", \"drop\"));\n};\nhandlers.focus = view => {\n view.input.lastFocus = Date.now();\n if (!view.focused) {\n view.domObserver.stop();\n view.dom.classList.add(\"ProseMirror-focused\");\n view.domObserver.start();\n view.focused = true;\n setTimeout(() => {\n if (view.docView && view.hasFocus() && !view.domObserver.currentSelection.eq(view.domSelectionRange()))\n selectionToDOM(view);\n }, 20);\n }\n};\nhandlers.blur = (view, _event) => {\n let event = _event;\n if (view.focused) {\n view.domObserver.stop();\n view.dom.classList.remove(\"ProseMirror-focused\");\n view.domObserver.start();\n if (event.relatedTarget && view.dom.contains(event.relatedTarget))\n view.domObserver.currentSelection.clear();\n view.focused = false;\n }\n};\nhandlers.beforeinput = (view, _event) => {\n let event = _event;\n // We should probably do more with beforeinput events, but support\n // is so spotty that I'm still waiting to see where they are going.\n // Very specific hack to deal with backspace sometimes failing on\n // Chrome Android when after an uneditable node.\n if (chrome && android && event.inputType == \"deleteContentBackward\") {\n view.domObserver.flushSoon();\n let { domChangeCount } = view.input;\n setTimeout(() => {\n if (view.input.domChangeCount != domChangeCount)\n return; // Event already had some effect\n // This bug tends to close the virtual keyboard, so we refocus\n view.dom.blur();\n view.focus();\n if (view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\"))))\n return;\n let { $cursor } = view.state.selection;\n // Crude approximation of backspace behavior when no command handled it\n if ($cursor && $cursor.pos > 0)\n view.dispatch(view.state.tr.delete($cursor.pos - 1, $cursor.pos).scrollIntoView());\n }, 50);\n }\n};\n// Make sure all handlers get registered\nfor (let prop in editHandlers)\n handlers[prop] = editHandlers[prop];\n\nfunction compareObjs(a, b) {\n if (a == b)\n return true;\n for (let p in a)\n if (a[p] !== b[p])\n return false;\n for (let p in b)\n if (!(p in a))\n return false;\n return true;\n}\nclass WidgetType {\n constructor(toDOM, spec) {\n this.toDOM = toDOM;\n this.spec = spec || noSpec;\n this.side = this.spec.side || 0;\n }\n map(mapping, span, offset, oldOffset) {\n let { pos, deleted } = mapping.mapResult(span.from + oldOffset, this.side < 0 ? -1 : 1);\n return deleted ? null : new Decoration(pos - offset, pos - offset, this);\n }\n valid() { return true; }\n eq(other) {\n return this == other ||\n (other instanceof WidgetType &&\n (this.spec.key && this.spec.key == other.spec.key ||\n this.toDOM == other.toDOM && compareObjs(this.spec, other.spec)));\n }\n destroy(node) {\n if (this.spec.destroy)\n this.spec.destroy(node);\n }\n}\nclass InlineType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.map(span.from + oldOffset, this.spec.inclusiveStart ? -1 : 1) - offset;\n let to = mapping.map(span.to + oldOffset, this.spec.inclusiveEnd ? 1 : -1) - offset;\n return from >= to ? null : new Decoration(from, to, this);\n }\n valid(_, span) { return span.from < span.to; }\n eq(other) {\n return this == other ||\n (other instanceof InlineType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n static is(span) { return span.type instanceof InlineType; }\n destroy() { }\n}\nclass NodeType {\n constructor(attrs, spec) {\n this.attrs = attrs;\n this.spec = spec || noSpec;\n }\n map(mapping, span, offset, oldOffset) {\n let from = mapping.mapResult(span.from + oldOffset, 1);\n if (from.deleted)\n return null;\n let to = mapping.mapResult(span.to + oldOffset, -1);\n if (to.deleted || to.pos <= from.pos)\n return null;\n return new Decoration(from.pos - offset, to.pos - offset, this);\n }\n valid(node, span) {\n let { index, offset } = node.content.findIndex(span.from), child;\n return offset == span.from && !(child = node.child(index)).isText && offset + child.nodeSize == span.to;\n }\n eq(other) {\n return this == other ||\n (other instanceof NodeType && compareObjs(this.attrs, other.attrs) &&\n compareObjs(this.spec, other.spec));\n }\n destroy() { }\n}\n/**\nDecoration objects can be provided to the view through the\n[`decorations` prop](https://prosemirror.net/docs/ref/#view.EditorProps.decorations). They come in\nseveral variants—see the static members of this class for details.\n*/\nclass Decoration {\n /**\n @internal\n */\n constructor(\n /**\n The start position of the decoration.\n */\n from, \n /**\n The end position. Will be the same as `from` for [widget\n decorations](https://prosemirror.net/docs/ref/#view.Decoration^widget).\n */\n to, \n /**\n @internal\n */\n type) {\n this.from = from;\n this.to = to;\n this.type = type;\n }\n /**\n @internal\n */\n copy(from, to) {\n return new Decoration(from, to, this.type);\n }\n /**\n @internal\n */\n eq(other, offset = 0) {\n return this.type.eq(other.type) && this.from + offset == other.from && this.to + offset == other.to;\n }\n /**\n @internal\n */\n map(mapping, offset, oldOffset) {\n return this.type.map(mapping, this, offset, oldOffset);\n }\n /**\n Creates a widget decoration, which is a DOM node that's shown in\n the document at the given position. It is recommended that you\n delay rendering the widget by passing a function that will be\n called when the widget is actually drawn in a view, but you can\n also directly pass a DOM node. `getPos` can be used to find the\n widget's current document position.\n */\n static widget(pos, toDOM, spec) {\n return new Decoration(pos, pos, new WidgetType(toDOM, spec));\n }\n /**\n Creates an inline decoration, which adds the given attributes to\n each inline node between `from` and `to`.\n */\n static inline(from, to, attrs, spec) {\n return new Decoration(from, to, new InlineType(attrs, spec));\n }\n /**\n Creates a node decoration. `from` and `to` should point precisely\n before and after a node in the document. That node, and only that\n node, will receive the given attributes.\n */\n static node(from, to, attrs, spec) {\n return new Decoration(from, to, new NodeType(attrs, spec));\n }\n /**\n The spec provided when creating this decoration. Can be useful\n if you've stored extra information in that object.\n */\n get spec() { return this.type.spec; }\n /**\n @internal\n */\n get inline() { return this.type instanceof InlineType; }\n}\nconst none = [], noSpec = {};\n/**\nA collection of [decorations](https://prosemirror.net/docs/ref/#view.Decoration), organized in such\na way that the drawing algorithm can efficiently use and compare\nthem. This is a persistent data structure—it is not modified,\nupdates create a new value.\n*/\nclass DecorationSet {\n /**\n @internal\n */\n constructor(local, children) {\n this.local = local.length ? local : none;\n this.children = children.length ? children : none;\n }\n /**\n Create a set of decorations, using the structure of the given\n document.\n */\n static create(doc, decorations) {\n return decorations.length ? buildTree(decorations, doc, 0, noSpec) : empty;\n }\n /**\n Find all decorations in this set which touch the given range\n (including decorations that start or end directly at the\n boundaries) and match the given predicate on their spec. When\n `start` and `end` are omitted, all decorations in the set are\n considered. When `predicate` isn't given, all decorations are\n assumed to match.\n */\n find(start, end, predicate) {\n let result = [];\n this.findInner(start == null ? 0 : start, end == null ? 1e9 : end, result, 0, predicate);\n return result;\n }\n findInner(start, end, result, offset, predicate) {\n for (let i = 0; i < this.local.length; i++) {\n let span = this.local[i];\n if (span.from <= end && span.to >= start && (!predicate || predicate(span.spec)))\n result.push(span.copy(span.from + offset, span.to + offset));\n }\n for (let i = 0; i < this.children.length; i += 3) {\n if (this.children[i] < end && this.children[i + 1] > start) {\n let childOff = this.children[i] + 1;\n this.children[i + 2].findInner(start - childOff, end - childOff, result, offset + childOff, predicate);\n }\n }\n }\n /**\n Map the set of decorations in response to a change in the\n document.\n */\n map(mapping, doc, options) {\n if (this == empty || mapping.maps.length == 0)\n return this;\n return this.mapInner(mapping, doc, 0, 0, options || noSpec);\n }\n /**\n @internal\n */\n mapInner(mapping, node, offset, oldOffset, options) {\n let newLocal;\n for (let i = 0; i < this.local.length; i++) {\n let mapped = this.local[i].map(mapping, offset, oldOffset);\n if (mapped && mapped.type.valid(node, mapped))\n (newLocal || (newLocal = [])).push(mapped);\n else if (options.onRemove)\n options.onRemove(this.local[i].spec);\n }\n if (this.children.length)\n return mapChildren(this.children, newLocal || [], mapping, node, offset, oldOffset, options);\n else\n return newLocal ? new DecorationSet(newLocal.sort(byPos), none) : empty;\n }\n /**\n Add the given array of decorations to the ones in the set,\n producing a new set. Needs access to the current document to\n create the appropriate tree structure.\n */\n add(doc, decorations) {\n if (!decorations.length)\n return this;\n if (this == empty)\n return DecorationSet.create(doc, decorations);\n return this.addInner(doc, decorations, 0);\n }\n addInner(doc, decorations, offset) {\n let children, childIndex = 0;\n doc.forEach((childNode, childOffset) => {\n let baseOffset = childOffset + offset, found;\n if (!(found = takeSpansForNode(decorations, childNode, baseOffset)))\n return;\n if (!children)\n children = this.children.slice();\n while (childIndex < children.length && children[childIndex] < childOffset)\n childIndex += 3;\n if (children[childIndex] == childOffset)\n children[childIndex + 2] = children[childIndex + 2].addInner(childNode, found, baseOffset + 1);\n else\n children.splice(childIndex, 0, childOffset, childOffset + childNode.nodeSize, buildTree(found, childNode, baseOffset + 1, noSpec));\n childIndex += 3;\n });\n let local = moveSpans(childIndex ? withoutNulls(decorations) : decorations, -offset);\n for (let i = 0; i < local.length; i++)\n if (!local[i].type.valid(doc, local[i]))\n local.splice(i--, 1);\n return new DecorationSet(local.length ? this.local.concat(local).sort(byPos) : this.local, children || this.children);\n }\n /**\n Create a new set that contains the decorations in this set, minus\n the ones in the given array.\n */\n remove(decorations) {\n if (decorations.length == 0 || this == empty)\n return this;\n return this.removeInner(decorations, 0);\n }\n removeInner(decorations, offset) {\n let children = this.children, local = this.local;\n for (let i = 0; i < children.length; i += 3) {\n let found;\n let from = children[i] + offset, to = children[i + 1] + offset;\n for (let j = 0, span; j < decorations.length; j++)\n if (span = decorations[j]) {\n if (span.from > from && span.to < to) {\n decorations[j] = null;\n (found || (found = [])).push(span);\n }\n }\n if (!found)\n continue;\n if (children == this.children)\n children = this.children.slice();\n let removed = children[i + 2].removeInner(found, from + 1);\n if (removed != empty) {\n children[i + 2] = removed;\n }\n else {\n children.splice(i, 3);\n i -= 3;\n }\n }\n if (local.length)\n for (let i = 0, span; i < decorations.length; i++)\n if (span = decorations[i]) {\n for (let j = 0; j < local.length; j++)\n if (local[j].eq(span, offset)) {\n if (local == this.local)\n local = this.local.slice();\n local.splice(j--, 1);\n }\n }\n if (children == this.children && local == this.local)\n return this;\n return local.length || children.length ? new DecorationSet(local, children) : empty;\n }\n /**\n @internal\n */\n forChild(offset, node) {\n if (this == empty)\n return this;\n if (node.isLeaf)\n return DecorationSet.empty;\n let child, local;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] >= offset) {\n if (this.children[i] == offset)\n child = this.children[i + 2];\n break;\n }\n let start = offset + 1, end = start + node.content.size;\n for (let i = 0; i < this.local.length; i++) {\n let dec = this.local[i];\n if (dec.from < end && dec.to > start && (dec.type instanceof InlineType)) {\n let from = Math.max(start, dec.from) - start, to = Math.min(end, dec.to) - start;\n if (from < to)\n (local || (local = [])).push(dec.copy(from, to));\n }\n }\n if (local) {\n let localSet = new DecorationSet(local.sort(byPos), none);\n return child ? new DecorationGroup([localSet, child]) : localSet;\n }\n return child || empty;\n }\n /**\n @internal\n */\n eq(other) {\n if (this == other)\n return true;\n if (!(other instanceof DecorationSet) ||\n this.local.length != other.local.length ||\n this.children.length != other.children.length)\n return false;\n for (let i = 0; i < this.local.length; i++)\n if (!this.local[i].eq(other.local[i]))\n return false;\n for (let i = 0; i < this.children.length; i += 3)\n if (this.children[i] != other.children[i] ||\n this.children[i + 1] != other.children[i + 1] ||\n !this.children[i + 2].eq(other.children[i + 2]))\n return false;\n return true;\n }\n /**\n @internal\n */\n locals(node) {\n return removeOverlap(this.localsInner(node));\n }\n /**\n @internal\n */\n localsInner(node) {\n if (this == empty)\n return none;\n if (node.inlineContent || !this.local.some(InlineType.is))\n return this.local;\n let result = [];\n for (let i = 0; i < this.local.length; i++) {\n if (!(this.local[i].type instanceof InlineType))\n result.push(this.local[i]);\n }\n return result;\n }\n}\n/**\nThe empty set of decorations.\n*/\nDecorationSet.empty = new DecorationSet([], []);\n/**\n@internal\n*/\nDecorationSet.removeOverlap = removeOverlap;\nconst empty = DecorationSet.empty;\n// An abstraction that allows the code dealing with decorations to\n// treat multiple DecorationSet objects as if it were a single object\n// with (a subset of) the same interface.\nclass DecorationGroup {\n constructor(members) {\n this.members = members;\n }\n map(mapping, doc) {\n const mappedDecos = this.members.map(member => member.map(mapping, doc, noSpec));\n return DecorationGroup.from(mappedDecos);\n }\n forChild(offset, child) {\n if (child.isLeaf)\n return DecorationSet.empty;\n let found = [];\n for (let i = 0; i < this.members.length; i++) {\n let result = this.members[i].forChild(offset, child);\n if (result == empty)\n continue;\n if (result instanceof DecorationGroup)\n found = found.concat(result.members);\n else\n found.push(result);\n }\n return DecorationGroup.from(found);\n }\n eq(other) {\n if (!(other instanceof DecorationGroup) ||\n other.members.length != this.members.length)\n return false;\n for (let i = 0; i < this.members.length; i++)\n if (!this.members[i].eq(other.members[i]))\n return false;\n return true;\n }\n locals(node) {\n let result, sorted = true;\n for (let i = 0; i < this.members.length; i++) {\n let locals = this.members[i].localsInner(node);\n if (!locals.length)\n continue;\n if (!result) {\n result = locals;\n }\n else {\n if (sorted) {\n result = result.slice();\n sorted = false;\n }\n for (let j = 0; j < locals.length; j++)\n result.push(locals[j]);\n }\n }\n return result ? removeOverlap(sorted ? result : result.sort(byPos)) : none;\n }\n // Create a group for the given array of decoration sets, or return\n // a single set when possible.\n static from(members) {\n switch (members.length) {\n case 0: return empty;\n case 1: return members[0];\n default: return new DecorationGroup(members.every(m => m instanceof DecorationSet) ? members :\n members.reduce((r, m) => r.concat(m instanceof DecorationSet ? m : m.members), []));\n }\n }\n}\nfunction mapChildren(oldChildren, newLocal, mapping, node, offset, oldOffset, options) {\n let children = oldChildren.slice();\n // Mark the children that are directly touched by changes, and\n // move those that are after the changes.\n for (let i = 0, baseOffset = oldOffset; i < mapping.maps.length; i++) {\n let moved = 0;\n mapping.maps[i].forEach((oldStart, oldEnd, newStart, newEnd) => {\n let dSize = (newEnd - newStart) - (oldEnd - oldStart);\n for (let i = 0; i < children.length; i += 3) {\n let end = children[i + 1];\n if (end < 0 || oldStart > end + baseOffset - moved)\n continue;\n let start = children[i] + baseOffset - moved;\n if (oldEnd >= start) {\n children[i + 1] = oldStart <= start ? -2 : -1;\n }\n else if (newStart >= offset && dSize) {\n children[i] += dSize;\n children[i + 1] += dSize;\n }\n }\n moved += dSize;\n });\n baseOffset = mapping.maps[i].map(baseOffset, -1);\n }\n // Find the child nodes that still correspond to a single node,\n // recursively call mapInner on them and update their positions.\n let mustRebuild = false;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) { // Touched nodes\n if (children[i + 1] == -2) {\n mustRebuild = true;\n children[i + 1] = -1;\n continue;\n }\n let from = mapping.map(oldChildren[i] + oldOffset), fromLocal = from - offset;\n if (fromLocal < 0 || fromLocal >= node.content.size) {\n mustRebuild = true;\n continue;\n }\n // Must read oldChildren because children was tagged with -1\n let to = mapping.map(oldChildren[i + 1] + oldOffset, -1), toLocal = to - offset;\n let { index, offset: childOffset } = node.content.findIndex(fromLocal);\n let childNode = node.maybeChild(index);\n if (childNode && childOffset == fromLocal && childOffset + childNode.nodeSize == toLocal) {\n let mapped = children[i + 2]\n .mapInner(mapping, childNode, from + 1, oldChildren[i] + oldOffset + 1, options);\n if (mapped != empty) {\n children[i] = fromLocal;\n children[i + 1] = toLocal;\n children[i + 2] = mapped;\n }\n else {\n children[i + 1] = -2;\n mustRebuild = true;\n }\n }\n else {\n mustRebuild = true;\n }\n }\n // Remaining children must be collected and rebuilt into the appropriate structure\n if (mustRebuild) {\n let decorations = mapAndGatherRemainingDecorations(children, oldChildren, newLocal, mapping, offset, oldOffset, options);\n let built = buildTree(decorations, node, 0, options);\n newLocal = built.local;\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] < 0) {\n children.splice(i, 3);\n i -= 3;\n }\n for (let i = 0, j = 0; i < built.children.length; i += 3) {\n let from = built.children[i];\n while (j < children.length && children[j] < from)\n j += 3;\n children.splice(j, 0, built.children[i], built.children[i + 1], built.children[i + 2]);\n }\n }\n return new DecorationSet(newLocal.sort(byPos), children);\n}\nfunction moveSpans(spans, offset) {\n if (!offset || !spans.length)\n return spans;\n let result = [];\n for (let i = 0; i < spans.length; i++) {\n let span = spans[i];\n result.push(new Decoration(span.from + offset, span.to + offset, span.type));\n }\n return result;\n}\nfunction mapAndGatherRemainingDecorations(children, oldChildren, decorations, mapping, offset, oldOffset, options) {\n // Gather all decorations from the remaining marked children\n function gather(set, oldOffset) {\n for (let i = 0; i < set.local.length; i++) {\n let mapped = set.local[i].map(mapping, offset, oldOffset);\n if (mapped)\n decorations.push(mapped);\n else if (options.onRemove)\n options.onRemove(set.local[i].spec);\n }\n for (let i = 0; i < set.children.length; i += 3)\n gather(set.children[i + 2], set.children[i] + oldOffset + 1);\n }\n for (let i = 0; i < children.length; i += 3)\n if (children[i + 1] == -1)\n gather(children[i + 2], oldChildren[i] + oldOffset + 1);\n return decorations;\n}\nfunction takeSpansForNode(spans, node, offset) {\n if (node.isLeaf)\n return null;\n let end = offset + node.nodeSize, found = null;\n for (let i = 0, span; i < spans.length; i++) {\n if ((span = spans[i]) && span.from > offset && span.to < end) {\n (found || (found = [])).push(span);\n spans[i] = null;\n }\n }\n return found;\n}\nfunction withoutNulls(array) {\n let result = [];\n for (let i = 0; i < array.length; i++)\n if (array[i] != null)\n result.push(array[i]);\n return result;\n}\n// Build up a tree that corresponds to a set of decorations. `offset`\n// is a base offset that should be subtracted from the `from` and `to`\n// positions in the spans (so that we don't have to allocate new spans\n// for recursive calls).\nfunction buildTree(spans, node, offset, options) {\n let children = [], hasNulls = false;\n node.forEach((childNode, localStart) => {\n let found = takeSpansForNode(spans, childNode, localStart + offset);\n if (found) {\n hasNulls = true;\n let subtree = buildTree(found, childNode, offset + localStart + 1, options);\n if (subtree != empty)\n children.push(localStart, localStart + childNode.nodeSize, subtree);\n }\n });\n let locals = moveSpans(hasNulls ? withoutNulls(spans) : spans, -offset).sort(byPos);\n for (let i = 0; i < locals.length; i++)\n if (!locals[i].type.valid(node, locals[i])) {\n if (options.onRemove)\n options.onRemove(locals[i].spec);\n locals.splice(i--, 1);\n }\n return locals.length || children.length ? new DecorationSet(locals, children) : empty;\n}\n// Used to sort decorations so that ones with a low start position\n// come first, and within a set with the same start position, those\n// with an smaller end position come first.\nfunction byPos(a, b) {\n return a.from - b.from || a.to - b.to;\n}\n// Scan a sorted array of decorations for partially overlapping spans,\n// and split those so that only fully overlapping spans are left (to\n// make subsequent rendering easier). Will return the input array if\n// no partially overlapping spans are found (the common case).\nfunction removeOverlap(spans) {\n let working = spans;\n for (let i = 0; i < working.length - 1; i++) {\n let span = working[i];\n if (span.from != span.to)\n for (let j = i + 1; j < working.length; j++) {\n let next = working[j];\n if (next.from == span.from) {\n if (next.to != span.to) {\n if (working == spans)\n working = spans.slice();\n // Followed by a partially overlapping larger span. Split that\n // span.\n working[j] = next.copy(next.from, span.to);\n insertAhead(working, j + 1, next.copy(span.to, next.to));\n }\n continue;\n }\n else {\n if (next.from < span.to) {\n if (working == spans)\n working = spans.slice();\n // The end of this one overlaps with a subsequent span. Split\n // this one.\n working[i] = span.copy(span.from, next.from);\n insertAhead(working, j, span.copy(next.from, span.to));\n }\n break;\n }\n }\n }\n return working;\n}\nfunction insertAhead(array, i, deco) {\n while (i < array.length && byPos(deco, array[i]) > 0)\n i++;\n array.splice(i, 0, deco);\n}\n// Get the decorations associated with the current props of a view.\nfunction viewDecorations(view) {\n let found = [];\n view.someProp(\"decorations\", f => {\n let result = f(view.state);\n if (result && result != empty)\n found.push(result);\n });\n if (view.cursorWrapper)\n found.push(DecorationSet.create(view.state.doc, [view.cursorWrapper.deco]));\n return DecorationGroup.from(found);\n}\n\nconst observeOptions = {\n childList: true,\n characterData: true,\n characterDataOldValue: true,\n attributes: true,\n attributeOldValue: true,\n subtree: true\n};\n// IE11 has very broken mutation observers, so we also listen to DOMCharacterDataModified\nconst useCharData = ie && ie_version <= 11;\nclass SelectionState {\n constructor() {\n this.anchorNode = null;\n this.anchorOffset = 0;\n this.focusNode = null;\n this.focusOffset = 0;\n }\n set(sel) {\n this.anchorNode = sel.anchorNode;\n this.anchorOffset = sel.anchorOffset;\n this.focusNode = sel.focusNode;\n this.focusOffset = sel.focusOffset;\n }\n clear() {\n this.anchorNode = this.focusNode = null;\n }\n eq(sel) {\n return sel.anchorNode == this.anchorNode && sel.anchorOffset == this.anchorOffset &&\n sel.focusNode == this.focusNode && sel.focusOffset == this.focusOffset;\n }\n}\nclass DOMObserver {\n constructor(view, handleDOMChange) {\n this.view = view;\n this.handleDOMChange = handleDOMChange;\n this.queue = [];\n this.flushingSoon = -1;\n this.observer = null;\n this.currentSelection = new SelectionState;\n this.onCharData = null;\n this.suppressingSelectionUpdates = false;\n this.observer = window.MutationObserver &&\n new window.MutationObserver(mutations => {\n for (let i = 0; i < mutations.length; i++)\n this.queue.push(mutations[i]);\n // IE11 will sometimes (on backspacing out a single character\n // text node after a BR node) call the observer callback\n // before actually updating the DOM, which will cause\n // ProseMirror to miss the change (see #930)\n if (ie && ie_version <= 11 && mutations.some(m => m.type == \"childList\" && m.removedNodes.length ||\n m.type == \"characterData\" && m.oldValue.length > m.target.nodeValue.length))\n this.flushSoon();\n else\n this.flush();\n });\n if (useCharData) {\n this.onCharData = e => {\n this.queue.push({ target: e.target, type: \"characterData\", oldValue: e.prevValue });\n this.flushSoon();\n };\n }\n this.onSelectionChange = this.onSelectionChange.bind(this);\n }\n flushSoon() {\n if (this.flushingSoon < 0)\n this.flushingSoon = window.setTimeout(() => { this.flushingSoon = -1; this.flush(); }, 20);\n }\n forceFlush() {\n if (this.flushingSoon > -1) {\n window.clearTimeout(this.flushingSoon);\n this.flushingSoon = -1;\n this.flush();\n }\n }\n start() {\n if (this.observer) {\n this.observer.takeRecords();\n this.observer.observe(this.view.dom, observeOptions);\n }\n if (this.onCharData)\n this.view.dom.addEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.connectSelection();\n }\n stop() {\n if (this.observer) {\n let take = this.observer.takeRecords();\n if (take.length) {\n for (let i = 0; i < take.length; i++)\n this.queue.push(take[i]);\n window.setTimeout(() => this.flush(), 20);\n }\n this.observer.disconnect();\n }\n if (this.onCharData)\n this.view.dom.removeEventListener(\"DOMCharacterDataModified\", this.onCharData);\n this.disconnectSelection();\n }\n connectSelection() {\n this.view.dom.ownerDocument.addEventListener(\"selectionchange\", this.onSelectionChange);\n }\n disconnectSelection() {\n this.view.dom.ownerDocument.removeEventListener(\"selectionchange\", this.onSelectionChange);\n }\n suppressSelectionUpdates() {\n this.suppressingSelectionUpdates = true;\n setTimeout(() => this.suppressingSelectionUpdates = false, 50);\n }\n onSelectionChange() {\n if (!hasFocusAndSelection(this.view))\n return;\n if (this.suppressingSelectionUpdates)\n return selectionToDOM(this.view);\n // Deletions on IE11 fire their events in the wrong order, giving\n // us a selection change event before the DOM changes are\n // reported.\n if (ie && ie_version <= 11 && !this.view.state.selection.empty) {\n let sel = this.view.domSelectionRange();\n // Selection.isCollapsed isn't reliable on IE\n if (sel.focusNode && isEquivalentPosition(sel.focusNode, sel.focusOffset, sel.anchorNode, sel.anchorOffset))\n return this.flushSoon();\n }\n this.flush();\n }\n setCurSelection() {\n this.currentSelection.set(this.view.domSelectionRange());\n }\n ignoreSelectionChange(sel) {\n if (!sel.focusNode)\n return true;\n let ancestors = new Set, container;\n for (let scan = sel.focusNode; scan; scan = parentNode(scan))\n ancestors.add(scan);\n for (let scan = sel.anchorNode; scan; scan = parentNode(scan))\n if (ancestors.has(scan)) {\n container = scan;\n break;\n }\n let desc = container && this.view.docView.nearestDesc(container);\n if (desc && desc.ignoreMutation({\n type: \"selection\",\n target: container.nodeType == 3 ? container.parentNode : container\n })) {\n this.setCurSelection();\n return true;\n }\n }\n flush() {\n let { view } = this;\n if (!view.docView || this.flushingSoon > -1)\n return;\n let mutations = this.observer ? this.observer.takeRecords() : [];\n if (this.queue.length) {\n mutations = this.queue.concat(mutations);\n this.queue.length = 0;\n }\n let sel = view.domSelectionRange();\n let newSel = !this.suppressingSelectionUpdates && !this.currentSelection.eq(sel) && hasFocusAndSelection(view) && !this.ignoreSelectionChange(sel);\n let from = -1, to = -1, typeOver = false, added = [];\n if (view.editable) {\n for (let i = 0; i < mutations.length; i++) {\n let result = this.registerMutation(mutations[i], added);\n if (result) {\n from = from < 0 ? result.from : Math.min(result.from, from);\n to = to < 0 ? result.to : Math.max(result.to, to);\n if (result.typeOver)\n typeOver = true;\n }\n }\n }\n if (gecko && added.length > 1) {\n let brs = added.filter(n => n.nodeName == \"BR\");\n if (brs.length == 2) {\n let a = brs[0], b = brs[1];\n if (a.parentNode && a.parentNode.parentNode == b.parentNode)\n b.remove();\n else\n a.remove();\n }\n }\n let readSel = null;\n // If it looks like the browser has reset the selection to the\n // start of the document after focus, restore the selection from\n // the state\n if (from < 0 && newSel && view.input.lastFocus > Date.now() - 200 &&\n view.input.lastTouch < Date.now() - 300 &&\n selectionCollapsed(sel) && (readSel = selectionFromDOM(view)) &&\n readSel.eq(Selection.near(view.state.doc.resolve(0), 1))) {\n view.input.lastFocus = 0;\n selectionToDOM(view);\n this.currentSelection.set(sel);\n view.scrollToSelection();\n }\n else if (from > -1 || newSel) {\n if (from > -1) {\n view.docView.markDirty(from, to);\n checkCSS(view);\n }\n this.handleDOMChange(from, to, typeOver, added);\n if (view.docView && view.docView.dirty)\n view.updateState(view.state);\n else if (!this.currentSelection.eq(sel))\n selectionToDOM(view);\n this.currentSelection.set(sel);\n }\n }\n registerMutation(mut, added) {\n // Ignore mutations inside nodes that were already noted as inserted\n if (added.indexOf(mut.target) > -1)\n return null;\n let desc = this.view.docView.nearestDesc(mut.target);\n if (mut.type == \"attributes\" &&\n (desc == this.view.docView || mut.attributeName == \"contenteditable\" ||\n // Firefox sometimes fires spurious events for null/empty styles\n (mut.attributeName == \"style\" && !mut.oldValue && !mut.target.getAttribute(\"style\"))))\n return null;\n if (!desc || desc.ignoreMutation(mut))\n return null;\n if (mut.type == \"childList\") {\n for (let i = 0; i < mut.addedNodes.length; i++)\n added.push(mut.addedNodes[i]);\n if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))\n return { from: desc.posBefore, to: desc.posAfter };\n let prev = mut.previousSibling, next = mut.nextSibling;\n if (ie && ie_version <= 11 && mut.addedNodes.length) {\n // IE11 gives us incorrect next/prev siblings for some\n // insertions, so if there are added nodes, recompute those\n for (let i = 0; i < mut.addedNodes.length; i++) {\n let { previousSibling, nextSibling } = mut.addedNodes[i];\n if (!previousSibling || Array.prototype.indexOf.call(mut.addedNodes, previousSibling) < 0)\n prev = previousSibling;\n if (!nextSibling || Array.prototype.indexOf.call(mut.addedNodes, nextSibling) < 0)\n next = nextSibling;\n }\n }\n let fromOffset = prev && prev.parentNode == mut.target\n ? domIndex(prev) + 1 : 0;\n let from = desc.localPosFromDOM(mut.target, fromOffset, -1);\n let toOffset = next && next.parentNode == mut.target\n ? domIndex(next) : mut.target.childNodes.length;\n let to = desc.localPosFromDOM(mut.target, toOffset, 1);\n return { from, to };\n }\n else if (mut.type == \"attributes\") {\n return { from: desc.posAtStart - desc.border, to: desc.posAtEnd + desc.border };\n }\n else { // \"characterData\"\n return {\n from: desc.posAtStart,\n to: desc.posAtEnd,\n // An event was generated for a text change that didn't change\n // any text. Mark the dom change to fall back to assuming the\n // selection was typed over with an identical value if it can't\n // find another change.\n typeOver: mut.target.nodeValue == mut.oldValue\n };\n }\n }\n}\nlet cssChecked = new WeakMap();\nlet cssCheckWarned = false;\nfunction checkCSS(view) {\n if (cssChecked.has(view))\n return;\n cssChecked.set(view, null);\n if (['normal', 'nowrap', 'pre-line'].indexOf(getComputedStyle(view.dom).whiteSpace) !== -1) {\n view.requiresGeckoHackNode = gecko;\n if (cssCheckWarned)\n return;\n console[\"warn\"](\"ProseMirror expects the CSS white-space property to be set, preferably to 'pre-wrap'. It is recommended to load style/prosemirror.css from the prosemirror-view package.\");\n cssCheckWarned = true;\n }\n}\n// Used to work around a Safari Selection/shadow DOM bug\n// Based on https://github.com/codemirror/dev/issues/414 fix\nfunction safariShadowSelectionRange(view) {\n let found;\n function read(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n found = event.getTargetRanges()[0];\n }\n // Because Safari (at least in 2018-2022) doesn't provide regular\n // access to the selection inside a shadowRoot, we have to perform a\n // ridiculous hack to get at it—using `execCommand` to trigger a\n // `beforeInput` event so that we can read the target range from the\n // event.\n view.dom.addEventListener(\"beforeinput\", read, true);\n document.execCommand(\"indent\");\n view.dom.removeEventListener(\"beforeinput\", read, true);\n let anchorNode = found.startContainer, anchorOffset = found.startOffset;\n let focusNode = found.endContainer, focusOffset = found.endOffset;\n let currentAnchor = view.domAtPos(view.state.selection.anchor);\n // Since such a range doesn't distinguish between anchor and head,\n // use a heuristic that flips it around if its end matches the\n // current anchor.\n if (isEquivalentPosition(currentAnchor.node, currentAnchor.offset, focusNode, focusOffset))\n [anchorNode, anchorOffset, focusNode, focusOffset] = [focusNode, focusOffset, anchorNode, anchorOffset];\n return { anchorNode, anchorOffset, focusNode, focusOffset };\n}\n\n// Note that all referencing and parsing is done with the\n// start-of-operation selection and document, since that's the one\n// that the DOM represents. If any changes came in in the meantime,\n// the modification is mapped over those before it is applied, in\n// readDOMChange.\nfunction parseBetween(view, from_, to_) {\n let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);\n let domSel = view.domSelectionRange();\n let find;\n let anchor = domSel.anchorNode;\n if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {\n find = [{ node: anchor, offset: domSel.anchorOffset }];\n if (!selectionCollapsed(domSel))\n find.push({ node: domSel.focusNode, offset: domSel.focusOffset });\n }\n // Work around issue in Chrome where backspacing sometimes replaces\n // the deleted content with a random BR node (issues #799, #831)\n if (chrome && view.input.lastKeyCode === 8) {\n for (let off = toOffset; off > fromOffset; off--) {\n let node = parent.childNodes[off - 1], desc = node.pmViewDesc;\n if (node.nodeName == \"BR\" && !desc) {\n toOffset = off;\n break;\n }\n if (!desc || desc.size)\n break;\n }\n }\n let startDoc = view.state.doc;\n let parser = view.someProp(\"domParser\") || DOMParser.fromSchema(view.state.schema);\n let $from = startDoc.resolve(from);\n let sel = null, doc = parser.parse(parent, {\n topNode: $from.parent,\n topMatch: $from.parent.contentMatchAt($from.index()),\n topOpen: true,\n from: fromOffset,\n to: toOffset,\n preserveWhitespace: $from.parent.type.whitespace == \"pre\" ? \"full\" : true,\n findPositions: find,\n ruleFromNode,\n context: $from\n });\n if (find && find[0].pos != null) {\n let anchor = find[0].pos, head = find[1] && find[1].pos;\n if (head == null)\n head = anchor;\n sel = { anchor: anchor + from, head: head + from };\n }\n return { doc, sel, from, to };\n}\nfunction ruleFromNode(dom) {\n let desc = dom.pmViewDesc;\n if (desc) {\n return desc.parseRule();\n }\n else if (dom.nodeName == \"BR\" && dom.parentNode) {\n // Safari replaces the list item or table cell with a BR\n // directly in the list node (?!) if you delete the last\n // character in a list item or table cell (#708, #862)\n if (safari && /^(ul|ol)$/i.test(dom.parentNode.nodeName)) {\n let skip = document.createElement(\"div\");\n skip.appendChild(document.createElement(\"li\"));\n return { skip };\n }\n else if (dom.parentNode.lastChild == dom || safari && /^(tr|table)$/i.test(dom.parentNode.nodeName)) {\n return { ignore: true };\n }\n }\n else if (dom.nodeName == \"IMG\" && dom.getAttribute(\"mark-placeholder\")) {\n return { ignore: true };\n }\n return null;\n}\nfunction readDOMChange(view, from, to, typeOver, addedNodes) {\n if (from < 0) {\n let origin = view.input.lastSelectionTime > Date.now() - 50 ? view.input.lastSelectionOrigin : null;\n let newSel = selectionFromDOM(view, origin);\n if (newSel && !view.state.selection.eq(newSel)) {\n let tr = view.state.tr.setSelection(newSel);\n if (origin == \"pointer\")\n tr.setMeta(\"pointer\", true);\n else if (origin == \"key\")\n tr.scrollIntoView();\n view.dispatch(tr);\n }\n return;\n }\n let $before = view.state.doc.resolve(from);\n let shared = $before.sharedDepth(to);\n from = $before.before(shared + 1);\n to = view.state.doc.resolve(to).after(shared + 1);\n let sel = view.state.selection;\n let parse = parseBetween(view, from, to);\n let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);\n let preferredPos, preferredSide;\n // Prefer anchoring to end when Backspace is pressed\n if (view.input.lastKeyCode === 8 && Date.now() - 100 < view.input.lastKeyCodeTime) {\n preferredPos = view.state.selection.to;\n preferredSide = \"end\";\n }\n else {\n preferredPos = view.state.selection.from;\n preferredSide = \"start\";\n }\n view.input.lastKeyCode = null;\n let change = findDiff(compare.content, parse.doc.content, parse.from, preferredPos, preferredSide);\n if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&\n addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\" || n.nodeName == \"LI\") &&\n (!change || change.endA >= change.endB) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n if (!change) {\n if (typeOver && sel instanceof TextSelection && !sel.empty && sel.$head.sameParent(sel.$anchor) &&\n !view.composing && !(parse.sel && parse.sel.anchor != parse.sel.head)) {\n change = { start: sel.from, endA: sel.to, endB: sel.to };\n }\n else {\n if (parse.sel) {\n let sel = resolveSelection(view, view.state.doc, parse.sel);\n if (sel && !sel.eq(view.state.selection))\n view.dispatch(view.state.tr.setSelection(sel));\n }\n return;\n }\n }\n // Chrome sometimes leaves the cursor before the inserted text when\n // composing after a cursor wrapper. This moves it forward.\n if (chrome && view.cursorWrapper && parse.sel && parse.sel.anchor == view.cursorWrapper.deco.from &&\n parse.sel.head == parse.sel.anchor) {\n let size = change.endB - change.start;\n parse.sel = { anchor: parse.sel.anchor + size, head: parse.sel.anchor + size };\n }\n view.input.domChangeCount++;\n // Handle the case where overwriting a selection by typing matches\n // the start or end of the selected content, creating a change\n // that's smaller than what was actually overwritten.\n if (view.state.selection.from < view.state.selection.to &&\n change.start == change.endB &&\n view.state.selection instanceof TextSelection) {\n if (change.start > view.state.selection.from && change.start <= view.state.selection.from + 2 &&\n view.state.selection.from >= parse.from) {\n change.start = view.state.selection.from;\n }\n else if (change.endA < view.state.selection.to && change.endA >= view.state.selection.to - 2 &&\n view.state.selection.to <= parse.to) {\n change.endB += (view.state.selection.to - change.endA);\n change.endA = view.state.selection.to;\n }\n }\n // IE11 will insert a non-breaking space _ahead_ of the space after\n // the cursor space when adding a space before another space. When\n // that happened, adjust the change to cover the space instead.\n if (ie && ie_version <= 11 && change.endB == change.start + 1 &&\n change.endA == change.start && change.start > parse.from &&\n parse.doc.textBetween(change.start - parse.from - 1, change.start - parse.from + 1) == \" \\u00a0\") {\n change.start--;\n change.endA--;\n change.endB--;\n }\n let $from = parse.doc.resolveNoCache(change.start - parse.from);\n let $to = parse.doc.resolveNoCache(change.endB - parse.from);\n let $fromA = doc.resolve(change.start);\n let inlineChange = $from.sameParent($to) && $from.parent.inlineContent && $fromA.end() >= change.endA;\n let nextSel;\n // If this looks like the effect of pressing Enter (or was recorded\n // as being an iOS enter press), just dispatch an Enter key instead.\n if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&\n (!inlineChange || addedNodes.some(n => n.nodeName == \"DIV\" || n.nodeName == \"P\"))) ||\n (!inlineChange && $from.pos < parse.doc.content.size &&\n (nextSel = Selection.findFrom(parse.doc.resolve($from.pos + 1), 1, true)) &&\n nextSel.head == $to.pos)) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(13, \"Enter\")))) {\n view.input.lastIOSEnter = 0;\n return;\n }\n // Same for backspace\n if (view.state.selection.anchor > change.start &&\n looksLikeJoin(doc, change.start, change.endA, $from, $to) &&\n view.someProp(\"handleKeyDown\", f => f(view, keyEvent(8, \"Backspace\")))) {\n if (android && chrome)\n view.domObserver.suppressSelectionUpdates(); // #820\n return;\n }\n // Chrome Android will occasionally, during composition, delete the\n // entire composition and then immediately insert it again. This is\n // used to detect that situation.\n if (chrome && android && change.endB == change.start)\n view.input.lastAndroidDelete = Date.now();\n // This tries to detect Android virtual keyboard\n // enter-and-pick-suggestion action. That sometimes (see issue\n // #1059) first fires a DOM mutation, before moving the selection to\n // the newly created block. And then, because ProseMirror cleans up\n // the DOM selection, it gives up moving the selection entirely,\n // leaving the cursor in the wrong place. When that happens, we drop\n // the new paragraph from the initial change, and fire a simulated\n // enter key afterwards.\n if (android && !inlineChange && $from.start() != $to.start() && $to.parentOffset == 0 && $from.depth == $to.depth &&\n parse.sel && parse.sel.anchor == parse.sel.head && parse.sel.head == change.endA) {\n change.endB -= 2;\n $to = parse.doc.resolveNoCache(change.endB - parse.from);\n setTimeout(() => {\n view.someProp(\"handleKeyDown\", function (f) { return f(view, keyEvent(13, \"Enter\")); });\n }, 20);\n }\n let chFrom = change.start, chTo = change.endA;\n let tr, storedMarks, markChange;\n if (inlineChange) {\n if ($from.pos == $to.pos) { // Deletion\n // IE11 sometimes weirdly moves the DOM selection around after\n // backspacing out the first element in a textblock\n if (ie && ie_version <= 11 && $from.parentOffset == 0) {\n view.domObserver.suppressSelectionUpdates();\n setTimeout(() => selectionToDOM(view), 20);\n }\n tr = view.state.tr.delete(chFrom, chTo);\n storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));\n }\n else if ( // Adding or removing a mark\n change.endA == change.endB &&\n (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {\n tr = view.state.tr;\n if (markChange.type == \"add\")\n tr.addMark(chFrom, chTo, markChange.mark);\n else\n tr.removeMark(chFrom, chTo, markChange.mark);\n }\n else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {\n // Both positions in the same text node -- simply insert text\n let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);\n if (view.someProp(\"handleTextInput\", f => f(view, chFrom, chTo, text)))\n return;\n tr = view.state.tr.insertText(text, chFrom, chTo);\n }\n }\n if (!tr)\n tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));\n if (parse.sel) {\n let sel = resolveSelection(view, tr.doc, parse.sel);\n // Chrome Android will sometimes, during composition, report the\n // selection in the wrong place. If it looks like that is\n // happening, don't update the selection.\n // Edge just doesn't move the cursor forward when you start typing\n // in an empty block or between br nodes.\n if (sel && !(chrome && android && view.composing && sel.empty &&\n (change.start != change.endB || view.input.lastAndroidDelete < Date.now() - 100) &&\n (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||\n ie && sel.empty && sel.head == chFrom))\n tr.setSelection(sel);\n }\n if (storedMarks)\n tr.ensureMarks(storedMarks);\n view.dispatch(tr.scrollIntoView());\n}\nfunction resolveSelection(view, doc, parsedSel) {\n if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size)\n return null;\n return selectionBetween(view, doc.resolve(parsedSel.anchor), doc.resolve(parsedSel.head));\n}\n// Given two same-length, non-empty fragments of inline content,\n// determine whether the first could be created from the second by\n// removing or adding a single mark type.\nfunction isMarkChange(cur, prev) {\n let curMarks = cur.firstChild.marks, prevMarks = prev.firstChild.marks;\n let added = curMarks, removed = prevMarks, type, mark, update;\n for (let i = 0; i < prevMarks.length; i++)\n added = prevMarks[i].removeFromSet(added);\n for (let i = 0; i < curMarks.length; i++)\n removed = curMarks[i].removeFromSet(removed);\n if (added.length == 1 && removed.length == 0) {\n mark = added[0];\n type = \"add\";\n update = (node) => node.mark(mark.addToSet(node.marks));\n }\n else if (added.length == 0 && removed.length == 1) {\n mark = removed[0];\n type = \"remove\";\n update = (node) => node.mark(mark.removeFromSet(node.marks));\n }\n else {\n return null;\n }\n let updated = [];\n for (let i = 0; i < prev.childCount; i++)\n updated.push(update(prev.child(i)));\n if (Fragment.from(updated).eq(cur))\n return { mark, type };\n}\nfunction looksLikeJoin(old, start, end, $newStart, $newEnd) {\n if (!$newStart.parent.isTextblock ||\n // The content must have shrunk\n end - start <= $newEnd.pos - $newStart.pos ||\n // newEnd must point directly at or after the end of the block that newStart points into\n skipClosingAndOpening($newStart, true, false) < $newEnd.pos)\n return false;\n let $start = old.resolve(start);\n // Start must be at the end of a block\n if ($start.parentOffset < $start.parent.content.size || !$start.parent.isTextblock)\n return false;\n let $next = old.resolve(skipClosingAndOpening($start, true, true));\n // The next textblock must start before end and end near it\n if (!$next.parent.isTextblock || $next.pos > end ||\n skipClosingAndOpening($next, true, false) < end)\n return false;\n // The fragments after the join point must match\n return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);\n}\nfunction skipClosingAndOpening($pos, fromEnd, mayOpen) {\n let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;\n while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {\n depth--;\n end++;\n fromEnd = false;\n }\n if (mayOpen) {\n let next = $pos.node(depth).maybeChild($pos.indexAfter(depth));\n while (next && !next.isLeaf) {\n next = next.firstChild;\n end++;\n }\n }\n return end;\n}\nfunction findDiff(a, b, pos, preferredPos, preferredSide) {\n let start = a.findDiffStart(b, pos);\n if (start == null)\n return null;\n let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size);\n if (preferredSide == \"end\") {\n let adjust = Math.max(0, start - Math.min(endA, endB));\n preferredPos -= endA + adjust - start;\n }\n if (endA < start && a.size < b.size) {\n let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;\n start -= move;\n endB = start + (endB - endA);\n endA = start;\n }\n else if (endB < start) {\n let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;\n start -= move;\n endA = start + (endA - endB);\n endB = start;\n }\n return { start, endA, endB };\n}\n\n/**\n@internal\n*/\nconst __serializeForClipboard = serializeForClipboard;\n/**\n@internal\n*/\nconst __parseFromClipboard = parseFromClipboard;\n/**\n@internal\n*/\nconst __endComposition = endComposition;\n/**\nAn editor view manages the DOM structure that represents an\neditable document. Its state and behavior are determined by its\n[props](https://prosemirror.net/docs/ref/#view.DirectEditorProps).\n*/\nclass EditorView {\n /**\n Create a view. `place` may be a DOM node that the editor should\n be appended to, a function that will place it into the document,\n or an object whose `mount` property holds the node to use as the\n document container. If it is `null`, the editor will not be\n added to the document.\n */\n constructor(place, props) {\n this._root = null;\n /**\n @internal\n */\n this.focused = false;\n /**\n Kludge used to work around a Chrome bug @internal\n */\n this.trackWrites = null;\n this.mounted = false;\n /**\n @internal\n */\n this.markCursor = null;\n /**\n @internal\n */\n this.cursorWrapper = null;\n /**\n @internal\n */\n this.lastSelectedViewDesc = undefined;\n /**\n @internal\n */\n this.input = new InputState;\n this.prevDirectPlugins = [];\n this.pluginViews = [];\n /**\n Holds `true` when a hack node is needed in Firefox to prevent the\n [space is eaten issue](https://github.com/ProseMirror/prosemirror/issues/651)\n @internal\n */\n this.requiresGeckoHackNode = false;\n /**\n When editor content is being dragged, this object contains\n information about the dragged slice and whether it is being\n copied or moved. At any other time, it is null.\n */\n this.dragging = null;\n this._props = props;\n this.state = props.state;\n this.directPlugins = props.plugins || [];\n this.directPlugins.forEach(checkStateComponent);\n this.dispatch = this.dispatch.bind(this);\n this.dom = (place && place.mount) || document.createElement(\"div\");\n if (place) {\n if (place.appendChild)\n place.appendChild(this.dom);\n else if (typeof place == \"function\")\n place(this.dom);\n else if (place.mount)\n this.mounted = true;\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n this.nodeViews = buildNodeViews(this);\n this.docView = docViewDesc(this.state.doc, computeDocDeco(this), viewDecorations(this), this.dom, this);\n this.domObserver = new DOMObserver(this, (from, to, typeOver, added) => readDOMChange(this, from, to, typeOver, added));\n this.domObserver.start();\n initInput(this);\n this.updatePluginViews();\n }\n /**\n Holds `true` when a\n [composition](https://w3c.github.io/uievents/#events-compositionevents)\n is active.\n */\n get composing() { return this.input.composing; }\n /**\n The view's current [props](https://prosemirror.net/docs/ref/#view.EditorProps).\n */\n get props() {\n if (this._props.state != this.state) {\n let prev = this._props;\n this._props = {};\n for (let name in prev)\n this._props[name] = prev[name];\n this._props.state = this.state;\n }\n return this._props;\n }\n /**\n Update the view's props. Will immediately cause an update to\n the DOM.\n */\n update(props) {\n if (props.handleDOMEvents != this._props.handleDOMEvents)\n ensureListeners(this);\n let prevProps = this._props;\n this._props = props;\n if (props.plugins) {\n props.plugins.forEach(checkStateComponent);\n this.directPlugins = props.plugins;\n }\n this.updateStateInner(props.state, prevProps);\n }\n /**\n Update the view by updating existing props object with the object\n given as argument. Equivalent to `view.update(Object.assign({},\n view.props, props))`.\n */\n setProps(props) {\n let updated = {};\n for (let name in this._props)\n updated[name] = this._props[name];\n updated.state = this.state;\n for (let name in props)\n updated[name] = props[name];\n this.update(updated);\n }\n /**\n Update the editor's `state` prop, without touching any of the\n other props.\n */\n updateState(state) {\n this.updateStateInner(state, this._props);\n }\n updateStateInner(state, prevProps) {\n let prev = this.state, redraw = false, updateSel = false;\n // When stored marks are added, stop composition, so that they can\n // be displayed.\n if (state.storedMarks && this.composing) {\n clearComposition(this);\n updateSel = true;\n }\n this.state = state;\n let pluginsChanged = prev.plugins != state.plugins || this._props.plugins != prevProps.plugins;\n if (pluginsChanged || this._props.plugins != prevProps.plugins || this._props.nodeViews != prevProps.nodeViews) {\n let nodeViews = buildNodeViews(this);\n if (changedNodeViews(nodeViews, this.nodeViews)) {\n this.nodeViews = nodeViews;\n redraw = true;\n }\n }\n if (pluginsChanged || prevProps.handleDOMEvents != this._props.handleDOMEvents) {\n ensureListeners(this);\n }\n this.editable = getEditable(this);\n updateCursorWrapper(this);\n let innerDeco = viewDecorations(this), outerDeco = computeDocDeco(this);\n let scroll = prev.plugins != state.plugins && !prev.doc.eq(state.doc) ? \"reset\"\n : state.scrollToSelection > prev.scrollToSelection ? \"to selection\" : \"preserve\";\n let updateDoc = redraw || !this.docView.matchesNode(state.doc, outerDeco, innerDeco);\n if (updateDoc || !state.selection.eq(prev.selection))\n updateSel = true;\n let oldScrollPos = scroll == \"preserve\" && updateSel && this.dom.style.overflowAnchor == null && storeScrollPos(this);\n if (updateSel) {\n this.domObserver.stop();\n // Work around an issue in Chrome, IE, and Edge where changing\n // the DOM around an active selection puts it into a broken\n // state where the thing the user sees differs from the\n // selection reported by the Selection object (#710, #973,\n // #1011, #1013, #1035).\n let forceSelUpdate = updateDoc && (ie || chrome) && !this.composing &&\n !prev.selection.empty && !state.selection.empty && selectionContextChanged(prev.selection, state.selection);\n if (updateDoc) {\n // If the node that the selection points into is written to,\n // Chrome sometimes starts misreporting the selection, so this\n // tracks that and forces a selection reset when our update\n // did write to the node.\n let chromeKludge = chrome ? (this.trackWrites = this.domSelectionRange().focusNode) : null;\n if (redraw || !this.docView.update(state.doc, outerDeco, innerDeco, this)) {\n this.docView.updateOuterDeco([]);\n this.docView.destroy();\n this.docView = docViewDesc(state.doc, outerDeco, innerDeco, this.dom, this);\n }\n if (chromeKludge && !this.trackWrites)\n forceSelUpdate = true;\n }\n // Work around for an issue where an update arriving right between\n // a DOM selection change and the \"selectionchange\" event for it\n // can cause a spurious DOM selection update, disrupting mouse\n // drag selection.\n if (forceSelUpdate ||\n !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&\n anchorInRightPlace(this))) {\n selectionToDOM(this, forceSelUpdate);\n }\n else {\n syncNodeSelection(this, state.selection);\n this.domObserver.setCurSelection();\n }\n this.domObserver.start();\n }\n this.updatePluginViews(prev);\n if (scroll == \"reset\") {\n this.dom.scrollTop = 0;\n }\n else if (scroll == \"to selection\") {\n this.scrollToSelection();\n }\n else if (oldScrollPos) {\n resetScrollPos(oldScrollPos);\n }\n }\n /**\n @internal\n */\n scrollToSelection() {\n let startDOM = this.domSelectionRange().focusNode;\n if (this.someProp(\"handleScrollToSelection\", f => f(this))) ;\n else if (this.state.selection instanceof NodeSelection) {\n let target = this.docView.domAfterPos(this.state.selection.from);\n if (target.nodeType == 1)\n scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);\n }\n else {\n scrollRectIntoView(this, this.coordsAtPos(this.state.selection.head, 1), startDOM);\n }\n }\n destroyPluginViews() {\n let view;\n while (view = this.pluginViews.pop())\n if (view.destroy)\n view.destroy();\n }\n updatePluginViews(prevState) {\n if (!prevState || prevState.plugins != this.state.plugins || this.directPlugins != this.prevDirectPlugins) {\n this.prevDirectPlugins = this.directPlugins;\n this.destroyPluginViews();\n for (let i = 0; i < this.directPlugins.length; i++) {\n let plugin = this.directPlugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n for (let i = 0; i < this.state.plugins.length; i++) {\n let plugin = this.state.plugins[i];\n if (plugin.spec.view)\n this.pluginViews.push(plugin.spec.view(this));\n }\n }\n else {\n for (let i = 0; i < this.pluginViews.length; i++) {\n let pluginView = this.pluginViews[i];\n if (pluginView.update)\n pluginView.update(this, prevState);\n }\n }\n }\n someProp(propName, f) {\n let prop = this._props && this._props[propName], value;\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n for (let i = 0; i < this.directPlugins.length; i++) {\n let prop = this.directPlugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n let plugins = this.state.plugins;\n if (plugins)\n for (let i = 0; i < plugins.length; i++) {\n let prop = plugins[i].props[propName];\n if (prop != null && (value = f ? f(prop) : prop))\n return value;\n }\n }\n /**\n Query whether the view has focus.\n */\n hasFocus() {\n // Work around IE not handling focus correctly if resize handles are shown.\n // If the cursor is inside an element with resize handles, activeElement\n // will be that element instead of this.dom.\n if (ie) {\n // If activeElement is within this.dom, and there are no other elements\n // setting `contenteditable` to false in between, treat it as focused.\n let node = this.root.activeElement;\n if (node == this.dom)\n return true;\n if (!node || !this.dom.contains(node))\n return false;\n while (node && this.dom != node && this.dom.contains(node)) {\n if (node.contentEditable == 'false')\n return false;\n node = node.parentElement;\n }\n return true;\n }\n return this.root.activeElement == this.dom;\n }\n /**\n Focus the editor.\n */\n focus() {\n this.domObserver.stop();\n if (this.editable)\n focusPreventScroll(this.dom);\n selectionToDOM(this);\n this.domObserver.start();\n }\n /**\n Get the document root in which the editor exists. This will\n usually be the top-level `document`, but might be a [shadow\n DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM)\n root if the editor is inside one.\n */\n get root() {\n let cached = this._root;\n if (cached == null)\n for (let search = this.dom.parentNode; search; search = search.parentNode) {\n if (search.nodeType == 9 || (search.nodeType == 11 && search.host)) {\n if (!search.getSelection)\n Object.getPrototypeOf(search).getSelection = () => search.ownerDocument.getSelection();\n return this._root = search;\n }\n }\n return cached || document;\n }\n /**\n Given a pair of viewport coordinates, return the document\n position that corresponds to them. May return null if the given\n coordinates aren't inside of the editor. When an object is\n returned, its `pos` property is the position nearest to the\n coordinates, and its `inside` property holds the position of the\n inner node that the position falls inside of, or -1 if it is at\n the top level, not in any node.\n */\n posAtCoords(coords) {\n return posAtCoords(this, coords);\n }\n /**\n Returns the viewport rectangle at a given document position.\n `left` and `right` will be the same number, as this returns a\n flat cursor-ish rectangle. If the position is between two things\n that aren't directly adjacent, `side` determines which element\n is used. When < 0, the element before the position is used,\n otherwise the element after.\n */\n coordsAtPos(pos, side = 1) {\n return coordsAtPos(this, pos, side);\n }\n /**\n Find the DOM position that corresponds to the given document\n position. When `side` is negative, find the position as close as\n possible to the content before the position. When positive,\n prefer positions close to the content after the position. When\n zero, prefer as shallow a position as possible.\n \n Note that you should **not** mutate the editor's internal DOM,\n only inspect it (and even that is usually not necessary).\n */\n domAtPos(pos, side = 0) {\n return this.docView.domFromPos(pos, side);\n }\n /**\n Find the DOM node that represents the document node after the\n given position. May return `null` when the position doesn't point\n in front of a node or if the node is inside an opaque node view.\n \n This is intended to be able to call things like\n `getBoundingClientRect` on that DOM node. Do **not** mutate the\n editor DOM directly, or add styling this way, since that will be\n immediately overriden by the editor as it redraws the node.\n */\n nodeDOM(pos) {\n let desc = this.docView.descAt(pos);\n return desc ? desc.nodeDOM : null;\n }\n /**\n Find the document position that corresponds to a given DOM\n position. (Whenever possible, it is preferable to inspect the\n document structure directly, rather than poking around in the\n DOM, but sometimes—for example when interpreting an event\n target—you don't have a choice.)\n \n The `bias` parameter can be used to influence which side of a DOM\n node to use when the position is inside a leaf node.\n */\n posAtDOM(node, offset, bias = -1) {\n let pos = this.docView.posFromDOM(node, offset, bias);\n if (pos == null)\n throw new RangeError(\"DOM position not inside the editor\");\n return pos;\n }\n /**\n Find out whether the selection is at the end of a textblock when\n moving in a given direction. When, for example, given `\"left\"`,\n it will return true if moving left from the current cursor\n position would leave that position's parent textblock. Will apply\n to the view's current state by default, but it is possible to\n pass a different state.\n */\n endOfTextblock(dir, state) {\n return endOfTextblock(this, state || this.state, dir);\n }\n /**\n Removes the editor from the DOM and destroys all [node\n views](https://prosemirror.net/docs/ref/#view.NodeView).\n */\n destroy() {\n if (!this.docView)\n return;\n destroyInput(this);\n this.destroyPluginViews();\n if (this.mounted) {\n this.docView.update(this.state.doc, [], viewDecorations(this), this);\n this.dom.textContent = \"\";\n }\n else if (this.dom.parentNode) {\n this.dom.parentNode.removeChild(this.dom);\n }\n this.docView.destroy();\n this.docView = null;\n }\n /**\n This is true when the view has been\n [destroyed](https://prosemirror.net/docs/ref/#view.EditorView.destroy) (and thus should not be\n used anymore).\n */\n get isDestroyed() {\n return this.docView == null;\n }\n /**\n Used for testing.\n */\n dispatchEvent(event) {\n return dispatchEvent(this, event);\n }\n /**\n Dispatch a transaction. Will call\n [`dispatchTransaction`](https://prosemirror.net/docs/ref/#view.DirectEditorProps.dispatchTransaction)\n when given, and otherwise defaults to applying the transaction to\n the current state and calling\n [`updateState`](https://prosemirror.net/docs/ref/#view.EditorView.updateState) with the result.\n This method is bound to the view instance, so that it can be\n easily passed around.\n */\n dispatch(tr) {\n let dispatchTransaction = this._props.dispatchTransaction;\n if (dispatchTransaction)\n dispatchTransaction.call(this, tr);\n else\n this.updateState(this.state.apply(tr));\n }\n /**\n @internal\n */\n domSelectionRange() {\n return safari && this.root.nodeType === 11 && deepActiveElement(this.dom.ownerDocument) == this.dom\n ? safariShadowSelectionRange(this) : this.domSelection();\n }\n /**\n @internal\n */\n domSelection() {\n return this.root.getSelection();\n }\n}\nfunction computeDocDeco(view) {\n let attrs = Object.create(null);\n attrs.class = \"ProseMirror\";\n attrs.contenteditable = String(view.editable);\n attrs.translate = \"no\";\n view.someProp(\"attributes\", value => {\n if (typeof value == \"function\")\n value = value(view.state);\n if (value)\n for (let attr in value) {\n if (attr == \"class\")\n attrs.class += \" \" + value[attr];\n if (attr == \"style\") {\n attrs.style = (attrs.style ? attrs.style + \";\" : \"\") + value[attr];\n }\n else if (!attrs[attr] && attr != \"contenteditable\" && attr != \"nodeName\")\n attrs[attr] = String(value[attr]);\n }\n });\n return [Decoration.node(0, view.state.doc.content.size, attrs)];\n}\nfunction updateCursorWrapper(view) {\n if (view.markCursor) {\n let dom = document.createElement(\"img\");\n dom.className = \"ProseMirror-separator\";\n dom.setAttribute(\"mark-placeholder\", \"true\");\n dom.setAttribute(\"alt\", \"\");\n view.cursorWrapper = { dom, deco: Decoration.widget(view.state.selection.head, dom, { raw: true, marks: view.markCursor }) };\n }\n else {\n view.cursorWrapper = null;\n }\n}\nfunction getEditable(view) {\n return !view.someProp(\"editable\", value => value(view.state) === false);\n}\nfunction selectionContextChanged(sel1, sel2) {\n let depth = Math.min(sel1.$anchor.sharedDepth(sel1.head), sel2.$anchor.sharedDepth(sel2.head));\n return sel1.$anchor.start(depth) != sel2.$anchor.start(depth);\n}\nfunction buildNodeViews(view) {\n let result = Object.create(null);\n function add(obj) {\n for (let prop in obj)\n if (!Object.prototype.hasOwnProperty.call(result, prop))\n result[prop] = obj[prop];\n }\n view.someProp(\"nodeViews\", add);\n view.someProp(\"markViews\", add);\n return result;\n}\nfunction changedNodeViews(a, b) {\n let nA = 0, nB = 0;\n for (let prop in a) {\n if (a[prop] != b[prop])\n return true;\n nA++;\n }\n for (let _ in b)\n nB++;\n return nA != nB;\n}\nfunction checkStateComponent(plugin) {\n if (plugin.spec.state || plugin.spec.filterTransaction || plugin.spec.appendTransaction)\n throw new RangeError(\"Plugins passed directly to the view must not have a state component\");\n}\n\nexport { Decoration, DecorationSet, EditorView, __endComposition, __parseFromClipboard, __serializeForClipboard };\n","export var base = {\n 8: \"Backspace\",\n 9: \"Tab\",\n 10: \"Enter\",\n 12: \"NumLock\",\n 13: \"Enter\",\n 16: \"Shift\",\n 17: \"Control\",\n 18: \"Alt\",\n 20: \"CapsLock\",\n 27: \"Escape\",\n 32: \" \",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"ArrowLeft\",\n 38: \"ArrowUp\",\n 39: \"ArrowRight\",\n 40: \"ArrowDown\",\n 44: \"PrintScreen\",\n 45: \"Insert\",\n 46: \"Delete\",\n 59: \";\",\n 61: \"=\",\n 91: \"Meta\",\n 92: \"Meta\",\n 106: \"*\",\n 107: \"+\",\n 108: \",\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\",\n 144: \"NumLock\",\n 145: \"ScrollLock\",\n 160: \"Shift\",\n 161: \"Shift\",\n 162: \"Control\",\n 163: \"Control\",\n 164: \"Alt\",\n 165: \"Alt\",\n 173: \"-\",\n 186: \";\",\n 187: \"=\",\n 188: \",\",\n 189: \"-\",\n 190: \".\",\n 191: \"/\",\n 192: \"`\",\n 219: \"[\",\n 220: \"\\\\\",\n 221: \"]\",\n 222: \"'\"\n}\n\nexport var shift = {\n 48: \")\",\n 49: \"!\",\n 50: \"@\",\n 51: \"#\",\n 52: \"$\",\n 53: \"%\",\n 54: \"^\",\n 55: \"&\",\n 56: \"*\",\n 57: \"(\",\n 59: \":\",\n 61: \"+\",\n 173: \"_\",\n 186: \":\",\n 187: \"+\",\n 188: \"<\",\n 189: \"_\",\n 190: \">\",\n 191: \"?\",\n 192: \"~\",\n 219: \"{\",\n 220: \"|\",\n 221: \"}\",\n 222: \"\\\"\"\n}\n\nvar chrome = typeof navigator != \"undefined\" && /Chrome\\/(\\d+)/.exec(navigator.userAgent)\nvar gecko = typeof navigator != \"undefined\" && /Gecko\\/\\d+/.test(navigator.userAgent)\nvar mac = typeof navigator != \"undefined\" && /Mac/.test(navigator.platform)\nvar ie = typeof navigator != \"undefined\" && /MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent)\nvar brokenModifierNames = mac || chrome && +chrome[1] < 57\n\n// Fill in the digit keys\nfor (var i = 0; i < 10; i++) base[48 + i] = base[96 + i] = String(i)\n\n// The function keys\nfor (var i = 1; i <= 24; i++) base[i + 111] = \"F\" + i\n\n// And the alphabetic keys\nfor (var i = 65; i <= 90; i++) {\n base[i] = String.fromCharCode(i + 32)\n shift[i] = String.fromCharCode(i)\n}\n\n// For each code that doesn't have a shift-equivalent, copy the base name\nfor (var code in base) if (!shift.hasOwnProperty(code)) shift[code] = base[code]\n\nexport function keyName(event) {\n var ignoreKey = brokenModifierNames && (event.ctrlKey || event.altKey || event.metaKey) ||\n ie && event.shiftKey && event.key && event.key.length == 1 ||\n event.key == \"Unidentified\"\n var name = (!ignoreKey && event.key) ||\n (event.shiftKey ? shift : base)[event.keyCode] ||\n event.key || \"Unidentified\"\n // Edge sometimes produces wrong names (Issue #3)\n if (name == \"Esc\") name = \"Escape\"\n if (name == \"Del\") name = \"Delete\"\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8860571/\n if (name == \"Left\") name = \"ArrowLeft\"\n if (name == \"Up\") name = \"ArrowUp\"\n if (name == \"Right\") name = \"ArrowRight\"\n if (name == \"Down\") name = \"ArrowDown\"\n return name\n}\n","import { keyName, base } from 'w3c-keyname';\nimport { Plugin } from 'prosemirror-state';\n\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false;\nfunction normalizeKeyName(name) {\n let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];\n if (result == \"Space\")\n result = \" \";\n let alt, ctrl, shift, meta;\n for (let i = 0; i < parts.length - 1; i++) {\n let mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod))\n meta = true;\n else if (/^a(lt)?$/i.test(mod))\n alt = true;\n else if (/^(c|ctrl|control)$/i.test(mod))\n ctrl = true;\n else if (/^s(hift)?$/i.test(mod))\n shift = true;\n else if (/^mod$/i.test(mod)) {\n if (mac)\n meta = true;\n else\n ctrl = true;\n }\n else\n throw new Error(\"Unrecognized modifier name: \" + mod);\n }\n if (alt)\n result = \"Alt-\" + result;\n if (ctrl)\n result = \"Ctrl-\" + result;\n if (meta)\n result = \"Meta-\" + result;\n if (shift)\n result = \"Shift-\" + result;\n return result;\n}\nfunction normalize(map) {\n let copy = Object.create(null);\n for (let prop in map)\n copy[normalizeKeyName(prop)] = map[prop];\n return copy;\n}\nfunction modifiers(name, event, shift) {\n if (event.altKey)\n name = \"Alt-\" + name;\n if (event.ctrlKey)\n name = \"Ctrl-\" + name;\n if (event.metaKey)\n name = \"Meta-\" + name;\n if (shift !== false && event.shiftKey)\n name = \"Shift-\" + name;\n return name;\n}\n/**\nCreate a keymap plugin for the given set of bindings.\n\nBindings should map key names to [command](https://prosemirror.net/docs/ref/#commands)-style\nfunctions, which will be called with `(EditorState, dispatch,\nEditorView)` arguments, and should return true when they've handled\nthe key. Note that the view argument isn't part of the command\nprotocol, but can be used as an escape hatch if a binding needs to\ndirectly interact with the UI.\n\nKey names may be strings like `\"Shift-Ctrl-Enter\"`—a key\nidentifier prefixed with zero or more modifiers. Key identifiers\nare based on the strings that can appear in\n[`KeyEvent.key`](https:developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key).\nUse lowercase letters to refer to letter keys (or uppercase letters\nif you want shift to be held). You may use `\"Space\"` as an alias\nfor the `\" \"` name.\n\nModifiers can be given in any order. `Shift-` (or `s-`), `Alt-` (or\n`a-`), `Ctrl-` (or `c-` or `Control-`) and `Cmd-` (or `m-` or\n`Meta-`) are recognized. For characters that are created by holding\nshift, the `Shift-` prefix is implied, and should not be added\nexplicitly.\n\nYou can use `Mod-` as a shorthand for `Cmd-` on Mac and `Ctrl-` on\nother platforms.\n\nYou can add multiple keymap plugins to an editor. The order in\nwhich they appear determines their precedence (the ones early in\nthe array get to dispatch first).\n*/\nfunction keymap(bindings) {\n return new Plugin({ props: { handleKeyDown: keydownHandler(bindings) } });\n}\n/**\nGiven a set of bindings (using the same format as\n[`keymap`](https://prosemirror.net/docs/ref/#keymap.keymap)), return a [keydown\nhandler](https://prosemirror.net/docs/ref/#view.EditorProps.handleKeyDown) that handles them.\n*/\nfunction keydownHandler(bindings) {\n let map = normalize(bindings);\n return function (view, event) {\n let name = keyName(event), isChar = name.length == 1 && name != \" \", baseName;\n let direct = map[modifiers(name, event, !isChar)];\n if (direct && direct(view.state, view.dispatch, view))\n return true;\n if (isChar && (event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) &&\n (baseName = base[event.keyCode]) && baseName != name) {\n // Try falling back to the keyCode when there's a modifier\n // active or the character produced isn't ASCII, and our table\n // produces a different name from the the keyCode. See #668,\n // #1060\n let fromCode = map[modifiers(baseName, event, true)];\n if (fromCode && fromCode(view.state, view.dispatch, view))\n return true;\n }\n else if (isChar && event.shiftKey) {\n // Otherwise, if shift is active, also try the binding with the\n // Shift- prefix enabled. See #997\n let withShift = map[modifiers(name, event, true)];\n if (withShift && withShift(view.state, view.dispatch, view))\n return true;\n }\n return false;\n };\n}\n\nexport { keydownHandler, keymap };\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n CellBookmark: () => CellBookmark,\n CellSelection: () => CellSelection,\n ResizeState: () => ResizeState,\n TableMap: () => TableMap,\n TableView: () => TableView,\n __clipCells: () => clipCells,\n __insertCells: () => insertCells,\n __pastedCells: () => pastedCells,\n addColSpan: () => addColSpan,\n addColumn: () => addColumn,\n addColumnAfter: () => addColumnAfter,\n addColumnBefore: () => addColumnBefore,\n addRow: () => addRow,\n addRowAfter: () => addRowAfter,\n addRowBefore: () => addRowBefore,\n cellAround: () => cellAround,\n colCount: () => colCount,\n columnIsHeader: () => columnIsHeader,\n columnResizing: () => columnResizing,\n columnResizingPluginKey: () => columnResizingPluginKey,\n deleteColumn: () => deleteColumn,\n deleteRow: () => deleteRow,\n deleteTable: () => deleteTable,\n findCell: () => findCell,\n fixTables: () => fixTables,\n fixTablesKey: () => fixTablesKey,\n goToNextCell: () => goToNextCell,\n handlePaste: () => handlePaste,\n inSameTable: () => inSameTable,\n isInTable: () => isInTable,\n mergeCells: () => mergeCells,\n moveCellForward: () => moveCellForward,\n nextCell: () => nextCell,\n pointsAtCell: () => pointsAtCell,\n removeColSpan: () => removeColSpan,\n removeColumn: () => removeColumn,\n removeRow: () => removeRow,\n rowIsHeader: () => rowIsHeader,\n selectedRect: () => selectedRect,\n selectionCell: () => selectionCell,\n setCellAttr: () => setCellAttr,\n splitCell: () => splitCell,\n splitCellWithType: () => splitCellWithType,\n tableEditing: () => tableEditing,\n tableEditingKey: () => tableEditingKey,\n tableNodeTypes: () => tableNodeTypes,\n tableNodes: () => tableNodes,\n toggleHeader: () => toggleHeader,\n toggleHeaderCell: () => toggleHeaderCell,\n toggleHeaderColumn: () => toggleHeaderColumn,\n toggleHeaderRow: () => toggleHeaderRow,\n updateColumnsOnResize: () => updateColumnsOnResize\n});\nmodule.exports = __toCommonJS(src_exports);\nvar import_prosemirror_state7 = require(\"prosemirror-state\");\n\n// src/cellselection.ts\nvar import_prosemirror_model = require(\"prosemirror-model\");\nvar import_prosemirror_state2 = require(\"prosemirror-state\");\nvar import_prosemirror_view = require(\"prosemirror-view\");\n\n// src/tablemap.ts\nvar readFromCache;\nvar addToCache;\nif (typeof WeakMap != \"undefined\") {\n let cache = /* @__PURE__ */ new WeakMap();\n readFromCache = (key) => cache.get(key);\n addToCache = (key, value) => {\n cache.set(key, value);\n return value;\n };\n} else {\n const cache = [];\n const cacheSize = 10;\n let cachePos = 0;\n readFromCache = (key) => {\n for (let i = 0; i < cache.length; i += 2)\n if (cache[i] == key)\n return cache[i + 1];\n };\n addToCache = (key, value) => {\n if (cachePos == cacheSize)\n cachePos = 0;\n cache[cachePos++] = key;\n return cache[cachePos++] = value;\n };\n}\nvar TableMap = class {\n constructor(width, height, map, problems) {\n this.width = width;\n this.height = height;\n this.map = map;\n this.problems = problems;\n }\n findCell(pos) {\n for (let i = 0; i < this.map.length; i++) {\n const curPos = this.map[i];\n if (curPos != pos)\n continue;\n const left = i % this.width;\n const top = i / this.width | 0;\n let right = left + 1;\n let bottom = top + 1;\n for (let j = 1; right < this.width && this.map[i + j] == curPos; j++) {\n right++;\n }\n for (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) {\n bottom++;\n }\n return { left, top, right, bottom };\n }\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n colCount(pos) {\n for (let i = 0; i < this.map.length; i++) {\n if (this.map[i] == pos) {\n return i % this.width;\n }\n }\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n nextCell(pos, axis, dir) {\n const { left, right, top, bottom } = this.findCell(pos);\n if (axis == \"horiz\") {\n if (dir < 0 ? left == 0 : right == this.width)\n return null;\n return this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n } else {\n if (dir < 0 ? top == 0 : bottom == this.height)\n return null;\n return this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n }\n }\n rectBetween(a, b) {\n const {\n left: leftA,\n right: rightA,\n top: topA,\n bottom: bottomA\n } = this.findCell(a);\n const {\n left: leftB,\n right: rightB,\n top: topB,\n bottom: bottomB\n } = this.findCell(b);\n return {\n left: Math.min(leftA, leftB),\n top: Math.min(topA, topB),\n right: Math.max(rightA, rightB),\n bottom: Math.max(bottomA, bottomB)\n };\n }\n cellsInRect(rect) {\n const result = [];\n const seen = {};\n for (let row = rect.top; row < rect.bottom; row++) {\n for (let col = rect.left; col < rect.right; col++) {\n const index = row * this.width + col;\n const pos = this.map[index];\n if (seen[pos])\n continue;\n seen[pos] = true;\n if (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) {\n continue;\n }\n result.push(pos);\n }\n }\n return result;\n }\n positionAt(row, col, table) {\n for (let i = 0, rowStart = 0; ; i++) {\n const rowEnd = rowStart + table.child(i).nodeSize;\n if (i == row) {\n let index = col + row * this.width;\n const rowEndIndex = (row + 1) * this.width;\n while (index < rowEndIndex && this.map[index] < rowStart)\n index++;\n return index == rowEndIndex ? rowEnd - 1 : this.map[index];\n }\n rowStart = rowEnd;\n }\n }\n static get(table) {\n return readFromCache(table) || addToCache(table, computeMap(table));\n }\n};\nfunction computeMap(table) {\n if (table.type.spec.tableRole != \"table\")\n throw new RangeError(\"Not a table node: \" + table.type.name);\n const width = findWidth(table), height = table.childCount;\n const map = [];\n let mapPos = 0;\n let problems = null;\n const colWidths = [];\n for (let i = 0, e = width * height; i < e; i++)\n map[i] = 0;\n for (let row = 0, pos = 0; row < height; row++) {\n const rowNode = table.child(row);\n pos++;\n for (let i = 0; ; i++) {\n while (mapPos < map.length && map[mapPos] != 0)\n mapPos++;\n if (i == rowNode.childCount)\n break;\n const cellNode = rowNode.child(i);\n const { colspan, rowspan, colwidth } = cellNode.attrs;\n for (let h = 0; h < rowspan; h++) {\n if (h + row >= height) {\n (problems || (problems = [])).push({\n type: \"overlong_rowspan\",\n pos,\n n: rowspan - h\n });\n break;\n }\n const start = mapPos + h * width;\n for (let w = 0; w < colspan; w++) {\n if (map[start + w] == 0)\n map[start + w] = pos;\n else\n (problems || (problems = [])).push({\n type: \"collision\",\n row,\n pos,\n n: colspan - w\n });\n const colW = colwidth && colwidth[w];\n if (colW) {\n const widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n if (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n colWidths[widthIndex] = colW;\n colWidths[widthIndex + 1] = 1;\n } else if (prev == colW) {\n colWidths[widthIndex + 1]++;\n }\n }\n }\n }\n mapPos += colspan;\n pos += cellNode.nodeSize;\n }\n const expectedPos = (row + 1) * width;\n let missing = 0;\n while (mapPos < expectedPos)\n if (map[mapPos++] == 0)\n missing++;\n if (missing)\n (problems || (problems = [])).push({ type: \"missing\", row, n: missing });\n pos++;\n }\n const tableMap = new TableMap(width, height, map, problems);\n let badWidths = false;\n for (let i = 0; !badWidths && i < colWidths.length; i += 2)\n if (colWidths[i] != null && colWidths[i + 1] < height)\n badWidths = true;\n if (badWidths)\n findBadColWidths(tableMap, colWidths, table);\n return tableMap;\n}\nfunction findWidth(table) {\n let width = -1;\n let hasRowSpan = false;\n for (let row = 0; row < table.childCount; row++) {\n const rowNode = table.child(row);\n let rowWidth = 0;\n if (hasRowSpan)\n for (let j = 0; j < row; j++) {\n const prevRow = table.child(j);\n for (let i = 0; i < prevRow.childCount; i++) {\n const cell = prevRow.child(i);\n if (j + cell.attrs.rowspan > row)\n rowWidth += cell.attrs.colspan;\n }\n }\n for (let i = 0; i < rowNode.childCount; i++) {\n const cell = rowNode.child(i);\n rowWidth += cell.attrs.colspan;\n if (cell.attrs.rowspan > 1)\n hasRowSpan = true;\n }\n if (width == -1)\n width = rowWidth;\n else if (width != rowWidth)\n width = Math.max(width, rowWidth);\n }\n return width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n if (!map.problems)\n map.problems = [];\n const seen = {};\n for (let i = 0; i < map.map.length; i++) {\n const pos = map.map[i];\n if (seen[pos])\n continue;\n seen[pos] = true;\n const node = table.nodeAt(pos);\n if (!node) {\n throw new RangeError(`No cell with offset ${pos} found`);\n }\n let updated = null;\n const attrs = node.attrs;\n for (let j = 0; j < attrs.colspan; j++) {\n const col = (i + j) % map.width;\n const colWidth = colWidths[col * 2];\n if (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth))\n (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n }\n if (updated)\n map.problems.unshift({\n type: \"colwidth mismatch\",\n pos,\n colwidth: updated\n });\n }\n}\nfunction freshColWidth(attrs) {\n if (attrs.colwidth)\n return attrs.colwidth.slice();\n const result = [];\n for (let i = 0; i < attrs.colspan; i++)\n result.push(0);\n return result;\n}\n\n// src/util.ts\nvar import_prosemirror_state = require(\"prosemirror-state\");\n\n// src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n if (typeof dom === \"string\") {\n return {};\n }\n const widthAttr = dom.getAttribute(\"data-colwidth\");\n const widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n const colspan = Number(dom.getAttribute(\"colspan\") || 1);\n const result = {\n colspan,\n rowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n colwidth: widths && widths.length == colspan ? widths : null\n };\n for (const prop in extraAttrs) {\n const getter = extraAttrs[prop].getFromDOM;\n const value = getter && getter(dom);\n if (value != null) {\n result[prop] = value;\n }\n }\n return result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n const attrs = {};\n if (node.attrs.colspan != 1)\n attrs.colspan = node.attrs.colspan;\n if (node.attrs.rowspan != 1)\n attrs.rowspan = node.attrs.rowspan;\n if (node.attrs.colwidth)\n attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n for (const prop in extraAttrs) {\n const setter = extraAttrs[prop].setDOMAttr;\n if (setter)\n setter(node.attrs[prop], attrs);\n }\n return attrs;\n}\nfunction tableNodes(options) {\n const extraAttrs = options.cellAttributes || {};\n const cellAttrs = {\n colspan: { default: 1 },\n rowspan: { default: 1 },\n colwidth: { default: null }\n };\n for (const prop in extraAttrs)\n cellAttrs[prop] = { default: extraAttrs[prop].default };\n return {\n table: {\n content: \"table_row+\",\n tableRole: \"table\",\n isolating: true,\n group: options.tableGroup,\n parseDOM: [{ tag: \"table\" }],\n toDOM() {\n return [\"table\", [\"tbody\", 0]];\n }\n },\n table_row: {\n content: \"(table_cell | table_header)*\",\n tableRole: \"row\",\n parseDOM: [{ tag: \"tr\" }],\n toDOM() {\n return [\"tr\", 0];\n }\n },\n table_cell: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: \"cell\",\n isolating: true,\n parseDOM: [\n { tag: \"td\", getAttrs: (dom) => getCellAttrs(dom, extraAttrs) }\n ],\n toDOM(node) {\n return [\"td\", setCellAttrs(node, extraAttrs), 0];\n }\n },\n table_header: {\n content: options.cellContent,\n attrs: cellAttrs,\n tableRole: \"header_cell\",\n isolating: true,\n parseDOM: [\n { tag: \"th\", getAttrs: (dom) => getCellAttrs(dom, extraAttrs) }\n ],\n toDOM(node) {\n return [\"th\", setCellAttrs(node, extraAttrs), 0];\n }\n }\n };\n}\nfunction tableNodeTypes(schema) {\n let result = schema.cached.tableNodeTypes;\n if (!result) {\n result = schema.cached.tableNodeTypes = {};\n for (const name in schema.nodes) {\n const type = schema.nodes[name], role = type.spec.tableRole;\n if (role)\n result[role] = type;\n }\n }\n return result;\n}\n\n// src/util.ts\nvar tableEditingKey = new import_prosemirror_state.PluginKey(\"selectingCells\");\nfunction cellAround($pos) {\n for (let d = $pos.depth - 1; d > 0; d--)\n if ($pos.node(d).type.spec.tableRole == \"row\")\n return $pos.node(0).resolve($pos.before(d + 1));\n return null;\n}\nfunction cellWrapping($pos) {\n for (let d = $pos.depth; d > 0; d--) {\n const role = $pos.node(d).type.spec.tableRole;\n if (role === \"cell\" || role === \"header_cell\")\n return $pos.node(d);\n }\n return null;\n}\nfunction isInTable(state) {\n const $head = state.selection.$head;\n for (let d = $head.depth; d > 0; d--)\n if ($head.node(d).type.spec.tableRole == \"row\")\n return true;\n return false;\n}\nfunction selectionCell(state) {\n const sel = state.selection;\n if (\"$anchorCell\" in sel && sel.$anchorCell) {\n return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n } else if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") {\n return sel.$anchor;\n }\n const $cell = cellAround(sel.$head) || cellNear(sel.$head);\n if ($cell) {\n return $cell;\n }\n throw new RangeError(`No cell found around position ${sel.head}`);\n}\nfunction cellNear($pos) {\n for (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n const role = after.type.spec.tableRole;\n if (role == \"cell\" || role == \"header_cell\")\n return $pos.doc.resolve(pos);\n }\n for (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n const role = before.type.spec.tableRole;\n if (role == \"cell\" || role == \"header_cell\")\n return $pos.doc.resolve(pos - before.nodeSize);\n }\n}\nfunction pointsAtCell($pos) {\n return $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\nfunction moveCellForward($pos) {\n return $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\nfunction inSameTable($cellA, $cellB) {\n return $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\nfunction findCell($pos) {\n return TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\nfunction colCount($pos) {\n return TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\nfunction nextCell($pos, axis, dir) {\n const table = $pos.node(-1);\n const map = TableMap.get(table);\n const tableStart = $pos.start(-1);\n const moved = map.nextCell($pos.pos - tableStart, axis, dir);\n return moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\nfunction removeColSpan(attrs, pos, n = 1) {\n const result = { ...attrs, colspan: attrs.colspan - n };\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n result.colwidth.splice(pos, n);\n if (!result.colwidth.some((w) => w > 0))\n result.colwidth = null;\n }\n return result;\n}\nfunction addColSpan(attrs, pos, n = 1) {\n const result = { ...attrs, colspan: attrs.colspan + n };\n if (result.colwidth) {\n result.colwidth = result.colwidth.slice();\n for (let i = 0; i < n; i++)\n result.colwidth.splice(pos, 0, 0);\n }\n return result;\n}\nfunction columnIsHeader(map, table, col) {\n const headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (let row = 0; row < map.height; row++)\n if (table.nodeAt(map.map[col + row * map.width]).type != headerCell)\n return false;\n return true;\n}\n\n// src/cellselection.ts\nvar CellSelection = class extends import_prosemirror_state2.Selection {\n constructor($anchorCell, $headCell = $anchorCell) {\n const table = $anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $anchorCell.start(-1);\n const rect = map.rectBetween(\n $anchorCell.pos - tableStart,\n $headCell.pos - tableStart\n );\n const doc = $anchorCell.node(0);\n const cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n cells.unshift($headCell.pos - tableStart);\n const ranges = cells.map((pos) => {\n const cell = table.nodeAt(pos);\n if (!cell) {\n throw RangeError(`No cell with offset ${pos} found`);\n }\n const from = tableStart + pos + 1;\n return new import_prosemirror_state2.SelectionRange(\n doc.resolve(from),\n doc.resolve(from + cell.content.size)\n );\n });\n super(ranges[0].$from, ranges[0].$to, ranges);\n this.$anchorCell = $anchorCell;\n this.$headCell = $headCell;\n }\n map(doc, mapping) {\n const $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n const $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n if (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n const tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n if (tableChanged && this.isRowSelection())\n return CellSelection.rowSelection($anchorCell, $headCell);\n else if (tableChanged && this.isColSelection())\n return CellSelection.colSelection($anchorCell, $headCell);\n else\n return new CellSelection($anchorCell, $headCell);\n }\n return import_prosemirror_state2.TextSelection.between($anchorCell, $headCell);\n }\n content() {\n const table = this.$anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = this.$anchorCell.start(-1);\n const rect = map.rectBetween(\n this.$anchorCell.pos - tableStart,\n this.$headCell.pos - tableStart\n );\n const seen = {};\n const rows = [];\n for (let row = rect.top; row < rect.bottom; row++) {\n const rowContent = [];\n for (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n const pos = map.map[index];\n if (seen[pos])\n continue;\n seen[pos] = true;\n const cellRect = map.findCell(pos);\n let cell = table.nodeAt(pos);\n if (!cell) {\n throw RangeError(`No cell with offset ${pos} found`);\n }\n const extraLeft = rect.left - cellRect.left;\n const extraRight = cellRect.right - rect.right;\n if (extraLeft > 0 || extraRight > 0) {\n let attrs = cell.attrs;\n if (extraLeft > 0) {\n attrs = removeColSpan(attrs, 0, extraLeft);\n }\n if (extraRight > 0) {\n attrs = removeColSpan(\n attrs,\n attrs.colspan - extraRight,\n extraRight\n );\n }\n if (cellRect.left < rect.left) {\n cell = cell.type.createAndFill(attrs);\n if (!cell) {\n throw RangeError(\n `Could not create cell with attrs ${JSON.stringify(attrs)}`\n );\n }\n } else {\n cell = cell.type.create(attrs, cell.content);\n }\n }\n if (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n const attrs = {\n ...cell.attrs,\n rowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n };\n if (cellRect.top < rect.top) {\n cell = cell.type.createAndFill(attrs);\n } else {\n cell = cell.type.create(attrs, cell.content);\n }\n }\n rowContent.push(cell);\n }\n rows.push(table.child(row).copy(import_prosemirror_model.Fragment.from(rowContent)));\n }\n const fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n return new import_prosemirror_model.Slice(import_prosemirror_model.Fragment.from(fragment), 1, 1);\n }\n replace(tr, content = import_prosemirror_model.Slice.empty) {\n const mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n tr.replace(\n mapping.map($from.pos),\n mapping.map($to.pos),\n i ? import_prosemirror_model.Slice.empty : content\n );\n }\n const sel = import_prosemirror_state2.Selection.findFrom(\n tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)),\n -1\n );\n if (sel)\n tr.setSelection(sel);\n }\n replaceWith(tr, node) {\n this.replace(tr, new import_prosemirror_model.Slice(import_prosemirror_model.Fragment.from(node), 0, 0));\n }\n forEachCell(f) {\n const table = this.$anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = this.$anchorCell.start(-1);\n const cells = map.cellsInRect(\n map.rectBetween(\n this.$anchorCell.pos - tableStart,\n this.$headCell.pos - tableStart\n )\n );\n for (let i = 0; i < cells.length; i++) {\n f(table.nodeAt(cells[i]), tableStart + cells[i]);\n }\n }\n isColSelection() {\n const anchorTop = this.$anchorCell.index(-1);\n const headTop = this.$headCell.index(-1);\n if (Math.min(anchorTop, headTop) > 0)\n return false;\n const anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n const headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n return Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n }\n static colSelection($anchorCell, $headCell = $anchorCell) {\n const table = $anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $anchorCell.start(-1);\n const anchorRect = map.findCell($anchorCell.pos - tableStart);\n const headRect = map.findCell($headCell.pos - tableStart);\n const doc = $anchorCell.node(0);\n if (anchorRect.top <= headRect.top) {\n if (anchorRect.top > 0)\n $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n if (headRect.bottom < map.height)\n $headCell = doc.resolve(\n tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]\n );\n } else {\n if (headRect.top > 0)\n $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n if (anchorRect.bottom < map.height)\n $anchorCell = doc.resolve(\n tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]\n );\n }\n return new CellSelection($anchorCell, $headCell);\n }\n isRowSelection() {\n const table = this.$anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = this.$anchorCell.start(-1);\n const anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n const headLeft = map.colCount(this.$headCell.pos - tableStart);\n if (Math.min(anchorLeft, headLeft) > 0)\n return false;\n const anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n const headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n return Math.max(anchorRight, headRight) == map.width;\n }\n eq(other) {\n return other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n }\n static rowSelection($anchorCell, $headCell = $anchorCell) {\n const table = $anchorCell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $anchorCell.start(-1);\n const anchorRect = map.findCell($anchorCell.pos - tableStart);\n const headRect = map.findCell($headCell.pos - tableStart);\n const doc = $anchorCell.node(0);\n if (anchorRect.left <= headRect.left) {\n if (anchorRect.left > 0)\n $anchorCell = doc.resolve(\n tableStart + map.map[anchorRect.top * map.width]\n );\n if (headRect.right < map.width)\n $headCell = doc.resolve(\n tableStart + map.map[map.width * (headRect.top + 1) - 1]\n );\n } else {\n if (headRect.left > 0)\n $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n if (anchorRect.right < map.width)\n $anchorCell = doc.resolve(\n tableStart + map.map[map.width * (anchorRect.top + 1) - 1]\n );\n }\n return new CellSelection($anchorCell, $headCell);\n }\n toJSON() {\n return {\n type: \"cell\",\n anchor: this.$anchorCell.pos,\n head: this.$headCell.pos\n };\n }\n static fromJSON(doc, json) {\n return new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n static create(doc, anchorCell, headCell = anchorCell) {\n return new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n }\n getBookmark() {\n return new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n }\n};\nCellSelection.prototype.visible = false;\nimport_prosemirror_state2.Selection.jsonID(\"cell\", CellSelection);\nvar CellBookmark = class {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n const $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n if ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell))\n return new CellSelection($anchorCell, $headCell);\n else\n return import_prosemirror_state2.Selection.near($headCell, 1);\n }\n};\nfunction drawCellSelection(state) {\n if (!(state.selection instanceof CellSelection))\n return null;\n const cells = [];\n state.selection.forEachCell((node, pos) => {\n cells.push(\n import_prosemirror_view.Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" })\n );\n });\n return import_prosemirror_view.DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n if ($from.pos == $to.pos || $from.pos < $from.pos - 6)\n return false;\n let afterFrom = $from.pos;\n let beforeTo = $to.pos;\n let depth = $from.depth;\n for (; depth >= 0; depth--, afterFrom++)\n if ($from.after(depth + 1) < $from.end(depth))\n break;\n for (let d = $to.depth; d >= 0; d--, beforeTo--)\n if ($to.before(d + 1) > $to.start(d))\n break;\n return afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n let fromCellBoundaryNode;\n let toCellBoundaryNode;\n for (let i = $from.depth; i > 0; i--) {\n const node = $from.node(i);\n if (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n fromCellBoundaryNode = node;\n break;\n }\n }\n for (let i = $to.depth; i > 0; i--) {\n const node = $to.node(i);\n if (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n toCellBoundaryNode = node;\n break;\n }\n }\n return fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n const sel = (tr || state).selection;\n const doc = (tr || state).doc;\n let normalize;\n let role;\n if (sel instanceof import_prosemirror_state2.NodeSelection && (role = sel.node.type.spec.tableRole)) {\n if (role == \"cell\" || role == \"header_cell\") {\n normalize = CellSelection.create(doc, sel.from);\n } else if (role == \"row\") {\n const $cell = doc.resolve(sel.from + 1);\n normalize = CellSelection.rowSelection($cell, $cell);\n } else if (!allowTableNodeSelection) {\n const map = TableMap.get(sel.node);\n const start = sel.from + 1;\n const lastCell = start + map.map[map.width * map.height - 1];\n normalize = CellSelection.create(doc, start + 1, lastCell);\n }\n } else if (sel instanceof import_prosemirror_state2.TextSelection && isCellBoundarySelection(sel)) {\n normalize = import_prosemirror_state2.TextSelection.create(doc, sel.from);\n } else if (sel instanceof import_prosemirror_state2.TextSelection && isTextSelectionAcrossCells(sel)) {\n normalize = import_prosemirror_state2.TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n }\n if (normalize)\n (tr || (tr = state.tr)).setSelection(normalize);\n return tr;\n}\n\n// src/fixtables.ts\nvar import_prosemirror_state3 = require(\"prosemirror-state\");\nvar fixTablesKey = new import_prosemirror_state3.PluginKey(\"fix-tables\");\nfunction changedDescendants(old, cur, offset, f) {\n const oldSize = old.childCount, curSize = cur.childCount;\n outer:\n for (let i = 0, j = 0; i < curSize; i++) {\n const child = cur.child(i);\n for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\n if (old.child(scan) == child) {\n j = scan + 1;\n offset += child.nodeSize;\n continue outer;\n }\n }\n f(child, offset);\n if (j < oldSize && old.child(j).sameMarkup(child))\n changedDescendants(old.child(j), child, offset + 1, f);\n else\n child.nodesBetween(0, child.content.size, f, offset + 1);\n offset += child.nodeSize;\n }\n}\nfunction fixTables(state, oldState) {\n let tr;\n const check = (node, pos) => {\n if (node.type.spec.tableRole == \"table\")\n tr = fixTable(state, node, pos, tr);\n };\n if (!oldState)\n state.doc.descendants(check);\n else if (oldState.doc != state.doc)\n changedDescendants(oldState.doc, state.doc, 0, check);\n return tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n const map = TableMap.get(table);\n if (!map.problems)\n return tr;\n if (!tr)\n tr = state.tr;\n const mustAdd = [];\n for (let i = 0; i < map.height; i++)\n mustAdd.push(0);\n for (let i = 0; i < map.problems.length; i++) {\n const prob = map.problems[i];\n if (prob.type == \"collision\") {\n const cell = table.nodeAt(prob.pos);\n if (!cell)\n continue;\n const attrs = cell.attrs;\n for (let j = 0; j < attrs.rowspan; j++)\n mustAdd[prob.row + j] += prob.n;\n tr.setNodeMarkup(\n tr.mapping.map(tablePos + 1 + prob.pos),\n null,\n removeColSpan(attrs, attrs.colspan - prob.n, prob.n)\n );\n } else if (prob.type == \"missing\") {\n mustAdd[prob.row] += prob.n;\n } else if (prob.type == \"overlong_rowspan\") {\n const cell = table.nodeAt(prob.pos);\n if (!cell)\n continue;\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n ...cell.attrs,\n rowspan: cell.attrs.rowspan - prob.n\n });\n } else if (prob.type == \"colwidth mismatch\") {\n const cell = table.nodeAt(prob.pos);\n if (!cell)\n continue;\n tr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n ...cell.attrs,\n colwidth: prob.colwidth\n });\n }\n }\n let first, last;\n for (let i = 0; i < mustAdd.length; i++)\n if (mustAdd[i]) {\n if (first == null)\n first = i;\n last = i;\n }\n for (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n const row = table.child(i);\n const end = pos + row.nodeSize;\n const add = mustAdd[i];\n if (add > 0) {\n let role = \"cell\";\n if (row.firstChild) {\n role = row.firstChild.type.spec.tableRole;\n }\n const nodes = [];\n for (let j = 0; j < add; j++) {\n const node = tableNodeTypes(state.schema)[role].createAndFill();\n if (node)\n nodes.push(node);\n }\n const side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n tr.insert(tr.mapping.map(side), nodes);\n }\n pos = end;\n }\n return tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n// src/input.ts\nvar import_prosemirror_model3 = require(\"prosemirror-model\");\nvar import_prosemirror_state4 = require(\"prosemirror-state\");\nvar import_prosemirror_keymap = require(\"prosemirror-keymap\");\n\n// src/copypaste.ts\nvar import_prosemirror_model2 = require(\"prosemirror-model\");\nvar import_prosemirror_transform = require(\"prosemirror-transform\");\nfunction pastedCells(slice) {\n if (!slice.size)\n return null;\n let { content, openStart, openEnd } = slice;\n while (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n openStart--;\n openEnd--;\n content = content.child(0).content;\n }\n const first = content.child(0);\n const role = first.type.spec.tableRole;\n const schema = first.type.schema, rows = [];\n if (role == \"row\") {\n for (let i = 0; i < content.childCount; i++) {\n let cells = content.child(i).content;\n const left = i ? 0 : Math.max(0, openStart - 1);\n const right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n if (left || right)\n cells = fitSlice(\n tableNodeTypes(schema).row,\n new import_prosemirror_model2.Slice(cells, left, right)\n ).content;\n rows.push(cells);\n }\n } else if (role == \"cell\" || role == \"header_cell\") {\n rows.push(\n openStart || openEnd ? fitSlice(\n tableNodeTypes(schema).row,\n new import_prosemirror_model2.Slice(content, openStart, openEnd)\n ).content : content\n );\n } else {\n return null;\n }\n return ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n const widths = [];\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n for (let j = row.childCount - 1; j >= 0; j--) {\n const { rowspan, colspan } = row.child(j).attrs;\n for (let r = i; r < i + rowspan; r++)\n widths[r] = (widths[r] || 0) + colspan;\n }\n }\n let width = 0;\n for (let r = 0; r < widths.length; r++)\n width = Math.max(width, widths[r]);\n for (let r = 0; r < widths.length; r++) {\n if (r >= rows.length)\n rows.push(import_prosemirror_model2.Fragment.empty);\n if (widths[r] < width) {\n const empty = tableNodeTypes(schema).cell.createAndFill();\n const cells = [];\n for (let i = widths[r]; i < width; i++) {\n cells.push(empty);\n }\n rows[r] = rows[r].append(import_prosemirror_model2.Fragment.from(cells));\n }\n }\n return { height: rows.length, width, rows };\n}\nfunction fitSlice(nodeType, slice) {\n const node = nodeType.createAndFill();\n const tr = new import_prosemirror_transform.Transform(node).replace(0, node.content.size, slice);\n return tr.doc;\n}\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n if (width != newWidth) {\n const added = [];\n const newRows = [];\n for (let row = 0; row < rows.length; row++) {\n const frag = rows[row], cells = [];\n for (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n let cell = frag.child(i % frag.childCount);\n if (col + cell.attrs.colspan > newWidth)\n cell = cell.type.createChecked(\n removeColSpan(\n cell.attrs,\n cell.attrs.colspan,\n col + cell.attrs.colspan - newWidth\n ),\n cell.content\n );\n cells.push(cell);\n col += cell.attrs.colspan;\n for (let j = 1; j < cell.attrs.rowspan; j++)\n added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n }\n newRows.push(import_prosemirror_model2.Fragment.from(cells));\n }\n rows = newRows;\n width = newWidth;\n }\n if (height != newHeight) {\n const newRows = [];\n for (let row = 0, i = 0; row < newHeight; row++, i++) {\n const cells = [], source = rows[i % height];\n for (let j = 0; j < source.childCount; j++) {\n let cell = source.child(j);\n if (row + cell.attrs.rowspan > newHeight)\n cell = cell.type.create(\n {\n ...cell.attrs,\n rowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n },\n cell.content\n );\n cells.push(cell);\n }\n newRows.push(import_prosemirror_model2.Fragment.from(cells));\n }\n rows = newRows;\n height = newHeight;\n }\n return { width, height, rows };\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n const schema = tr.doc.type.schema;\n const types = tableNodeTypes(schema);\n let empty;\n let emptyHead;\n if (width > map.width) {\n for (let row = 0, rowEnd = 0; row < map.height; row++) {\n const rowNode = table.child(row);\n rowEnd += rowNode.nodeSize;\n const cells = [];\n let add;\n if (rowNode.lastChild == null || rowNode.lastChild.type == types.cell)\n add = empty || (empty = types.cell.createAndFill());\n else\n add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n for (let i = map.width; i < width; i++)\n cells.push(add);\n tr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n }\n }\n if (height > map.height) {\n const cells = [];\n for (let i = 0, start2 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n const header = i >= map.width ? false : table.nodeAt(map.map[start2 + i]).type == types.header_cell;\n cells.push(\n header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill())\n );\n }\n const emptyRow = types.row.create(null, import_prosemirror_model2.Fragment.from(cells)), rows = [];\n for (let i = map.height; i < height; i++)\n rows.push(emptyRow);\n tr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n }\n return !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n if (top == 0 || top == map.height)\n return false;\n let found = false;\n for (let col = left; col < right; col++) {\n const index = top * map.width + col, pos = map.map[index];\n if (map.map[index - map.width] == pos) {\n found = true;\n const cell = table.nodeAt(pos);\n const { top: cellTop, left: cellLeft } = map.findCell(pos);\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n ...cell.attrs,\n rowspan: top - cellTop\n });\n tr.insert(\n tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)),\n cell.type.createAndFill({\n ...cell.attrs,\n rowspan: cellTop + cell.attrs.rowspan - top\n })\n );\n col += cell.attrs.colspan - 1;\n }\n }\n return found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n if (left == 0 || left == map.width)\n return false;\n let found = false;\n for (let row = top; row < bottom; row++) {\n const index = row * map.width + left, pos = map.map[index];\n if (map.map[index - 1] == pos) {\n found = true;\n const cell = table.nodeAt(pos);\n const cellLeft = map.colCount(pos);\n const updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n tr.setNodeMarkup(\n updatePos,\n null,\n removeColSpan(\n cell.attrs,\n left - cellLeft,\n cell.attrs.colspan - (left - cellLeft)\n )\n );\n tr.insert(\n updatePos + cell.nodeSize,\n cell.type.createAndFill(\n removeColSpan(cell.attrs, 0, left - cellLeft)\n )\n );\n row += cell.attrs.rowspan - 1;\n }\n }\n return found;\n}\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n let table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n if (!table) {\n throw new Error(\"No table found\");\n }\n let map = TableMap.get(table);\n const { top, left } = rect;\n const right = left + cells.width, bottom = top + cells.height;\n const tr = state.tr;\n let mapFrom = 0;\n function recomp() {\n table = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n if (!table) {\n throw new Error(\"No table found\");\n }\n map = TableMap.get(table);\n mapFrom = tr.mapping.maps.length;\n }\n if (growTable(tr, map, table, tableStart, right, bottom, mapFrom))\n recomp();\n if (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom))\n recomp();\n if (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom))\n recomp();\n if (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom))\n recomp();\n if (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom))\n recomp();\n for (let row = top; row < bottom; row++) {\n const from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n tr.replace(\n tr.mapping.slice(mapFrom).map(from + tableStart),\n tr.mapping.slice(mapFrom).map(to + tableStart),\n new import_prosemirror_model2.Slice(cells.rows[row - top], 0, 0)\n );\n }\n recomp();\n tr.setSelection(\n new CellSelection(\n tr.doc.resolve(tableStart + map.positionAt(top, left, table)),\n tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))\n )\n );\n dispatch(tr);\n}\n\n// src/input.ts\nvar handleKeyDown = (0, import_prosemirror_keymap.keydownHandler)({\n ArrowLeft: arrow(\"horiz\", -1),\n ArrowRight: arrow(\"horiz\", 1),\n ArrowUp: arrow(\"vert\", -1),\n ArrowDown: arrow(\"vert\", 1),\n \"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n \"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n \"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n \"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n Backspace: deleteCellSelection,\n \"Mod-Backspace\": deleteCellSelection,\n Delete: deleteCellSelection,\n \"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n if (selection.eq(state.selection))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(selection).scrollIntoView());\n return true;\n}\nfunction arrow(axis, dir) {\n return (state, dispatch, view) => {\n if (!view)\n return false;\n const sel = state.selection;\n if (sel instanceof CellSelection) {\n return maybeSetSelection(\n state,\n dispatch,\n import_prosemirror_state4.Selection.near(sel.$headCell, dir)\n );\n }\n if (axis != \"horiz\" && !sel.empty)\n return false;\n const end = atEndOfCell(view, axis, dir);\n if (end == null)\n return false;\n if (axis == \"horiz\") {\n return maybeSetSelection(\n state,\n dispatch,\n import_prosemirror_state4.Selection.near(state.doc.resolve(sel.head + dir), dir)\n );\n } else {\n const $cell = state.doc.resolve(end);\n const $next = nextCell($cell, axis, dir);\n let newSel;\n if ($next)\n newSel = import_prosemirror_state4.Selection.near($next, 1);\n else if (dir < 0)\n newSel = import_prosemirror_state4.Selection.near(state.doc.resolve($cell.before(-1)), -1);\n else\n newSel = import_prosemirror_state4.Selection.near(state.doc.resolve($cell.after(-1)), 1);\n return maybeSetSelection(state, dispatch, newSel);\n }\n };\n}\nfunction shiftArrow(axis, dir) {\n return (state, dispatch, view) => {\n if (!view)\n return false;\n const sel = state.selection;\n let cellSel;\n if (sel instanceof CellSelection) {\n cellSel = sel;\n } else {\n const end = atEndOfCell(view, axis, dir);\n if (end == null)\n return false;\n cellSel = new CellSelection(state.doc.resolve(end));\n }\n const $head = nextCell(cellSel.$headCell, axis, dir);\n if (!$head)\n return false;\n return maybeSetSelection(\n state,\n dispatch,\n new CellSelection(cellSel.$anchorCell, $head)\n );\n };\n}\nfunction deleteCellSelection(state, dispatch) {\n const sel = state.selection;\n if (!(sel instanceof CellSelection))\n return false;\n if (dispatch) {\n const tr = state.tr;\n const baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n sel.forEachCell((cell, pos) => {\n if (!cell.content.eq(baseContent))\n tr.replace(\n tr.mapping.map(pos + 1),\n tr.mapping.map(pos + cell.nodeSize - 1),\n new import_prosemirror_model3.Slice(baseContent, 0, 0)\n );\n });\n if (tr.docChanged)\n dispatch(tr);\n }\n return true;\n}\nfunction handleTripleClick(view, pos) {\n const doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n if (!$cell)\n return false;\n view.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n return true;\n}\nfunction handlePaste(view, _, slice) {\n if (!isInTable(view.state))\n return false;\n let cells = pastedCells(slice);\n const sel = view.state.selection;\n if (sel instanceof CellSelection) {\n if (!cells)\n cells = {\n width: 1,\n height: 1,\n rows: [\n import_prosemirror_model3.Fragment.from(\n fitSlice(tableNodeTypes(view.state.schema).cell, slice)\n )\n ]\n };\n const table = sel.$anchorCell.node(-1);\n const start = sel.$anchorCell.start(-1);\n const rect = TableMap.get(table).rectBetween(\n sel.$anchorCell.pos - start,\n sel.$headCell.pos - start\n );\n cells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n insertCells(view.state, view.dispatch, start, rect, cells);\n return true;\n } else if (cells) {\n const $cell = selectionCell(view.state);\n const start = $cell.start(-1);\n insertCells(\n view.state,\n view.dispatch,\n start,\n TableMap.get($cell.node(-1)).findCell($cell.pos - start),\n cells\n );\n return true;\n } else {\n return false;\n }\n}\nfunction handleMouseDown(view, startEvent) {\n var _a;\n if (startEvent.ctrlKey || startEvent.metaKey)\n return;\n const startDOMCell = domInCell(view, startEvent.target);\n let $anchor;\n if (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n setCellSelection(view.state.selection.$anchorCell, startEvent);\n startEvent.preventDefault();\n } else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_a = cellUnderMouse(view, startEvent)) == null ? void 0 : _a.pos) != $anchor.pos) {\n setCellSelection($anchor, startEvent);\n startEvent.preventDefault();\n } else if (!startDOMCell) {\n return;\n }\n function setCellSelection($anchor2, event) {\n let $head = cellUnderMouse(view, event);\n const starting = tableEditingKey.getState(view.state) == null;\n if (!$head || !inSameTable($anchor2, $head)) {\n if (starting)\n $head = $anchor2;\n else\n return;\n }\n const selection = new CellSelection($anchor2, $head);\n if (starting || !view.state.selection.eq(selection)) {\n const tr = view.state.tr.setSelection(selection);\n if (starting)\n tr.setMeta(tableEditingKey, $anchor2.pos);\n view.dispatch(tr);\n }\n }\n function stop() {\n view.root.removeEventListener(\"mouseup\", stop);\n view.root.removeEventListener(\"dragstart\", stop);\n view.root.removeEventListener(\"mousemove\", move);\n if (tableEditingKey.getState(view.state) != null)\n view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n }\n function move(_event) {\n const event = _event;\n const anchor = tableEditingKey.getState(view.state);\n let $anchor2;\n if (anchor != null) {\n $anchor2 = view.state.doc.resolve(anchor);\n } else if (domInCell(view, event.target) != startDOMCell) {\n $anchor2 = cellUnderMouse(view, startEvent);\n if (!$anchor2)\n return stop();\n }\n if ($anchor2)\n setCellSelection($anchor2, event);\n }\n view.root.addEventListener(\"mouseup\", stop);\n view.root.addEventListener(\"dragstart\", stop);\n view.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n if (!(view.state.selection instanceof import_prosemirror_state4.TextSelection))\n return null;\n const { $head } = view.state.selection;\n for (let d = $head.depth - 1; d >= 0; d--) {\n const parent = $head.node(d), index = dir < 0 ? $head.index(d) : $head.indexAfter(d);\n if (index != (dir < 0 ? 0 : parent.childCount))\n return null;\n if (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n const cellPos = $head.before(d);\n const dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n return view.endOfTextblock(dirStr) ? cellPos : null;\n }\n }\n return null;\n}\nfunction domInCell(view, dom) {\n for (; dom && dom != view.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") {\n return dom;\n }\n }\n return null;\n}\nfunction cellUnderMouse(view, event) {\n const mousePos = view.posAtCoords({\n left: event.clientX,\n top: event.clientY\n });\n if (!mousePos)\n return null;\n return mousePos ? cellAround(view.state.doc.resolve(mousePos.pos)) : null;\n}\n\n// src/columnresizing.ts\nvar import_prosemirror_state5 = require(\"prosemirror-state\");\nvar import_prosemirror_view2 = require(\"prosemirror-view\");\n\n// src/tableview.ts\nvar TableView = class {\n constructor(node, cellMinWidth) {\n this.node = node;\n this.cellMinWidth = cellMinWidth;\n this.dom = document.createElement(\"div\");\n this.dom.className = \"tableWrapper\";\n this.table = this.dom.appendChild(document.createElement(\"table\"));\n this.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n updateColumnsOnResize(node, this.colgroup, this.table, cellMinWidth);\n this.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n }\n update(node) {\n if (node.type != this.node.type)\n return false;\n this.node = node;\n updateColumnsOnResize(node, this.colgroup, this.table, this.cellMinWidth);\n return true;\n }\n ignoreMutation(record) {\n return record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n }\n};\nfunction updateColumnsOnResize(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {\n var _a;\n let totalWidth = 0;\n let fixedWidth = true;\n let nextDOM = colgroup.firstChild;\n const row = node.firstChild;\n if (!row)\n return;\n for (let i = 0, col = 0; i < row.childCount; i++) {\n const { colspan, colwidth } = row.child(i).attrs;\n for (let j = 0; j < colspan; j++, col++) {\n const hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n const cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n totalWidth += hasWidth || cellMinWidth;\n if (!hasWidth)\n fixedWidth = false;\n if (!nextDOM) {\n colgroup.appendChild(document.createElement(\"col\")).style.width = cssWidth;\n } else {\n if (nextDOM.style.width != cssWidth)\n nextDOM.style.width = cssWidth;\n nextDOM = nextDOM.nextSibling;\n }\n }\n }\n while (nextDOM) {\n const after = nextDOM.nextSibling;\n (_a = nextDOM.parentNode) == null ? void 0 : _a.removeChild(nextDOM);\n nextDOM = after;\n }\n if (fixedWidth) {\n table.style.width = totalWidth + \"px\";\n table.style.minWidth = \"\";\n } else {\n table.style.width = \"\";\n table.style.minWidth = totalWidth + \"px\";\n }\n}\n\n// src/columnresizing.ts\nvar columnResizingPluginKey = new import_prosemirror_state5.PluginKey(\n \"tableColumnResizing\"\n);\nfunction columnResizing({\n handleWidth = 5,\n cellMinWidth = 25,\n View = TableView,\n lastColumnResizable = true\n} = {}) {\n const plugin = new import_prosemirror_state5.Plugin({\n key: columnResizingPluginKey,\n state: {\n init(_, state) {\n plugin.spec.props.nodeViews[tableNodeTypes(state.schema).table.name] = (node, view) => new View(node, cellMinWidth, view);\n return new ResizeState(-1, false);\n },\n apply(tr, prev) {\n return prev.apply(tr);\n }\n },\n props: {\n attributes: (state) => {\n const pluginState = columnResizingPluginKey.getState(state);\n return pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n },\n handleDOMEvents: {\n mousemove: (view, event) => {\n handleMouseMove(\n view,\n event,\n handleWidth,\n cellMinWidth,\n lastColumnResizable\n );\n },\n mouseleave: (view) => {\n handleMouseLeave(view);\n },\n mousedown: (view, event) => {\n handleMouseDown2(view, event, cellMinWidth);\n }\n },\n decorations: (state) => {\n const pluginState = columnResizingPluginKey.getState(state);\n if (pluginState && pluginState.activeHandle > -1) {\n return handleDecorations(state, pluginState.activeHandle);\n }\n },\n nodeViews: {}\n }\n });\n return plugin;\n}\nvar ResizeState = class {\n constructor(activeHandle, dragging) {\n this.activeHandle = activeHandle;\n this.dragging = dragging;\n }\n apply(tr) {\n const state = this;\n const action = tr.getMeta(columnResizingPluginKey);\n if (action && action.setHandle != null)\n return new ResizeState(action.setHandle, false);\n if (action && action.setDragging !== void 0)\n return new ResizeState(state.activeHandle, action.setDragging);\n if (state.activeHandle > -1 && tr.docChanged) {\n let handle = tr.mapping.map(state.activeHandle, -1);\n if (!pointsAtCell(tr.doc.resolve(handle))) {\n handle = -1;\n }\n return new ResizeState(handle, state.dragging);\n }\n return state;\n }\n};\nfunction handleMouseMove(view, event, handleWidth, cellMinWidth, lastColumnResizable) {\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (!pluginState)\n return;\n if (!pluginState.dragging) {\n const target = domCellAround(event.target);\n let cell = -1;\n if (target) {\n const { left, right } = target.getBoundingClientRect();\n if (event.clientX - left <= handleWidth)\n cell = edgeCell(view, event, \"left\");\n else if (right - event.clientX <= handleWidth)\n cell = edgeCell(view, event, \"right\");\n }\n if (cell != pluginState.activeHandle) {\n if (!lastColumnResizable && cell !== -1) {\n const $cell = view.state.doc.resolve(cell);\n const table = $cell.node(-1);\n const map = TableMap.get(table);\n const tableStart = $cell.start(-1);\n const col = map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1;\n if (col == map.width - 1) {\n return;\n }\n }\n updateHandle(view, cell);\n }\n }\n}\nfunction handleMouseLeave(view) {\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging)\n updateHandle(view, -1);\n}\nfunction handleMouseDown2(view, event, cellMinWidth) {\n const pluginState = columnResizingPluginKey.getState(view.state);\n if (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging)\n return false;\n const cell = view.state.doc.nodeAt(pluginState.activeHandle);\n const width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n view.dispatch(\n view.state.tr.setMeta(columnResizingPluginKey, {\n setDragging: { startX: event.clientX, startWidth: width }\n })\n );\n function finish(event2) {\n window.removeEventListener(\"mouseup\", finish);\n window.removeEventListener(\"mousemove\", move);\n const pluginState2 = columnResizingPluginKey.getState(view.state);\n if (pluginState2 == null ? void 0 : pluginState2.dragging) {\n updateColumnWidth(\n view,\n pluginState2.activeHandle,\n draggedWidth(pluginState2.dragging, event2, cellMinWidth)\n );\n view.dispatch(\n view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null })\n );\n }\n }\n function move(event2) {\n if (!event2.which)\n return finish(event2);\n const pluginState2 = columnResizingPluginKey.getState(view.state);\n if (!pluginState2)\n return;\n if (pluginState2.dragging) {\n const dragged = draggedWidth(pluginState2.dragging, event2, cellMinWidth);\n displayColumnWidth(view, pluginState2.activeHandle, dragged, cellMinWidth);\n }\n }\n window.addEventListener(\"mouseup\", finish);\n window.addEventListener(\"mousemove\", move);\n event.preventDefault();\n return true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n const width = colwidth && colwidth[colwidth.length - 1];\n if (width)\n return width;\n const dom = view.domAtPos(cellPos);\n const node = dom.node.childNodes[dom.offset];\n let domWidth = node.offsetWidth, parts = colspan;\n if (colwidth) {\n for (let i = 0; i < colspan; i++)\n if (colwidth[i]) {\n domWidth -= colwidth[i];\n parts--;\n }\n }\n return domWidth / parts;\n}\nfunction domCellAround(target) {\n while (target && target.nodeName != \"TD\" && target.nodeName != \"TH\")\n target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n return target;\n}\nfunction edgeCell(view, event, side) {\n const found = view.posAtCoords({ left: event.clientX, top: event.clientY });\n if (!found)\n return -1;\n const { pos } = found;\n const $cell = cellAround(view.state.doc.resolve(pos));\n if (!$cell)\n return -1;\n if (side == \"right\")\n return $cell.pos;\n const map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n const index = map.map.indexOf($cell.pos - start);\n return index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, cellMinWidth) {\n const offset = event.clientX - dragging.startX;\n return Math.max(cellMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n view.dispatch(\n view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value })\n );\n}\nfunction updateColumnWidth(view, cell, width) {\n const $cell = view.state.doc.resolve(cell);\n const table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n const col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n const tr = view.state.tr;\n for (let row = 0; row < map.height; row++) {\n const mapIndex = row * map.width + col;\n if (row && map.map[mapIndex] == map.map[mapIndex - map.width])\n continue;\n const pos = map.map[mapIndex];\n const attrs = table.nodeAt(pos).attrs;\n const index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n if (attrs.colwidth && attrs.colwidth[index] == width)\n continue;\n const colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n colwidth[index] = width;\n tr.setNodeMarkup(start + pos, null, { ...attrs, colwidth });\n }\n if (tr.docChanged)\n view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, cellMinWidth) {\n const $cell = view.state.doc.resolve(cell);\n const table = $cell.node(-1), start = $cell.start(-1);\n const col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n let dom = view.domAtPos($cell.start(-1)).node;\n while (dom && dom.nodeName != \"TABLE\") {\n dom = dom.parentNode;\n }\n if (!dom)\n return;\n updateColumnsOnResize(\n table,\n dom.firstChild,\n dom,\n cellMinWidth,\n col,\n width\n );\n}\nfunction zeroes(n) {\n return Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n const decorations = [];\n const $cell = state.doc.resolve(cell);\n const table = $cell.node(-1);\n if (!table) {\n return import_prosemirror_view2.DecorationSet.empty;\n }\n const map = TableMap.get(table);\n const start = $cell.start(-1);\n const col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan;\n for (let row = 0; row < map.height; row++) {\n const index = col + row * map.width - 1;\n if ((col == map.width || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index - 1] != map.map[index - 1 - map.width])) {\n const cellPos = map.map[index];\n const pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n const dom = document.createElement(\"div\");\n dom.className = \"column-resize-handle\";\n decorations.push(import_prosemirror_view2.Decoration.widget(pos, dom));\n }\n }\n return import_prosemirror_view2.DecorationSet.create(state.doc, decorations);\n}\n\n// src/commands.ts\nvar import_prosemirror_model4 = require(\"prosemirror-model\");\nvar import_prosemirror_state6 = require(\"prosemirror-state\");\nfunction selectedRect(state) {\n const sel = state.selection;\n const $pos = selectionCell(state);\n const table = $pos.node(-1);\n const tableStart = $pos.start(-1);\n const map = TableMap.get(table);\n const rect = sel instanceof CellSelection ? map.rectBetween(\n sel.$anchorCell.pos - tableStart,\n sel.$headCell.pos - tableStart\n ) : map.findCell($pos.pos - tableStart);\n return { ...rect, tableStart, map, table };\n}\nfunction addColumn(tr, { map, tableStart, table }, col) {\n let refColumn = col > 0 ? -1 : 0;\n if (columnIsHeader(map, table, col + refColumn)) {\n refColumn = col == 0 || col == map.width ? null : 0;\n }\n for (let row = 0; row < map.height; row++) {\n const index = row * map.width + col;\n if (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n const pos = map.map[index];\n const cell = table.nodeAt(pos);\n tr.setNodeMarkup(\n tr.mapping.map(tableStart + pos),\n null,\n addColSpan(cell.attrs, col - map.colCount(pos))\n );\n row += cell.attrs.rowspan - 1;\n } else {\n const type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n const pos = map.positionAt(row, col, table);\n tr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n }\n }\n return tr;\n}\nfunction addColumnBefore(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addColumn(state.tr, rect, rect.left));\n }\n return true;\n}\nfunction addColumnAfter(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addColumn(state.tr, rect, rect.right));\n }\n return true;\n}\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n const mapStart = tr.mapping.maps.length;\n for (let row = 0; row < map.height; ) {\n const index = row * map.width + col;\n const pos = map.map[index];\n const cell = table.nodeAt(pos);\n const attrs = cell.attrs;\n if (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) {\n tr.setNodeMarkup(\n tr.mapping.slice(mapStart).map(tableStart + pos),\n null,\n removeColSpan(attrs, col - map.colCount(pos))\n );\n } else {\n const start = tr.mapping.slice(mapStart).map(tableStart + pos);\n tr.delete(start, start + cell.nodeSize);\n }\n row += attrs.rowspan;\n }\n}\nfunction deleteColumn(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const rect = selectedRect(state);\n const tr = state.tr;\n if (rect.left == 0 && rect.right == rect.map.width)\n return false;\n for (let i = rect.right - 1; ; i--) {\n removeColumn(tr, rect, i);\n if (i == rect.left)\n break;\n const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n if (!table) {\n throw RangeError(\"No table found\");\n }\n rect.table = table;\n rect.map = TableMap.get(table);\n }\n dispatch(tr);\n }\n return true;\n}\nfunction rowIsHeader(map, table, row) {\n var _a;\n const headerCell = tableNodeTypes(table.type.schema).header_cell;\n for (let col = 0; col < map.width; col++)\n if (((_a = table.nodeAt(map.map[col + row * map.width])) == null ? void 0 : _a.type) != headerCell)\n return false;\n return true;\n}\nfunction addRow(tr, { map, tableStart, table }, row) {\n var _a;\n let rowPos = tableStart;\n for (let i = 0; i < row; i++)\n rowPos += table.child(i).nodeSize;\n const cells = [];\n let refRow = row > 0 ? -1 : 0;\n if (rowIsHeader(map, table, row + refRow))\n refRow = row == 0 || row == map.height ? null : 0;\n for (let col = 0, index = map.width * row; col < map.width; col++, index++) {\n if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n const pos = map.map[index];\n const attrs = table.nodeAt(pos).attrs;\n tr.setNodeMarkup(tableStart + pos, null, {\n ...attrs,\n rowspan: attrs.rowspan + 1\n });\n col += attrs.colspan - 1;\n } else {\n const type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_a = table.nodeAt(map.map[index + refRow * map.width])) == null ? void 0 : _a.type;\n const node = type == null ? void 0 : type.createAndFill();\n if (node)\n cells.push(node);\n }\n }\n tr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n return tr;\n}\nfunction addRowBefore(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRow(state.tr, rect, rect.top));\n }\n return true;\n}\nfunction addRowAfter(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const rect = selectedRect(state);\n dispatch(addRow(state.tr, rect, rect.bottom));\n }\n return true;\n}\nfunction removeRow(tr, { map, table, tableStart }, row) {\n let rowPos = 0;\n for (let i = 0; i < row; i++)\n rowPos += table.child(i).nodeSize;\n const nextRow = rowPos + table.child(row).nodeSize;\n const mapFrom = tr.mapping.maps.length;\n tr.delete(rowPos + tableStart, nextRow + tableStart);\n for (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n const pos = map.map[index];\n if (row > 0 && pos == map.map[index - map.width]) {\n const attrs = table.nodeAt(pos).attrs;\n tr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n ...attrs,\n rowspan: attrs.rowspan - 1\n });\n col += attrs.colspan - 1;\n } else if (row < map.width && pos == map.map[index + map.width]) {\n const cell = table.nodeAt(pos);\n const attrs = cell.attrs;\n const copy = cell.type.create(\n { ...attrs, rowspan: cell.attrs.rowspan - 1 },\n cell.content\n );\n const newPos = map.positionAt(row + 1, col, table);\n tr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n col += attrs.colspan - 1;\n }\n }\n}\nfunction deleteRow(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const rect = selectedRect(state), tr = state.tr;\n if (rect.top == 0 && rect.bottom == rect.map.height)\n return false;\n for (let i = rect.bottom - 1; ; i--) {\n removeRow(tr, rect, i);\n if (i == rect.top)\n break;\n const table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n if (!table) {\n throw RangeError(\"No table found\");\n }\n rect.table = table;\n rect.map = TableMap.get(rect.table);\n }\n dispatch(tr);\n }\n return true;\n}\nfunction isEmpty(cell) {\n const c = cell.content;\n return c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n let indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n let indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n for (let i = rect.top; i < rect.bottom; i++) {\n if (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1])\n return true;\n indexLeft += width;\n indexRight += width;\n }\n for (let i = rect.left; i < rect.right; i++) {\n if (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width])\n return true;\n indexTop++;\n indexBottom++;\n }\n return false;\n}\nfunction mergeCells(state, dispatch) {\n const sel = state.selection;\n if (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos)\n return false;\n const rect = selectedRect(state), { map } = rect;\n if (cellsOverlapRectangle(map, rect))\n return false;\n if (dispatch) {\n const tr = state.tr;\n const seen = {};\n let content = import_prosemirror_model4.Fragment.empty;\n let mergedPos;\n let mergedCell;\n for (let row = rect.top; row < rect.bottom; row++) {\n for (let col = rect.left; col < rect.right; col++) {\n const cellPos = map.map[row * map.width + col];\n const cell = rect.table.nodeAt(cellPos);\n if (seen[cellPos] || !cell)\n continue;\n seen[cellPos] = true;\n if (mergedPos == null) {\n mergedPos = cellPos;\n mergedCell = cell;\n } else {\n if (!isEmpty(cell))\n content = content.append(cell.content);\n const mapped = tr.mapping.map(cellPos + rect.tableStart);\n tr.delete(mapped, mapped + cell.nodeSize);\n }\n }\n }\n if (mergedPos == null || mergedCell == null) {\n return true;\n }\n tr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n ...addColSpan(\n mergedCell.attrs,\n mergedCell.attrs.colspan,\n rect.right - rect.left - mergedCell.attrs.colspan\n ),\n rowspan: rect.bottom - rect.top\n });\n if (content.size) {\n const end = mergedPos + 1 + mergedCell.content.size;\n const start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n tr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n }\n tr.setSelection(\n new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart))\n );\n dispatch(tr);\n }\n return true;\n}\nfunction splitCell(state, dispatch) {\n const nodeTypes = tableNodeTypes(state.schema);\n return splitCellWithType(({ node }) => {\n return nodeTypes[node.type.spec.tableRole];\n })(state, dispatch);\n}\nfunction splitCellWithType(getCellType) {\n return (state, dispatch) => {\n var _a;\n const sel = state.selection;\n let cellNode;\n let cellPos;\n if (!(sel instanceof CellSelection)) {\n cellNode = cellWrapping(sel.$from);\n if (!cellNode)\n return false;\n cellPos = (_a = cellAround(sel.$from)) == null ? void 0 : _a.pos;\n } else {\n if (sel.$anchorCell.pos != sel.$headCell.pos)\n return false;\n cellNode = sel.$anchorCell.nodeAfter;\n cellPos = sel.$anchorCell.pos;\n }\n if (cellNode == null || cellPos == null) {\n return false;\n }\n if (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) {\n return false;\n }\n if (dispatch) {\n let baseAttrs = cellNode.attrs;\n const attrs = [];\n const colwidth = baseAttrs.colwidth;\n if (baseAttrs.rowspan > 1)\n baseAttrs = { ...baseAttrs, rowspan: 1 };\n if (baseAttrs.colspan > 1)\n baseAttrs = { ...baseAttrs, colspan: 1 };\n const rect = selectedRect(state), tr = state.tr;\n for (let i = 0; i < rect.right - rect.left; i++)\n attrs.push(\n colwidth ? {\n ...baseAttrs,\n colwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n } : baseAttrs\n );\n let lastCell;\n for (let row = rect.top; row < rect.bottom; row++) {\n let pos = rect.map.positionAt(row, rect.left, rect.table);\n if (row == rect.top)\n pos += cellNode.nodeSize;\n for (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n if (col == rect.left && row == rect.top)\n continue;\n tr.insert(\n lastCell = tr.mapping.map(pos + rect.tableStart, 1),\n getCellType({ node: cellNode, row, col }).createAndFill(attrs[i])\n );\n }\n }\n tr.setNodeMarkup(\n cellPos,\n getCellType({ node: cellNode, row: rect.top, col: rect.left }),\n attrs[0]\n );\n if (sel instanceof CellSelection)\n tr.setSelection(\n new CellSelection(\n tr.doc.resolve(sel.$anchorCell.pos),\n lastCell ? tr.doc.resolve(lastCell) : void 0\n )\n );\n dispatch(tr);\n }\n return true;\n };\n}\nfunction setCellAttr(name, value) {\n return function(state, dispatch) {\n if (!isInTable(state))\n return false;\n const $cell = selectionCell(state);\n if ($cell.nodeAfter.attrs[name] === value)\n return false;\n if (dispatch) {\n const tr = state.tr;\n if (state.selection instanceof CellSelection)\n state.selection.forEachCell((node, pos) => {\n if (node.attrs[name] !== value)\n tr.setNodeMarkup(pos, null, {\n ...node.attrs,\n [name]: value\n });\n });\n else\n tr.setNodeMarkup($cell.pos, null, {\n ...$cell.nodeAfter.attrs,\n [name]: value\n });\n dispatch(tr);\n }\n return true;\n };\n}\nfunction deprecated_toggleHeader(type) {\n return function(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const types = tableNodeTypes(state.schema);\n const rect = selectedRect(state), tr = state.tr;\n const cells = rect.map.cellsInRect(\n type == \"column\" ? {\n left: rect.left,\n top: 0,\n right: rect.right,\n bottom: rect.map.height\n } : type == \"row\" ? {\n left: 0,\n top: rect.top,\n right: rect.map.width,\n bottom: rect.bottom\n } : rect\n );\n const nodes = cells.map((pos) => rect.table.nodeAt(pos));\n for (let i = 0; i < cells.length; i++)\n if (nodes[i].type == types.header_cell)\n tr.setNodeMarkup(\n rect.tableStart + cells[i],\n types.cell,\n nodes[i].attrs\n );\n if (tr.steps.length == 0)\n for (let i = 0; i < cells.length; i++)\n tr.setNodeMarkup(\n rect.tableStart + cells[i],\n types.header_cell,\n nodes[i].attrs\n );\n dispatch(tr);\n }\n return true;\n };\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n const cellPositions = rect.map.cellsInRect({\n left: 0,\n top: 0,\n right: type == \"row\" ? rect.map.width : 1,\n bottom: type == \"column\" ? rect.map.height : 1\n });\n for (let i = 0; i < cellPositions.length; i++) {\n const cell = rect.table.nodeAt(cellPositions[i]);\n if (cell && cell.type !== types.header_cell) {\n return false;\n }\n }\n return true;\n}\nfunction toggleHeader(type, options) {\n options = options || { useDeprecatedLogic: false };\n if (options.useDeprecatedLogic)\n return deprecated_toggleHeader(type);\n return function(state, dispatch) {\n if (!isInTable(state))\n return false;\n if (dispatch) {\n const types = tableNodeTypes(state.schema);\n const rect = selectedRect(state), tr = state.tr;\n const isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n const isHeaderColumnEnabled = isHeaderEnabledByType(\n \"column\",\n rect,\n types\n );\n const isHeaderEnabled = type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false;\n const selectionStartsAt = isHeaderEnabled ? 1 : 0;\n const cellsRect = type == \"column\" ? {\n left: 0,\n top: selectionStartsAt,\n right: 1,\n bottom: rect.map.height\n } : type == \"row\" ? {\n left: selectionStartsAt,\n top: 0,\n right: rect.map.width,\n bottom: 1\n } : rect;\n const newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n rect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n const cellPos = relativeCellPos + rect.tableStart;\n const cell = tr.doc.nodeAt(cellPos);\n if (cell) {\n tr.setNodeMarkup(cellPos, newType, cell.attrs);\n }\n });\n dispatch(tr);\n }\n return true;\n };\n}\nvar toggleHeaderRow = toggleHeader(\"row\", {\n useDeprecatedLogic: true\n});\nvar toggleHeaderColumn = toggleHeader(\"column\", {\n useDeprecatedLogic: true\n});\nvar toggleHeaderCell = toggleHeader(\"cell\", {\n useDeprecatedLogic: true\n});\nfunction findNextCell($cell, dir) {\n if (dir < 0) {\n const before = $cell.nodeBefore;\n if (before)\n return $cell.pos - before.nodeSize;\n for (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n const rowNode = $cell.node(-1).child(row);\n const lastChild = rowNode.lastChild;\n if (lastChild) {\n return rowEnd - 1 - lastChild.nodeSize;\n }\n rowEnd -= rowNode.nodeSize;\n }\n } else {\n if ($cell.index() < $cell.parent.childCount - 1) {\n return $cell.pos + $cell.nodeAfter.nodeSize;\n }\n const table = $cell.node(-1);\n for (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n const rowNode = table.child(row);\n if (rowNode.childCount)\n return rowStart + 1;\n rowStart += rowNode.nodeSize;\n }\n }\n return null;\n}\nfunction goToNextCell(direction) {\n return function(state, dispatch) {\n if (!isInTable(state))\n return false;\n const cell = findNextCell(selectionCell(state), direction);\n if (cell == null)\n return false;\n if (dispatch) {\n const $cell = state.doc.resolve(cell);\n dispatch(\n state.tr.setSelection(import_prosemirror_state6.TextSelection.between($cell, moveCellForward($cell))).scrollIntoView()\n );\n }\n return true;\n };\n}\nfunction deleteTable(state, dispatch) {\n const $pos = state.selection.$anchor;\n for (let d = $pos.depth; d > 0; d--) {\n const node = $pos.node(d);\n if (node.type.spec.tableRole == \"table\") {\n if (dispatch)\n dispatch(\n state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView()\n );\n return true;\n }\n }\n return false;\n}\n\n// src/index.ts\nfunction tableEditing({\n allowTableNodeSelection = false\n} = {}) {\n return new import_prosemirror_state7.Plugin({\n key: tableEditingKey,\n state: {\n init() {\n return null;\n },\n apply(tr, cur) {\n const set = tr.getMeta(tableEditingKey);\n if (set != null)\n return set == -1 ? null : set;\n if (cur == null || !tr.docChanged)\n return cur;\n const { deleted, pos } = tr.mapping.mapResult(cur);\n return deleted ? null : pos;\n }\n },\n props: {\n decorations: drawCellSelection,\n handleDOMEvents: {\n mousedown: handleMouseDown\n },\n createSelectionBetween(view) {\n return tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n },\n handleTripleClick,\n handleKeyDown,\n handlePaste\n },\n appendTransaction(_, oldState, state) {\n return normalizeSelection(\n state,\n fixTables(state, oldState),\n allowTableNodeSelection\n );\n }\n });\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n CellBookmark,\n CellSelection,\n ResizeState,\n TableMap,\n TableView,\n __clipCells,\n __insertCells,\n __pastedCells,\n addColSpan,\n addColumn,\n addColumnAfter,\n addColumnBefore,\n addRow,\n addRowAfter,\n addRowBefore,\n cellAround,\n colCount,\n columnIsHeader,\n columnResizing,\n columnResizingPluginKey,\n deleteColumn,\n deleteRow,\n deleteTable,\n findCell,\n fixTables,\n fixTablesKey,\n goToNextCell,\n handlePaste,\n inSameTable,\n isInTable,\n mergeCells,\n moveCellForward,\n nextCell,\n pointsAtCell,\n removeColSpan,\n removeColumn,\n removeRow,\n rowIsHeader,\n selectedRect,\n selectionCell,\n setCellAttr,\n splitCell,\n splitCellWithType,\n tableEditing,\n tableEditingKey,\n tableNodeTypes,\n tableNodes,\n toggleHeader,\n toggleHeaderCell,\n toggleHeaderColumn,\n toggleHeaderRow,\n updateColumnsOnResize\n});\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar prosemirrorState = require('prosemirror-state');\nvar prosemirrorModel = require('prosemirror-model');\nvar prosemirrorTables = require('prosemirror-tables');\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a node of a given `nodeType`. It will return an original transaction if parent node hasn't been found.\n//\n// ```javascript\n// dispatch(\n// removeParentNodeOfType(schema.nodes.table)(tr)\n// );\n// ```\nvar removeParentNodeOfType = function removeParentNodeOfType(nodeType) {\n return function (tr) {\n var parent = findParentNodeOfType(nodeType)(tr.selection);\n if (parent) {\n return removeNodeAtPos(parent.pos)(tr);\n }\n return tr;\n };\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>, content: union<ProseMirrorNode, Fragment>) → (tr: Transaction) → Transaction\n// Returns a new transaction that replaces parent node of a given `nodeType` with the given `content`. It will return an original transaction if either parent node hasn't been found or replacing is not possible.\n//\n// ```javascript\n// const node = schema.nodes.paragraph.createChecked({}, schema.text('new'));\n//\n// dispatch(\n// replaceParentNodeOfType(schema.nodes.table, node)(tr)\n// );\n// ```\nvar replaceParentNodeOfType = function replaceParentNodeOfType(nodeType, content) {\n return function (tr) {\n if (!Array.isArray(nodeType)) {\n nodeType = [nodeType];\n }\n for (var i = 0, count = nodeType.length; i < count; i++) {\n var parent = findParentNodeOfType(nodeType[i])(tr.selection);\n if (parent) {\n var newTr = replaceNodeAtPos(parent.pos, content)(tr);\n if (newTr !== tr) {\n return newTr;\n }\n }\n }\n return tr;\n };\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes selected node. It will return an original transaction if current selection is not a `NodeSelection`.\n//\n// ```javascript\n// dispatch(\n// removeSelectedNode(tr)\n// );\n// ```\nvar removeSelectedNode = function removeSelectedNode(tr) {\n if (isNodeSelection(tr.selection)) {\n var from = tr.selection.$from.pos;\n var to = tr.selection.$to.pos;\n return cloneTr(tr.delete(from, to));\n }\n return tr;\n};\n\n// :: (content: union<ProseMirrorNode, ProseMirrorFragment>) → (tr: Transaction) → Transaction\n// Returns a new transaction that replaces selected node with a given `node`, keeping NodeSelection on the new `node`.\n// It will return the original transaction if either current selection is not a NodeSelection or replacing is not possible.\n//\n// ```javascript\n// const node = schema.nodes.paragraph.createChecked({}, schema.text('new'));\n// dispatch(\n// replaceSelectedNode(node)(tr)\n// );\n// ```\nvar replaceSelectedNode = function replaceSelectedNode(content) {\n return function (tr) {\n if (isNodeSelection(tr.selection)) {\n var _tr$selection = tr.selection,\n $from = _tr$selection.$from,\n $to = _tr$selection.$to;\n\n if (content instanceof prosemirrorModel.Fragment && $from.parent.canReplace($from.index(), $from.indexAfter(), content) || $from.parent.canReplaceWith($from.index(), $from.indexAfter(), content.type)) {\n return cloneTr(tr.replaceWith($from.pos, $to.pos, content)\n // restore node selection\n .setSelection(new prosemirrorState.NodeSelection(tr.doc.resolve($from.pos))));\n }\n }\n return tr;\n };\n};\n\n// :: (position: number, dir: ?number) → (tr: Transaction) → Transaction\n// Returns a new transaction that tries to find a valid cursor selection starting at the given `position`\n// and searching back if `dir` is negative, and forward if positive.\n// If a valid cursor position hasn't been found, it will return the original transaction.\n//\n// ```javascript\n// dispatch(\n// setTextSelection(5)(tr)\n// );\n// ```\nvar setTextSelection = function setTextSelection(position) {\n var dir = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return function (tr) {\n var nextSelection = prosemirrorState.Selection.findFrom(tr.doc.resolve(position), dir, true);\n if (nextSelection) {\n return tr.setSelection(nextSelection);\n }\n return tr;\n };\n};\n\nvar isSelectableNode = function isSelectableNode(node) {\n return node.type && node.type.spec.selectable;\n};\nvar shouldSelectNode = function shouldSelectNode(node) {\n return isSelectableNode(node) && node.type.isLeaf;\n};\n\nvar setSelection = function setSelection(node, pos, tr) {\n if (shouldSelectNode(node)) {\n return tr.setSelection(new prosemirrorState.NodeSelection(tr.doc.resolve(pos)));\n }\n return setTextSelection(pos)(tr);\n};\n\n// :: (content: union<ProseMirrorNode, Fragment>, position: ?number, tryToReplace?: boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that inserts a given `content` at the current cursor position, or at a given `position`, if it is allowed by schema. If schema restricts such nesting, it will try to find an appropriate place for a given node in the document, looping through parent nodes up until the root document node.\n// If `tryToReplace` is true and current selection is a NodeSelection, it will replace selected node with inserted content if its allowed by schema.\n// If cursor is inside of an empty paragraph, it will try to replace that paragraph with the given content. If insertion is successful and inserted node has content, it will set cursor inside of that content.\n// It will return an original transaction if the place for insertion hasn't been found.\n//\n// ```javascript\n// const node = schema.nodes.extension.createChecked({});\n// dispatch(\n// safeInsert(node)(tr)\n// );\n// ```\nvar safeInsert = function safeInsert(content, position, tryToReplace) {\n return function (tr) {\n var hasPosition = typeof position === 'number';\n var $from = tr.selection.$from;\n\n var $insertPos = hasPosition ? tr.doc.resolve(position) : isNodeSelection(tr.selection) ? tr.doc.resolve($from.pos + 1) : $from;\n var parent = $insertPos.parent;\n\n // try to replace selected node\n\n if (isNodeSelection(tr.selection) && tryToReplace) {\n var oldTr = tr;\n tr = replaceSelectedNode(content)(tr);\n if (oldTr !== tr) {\n return tr;\n }\n }\n\n // try to replace an empty paragraph\n if (isEmptyParagraph(parent)) {\n var _oldTr = tr;\n tr = replaceParentNodeOfType(parent.type, content)(tr);\n if (_oldTr !== tr) {\n var pos = isSelectableNode(content) ? // for selectable node, selection position would be the position of the replaced parent\n $insertPos.before($insertPos.depth) : $insertPos.pos;\n return setSelection(content, pos, tr);\n }\n }\n\n // given node is allowed at the current cursor position\n if (canInsert($insertPos, content)) {\n tr.insert($insertPos.pos, content);\n var _pos = hasPosition ? $insertPos.pos : isSelectableNode(content) ? // for atom nodes selection position after insertion is the previous pos\n tr.selection.$anchor.pos - 1 : tr.selection.$anchor.pos;\n return cloneTr(setSelection(content, _pos, tr));\n }\n\n // looking for a place in the doc where the node is allowed\n for (var i = $insertPos.depth; i > 0; i--) {\n var _pos2 = $insertPos.after(i);\n var $pos = tr.doc.resolve(_pos2);\n if (canInsert($pos, content)) {\n tr.insert(_pos2, content);\n return cloneTr(setSelection(content, _pos2, tr));\n }\n }\n return tr;\n };\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>, type: ?union<NodeType, null>, attrs: ?union<Object, null>, marks?: [Mark]) → (tr: Transaction) → Transaction\n// Returns a transaction that changes the type, attributes, and/or marks of the parent node of a given `nodeType`.\n//\n// ```javascript\n// const node = schema.nodes.extension.createChecked({});\n// dispatch(\n// setParentNodeMarkup(schema.nodes.panel, null, { panelType })(tr);\n// );\n// ```\nvar setParentNodeMarkup = function setParentNodeMarkup(nodeType, type, attrs, marks) {\n return function (tr) {\n var parent = findParentNodeOfType(nodeType)(tr.selection);\n if (parent) {\n return cloneTr(tr.setNodeMarkup(parent.pos, type, Object.assign({}, parent.node.attrs, attrs), marks));\n }\n return tr;\n };\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (tr: Transaction) → Transaction\n// Returns a new transaction that sets a `NodeSelection` on a parent node of a `given nodeType`.\n//\n// ```javascript\n// dispatch(\n// selectParentNodeOfType([tableCell, tableHeader])(state.tr)\n// );\n// ```\nvar selectParentNodeOfType = function selectParentNodeOfType(nodeType) {\n return function (tr) {\n if (!isNodeSelection(tr.selection)) {\n var parent = findParentNodeOfType(nodeType)(tr.selection);\n if (parent) {\n return cloneTr(tr.setSelection(prosemirrorState.NodeSelection.create(tr.doc, parent.pos)));\n }\n }\n return tr;\n };\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that deletes previous node.\n//\n// ```javascript\n// dispatch(\n// removeNodeBefore(state.tr)\n// );\n// ```\nvar removeNodeBefore = function removeNodeBefore(tr) {\n var position = findPositionOfNodeBefore(tr.selection);\n if (typeof position === 'number') {\n return removeNodeAtPos(position)(tr);\n }\n return tr;\n};\n\n// :: (selection: Selection) → boolean\n// Checks if current selection is a `NodeSelection`.\n//\n// ```javascript\n// if (isNodeSelection(tr.selection)) {\n// // ...\n// }\n// ```\nvar isNodeSelection = function isNodeSelection(selection) {\n return selection instanceof prosemirrorState.NodeSelection;\n};\n\n// (nodeType: union<NodeType, [NodeType]>) → boolean\n// Checks if the type a given `node` equals to a given `nodeType`.\nvar equalNodeType = function equalNodeType(nodeType, node) {\n return Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1 || node.type === nodeType;\n};\n\n// (tr: Transaction) → Transaction\n// Creates a new transaction object from a given transaction\nvar cloneTr = function cloneTr(tr) {\n return Object.assign(Object.create(tr), tr).setTime(Date.now());\n};\n\n// (position: number, content: union<ProseMirrorNode, Fragment>) → (tr: Transaction) → Transaction\n// Returns a `replace` transaction that replaces a node at a given position with the given `content`.\n// It will return the original transaction if replacing is not possible.\n// `position` should point at the position immediately before the node.\nvar replaceNodeAtPos = function replaceNodeAtPos(position, content) {\n return function (tr) {\n var node = tr.doc.nodeAt(position);\n var $pos = tr.doc.resolve(position);\n if (canReplace($pos, content)) {\n tr = tr.replaceWith(position, position + node.nodeSize, content);\n var start = tr.selection.$from.pos - 1;\n // put cursor inside of the inserted node\n tr = setTextSelection(Math.max(start, 0), -1)(tr);\n // move cursor to the start of the node\n tr = setTextSelection(tr.selection.$from.start())(tr);\n return cloneTr(tr);\n }\n return tr;\n };\n};\n\n// ($pos: ResolvedPos, doc: ProseMirrorNode, content: union<ProseMirrorNode, Fragment>, ) → boolean\n// Checks if replacing a node at a given `$pos` inside of the `doc` node with the given `content` is possible.\nvar canReplace = function canReplace($pos, content) {\n var node = $pos.node($pos.depth);\n return node && node.type.validContent(content instanceof prosemirrorModel.Fragment ? content : prosemirrorModel.Fragment.from(content));\n};\n\n// (position: number) → (tr: Transaction) → Transaction\n// Returns a `delete` transaction that removes a node at a given position with the given `node`.\n// `position` should point at the position immediately before the node.\nvar removeNodeAtPos = function removeNodeAtPos(position) {\n return function (tr) {\n var node = tr.doc.nodeAt(position);\n return cloneTr(tr.delete(position, position + node.nodeSize));\n };\n};\n\n// (schema: Schema) → {[key: string]: NodeType}\n// Returns a map where keys are tableRoles and values are NodeTypes.\nvar tableNodeTypes = function tableNodeTypes(schema) {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes;\n }\n var roles = {};\n Object.keys(schema.nodes).forEach(function (type) {\n var nodeType = schema.nodes[type];\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType;\n }\n });\n schema.cached.tableNodeTypes = roles;\n return roles;\n};\n\n// :: ($pos: ResolvedPos, content: union<ProseMirrorNode, Fragment>) → boolean\n// Checks if a given `content` can be inserted at the given `$pos`\n//\n// ```javascript\n// const { selection: { $from } } = state;\n// const node = state.schema.nodes.atom.createChecked();\n// if (canInsert($from, node)) {\n// // ...\n// }\n// ```\nvar canInsert = function canInsert($pos, content) {\n var index = $pos.index();\n\n if (content instanceof prosemirrorModel.Fragment) {\n return $pos.parent.canReplace(index, index, content);\n } else if (content instanceof prosemirrorModel.Node) {\n return $pos.parent.canReplaceWith(index, index, content.type);\n }\n return false;\n};\n\n// (node: ProseMirrorNode) → boolean\n// Checks if a given `node` is an empty paragraph\nvar isEmptyParagraph = function isEmptyParagraph(node) {\n return !node || node.type.name === 'paragraph' && node.nodeSize === 2;\n};\n\n// ($pos: ResolvedPos) → ?{pos: number, start: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning a table node closest to a given `$pos`.\n//\n// ```javascript\n// const table = findTableClosestToPos(state.doc.resolve(10));\n// ```\nvar findTableClosestToPos = function findTableClosestToPos($pos) {\n var predicate = function predicate(node) {\n return node.type.spec.tableRole && /table/i.test(node.type.spec.tableRole);\n };\n return findParentNodeClosestToPos($pos, predicate);\n};\n\nvar createCell = function createCell(cellType) {\n var cellContent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (cellContent) {\n return cellType.createChecked(null, cellContent);\n }\n\n return cellType.createAndFill();\n};\n\n// (rect: {left: number, right: number, top: number, bottom: number}) → (selection: Selection) → boolean\n// Checks if a given CellSelection rect is selected\nvar isRectSelected = function isRectSelected(rect) {\n return function (selection) {\n var map = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1));\n var start = selection.$anchorCell.start(-1);\n var cells = map.cellsInRect(rect);\n var selectedCells = map.cellsInRect(map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start));\n\n for (var i = 0, count = cells.length; i < count; i++) {\n if (selectedCells.indexOf(cells[i]) === -1) {\n return false;\n }\n }\n\n return true;\n };\n};\n\n// This function transposes an array of array flipping the columns for rows,\n// transposition is a familiar algebra concept;\n// you can get more details here:\n// https://en.wikipedia.org/wiki/Transpose\n//\n// ```javascript\n//\n// const arr = [\n// ['a1', 'a2', 'a3'],\n// ['b1', 'b2', 'b3'],\n// ['c1', 'c2', 'c3'],\n// ['d1', 'd2', 'd3'],\n// ];\n//\n// const result = transpose(arr);\n//\n// result === [\n// ['a1', 'b1', 'c1', 'd1'],\n// ['a2', 'b2', 'c2', 'd2'],\n// ['a3', 'b3', 'c3', 'd3'],\n// ]\n// ```\nvar transpose = function transpose(array) {\n return array[0].map(function (_, i) {\n return array.map(function (column) {\n return column[i];\n });\n });\n};\n\n// :: (tableNode: Node) -> Array<Node>\n// This function will transform the table node\n// into a matrix of rows and columns respecting merged cells,\n// for example this table will be convert to the below:\n//\n// ```\n// ____________________________\n// | | | |\n// | A1 | B1 | C1 |\n// |______|______|______ ______|\n// | | | |\n// | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// | A3 | B3 | C2 | |\n// |______|______|______|______|\n// ```\n//\n//\n// ```javascript\n// array = [\n// [A1, B1, C1, null],\n// [A2, B2, null, D1],\n// [A3. B3, C2, null],\n// ]\n// ```\nvar convertTableNodeToArrayOfRows = function convertTableNodeToArrayOfRows(tableNode) {\n var map = prosemirrorTables.TableMap.get(tableNode);\n var rows = [];\n for (var rowIndex = 0; rowIndex < map.height; rowIndex++) {\n var rowCells = [];\n var seen = {};\n\n for (var colIndex = 0; colIndex < map.width; colIndex++) {\n var cellPos = map.map[rowIndex * map.width + colIndex];\n var cell = tableNode.nodeAt(cellPos);\n var rect = map.findCell(cellPos);\n if (seen[cellPos] || rect.top !== rowIndex) {\n rowCells.push(null);\n continue;\n }\n seen[cellPos] = true;\n\n rowCells.push(cell);\n }\n\n rows.push(rowCells);\n }\n\n return rows;\n};\n\n// :: (tableNode: Node, tableArray: Array<Node>) -> Node\n// This function will transform a matrix of nodes\n// into table node respecting merged cells and rows configurations,\n// for example this array will be convert to the table below:\n//\n// ```javascript\n// array = [\n// [A1, B1, C1, null],\n// [A2, B2, null, D1],\n// [A3. B3, C2, null],\n// ]\n// ```\n//\n// ```\n// ____________________________\n// | | | |\n// | A1 | B1 | C1 |\n// |______|______|______ ______|\n// | | | |\n// | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// | A3 | B3 | C2 | |\n// |______|______|______|______|\n// ```\n//\nvar convertArrayOfRowsToTableNode = function convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n var rowsPM = [];\n var map = prosemirrorTables.TableMap.get(tableNode);\n for (var rowIndex = 0; rowIndex < map.height; rowIndex++) {\n var row = tableNode.child(rowIndex);\n var rowCells = [];\n\n for (var colIndex = 0; colIndex < map.width; colIndex++) {\n if (!arrayOfNodes[rowIndex][colIndex]) {\n continue;\n }\n var cellPos = map.map[rowIndex * map.width + colIndex];\n\n var cell = arrayOfNodes[rowIndex][colIndex];\n var oldCell = tableNode.nodeAt(cellPos);\n var newCell = oldCell.type.createChecked(Object.assign({}, cell.attrs), cell.content, cell.marks);\n rowCells.push(newCell);\n }\n\n rowsPM.push(row.type.createChecked(row.attrs, rowCells, row.marks));\n }\n\n var newTable = tableNode.type.createChecked(tableNode.attrs, rowsPM, tableNode.marks);\n\n return newTable;\n};\n\nvar moveTableColumn = function moveTableColumn(table, indexesOrigin, indexesTarget, direction) {\n var rows = transpose(convertTableNodeToArrayOfRows(table.node));\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n rows = transpose(rows);\n\n return convertArrayOfRowsToTableNode(table.node, rows);\n};\n\nvar moveTableRow = function moveTableRow(table, indexesOrigin, indexesTarget, direction) {\n var rows = convertTableNodeToArrayOfRows(table.node);\n\n rows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\n return convertArrayOfRowsToTableNode(table.node, rows);\n};\n\nvar moveRowInArrayOfRows = function moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n var direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\n var rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n var positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n var target = void 0;\n\n if (directionOverride === -1 && direction === 1) {\n target = indexesTarget[0] - 1;\n } else if (directionOverride === 1 && direction === -1) {\n target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n } else {\n target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n }\n\n rows.splice.apply(rows, [target, 0].concat(rowsExtracted));\n return rows;\n};\n\nvar checkInvalidMovements = function checkInvalidMovements(originIndex, targetIndex, targets, type) {\n var direction = originIndex > targetIndex ? -1 : 1;\n var errorMessage = 'Target position is invalid, you can\\'t move the ' + type + ' ' + originIndex + ' to ' + targetIndex + ', the target can\\'t be split. You could use tryToFit option.';\n\n if (direction === 1) {\n if (targets.slice(0, targets.length - 1).indexOf(targetIndex) !== -1) {\n throw new Error(errorMessage);\n }\n } else {\n if (targets.slice(1).indexOf(targetIndex) !== -1) {\n throw new Error(errorMessage);\n }\n }\n\n return true;\n};\n\n// :: (predicate: (node: ProseMirrorNode) → boolean) → (selection: Selection) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning the closest node and its start position `predicate` returns truthy for. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const predicate = node => node.type === schema.nodes.blockquote;\n// const parent = findParentNode(predicate)(selection);\n// ```\nvar findParentNode = function findParentNode(predicate) {\n return function (_ref) {\n var $from = _ref.$from;\n return findParentNodeClosestToPos($from, predicate);\n };\n};\n\n// :: ($pos: ResolvedPos, predicate: (node: ProseMirrorNode) → boolean) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes starting from the given `$pos`, returning the closest node and its start position `predicate` returns truthy for. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const predicate = node => node.type === schema.nodes.blockquote;\n// const parent = findParentNodeClosestToPos(state.doc.resolve(5), predicate);\n// ```\nvar findParentNodeClosestToPos = function findParentNodeClosestToPos($pos, predicate) {\n for (var i = $pos.depth; i > 0; i--) {\n var node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node: node\n };\n }\n }\n};\n\n// :: (predicate: (node: ProseMirrorNode) → boolean, domAtPos: (pos: number) → {node: dom.Node, offset: number}) → (selection: Selection) → ?dom.Node\n// Iterates over parent nodes, returning DOM reference of the closest node `predicate` returns truthy for.\n//\n// ```javascript\n// const domAtPos = view.domAtPos.bind(view);\n// const predicate = node => node.type === schema.nodes.table;\n// const parent = findParentDomRef(predicate, domAtPos)(selection); // <table>\n// ```\nvar findParentDomRef = function findParentDomRef(predicate, domAtPos) {\n return function (selection) {\n var parent = findParentNode(predicate)(selection);\n if (parent) {\n return findDomRefAtPos(parent.pos, domAtPos);\n }\n };\n};\n\n// :: (predicate: (node: ProseMirrorNode) → boolean) → (selection: Selection) → boolean\n// Checks if there's a parent node `predicate` returns truthy for.\n//\n// ```javascript\n// if (hasParentNode(node => node.type === schema.nodes.table)(selection)) {\n// // ....\n// }\n// ```\nvar hasParentNode = function hasParentNode(predicate) {\n return function (selection) {\n return !!findParentNode(predicate)(selection);\n };\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (selection: Selection) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning closest node of a given `nodeType`. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const parent = findParentNodeOfType(schema.nodes.paragraph)(selection);\n// ```\nvar findParentNodeOfType = function findParentNodeOfType(nodeType) {\n return function (selection) {\n return findParentNode(function (node) {\n return equalNodeType(nodeType, node);\n })(selection);\n };\n};\n\n// :: ($pos: ResolvedPos, nodeType: union<NodeType, [NodeType]>) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Iterates over parent nodes starting from the given `$pos`, returning closest node of a given `nodeType`. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const parent = findParentNodeOfTypeClosestToPos(state.doc.resolve(10), schema.nodes.paragraph);\n// ```\nvar findParentNodeOfTypeClosestToPos = function findParentNodeOfTypeClosestToPos($pos, nodeType) {\n return findParentNodeClosestToPos($pos, function (node) {\n return equalNodeType(nodeType, node);\n });\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (selection: Selection) → boolean\n// Checks if there's a parent node of a given `nodeType`.\n//\n// ```javascript\n// if (hasParentNodeOfType(schema.nodes.table)(selection)) {\n// // ....\n// }\n// ```\nvar hasParentNodeOfType = function hasParentNodeOfType(nodeType) {\n return function (selection) {\n return hasParentNode(function (node) {\n return equalNodeType(nodeType, node);\n })(selection);\n };\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>, domAtPos: (pos: number) → {node: dom.Node, offset: number}) → (selection: Selection) → ?dom.Node\n// Iterates over parent nodes, returning DOM reference of the closest node of a given `nodeType`.\n//\n// ```javascript\n// const domAtPos = view.domAtPos.bind(view);\n// const parent = findParentDomRefOfType(schema.nodes.codeBlock, domAtPos)(selection); // <pre>\n// ```\nvar findParentDomRefOfType = function findParentDomRefOfType(nodeType, domAtPos) {\n return function (selection) {\n return findParentDomRef(function (node) {\n return equalNodeType(nodeType, node);\n }, domAtPos)(selection);\n };\n};\n\n// :: (nodeType: union<NodeType, [NodeType]>) → (selection: Selection) → ?{pos: number, start: number, depth: number, node: ProseMirrorNode}\n// Returns a node of a given `nodeType` if it is selected. `start` points to the start position of the node, `pos` points directly before the node.\n//\n// ```javascript\n// const { extension, inlineExtension, bodiedExtension } = schema.nodes;\n// const selectedNode = findSelectedNodeOfType([\n// extension,\n// inlineExtension,\n// bodiedExtension,\n// ])(selection);\n// ```\nvar findSelectedNodeOfType = function findSelectedNodeOfType(nodeType) {\n return function (selection) {\n if (isNodeSelection(selection)) {\n var node = selection.node,\n $from = selection.$from;\n\n if (equalNodeType(nodeType, node)) {\n return { node: node, pos: $from.pos, depth: $from.depth };\n }\n }\n };\n};\n\n// :: (selection: Selection) → ?number\n// Returns position of the previous node.\n//\n// ```javascript\n// const pos = findPositionOfNodeBefore(tr.selection);\n// ```\nvar findPositionOfNodeBefore = function findPositionOfNodeBefore(selection) {\n var nodeBefore = selection.$from.nodeBefore;\n\n var maybeSelection = prosemirrorState.Selection.findFrom(selection.$from, -1);\n if (maybeSelection && nodeBefore) {\n // leaf node\n var parent = findParentNodeOfType(nodeBefore.type)(maybeSelection);\n if (parent) {\n return parent.pos;\n }\n return maybeSelection.$from.pos;\n }\n};\n\n// :: (position: number, domAtPos: (pos: number) → {node: dom.Node, offset: number}) → dom.Node\n// Returns DOM reference of a node at a given `position`. If the node type is of type `TEXT_NODE` it will return the reference of the parent node.\n//\n// ```javascript\n// const domAtPos = view.domAtPos.bind(view);\n// const ref = findDomRefAtPos($from.pos, domAtPos);\n// ```\nvar findDomRefAtPos = function findDomRefAtPos(position, domAtPos) {\n var dom = domAtPos(position);\n var node = dom.node.childNodes[dom.offset];\n\n if (dom.node.nodeType === Node.TEXT_NODE) {\n return dom.node.parentNode;\n }\n\n if (!node || node.nodeType === Node.TEXT_NODE) {\n return dom.node;\n }\n\n return node;\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Flattens descendants of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const children = flatten(node);\n// ```\nvar flatten = function flatten(node) {\n var descend = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (!node) {\n throw new Error('Invalid \"node\" parameter');\n }\n var result = [];\n node.descendants(function (child, pos) {\n result.push({ node: child, pos: pos });\n if (!descend) {\n return false;\n }\n });\n return result;\n};\n\n// :: (node: ProseMirrorNode, predicate: (node: ProseMirrorNode) → boolean, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes predicate returns truthy for. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const textNodes = findChildren(node, child => child.isText, false);\n// ```\nvar findChildren = function findChildren(node, predicate, descend) {\n if (!node) {\n throw new Error('Invalid \"node\" parameter');\n } else if (!predicate) {\n throw new Error('Invalid \"predicate\" parameter');\n }\n return flatten(node, descend).filter(function (child) {\n return predicate(child.node);\n });\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Returns text nodes of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const textNodes = findTextNodes(node);\n// ```\nvar findTextNodes = function findTextNodes(node, descend) {\n return findChildren(node, function (child) {\n return child.isText;\n }, descend);\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Returns inline nodes of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const inlineNodes = findInlineNodes(node);\n// ```\nvar findInlineNodes = function findInlineNodes(node, descend) {\n return findChildren(node, function (child) {\n return child.isInline;\n }, descend);\n};\n\n// :: (node: ProseMirrorNode, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Returns block descendants of a given `node`. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const blockNodes = findBlockNodes(node);\n// ```\nvar findBlockNodes = function findBlockNodes(node, descend) {\n return findChildren(node, function (child) {\n return child.isBlock;\n }, descend);\n};\n\n// :: (node: ProseMirrorNode, predicate: (attrs: ?Object) → boolean, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes predicate returns truthy for. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const mergedCells = findChildrenByAttr(table, attrs => attrs.colspan === 2);\n// ```\nvar findChildrenByAttr = function findChildrenByAttr(node, predicate, descend) {\n return findChildren(node, function (child) {\n return !!predicate(child.attrs);\n }, descend);\n};\n\n// :: (node: ProseMirrorNode, nodeType: NodeType, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes of a given nodeType. It doesn't descend into a node when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const cells = findChildrenByType(table, schema.nodes.tableCell);\n// ```\nvar findChildrenByType = function findChildrenByType(node, nodeType, descend) {\n return findChildren(node, function (child) {\n return child.type === nodeType;\n }, descend);\n};\n\n// :: (node: ProseMirrorNode, markType: markType, descend: ?boolean) → [{ node: ProseMirrorNode, pos: number }]\n// Iterates over descendants of a given `node`, returning child nodes that have a mark of a given markType. It doesn't descend into a `node` when descend argument is `false` (defaults to `true`).\n//\n// ```javascript\n// const nodes = findChildrenByMark(state.doc, schema.marks.strong);\n// ```\nvar findChildrenByMark = function findChildrenByMark(node, markType, descend) {\n return findChildren(node, function (child) {\n return markType.isInSet(child.marks);\n }, descend);\n};\n\n// :: (node: ProseMirrorNode, nodeType: NodeType) → boolean\n// Returns `true` if a given node contains nodes of a given `nodeType`\n//\n// ```javascript\n// if (contains(panel, schema.nodes.listItem)) {\n// // ...\n// }\n// ```\nvar contains = function contains(node, nodeType) {\n return !!findChildrenByType(node, nodeType).length;\n};\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// :: (selection: Selection) → ?{pos: number, start: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning the closest table node.\n//\n// ```javascript\n// const table = findTable(selection);\n// ```\nvar findTable = function findTable(selection) {\n return findParentNode(function (node) {\n return node.type.spec.tableRole && node.type.spec.tableRole === 'table';\n })(selection);\n};\n\n// :: (selection: Selection) → boolean\n// Checks if current selection is a `CellSelection`.\n//\n// ```javascript\n// if (isCellSelection(selection)) {\n// // ...\n// }\n// ```\nvar isCellSelection = function isCellSelection(selection) {\n return selection instanceof prosemirrorTables.CellSelection;\n};\n\n// :: (selection: Selection) → ?{left: number, right: number, top: number, bottom: number}\n// Get the selection rectangle. Returns `undefined` if selection is not a CellSelection.\n//\n// ```javascript\n// const rect = getSelectionRect(selection);\n// ```\nvar getSelectionRect = function getSelectionRect(selection) {\n if (!isCellSelection(selection)) {\n return;\n }\n var start = selection.$anchorCell.start(-1);\n var map = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1));\n return map.rectBetween(selection.$anchorCell.pos - start, selection.$headCell.pos - start);\n};\n\n// :: (columnIndex: number) → (selection: Selection) → boolean\n// Checks if entire column at index `columnIndex` is selected.\n//\n// ```javascript\n// const className = isColumnSelected(i)(selection) ? 'selected' : '';\n// ```\nvar isColumnSelected = function isColumnSelected(columnIndex) {\n return function (selection) {\n if (isCellSelection(selection)) {\n var map = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1));\n return isRectSelected({\n left: columnIndex,\n right: columnIndex + 1,\n top: 0,\n bottom: map.height\n })(selection);\n }\n\n return false;\n };\n};\n\n// :: (rowIndex: number) → (selection: Selection) → boolean\n// Checks if entire row at index `rowIndex` is selected.\n//\n// ```javascript\n// const className = isRowSelected(i)(selection) ? 'selected' : '';\n// ```\nvar isRowSelected = function isRowSelected(rowIndex) {\n return function (selection) {\n if (isCellSelection(selection)) {\n var map = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1));\n return isRectSelected({\n left: 0,\n right: map.width,\n top: rowIndex,\n bottom: rowIndex + 1\n })(selection);\n }\n\n return false;\n };\n};\n\n// :: (selection: Selection) → boolean\n// Checks if entire table is selected\n//\n// ```javascript\n// const className = isTableSelected(selection) ? 'selected' : '';\n// ```\nvar isTableSelected = function isTableSelected(selection) {\n if (isCellSelection(selection)) {\n var map = prosemirrorTables.TableMap.get(selection.$anchorCell.node(-1));\n return isRectSelected({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height\n })(selection);\n }\n\n return false;\n};\n\n// :: (columnIndex: union<number, [number]>) → (selection: Selection) → ?[{pos: number, start: number, node: ProseMirrorNode}]\n// Returns an array of cells in a column(s), where `columnIndex` could be a column index or an array of column indexes.\n//\n// ```javascript\n// const cells = getCellsInColumn(i)(selection); // [{node, pos}, {node, pos}]\n// ```\nvar getCellsInColumn = function getCellsInColumn(columnIndex) {\n return function (selection) {\n var table = findTable(selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n var indexes = Array.isArray(columnIndex) ? columnIndex : Array.from([columnIndex]);\n return indexes.reduce(function (acc, index) {\n if (index >= 0 && index <= map.width - 1) {\n var cells = map.cellsInRect({\n left: index,\n right: index + 1,\n top: 0,\n bottom: map.height\n });\n return acc.concat(cells.map(function (nodePos) {\n var node = table.node.nodeAt(nodePos);\n var pos = nodePos + table.start;\n return { pos: pos, start: pos + 1, node: node };\n }));\n }\n }, []);\n }\n };\n};\n\n// :: (rowIndex: union<number, [number]>) → (selection: Selection) → ?[{pos: number, start: number, node: ProseMirrorNode}]\n// Returns an array of cells in a row(s), where `rowIndex` could be a row index or an array of row indexes.\n//\n// ```javascript\n// const cells = getCellsInRow(i)(selection); // [{node, pos}, {node, pos}]\n// ```\nvar getCellsInRow = function getCellsInRow(rowIndex) {\n return function (selection) {\n var table = findTable(selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n var indexes = Array.isArray(rowIndex) ? rowIndex : Array.from([rowIndex]);\n return indexes.reduce(function (acc, index) {\n if (index >= 0 && index <= map.height - 1) {\n var cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: index,\n bottom: index + 1\n });\n return acc.concat(cells.map(function (nodePos) {\n var node = table.node.nodeAt(nodePos);\n var pos = nodePos + table.start;\n return { pos: pos, start: pos + 1, node: node };\n }));\n }\n }, []);\n }\n };\n};\n\n// :: (selection: Selection) → ?[{pos: number, start: number, node: ProseMirrorNode}]\n// Returns an array of all cells in a table.\n//\n// ```javascript\n// const cells = getCellsInTable(selection); // [{node, pos}, {node, pos}]\n// ```\nvar getCellsInTable = function getCellsInTable(selection) {\n var table = findTable(selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n var cells = map.cellsInRect({\n left: 0,\n right: map.width,\n top: 0,\n bottom: map.height\n });\n return cells.map(function (nodePos) {\n var node = table.node.nodeAt(nodePos);\n var pos = nodePos + table.start;\n return { pos: pos, start: pos + 1, node: node };\n });\n }\n};\n\nvar select = function select(type) {\n return function (index, expand) {\n return function (tr) {\n var table = findTable(tr.selection);\n var isRowSelection = type === 'row';\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n\n // Check if the index is valid\n if (index >= 0 && index < (isRowSelection ? map.height : map.width)) {\n var left = isRowSelection ? 0 : index;\n var top = isRowSelection ? index : 0;\n var right = isRowSelection ? map.width : index + 1;\n var bottom = isRowSelection ? index + 1 : map.height;\n\n if (expand) {\n var cell = findCellClosestToPos(tr.selection.$from);\n if (!cell) {\n return tr;\n }\n\n var selRect = map.findCell(cell.pos - table.start);\n if (isRowSelection) {\n top = Math.min(top, selRect.top);\n bottom = Math.max(bottom, selRect.bottom);\n } else {\n left = Math.min(left, selRect.left);\n right = Math.max(right, selRect.right);\n }\n }\n\n var cellsInFirstRow = map.cellsInRect({\n left: left,\n top: top,\n right: isRowSelection ? right : left + 1,\n bottom: isRowSelection ? top + 1 : bottom\n });\n\n var cellsInLastRow = bottom - top === 1 ? cellsInFirstRow : map.cellsInRect({\n left: isRowSelection ? left : right - 1,\n top: isRowSelection ? bottom - 1 : top,\n right: right,\n bottom: bottom\n });\n\n var head = table.start + cellsInFirstRow[0];\n var anchor = table.start + cellsInLastRow[cellsInLastRow.length - 1];\n var $head = tr.doc.resolve(head);\n var $anchor = tr.doc.resolve(anchor);\n\n return cloneTr(tr.setSelection(new prosemirrorTables.CellSelection($anchor, $head)));\n }\n }\n return tr;\n };\n };\n};\n\n// :: (columnIndex: number, expand: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that creates a `CellSelection` on a column at index `columnIndex`.\n// Use the optional `expand` param to extend from current selection.\n//\n// ```javascript\n// dispatch(\n// selectColumn(i)(state.tr)\n// );\n// ```\nvar selectColumn = select('column');\n\n// :: (rowIndex: number, expand: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that creates a `CellSelection` on a column at index `rowIndex`.\n// Use the optional `expand` param to extend from current selection.\n//\n// ```javascript\n// dispatch(\n// selectRow(i)(state.tr)\n// );\n// ```\nvar selectRow = select('row');\n\n// :: (selection: Selection) → (tr: Transaction) → Transaction\n// Returns a new transaction that creates a `CellSelection` on the entire table.\n//\n// ```javascript\n// dispatch(\n// selectTable(i)(state.tr)\n// );\n// ```\nvar selectTable = function selectTable(tr) {\n var table = findTable(tr.selection);\n if (table) {\n var _TableMap$get = prosemirrorTables.TableMap.get(table.node),\n map = _TableMap$get.map;\n\n if (map && map.length) {\n var head = table.start + map[0];\n var anchor = table.start + map[map.length - 1];\n var $head = tr.doc.resolve(head);\n var $anchor = tr.doc.resolve(anchor);\n\n return cloneTr(tr.setSelection(new prosemirrorTables.CellSelection($anchor, $head)));\n }\n }\n return tr;\n};\n\n// :: (cell: {pos: number, node: ProseMirrorNode}, schema: Schema) → (tr: Transaction) → Transaction\n// Returns a new transaction that clears the content of a given `cell`.\n//\n// ```javascript\n// const $pos = state.doc.resolve(13);\n// dispatch(\n// emptyCell(findCellClosestToPos($pos), state.schema)(state.tr)\n// );\n// ```\nvar emptyCell = function emptyCell(cell, schema) {\n return function (tr) {\n if (cell) {\n var _tableNodeTypes$cell$ = tableNodeTypes(schema).cell.createAndFill(),\n content = _tableNodeTypes$cell$.content;\n\n if (!cell.node.content.eq(content)) {\n tr.replaceWith(cell.pos + 1, cell.pos + cell.node.nodeSize, content);\n return cloneTr(tr);\n }\n }\n return tr;\n };\n};\n\n// :: (columnIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that adds a new column at index `columnIndex`.\n//\n// ```javascript\n// dispatch(\n// addColumnAt(i)(state.tr)\n// );\n// ```\nvar addColumnAt = function addColumnAt(columnIndex) {\n return function (tr) {\n var table = findTable(tr.selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n if (columnIndex >= 0 && columnIndex <= map.width) {\n return cloneTr(prosemirrorTables.addColumn(tr, {\n map: map,\n tableStart: table.start,\n table: table.node\n }, columnIndex));\n }\n }\n return tr;\n };\n};\n\n// :: (originRowIndex: number, targetRowIndex: targetColumnIndex, options?: MovementOptions) → (tr: Transaction) → Transaction\n// Returns a new transaction that moves the origin row to the target index;\n//\n// by default \"tryToFit\" is false, that means if you try to move a row to a place\n// where we will need to split a row with merged cells it'll throw an exception, for example:\n//\n// ```\n// ____________________________\n// | | | |\n// 0 | A1 | B1 | C1 |\n// |______|______|______ ______|\n// | | | |\n// 1 | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// 2 | A3 | B3 | C2 | |\n// |______|______|______|______|\n// ```\n//\n// if you try to move the row 0 to the row index 1 with tryToFit false,\n// it'll throw an exception since you can't split the row 1;\n// but if \"tryToFit\" is true, it'll move the row using the current direction.\n//\n// We defined current direction using the target and origin values\n// if the origin is greater than the target, that means the course is `bottom-to-top`,\n// so the `tryToFit` logic will use this direction to determine\n// if we should move the column to the right or the left.\n//\n// for example, if you call the function using `moveRow(0, 1, { tryToFit: true })`\n// the result will be:\n// ```\n// ____________________________\n// | | | |\n// 0 | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// 1 | A3 | B3 | C2 | |\n// |______|______|______|______|\n// | | | |\n// 2 | A1 | B1 | C1 |\n// |______|______|______ ______|\n// ```\n//\n// since we could put the row zero on index one,\n// we pushed to the best place to fit the row index 0,\n// in this case, row index 2.\n//\n//\n// -------- HOW TO OVERRIDE DIRECTION --------\n//\n// If you set \"tryToFit\" to \"true\", it will try to figure out the best direction\n// place to fit using the origin and target index, for example:\n//\n//\n// ```\n// ____________________________\n// | | | |\n// 0 | A1 | B1 | C1 |\n// |______|______|______ ______|\n// | | | |\n// 1 | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// 2 | A3 | B3 | C2 | |\n// |______|______|______|______|\n// | | | |\n// 3 | A4 | B4 | |\n// |______|______ ______| |\n// | | | | D2 |\n// 4 | A5 | B5 | C3 | |\n// |______|______|______|______|\n// ```\n//\n//\n// If you try to move the row 0 to row index 4 with \"tryToFit\" enabled, by default,\n// the code will put it on after the merged rows,\n// but you can override it using the \"direction\" option.\n//\n// -1: Always put the origin before the target\n// ```\n// ____________________________\n// | | | |\n// 0 | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// 1 | A3 | B3 | C2 | |\n// |______|______|______|______|\n// | | | |\n// 2 | A1 | B1 | C1 |\n// |______|______|______ ______|\n// | | | |\n// 3 | A4 | B4 | |\n// |______|______ ______| |\n// | | | | D2 |\n// 4 | A5 | B5 | C3 | |\n// |______|______|______|______|\n// ```\n//\n// 0: Automatically decide the best place to fit\n// ```\n// ____________________________\n// | | | |\n// 0 | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// 1 | A3 | B3 | C2 | |\n// |______|______|______|______|\n// | | | |\n// 2 | A4 | B4 | |\n// |______|______ ______| |\n// | | | | D2 |\n// 3 | A5 | B5 | C3 | |\n// |______|______|______|______|\n// | | | |\n// 4 | A1 | B1 | C1 |\n// |______|______|______ ______|\n// ```\n//\n// 1: Always put the origin after the target\n// ```\n// ____________________________\n// | | | |\n// 0 | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// 1 | A3 | B3 | C2 | |\n// |______|______|______|______|\n// | | | |\n// 2 | A4 | B4 | |\n// |______|______ ______| |\n// | | | | D2 |\n// 3 | A5 | B5 | C3 | |\n// |______|______|______|______|\n// | | | |\n// 4 | A1 | B1 | C1 |\n// |______|______|______ ______|\n// ```\n//\n// ```javascript\n// dispatch(\n// moveRow(x, y, options)(state.tr)\n// );\n// ```\nvar moveRow = function moveRow(originRowIndex, targetRowIndex, opts) {\n return function (tr) {\n var defaultOptions = { tryToFit: false, direction: 0 };\n var options = Object.assign(defaultOptions, opts);\n var table = findTable(tr.selection);\n if (!table) {\n return tr;\n }\n\n var _getSelectionRangeInR = getSelectionRangeInRow(originRowIndex)(tr),\n indexesOriginRow = _getSelectionRangeInR.indexes;\n\n var _getSelectionRangeInR2 = getSelectionRangeInRow(targetRowIndex)(tr),\n indexesTargetRow = _getSelectionRangeInR2.indexes;\n\n if (indexesOriginRow.indexOf(targetRowIndex) > -1) {\n return tr;\n }\n\n if (!options.tryToFit && indexesTargetRow.length > 1) {\n checkInvalidMovements(originRowIndex, targetRowIndex, indexesTargetRow, 'row');\n }\n\n var newTable = moveTableRow(table, indexesOriginRow, indexesTargetRow, options.direction);\n\n return cloneTr(tr).replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n };\n};\n\n// :: (originColumnIndex: number, targetColumnIndex: targetColumnIndex, options?: MovementOptions) → (tr: Transaction) → Transaction\n// Returns a new transaction that moves the origin column to the target index;\n//\n// by default \"tryToFit\" is false, that means if you try to move a column to a place\n// where we will need to split a column with merged cells it'll throw an exception, for example:\n//\n// ```\n// 0 1 2\n// ____________________________\n// | | | |\n// | A1 | B1 | C1 |\n// |______|______|______ ______|\n// | | | |\n// | A2 | B2 | |\n// |______|______ ______| |\n// | | | | D1 |\n// | A3 | B3 | C2 | |\n// |______|______|______|______|\n// ```\n//\n//\n// if you try to move the column 0 to the column index 1 with tryToFit false,\n// it'll throw an exception since you can't split the column 1;\n// but if \"tryToFit\" is true, it'll move the column using the current direction.\n//\n// We defined current direction using the target and origin values\n// if the origin is greater than the target, that means the course is `right-to-left`,\n// so the `tryToFit` logic will use this direction to determine\n// if we should move the column to the right or the left.\n//\n// for example, if you call the function using `moveColumn(0, 1, { tryToFit: true })`\n// the result will be:\n//\n// ```\n// 0 1 2\n// _____________________ _______\n// | | | |\n// | B1 | C1 | A1 |\n// |______|______ ______|______|\n// | | | |\n// | B2 | | A2 |\n// |______ ______| |______|\n// | | | D1 | |\n// | B3 | C2 | | A3 |\n// |______|______|______|______|\n// ```\n//\n// since we could put the column zero on index one,\n// we pushed to the best place to fit the column 0, in this case, column index 2.\n//\n// -------- HOW TO OVERRIDE DIRECTION --------\n//\n// If you set \"tryToFit\" to \"true\", it will try to figure out the best direction\n// place to fit using the origin and target index, for example:\n//\n//\n// ```\n// 0 1 2 3 4 5 6\n// _________________________________________________\n// | | | | | |\n// | A1 | B1 | C1 | E1 | F1 |\n// |______|______|______ ______|______|______ ______|\n// | | | | | |\n// | A2 | B2 | | E2 | |\n// |______|______ ______| |______ ______| |\n// | | | | D1 | | | G2 |\n// | A3 | B3 | C3 | | E3 | F3 | |\n// |______|______|______|______|______|______|______|\n// ```\n//\n//\n// If you try to move the column 0 to column index 5 with \"tryToFit\" enabled, by default,\n// the code will put it on after the merged columns,\n// but you can override it using the \"direction\" option.\n//\n// -1: Always put the origin before the target\n//\n// ```\n// 0 1 2 3 4 5 6\n// _________________________________________________\n// | | | | | |\n// | B1 | C1 | A1 | E1 | F1 |\n// |______|______ ______|______|______|______ ______|\n// | | | | | |\n// | B2 | | A2 | E2 | |\n// |______ ______| |______|______ ______| |\n// | | | D1 | | | | G2 |\n// | B3 | C3 | | A3 | E3 | F3 | |\n// |______|______|______|______|______|______|______|\n// ```\n//\n// 0: Automatically decide the best place to fit\n//\n// ```\n// 0 1 2 3 4 5 6\n// _________________________________________________\n// | | | | | |\n// | B1 | C1 | E1 | F1 | A1 |\n// |______|______ ______|______|______ ______|______|\n// | | | | | |\n// | B2 | | E2 | | A2 |\n// |______ ______| |______ ______| |______|\n// | | | D1 | | | G2 | |\n// | B3 | C3 | | E3 | F3 | | A3 |\n// |______|______|______|______|______|______|______|\n// ```\n//\n// 1: Always put the origin after the target\n//\n// ```\n// 0 1 2 3 4 5 6\n// _________________________________________________\n// | | | | | |\n// | B1 | C1 | E1 | F1 | A1 |\n// |______|______ ______|______|______ ______|______|\n// | | | | | |\n// | B2 | | E2 | | A2 |\n// |______ ______| |______ ______| |______|\n// | | | D1 | | | G2 | |\n// | B3 | C3 | | E3 | F3 | | A3 |\n// |______|______|______|______|______|______|______|\n// ```\n//\n// ```javascript\n// dispatch(\n// moveColumn(x, y, options)(state.tr)\n// );\n// ```\nvar moveColumn = function moveColumn(originColumnIndex, targetColumnIndex, opts) {\n return function (tr) {\n var defaultOptions = { tryToFit: false, direction: 0 };\n var options = Object.assign(defaultOptions, opts);\n var table = findTable(tr.selection);\n if (!table) {\n return tr;\n }\n\n var _getSelectionRangeInC = getSelectionRangeInColumn(originColumnIndex)(tr),\n indexesOriginColumn = _getSelectionRangeInC.indexes;\n\n var _getSelectionRangeInC2 = getSelectionRangeInColumn(targetColumnIndex)(tr),\n indexesTargetColumn = _getSelectionRangeInC2.indexes;\n\n if (indexesOriginColumn.indexOf(targetColumnIndex) > -1) {\n return tr;\n }\n\n if (!options.tryToFit && indexesTargetColumn.length > 1) {\n checkInvalidMovements(originColumnIndex, targetColumnIndex, indexesTargetColumn, 'column');\n }\n\n var newTable = moveTableColumn(table, indexesOriginColumn, indexesTargetColumn, options.direction);\n\n return cloneTr(tr).replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n };\n};\n\n// :: (rowIndex: number, clonePreviousRow?: boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that adds a new row at index `rowIndex`. Optionally clone the previous row.\n//\n// ```javascript\n// dispatch(\n// addRowAt(i)(state.tr)\n// );\n// ```\n//\n// ```javascript\n// dispatch(\n// addRowAt(i, true)(state.tr)\n// );\n// ```\nvar addRowAt = function addRowAt(rowIndex, clonePreviousRow) {\n return function (tr) {\n var table = findTable(tr.selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n var cloneRowIndex = rowIndex - 1;\n\n if (clonePreviousRow && cloneRowIndex >= 0) {\n return cloneTr(cloneRowAt(cloneRowIndex)(tr));\n }\n\n if (rowIndex >= 0 && rowIndex <= map.height) {\n return cloneTr(prosemirrorTables.addRow(tr, {\n map: map,\n tableStart: table.start,\n table: table.node\n }, rowIndex));\n }\n }\n return tr;\n };\n};\n\n// :: (cloneRowIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that adds a new row after `cloneRowIndex`, cloning the row attributes at `cloneRowIndex`.\n//\n// ```javascript\n// dispatch(\n// cloneRowAt(i)(state.tr)\n// );\n// ```\nvar cloneRowAt = function cloneRowAt(rowIndex) {\n return function (tr) {\n var table = findTable(tr.selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n\n if (rowIndex >= 0 && rowIndex <= map.height) {\n var tableNode = table.node;\n var tableNodes = tableNodeTypes(tableNode.type.schema);\n\n var rowPos = table.start;\n for (var i = 0; i < rowIndex + 1; i++) {\n rowPos += tableNode.child(i).nodeSize;\n }\n\n var cloneRow = tableNode.child(rowIndex);\n // Re-create the same nodes with same attrs, dropping the node content.\n var cells = [];\n var rowWidth = 0;\n cloneRow.forEach(function (cell) {\n // If we're copying a row with rowspan somewhere, we dont want to copy that cell\n // We'll increment its span below.\n if (cell.attrs.rowspan === 1) {\n rowWidth += cell.attrs.colspan;\n cells.push(tableNodes[cell.type.spec.tableRole].createAndFill(cell.attrs, cell.marks));\n }\n });\n\n // If a higher row spans past our clone row, bump the higher row to cover this new row too.\n if (rowWidth < map.width) {\n var rowSpanCells = [];\n\n var _loop = function _loop(_i) {\n var foundCells = filterCellsInRow(_i, function (cell, tr) {\n var rowspan = cell.node.attrs.rowspan;\n var spanRange = _i + rowspan;\n return rowspan > 1 && spanRange > rowIndex;\n })(tr);\n rowSpanCells.push.apply(rowSpanCells, _toConsumableArray(foundCells));\n };\n\n for (var _i = rowIndex; _i >= 0; _i--) {\n _loop(_i);\n }\n\n if (rowSpanCells.length) {\n rowSpanCells.forEach(function (cell) {\n tr = setCellAttrs(cell, {\n rowspan: cell.node.attrs.rowspan + 1\n })(tr);\n });\n }\n }\n\n return safeInsert(tableNodes.row.create(cloneRow.attrs, cells), rowPos)(tr);\n }\n }\n return tr;\n };\n};\n\n// :: (columnIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a column at index `columnIndex`. If there is only one column left, it will remove the entire table.\n//\n// ```javascript\n// dispatch(\n// removeColumnAt(i)(state.tr)\n// );\n// ```\nvar removeColumnAt = function removeColumnAt(columnIndex) {\n return function (tr) {\n var table = findTable(tr.selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n if (columnIndex === 0 && map.width === 1) {\n return removeTable(tr);\n } else if (columnIndex >= 0 && columnIndex <= map.width) {\n prosemirrorTables.removeColumn(tr, {\n map: map,\n tableStart: table.start,\n table: table.node\n }, columnIndex);\n return cloneTr(tr);\n }\n }\n return tr;\n };\n};\n\n// :: (rowIndex: number) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a row at index `rowIndex`. If there is only one row left, it will remove the entire table.\n//\n// ```javascript\n// dispatch(\n// removeRowAt(i)(state.tr)\n// );\n// ```\nvar removeRowAt = function removeRowAt(rowIndex) {\n return function (tr) {\n var table = findTable(tr.selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n if (rowIndex === 0 && map.height === 1) {\n return removeTable(tr);\n } else if (rowIndex >= 0 && rowIndex <= map.height) {\n prosemirrorTables.removeRow(tr, {\n map: map,\n tableStart: table.start,\n table: table.node\n }, rowIndex);\n return cloneTr(tr);\n }\n }\n return tr;\n };\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes a table node if the cursor is inside of it.\n//\n// ```javascript\n// dispatch(\n// removeTable(state.tr)\n// );\n// ```\nvar removeTable = function removeTable(tr) {\n var $from = tr.selection.$from;\n\n for (var depth = $from.depth; depth > 0; depth--) {\n var node = $from.node(depth);\n if (node.type.spec.tableRole === 'table') {\n return cloneTr(tr.delete($from.before(depth), $from.after(depth)));\n }\n }\n return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes selected columns.\n//\n// ```javascript\n// dispatch(\n// removeSelectedColumns(state.tr)\n// );\n// ```\nvar removeSelectedColumns = function removeSelectedColumns(tr) {\n var selection = tr.selection;\n\n if (isTableSelected(selection)) {\n return removeTable(tr);\n }\n if (isCellSelection(selection)) {\n var table = findTable(selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n var rect = map.rectBetween(selection.$anchorCell.pos - table.start, selection.$headCell.pos - table.start);\n\n if (rect.left == 0 && rect.right == map.width) {\n return false;\n }\n\n var pmTableRect = Object.assign({}, rect, {\n map: map,\n table: table.node,\n tableStart: table.start\n });\n\n for (var i = pmTableRect.right - 1;; i--) {\n prosemirrorTables.removeColumn(tr, pmTableRect, i);\n if (i === pmTableRect.left) {\n break;\n }\n pmTableRect.table = pmTableRect.tableStart ? tr.doc.nodeAt(pmTableRect.tableStart - 1) : tr.doc;\n pmTableRect.map = prosemirrorTables.TableMap.get(pmTableRect.table);\n }\n return cloneTr(tr);\n }\n }\n return tr;\n};\n\n// :: (tr: Transaction) → Transaction\n// Returns a new transaction that removes selected rows.\n//\n// ```javascript\n// dispatch(\n// removeSelectedRows(state.tr)\n// );\n// ```\nvar removeSelectedRows = function removeSelectedRows(tr) {\n var selection = tr.selection;\n\n if (isTableSelected(selection)) {\n return removeTable(tr);\n }\n if (isCellSelection(selection)) {\n var table = findTable(selection);\n if (table) {\n var map = prosemirrorTables.TableMap.get(table.node);\n var rect = map.rectBetween(selection.$anchorCell.pos - table.start, selection.$headCell.pos - table.start);\n\n if (rect.top == 0 && rect.bottom == map.height) {\n return false;\n }\n\n var pmTableRect = Object.assign({}, rect, {\n map: map,\n table: table.node,\n tableStart: table.start\n });\n\n for (var i = pmTableRect.bottom - 1;; i--) {\n prosemirrorTables.removeRow(tr, pmTableRect, i);\n if (i === pmTableRect.top) {\n break;\n }\n pmTableRect.table = pmTableRect.tableStart ? tr.doc.nodeAt(pmTableRect.tableStart - 1) : tr.doc;\n pmTableRect.map = prosemirrorTables.TableMap.get(pmTableRect.table);\n }\n\n return cloneTr(tr);\n }\n }\n return tr;\n};\n\n// :: ($pos: ResolvedPos) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a column closest to a given `$pos`.\n//\n// ```javascript\n// dispatch(\n// removeColumnClosestToPos(state.doc.resolve(3))(state.tr)\n// );\n// ```\nvar removeColumnClosestToPos = function removeColumnClosestToPos($pos) {\n return function (tr) {\n var rect = findCellRectClosestToPos($pos);\n if (rect) {\n return removeColumnAt(rect.left)(setTextSelection($pos.pos)(tr));\n }\n return tr;\n };\n};\n\n// :: ($pos: ResolvedPos) → (tr: Transaction) → Transaction\n// Returns a new transaction that removes a row closest to a given `$pos`.\n//\n// ```javascript\n// dispatch(\n// removeRowClosestToPos(state.doc.resolve(3))(state.tr)\n// );\n// ```\nvar removeRowClosestToPos = function removeRowClosestToPos($pos) {\n return function (tr) {\n var rect = findCellRectClosestToPos($pos);\n if (rect) {\n return removeRowAt(rect.top)(setTextSelection($pos.pos)(tr));\n }\n return tr;\n };\n};\n\n// :: (columnIndex: number, cellTransform: (cell: {pos: number, start: number, node: ProseMirrorNode}, tr: Transaction) → Transaction, setCursorToLastCell: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that maps a given `cellTransform` function to each cell in a column at a given `columnIndex`.\n// It will set the selection into the last cell of the column if `setCursorToLastCell` param is set to `true`.\n//\n// ```javascript\n// dispatch(\n// forEachCellInColumn(0, (cell, tr) => emptyCell(cell, state.schema)(tr))(state.tr)\n// );\n// ```\nvar forEachCellInColumn = function forEachCellInColumn(columnIndex, cellTransform, setCursorToLastCell) {\n return function (tr) {\n var cells = getCellsInColumn(columnIndex)(tr.selection);\n if (cells) {\n for (var i = cells.length - 1; i >= 0; i--) {\n tr = cellTransform(cells[i], tr);\n }\n if (setCursorToLastCell) {\n var $pos = tr.doc.resolve(tr.mapping.map(cells[cells.length - 1].pos));\n tr.setSelection(prosemirrorState.Selection.near($pos));\n }\n return cloneTr(tr);\n }\n return tr;\n };\n};\n\n// :: (rowIndex: number, cellTransform: (cell: {pos: number, start: number, node: ProseMirrorNode}, tr: Transaction) → Transaction, setCursorToLastCell: ?boolean) → (tr: Transaction) → Transaction\n// Returns a new transaction that maps a given `cellTransform` function to each cell in a row at a given `rowIndex`.\n// It will set the selection into the last cell of the row if `setCursorToLastCell` param is set to `true`.\n//\n// ```javascript\n// dispatch(\n// forEachCellInRow(0, (cell, tr) => setCellAttrs(cell, { background: 'red' })(tr))(state.tr)\n// );\n// ```\nvar forEachCellInRow = function forEachCellInRow(rowIndex, cellTransform, setCursorToLastCell) {\n return function (tr) {\n var cells = getCellsInRow(rowIndex)(tr.selection);\n if (cells) {\n for (var i = cells.length - 1; i >= 0; i--) {\n tr = cellTransform(cells[i], tr);\n }\n if (setCursorToLastCell) {\n var $pos = tr.doc.resolve(tr.mapping.map(cells[cells.length - 1].pos));\n tr.setSelection(prosemirrorState.Selection.near($pos));\n }\n }\n return tr;\n };\n};\n\n// :: (cell: {pos: number, start: number, node: ProseMirrorNode}, attrs: Object) → (tr: Transaction) → Transaction\n// Returns a new transaction that sets given `attrs` to a given `cell`.\n//\n// ```javascript\n// dispatch(\n// setCellAttrs(findCellClosestToPos($pos), { background: 'blue' })(tr);\n// );\n// ```\nvar setCellAttrs = function setCellAttrs(cell, attrs) {\n return function (tr) {\n if (cell) {\n tr.setNodeMarkup(cell.pos, null, Object.assign({}, cell.node.attrs, attrs));\n return cloneTr(tr);\n }\n return tr;\n };\n};\n\n// :: (schema: Schema, rowsCount: ?number, colsCount: ?number, withHeaderRow: ?boolean, cellContent: ?Node) → Node\n// Returns a table node of a given size.\n// `withHeaderRow` defines whether the first row of the table will be a header row.\n// `cellContent` defines the content of each cell.\n//\n// ```javascript\n// const table = createTable(state.schema); // 3x3 table node\n// dispatch(\n// tr.replaceSelectionWith(table).scrollIntoView()\n// );\n// ```\nvar createTable = function createTable(schema) {\n var rowsCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;\n var colsCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;\n var withHeaderRow = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var cellContent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n\n var _tableNodeTypes = tableNodeTypes(schema),\n tableCell = _tableNodeTypes.cell,\n tableHeader = _tableNodeTypes.header_cell,\n tableRow = _tableNodeTypes.row,\n table = _tableNodeTypes.table;\n\n var cells = [];\n var headerCells = [];\n for (var i = 0; i < colsCount; i++) {\n cells.push(createCell(tableCell, cellContent));\n\n if (withHeaderRow) {\n headerCells.push(createCell(tableHeader, cellContent));\n }\n }\n\n var rows = [];\n for (var _i2 = 0; _i2 < rowsCount; _i2++) {\n rows.push(tableRow.createChecked(null, withHeaderRow && _i2 === 0 ? headerCells : cells));\n }\n\n return table.createChecked(null, rows);\n};\n\n// :: ($pos: ResolvedPos) → ?{pos: number, start: number, node: ProseMirrorNode}\n// Iterates over parent nodes, returning a table cell or a table header node closest to a given `$pos`.\n//\n// ```javascript\n// const cell = findCellClosestToPos(state.selection.$from);\n// ```\nvar findCellClosestToPos = function findCellClosestToPos($pos) {\n var predicate = function predicate(node) {\n return node.type.spec.tableRole && /cell/i.test(node.type.spec.tableRole);\n };\n return findParentNodeClosestToPos($pos, predicate);\n};\n\n// :: ($pos: ResolvedPos) → ?{left: number, top: number, right: number, bottom: number}\n// Returns the rectangle spanning a cell closest to a given `$pos`.\n//\n// ```javascript\n// dispatch(\n// findCellRectClosestToPos(state.selection.$from)\n// );\n// ```\nvar findCellRectClosestToPos = function findCellRectClosestToPos($pos) {\n var cell = findCellClosestToPos($pos);\n if (cell) {\n var table = findTableClosestToPos($pos);\n var map = prosemirrorTables.TableMap.get(table.node);\n var cellPos = cell.pos - table.start;\n return map.rectBetween(cellPos, cellPos);\n }\n};\n\nvar filterCellsInRow = function filterCellsInRow(rowIndex, predicate) {\n return function (tr) {\n var foundCells = [];\n var cells = getCellsInRow(rowIndex)(tr.selection);\n if (cells) {\n for (var j = cells.length - 1; j >= 0; j--) {\n if (predicate(cells[j], tr)) {\n foundCells.push(cells[j]);\n }\n }\n }\n\n return foundCells;\n };\n};\n\n// :: (columnIndex: number) → (tr: Transaction) → {$anchor: ResolvedPos, $head: ResolvedPos, indexes: [number]}\n// Returns a range of rectangular selection spanning all merged cells around a column at index `columnIndex`.\n//\n// ```javascript\n// const range = getSelectionRangeInColumn(3)(state.tr);\n// ```\nvar getSelectionRangeInColumn = function getSelectionRangeInColumn(columnIndex) {\n return function (tr) {\n var startIndex = columnIndex;\n var endIndex = columnIndex;\n\n // looking for selection start column (startIndex)\n\n var _loop2 = function _loop2(i) {\n var cells = getCellsInColumn(i)(tr.selection);\n if (cells) {\n cells.forEach(function (cell) {\n var maybeEndIndex = cell.node.attrs.colspan + i - 1;\n if (maybeEndIndex >= startIndex) {\n startIndex = i;\n }\n if (maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n }\n };\n\n for (var i = columnIndex; i >= 0; i--) {\n _loop2(i);\n }\n // looking for selection end column (endIndex)\n\n var _loop3 = function _loop3(i) {\n var cells = getCellsInColumn(i)(tr.selection);\n if (cells) {\n cells.forEach(function (cell) {\n var maybeEndIndex = cell.node.attrs.colspan + i - 1;\n if (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n }\n };\n\n for (var i = columnIndex; i <= endIndex; i++) {\n _loop3(i);\n }\n\n // filter out columns without cells (where all rows have colspan > 1 in the same column)\n var indexes = [];\n for (var i = startIndex; i <= endIndex; i++) {\n var maybeCells = getCellsInColumn(i)(tr.selection);\n if (maybeCells && maybeCells.length) {\n indexes.push(i);\n }\n }\n startIndex = indexes[0];\n endIndex = indexes[indexes.length - 1];\n\n var firstSelectedColumnCells = getCellsInColumn(startIndex)(tr.selection);\n var firstRowCells = getCellsInRow(0)(tr.selection);\n var $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos);\n\n var headCell = void 0;\n for (var _i3 = endIndex; _i3 >= startIndex; _i3--) {\n var columnCells = getCellsInColumn(_i3)(tr.selection);\n if (columnCells && columnCells.length) {\n for (var j = firstRowCells.length - 1; j >= 0; j--) {\n if (firstRowCells[j].pos === columnCells[0].pos) {\n headCell = columnCells[0];\n break;\n }\n }\n if (headCell) {\n break;\n }\n }\n }\n\n var $head = tr.doc.resolve(headCell.pos);\n return { $anchor: $anchor, $head: $head, indexes: indexes };\n };\n};\n\n// :: (rowIndex: number) → (tr: Transaction) → {$anchor: ResolvedPos, $head: ResolvedPos, indexes: [number]}\n// Returns a range of rectangular selection spanning all merged cells around a row at index `rowIndex`.\n//\n// ```javascript\n// const range = getSelectionRangeInRow(3)(state.tr);\n// ```\nvar getSelectionRangeInRow = function getSelectionRangeInRow(rowIndex) {\n return function (tr) {\n var startIndex = rowIndex;\n var endIndex = rowIndex;\n // looking for selection start row (startIndex)\n\n var _loop4 = function _loop4(i) {\n var cells = getCellsInRow(i)(tr.selection);\n cells.forEach(function (cell) {\n var maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n if (maybeEndIndex >= startIndex) {\n startIndex = i;\n }\n if (maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n };\n\n for (var i = rowIndex; i >= 0; i--) {\n _loop4(i);\n }\n // looking for selection end row (endIndex)\n\n var _loop5 = function _loop5(i) {\n var cells = getCellsInRow(i)(tr.selection);\n cells.forEach(function (cell) {\n var maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n if (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) {\n endIndex = maybeEndIndex;\n }\n });\n };\n\n for (var i = rowIndex; i <= endIndex; i++) {\n _loop5(i);\n }\n\n // filter out rows without cells (where all columns have rowspan > 1 in the same row)\n var indexes = [];\n for (var i = startIndex; i <= endIndex; i++) {\n var maybeCells = getCellsInRow(i)(tr.selection);\n if (maybeCells && maybeCells.length) {\n indexes.push(i);\n }\n }\n startIndex = indexes[0];\n endIndex = indexes[indexes.length - 1];\n\n var firstSelectedRowCells = getCellsInRow(startIndex)(tr.selection);\n var firstColumnCells = getCellsInColumn(0)(tr.selection);\n var $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos);\n\n var headCell = void 0;\n for (var _i4 = endIndex; _i4 >= startIndex; _i4--) {\n var rowCells = getCellsInRow(_i4)(tr.selection);\n if (rowCells && rowCells.length) {\n for (var j = firstColumnCells.length - 1; j >= 0; j--) {\n if (firstColumnCells[j].pos === rowCells[0].pos) {\n headCell = rowCells[0];\n break;\n }\n }\n if (headCell) {\n break;\n }\n }\n }\n\n var $head = tr.doc.resolve(headCell.pos);\n return { $anchor: $anchor, $head: $head, indexes: indexes };\n };\n};\n\nexports.isNodeSelection = isNodeSelection;\nexports.canInsert = canInsert;\nexports.convertTableNodeToArrayOfRows = convertTableNodeToArrayOfRows;\nexports.convertArrayOfRowsToTableNode = convertArrayOfRowsToTableNode;\nexports.findParentNode = findParentNode;\nexports.findParentNodeClosestToPos = findParentNodeClosestToPos;\nexports.findParentDomRef = findParentDomRef;\nexports.hasParentNode = hasParentNode;\nexports.findParentNodeOfType = findParentNodeOfType;\nexports.findParentNodeOfTypeClosestToPos = findParentNodeOfTypeClosestToPos;\nexports.hasParentNodeOfType = hasParentNodeOfType;\nexports.findParentDomRefOfType = findParentDomRefOfType;\nexports.findSelectedNodeOfType = findSelectedNodeOfType;\nexports.findPositionOfNodeBefore = findPositionOfNodeBefore;\nexports.findDomRefAtPos = findDomRefAtPos;\nexports.flatten = flatten;\nexports.findChildren = findChildren;\nexports.findTextNodes = findTextNodes;\nexports.findInlineNodes = findInlineNodes;\nexports.findBlockNodes = findBlockNodes;\nexports.findChildrenByAttr = findChildrenByAttr;\nexports.findChildrenByType = findChildrenByType;\nexports.findChildrenByMark = findChildrenByMark;\nexports.contains = contains;\nexports.findTable = findTable;\nexports.isCellSelection = isCellSelection;\nexports.getSelectionRect = getSelectionRect;\nexports.isColumnSelected = isColumnSelected;\nexports.isRowSelected = isRowSelected;\nexports.isTableSelected = isTableSelected;\nexports.getCellsInColumn = getCellsInColumn;\nexports.getCellsInRow = getCellsInRow;\nexports.getCellsInTable = getCellsInTable;\nexports.selectColumn = selectColumn;\nexports.selectRow = selectRow;\nexports.selectTable = selectTable;\nexports.emptyCell = emptyCell;\nexports.addColumnAt = addColumnAt;\nexports.moveRow = moveRow;\nexports.moveColumn = moveColumn;\nexports.addRowAt = addRowAt;\nexports.cloneRowAt = cloneRowAt;\nexports.removeColumnAt = removeColumnAt;\nexports.removeRowAt = removeRowAt;\nexports.removeTable = removeTable;\nexports.removeSelectedColumns = removeSelectedColumns;\nexports.removeSelectedRows = removeSelectedRows;\nexports.removeColumnClosestToPos = removeColumnClosestToPos;\nexports.removeRowClosestToPos = removeRowClosestToPos;\nexports.forEachCellInColumn = forEachCellInColumn;\nexports.forEachCellInRow = forEachCellInRow;\nexports.setCellAttrs = setCellAttrs;\nexports.createTable = createTable;\nexports.findCellClosestToPos = findCellClosestToPos;\nexports.findCellRectClosestToPos = findCellRectClosestToPos;\nexports.getSelectionRangeInColumn = getSelectionRangeInColumn;\nexports.getSelectionRangeInRow = getSelectionRangeInRow;\nexports.removeParentNodeOfType = removeParentNodeOfType;\nexports.replaceParentNodeOfType = replaceParentNodeOfType;\nexports.removeSelectedNode = removeSelectedNode;\nexports.replaceSelectedNode = replaceSelectedNode;\nexports.setTextSelection = setTextSelection;\nexports.safeInsert = safeInsert;\nexports.setParentNodeMarkup = setParentNodeMarkup;\nexports.selectParentNodeOfType = selectParentNodeOfType;\nexports.removeNodeBefore = removeNodeBefore;\n//# sourceMappingURL=index.js.map\n","/*\r\n * node-traverse.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node } from \"prosemirror-model\";\r\n\r\nexport enum TraverseResult {\r\n // Descend into children, if any\r\n Descend,\r\n // Continue to next sibling, skipping children\r\n Next,\r\n // Skip remaining siblings, continue at parent's sibling\r\n Up,\r\n // Stop traversal entirely\r\n End\r\n}\r\nexport type TraverseFn = (node: Node, pos: number, parent: Node, index: number) => (TraverseResult | undefined | void);\r\n\r\n// Traverse a node/doc within a span of positions. The given span need only\r\n// overlap (not contain) a node for it to be included in the iteration.\r\n//\r\n// Versus other forms of iteration in prosemirror(-utils), traverseNodes is\r\n// lazy and also provides a greater degree of flow control (see TraverseResult).\r\n//\r\n// It's OK for `from` to be negative and `to` to be larger than node.nodeSize.\r\n//\r\n// See also: Node.nodesBetween, prosemirror-utils' findChildren. \r\nexport function traverseNodes(node: Node, from: number, to: number, fn: TraverseFn, debug = false) {\r\n if (debug) {\r\n // tslint:disable-next-line: no-console\r\n console.log(`Traversing ${node.type.name} in the range [${from}-${to}]`);\r\n }\r\n traverseNodesImpl(node, from, to, fn, 0, null, debug);\r\n}\r\n\r\nfunction traverseNodesImpl(node: Node, from: number, to: number, fn: TraverseFn,\r\n offset: number, _parent: Node | null, debug: boolean) : boolean {\r\n let pos = 0;\r\n\r\n for (let i = 0; i < node.content.childCount; i++) {\r\n const child = node.content.child(i); \r\n const endPos = pos + child.nodeSize;\r\n\r\n if (debug) {\r\n // tslint:disable-next-line: no-console\r\n console.log(`${child.type.name} [${offset+pos}-${offset+endPos}]`);\r\n // tslint:disable-next-line: no-console\r\n console.log(`offset: ${offset}, condition: ${pos} < ${to} && ${endPos} > ${from}`);\r\n }\r\n\r\n // Don't look at nodes that fall outside of the desired range\r\n if (pos < to && endPos > from) {\r\n // Invoke the callback; the default action is Descend.\r\n const result = fn(child, offset + pos, node, i) || TraverseResult.Descend;\r\n\r\n if (result === TraverseResult.Descend) {\r\n // The from, to, and offset all have to be modified to be relative\r\n // to the child.\r\n if (child.content.childCount) {\r\n const childContentPos = pos + 1;\r\n if (!traverseNodesImpl(child, from - childContentPos, to - childContentPos, fn, offset + childContentPos, node, debug)) {\r\n // Stop all traversal\r\n return false;\r\n }\r\n }\r\n } else if (result === TraverseResult.Next) {\r\n // Do nothing\r\n } else if (result === TraverseResult.Up) {\r\n // Stop iterating at this level, but let parent keep going\r\n return true;\r\n } else if (result === TraverseResult.End) {\r\n // Stop all traversal\r\n return false;\r\n } else {\r\n throw new Error(\"Unexpected TraverseResult value\");\r\n }\r\n }\r\n\r\n pos = endPos;\r\n }\r\n\r\n return true;\r\n}\r\n","/*\r\n * node.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, NodeSpec, NodeType, ResolvedPos } from 'prosemirror-model';\r\nimport { EditorState, Selection, NodeSelection, Transaction } from 'prosemirror-state';\r\nimport {\r\n findParentNode,\r\n NodeWithPos,\r\n findParentNodeOfType,\r\n findChildrenByType,\r\n findChildren,\r\n findParentNodeOfTypeClosestToPos,\r\n Predicate,\r\n} from 'prosemirror-utils';\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport {\r\n PandocTokenReader,\r\n PandocNodeWriterFn,\r\n PandocPreprocessorFn,\r\n PandocBlockReaderFn,\r\n PandocInlineHTMLReaderFn,\r\n PandocTokensFilterFn,\r\n PandocMarkdownPostProcessorFn,\r\n} from './pandoc';\r\nimport { PandocBlockCapsuleFilter } from './pandoc_capsule';\r\n\r\nimport { AttrEditOptions } from './attr_edit';\r\nimport { traverseNodes, TraverseResult } from './node-traverse';\r\nimport { CodeViewOptions } from './codeview';\r\n\r\nexport interface PandocNode {\r\n readonly name: string;\r\n readonly spec: NodeSpec;\r\n readonly code_view?: CodeViewOptions;\r\n readonly attr_edit?: () => AttrEditOptions | null;\r\n readonly pandoc: {\r\n readonly readers?: readonly PandocTokenReader[];\r\n readonly writer?: PandocNodeWriterFn;\r\n readonly preprocessor?: PandocPreprocessorFn;\r\n readonly tokensFilter?: PandocTokensFilterFn;\r\n readonly blockReader?: PandocBlockReaderFn;\r\n readonly inlineHTMLReader?: PandocInlineHTMLReaderFn;\r\n readonly blockCapsuleFilter?: PandocBlockCapsuleFilter;\r\n readonly markdownPostProcessor?: PandocMarkdownPostProcessorFn;\r\n };\r\n}\r\n\r\n\r\nexport type NodeTraversalFn = (\r\n node: Node,\r\n pos: number,\r\n parent: Node,\r\n index: number,\r\n) => boolean | void | null | undefined;\r\n\r\nexport function findTopLevelBodyNodes(doc: ProsemirrorNode, predicate: (node: ProsemirrorNode) => boolean) {\r\n const body = findChildrenByType(doc, doc.type.schema.nodes.body, false)[0];\r\n const offset = body.pos + 1;\r\n const nodes = findChildren(body.node, predicate, true);\r\n return nodes.map(value => ({ ...value, pos: value.pos + offset }));\r\n}\r\n\r\nexport function findNodeOfTypeInSelection(selection: Selection, type: NodeType): NodeWithPos | undefined {\r\n return findSelectedNodeOfType(type, selection) || findParentNode((n: ProsemirrorNode) => n.type === type)(selection);\r\n}\r\n\r\nexport function firstNode(parent: NodeWithPos, predicate: (node: ProsemirrorNode) => boolean) {\r\n let foundNode: NodeWithPos | undefined;\r\n parent.node.descendants((node, pos) => {\r\n if (!foundNode) {\r\n if (predicate(node)) {\r\n foundNode = {\r\n node,\r\n pos: parent.pos + 1 + pos,\r\n };\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return false;\r\n }\r\n });\r\n return foundNode;\r\n}\r\n\r\nexport function lastNode(parent: NodeWithPos, predicate: (node: ProsemirrorNode) => boolean) {\r\n let last: NodeWithPos | undefined;\r\n parent.node.descendants((node, pos) => {\r\n if (predicate(node)) {\r\n last = {\r\n node,\r\n pos: parent.pos + 1 + pos,\r\n };\r\n }\r\n });\r\n return last;\r\n}\r\n\r\nexport function nodeIsActive(state: EditorState, type: NodeType, attrs = {}) {\r\n const predicate = (n: ProsemirrorNode) => n.type === type;\r\n const node = findSelectedNodeOfType(type,state.selection) || findParentNode(predicate)(state.selection);\r\n\r\n if (!Object.keys(attrs).length || !node) {\r\n return !!node;\r\n }\r\n\r\n return node.node.hasMarkup(type, attrs);\r\n}\r\n\r\nexport function canInsertNode(context: EditorState | Selection, nodeType: NodeType) {\r\n const selection = asSelection(context);\r\n const $from = selection.$from;\r\n return canInsertNodeAtPos($from, nodeType);\r\n}\r\n\r\nexport function canInsertNodeAtPos($pos: ResolvedPos, nodeType: NodeType) {\r\n for (let d = $pos.depth; d >= 0; d--) {\r\n const index = $pos.index(d);\r\n if ($pos.node(d).canReplaceWith(index, index, nodeType)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function canInsertTextNode(context: EditorState | Selection) {\r\n const selection = asSelection(context);\r\n return canInsertNode(selection, selection.$head.parent.type.schema.nodes.text);\r\n}\r\n\r\nexport function insertAndSelectNode(view: EditorView, node: ProsemirrorNode) {\r\n // create new transaction\r\n const tr = view.state.tr;\r\n\r\n // insert the node over the existing selection\r\n tr.ensureMarks(node.marks);\r\n tr.replaceSelectionWith(node);\r\n\r\n // set selection to inserted node (or don't if our selection calculate was off,\r\n // as can happen when we insert into a list bullet)\r\n const selectionPos = tr.doc.resolve(tr.mapping.map(view.state.selection.from, -1));\r\n const selectionNode = tr.doc.nodeAt(selectionPos.pos);\r\n if (selectionNode && selectionNode.type === node.type) {\r\n tr.setSelection(new NodeSelection(selectionPos));\r\n }\r\n\r\n // dispatch transaction\r\n view.dispatch(tr);\r\n}\r\n\r\nexport function editingRootNode(selection: Selection) {\r\n const schema = selection.$head.node().type.schema;\r\n return findParentNodeOfType(schema.nodes.body)(selection) || findParentNodeOfType(schema.nodes.note)(selection);\r\n}\r\n\r\nexport function editingRootNodeClosestToPos($pos: ResolvedPos) {\r\n const schema = $pos.node().type.schema;\r\n return (\r\n findParentNodeOfTypeClosestToPos($pos, schema.nodes.body) ||\r\n findParentNodeOfTypeClosestToPos($pos, schema.nodes.note)\r\n );\r\n}\r\n\r\nexport function editingRootScrollContainerElement(view: EditorView) {\r\n const editingNode = editingRootNode(view.state.selection);\r\n if (editingNode) {\r\n const editingEl = view.domAtPos(editingNode.pos + 1).node;\r\n return editingEl.parentElement;\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function setNodeAttrs(tr: Transaction, {pos, node}: NodeWithPos, attrs: { [key: string]: unknown }) {\r\n return tr.setNodeMarkup(\r\n pos, node.type,\r\n Object.assign({}, node.attrs, attrs),\r\n node.marks\r\n );\r\n}\r\n\r\nexport function findOneNode(node: ProsemirrorNode, from: number, to: number, predicate: Predicate) {\r\n let result: ProsemirrorNode | null = null;\r\n traverseNodes(node, from, to, x => {\r\n if (predicate(x)) {\r\n result = x;\r\n return TraverseResult.End;\r\n } else {\r\n return undefined;\r\n }\r\n });\r\n return result;\r\n}\r\n\r\nexport function findSelectedNodeOfType(nodeType: NodeType, selection: Selection) {\r\n if (selection instanceof NodeSelection && nodeType === selection.node.type) {\r\n const { node, $from } = selection;\r\n return { node, pos: $from.pos };\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction asSelection(context: EditorState | Selection) {\r\n return context instanceof EditorState ? context.selection : context;\r\n}\r\n","\n/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nvar isNothing_1 = isNothing;\nvar isObject_1 = isObject;\nvar toArray_1 = toArray;\nvar repeat_1 = repeat;\nvar isNegativeZero_1 = isNegativeZero;\nvar extend_1 = extend;\n\nvar common = {\n\tisNothing: isNothing_1,\n\tisObject: isObject_1,\n\ttoArray: toArray_1,\n\trepeat: repeat_1,\n\tisNegativeZero: isNegativeZero_1,\n\textend: extend_1\n};\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException$1(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException$1.prototype = Object.create(Error.prototype);\nYAMLException$1.prototype.constructor = YAMLException$1;\n\n\nYAMLException$1.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nvar exception = YAMLException$1;\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '→') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nvar snippet = makeSnippet;\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type$1(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new exception('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new exception('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nvar type = Type$1;\n\n/*eslint-disable max-len*/\n\n\n\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema$1(definition) {\n return this.extend(definition);\n}\n\n\nSchema$1.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new exception('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type$1.loadKind && type$1.loadKind !== 'scalar') {\n throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type$1.multi) {\n throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type$1) {\n if (!(type$1 instanceof type)) {\n throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema$1.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nvar schema = Schema$1;\n\nvar str = new type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n\nvar seq = new type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n\nvar map = new type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n\nvar failsafe = new schema({\n explicit: [\n str,\n seq,\n map\n ]\n});\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nvar _null = new type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nvar bool = new type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nvar int = new type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nvar float = new type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n\nvar json = failsafe.extend({\n implicit: [\n _null,\n bool,\n int,\n float\n ]\n});\n\nvar core = json;\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nvar timestamp = new type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nvar merge = new type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n\n/*eslint-disable no-bitwise*/\n\n\n\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nvar binary = new type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n\nvar _hasOwnProperty$3 = Object.prototype.hasOwnProperty;\nvar _toString$2 = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString$2.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty$3.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nvar omap = new type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n\nvar _toString$1 = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString$1.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nvar pairs = new type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n\nvar _hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty$2.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nvar set = new type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n\nvar _default = core.extend({\n implicit: [\n timestamp,\n merge\n ],\n explicit: [\n binary,\n omap,\n pairs,\n set\n ]\n});\n\n/*eslint-disable max-len,no-use-before-define*/\n\n\n\n\n\n\n\nvar _hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State$1(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || _default;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = snippet(mark);\n\n return new exception(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty$1.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty$1.call(destination, key)) {\n destination[key] = source[key];\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty$1.call(overridableKeys, keyNode) &&\n _hasOwnProperty$1.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n // used for this specific key only because Object.defineProperty is slow\n if (keyNode === '__proto__') {\n Object.defineProperty(_result, keyNode, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: valueNode\n });\n } else {\n _result[keyNode] = valueNode;\n }\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State$1(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll$1(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load$1(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new exception('expected a single document in the stream, but found more');\n}\n\n\nvar loadAll_1 = loadAll$1;\nvar load_1 = load$1;\n\nvar loader = {\n\tloadAll: loadAll_1,\n\tload: load_1\n};\n\n/*eslint-disable no-use-before-define*/\n\n\n\n\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new exception('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || _default;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out\n// c = flow-in ⇒ ns-plain-safe-in\n// c = block-key ⇒ ns-plain-safe-out\n// c = flow-key ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” )\n// | ( /* An ns-char preceding */ “#” )\n// | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string) + '\"';\n default:\n throw new exception('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new exception('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new exception('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new exception('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-”\n // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump$1(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nvar dump_1 = dump$1;\n\nvar dumper = {\n\tdump: dump_1\n};\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nvar Type = type;\nvar Schema = schema;\nvar FAILSAFE_SCHEMA = failsafe;\nvar JSON_SCHEMA = json;\nvar CORE_SCHEMA = core;\nvar DEFAULT_SCHEMA = _default;\nvar load = loader.load;\nvar loadAll = loader.loadAll;\nvar dump = dumper.dump;\nvar YAMLException = exception;\n\n// Re-export all types in case user wants to create custom schema\nvar types = {\n binary: binary,\n float: float,\n map: map,\n null: _null,\n pairs: pairs,\n set: set,\n timestamp: timestamp,\n bool: bool,\n int: int,\n merge: merge,\n omap: omap,\n seq: seq,\n str: str\n};\n\n// Removed functions from JS-YAML 3.0.x\nvar safeLoad = renamed('safeLoad', 'load');\nvar safeLoadAll = renamed('safeLoadAll', 'loadAll');\nvar safeDump = renamed('safeDump', 'dump');\n\nvar jsYaml = {\n\tType: Type,\n\tSchema: Schema,\n\tFAILSAFE_SCHEMA: FAILSAFE_SCHEMA,\n\tJSON_SCHEMA: JSON_SCHEMA,\n\tCORE_SCHEMA: CORE_SCHEMA,\n\tDEFAULT_SCHEMA: DEFAULT_SCHEMA,\n\tload: load,\n\tloadAll: loadAll,\n\tdump: dump,\n\tYAMLException: YAMLException,\n\ttypes: types,\n\tsafeLoad: safeLoad,\n\tsafeLoadAll: safeLoadAll,\n\tsafeDump: safeDump\n};\n\nexport default jsYaml;\nexport { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types };\n","/*\r\n * log.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport function logException(e: unknown) {\r\n // TODO: log exceptions (we don't want to use console.log in production code, so this would\r\n // utilize some sort of external logging facility)\r\n if (e instanceof Error) {\r\n // console.log(e);\r\n }\r\n}\r\n","/*\r\n * yaml.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { NodeWithPos } from 'prosemirror-utils';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport yaml from 'js-yaml';\r\n\r\nimport { findTopLevelBodyNodes } from './node';\r\nimport { logException } from './log';\r\n\r\nexport const kYamlMetadataTitleRegex = /\\ntitle:(.*)\\n/;\r\n\r\n// return yaml front matter (w/o enclosing --)\r\nexport function yamlFrontMatter(doc: ProsemirrorNode) {\r\n const firstYaml = firstYamlNode(doc);\r\n if (firstYaml) {\r\n return stripYamlDelimeters(firstYaml.node.textContent);\r\n } else {\r\n return '';\r\n }\r\n}\r\n\r\n// set yaml front matter (w/o enclosing ---)\r\nexport function applyYamlFrontMatter(view: EditorView, yamlText: string) {\r\n const schema = view.state.schema;\r\n const updatedYaml = `---\\n${yamlText}---`;\r\n const updatedYamlNode = schema.nodes.yaml_metadata.createAndFill({}, schema.text(updatedYaml));\r\n if (updatedYamlNode) {\r\n const tr = view.state.tr as Transaction;\r\n const firstYaml = firstYamlNode(view.state.doc);\r\n if (firstYaml) {\r\n tr.replaceRangeWith(firstYaml.pos, firstYaml.pos + firstYaml.node.nodeSize, updatedYamlNode);\r\n } else {\r\n tr.insert(1, updatedYamlNode);\r\n }\r\n view.dispatch(tr);\r\n }\r\n}\r\n\r\nexport function yamlMetadataNodes(doc: ProsemirrorNode) {\r\n return findTopLevelBodyNodes(doc, isYamlMetadataNode);\r\n}\r\n\r\nexport function isYamlMetadataNode(node: ProsemirrorNode) {\r\n return node.type === node.type.schema.nodes.yaml_metadata;\r\n}\r\n\r\nexport function titleFromState(state: EditorState) {\r\n const yamlNodes = yamlMetadataNodes(state.doc);\r\n for (const yamlNode of yamlNodes) {\r\n const title = titleFromYamlMetadataNode(yamlNode.node);\r\n if (title) {\r\n return title;\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nexport function titleFromYamlMetadataNode(node: ProsemirrorNode) {\r\n const titleMatch = node.textContent.match(kYamlMetadataTitleRegex);\r\n if (titleMatch) {\r\n let title = titleMatch[1].trim();\r\n title = title.replace(/^[\"']|[\"']$/g, '');\r\n title = title.replace(/\\\\\"/g, '\"');\r\n title = title.replace(/''/g, \"'\");\r\n return title;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function valueFromYamlText(name: string, yamlText: string) {\r\n // Must start and end with either a new line or the start/end of line\r\n const yamlMetadataNameValueRegex = new RegExp(`(?:\\\\n|^)\\\\s*${name}:(.*)(?:\\\\n|$)`);\r\n\r\n // Find the name and value\r\n const valueMatch = yamlText.match(yamlMetadataNameValueRegex);\r\n if (valueMatch) {\r\n // Read the matched value\r\n const valueStr = valueMatch[1].trim();\r\n\r\n // Parse the value (could be string, array, etc...)\r\n const value = parseYaml(valueStr);\r\n return value;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nconst kFirstYamlBlockRegex = /\\s*---[ \\t]*\\n(?![ \\t]*\\n)([\\W\\w]*?)\\n[\\t >]*(?:---|\\.\\.\\.)[ \\t]*/m;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function firstYamlBlock(code: string): Record<string,any> | null {\r\n const match = code.match(kFirstYamlBlockRegex);\r\n if (match && match.index === 0) {\r\n const yamlCode = match[1];\r\n const yamlParsed = parseYaml(yamlCode);\r\n if (typeof yamlParsed === 'object') {\r\n return yamlParsed;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function parseYaml(yamlCode: string) : unknown {\r\n try {\r\n \r\n const yamlParsed = yaml.load(yamlCode, {\r\n onWarning: logException,\r\n });\r\n return yamlParsed;\r\n } catch (e) {\r\n logException(e);\r\n return null;\r\n }\r\n}\r\n\r\nexport function toYamlCode(obj: unknown): string | null {\r\n try {\r\n const yamlCode = yaml.dump(obj);\r\n return yamlCode;\r\n } catch (e) {\r\n logException(e);\r\n return null;\r\n }\r\n}\r\n\r\nexport function stripYamlDelimeters(yamlCode: string) {\r\n return yamlCode.replace(/^[ \\t-]+\\n/, '').replace(/\\n[ \\t-.]+$/, '');\r\n}\r\n\r\nexport interface ParsedYaml {\r\n yamlCode: string;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n yaml: any;\r\n node: NodeWithPos;\r\n}\r\n\r\nexport function parseYamlNodes(doc: ProsemirrorNode): ParsedYaml[] {\r\n const yamlNodes = yamlMetadataNodes(doc);\r\n\r\n const parsedYamlNodes = yamlNodes.map<ParsedYaml>(node => {\r\n const yamlText = node.node.textContent;\r\n const yamlCode = stripYamlDelimeters(yamlText);\r\n return { yamlCode, yaml: parseYaml(yamlCode), node };\r\n });\r\n return parsedYamlNodes;\r\n}\r\n\r\nfunction firstYamlNode(doc: ProsemirrorNode) {\r\n const yamlNodes = yamlMetadataNodes(doc);\r\n if (yamlNodes && yamlNodes.length > 0) {\r\n return yamlNodes[0];\r\n } else {\r\n return '';\r\n }\r\n}\r\n","/*\r\n * presentation.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { findTopLevelBodyNodes } from './node';\r\nimport { titleFromState, valueFromYamlText, yamlFrontMatter } from './yaml';\r\n\r\nexport interface PresentationEditorLocation {\r\n items: PresentationEditorLocationItem[];\r\n auto_slide_level: number;\r\n toc: boolean;\r\n}\r\n\r\nexport const kPresentationEditorLocationTitle = \"title\";\r\nexport const kPresentationEditorLocationHeading = \"heading\";\r\nexport const kPresentationEditorLocationHr = \"hr\";\r\nexport const kPresentationEditorLocationCursor = \"cursor\";\r\n\r\nexport interface PresentationEditorLocationItem {\r\n type: string;\r\n level: number;\r\n // extra field we use internally for navigation\r\n pos: number;\r\n}\r\n\r\nexport function getPresentationEditorLocation(state: EditorState) : PresentationEditorLocation {\r\n \r\n // not the cursor position\r\n const cursorPos = state.selection.from;\r\n\r\n // build list of items\r\n let autoSlideLevel = Number.MAX_VALUE;\r\n const items: PresentationEditorLocationItem[] = [];\r\n\r\n // get top level headings and horizontal rules\r\n const schema = state.schema;\r\n const bodyNodes = findTopLevelBodyNodes(state.doc, () => true);\r\n\r\n // bail if empty\r\n if (bodyNodes.length === 0) {\r\n return { items, auto_slide_level: 0, toc: false };\r\n }\r\n\r\n // start with title if we have one. note that pandoc will make the title slide\r\n // first no matter where it appears in the document, so we do the same here\r\n const title = titleFromState(state);\r\n if (title) {\r\n items.push({ \r\n type: kPresentationEditorLocationTitle, \r\n level: 0,\r\n pos: bodyNodes[0].pos\r\n });\r\n }\r\n\r\n // toc\r\n const toc = !!valueFromYamlText('toc', yamlFrontMatter(state.doc));\r\n\r\n // get top level headings and horizontal rules\r\n let pendingAutoSlideLevel = 0;\r\n let foundCursor = false;\r\n for (const nodeWithPos of bodyNodes) {\r\n // if node is past the selection then add the cursor token\r\n if (!foundCursor && (nodeWithPos.pos > cursorPos)) {\r\n foundCursor = true;\r\n items.push({\r\n type: kPresentationEditorLocationCursor,\r\n level: 0,\r\n pos: nodeWithPos.pos\r\n });\r\n }\r\n // add the node with the requisite type\r\n const node = nodeWithPos.node;\r\n if (node.type === schema.nodes.heading) {\r\n const level = node.attrs.level || 0;\r\n // track pending auto slide level\r\n if (level < autoSlideLevel) {\r\n pendingAutoSlideLevel = level;\r\n } else{\r\n pendingAutoSlideLevel= 0;\r\n }\r\n items.push({\r\n type: kPresentationEditorLocationHeading,\r\n level,\r\n pos: nodeWithPos.pos\r\n });\r\n } else if (node.type === schema.nodes.horizontal_rule) {\r\n items.push({\r\n type: kPresentationEditorLocationHr,\r\n level: 0,\r\n pos: nodeWithPos.pos\r\n });\r\n pendingAutoSlideLevel= 0;\r\n } else if (pendingAutoSlideLevel > 0) {\r\n autoSlideLevel = pendingAutoSlideLevel;\r\n pendingAutoSlideLevel = 0;\r\n }\r\n }\r\n\r\n // if we didn't find the cursor then put it at the end\r\n if (!foundCursor && items.length > 0) {\r\n items.push({\r\n type: kPresentationEditorLocationCursor,\r\n level: 0,\r\n pos: items[items.length-1].pos\r\n });\r\n }\r\n\r\n // last chance to collect pending auto slide level\r\n if (pendingAutoSlideLevel > 0){\r\n autoSlideLevel = pendingAutoSlideLevel;\r\n }\r\n \r\n // didn't find an auto slide level\r\n if (autoSlideLevel === Number.MAX_VALUE) {\r\n autoSlideLevel = 0;\r\n }\r\n \r\n // return the items\r\n return { items, auto_slide_level: autoSlideLevel, toc };\r\n}\r\n\r\nexport function positionForPresentationEditorLocation(\r\n state: EditorState, \r\n location: PresentationEditorLocation\r\n) : number {\r\n // get the positions of the editor's current state (filter out cursor)\r\n const editorItems = getPresentationEditorLocation(state).items\r\n .filter(item => item.type !== kPresentationEditorLocationCursor);\r\n \r\n // get the index of the cursor passed in the location\r\n const cursorIdx = location.items.findIndex(\r\n item => item.type === kPresentationEditorLocationCursor)\r\n ;\r\n\r\n // go one slide before the cursor\r\n if (cursorIdx >= 0) {\r\n const locationItem = editorItems[cursorIdx];\r\n return locationItem.pos;\r\n }\r\n\r\n // default if we can't find a location\r\n return -1;\r\n}\r\n\r\nexport function slideIndexForPresentationEditorLocation(location: PresentationEditorLocation) {\r\n let slideIndex = -1;\r\n for (const item of location.items) {\r\n if (item.type === kPresentationEditorLocationCursor) {\r\n slideIndex = (slideIndex > 0 && location.toc) ? slideIndex + 1 : slideIndex;\r\n return Math.max(slideIndex, 0);\r\n } else if (item.type === kPresentationEditorLocationTitle || \r\n item.type === kPresentationEditorLocationHr) {\r\n slideIndex++;\r\n } else if (item.type === kPresentationEditorLocationHeading && \r\n item.level <= location.auto_slide_level + 1) {\r\n slideIndex++;\r\n }\r\n }\r\n return 0;\r\n}","import { keydownHandler } from 'prosemirror-keymap';\nimport { Selection, NodeSelection, TextSelection, Plugin } from 'prosemirror-state';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\n\n/**\nGap cursor selections are represented using this class. Its\n`$anchor` and `$head` properties both point at the cursor position.\n*/\nclass GapCursor extends Selection {\n /**\n Create a gap cursor.\n */\n constructor($pos) {\n super($pos, $pos);\n }\n map(doc, mapping) {\n let $pos = doc.resolve(mapping.map(this.head));\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);\n }\n content() { return Slice.empty; }\n eq(other) {\n return other instanceof GapCursor && other.head == this.head;\n }\n toJSON() {\n return { type: \"gapcursor\", pos: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.pos != \"number\")\n throw new RangeError(\"Invalid input for GapCursor.fromJSON\");\n return new GapCursor(doc.resolve(json.pos));\n }\n /**\n @internal\n */\n getBookmark() { return new GapBookmark(this.anchor); }\n /**\n @internal\n */\n static valid($pos) {\n let parent = $pos.parent;\n if (parent.isTextblock || !closedBefore($pos) || !closedAfter($pos))\n return false;\n let override = parent.type.spec.allowGapCursor;\n if (override != null)\n return override;\n let deflt = parent.contentMatchAt($pos.index()).defaultType;\n return deflt && deflt.isTextblock;\n }\n /**\n @internal\n */\n static findGapCursorFrom($pos, dir, mustMove = false) {\n search: for (;;) {\n if (!mustMove && GapCursor.valid($pos))\n return $pos;\n let pos = $pos.pos, next = null;\n // Scan up from this position\n for (let d = $pos.depth;; d--) {\n let parent = $pos.node(d);\n if (dir > 0 ? $pos.indexAfter(d) < parent.childCount : $pos.index(d) > 0) {\n next = parent.child(dir > 0 ? $pos.indexAfter(d) : $pos.index(d) - 1);\n break;\n }\n else if (d == 0) {\n return null;\n }\n pos += dir;\n let $cur = $pos.doc.resolve(pos);\n if (GapCursor.valid($cur))\n return $cur;\n }\n // And then down into the next node\n for (;;) {\n let inside = dir > 0 ? next.firstChild : next.lastChild;\n if (!inside) {\n if (next.isAtom && !next.isText && !NodeSelection.isSelectable(next)) {\n $pos = $pos.doc.resolve(pos + next.nodeSize * dir);\n mustMove = false;\n continue search;\n }\n break;\n }\n next = inside;\n pos += dir;\n let $cur = $pos.doc.resolve(pos);\n if (GapCursor.valid($cur))\n return $cur;\n }\n return null;\n }\n }\n}\nGapCursor.prototype.visible = false;\nGapCursor.findFrom = GapCursor.findGapCursorFrom;\nSelection.jsonID(\"gapcursor\", GapCursor);\nclass GapBookmark {\n constructor(pos) {\n this.pos = pos;\n }\n map(mapping) {\n return new GapBookmark(mapping.map(this.pos));\n }\n resolve(doc) {\n let $pos = doc.resolve(this.pos);\n return GapCursor.valid($pos) ? new GapCursor($pos) : Selection.near($pos);\n }\n}\nfunction closedBefore($pos) {\n for (let d = $pos.depth; d >= 0; d--) {\n let index = $pos.index(d), parent = $pos.node(d);\n // At the start of this parent, look at next one\n if (index == 0) {\n if (parent.type.spec.isolating)\n return true;\n continue;\n }\n // See if the node before (or its first ancestor) is closed\n for (let before = parent.child(index - 1);; before = before.lastChild) {\n if ((before.childCount == 0 && !before.inlineContent) || before.isAtom || before.type.spec.isolating)\n return true;\n if (before.inlineContent)\n return false;\n }\n }\n // Hit start of document\n return true;\n}\nfunction closedAfter($pos) {\n for (let d = $pos.depth; d >= 0; d--) {\n let index = $pos.indexAfter(d), parent = $pos.node(d);\n if (index == parent.childCount) {\n if (parent.type.spec.isolating)\n return true;\n continue;\n }\n for (let after = parent.child(index);; after = after.firstChild) {\n if ((after.childCount == 0 && !after.inlineContent) || after.isAtom || after.type.spec.isolating)\n return true;\n if (after.inlineContent)\n return false;\n }\n }\n return true;\n}\n\n/**\nCreate a gap cursor plugin. When enabled, this will capture clicks\nnear and arrow-key-motion past places that don't have a normally\nselectable position nearby, and create a gap cursor selection for\nthem. The cursor is drawn as an element with class\n`ProseMirror-gapcursor`. You can either include\n`style/gapcursor.css` from the package's directory or add your own\nstyles to make it visible.\n*/\nfunction gapCursor() {\n return new Plugin({\n props: {\n decorations: drawGapCursor,\n createSelectionBetween(_view, $anchor, $head) {\n return $anchor.pos == $head.pos && GapCursor.valid($head) ? new GapCursor($head) : null;\n },\n handleClick,\n handleKeyDown,\n handleDOMEvents: { beforeinput: beforeinput }\n }\n });\n}\nconst handleKeyDown = keydownHandler({\n \"ArrowLeft\": arrow(\"horiz\", -1),\n \"ArrowRight\": arrow(\"horiz\", 1),\n \"ArrowUp\": arrow(\"vert\", -1),\n \"ArrowDown\": arrow(\"vert\", 1)\n});\nfunction arrow(axis, dir) {\n const dirStr = axis == \"vert\" ? (dir > 0 ? \"down\" : \"up\") : (dir > 0 ? \"right\" : \"left\");\n return function (state, dispatch, view) {\n let sel = state.selection;\n let $start = dir > 0 ? sel.$to : sel.$from, mustMove = sel.empty;\n if (sel instanceof TextSelection) {\n if (!view.endOfTextblock(dirStr) || $start.depth == 0)\n return false;\n mustMove = false;\n $start = state.doc.resolve(dir > 0 ? $start.after() : $start.before());\n }\n let $found = GapCursor.findGapCursorFrom($start, dir, mustMove);\n if (!$found)\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(new GapCursor($found)));\n return true;\n };\n}\nfunction handleClick(view, pos, event) {\n if (!view || !view.editable)\n return false;\n let $pos = view.state.doc.resolve(pos);\n if (!GapCursor.valid($pos))\n return false;\n let clickPos = view.posAtCoords({ left: event.clientX, top: event.clientY });\n if (clickPos && clickPos.inside > -1 && NodeSelection.isSelectable(view.state.doc.nodeAt(clickPos.inside)))\n return false;\n view.dispatch(view.state.tr.setSelection(new GapCursor($pos)));\n return true;\n}\n// This is a hack that, when a composition starts while a gap cursor\n// is active, quickly creates an inline context for the composition to\n// happen in, to avoid it being aborted by the DOM selection being\n// moved into a valid position.\nfunction beforeinput(view, event) {\n if (event.inputType != \"insertCompositionText\" || !(view.state.selection instanceof GapCursor))\n return false;\n let { $from } = view.state.selection;\n let insert = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text);\n if (!insert)\n return false;\n let frag = Fragment.empty;\n for (let i = insert.length - 1; i >= 0; i--)\n frag = Fragment.from(insert[i].createAndFill(null, frag));\n let tr = view.state.tr.replace($from.pos, $from.pos, new Slice(frag, 0, 0));\n tr.setSelection(TextSelection.near(tr.doc.resolve($from.pos + 1)));\n view.dispatch(tr);\n return false;\n}\nfunction drawGapCursor(state) {\n if (!(state.selection instanceof GapCursor))\n return null;\n let node = document.createElement(\"div\");\n node.className = \"ProseMirror-gapcursor\";\n return DecorationSet.create(state.doc, [Decoration.widget(state.selection.head, node, { key: \"gapcursor\" })]);\n}\n\nexport { GapCursor, gapCursor };\n","/*\r\n * cursor.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction, NodeSelection, Selection } from 'prosemirror-state';\r\nimport { GapCursor } from 'prosemirror-gapcursor';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nexport function codeViewArrowHandler(dir: 'up' | 'down' | 'left' | 'right', codeViewNodeTypes: string[]) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n if (state.selection.empty && !(state.selection instanceof GapCursor) && view && view.endOfTextblock(dir)) {\r\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\r\n const $head = state.selection.$head;\r\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\r\n if (nextPos.$head && codeViewNodeTypes.includes(nextPos.$head.parent.type.name)) {\r\n // check for e.g. math where you can advance across embedded newlines\r\n if ((dir === 'up' || dir === 'down') && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n dispatch(state.tr.setSelection(nextPos));\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n\r\n\r\nexport function verticalArrowCanAdvanceWithinTextBlock(selection: Selection, dir: 'up' | 'down') {\r\n const $head = selection.$head;\r\n const node = $head.node();\r\n if (node.isTextblock) {\r\n const cursorOffset = $head.parentOffset;\r\n const nodeText = node.textContent;\r\n if (dir === 'down' && nodeText.substr(cursorOffset).includes('\\n')) {\r\n return true;\r\n }\r\n if (dir === 'up' && nodeText.substr(0, cursorOffset).includes('\\n')) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function handleArrowToAdjacentNode(\r\n nodePos: number,\r\n dir: number,\r\n state: EditorState,\r\n dispatch?: (tr: Transaction) => void,\r\n): boolean {\r\n // resolve the node and position\r\n const node = state.doc.nodeAt(nodePos);\r\n if (!node) {\r\n return false;\r\n }\r\n const $pos = state.doc.resolve(nodePos);\r\n\r\n // helpers to figure out the nature of prev/next nodes\r\n const prevNodeSelectable = () => {\r\n return $pos.nodeBefore && $pos.nodeBefore.type.spec.selectable;\r\n };\r\n const nextNodeSelectable = () => {\r\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\r\n return nextNode?.type.spec.selectable;\r\n };\r\n const prevNodeTextBlock = () => {\r\n return $pos.nodeBefore && $pos.nodeBefore.isTextblock;\r\n };\r\n const nextNodeTextBlock = () => {\r\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\r\n return nextNode?.isTextblock;\r\n };\r\n const prevNodeCode = () => {\r\n return $pos.nodeBefore && !!$pos.nodeBefore.type.spec.code;\r\n };\r\n const nextNodeCode = () => {\r\n const nextNode = state.doc.nodeAt(nodePos + node.nodeSize);\r\n return !!nextNode?.type.spec.code;\r\n };\r\n\r\n // see if we can get a new selection\r\n const tr = state.tr;\r\n let selection: Selection | undefined;\r\n\r\n // if we are going backwards and there is no previous position, then return a gap cursor\r\n if (dir < 0 && !$pos.nodeBefore) {\r\n selection = new GapCursor(tr.doc.resolve(nodePos));\r\n\r\n // if we are going forwards and there is no next position, then return a gap cursor\r\n } else if (dir > 0 && !$pos.nodeAfter) {\r\n const cursorPos = nodePos + node.nodeSize;\r\n selection = new GapCursor(tr.doc.resolve(cursorPos));\r\n\r\n // if we are going backwards and the previous node can take node selections then select it\r\n } else if (dir < 0 && prevNodeSelectable()) {\r\n const prevNodePos = nodePos - $pos.nodeBefore!.nodeSize;\r\n selection = NodeSelection.create(tr.doc, prevNodePos);\r\n\r\n // if we are going forwards and the next node can take node selections then select it\r\n } else if (dir >= 0 && nextNodeSelectable()) {\r\n const nextNodePos = nodePos + node.nodeSize;\r\n selection = NodeSelection.create(tr.doc, nextNodePos);\r\n\r\n // if we are going backwards and the previous node is not a text block then create a gap cursor\r\n } else if (dir < 0 && (!prevNodeTextBlock() || prevNodeCode())) {\r\n selection = new GapCursor(tr.doc.resolve(nodePos));\r\n\r\n // if we are going forwards and the next node is not a text block then create a gap cursor\r\n } else if (dir >= 0 && (!nextNodeTextBlock() || nextNodeCode())) {\r\n const endPos = nodePos + node.nodeSize;\r\n selection = new GapCursor(tr.doc.resolve(endPos));\r\n\r\n // otherwise use text selection handling (handles forward/backward text selections)\r\n } else {\r\n const targetPos = nodePos + (dir < 0 ? 0 : node.nodeSize);\r\n const targetNode = tr.doc.nodeAt(targetPos);\r\n if (targetNode) {\r\n selection = Selection.near(tr.doc.resolve(targetPos), dir);\r\n }\r\n }\r\n\r\n if (selection) {\r\n if (dispatch) {\r\n tr.setSelection(selection);\r\n dispatch(tr);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n","/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nexport var DocumentUri;\n(function (DocumentUri) {\n function is(value) {\n return typeof value === 'string';\n }\n DocumentUri.is = is;\n})(DocumentUri || (DocumentUri = {}));\nexport var URI;\n(function (URI) {\n function is(value) {\n return typeof value === 'string';\n }\n URI.is = is;\n})(URI || (URI = {}));\nexport var integer;\n(function (integer) {\n integer.MIN_VALUE = -2147483648;\n integer.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;\n }\n integer.is = is;\n})(integer || (integer = {}));\nexport var uinteger;\n(function (uinteger) {\n uinteger.MIN_VALUE = 0;\n uinteger.MAX_VALUE = 2147483647;\n function is(value) {\n return typeof value === 'number' && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;\n }\n uinteger.is = is;\n})(uinteger || (uinteger = {}));\n/**\n * The Position namespace provides helper functions to work with\n * {@link Position} literals.\n */\nexport var Position;\n(function (Position) {\n /**\n * Creates a new Position literal from the given line and character.\n * @param line The position's line.\n * @param character The position's character.\n */\n function create(line, character) {\n if (line === Number.MAX_VALUE) {\n line = uinteger.MAX_VALUE;\n }\n if (character === Number.MAX_VALUE) {\n character = uinteger.MAX_VALUE;\n }\n return { line: line, character: character };\n }\n Position.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Position} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);\n }\n Position.is = is;\n})(Position || (Position = {}));\n/**\n * The Range namespace provides helper functions to work with\n * {@link Range} literals.\n */\nexport var Range;\n(function (Range) {\n function create(one, two, three, four) {\n if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {\n return { start: Position.create(one, two), end: Position.create(three, four) };\n }\n else if (Position.is(one) && Position.is(two)) {\n return { start: one, end: two };\n }\n else {\n throw new Error(\"Range#create called with invalid arguments[\".concat(one, \", \").concat(two, \", \").concat(three, \", \").concat(four, \"]\"));\n }\n }\n Range.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Range} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\n }\n Range.is = is;\n})(Range || (Range = {}));\n/**\n * The Location namespace provides helper functions to work with\n * {@link Location} literals.\n */\nexport var Location;\n(function (Location) {\n /**\n * Creates a Location literal.\n * @param uri The location's uri.\n * @param range The location's range.\n */\n function create(uri, range) {\n return { uri: uri, range: range };\n }\n Location.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Location} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\n }\n Location.is = is;\n})(Location || (Location = {}));\n/**\n * The LocationLink namespace provides helper functions to work with\n * {@link LocationLink} literals.\n */\nexport var LocationLink;\n(function (LocationLink) {\n /**\n * Creates a LocationLink literal.\n * @param targetUri The definition's uri.\n * @param targetRange The full range of the definition.\n * @param targetSelectionRange The span of the symbol definition at the target.\n * @param originSelectionRange The span of the symbol being defined in the originating source file.\n */\n function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\n return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };\n }\n LocationLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link LocationLink} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\n && Range.is(candidate.targetSelectionRange)\n && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\n }\n LocationLink.is = is;\n})(LocationLink || (LocationLink = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link Color} literals.\n */\nexport var Color;\n(function (Color) {\n /**\n * Creates a new Color literal.\n */\n function create(red, green, blue, alpha) {\n return {\n red: red,\n green: green,\n blue: blue,\n alpha: alpha,\n };\n }\n Color.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Color} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1)\n && Is.numberRange(candidate.green, 0, 1)\n && Is.numberRange(candidate.blue, 0, 1)\n && Is.numberRange(candidate.alpha, 0, 1);\n }\n Color.is = is;\n})(Color || (Color = {}));\n/**\n * The ColorInformation namespace provides helper functions to work with\n * {@link ColorInformation} literals.\n */\nexport var ColorInformation;\n(function (ColorInformation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(range, color) {\n return {\n range: range,\n color: color,\n };\n }\n ColorInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);\n }\n ColorInformation.is = is;\n})(ColorInformation || (ColorInformation = {}));\n/**\n * The Color namespace provides helper functions to work with\n * {@link ColorPresentation} literals.\n */\nexport var ColorPresentation;\n(function (ColorPresentation) {\n /**\n * Creates a new ColorInformation literal.\n */\n function create(label, textEdit, additionalTextEdits) {\n return {\n label: label,\n textEdit: textEdit,\n additionalTextEdits: additionalTextEdits,\n };\n }\n ColorPresentation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ColorInformation} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label)\n && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\n && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\n }\n ColorPresentation.is = is;\n})(ColorPresentation || (ColorPresentation = {}));\n/**\n * A set of predefined range kinds.\n */\nexport var FoldingRangeKind;\n(function (FoldingRangeKind) {\n /**\n * Folding range for a comment\n */\n FoldingRangeKind.Comment = 'comment';\n /**\n * Folding range for an import or include\n */\n FoldingRangeKind.Imports = 'imports';\n /**\n * Folding range for a region (e.g. `#region`)\n */\n FoldingRangeKind.Region = 'region';\n})(FoldingRangeKind || (FoldingRangeKind = {}));\n/**\n * The folding range namespace provides helper functions to work with\n * {@link FoldingRange} literals.\n */\nexport var FoldingRange;\n(function (FoldingRange) {\n /**\n * Creates a new FoldingRange literal.\n */\n function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {\n var result = {\n startLine: startLine,\n endLine: endLine\n };\n if (Is.defined(startCharacter)) {\n result.startCharacter = startCharacter;\n }\n if (Is.defined(endCharacter)) {\n result.endCharacter = endCharacter;\n }\n if (Is.defined(kind)) {\n result.kind = kind;\n }\n if (Is.defined(collapsedText)) {\n result.collapsedText = collapsedText;\n }\n return result;\n }\n FoldingRange.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FoldingRange} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)\n && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))\n && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))\n && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\n }\n FoldingRange.is = is;\n})(FoldingRange || (FoldingRange = {}));\n/**\n * The DiagnosticRelatedInformation namespace provides helper functions to work with\n * {@link DiagnosticRelatedInformation} literals.\n */\nexport var DiagnosticRelatedInformation;\n(function (DiagnosticRelatedInformation) {\n /**\n * Creates a new DiagnosticRelatedInformation literal.\n */\n function create(location, message) {\n return {\n location: location,\n message: message\n };\n }\n DiagnosticRelatedInformation.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\n }\n DiagnosticRelatedInformation.is = is;\n})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\n/**\n * The diagnostic's severity.\n */\nexport var DiagnosticSeverity;\n(function (DiagnosticSeverity) {\n /**\n * Reports an error.\n */\n DiagnosticSeverity.Error = 1;\n /**\n * Reports a warning.\n */\n DiagnosticSeverity.Warning = 2;\n /**\n * Reports an information.\n */\n DiagnosticSeverity.Information = 3;\n /**\n * Reports a hint.\n */\n DiagnosticSeverity.Hint = 4;\n})(DiagnosticSeverity || (DiagnosticSeverity = {}));\n/**\n * The diagnostic tags.\n *\n * @since 3.15.0\n */\nexport var DiagnosticTag;\n(function (DiagnosticTag) {\n /**\n * Unused or unnecessary code.\n *\n * Clients are allowed to render diagnostics with this tag faded out instead of having\n * an error squiggle.\n */\n DiagnosticTag.Unnecessary = 1;\n /**\n * Deprecated or obsolete code.\n *\n * Clients are allowed to rendered diagnostics with this tag strike through.\n */\n DiagnosticTag.Deprecated = 2;\n})(DiagnosticTag || (DiagnosticTag = {}));\n/**\n * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.\n *\n * @since 3.16.0\n */\nexport var CodeDescription;\n(function (CodeDescription) {\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.href);\n }\n CodeDescription.is = is;\n})(CodeDescription || (CodeDescription = {}));\n/**\n * The Diagnostic namespace provides helper functions to work with\n * {@link Diagnostic} literals.\n */\nexport var Diagnostic;\n(function (Diagnostic) {\n /**\n * Creates a new Diagnostic literal.\n */\n function create(range, message, severity, code, source, relatedInformation) {\n var result = { range: range, message: message };\n if (Is.defined(severity)) {\n result.severity = severity;\n }\n if (Is.defined(code)) {\n result.code = code;\n }\n if (Is.defined(source)) {\n result.source = source;\n }\n if (Is.defined(relatedInformation)) {\n result.relatedInformation = relatedInformation;\n }\n return result;\n }\n Diagnostic.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Diagnostic} interface.\n */\n function is(value) {\n var _a;\n var candidate = value;\n return Is.defined(candidate)\n && Range.is(candidate.range)\n && Is.string(candidate.message)\n && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\n && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\n && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))\n && (Is.string(candidate.source) || Is.undefined(candidate.source))\n && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\n }\n Diagnostic.is = is;\n})(Diagnostic || (Diagnostic = {}));\n/**\n * The Command namespace provides helper functions to work with\n * {@link Command} literals.\n */\nexport var Command;\n(function (Command) {\n /**\n * Creates a new Command literal.\n */\n function create(title, command) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n var result = { title: title, command: command };\n if (Is.defined(args) && args.length > 0) {\n result.arguments = args;\n }\n return result;\n }\n Command.create = create;\n /**\n * Checks whether the given literal conforms to the {@link Command} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\n }\n Command.is = is;\n})(Command || (Command = {}));\n/**\n * The TextEdit namespace provides helper function to create replace,\n * insert and delete edits more easily.\n */\nexport var TextEdit;\n(function (TextEdit) {\n /**\n * Creates a replace text edit.\n * @param range The range of text to be replaced.\n * @param newText The new text.\n */\n function replace(range, newText) {\n return { range: range, newText: newText };\n }\n TextEdit.replace = replace;\n /**\n * Creates an insert text edit.\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n */\n function insert(position, newText) {\n return { range: { start: position, end: position }, newText: newText };\n }\n TextEdit.insert = insert;\n /**\n * Creates a delete text edit.\n * @param range The range of text to be deleted.\n */\n function del(range) {\n return { range: range, newText: '' };\n }\n TextEdit.del = del;\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate)\n && Is.string(candidate.newText)\n && Range.is(candidate.range);\n }\n TextEdit.is = is;\n})(TextEdit || (TextEdit = {}));\nexport var ChangeAnnotation;\n(function (ChangeAnnotation) {\n function create(label, needsConfirmation, description) {\n var result = { label: label };\n if (needsConfirmation !== undefined) {\n result.needsConfirmation = needsConfirmation;\n }\n if (description !== undefined) {\n result.description = description;\n }\n return result;\n }\n ChangeAnnotation.create = create;\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Is.string(candidate.label) &&\n (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n ChangeAnnotation.is = is;\n})(ChangeAnnotation || (ChangeAnnotation = {}));\nexport var ChangeAnnotationIdentifier;\n(function (ChangeAnnotationIdentifier) {\n function is(value) {\n var candidate = value;\n return Is.string(candidate);\n }\n ChangeAnnotationIdentifier.is = is;\n})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));\nexport var AnnotatedTextEdit;\n(function (AnnotatedTextEdit) {\n /**\n * Creates an annotated replace text edit.\n *\n * @param range The range of text to be replaced.\n * @param newText The new text.\n * @param annotation The annotation.\n */\n function replace(range, newText, annotation) {\n return { range: range, newText: newText, annotationId: annotation };\n }\n AnnotatedTextEdit.replace = replace;\n /**\n * Creates an annotated insert text edit.\n *\n * @param position The position to insert the text at.\n * @param newText The text to be inserted.\n * @param annotation The annotation.\n */\n function insert(position, newText, annotation) {\n return { range: { start: position, end: position }, newText: newText, annotationId: annotation };\n }\n AnnotatedTextEdit.insert = insert;\n /**\n * Creates an annotated delete text edit.\n *\n * @param range The range of text to be deleted.\n * @param annotation The annotation.\n */\n function del(range, annotation) {\n return { range: range, newText: '', annotationId: annotation };\n }\n AnnotatedTextEdit.del = del;\n function is(value) {\n var candidate = value;\n return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n AnnotatedTextEdit.is = is;\n})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));\n/**\n * The TextDocumentEdit namespace provides helper function to create\n * an edit that manipulates a text document.\n */\nexport var TextDocumentEdit;\n(function (TextDocumentEdit) {\n /**\n * Creates a new `TextDocumentEdit`\n */\n function create(textDocument, edits) {\n return { textDocument: textDocument, edits: edits };\n }\n TextDocumentEdit.create = create;\n function is(value) {\n var candidate = value;\n return Is.defined(candidate)\n && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)\n && Array.isArray(candidate.edits);\n }\n TextDocumentEdit.is = is;\n})(TextDocumentEdit || (TextDocumentEdit = {}));\nexport var CreateFile;\n(function (CreateFile) {\n function create(uri, options, annotation) {\n var result = {\n kind: 'create',\n uri: uri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n CreateFile.create = create;\n function is(value) {\n var candidate = value;\n return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n CreateFile.is = is;\n})(CreateFile || (CreateFile = {}));\nexport var RenameFile;\n(function (RenameFile) {\n function create(oldUri, newUri, options, annotation) {\n var result = {\n kind: 'rename',\n oldUri: oldUri,\n newUri: newUri\n };\n if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n RenameFile.create = create;\n function is(value) {\n var candidate = value;\n return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||\n ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n RenameFile.is = is;\n})(RenameFile || (RenameFile = {}));\nexport var DeleteFile;\n(function (DeleteFile) {\n function create(uri, options, annotation) {\n var result = {\n kind: 'delete',\n uri: uri\n };\n if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {\n result.options = options;\n }\n if (annotation !== undefined) {\n result.annotationId = annotation;\n }\n return result;\n }\n DeleteFile.create = create;\n function is(value) {\n var candidate = value;\n return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||\n ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));\n }\n DeleteFile.is = is;\n})(DeleteFile || (DeleteFile = {}));\nexport var WorkspaceEdit;\n(function (WorkspaceEdit) {\n function is(value) {\n var candidate = value;\n return candidate &&\n (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&\n (candidate.documentChanges === undefined || candidate.documentChanges.every(function (change) {\n if (Is.string(change.kind)) {\n return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\n }\n else {\n return TextDocumentEdit.is(change);\n }\n }));\n }\n WorkspaceEdit.is = is;\n})(WorkspaceEdit || (WorkspaceEdit = {}));\nvar TextEditChangeImpl = /** @class */ (function () {\n function TextEditChangeImpl(edits, changeAnnotations) {\n this.edits = edits;\n this.changeAnnotations = changeAnnotations;\n }\n TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {\n var edit;\n var id;\n if (annotation === undefined) {\n edit = TextEdit.insert(position, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.insert(position, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.insert(position, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n };\n TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {\n var edit;\n var id;\n if (annotation === undefined) {\n edit = TextEdit.replace(range, newText);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.replace(range, newText, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.replace(range, newText, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n };\n TextEditChangeImpl.prototype.delete = function (range, annotation) {\n var edit;\n var id;\n if (annotation === undefined) {\n edit = TextEdit.del(range);\n }\n else if (ChangeAnnotationIdentifier.is(annotation)) {\n id = annotation;\n edit = AnnotatedTextEdit.del(range, annotation);\n }\n else {\n this.assertChangeAnnotations(this.changeAnnotations);\n id = this.changeAnnotations.manage(annotation);\n edit = AnnotatedTextEdit.del(range, id);\n }\n this.edits.push(edit);\n if (id !== undefined) {\n return id;\n }\n };\n TextEditChangeImpl.prototype.add = function (edit) {\n this.edits.push(edit);\n };\n TextEditChangeImpl.prototype.all = function () {\n return this.edits;\n };\n TextEditChangeImpl.prototype.clear = function () {\n this.edits.splice(0, this.edits.length);\n };\n TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {\n if (value === undefined) {\n throw new Error(\"Text edit change is not configured to manage change annotations.\");\n }\n };\n return TextEditChangeImpl;\n}());\n/**\n * A helper class\n */\nvar ChangeAnnotations = /** @class */ (function () {\n function ChangeAnnotations(annotations) {\n this._annotations = annotations === undefined ? Object.create(null) : annotations;\n this._counter = 0;\n this._size = 0;\n }\n ChangeAnnotations.prototype.all = function () {\n return this._annotations;\n };\n Object.defineProperty(ChangeAnnotations.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: false,\n configurable: true\n });\n ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {\n var id;\n if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {\n id = idOrAnnotation;\n }\n else {\n id = this.nextId();\n annotation = idOrAnnotation;\n }\n if (this._annotations[id] !== undefined) {\n throw new Error(\"Id \".concat(id, \" is already in use.\"));\n }\n if (annotation === undefined) {\n throw new Error(\"No annotation provided for id \".concat(id));\n }\n this._annotations[id] = annotation;\n this._size++;\n return id;\n };\n ChangeAnnotations.prototype.nextId = function () {\n this._counter++;\n return this._counter.toString();\n };\n return ChangeAnnotations;\n}());\n/**\n * A workspace change helps constructing changes to a workspace.\n */\nvar WorkspaceChange = /** @class */ (function () {\n function WorkspaceChange(workspaceEdit) {\n var _this = this;\n this._textEditChanges = Object.create(null);\n if (workspaceEdit !== undefined) {\n this._workspaceEdit = workspaceEdit;\n if (workspaceEdit.documentChanges) {\n this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);\n workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n workspaceEdit.documentChanges.forEach(function (change) {\n if (TextDocumentEdit.is(change)) {\n var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);\n _this._textEditChanges[change.textDocument.uri] = textEditChange;\n }\n });\n }\n else if (workspaceEdit.changes) {\n Object.keys(workspaceEdit.changes).forEach(function (key) {\n var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\n _this._textEditChanges[key] = textEditChange;\n });\n }\n }\n else {\n this._workspaceEdit = {};\n }\n }\n Object.defineProperty(WorkspaceChange.prototype, \"edit\", {\n /**\n * Returns the underlying {@link WorkspaceEdit} literal\n * use to be returned from a workspace edit operation like rename.\n */\n get: function () {\n this.initDocumentChanges();\n if (this._changeAnnotations !== undefined) {\n if (this._changeAnnotations.size === 0) {\n this._workspaceEdit.changeAnnotations = undefined;\n }\n else {\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n }\n return this._workspaceEdit;\n },\n enumerable: false,\n configurable: true\n });\n WorkspaceChange.prototype.getTextEditChange = function (key) {\n if (OptionalVersionedTextDocumentIdentifier.is(key)) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var textDocument = { uri: key.uri, version: key.version };\n var result = this._textEditChanges[textDocument.uri];\n if (!result) {\n var edits = [];\n var textDocumentEdit = {\n textDocument: textDocument,\n edits: edits\n };\n this._workspaceEdit.documentChanges.push(textDocumentEdit);\n result = new TextEditChangeImpl(edits, this._changeAnnotations);\n this._textEditChanges[textDocument.uri] = result;\n }\n return result;\n }\n else {\n this.initChanges();\n if (this._workspaceEdit.changes === undefined) {\n throw new Error('Workspace edit is not configured for normal text edit changes.');\n }\n var result = this._textEditChanges[key];\n if (!result) {\n var edits = [];\n this._workspaceEdit.changes[key] = edits;\n result = new TextEditChangeImpl(edits);\n this._textEditChanges[key] = result;\n }\n return result;\n }\n };\n WorkspaceChange.prototype.initDocumentChanges = function () {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._changeAnnotations = new ChangeAnnotations();\n this._workspaceEdit.documentChanges = [];\n this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();\n }\n };\n WorkspaceChange.prototype.initChanges = function () {\n if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {\n this._workspaceEdit.changes = Object.create(null);\n }\n };\n WorkspaceChange.prototype.createFile = function (uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n var operation;\n var id;\n if (annotation === undefined) {\n operation = CreateFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = CreateFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n };\n WorkspaceChange.prototype.renameFile = function (oldUri, newUri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n var operation;\n var id;\n if (annotation === undefined) {\n operation = RenameFile.create(oldUri, newUri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = RenameFile.create(oldUri, newUri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n };\n WorkspaceChange.prototype.deleteFile = function (uri, optionsOrAnnotation, options) {\n this.initDocumentChanges();\n if (this._workspaceEdit.documentChanges === undefined) {\n throw new Error('Workspace edit is not configured for document changes.');\n }\n var annotation;\n if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {\n annotation = optionsOrAnnotation;\n }\n else {\n options = optionsOrAnnotation;\n }\n var operation;\n var id;\n if (annotation === undefined) {\n operation = DeleteFile.create(uri, options);\n }\n else {\n id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);\n operation = DeleteFile.create(uri, options, id);\n }\n this._workspaceEdit.documentChanges.push(operation);\n if (id !== undefined) {\n return id;\n }\n };\n return WorkspaceChange;\n}());\nexport { WorkspaceChange };\n/**\n * The TextDocumentIdentifier namespace provides helper functions to work with\n * {@link TextDocumentIdentifier} literals.\n */\nexport var TextDocumentIdentifier;\n(function (TextDocumentIdentifier) {\n /**\n * Creates a new TextDocumentIdentifier literal.\n * @param uri The document's uri.\n */\n function create(uri) {\n return { uri: uri };\n }\n TextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri);\n }\n TextDocumentIdentifier.is = is;\n})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\n/**\n * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link VersionedTextDocumentIdentifier} literals.\n */\nexport var VersionedTextDocumentIdentifier;\n(function (VersionedTextDocumentIdentifier) {\n /**\n * Creates a new VersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri: uri, version: version };\n }\n VersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);\n }\n VersionedTextDocumentIdentifier.is = is;\n})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\n/**\n * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with\n * {@link OptionalVersionedTextDocumentIdentifier} literals.\n */\nexport var OptionalVersionedTextDocumentIdentifier;\n(function (OptionalVersionedTextDocumentIdentifier) {\n /**\n * Creates a new OptionalVersionedTextDocumentIdentifier literal.\n * @param uri The document's uri.\n * @param version The document's version.\n */\n function create(uri, version) {\n return { uri: uri, version: version };\n }\n OptionalVersionedTextDocumentIdentifier.create = create;\n /**\n * Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));\n }\n OptionalVersionedTextDocumentIdentifier.is = is;\n})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));\n/**\n * The TextDocumentItem namespace provides helper functions to work with\n * {@link TextDocumentItem} literals.\n */\nexport var TextDocumentItem;\n(function (TextDocumentItem) {\n /**\n * Creates a new TextDocumentItem literal.\n * @param uri The document's uri.\n * @param languageId The document's language identifier.\n * @param version The document's version number.\n * @param text The document's text.\n */\n function create(uri, languageId, version, text) {\n return { uri: uri, languageId: languageId, version: version, text: text };\n }\n TextDocumentItem.create = create;\n /**\n * Checks whether the given literal conforms to the {@link TextDocumentItem} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);\n }\n TextDocumentItem.is = is;\n})(TextDocumentItem || (TextDocumentItem = {}));\n/**\n * Describes the content type that a client supports in various\n * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\n *\n * Please note that `MarkupKinds` must not start with a `$`. This kinds\n * are reserved for internal usage.\n */\nexport var MarkupKind;\n(function (MarkupKind) {\n /**\n * Plain text is supported as a content format\n */\n MarkupKind.PlainText = 'plaintext';\n /**\n * Markdown is supported as a content format\n */\n MarkupKind.Markdown = 'markdown';\n /**\n * Checks whether the given value is a value of the {@link MarkupKind} type.\n */\n function is(value) {\n var candidate = value;\n return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\n }\n MarkupKind.is = is;\n})(MarkupKind || (MarkupKind = {}));\nexport var MarkupContent;\n(function (MarkupContent) {\n /**\n * Checks whether the given value conforms to the {@link MarkupContent} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\n }\n MarkupContent.is = is;\n})(MarkupContent || (MarkupContent = {}));\n/**\n * The kind of a completion entry.\n */\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind.Text = 1;\n CompletionItemKind.Method = 2;\n CompletionItemKind.Function = 3;\n CompletionItemKind.Constructor = 4;\n CompletionItemKind.Field = 5;\n CompletionItemKind.Variable = 6;\n CompletionItemKind.Class = 7;\n CompletionItemKind.Interface = 8;\n CompletionItemKind.Module = 9;\n CompletionItemKind.Property = 10;\n CompletionItemKind.Unit = 11;\n CompletionItemKind.Value = 12;\n CompletionItemKind.Enum = 13;\n CompletionItemKind.Keyword = 14;\n CompletionItemKind.Snippet = 15;\n CompletionItemKind.Color = 16;\n CompletionItemKind.File = 17;\n CompletionItemKind.Reference = 18;\n CompletionItemKind.Folder = 19;\n CompletionItemKind.EnumMember = 20;\n CompletionItemKind.Constant = 21;\n CompletionItemKind.Struct = 22;\n CompletionItemKind.Event = 23;\n CompletionItemKind.Operator = 24;\n CompletionItemKind.TypeParameter = 25;\n})(CompletionItemKind || (CompletionItemKind = {}));\n/**\n * Defines whether the insert text in a completion item should be interpreted as\n * plain text or a snippet.\n */\nexport var InsertTextFormat;\n(function (InsertTextFormat) {\n /**\n * The primary text to be inserted is treated as a plain string.\n */\n InsertTextFormat.PlainText = 1;\n /**\n * The primary text to be inserted is treated as a snippet.\n *\n * A snippet can define tab stops and placeholders with `$1`, `$2`\n * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\n * the end of the snippet. Placeholders with equal identifiers are linked,\n * that is typing in one will update others too.\n *\n * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax\n */\n InsertTextFormat.Snippet = 2;\n})(InsertTextFormat || (InsertTextFormat = {}));\n/**\n * Completion item tags are extra annotations that tweak the rendering of a completion\n * item.\n *\n * @since 3.15.0\n */\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n /**\n * Render a completion as obsolete, usually using a strike-out.\n */\n CompletionItemTag.Deprecated = 1;\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.\n *\n * @since 3.16.0\n */\nexport var InsertReplaceEdit;\n(function (InsertReplaceEdit) {\n /**\n * Creates a new insert / replace edit\n */\n function create(newText, insert, replace) {\n return { newText: newText, insert: insert, replace: replace };\n }\n InsertReplaceEdit.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.\n */\n function is(value) {\n var candidate = value;\n return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);\n }\n InsertReplaceEdit.is = is;\n})(InsertReplaceEdit || (InsertReplaceEdit = {}));\n/**\n * How whitespace and indentation is handled during completion\n * item insertion.\n *\n * @since 3.16.0\n */\nexport var InsertTextMode;\n(function (InsertTextMode) {\n /**\n * The insertion or replace strings is taken as it is. If the\n * value is multi line the lines below the cursor will be\n * inserted using the indentation defined in the string value.\n * The client will not apply any kind of adjustments to the\n * string.\n */\n InsertTextMode.asIs = 1;\n /**\n * The editor adjusts leading whitespace of new lines so that\n * they match the indentation up to the cursor of the line for\n * which the item is accepted.\n *\n * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a\n * multi line completion item is indented using 2 tabs and all\n * following lines inserted will be indented using 2 tabs as well.\n */\n InsertTextMode.adjustIndentation = 2;\n})(InsertTextMode || (InsertTextMode = {}));\nexport var CompletionItemLabelDetails;\n(function (CompletionItemLabelDetails) {\n function is(value) {\n var candidate = value;\n return candidate && (Is.string(candidate.detail) || candidate.detail === undefined) &&\n (Is.string(candidate.description) || candidate.description === undefined);\n }\n CompletionItemLabelDetails.is = is;\n})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));\n/**\n * The CompletionItem namespace provides functions to deal with\n * completion items.\n */\nexport var CompletionItem;\n(function (CompletionItem) {\n /**\n * Create a completion item and seed it with a label.\n * @param label The completion item's label\n */\n function create(label) {\n return { label: label };\n }\n CompletionItem.create = create;\n})(CompletionItem || (CompletionItem = {}));\n/**\n * The CompletionList namespace provides functions to deal with\n * completion lists.\n */\nexport var CompletionList;\n(function (CompletionList) {\n /**\n * Creates a new completion list.\n *\n * @param items The completion items.\n * @param isIncomplete The list is not complete.\n */\n function create(items, isIncomplete) {\n return { items: items ? items : [], isIncomplete: !!isIncomplete };\n }\n CompletionList.create = create;\n})(CompletionList || (CompletionList = {}));\nexport var MarkedString;\n(function (MarkedString) {\n /**\n * Creates a marked string from plain text.\n *\n * @param plainText The plain text.\n */\n function fromPlainText(plainText) {\n return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n }\n MarkedString.fromPlainText = fromPlainText;\n /**\n * Checks whether the given value conforms to the {@link MarkedString} type.\n */\n function is(value) {\n var candidate = value;\n return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\n }\n MarkedString.is = is;\n})(MarkedString || (MarkedString = {}));\nexport var Hover;\n(function (Hover) {\n /**\n * Checks whether the given value conforms to the {@link Hover} interface.\n */\n function is(value) {\n var candidate = value;\n return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\n MarkedString.is(candidate.contents) ||\n Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));\n }\n Hover.is = is;\n})(Hover || (Hover = {}));\n/**\n * The ParameterInformation namespace provides helper functions to work with\n * {@link ParameterInformation} literals.\n */\nexport var ParameterInformation;\n(function (ParameterInformation) {\n /**\n * Creates a new parameter information literal.\n *\n * @param label A label string.\n * @param documentation A doc string.\n */\n function create(label, documentation) {\n return documentation ? { label: label, documentation: documentation } : { label: label };\n }\n ParameterInformation.create = create;\n})(ParameterInformation || (ParameterInformation = {}));\n/**\n * The SignatureInformation namespace provides helper functions to work with\n * {@link SignatureInformation} literals.\n */\nexport var SignatureInformation;\n(function (SignatureInformation) {\n function create(label, documentation) {\n var parameters = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n parameters[_i - 2] = arguments[_i];\n }\n var result = { label: label };\n if (Is.defined(documentation)) {\n result.documentation = documentation;\n }\n if (Is.defined(parameters)) {\n result.parameters = parameters;\n }\n else {\n result.parameters = [];\n }\n return result;\n }\n SignatureInformation.create = create;\n})(SignatureInformation || (SignatureInformation = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind.Text = 1;\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind.Read = 2;\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind.Write = 3;\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * DocumentHighlight namespace to provide helper functions to work with\n * {@link DocumentHighlight} literals.\n */\nexport var DocumentHighlight;\n(function (DocumentHighlight) {\n /**\n * Create a DocumentHighlight object.\n * @param range The range the highlight applies to.\n * @param kind The highlight kind\n */\n function create(range, kind) {\n var result = { range: range };\n if (Is.number(kind)) {\n result.kind = kind;\n }\n return result;\n }\n DocumentHighlight.create = create;\n})(DocumentHighlight || (DocumentHighlight = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind.File = 1;\n SymbolKind.Module = 2;\n SymbolKind.Namespace = 3;\n SymbolKind.Package = 4;\n SymbolKind.Class = 5;\n SymbolKind.Method = 6;\n SymbolKind.Property = 7;\n SymbolKind.Field = 8;\n SymbolKind.Constructor = 9;\n SymbolKind.Enum = 10;\n SymbolKind.Interface = 11;\n SymbolKind.Function = 12;\n SymbolKind.Variable = 13;\n SymbolKind.Constant = 14;\n SymbolKind.String = 15;\n SymbolKind.Number = 16;\n SymbolKind.Boolean = 17;\n SymbolKind.Array = 18;\n SymbolKind.Object = 19;\n SymbolKind.Key = 20;\n SymbolKind.Null = 21;\n SymbolKind.EnumMember = 22;\n SymbolKind.Struct = 23;\n SymbolKind.Event = 24;\n SymbolKind.Operator = 25;\n SymbolKind.TypeParameter = 26;\n})(SymbolKind || (SymbolKind = {}));\n/**\n * Symbol tags are extra annotations that tweak the rendering of a symbol.\n *\n * @since 3.16\n */\nexport var SymbolTag;\n(function (SymbolTag) {\n /**\n * Render a symbol as obsolete, usually using a strike-out.\n */\n SymbolTag.Deprecated = 1;\n})(SymbolTag || (SymbolTag = {}));\nexport var SymbolInformation;\n(function (SymbolInformation) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the location of the symbol.\n * @param uri The resource of the location of symbol.\n * @param containerName The name of the symbol containing the symbol.\n */\n function create(name, kind, range, uri, containerName) {\n var result = {\n name: name,\n kind: kind,\n location: { uri: uri, range: range }\n };\n if (containerName) {\n result.containerName = containerName;\n }\n return result;\n }\n SymbolInformation.create = create;\n})(SymbolInformation || (SymbolInformation = {}));\nexport var WorkspaceSymbol;\n(function (WorkspaceSymbol) {\n /**\n * Create a new workspace symbol.\n *\n * @param name The name of the symbol.\n * @param kind The kind of the symbol.\n * @param uri The resource of the location of the symbol.\n * @param range An options range of the location.\n * @returns A WorkspaceSymbol.\n */\n function create(name, kind, uri, range) {\n return range !== undefined\n ? { name: name, kind: kind, location: { uri: uri, range: range } }\n : { name: name, kind: kind, location: { uri: uri } };\n }\n WorkspaceSymbol.create = create;\n})(WorkspaceSymbol || (WorkspaceSymbol = {}));\nexport var DocumentSymbol;\n(function (DocumentSymbol) {\n /**\n * Creates a new symbol information literal.\n *\n * @param name The name of the symbol.\n * @param detail The detail of the symbol.\n * @param kind The kind of the symbol.\n * @param range The range of the symbol.\n * @param selectionRange The selectionRange of the symbol.\n * @param children Children of the symbol.\n */\n function create(name, detail, kind, range, selectionRange, children) {\n var result = {\n name: name,\n detail: detail,\n kind: kind,\n range: range,\n selectionRange: selectionRange\n };\n if (children !== undefined) {\n result.children = children;\n }\n return result;\n }\n DocumentSymbol.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentSymbol} interface.\n */\n function is(value) {\n var candidate = value;\n return candidate &&\n Is.string(candidate.name) && Is.number(candidate.kind) &&\n Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\n (candidate.detail === undefined || Is.string(candidate.detail)) &&\n (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&\n (candidate.children === undefined || Array.isArray(candidate.children)) &&\n (candidate.tags === undefined || Array.isArray(candidate.tags));\n }\n DocumentSymbol.is = is;\n})(DocumentSymbol || (DocumentSymbol = {}));\n/**\n * A set of predefined code action kinds\n */\nexport var CodeActionKind;\n(function (CodeActionKind) {\n /**\n * Empty kind.\n */\n CodeActionKind.Empty = '';\n /**\n * Base kind for quickfix actions: 'quickfix'\n */\n CodeActionKind.QuickFix = 'quickfix';\n /**\n * Base kind for refactoring actions: 'refactor'\n */\n CodeActionKind.Refactor = 'refactor';\n /**\n * Base kind for refactoring extraction actions: 'refactor.extract'\n *\n * Example extract actions:\n *\n * - Extract method\n * - Extract function\n * - Extract variable\n * - Extract interface from class\n * - ...\n */\n CodeActionKind.RefactorExtract = 'refactor.extract';\n /**\n * Base kind for refactoring inline actions: 'refactor.inline'\n *\n * Example inline actions:\n *\n * - Inline function\n * - Inline variable\n * - Inline constant\n * - ...\n */\n CodeActionKind.RefactorInline = 'refactor.inline';\n /**\n * Base kind for refactoring rewrite actions: 'refactor.rewrite'\n *\n * Example rewrite actions:\n *\n * - Convert JavaScript function to class\n * - Add or remove parameter\n * - Encapsulate field\n * - Make method static\n * - Move method to base class\n * - ...\n */\n CodeActionKind.RefactorRewrite = 'refactor.rewrite';\n /**\n * Base kind for source actions: `source`\n *\n * Source code actions apply to the entire file.\n */\n CodeActionKind.Source = 'source';\n /**\n * Base kind for an organize imports source action: `source.organizeImports`\n */\n CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\n /**\n * Base kind for auto-fix source actions: `source.fixAll`.\n *\n * Fix all actions automatically fix errors that have a clear fix that do not require user input.\n * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\n *\n * @since 3.15.0\n */\n CodeActionKind.SourceFixAll = 'source.fixAll';\n})(CodeActionKind || (CodeActionKind = {}));\n/**\n * The reason why code actions were requested.\n *\n * @since 3.17.0\n */\nexport var CodeActionTriggerKind;\n(function (CodeActionTriggerKind) {\n /**\n * Code actions were explicitly requested by the user or by an extension.\n */\n CodeActionTriggerKind.Invoked = 1;\n /**\n * Code actions were requested automatically.\n *\n * This typically happens when current selection in a file changes, but can\n * also be triggered when file content changes.\n */\n CodeActionTriggerKind.Automatic = 2;\n})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));\n/**\n * The CodeActionContext namespace provides helper functions to work with\n * {@link CodeActionContext} literals.\n */\nexport var CodeActionContext;\n(function (CodeActionContext) {\n /**\n * Creates a new CodeActionContext literal.\n */\n function create(diagnostics, only, triggerKind) {\n var result = { diagnostics: diagnostics };\n if (only !== undefined && only !== null) {\n result.only = only;\n }\n if (triggerKind !== undefined && triggerKind !== null) {\n result.triggerKind = triggerKind;\n }\n return result;\n }\n CodeActionContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeActionContext} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is)\n && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string))\n && (candidate.triggerKind === undefined || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);\n }\n CodeActionContext.is = is;\n})(CodeActionContext || (CodeActionContext = {}));\nexport var CodeAction;\n(function (CodeAction) {\n function create(title, kindOrCommandOrEdit, kind) {\n var result = { title: title };\n var checkKind = true;\n if (typeof kindOrCommandOrEdit === 'string') {\n checkKind = false;\n result.kind = kindOrCommandOrEdit;\n }\n else if (Command.is(kindOrCommandOrEdit)) {\n result.command = kindOrCommandOrEdit;\n }\n else {\n result.edit = kindOrCommandOrEdit;\n }\n if (checkKind && kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n CodeAction.create = create;\n function is(value) {\n var candidate = value;\n return candidate && Is.string(candidate.title) &&\n (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\n (candidate.kind === undefined || Is.string(candidate.kind)) &&\n (candidate.edit !== undefined || candidate.command !== undefined) &&\n (candidate.command === undefined || Command.is(candidate.command)) &&\n (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&\n (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));\n }\n CodeAction.is = is;\n})(CodeAction || (CodeAction = {}));\n/**\n * The CodeLens namespace provides helper functions to work with\n * {@link CodeLens} literals.\n */\nexport var CodeLens;\n(function (CodeLens) {\n /**\n * Creates a new CodeLens literal.\n */\n function create(range, data) {\n var result = { range: range };\n if (Is.defined(data)) {\n result.data = data;\n }\n return result;\n }\n CodeLens.create = create;\n /**\n * Checks whether the given literal conforms to the {@link CodeLens} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\n }\n CodeLens.is = is;\n})(CodeLens || (CodeLens = {}));\n/**\n * The FormattingOptions namespace provides helper functions to work with\n * {@link FormattingOptions} literals.\n */\nexport var FormattingOptions;\n(function (FormattingOptions) {\n /**\n * Creates a new FormattingOptions literal.\n */\n function create(tabSize, insertSpaces) {\n return { tabSize: tabSize, insertSpaces: insertSpaces };\n }\n FormattingOptions.create = create;\n /**\n * Checks whether the given literal conforms to the {@link FormattingOptions} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\n }\n FormattingOptions.is = is;\n})(FormattingOptions || (FormattingOptions = {}));\n/**\n * The DocumentLink namespace provides helper functions to work with\n * {@link DocumentLink} literals.\n */\nexport var DocumentLink;\n(function (DocumentLink) {\n /**\n * Creates a new DocumentLink literal.\n */\n function create(range, target, data) {\n return { range: range, target: target, data: data };\n }\n DocumentLink.create = create;\n /**\n * Checks whether the given literal conforms to the {@link DocumentLink} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\n }\n DocumentLink.is = is;\n})(DocumentLink || (DocumentLink = {}));\n/**\n * The SelectionRange namespace provides helper function to work with\n * SelectionRange literals.\n */\nexport var SelectionRange;\n(function (SelectionRange) {\n /**\n * Creates a new SelectionRange\n * @param range the range.\n * @param parent an optional parent.\n */\n function create(range, parent) {\n return { range: range, parent: parent };\n }\n SelectionRange.create = create;\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\n }\n SelectionRange.is = is;\n})(SelectionRange || (SelectionRange = {}));\n/**\n * A set of predefined token types. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenTypes;\n(function (SemanticTokenTypes) {\n SemanticTokenTypes[\"namespace\"] = \"namespace\";\n /**\n * Represents a generic type. Acts as a fallback for types which can't be mapped to\n * a specific type like class or enum.\n */\n SemanticTokenTypes[\"type\"] = \"type\";\n SemanticTokenTypes[\"class\"] = \"class\";\n SemanticTokenTypes[\"enum\"] = \"enum\";\n SemanticTokenTypes[\"interface\"] = \"interface\";\n SemanticTokenTypes[\"struct\"] = \"struct\";\n SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\n SemanticTokenTypes[\"parameter\"] = \"parameter\";\n SemanticTokenTypes[\"variable\"] = \"variable\";\n SemanticTokenTypes[\"property\"] = \"property\";\n SemanticTokenTypes[\"enumMember\"] = \"enumMember\";\n SemanticTokenTypes[\"event\"] = \"event\";\n SemanticTokenTypes[\"function\"] = \"function\";\n SemanticTokenTypes[\"method\"] = \"method\";\n SemanticTokenTypes[\"macro\"] = \"macro\";\n SemanticTokenTypes[\"keyword\"] = \"keyword\";\n SemanticTokenTypes[\"modifier\"] = \"modifier\";\n SemanticTokenTypes[\"comment\"] = \"comment\";\n SemanticTokenTypes[\"string\"] = \"string\";\n SemanticTokenTypes[\"number\"] = \"number\";\n SemanticTokenTypes[\"regexp\"] = \"regexp\";\n SemanticTokenTypes[\"operator\"] = \"operator\";\n /**\n * @since 3.17.0\n */\n SemanticTokenTypes[\"decorator\"] = \"decorator\";\n})(SemanticTokenTypes || (SemanticTokenTypes = {}));\n/**\n * A set of predefined token modifiers. This set is not fixed\n * an clients can specify additional token types via the\n * corresponding client capabilities.\n *\n * @since 3.16.0\n */\nexport var SemanticTokenModifiers;\n(function (SemanticTokenModifiers) {\n SemanticTokenModifiers[\"declaration\"] = \"declaration\";\n SemanticTokenModifiers[\"definition\"] = \"definition\";\n SemanticTokenModifiers[\"readonly\"] = \"readonly\";\n SemanticTokenModifiers[\"static\"] = \"static\";\n SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\n SemanticTokenModifiers[\"abstract\"] = \"abstract\";\n SemanticTokenModifiers[\"async\"] = \"async\";\n SemanticTokenModifiers[\"modification\"] = \"modification\";\n SemanticTokenModifiers[\"documentation\"] = \"documentation\";\n SemanticTokenModifiers[\"defaultLibrary\"] = \"defaultLibrary\";\n})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));\n/**\n * @since 3.16.0\n */\nexport var SemanticTokens;\n(function (SemanticTokens) {\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\n Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\n }\n SemanticTokens.is = is;\n})(SemanticTokens || (SemanticTokens = {}));\n/**\n * The InlineValueText namespace provides functions to deal with InlineValueTexts.\n *\n * @since 3.17.0\n */\nexport var InlineValueText;\n(function (InlineValueText) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, text) {\n return { range: range, text: text };\n }\n InlineValueText.create = create;\n function is(value) {\n var candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);\n }\n InlineValueText.is = is;\n})(InlineValueText || (InlineValueText = {}));\n/**\n * The InlineValueVariableLookup namespace provides functions to deal with InlineValueVariableLookups.\n *\n * @since 3.17.0\n */\nexport var InlineValueVariableLookup;\n(function (InlineValueVariableLookup) {\n /**\n * Creates a new InlineValueText literal.\n */\n function create(range, variableName, caseSensitiveLookup) {\n return { range: range, variableName: variableName, caseSensitiveLookup: caseSensitiveLookup };\n }\n InlineValueVariableLookup.create = create;\n function is(value) {\n var candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup)\n && (Is.string(candidate.variableName) || candidate.variableName === undefined);\n }\n InlineValueVariableLookup.is = is;\n})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));\n/**\n * The InlineValueEvaluatableExpression namespace provides functions to deal with InlineValueEvaluatableExpression.\n *\n * @since 3.17.0\n */\nexport var InlineValueEvaluatableExpression;\n(function (InlineValueEvaluatableExpression) {\n /**\n * Creates a new InlineValueEvaluatableExpression literal.\n */\n function create(range, expression) {\n return { range: range, expression: expression };\n }\n InlineValueEvaluatableExpression.create = create;\n function is(value) {\n var candidate = value;\n return candidate !== undefined && candidate !== null && Range.is(candidate.range)\n && (Is.string(candidate.expression) || candidate.expression === undefined);\n }\n InlineValueEvaluatableExpression.is = is;\n})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));\n/**\n * The InlineValueContext namespace provides helper functions to work with\n * {@link InlineValueContext} literals.\n *\n * @since 3.17.0\n */\nexport var InlineValueContext;\n(function (InlineValueContext) {\n /**\n * Creates a new InlineValueContext literal.\n */\n function create(frameId, stoppedLocation) {\n return { frameId: frameId, stoppedLocation: stoppedLocation };\n }\n InlineValueContext.create = create;\n /**\n * Checks whether the given literal conforms to the {@link InlineValueContext} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Range.is(value.stoppedLocation);\n }\n InlineValueContext.is = is;\n})(InlineValueContext || (InlineValueContext = {}));\n/**\n * Inlay hint kinds.\n *\n * @since 3.17.0\n */\nexport var InlayHintKind;\n(function (InlayHintKind) {\n /**\n * An inlay hint that for a type annotation.\n */\n InlayHintKind.Type = 1;\n /**\n * An inlay hint that is for a parameter.\n */\n InlayHintKind.Parameter = 2;\n function is(value) {\n return value === 1 || value === 2;\n }\n InlayHintKind.is = is;\n})(InlayHintKind || (InlayHintKind = {}));\nexport var InlayHintLabelPart;\n(function (InlayHintLabelPart) {\n function create(value) {\n return { value: value };\n }\n InlayHintLabelPart.create = create;\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.location === undefined || Location.is(candidate.location))\n && (candidate.command === undefined || Command.is(candidate.command));\n }\n InlayHintLabelPart.is = is;\n})(InlayHintLabelPart || (InlayHintLabelPart = {}));\nexport var InlayHint;\n(function (InlayHint) {\n function create(position, label, kind) {\n var result = { position: position, label: label };\n if (kind !== undefined) {\n result.kind = kind;\n }\n return result;\n }\n InlayHint.create = create;\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && Position.is(candidate.position)\n && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is))\n && (candidate.kind === undefined || InlayHintKind.is(candidate.kind))\n && (candidate.textEdits === undefined) || Is.typedArray(candidate.textEdits, TextEdit.is)\n && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip))\n && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft))\n && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight));\n }\n InlayHint.is = is;\n})(InlayHint || (InlayHint = {}));\nexport var WorkspaceFolder;\n(function (WorkspaceFolder) {\n function is(value) {\n var candidate = value;\n return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);\n }\n WorkspaceFolder.is = is;\n})(WorkspaceFolder || (WorkspaceFolder = {}));\nexport var EOL = ['\\n', '\\r\\n', '\\r'];\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nexport var TextDocument;\n(function (TextDocument) {\n /**\n * Creates a new ITextDocument literal from the given uri and content.\n * @param uri The document's uri.\n * @param languageId The document's language Id.\n * @param version The document's version.\n * @param content The document's content.\n */\n function create(uri, languageId, version, content) {\n return new FullTextDocument(uri, languageId, version, content);\n }\n TextDocument.create = create;\n /**\n * Checks whether the given literal conforms to the {@link ITextDocument} interface.\n */\n function is(value) {\n var candidate = value;\n return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)\n && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\n }\n TextDocument.is = is;\n function applyEdits(document, edits) {\n var text = document.getText();\n var sortedEdits = mergeSort(edits, function (a, b) {\n var diff = a.range.start.line - b.range.start.line;\n if (diff === 0) {\n return a.range.start.character - b.range.start.character;\n }\n return diff;\n });\n var lastModifiedOffset = text.length;\n for (var i = sortedEdits.length - 1; i >= 0; i--) {\n var e = sortedEdits[i];\n var startOffset = document.offsetAt(e.range.start);\n var endOffset = document.offsetAt(e.range.end);\n if (endOffset <= lastModifiedOffset) {\n text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\n }\n else {\n throw new Error('Overlapping edit');\n }\n lastModifiedOffset = startOffset;\n }\n return text;\n }\n TextDocument.applyEdits = applyEdits;\n function mergeSort(data, compare) {\n if (data.length <= 1) {\n // sorted\n return data;\n }\n var p = (data.length / 2) | 0;\n var left = data.slice(0, p);\n var right = data.slice(p);\n mergeSort(left, compare);\n mergeSort(right, compare);\n var leftIdx = 0;\n var rightIdx = 0;\n var i = 0;\n while (leftIdx < left.length && rightIdx < right.length) {\n var ret = compare(left[leftIdx], right[rightIdx]);\n if (ret <= 0) {\n // smaller_equal -> take left to preserve order\n data[i++] = left[leftIdx++];\n }\n else {\n // greater -> take right\n data[i++] = right[rightIdx++];\n }\n }\n while (leftIdx < left.length) {\n data[i++] = left[leftIdx++];\n }\n while (rightIdx < right.length) {\n data[i++] = right[rightIdx++];\n }\n return data;\n }\n})(TextDocument || (TextDocument = {}));\n/**\n * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\n */\nvar FullTextDocument = /** @class */ (function () {\n function FullTextDocument(uri, languageId, version, content) {\n this._uri = uri;\n this._languageId = languageId;\n this._version = version;\n this._content = content;\n this._lineOffsets = undefined;\n }\n Object.defineProperty(FullTextDocument.prototype, \"uri\", {\n get: function () {\n return this._uri;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\n get: function () {\n return this._languageId;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(FullTextDocument.prototype, \"version\", {\n get: function () {\n return this._version;\n },\n enumerable: false,\n configurable: true\n });\n FullTextDocument.prototype.getText = function (range) {\n if (range) {\n var start = this.offsetAt(range.start);\n var end = this.offsetAt(range.end);\n return this._content.substring(start, end);\n }\n return this._content;\n };\n FullTextDocument.prototype.update = function (event, version) {\n this._content = event.text;\n this._version = version;\n this._lineOffsets = undefined;\n };\n FullTextDocument.prototype.getLineOffsets = function () {\n if (this._lineOffsets === undefined) {\n var lineOffsets = [];\n var text = this._content;\n var isLineStart = true;\n for (var i = 0; i < text.length; i++) {\n if (isLineStart) {\n lineOffsets.push(i);\n isLineStart = false;\n }\n var ch = text.charAt(i);\n isLineStart = (ch === '\\r' || ch === '\\n');\n if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\n i++;\n }\n }\n if (isLineStart && text.length > 0) {\n lineOffsets.push(text.length);\n }\n this._lineOffsets = lineOffsets;\n }\n return this._lineOffsets;\n };\n FullTextDocument.prototype.positionAt = function (offset) {\n offset = Math.max(Math.min(offset, this._content.length), 0);\n var lineOffsets = this.getLineOffsets();\n var low = 0, high = lineOffsets.length;\n if (high === 0) {\n return Position.create(0, offset);\n }\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (lineOffsets[mid] > offset) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n // low is the least x for which the line offset is larger than the current offset\n // or array.length if no line offset is larger than the current offset\n var line = low - 1;\n return Position.create(line, offset - lineOffsets[line]);\n };\n FullTextDocument.prototype.offsetAt = function (position) {\n var lineOffsets = this.getLineOffsets();\n if (position.line >= lineOffsets.length) {\n return this._content.length;\n }\n else if (position.line < 0) {\n return 0;\n }\n var lineOffset = lineOffsets[position.line];\n var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\n return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\n };\n Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\n get: function () {\n return this.getLineOffsets().length;\n },\n enumerable: false,\n configurable: true\n });\n return FullTextDocument;\n}());\nvar Is;\n(function (Is) {\n var toString = Object.prototype.toString;\n function defined(value) {\n return typeof value !== 'undefined';\n }\n Is.defined = defined;\n function undefined(value) {\n return typeof value === 'undefined';\n }\n Is.undefined = undefined;\n function boolean(value) {\n return value === true || value === false;\n }\n Is.boolean = boolean;\n function string(value) {\n return toString.call(value) === '[object String]';\n }\n Is.string = string;\n function number(value) {\n return toString.call(value) === '[object Number]';\n }\n Is.number = number;\n function numberRange(value, min, max) {\n return toString.call(value) === '[object Number]' && min <= value && value <= max;\n }\n Is.numberRange = numberRange;\n function integer(value) {\n return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;\n }\n Is.integer = integer;\n function uinteger(value) {\n return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;\n }\n Is.uinteger = uinteger;\n function func(value) {\n return toString.call(value) === '[object Function]';\n }\n Is.func = func;\n function objectLiteral(value) {\n // Strictly speaking class instances pass this check as well. Since the LSP\n // doesn't use classes we ignore this for now. If we do we need to add something\n // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\n return value !== null && typeof value === 'object';\n }\n Is.objectLiteral = objectLiteral;\n function typedArray(value, check) {\n return Array.isArray(value) && value.every(check);\n }\n Is.typedArray = typedArray;\n})(Is || (Is = {}));\n","/**\n * Zenscroll 4.0.2\n * https://github.com/zengabor/zenscroll/\n *\n * Copyright 2015–2018 Gabor Lenard\n *\n * This is free and unencumbered software released into the public domain.\n * \n * Anyone is free to copy, modify, publish, use, compile, sell, or\n * distribute this software, either in source code form or as a compiled\n * binary, for any purpose, commercial or non-commercial, and by any\n * means.\n * \n * In jurisdictions that recognize copyright laws, the author or authors\n * of this software dedicate any and all copyright interest in the\n * software to the public domain. We make this dedication for the benefit\n * of the public at large and to the detriment of our heirs and\n * successors. We intend this dedication to be an overt act of\n * relinquishment in perpetuity of all present and future rights to this\n * software under copyright law.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\n * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n * \n * For more information, please refer to <http://unlicense.org>\n * \n */\n\n/*jshint devel:true, asi:true */\n\n/*global define, module */\n\n\n(function (root, factory) {\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine([], factory())\n\t} else if (typeof module === \"object\" && module.exports) {\n\t\tmodule.exports = factory()\n\t} else {\n\t\t(function install() {\n\t\t\t// To make sure Zenscroll can be referenced from the header, before `body` is available\n\t\t\tif (document && document.body) {\n\t\t\t\troot.zenscroll = factory()\n\t\t\t} else {\n\t\t\t\t// retry 9ms later\n\t\t\t\tsetTimeout(install, 9)\n\t\t\t}\n\t\t})()\n\t}\n}(this, function () {\n\t\"use strict\"\n\n\n\t// Detect if the browser already supports native smooth scrolling (e.g., Firefox 36+ and Chrome 49+) and it is enabled:\n\tvar isNativeSmoothScrollEnabledOn = function (elem) {\n\t\treturn elem && \"getComputedStyle\" in window &&\n\t\t\twindow.getComputedStyle(elem)[\"scroll-behavior\"] === \"smooth\"\n\t}\n\n\n\t// Exit if it’s not a browser environment:\n\tif (typeof window === \"undefined\" || !(\"document\" in window)) {\n\t\treturn {}\n\t}\n\n\n\tvar makeScroller = function (container, defaultDuration, edgeOffset) {\n\n\t\t// Use defaults if not provided\n\t\tdefaultDuration = defaultDuration || 999 //ms\n\t\tif (!edgeOffset && edgeOffset !== 0) {\n\t\t\t// When scrolling, this amount of distance is kept from the edges of the container:\n\t\t\tedgeOffset = 9 //px\n\t\t}\n\n\t\t// Handling the life-cycle of the scroller\n\t\tvar scrollTimeoutId\n\t\tvar setScrollTimeoutId = function (newValue) {\n\t\t\tscrollTimeoutId = newValue\n\t\t}\n\n\t\t/**\n\t\t * Stop the current smooth scroll operation immediately\n\t\t */\n\t\tvar stopScroll = function () {\n\t\t\tclearTimeout(scrollTimeoutId)\n\t\t\tsetScrollTimeoutId(0)\n\t\t}\n\n\t\tvar getTopWithEdgeOffset = function (elem) {\n\t\t\treturn Math.max(0, container.getTopOf(elem) - edgeOffset)\n\t\t}\n\n\t\t/**\n\t\t * Scrolls to a specific vertical position in the document.\n\t\t *\n\t\t * @param {targetY} The vertical position within the document.\n\t\t * @param {duration} Optionally the duration of the scroll operation.\n\t\t * If not provided the default duration is used.\n\t\t * @param {onDone} An optional callback function to be invoked once the scroll finished.\n\t\t */\n\t\tvar scrollToY = function (targetY, duration, onDone) {\n\t\t\tstopScroll()\n\t\t\tif (duration === 0 || (duration && duration < 0) || isNativeSmoothScrollEnabledOn(container.body)) {\n\t\t\t\tcontainer.toY(targetY)\n\t\t\t\tif (onDone) {\n\t\t\t\t\tonDone()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar startY = container.getY()\n\t\t\t\tvar distance = Math.max(0, targetY) - startY\n\t\t\t\tvar startTime = new Date().getTime()\n\t\t\t\tduration = duration || Math.min(Math.abs(distance), defaultDuration);\n\t\t\t\t(function loopScroll() {\n\t\t\t\t\tsetScrollTimeoutId(setTimeout(function () {\n\t\t\t\t\t\t// Calculate percentage:\n\t\t\t\t\t\tvar p = Math.min(1, (new Date().getTime() - startTime) / duration)\n\t\t\t\t\t\t// Calculate the absolute vertical position:\n\t\t\t\t\t\tvar y = Math.max(0, Math.floor(startY + distance*(p < 0.5 ? 2*p*p : p*(4 - p*2)-1)))\n\t\t\t\t\t\tcontainer.toY(y)\n\t\t\t\t\t\tif (p < 1 && (container.getHeight() + y) < container.body.scrollHeight) {\n\t\t\t\t\t\t\tloopScroll()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsetTimeout(stopScroll, 99) // with cooldown time\n\t\t\t\t\t\t\tif (onDone) {\n\t\t\t\t\t\t\t\tonDone()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9))\n\t\t\t\t})()\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Scrolls to the top of a specific element.\n\t\t *\n\t\t * @param {elem} The element to scroll to.\n\t\t * @param {duration} Optionally the duration of the scroll operation.\n\t\t * @param {onDone} An optional callback function to be invoked once the scroll finished.\n\t\t */\n\t\tvar scrollToElem = function (elem, duration, onDone) {\n\t\t\tscrollToY(getTopWithEdgeOffset(elem), duration, onDone)\n\t\t}\n\n\t\t/**\n\t\t * Scrolls an element into view if necessary.\n\t\t *\n\t\t * @param {elem} The element.\n\t\t * @param {duration} Optionally the duration of the scroll operation.\n\t\t * @param {onDone} An optional callback function to be invoked once the scroll finished.\n\t\t */\n\t\tvar scrollIntoView = function (elem, duration, onDone) {\n\t\t\tvar elemHeight = elem.getBoundingClientRect().height\n\t\t\tvar elemBottom = container.getTopOf(elem) + elemHeight\n\t\t\tvar containerHeight = container.getHeight()\n\t\t\tvar y = container.getY()\n\t\t\tvar containerBottom = y + containerHeight\n\t\t\tif (getTopWithEdgeOffset(elem) < y || (elemHeight + edgeOffset) > containerHeight) {\n\t\t\t\t// Element is clipped at top or is higher than screen.\n\t\t\t\tscrollToElem(elem, duration, onDone)\n\t\t\t} else if ((elemBottom + edgeOffset) > containerBottom) {\n\t\t\t\t// Element is clipped at the bottom.\n\t\t\t\tscrollToY(elemBottom - containerHeight + edgeOffset, duration, onDone)\n\t\t\t} else if (onDone) {\n\t\t\t\tonDone()\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Scrolls to the center of an element.\n\t\t *\n\t\t * @param {elem} The element.\n\t\t * @param {duration} Optionally the duration of the scroll operation.\n\t\t * @param {offset} Optionally the offset of the top of the element from the center of the screen.\n\t\t * A value of 0 is ignored.\n\t\t * @param {onDone} An optional callback function to be invoked once the scroll finished.\n\t\t */\n\t\tvar scrollToCenterOf = function (elem, duration, offset, onDone) {\n\t\t\tscrollToY(Math.max(0, container.getTopOf(elem) - container.getHeight()/2 + (offset || elem.getBoundingClientRect().height/2)), duration, onDone)\n\t\t}\n\n\t\t/**\n\t\t * Changes default settings for this scroller.\n\t\t *\n\t\t * @param {newDefaultDuration} Optionally a new value for default duration, used for each scroll method by default.\n\t\t * Ignored if null or undefined.\n\t\t * @param {newEdgeOffset} Optionally a new value for the edge offset, used by each scroll method by default. Ignored if null or undefined.\n\t\t * @returns An object with the current values.\n\t\t */\n\t\tvar setup = function (newDefaultDuration, newEdgeOffset) {\n\t\t\tif (newDefaultDuration === 0 || newDefaultDuration) {\n\t\t\t\tdefaultDuration = newDefaultDuration\n\t\t\t}\n\t\t\tif (newEdgeOffset === 0 || newEdgeOffset) {\n\t\t\t\tedgeOffset = newEdgeOffset\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tdefaultDuration: defaultDuration,\n\t\t\t\tedgeOffset: edgeOffset\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsetup: setup,\n\t\t\tto: scrollToElem,\n\t\t\ttoY: scrollToY,\n\t\t\tintoView: scrollIntoView,\n\t\t\tcenter: scrollToCenterOf,\n\t\t\tstop: stopScroll,\n\t\t\tmoving: function () { return !!scrollTimeoutId },\n\t\t\tgetY: container.getY,\n\t\t\tgetTopOf: container.getTopOf\n\t\t}\n\n\t}\n\n\n\tvar docElem = document.documentElement\n\tvar getDocY = function () { return window.scrollY || docElem.scrollTop }\n\n\t// Create a scroller for the document:\n\tvar zenscroll = makeScroller({\n\t\tbody: document.scrollingElement || document.body,\n\t\ttoY: function (y) { window.scrollTo(0, y) },\n\t\tgetY: getDocY,\n\t\tgetHeight: function () { return window.innerHeight || docElem.clientHeight },\n\t\tgetTopOf: function (elem) { return elem.getBoundingClientRect().top + getDocY() - docElem.offsetTop }\n\t})\n\n\n\t/**\n\t * Creates a scroller from the provided container element (e.g., a DIV)\n\t *\n\t * @param {scrollContainer} The vertical position within the document.\n\t * @param {defaultDuration} Optionally a value for default duration, used for each scroll method by default.\n\t * Ignored if 0 or null or undefined.\n\t * @param {edgeOffset} Optionally a value for the edge offset, used by each scroll method by default. \n\t * Ignored if null or undefined.\n\t * @returns A scroller object, similar to `zenscroll` but controlling the provided element.\n\t */\n\tzenscroll.createScroller = function (scrollContainer, defaultDuration, edgeOffset) {\n\t\treturn makeScroller({\n\t\t\tbody: scrollContainer,\n\t\t\ttoY: function (y) { scrollContainer.scrollTop = y },\n\t\t\tgetY: function () { return scrollContainer.scrollTop },\n\t\t\tgetHeight: function () { return Math.min(scrollContainer.clientHeight, window.innerHeight || docElem.clientHeight) },\n\t\t\tgetTopOf: function (elem) { return elem.offsetTop }\n\t\t}, defaultDuration, edgeOffset)\n\t}\n\n\n\t// Automatic link-smoothing on achors\n\t// Exclude IE8- or when native is enabled or Zenscroll auto- is disabled\n\tif (\"addEventListener\" in window && !window.noZensmooth && !isNativeSmoothScrollEnabledOn(document.body)) {\n\n\t\tvar isHistorySupported = \"history\" in window && \"pushState\" in history\n\t\tvar isScrollRestorationSupported = isHistorySupported && \"scrollRestoration\" in history\n\n\t\t// On first load & refresh make sure the browser restores the position first\n\t\tif (isScrollRestorationSupported) {\n\t\t\thistory.scrollRestoration = \"auto\"\n\t\t}\n\n\t\twindow.addEventListener(\"load\", function () {\n\n\t\t\tif (isScrollRestorationSupported) {\n\t\t\t\t// Set it to manual\n\t\t\t\tsetTimeout(function () { history.scrollRestoration = \"manual\" }, 9)\n\t\t\t\twindow.addEventListener(\"popstate\", function (event) {\n\t\t\t\t\tif (event.state && \"zenscrollY\" in event.state) {\n\t\t\t\t\t\tzenscroll.toY(event.state.zenscrollY)\n\t\t\t\t\t}\n\t\t\t\t}, false)\n\t\t\t}\n\n\t\t\t// Add edge offset on first load if necessary\n\t\t\t// This may not work on IE (or older computer?) as it requires more timeout, around 100 ms\n\t\t\tif (window.location.hash) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t// Adjustment is only needed if there is an edge offset:\n\t\t\t\t\tvar edgeOffset = zenscroll.setup().edgeOffset\n\t\t\t\t\tif (edgeOffset) {\n\t\t\t\t\t\tvar targetElem = document.getElementById(window.location.href.split(\"#\")[1])\n\t\t\t\t\t\tif (targetElem) {\n\t\t\t\t\t\t\tvar targetY = Math.max(0, zenscroll.getTopOf(targetElem) - edgeOffset)\n\t\t\t\t\t\t\tvar diff = zenscroll.getY() - targetY\n\t\t\t\t\t\t\t// Only do the adjustment if the browser is very close to the element:\n\t\t\t\t\t\t\tif (0 <= diff && diff < 9 ) {\n\t\t\t\t\t\t\t\twindow.scrollTo(0, targetY)\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}, 9)\n\t\t\t}\n\n\t\t}, false)\n\n\t\t// Handling clicks on anchors\n\t\tvar RE_noZensmooth = new RegExp(\"(^|\\\\s)noZensmooth(\\\\s|$)\")\n\t\twindow.addEventListener(\"click\", function (event) {\n\t\t\tvar anchor = event.target\n\t\t\twhile (anchor && anchor.tagName !== \"A\") {\n\t\t\t\tanchor = anchor.parentNode\n\t\t\t}\n\t\t\t// Let the browser handle the click if it wasn't with the primary button, or with some modifier keys:\n\t\t\tif (!anchor || event.which !== 1 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Save the current scrolling position so it can be used for scroll restoration:\n\t\t\tif (isScrollRestorationSupported) {\n\t\t\t\tvar historyState = history.state && typeof history.state === \"object\" ? history.state : {}\n\t\t\t\thistoryState.zenscrollY = zenscroll.getY()\n\t\t\t\ttry {\n\t\t\t\t\thistory.replaceState(historyState, \"\")\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Avoid the Chrome Security exception on file protocol, e.g., file://index.html\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Find the referenced ID:\n\t\t\tvar href = anchor.getAttribute(\"href\") || \"\"\n\t\t\tif (href.indexOf(\"#\") === 0 && !RE_noZensmooth.test(anchor.className)) {\n\t\t\t\tvar targetY = 0\n\t\t\t\tvar targetElem = document.getElementById(href.substring(1))\n\t\t\t\tif (href !== \"#\") {\n\t\t\t\t\tif (!targetElem) {\n\t\t\t\t\t\t// Let the browser handle the click if the target ID is not found.\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\ttargetY = zenscroll.getTopOf(targetElem)\n\t\t\t\t}\n\t\t\t\tevent.preventDefault()\n\t\t\t\t// By default trigger the browser's `hashchange` event...\n\t\t\t\tvar onDone = function () { window.location = href }\n\t\t\t\t// ...unless there is an edge offset specified\n\t\t\t\tvar edgeOffset = zenscroll.setup().edgeOffset\n\t\t\t\tif (edgeOffset) {\n\t\t\t\t\ttargetY = Math.max(0, targetY - edgeOffset)\n\t\t\t\t\tif (isHistorySupported) {\n\t\t\t\t\t\tonDone = function () { history.pushState({}, \"\", href) }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tzenscroll.toY(targetY, null, onDone)\n\t\t\t}\n\t\t}, false)\n\n\t}\n\n\n\treturn zenscroll\n\n\n}));\n","/*\r\n * promise.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\ninterface PendingPromise<T> {\r\n promise: () => Promise<T>;\r\n resolve: (result: T) => void;\r\n reject: (reason: unknown) => void;\r\n}\r\n\r\nexport class PromiseQueue<T = unknown> {\r\n private queue = new Array<PendingPromise<T>>();\r\n private running = false;\r\n\r\n public enqueue(promise: () => Promise<T>) {\r\n return new Promise<T>((resolve, reject) => {\r\n this.queue.push({\r\n promise,\r\n resolve,\r\n reject,\r\n });\r\n this.dequeue();\r\n });\r\n }\r\n\r\n private dequeue() {\r\n if (this.running) {\r\n return false;\r\n }\r\n const item = this.queue.shift();\r\n if (!item) {\r\n return false;\r\n }\r\n try {\r\n this.running = true;\r\n item\r\n .promise()\r\n .then(value => {\r\n this.running = false;\r\n item.resolve(value);\r\n this.dequeue();\r\n })\r\n .catch(err => {\r\n this.running = false;\r\n item.reject(err);\r\n this.dequeue();\r\n });\r\n } catch (err) {\r\n this.running = false;\r\n item.reject(err);\r\n this.dequeue();\r\n }\r\n return true;\r\n }\r\n}\r\n","/*\r\n * wordbreak.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\n// This string is a compact representation of the set of Unicode characters\r\n// that we consider to be letters. Each pair of characters represents the\r\n// lower and upper bound (both inclusive) of a range of letters.\r\n//\r\n// For example, \"azAZ09\" would mean a-z, A-Z, and 0-9 are all considered letters.\r\n//\r\n// The ranges are sorted, so they may be binary searched.\r\nconst DATA = \"\\u0041\\u005A\\u0061\\u007A\\u00AA\\u00AA\\u00B5\\u00B5\\u00BA\\u00BA\\u00C0\\u00D6\\u00D8\\u00F6\\u00F8\\u0241\\u0250\\u02C1\\u02C6\\u02D1\\u02E0\\u02E4\\u02EE\\u02EE\\u0300\\u036F\\u037A\\u037A\\u0386\\u0386\\u0388\\u038A\\u038C\\u038C\\u038E\\u03A1\\u03A3\\u03CE\\u03D0\\u03F5\\u03F7\\u0481\\u0483\\u0486\\u048A\\u04CE\\u04D0\\u04F9\\u0500\\u050F\\u0531\\u0556\\u0559\\u0559\\u0561\\u0587\\u0591\\u05B9\\u05BB\\u05BD\\u05BF\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05C7\\u05D0\\u05EA\\u05F0\\u05F2\\u0610\\u0615\\u0621\\u063A\\u0640\\u065E\\u066E\\u06D3\\u06D5\\u06DC\\u06DF\\u06E8\\u06EA\\u06EF\\u06FA\\u06FC\\u06FF\\u06FF\\u0710\\u074A\\u074D\\u076D\\u0780\\u07B1\\u0901\\u0902\\u0904\\u0939\\u093C\\u093D\\u0941\\u0948\\u094D\\u094D\\u0950\\u0954\\u0958\\u0963\\u097D\\u097D\\u0981\\u0981\\u0985\\u098C\\u098F\\u0990\\u0993\\u09A8\\u09AA\\u09B0\\u09B2\\u09B2\\u09B6\\u09B9\\u09BC\\u09BD\\u09C1\\u09C4\\u09CD\\u09CE\\u09DC\\u09DD\\u09DF\\u09E3\\u09F0\\u09F1\\u0A01\\u0A02\\u0A05\\u0A0A\\u0A0F\\u0A10\\u0A13\\u0A28\\u0A2A\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B\\u0A4D\\u0A59\\u0A5C\\u0A5E\\u0A5E\\u0A70\\u0A74\\u0A81\\u0A82\\u0A85\\u0A8D\\u0A8F\\u0A91\\u0A93\\u0AA8\\u0AAA\\u0AB0\\u0AB2\\u0AB3\\u0AB5\\u0AB9\\u0ABC\\u0ABD\\u0AC1\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0ACD\\u0AD0\\u0AD0\\u0AE0\\u0AE3\\u0B01\\u0B01\\u0B05\\u0B0C\\u0B0F\\u0B10\\u0B13\\u0B28\\u0B2A\\u0B30\\u0B32\\u0B33\\u0B35\\u0B39\\u0B3C\\u0B3D\\u0B3F\\u0B3F\\u0B41\\u0B43\\u0B4D\\u0B4D\\u0B56\\u0B56\\u0B5C\\u0B5D\\u0B5F\\u0B61\\u0B71\\u0B71\\u0B82\\u0B83\\u0B85\\u0B8A\\u0B8E\\u0B90\\u0B92\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8\\u0BAA\\u0BAE\\u0BB9\\u0BC0\\u0BC0\\u0BCD\\u0BCD\\u0C05\\u0C0C\\u0C0E\\u0C10\\u0C12\\u0C28\\u0C2A\\u0C33\\u0C35\\u0C39\\u0C3E\\u0C40\\u0C46\\u0C48\\u0C4A\\u0C4D\\u0C55\\u0C56\\u0C60\\u0C61\\u0C85\\u0C8C\\u0C8E\\u0C90\\u0C92\\u0CA8\\u0CAA\\u0CB3\\u0CB5\\u0CB9\\u0CBC\\u0CBD\\u0CBF\\u0CBF\\u0CC6\\u0CC6\\u0CCC\\u0CCD\\u0CDE\\u0CDE\\u0CE0\\u0CE1\\u0D05\\u0D0C\\u0D0E\\u0D10\\u0D12\\u0D28\\u0D2A\\u0D39\\u0D41\\u0D43\\u0D4D\\u0D4D\\u0D60\\u0D61\\u0D85\\u0D96\\u0D9A\\u0DB1\\u0DB3\\u0DBB\\u0DBD\\u0DBD\\u0DC0\\u0DC6\\u0DCA\\u0DCA\\u0DD2\\u0DD4\\u0DD6\\u0DD6\\u0E01\\u0E3A\\u0E40\\u0E4E\\u0E81\\u0E82\\u0E84\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8A\\u0E8D\\u0E8D\\u0E94\\u0E97\\u0E99\\u0E9F\\u0EA1\\u0EA3\\u0EA5\\u0EA5\\u0EA7\\u0EA7\\u0EAA\\u0EAB\\u0EAD\\u0EB9\\u0EBB\\u0EBD\\u0EC0\\u0EC4\\u0EC6\\u0EC6\\u0EC8\\u0ECD\\u0EDC\\u0EDD\\u0F00\\u0F00\\u0F18\\u0F19\\u0F35\\u0F35\\u0F37\\u0F37\\u0F39\\u0F39\\u0F40\\u0F47\\u0F49\\u0F6A\\u0F71\\u0F7E\\u0F80\\u0F84\\u0F86\\u0F8B\\u0F90\\u0F97\\u0F99\\u0FBC\\u0FC6\\u0FC6\\u1000\\u1021\\u1023\\u1027\\u1029\\u102A\\u102D\\u1030\\u1032\\u1032\\u1036\\u1037\\u1039\\u1039\\u1050\\u1055\\u1058\\u1059\\u10A0\\u10C5\\u10D0\\u10FA\\u10FC\\u10FC\\u1100\\u1159\\u115F\\u11A2\\u11A8\\u11F9\\u1200\\u1248\\u124A\\u124D\\u1250\\u1256\\u1258\\u1258\\u125A\\u125D\\u1260\\u1288\\u128A\\u128D\\u1290\\u12B0\\u12B2\\u12B5\\u12B8\\u12BE\\u12C0\\u12C0\\u12C2\\u12C5\\u12C8\\u12D6\\u12D8\\u1310\\u1312\\u1315\\u1318\\u135A\\u135F\\u135F\\u1380\\u138F\\u13A0\\u13F4\\u1401\\u166C\\u166F\\u1676\\u1681\\u169A\\u16A0\\u16EA\\u1700\\u170C\\u170E\\u1714\\u1720\\u1734\\u1740\\u1753\\u1760\\u176C\\u176E\\u1770\\u1772\\u1773\\u1780\\u17B3\\u17B7\\u17BD\\u17C6\\u17C6\\u17C9\\u17D3\\u17D7\\u17D7\\u17DC\\u17DD\\u180B\\u180D\\u1820\\u1877\\u1880\\u18A9\\u1900\\u191C\\u1920\\u1922\\u1927\\u1928\\u1932\\u1932\\u1939\\u193B\\u1950\\u196D\\u1970\\u1974\\u1980\\u19A9\\u19C1\\u19C7\\u1A00\\u1A18\\u1D00\\u1DC3\\u1E00\\u1E9B\\u1EA0\\u1EF9\\u1F00\\u1F15\\u1F18\\u1F1D\\u1F20\\u1F45\\u1F48\\u1F4D\\u1F50\\u1F57\\u1F59\\u1F59\\u1F5B\\u1F5B\\u1F5D\\u1F5D\\u1F5F\\u1F7D\\u1F80\\u1FB4\\u1FB6\\u1FBC\\u1FBE\\u1FBE\\u1FC2\\u1FC4\\u1FC6\\u1FCC\\u1FD0\\u1FD3\\u1FD6\\u1FDB\\u1FE0\\u1FEC\\u1FF2\\u1FF4\\u1FF6\\u1FFC\\u2071\\u2071\\u207F\\u207F\\u2090\\u2094\\u20D0\\u20DC\\u20E1\\u20E1\\u20E5\\u20EB\\u2102\\u2102\\u2107\\u2107\\u210A\\u2113\\u2115\\u2115\\u2119\\u211D\\u2124\\u2124\\u2126\\u2126\\u2128\\u2128\\u212A\\u212D\\u212F\\u2131\\u2133\\u2139\\u213C\\u213F\\u2145\\u2149\\u2C00\\u2C2E\\u2C30\\u2C5E\\u2C80\\u2CE4\\u2D00\\u2D25\\u2D30\\u2D65\\u2D6F\\u2D6F\\u2D80\\u2D96\\u2DA0\\u2DA6\\u2DA8\\u2DAE\\u2DB0\\u2DB6\\u2DB8\\u2DBE\\u2DC0\\u2DC6\\u2DC8\\u2DCE\\u2DD0\\u2DD6\\u2DD8\\u2DDE\\u3005\\u3006\\u302A\\u302F\\u3031\\u3035\\u303B\\u303C\\u3041\\u3096\\u3099\\u309A\\u309D\\u309F\\u30A1\\u30FA\\u30FC\\u30FF\\u3105\\u312C\\u3131\\u318E\\u31A0\\u31B7\\u31F0\\u31FF\\u3400\\u3400\\u4DB5\\u4DB5\\u4E00\\u4E00\\u9FBB\\u9FBB\\uA000\\uA48C\\uA800\\uA801\\uA803\\uA822\\uA825\\uA826\\uAC00\\uD7A3\\uF900\\uFA2D\\uFA30\\uFA6A\\uFA70\\uFAD9\\uFB00\\uFB06\\uFB13\\uFB17\\uFB1D\\uFB28\\uFB2A\\uFB36\\uFB38\\uFB3C\\uFB3E\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46\\uFBB1\\uFBD3\\uFD3D\\uFD50\\uFD8F\\uFD92\\uFDC7\\uFDF0\\uFDFB\\uFE00\\uFE0F\\uFE20\\uFE23\\uFE70\\uFE74\\uFE76\\uFEFC\\uFF21\\uFF3A\\uFF41\\uFF5A\\uFF66\\uFFBE\\uFFC2\\uFFC7\\uFFCA\\uFFCF\\uFFD2\\uFFD7\\uFFDA\\uFFDC\";\r\n\r\n// Constants for boundary character comparisons\r\nconst kSingleQuote = 39;\r\nconst kFancySingleQuote = 8217;\r\n\r\nexport const kCharClassWord = 0;\r\nexport const kCharClassBoundary = 1;\r\nexport const kCharClassNonWord = 2;\r\n\r\nexport interface WordBreaker {\r\n breakWords: (text: string) => Array<{ start: number, end: number }>;\r\n classifyCharacter: (ch: number) => number;\r\n}\r\n\r\nexport function wordBreaker() : WordBreaker {\r\n\r\n const CACHE = new Map<number,boolean>();\r\n \r\n const compareToRange = (c: number, rangeIndex: number) => {\r\n if (c < DATA.charCodeAt(rangeIndex*2)) {\r\n return -1;\r\n }\r\n if (c > DATA.charCodeAt(rangeIndex*2 + 1)) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n const binarySearchLetters = (c: number) => {\r\n let fromIndex = 0; // index of starting range, INCLUSIVE\r\n let toIndex = DATA.length / 2; // index of ending range, EXCLUSIVE\r\n while (fromIndex < toIndex)\r\n {\r\n // round down from e.g. 180.5 (that's not the JS default behavior)\r\n const testIndex = -Math.round(-((fromIndex + toIndex) / 2));\r\n const testResult = compareToRange(c, testIndex);\r\n\r\n if (testResult < 0)\r\n toIndex = testIndex;\r\n else if (testResult > 0)\r\n fromIndex = testIndex + 1;\r\n else\r\n return true;\r\n }\r\n\r\n // No ranges left to test\r\n return false;\r\n }\r\n\r\n const isLetter = (c: number) => {\r\n const cached = CACHE.get(c);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const result = binarySearchLetters(c);\r\n CACHE.set(c,result);\r\n return result;\r\n }\r\n\r\n return {\r\n\r\n classifyCharacter(ch: number) : number {\r\n if (isLetter(ch)) {\r\n return kCharClassWord;\r\n } else if (ch === kSingleQuote || ch === kFancySingleQuote) {\r\n return kCharClassBoundary;\r\n } else {\r\n return kCharClassNonWord;\r\n }\r\n },\r\n \r\n\r\n breakWords(text: string) : Array<{ start: number, end: number }> {\r\n \r\n const words = new Array<{ start: number, end: number }>();\r\n \r\n let pos = 0;\r\n while (pos < text.length) \r\n {\r\n // advance pos until we get past non-word characters\r\n while (pos < text.length && this.classifyCharacter(text.charCodeAt(pos)) !== kCharClassWord)\r\n {\r\n pos++;\r\n }\r\n \r\n // break out of the loop if we got to the end\r\n if (pos == text.length)\r\n {\r\n break;\r\n }\r\n \r\n // set start of word\r\n const wordStart = pos++;\r\n \r\n // consume until a non-word is encountered\r\n while (pos < text.length && this.classifyCharacter(text.charCodeAt(pos)) !== kCharClassNonWord)\r\n {\r\n pos++;\r\n }\r\n \r\n // back over boundary (e.g. apostrophe) characters\r\n while (this.classifyCharacter(text.charCodeAt(pos - 1)) === kCharClassBoundary)\r\n {\r\n pos--;\r\n }\r\n \r\n // add word\r\n words.push({\r\n start: wordStart,\r\n end: pos\r\n });\r\n \r\n }\r\n \r\n return words;\r\n },\r\n\r\n }\r\n}\r\n\r\n\r\n","/*\r\n * text.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nexport function lines(text: string): string[] {\r\n return text.split(/\\r?\\n/);\r\n}\r\n\r\nexport function normalizeNewlines(text: string) {\r\n return lines(text).join(\"\\n\");\r\n}\r\n\r\nexport function capitalizeWord(str: string) {\r\n return str.slice(0, 1).toUpperCase() + str.slice(1);\r\n}\r\n\r\nexport function capitalizeTitle(str: string) {\r\n return str.split(/\\s+/).map((str, index, arr) => {\r\n if (\r\n index === 0 || index === (arr.length - 1) || !isNotCapitalized(str)\r\n ) {\r\n return capitalizeWord(str);\r\n } else {\r\n return str;\r\n }\r\n }).join(\" \");\r\n}\r\n\r\nfunction isNotCapitalized(str: string) {\r\n return [\r\n // articles\r\n \"a\",\r\n \"an\",\r\n \"the\",\r\n // coordinating conjunctions\r\n \"for\",\r\n \"and\",\r\n \"nor\",\r\n \"but\",\r\n \"or\",\r\n \"yet\",\r\n \"so\",\r\n // prepositions\r\n \"with\",\r\n \"at\",\r\n \"by\",\r\n \"to\",\r\n \"in\",\r\n \"for\",\r\n \"from\",\r\n \"of\",\r\n \"on\",\r\n ].includes(str);\r\n}\r\n\r\n\r\nexport function stripQuotes(text: string) {\r\n return text.replace(/[\"']/g, '');\r\n}\r\n\r\nexport function equalsIgnoreCase(str1: string, str2: string) {\r\n if (!str1 && !!str2) {\r\n return false;\r\n } else if (!!str1 && !str2) {\r\n return false;\r\n } else if (str1 === str2) {\r\n return true;\r\n } else {\r\n return str1.localeCompare(str2, undefined, { sensitivity: 'accent' }) === 0;\r\n }\r\n}\r\n\r\n\r\nexport function trimEmptyLines(\r\n lines: string[],\r\n trim: \"leading\" | \"trailing\" | \"all\" = \"all\",\r\n) {\r\n // trim leading lines\r\n if (trim === \"all\" || trim === \"leading\") {\r\n const firstNonEmpty = lines.findIndex((line) => line.trim().length > 0);\r\n if (firstNonEmpty === -1) {\r\n return [];\r\n }\r\n lines = lines.slice(firstNonEmpty);\r\n }\r\n\r\n // trim trailing lines\r\n if (trim === \"all\" || trim === \"trailing\") {\r\n let lastNonEmpty = -1;\r\n for (let i = lines.length - 1; i >= 0; i--) {\r\n if (lines[i].trim().length > 0) {\r\n lastNonEmpty = i;\r\n break;\r\n }\r\n }\r\n if (lastNonEmpty > -1) {\r\n lines = lines.slice(0, lastNonEmpty + 1);\r\n }\r\n }\r\n\r\n return lines;\r\n}\r\n","/*\r\n * strings.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport function escapeRegExpCharacters(value: string): string {\r\n return value.replace(/[\\\\{}*+?|^$.[\\]()]/g, \"\\\\$&\");\r\n}\r\n\r\nexport function shQuote(value: string): string {\r\n if (/\\s/g.test(value)) {\r\n return `\"${value}\"`;\r\n } else {\r\n return value;\r\n }\r\n}\r\n\r\nexport function winShEscape(value: string): string {\r\n return value.replace(\" \", \"^ \");\r\n}\r\n","/*\r\n * uri.ts\r\n *\r\n * Copyright (C) 2023 by Posit Software, PBC\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport function tryDecodeUri(str: string): string {\r\n\ttry {\r\n\t\treturn decodeURI(str);\r\n\t} catch {\r\n\t\treturn str;\r\n\t}\r\n}\r\n","/*\r\n * image.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#Common_image_file_types\r\nexport const kImageExtensions = [\r\n 'png',\r\n 'svg',\r\n 'jpg',\r\n 'jpeg',\r\n 'apng',\r\n 'bmp',\r\n 'gif',\r\n 'ico',\r\n 'cur',\r\n 'jfif',\r\n 'pjpeg',\r\n 'pjp',\r\n 'tif',\r\n 'tiff',\r\n 'webp',\r\n];","var clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n var filter;\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n filter = circular.filter;\n circular = circular.circular\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth == 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","var clone = require('clone');\n\nmodule.exports = function(options, defaults) {\n options = options || {};\n\n Object.keys(defaults).forEach(function(key) {\n if (typeof options[key] === 'undefined') {\n options[key] = clone(defaults[key]);\n }\n });\n\n return options;\n};","module.exports = [\n [ 0x0300, 0x036F ], [ 0x0483, 0x0486 ], [ 0x0488, 0x0489 ],\n [ 0x0591, 0x05BD ], [ 0x05BF, 0x05BF ], [ 0x05C1, 0x05C2 ],\n [ 0x05C4, 0x05C5 ], [ 0x05C7, 0x05C7 ], [ 0x0600, 0x0603 ],\n [ 0x0610, 0x0615 ], [ 0x064B, 0x065E ], [ 0x0670, 0x0670 ],\n [ 0x06D6, 0x06E4 ], [ 0x06E7, 0x06E8 ], [ 0x06EA, 0x06ED ],\n [ 0x070F, 0x070F ], [ 0x0711, 0x0711 ], [ 0x0730, 0x074A ],\n [ 0x07A6, 0x07B0 ], [ 0x07EB, 0x07F3 ], [ 0x0901, 0x0902 ],\n [ 0x093C, 0x093C ], [ 0x0941, 0x0948 ], [ 0x094D, 0x094D ],\n [ 0x0951, 0x0954 ], [ 0x0962, 0x0963 ], [ 0x0981, 0x0981 ],\n [ 0x09BC, 0x09BC ], [ 0x09C1, 0x09C4 ], [ 0x09CD, 0x09CD ],\n [ 0x09E2, 0x09E3 ], [ 0x0A01, 0x0A02 ], [ 0x0A3C, 0x0A3C ],\n [ 0x0A41, 0x0A42 ], [ 0x0A47, 0x0A48 ], [ 0x0A4B, 0x0A4D ],\n [ 0x0A70, 0x0A71 ], [ 0x0A81, 0x0A82 ], [ 0x0ABC, 0x0ABC ],\n [ 0x0AC1, 0x0AC5 ], [ 0x0AC7, 0x0AC8 ], [ 0x0ACD, 0x0ACD ],\n [ 0x0AE2, 0x0AE3 ], [ 0x0B01, 0x0B01 ], [ 0x0B3C, 0x0B3C ],\n [ 0x0B3F, 0x0B3F ], [ 0x0B41, 0x0B43 ], [ 0x0B4D, 0x0B4D ],\n [ 0x0B56, 0x0B56 ], [ 0x0B82, 0x0B82 ], [ 0x0BC0, 0x0BC0 ],\n [ 0x0BCD, 0x0BCD ], [ 0x0C3E, 0x0C40 ], [ 0x0C46, 0x0C48 ],\n [ 0x0C4A, 0x0C4D ], [ 0x0C55, 0x0C56 ], [ 0x0CBC, 0x0CBC ],\n [ 0x0CBF, 0x0CBF ], [ 0x0CC6, 0x0CC6 ], [ 0x0CCC, 0x0CCD ],\n [ 0x0CE2, 0x0CE3 ], [ 0x0D41, 0x0D43 ], [ 0x0D4D, 0x0D4D ],\n [ 0x0DCA, 0x0DCA ], [ 0x0DD2, 0x0DD4 ], [ 0x0DD6, 0x0DD6 ],\n [ 0x0E31, 0x0E31 ], [ 0x0E34, 0x0E3A ], [ 0x0E47, 0x0E4E ],\n [ 0x0EB1, 0x0EB1 ], [ 0x0EB4, 0x0EB9 ], [ 0x0EBB, 0x0EBC ],\n [ 0x0EC8, 0x0ECD ], [ 0x0F18, 0x0F19 ], [ 0x0F35, 0x0F35 ],\n [ 0x0F37, 0x0F37 ], [ 0x0F39, 0x0F39 ], [ 0x0F71, 0x0F7E ],\n [ 0x0F80, 0x0F84 ], [ 0x0F86, 0x0F87 ], [ 0x0F90, 0x0F97 ],\n [ 0x0F99, 0x0FBC ], [ 0x0FC6, 0x0FC6 ], [ 0x102D, 0x1030 ],\n [ 0x1032, 0x1032 ], [ 0x1036, 0x1037 ], [ 0x1039, 0x1039 ],\n [ 0x1058, 0x1059 ], [ 0x1160, 0x11FF ], [ 0x135F, 0x135F ],\n [ 0x1712, 0x1714 ], [ 0x1732, 0x1734 ], [ 0x1752, 0x1753 ],\n [ 0x1772, 0x1773 ], [ 0x17B4, 0x17B5 ], [ 0x17B7, 0x17BD ],\n [ 0x17C6, 0x17C6 ], [ 0x17C9, 0x17D3 ], [ 0x17DD, 0x17DD ],\n [ 0x180B, 0x180D ], [ 0x18A9, 0x18A9 ], [ 0x1920, 0x1922 ],\n [ 0x1927, 0x1928 ], [ 0x1932, 0x1932 ], [ 0x1939, 0x193B ],\n [ 0x1A17, 0x1A18 ], [ 0x1B00, 0x1B03 ], [ 0x1B34, 0x1B34 ],\n [ 0x1B36, 0x1B3A ], [ 0x1B3C, 0x1B3C ], [ 0x1B42, 0x1B42 ],\n [ 0x1B6B, 0x1B73 ], [ 0x1DC0, 0x1DCA ], [ 0x1DFE, 0x1DFF ],\n [ 0x200B, 0x200F ], [ 0x202A, 0x202E ], [ 0x2060, 0x2063 ],\n [ 0x206A, 0x206F ], [ 0x20D0, 0x20EF ], [ 0x302A, 0x302F ],\n [ 0x3099, 0x309A ], [ 0xA806, 0xA806 ], [ 0xA80B, 0xA80B ],\n [ 0xA825, 0xA826 ], [ 0xFB1E, 0xFB1E ], [ 0xFE00, 0xFE0F ],\n [ 0xFE20, 0xFE23 ], [ 0xFEFF, 0xFEFF ], [ 0xFFF9, 0xFFFB ],\n [ 0x10A01, 0x10A03 ], [ 0x10A05, 0x10A06 ], [ 0x10A0C, 0x10A0F ],\n [ 0x10A38, 0x10A3A ], [ 0x10A3F, 0x10A3F ], [ 0x1D167, 0x1D169 ],\n [ 0x1D173, 0x1D182 ], [ 0x1D185, 0x1D18B ], [ 0x1D1AA, 0x1D1AD ],\n [ 0x1D242, 0x1D244 ], [ 0xE0001, 0xE0001 ], [ 0xE0020, 0xE007F ],\n [ 0xE0100, 0xE01EF ]\n]\n","\"use strict\"\n\nvar defaults = require('defaults')\nvar combining = require('./combining')\n\nvar DEFAULTS = {\n nul: 0,\n control: 0\n}\n\nmodule.exports = function wcwidth(str) {\n return wcswidth(str, DEFAULTS)\n}\n\nmodule.exports.config = function(opts) {\n opts = defaults(opts || {}, DEFAULTS)\n return function wcwidth(str) {\n return wcswidth(str, opts)\n }\n}\n\n/*\n * The following functions define the column width of an ISO 10646\n * character as follows:\n * - The null character (U+0000) has a column width of 0.\n * - Other C0/C1 control characters and DEL will lead to a return value\n * of -1.\n * - Non-spacing and enclosing combining characters (general category\n * code Mn or Me in the\n * Unicode database) have a column width of 0.\n * - SOFT HYPHEN (U+00AD) has a column width of 1.\n * - Other format characters (general category code Cf in the Unicode\n * database) and ZERO WIDTH\n * SPACE (U+200B) have a column width of 0.\n * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF)\n * have a column width of 0.\n * - Spacing characters in the East Asian Wide (W) or East Asian\n * Full-width (F) category as\n * defined in Unicode Technical Report #11 have a column width of 2.\n * - All remaining characters (including all printable ISO 8859-1 and\n * WGL4 characters, Unicode control characters, etc.) have a column\n * width of 1.\n * This implementation assumes that characters are encoded in ISO 10646.\n*/\n\nfunction wcswidth(str, opts) {\n if (typeof str !== 'string') return wcwidth(str, opts)\n\n var s = 0\n for (var i = 0; i < str.length; i++) {\n var n = wcwidth(str.charCodeAt(i), opts)\n if (n < 0) return -1\n s += n\n }\n\n return s\n}\n\nfunction wcwidth(ucs, opts) {\n // test for 8-bit control characters\n if (ucs === 0) return opts.nul\n if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return opts.control\n\n // binary search in table of non-spacing characters\n if (bisearch(ucs)) return 0\n\n // if we arrive here, ucs is not a combining or C0/C1 control character\n return 1 +\n (ucs >= 0x1100 &&\n (ucs <= 0x115f || // Hangul Jamo init. consonants\n ucs == 0x2329 || ucs == 0x232a ||\n (ucs >= 0x2e80 && ucs <= 0xa4cf &&\n ucs != 0x303f) || // CJK ... Yi\n (ucs >= 0xac00 && ucs <= 0xd7a3) || // Hangul Syllables\n (ucs >= 0xf900 && ucs <= 0xfaff) || // CJK Compatibility Ideographs\n (ucs >= 0xfe10 && ucs <= 0xfe19) || // Vertical forms\n (ucs >= 0xfe30 && ucs <= 0xfe6f) || // CJK Compatibility Forms\n (ucs >= 0xff00 && ucs <= 0xff60) || // Fullwidth Forms\n (ucs >= 0xffe0 && ucs <= 0xffe6) ||\n (ucs >= 0x20000 && ucs <= 0x2fffd) ||\n (ucs >= 0x30000 && ucs <= 0x3fffd)));\n}\n\nfunction bisearch(ucs) {\n var min = 0\n var max = combining.length - 1\n var mid\n\n if (ucs < combining[0][0] || ucs > combining[max][1]) return false\n\n while (max >= min) {\n mid = Math.floor((min + max) / 2)\n if (ucs > combining[mid][1]) min = mid + 1\n else if (ucs < combining[mid][0]) max = mid - 1\n else return true\n }\n\n return false\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/lib/maps/entities.json');\n","module.exports=/[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n var i, ch, cache = encodeCache[exclude];\n if (cache) { return cache; }\n\n cache = encodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch);\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n }\n }\n\n for (i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i];\n }\n\n return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n var i, l, code, nextCode, cache,\n result = '';\n\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude;\n exclude = encode.defaultChars;\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true;\n }\n\n cache = getEncodeCache(exclude);\n\n for (i = 0, l = string.length; i < l; i++) {\n code = string.charCodeAt(i);\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3);\n i += 2;\n continue;\n }\n }\n\n if (code < 128) {\n result += cache[code];\n continue;\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n nextCode = string.charCodeAt(i + 1);\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1]);\n i++;\n continue;\n }\n }\n result += '%EF%BF%BD';\n continue;\n }\n\n result += encodeURIComponent(string[i]);\n }\n\n return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n","\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n var i, ch, cache = decodeCache[exclude];\n if (cache) { return cache; }\n\n cache = decodeCache[exclude] = [];\n\n for (i = 0; i < 128; i++) {\n ch = String.fromCharCode(i);\n cache.push(ch);\n }\n\n for (i = 0; i < exclude.length; i++) {\n ch = exclude.charCodeAt(i);\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n }\n\n return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n var cache;\n\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars;\n }\n\n cache = getDecodeCache(exclude);\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n var i, l, b1, b2, b3, b4, chr,\n result = '';\n\n for (i = 0, l = seq.length; i < l; i += 3) {\n b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n if (b1 < 0x80) {\n result += cache[b1];\n continue;\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n if ((b2 & 0xC0) === 0x80) {\n chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 3;\n continue;\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd';\n } else {\n result += String.fromCharCode(chr);\n }\n\n i += 6;\n continue;\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n } else {\n chr -= 0x10000;\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n }\n\n i += 9;\n continue;\n }\n }\n\n result += '\\ufffd';\n }\n\n return result;\n });\n}\n\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n","\n'use strict';\n\n\nmodule.exports = function format(url) {\n var result = '';\n\n result += url.protocol || '';\n result += url.slashes ? '//' : '';\n result += url.auth ? url.auth + '@' : '';\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']';\n } else {\n result += url.hostname || '';\n }\n\n result += url.port ? ':' + url.port : '';\n result += url.pathname || '';\n result += url.search || '';\n result += url.hash || '';\n\n return result;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = [ '\\'' ].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n hostEndingChars = [ '/', '?', '#' ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n /* eslint-disable no-script-url */\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n if (url && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n var i, l, lowerProto, hec, slashes,\n rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n lowerProto = proto.toLowerCase();\n this.protocol = proto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = auth;\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec;\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length;\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd--; }\n var host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost(host);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n rest = rest.slice(0, qm);\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '';\n }\n\n return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n","'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');\n","module.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","module.exports=/[\\0-\\x1F\\x7F-\\x9F]/","module.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","module.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');\n","// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n\n sources.forEach(function (source) {\n if (!source) { return; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object');\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key];\n });\n });\n\n return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n /*eslint no-bitwise:0*/\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false; }\n if (c === 0x0B) { return false; }\n if (c >= 0x0E && c <= 0x1F) { return false; }\n if (c >= 0x7F && c <= 0x9F) { return false; }\n // out of range\n if (c > 0x10FFFF) { return false; }\n return true;\n}\n\nfunction fromCodePoint(c) {\n /*eslint no-bitwise:0*/\n if (c > 0xffff) {\n c -= 0x10000;\n var surrogate1 = 0xd800 + (c >> 10),\n surrogate2 = 0xdc00 + (c & 0x3ff);\n\n return String.fromCharCode(surrogate1, surrogate2);\n }\n return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n var code = 0;\n\n if (has(entities, name)) {\n return entities[name];\n }\n\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n code = name[1].toLowerCase() === 'x' ?\n parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code);\n }\n }\n\n return match;\n}\n\n/*function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n if (str.indexOf('\\\\') < 0) { return str; }\n return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped; }\n return replaceEntityPattern(match, entity);\n });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"'\n};\n\nfunction replaceUnsafeChar(ch) {\n return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n }\n return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true;\n }\n return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n if (code >= 0x2000 && code <= 0x200A) { return true; }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true;\n }\n return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true;\n default:\n return false;\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ');\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß');\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\n\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint;\n// exports.replaceEntities = replaceEntities;\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;\n","/*\r\n * scroll.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findDomRefAtPos, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\r\n\r\nimport zenscroll from 'zenscroll';\r\n\r\nimport { editingRootNodeClosestToPos, editingRootNode } from './node';\r\n\r\nexport function scrollIntoView(\r\n view: EditorView,\r\n pos: number,\r\n center = true,\r\n duration?: number,\r\n offset?: number,\r\n onDone?: VoidFunction,\r\n) {\r\n // resolve position and determine container\r\n const $pos = view.state.doc.resolve(pos);\r\n const container = editingRootNodeClosestToPos($pos);\r\n\r\n // if we have a container then do the scroll\r\n if (container) {\r\n const schema = view.state.schema;\r\n const containerEl = view.nodeDOM(container.pos) as HTMLElement;\r\n const parentList = findParentNodeOfTypeClosestToPos($pos, [schema.nodes.ordered_list, schema.nodes.bullet_list]);\r\n const parentDiv = schema.nodes.div ? findParentNodeOfTypeClosestToPos($pos, schema.nodes.div) : undefined;\r\n const resultPos = (parentList || parentDiv) ? $pos.before(2) : pos;\r\n const resultNode = findDomRefAtPos(resultPos, view.domAtPos.bind(view))\r\n if (resultNode) {\r\n const scrollNode = resultNode instanceof HTMLElement ? resultNode : resultNode.parentElement;\r\n if (scrollNode) {\r\n const scroller = zenscroll.createScroller(editorScrollContainer(containerEl), duration, offset);\r\n if (center) {\r\n scroller.center(scrollNode, duration, offset, onDone);\r\n } else {\r\n scroller.intoView(scrollNode, duration, onDone);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function scrollToPos(view: EditorView, pos: number, duration?: number, offset?: number, onDone?: VoidFunction) {\r\n const node = view.nodeDOM(pos);\r\n const scrollNode = node instanceof HTMLElement ? node : node?.parentElement;\r\n if (scrollNode) {\r\n const editingRoot = editingRootNode(view.state.selection)!;\r\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n const scroller = zenscroll.createScroller(editorScrollContainer(container), duration, offset);\r\n if (duration) {\r\n scroller.to(scrollNode, duration, onDone);\r\n } else {\r\n scroller.to(scrollNode, 0, onDone);\r\n }\r\n }\r\n}\r\n\r\nexport const kPmScrollContainer = 'pm-scroll-container';\r\n\r\nexport function editorScrollContainer(container: HTMLElement) : HTMLElement {\r\n return (container.closest(`.${kPmScrollContainer}`)|| container) as HTMLElement;\r\n}","/*\r\n * text.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nexport interface TextWithPos {\r\n readonly text: string;\r\n readonly pos: number;\r\n}\r\n\r\nexport function mergedTextNodes(\r\n doc: ProsemirrorNode,\r\n filter?: (node: ProsemirrorNode, pos: number, parentNode: ProsemirrorNode | null) => boolean,\r\n): TextWithPos[] {\r\n const textNodes: TextWithPos[] = [];\r\n let nodeIndex = 0;\r\n doc.descendants((node, pos, parentNode) => {\r\n if (node.isText) {\r\n // apply filter\r\n if (filter && !filter(node, pos, parentNode)) {\r\n return false;\r\n }\r\n\r\n // join existing contiguous range of text nodes or create a new one\r\n if (textNodes[nodeIndex]) {\r\n textNodes[nodeIndex] = {\r\n text: textNodes[nodeIndex].text + node.text,\r\n pos: textNodes[nodeIndex].pos,\r\n };\r\n } else {\r\n textNodes[nodeIndex] = {\r\n text: node.text || '',\r\n pos,\r\n };\r\n }\r\n } else {\r\n nodeIndex += 1;\r\n }\r\n return true;\r\n });\r\n return textNodes;\r\n}\r\n\r\n","/*\r\n * mark.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Mark, MarkSpec, MarkType, ResolvedPos, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState, Selection, Transaction } from 'prosemirror-state';\r\n\r\nimport { PandocTokenReader, PandocMarkWriterFn, PandocInlineHTMLReaderFn, PandocTokensFilterFn } from './pandoc';\r\nimport { mergedTextNodes } from './text';\r\nimport { findChildrenByMark } from 'prosemirror-utils';\r\nimport { MarkTransaction } from './transaction';\r\n\r\nexport interface PandocMark {\r\n readonly name: string;\r\n readonly spec: MarkSpec;\r\n readonly noInputRules?: boolean;\r\n readonly noSpelling?: boolean;\r\n readonly pandoc: {\r\n readonly readers: readonly PandocTokenReader[];\r\n readonly inlineHTMLReader?: PandocInlineHTMLReaderFn;\r\n readonly tokensFilter?: PandocTokensFilterFn;\r\n readonly writer: {\r\n priority: number;\r\n write: PandocMarkWriterFn;\r\n };\r\n };\r\n}\r\n\r\nexport function domAttrNoSpelling(attrs: Record<string,unknown>) {\r\n return { ...attrs, spellcheck: \"false\" };\r\n}\r\n\r\nexport function markIsActive(context: EditorState | Transaction, type: MarkType) {\r\n const { from, $from, to, empty } = context.selection;\r\n\r\n if (empty) {\r\n return type && !!type.isInSet(context.storedMarks || $from.marks());\r\n }\r\n\r\n return !!context.doc.rangeHasMark(from, to, type);\r\n}\r\n\r\nexport function getMarkAttrs(doc: ProsemirrorNode, range: { from: number; to: number }, type: MarkType) {\r\n const { from, to } = range;\r\n let marks: Mark[] = [];\r\n\r\n doc.nodesBetween(from, to, node => {\r\n marks = [...marks, ...node.marks];\r\n });\r\n\r\n const mark = marks.find(markItem => markItem.type.name === type.name);\r\n\r\n if (mark) {\r\n return mark.attrs;\r\n }\r\n\r\n return {};\r\n}\r\n\r\nexport function getMarkRange($pos?: ResolvedPos, type?: MarkType) {\r\n if (!$pos || !type) {\r\n return false;\r\n }\r\n\r\n const start = $pos.parent.childAfter($pos.parentOffset);\r\n\r\n if (!start.node) {\r\n return false;\r\n }\r\n\r\n const link = start.node.marks.find((mark: Mark) => mark.type === type);\r\n if (!link) {\r\n return false;\r\n }\r\n\r\n let startIndex = $pos.index();\r\n let startPos = $pos.start() + start.offset;\r\n let endIndex = startIndex + 1;\r\n let endPos = startPos + start.node.nodeSize;\r\n\r\n while (startIndex > 0 && link.isInSet($pos.parent.child(startIndex - 1).marks)) {\r\n startIndex -= 1;\r\n startPos -= $pos.parent.child(startIndex).nodeSize;\r\n }\r\n\r\n while (endIndex < $pos.parent.childCount && link.isInSet($pos.parent.child(endIndex).marks)) {\r\n endPos += $pos.parent.child(endIndex).nodeSize;\r\n endIndex += 1;\r\n }\r\n\r\n return { from: startPos, to: endPos };\r\n}\r\n\r\nexport function getSelectionMarkRange(selection: Selection, markType: MarkType): { from: number; to: number } {\r\n let range: { from: number; to: number };\r\n if (selection.empty) {\r\n range = getMarkRange(selection.$head, markType) as { from: number; to: number };\r\n } else {\r\n range = { from: selection.from, to: selection.to };\r\n }\r\n return range;\r\n}\r\n\r\nexport function removeInvalidatedMarks(\r\n tr: MarkTransaction,\r\n node: ProsemirrorNode,\r\n pos: number,\r\n re: RegExp,\r\n markType: MarkType,\r\n) {\r\n re.lastIndex = 0;\r\n const markedNodes = findChildrenByMark(node, markType, true);\r\n markedNodes.forEach(markedNode => {\r\n const from = pos + 1 + markedNode.pos;\r\n const markedRange = getMarkRange(tr.doc.resolve(from), markType);\r\n if (markedRange) {\r\n const text = tr.doc.textBetween(markedRange.from, markedRange.to);\r\n if (!text.match(re)) {\r\n tr.removeMark(markedRange.from, markedRange.to, markType);\r\n tr.removeStoredMark(markType);\r\n }\r\n }\r\n });\r\n re.lastIndex = 0;\r\n}\r\n\r\nexport function splitInvalidatedMarks(\r\n tr: MarkTransaction,\r\n node: ProsemirrorNode,\r\n pos: number,\r\n validLength: (text: string) => number,\r\n markType: MarkType,\r\n removeMark?: (from: number, to: number) => void,\r\n) {\r\n const hasMarkType = (nd: ProsemirrorNode) => markType.isInSet(nd.marks);\r\n const markedNodes = findChildrenByMark(node, markType, true);\r\n\r\n const remove = (from: number, to: number, type: MarkType) => {\r\n if (removeMark) {\r\n removeMark(from, to);\r\n } else {\r\n tr.removeMark(from, to, type);\r\n }\r\n };\r\n\r\n markedNodes.forEach(markedNode => {\r\n const mark = hasMarkType(markedNode.node);\r\n if (mark) {\r\n const from = pos + 1 + markedNode.pos;\r\n const markRange = getMarkRange(tr.doc.resolve(from), markType);\r\n if (markRange) {\r\n const text = tr.doc.textBetween(markRange.from, markRange.to);\r\n\r\n // Trim any leading space and count how much we trimmed\r\n const trimmedText = text.trimStart();\r\n const countSpace = text.length - trimmedText.length;\r\n\r\n // Remove the mark from any trimmed space at the start\r\n if (countSpace > 0) {\r\n remove(markRange.from, markRange.from + countSpace, markType);\r\n }\r\n\r\n // find the valid length of the text and remove the mark from \r\n // anything after the end of the valid length\r\n const length = validLength(trimmedText);\r\n if (length > -1 && length !== text.length) {\r\n remove(markRange.from + length + countSpace, markRange.to, markType);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport function detectAndApplyMarks(\r\n tr: MarkTransaction,\r\n node: ProsemirrorNode,\r\n pos: number,\r\n re: RegExp,\r\n markType: MarkType,\r\n attrs: (match: RegExpMatchArray) => Record<string,unknown>,\r\n filter?: (from: number, to: number) => boolean,\r\n text?: (match: RegExpMatchArray) => string,\r\n) {\r\n re.lastIndex = 0;\r\n const textNodes = mergedTextNodes(node, (_node: ProsemirrorNode, _pos: number, parentNode: ProsemirrorNode | null) =>\r\n !!(parentNode && parentNode.type.allowsMarkType(markType))\r\n );\r\n textNodes.forEach(textNode => {\r\n re.lastIndex = 0;\r\n let match = re.exec(textNode.text);\r\n while (match !== null) {\r\n const refText = text ? text(match) : match[0];\r\n const from = pos + 1 + textNode.pos + match.index + (match[0].length - refText.length);\r\n const to = from + refText.length;\r\n const range = getMarkRange(tr.doc.resolve(to), markType);\r\n if (\r\n (!range || range.from !== from || range.to !== to) &&\r\n !tr.doc.rangeHasMark(from, to, markType.schema.marks.code)\r\n ) {\r\n if (!filter || filter(from, to)) {\r\n const mark = markType.create(attrs instanceof Function ? attrs(match) : attrs);\r\n tr.addMark(from, to, mark);\r\n if (tr.selection.anchor === to) {\r\n tr.removeStoredMark(mark.type);\r\n }\r\n }\r\n }\r\n match = re.lastIndex !== 0 ? re.exec(textNode.text) : null;\r\n }\r\n });\r\n re.lastIndex = 0;\r\n}\r\n","/*\r\n * list.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Transaction, Selection } from 'prosemirror-state';\r\n\r\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\r\n\r\n\r\nexport function isList(node: ProsemirrorNode | null | undefined) {\r\n if (node) {\r\n const schema = node.type.schema;\r\n return node.type === schema.nodes.bullet_list || node.type === schema.nodes.ordered_list;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function precedingListItemInsertPos(doc: ProsemirrorNode, selection: Selection) {\r\n // selection just be empty\r\n if (!selection.empty) {\r\n return null;\r\n }\r\n\r\n // check for insert position in preceding list item (only trigger when\r\n // the user is at the very beginning of a new bullet)\r\n const schema = doc.type.schema;\r\n const $head = selection.$head;\r\n const parentListItem = findParentNodeOfType(schema.nodes.list_item)(selection);\r\n if (parentListItem) {\r\n const $liPos = doc.resolve(parentListItem.pos);\r\n const listIndex = $liPos.index();\r\n const parentIndex = $head.index($head.depth - 1);\r\n const parentOffset = $head.parentOffset;\r\n if (listIndex > 0 && parentIndex === 0 && parentOffset === 0) {\r\n const pos = $liPos.pos - 1;\r\n return pos;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function precedingListItemInsert(tr: Transaction, pos: number, node: ProsemirrorNode) {\r\n tr.deleteRange(tr.selection.from, tr.selection.from + 1);\r\n tr.insert(pos, node);\r\n setTextSelection(tr.mapping.map(pos), -1)(tr);\r\n return tr;\r\n}\r\n","import { liftTarget, replaceStep, canJoin, joinPoint, canSplit, ReplaceAroundStep, findWrapping } from 'prosemirror-transform';\nimport { Slice, Fragment } from 'prosemirror-model';\nimport { NodeSelection, Selection, TextSelection, AllSelection } from 'prosemirror-state';\n\n/**\nDelete the selection, if there is one.\n*/\nconst deleteSelection = (state, dispatch) => {\n if (state.selection.empty)\n return false;\n if (dispatch)\n dispatch(state.tr.deleteSelection().scrollIntoView());\n return true;\n};\nfunction atBlockStart(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"backward\", state)\n : $cursor.parentOffset > 0))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and at the start of a textblock, try to\nreduce the distance between that block and the one before it—if\nthere's a block directly before it that can be joined, join them.\nIf not, try to move the selected block closer to the next one in\nthe document structure by lifting it out of its parent or moving it\ninto a parent of the previous block. Will use the view for accurate\n(bidi-aware) start-of-textblock detection if given.\n*/\nconst joinBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n // If there is no node before this, try to lift\n if (!$cut) {\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n let before = $cut.nodeBefore;\n // Apply the joining algorithm\n if (!before.type.spec.isolating && deleteBarrier(state, $cut, dispatch))\n return true;\n // If the node below has no content and the node above is\n // selectable, delete the node below and select the one above.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(before, \"end\") || NodeSelection.isSelectable(before))) {\n let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(before, \"end\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos, -1)), -1)\n : NodeSelection.create(tr.doc, $cut.pos - before.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n // If the node before is an atom, delete it\n if (before.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos - before.nodeSize, $cut.pos).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nA more limited form of [`joinBackward`]($commands.joinBackward)\nthat only tries to join the current textblock to the one before\nit, if the cursor is at the start of a textblock.\n*/\nconst joinTextblockBackward = (state, dispatch, view) => {\n let $cursor = atBlockStart(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutBefore($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\n/**\nA more limited form of [`joinForward`]($commands.joinForward)\nthat only tries to join the current textblock to the one after\nit, if the cursor is at the end of a textblock.\n*/\nconst joinTextblockForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n return $cut ? joinTextblocksAround(state, $cut, dispatch) : false;\n};\nfunction joinTextblocksAround(state, $cut, dispatch) {\n let before = $cut.nodeBefore, beforeText = before, beforePos = $cut.pos - 1;\n for (; !beforeText.isTextblock; beforePos--) {\n if (beforeText.type.spec.isolating)\n return false;\n let child = beforeText.lastChild;\n if (!child)\n return false;\n beforeText = child;\n }\n let after = $cut.nodeAfter, afterText = after, afterPos = $cut.pos + 1;\n for (; !afterText.isTextblock; afterPos++) {\n if (afterText.type.spec.isolating)\n return false;\n let child = afterText.firstChild;\n if (!child)\n return false;\n afterText = child;\n }\n let step = replaceStep(state.doc, beforePos, afterPos, Slice.empty);\n if (!step || step.from != beforePos || step.slice.size >= afterPos - beforePos)\n return false;\n if (dispatch) {\n let tr = state.tr.step(step);\n tr.setSelection(TextSelection.create(tr.doc, beforePos));\n dispatch(tr.scrollIntoView());\n }\n return true;\n}\nfunction textblockAt(node, side, only = false) {\n for (let scan = node; scan; scan = (side == \"start\" ? scan.firstChild : scan.lastChild)) {\n if (scan.isTextblock)\n return true;\n if (only && scan.childCount != 1)\n return false;\n }\n return false;\n}\n/**\nWhen the selection is empty and at the start of a textblock, select\nthe node before that textblock, if possible. This is intended to be\nbound to keys like backspace, after\n[`joinBackward`](https://prosemirror.net/docs/ref/#commands.joinBackward) or other deleting\ncommands, as a fall-back behavior when the schema doesn't allow\ndeletion at the selected point.\n*/\nconst selectNodeBackward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"backward\", state) : $head.parentOffset > 0)\n return false;\n $cut = findCutBefore($head);\n }\n let node = $cut && $cut.nodeBefore;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos - node.nodeSize)).scrollIntoView());\n return true;\n};\nfunction findCutBefore($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n if ($pos.index(i) > 0)\n return $pos.doc.resolve($pos.before(i + 1));\n if ($pos.node(i).type.spec.isolating)\n break;\n }\n return null;\n}\nfunction atBlockEnd(state, view) {\n let { $cursor } = state.selection;\n if (!$cursor || (view ? !view.endOfTextblock(\"forward\", state)\n : $cursor.parentOffset < $cursor.parent.content.size))\n return null;\n return $cursor;\n}\n/**\nIf the selection is empty and the cursor is at the end of a\ntextblock, try to reduce or remove the boundary between that block\nand the one after it, either by joining them or by moving the other\nblock closer to this one in the tree structure. Will use the view\nfor accurate start-of-textblock detection if given.\n*/\nconst joinForward = (state, dispatch, view) => {\n let $cursor = atBlockEnd(state, view);\n if (!$cursor)\n return false;\n let $cut = findCutAfter($cursor);\n // If there is no node after this, there's nothing to do\n if (!$cut)\n return false;\n let after = $cut.nodeAfter;\n // Try the joining algorithm\n if (deleteBarrier(state, $cut, dispatch))\n return true;\n // If the node above has no content and the node below is\n // selectable, delete the node above and select the one below.\n if ($cursor.parent.content.size == 0 &&\n (textblockAt(after, \"start\") || NodeSelection.isSelectable(after))) {\n let delStep = replaceStep(state.doc, $cursor.before(), $cursor.after(), Slice.empty);\n if (delStep && delStep.slice.size < delStep.to - delStep.from) {\n if (dispatch) {\n let tr = state.tr.step(delStep);\n tr.setSelection(textblockAt(after, \"start\") ? Selection.findFrom(tr.doc.resolve(tr.mapping.map($cut.pos)), 1)\n : NodeSelection.create(tr.doc, tr.mapping.map($cut.pos)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n // If the next node is an atom, delete it\n if (after.isAtom && $cut.depth == $cursor.depth - 1) {\n if (dispatch)\n dispatch(state.tr.delete($cut.pos, $cut.pos + after.nodeSize).scrollIntoView());\n return true;\n }\n return false;\n};\n/**\nWhen the selection is empty and at the end of a textblock, select\nthe node coming after that textblock, if possible. This is intended\nto be bound to keys like delete, after\n[`joinForward`](https://prosemirror.net/docs/ref/#commands.joinForward) and similar deleting\ncommands, to provide a fall-back behavior when the schema doesn't\nallow deletion at the selected point.\n*/\nconst selectNodeForward = (state, dispatch, view) => {\n let { $head, empty } = state.selection, $cut = $head;\n if (!empty)\n return false;\n if ($head.parent.isTextblock) {\n if (view ? !view.endOfTextblock(\"forward\", state) : $head.parentOffset < $head.parent.content.size)\n return false;\n $cut = findCutAfter($head);\n }\n let node = $cut && $cut.nodeAfter;\n if (!node || !NodeSelection.isSelectable(node))\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, $cut.pos)).scrollIntoView());\n return true;\n};\nfunction findCutAfter($pos) {\n if (!$pos.parent.type.spec.isolating)\n for (let i = $pos.depth - 1; i >= 0; i--) {\n let parent = $pos.node(i);\n if ($pos.index(i) + 1 < parent.childCount)\n return $pos.doc.resolve($pos.after(i + 1));\n if (parent.type.spec.isolating)\n break;\n }\n return null;\n}\n/**\nJoin the selected block or, if there is a text selection, the\nclosest ancestor block of the selection that can be joined, with\nthe sibling above it.\n*/\nconst joinUp = (state, dispatch) => {\n let sel = state.selection, nodeSel = sel instanceof NodeSelection, point;\n if (nodeSel) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.from))\n return false;\n point = sel.from;\n }\n else {\n point = joinPoint(state.doc, sel.from, -1);\n if (point == null)\n return false;\n }\n if (dispatch) {\n let tr = state.tr.join(point);\n if (nodeSel)\n tr.setSelection(NodeSelection.create(tr.doc, point - state.doc.resolve(point).nodeBefore.nodeSize));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nJoin the selected block, or the closest ancestor of the selection\nthat can be joined, with the sibling after it.\n*/\nconst joinDown = (state, dispatch) => {\n let sel = state.selection, point;\n if (sel instanceof NodeSelection) {\n if (sel.node.isTextblock || !canJoin(state.doc, sel.to))\n return false;\n point = sel.to;\n }\n else {\n point = joinPoint(state.doc, sel.to, 1);\n if (point == null)\n return false;\n }\n if (dispatch)\n dispatch(state.tr.join(point).scrollIntoView());\n return true;\n};\n/**\nLift the selected block, or the closest ancestor block of the\nselection that can be lifted, out of its parent node.\n*/\nconst lift = (state, dispatch) => {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nIf the selection is in a node whose type has a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, replace the\nselection with a newline character.\n*/\nconst newlineInCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n if (dispatch)\n dispatch(state.tr.insertText(\"\\n\").scrollIntoView());\n return true;\n};\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i++) {\n let { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs())\n return type;\n }\n return null;\n}\n/**\nWhen the selection is in a node with a truthy\n[`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) property in its spec, create a\ndefault block after the code block, and move the cursor there.\n*/\nconst exitCode = (state, dispatch) => {\n let { $head, $anchor } = state.selection;\n if (!$head.parent.type.spec.code || !$head.sameParent($anchor))\n return false;\n let above = $head.node(-1), after = $head.indexAfter(-1), type = defaultBlockAt(above.contentMatchAt(after));\n if (!type || !above.canReplaceWith(after, after, type))\n return false;\n if (dispatch) {\n let pos = $head.after(), tr = state.tr.replaceWith(pos, pos, type.createAndFill());\n tr.setSelection(Selection.near(tr.doc.resolve(pos), 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf a block node is selected, create an empty paragraph before (if\nit is its parent's first child) or after it.\n*/\nconst createParagraphNear = (state, dispatch) => {\n let sel = state.selection, { $from, $to } = sel;\n if (sel instanceof AllSelection || $from.parent.inlineContent || $to.parent.inlineContent)\n return false;\n let type = defaultBlockAt($to.parent.contentMatchAt($to.indexAfter()));\n if (!type || !type.isTextblock)\n return false;\n if (dispatch) {\n let side = (!$from.parentOffset && $to.index() < $to.parent.childCount ? $from : $to).pos;\n let tr = state.tr.insert(side, type.createAndFill());\n tr.setSelection(TextSelection.create(tr.doc, side + 1));\n dispatch(tr.scrollIntoView());\n }\n return true;\n};\n/**\nIf the cursor is in an empty textblock that can be lifted, lift the\nblock.\n*/\nconst liftEmptyBlock = (state, dispatch) => {\n let { $cursor } = state.selection;\n if (!$cursor || $cursor.parent.content.size)\n return false;\n if ($cursor.depth > 1 && $cursor.after() != $cursor.end(-1)) {\n let before = $cursor.before();\n if (canSplit(state.doc, before)) {\n if (dispatch)\n dispatch(state.tr.split(before).scrollIntoView());\n return true;\n }\n }\n let range = $cursor.blockRange(), target = range && liftTarget(range);\n if (target == null)\n return false;\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n};\n/**\nCreate a variant of [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock) that uses\na custom function to determine the type of the newly split off block.\n*/\nfunction splitBlockAs(splitNode) {\n return (state, dispatch) => {\n let { $from, $to } = state.selection;\n if (state.selection instanceof NodeSelection && state.selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(state.doc, $from.pos))\n return false;\n if (dispatch)\n dispatch(state.tr.split($from.pos).scrollIntoView());\n return true;\n }\n if (!$from.parent.isBlock)\n return false;\n if (dispatch) {\n let atEnd = $to.parentOffset == $to.parent.content.size;\n let tr = state.tr;\n if (state.selection instanceof TextSelection || state.selection instanceof AllSelection)\n tr.deleteSelection();\n let deflt = $from.depth == 0 ? null : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let splitType = splitNode && splitNode($to.parent, atEnd);\n let types = splitType ? [splitType] : atEnd && deflt ? [{ type: deflt }] : undefined;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types && !can && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {\n if (deflt)\n types = [{ type: deflt }];\n can = true;\n }\n if (can) {\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (!atEnd && !$from.parentOffset && $from.parent.type != deflt) {\n let first = tr.mapping.map($from.before()), $first = tr.doc.resolve(first);\n if (deflt && $from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt))\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n };\n}\n/**\nSplit the parent block of the selection. If the selection is a text\nselection, also delete its content.\n*/\nconst splitBlock = splitBlockAs();\n/**\nActs like [`splitBlock`](https://prosemirror.net/docs/ref/#commands.splitBlock), but without\nresetting the set of active marks at the cursor.\n*/\nconst splitBlockKeepMarks = (state, dispatch) => {\n return splitBlock(state, dispatch && (tr => {\n let marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks)\n tr.ensureMarks(marks);\n dispatch(tr);\n }));\n};\n/**\nMove the selection to the node wrapping the current selection, if\nany. (Will not select the document node.)\n*/\nconst selectParentNode = (state, dispatch) => {\n let { $from, to } = state.selection, pos;\n let same = $from.sharedDepth(to);\n if (same == 0)\n return false;\n pos = $from.before(same);\n if (dispatch)\n dispatch(state.tr.setSelection(NodeSelection.create(state.doc, pos)));\n return true;\n};\n/**\nSelect the whole document.\n*/\nconst selectAll = (state, dispatch) => {\n if (dispatch)\n dispatch(state.tr.setSelection(new AllSelection(state.doc)));\n return true;\n};\nfunction joinMaybeClear(state, $pos, dispatch) {\n let before = $pos.nodeBefore, after = $pos.nodeAfter, index = $pos.index();\n if (!before || !after || !before.type.compatibleContent(after.type))\n return false;\n if (!before.content.size && $pos.parent.canReplace(index - 1, index)) {\n if (dispatch)\n dispatch(state.tr.delete($pos.pos - before.nodeSize, $pos.pos).scrollIntoView());\n return true;\n }\n if (!$pos.parent.canReplace(index, index + 1) || !(after.isTextblock || canJoin(state.doc, $pos.pos)))\n return false;\n if (dispatch)\n dispatch(state.tr\n .clearIncompatible($pos.pos, before.type, before.contentMatchAt(before.childCount))\n .join($pos.pos)\n .scrollIntoView());\n return true;\n}\nfunction deleteBarrier(state, $cut, dispatch) {\n let before = $cut.nodeBefore, after = $cut.nodeAfter, conn, match;\n if (before.type.spec.isolating || after.type.spec.isolating)\n return false;\n if (joinMaybeClear(state, $cut, dispatch))\n return true;\n let canDelAfter = $cut.parent.canReplace($cut.index(), $cut.index() + 1);\n if (canDelAfter &&\n (conn = (match = before.contentMatchAt(before.childCount)).findWrapping(after.type)) &&\n match.matchType(conn[0] || after.type).validEnd) {\n if (dispatch) {\n let end = $cut.pos + after.nodeSize, wrap = Fragment.empty;\n for (let i = conn.length - 1; i >= 0; i--)\n wrap = Fragment.from(conn[i].create(null, wrap));\n wrap = Fragment.from(before.copy(wrap));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice(wrap, 1, 0), conn.length, true));\n let joinAt = end + 2 * conn.length;\n if (canJoin(tr.doc, joinAt))\n tr.join(joinAt);\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let selAfter = Selection.findFrom($cut, 1);\n let range = selAfter && selAfter.$from.blockRange(selAfter.$to), target = range && liftTarget(range);\n if (target != null && target >= $cut.depth) {\n if (dispatch)\n dispatch(state.tr.lift(range, target).scrollIntoView());\n return true;\n }\n if (canDelAfter && textblockAt(after, \"start\", true) && textblockAt(before, \"end\")) {\n let at = before, wrap = [];\n for (;;) {\n wrap.push(at);\n if (at.isTextblock)\n break;\n at = at.lastChild;\n }\n let afterText = after, afterDepth = 1;\n for (; !afterText.isTextblock; afterText = afterText.firstChild)\n afterDepth++;\n if (at.canReplace(at.childCount, at.childCount, afterText.content)) {\n if (dispatch) {\n let end = Fragment.empty;\n for (let i = wrap.length - 1; i >= 0; i--)\n end = Fragment.from(wrap[i].copy(end));\n let tr = state.tr.step(new ReplaceAroundStep($cut.pos - wrap.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice(end, wrap.length, 0), 0, true));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n }\n return false;\n}\nfunction selectTextblockSide(side) {\n return function (state, dispatch) {\n let sel = state.selection, $pos = side < 0 ? sel.$from : sel.$to;\n let depth = $pos.depth;\n while ($pos.node(depth).isInline) {\n if (!depth)\n return false;\n depth--;\n }\n if (!$pos.node(depth).isTextblock)\n return false;\n if (dispatch)\n dispatch(state.tr.setSelection(TextSelection.create(state.doc, side < 0 ? $pos.start(depth) : $pos.end(depth))));\n return true;\n };\n}\n/**\nMoves the cursor to the start of current text block.\n*/\nconst selectTextblockStart = selectTextblockSide(-1);\n/**\nMoves the cursor to the end of current text block.\n*/\nconst selectTextblockEnd = selectTextblockSide(1);\n// Parameterized commands\n/**\nWrap the selection in a node of the given type with the given\nattributes.\n*/\nfunction wrapIn(nodeType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return false;\n if (dispatch)\n dispatch(state.tr.wrap(range, wrapping).scrollIntoView());\n return true;\n };\n}\n/**\nReturns a command that tries to set the selected textblocks to the\ngiven node type with the given attributes.\n*/\nfunction setBlockType(nodeType, attrs = null) {\n return function (state, dispatch) {\n let applicable = false;\n for (let i = 0; i < state.selection.ranges.length && !applicable; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (applicable)\n return false;\n if (!node.isTextblock || node.hasMarkup(nodeType, attrs))\n return;\n if (node.type == nodeType) {\n applicable = true;\n }\n else {\n let $pos = state.doc.resolve(pos), index = $pos.index();\n applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType);\n }\n });\n }\n if (!applicable)\n return false;\n if (dispatch) {\n let tr = state.tr;\n for (let i = 0; i < state.selection.ranges.length; i++) {\n let { $from: { pos: from }, $to: { pos: to } } = state.selection.ranges[i];\n tr.setBlockType(from, to, nodeType, attrs);\n }\n dispatch(tr.scrollIntoView());\n }\n return true;\n };\n}\nfunction markApplies(doc, ranges, type) {\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n let can = $from.depth == 0 ? doc.inlineContent && doc.type.allowsMarkType(type) : false;\n doc.nodesBetween($from.pos, $to.pos, node => {\n if (can)\n return false;\n can = node.inlineContent && node.type.allowsMarkType(type);\n });\n if (can)\n return true;\n }\n return false;\n}\n/**\nCreate a command function that toggles the given mark with the\ngiven attributes. Will return `false` when the current selection\ndoesn't support that mark. This will remove the mark if any marks\nof that type exist in the selection, or add it otherwise. If the\nselection is empty, this applies to the [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks) instead of a range of the\ndocument.\n*/\nfunction toggleMark(markType, attrs = null) {\n return function (state, dispatch) {\n let { empty, $cursor, ranges } = state.selection;\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType))\n return false;\n if (dispatch) {\n if ($cursor) {\n if (markType.isInSet(state.storedMarks || $cursor.marks()))\n dispatch(state.tr.removeStoredMark(markType));\n else\n dispatch(state.tr.addStoredMark(markType.create(attrs)));\n }\n else {\n let has = false, tr = state.tr;\n for (let i = 0; !has && i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n has = state.doc.rangeHasMark($from.pos, $to.pos, markType);\n }\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n if (has) {\n tr.removeMark($from.pos, $to.pos, markType);\n }\n else {\n let from = $from.pos, to = $to.pos, start = $from.nodeAfter, end = $to.nodeBefore;\n let spaceStart = start && start.isText ? /^\\s*/.exec(start.text)[0].length : 0;\n let spaceEnd = end && end.isText ? /\\s*$/.exec(end.text)[0].length : 0;\n if (from + spaceStart < to) {\n from += spaceStart;\n to -= spaceEnd;\n }\n tr.addMark(from, to, markType.create(attrs));\n }\n }\n dispatch(tr.scrollIntoView());\n }\n }\n return true;\n };\n}\nfunction wrapDispatchForJoin(dispatch, isJoinable) {\n return (tr) => {\n if (!tr.isGeneric)\n return dispatch(tr);\n let ranges = [];\n for (let i = 0; i < tr.mapping.maps.length; i++) {\n let map = tr.mapping.maps[i];\n for (let j = 0; j < ranges.length; j++)\n ranges[j] = map.map(ranges[j]);\n map.forEach((_s, _e, from, to) => ranges.push(from, to));\n }\n // Figure out which joinable points exist inside those ranges,\n // by checking all node boundaries in their parent nodes.\n let joinable = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = ranges[i], to = ranges[i + 1];\n let $from = tr.doc.resolve(from), depth = $from.sharedDepth(to), parent = $from.node(depth);\n for (let index = $from.indexAfter(depth), pos = $from.after(depth + 1); pos <= to; ++index) {\n let after = parent.maybeChild(index);\n if (!after)\n break;\n if (index && joinable.indexOf(pos) == -1) {\n let before = parent.child(index - 1);\n if (before.type == after.type && isJoinable(before, after))\n joinable.push(pos);\n }\n pos += after.nodeSize;\n }\n }\n // Join the joinable points\n joinable.sort((a, b) => a - b);\n for (let i = joinable.length - 1; i >= 0; i--) {\n if (canJoin(tr.doc, joinable[i]))\n tr.join(joinable[i]);\n }\n dispatch(tr);\n };\n}\n/**\nWrap a command so that, when it produces a transform that causes\ntwo joinable nodes to end up next to each other, those are joined.\nNodes are considered joinable when they are of the same type and\nwhen the `isJoinable` predicate returns true for them or, if an\narray of strings was passed, if their node type name is in that\narray.\n*/\nfunction autoJoin(command, isJoinable) {\n let canJoin = Array.isArray(isJoinable) ? (node) => isJoinable.indexOf(node.type.name) > -1\n : isJoinable;\n return (state, dispatch, view) => command(state, dispatch && wrapDispatchForJoin(dispatch, canJoin), view);\n}\n/**\nCombine a number of command functions into a single function (which\ncalls them one by one until one returns true).\n*/\nfunction chainCommands(...commands) {\n return function (state, dispatch, view) {\n for (let i = 0; i < commands.length; i++)\n if (commands[i](state, dispatch, view))\n return true;\n return false;\n };\n}\nlet backspace = chainCommands(deleteSelection, joinBackward, selectNodeBackward);\nlet del = chainCommands(deleteSelection, joinForward, selectNodeForward);\n/**\nA basic keymap containing bindings not specific to any schema.\nBinds the following keys (when multiple commands are listed, they\nare chained with [`chainCommands`](https://prosemirror.net/docs/ref/#commands.chainCommands)):\n\n* **Enter** to `newlineInCode`, `createParagraphNear`, `liftEmptyBlock`, `splitBlock`\n* **Mod-Enter** to `exitCode`\n* **Backspace** and **Mod-Backspace** to `deleteSelection`, `joinBackward`, `selectNodeBackward`\n* **Delete** and **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-Delete** to `deleteSelection`, `joinForward`, `selectNodeForward`\n* **Mod-a** to `selectAll`\n*/\nconst pcBaseKeymap = {\n \"Enter\": chainCommands(newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock),\n \"Mod-Enter\": exitCode,\n \"Backspace\": backspace,\n \"Mod-Backspace\": backspace,\n \"Shift-Backspace\": backspace,\n \"Delete\": del,\n \"Mod-Delete\": del,\n \"Mod-a\": selectAll\n};\n/**\nA copy of `pcBaseKeymap` that also binds **Ctrl-h** like Backspace,\n**Ctrl-d** like Delete, **Alt-Backspace** like Ctrl-Backspace, and\n**Ctrl-Alt-Backspace**, **Alt-Delete**, and **Alt-d** like\nCtrl-Delete.\n*/\nconst macBaseKeymap = {\n \"Ctrl-h\": pcBaseKeymap[\"Backspace\"],\n \"Alt-Backspace\": pcBaseKeymap[\"Mod-Backspace\"],\n \"Ctrl-d\": pcBaseKeymap[\"Delete\"],\n \"Ctrl-Alt-Backspace\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-Delete\": pcBaseKeymap[\"Mod-Delete\"],\n \"Alt-d\": pcBaseKeymap[\"Mod-Delete\"],\n \"Ctrl-a\": selectTextblockStart,\n \"Ctrl-e\": selectTextblockEnd\n};\nfor (let key in pcBaseKeymap)\n macBaseKeymap[key] = pcBaseKeymap[key];\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform)\n // @ts-ignore\n : typeof os != \"undefined\" && os.platform ? os.platform() == \"darwin\" : false;\n/**\nDepending on the detected platform, this will hold\n[`pcBasekeymap`](https://prosemirror.net/docs/ref/#commands.pcBaseKeymap) or\n[`macBaseKeymap`](https://prosemirror.net/docs/ref/#commands.macBaseKeymap).\n*/\nconst baseKeymap = mac ? macBaseKeymap : pcBaseKeymap;\n\nexport { autoJoin, baseKeymap, chainCommands, createParagraphNear, deleteSelection, exitCode, joinBackward, joinDown, joinForward, joinTextblockBackward, joinTextblockForward, joinUp, lift, liftEmptyBlock, macBaseKeymap, newlineInCode, pcBaseKeymap, selectAll, selectNodeBackward, selectNodeForward, selectParentNode, selectTextblockEnd, selectTextblockStart, setBlockType, splitBlock, splitBlockAs, splitBlockKeepMarks, toggleMark, wrapIn };\n","import { findWrapping, ReplaceAroundStep, canSplit, liftTarget, canJoin } from 'prosemirror-transform';\nimport { NodeRange, Fragment, Slice } from 'prosemirror-model';\nimport { Selection } from 'prosemirror-state';\n\nconst olDOM = [\"ol\", 0], ulDOM = [\"ul\", 0], liDOM = [\"li\", 0];\n/**\nAn ordered list [node spec](https://prosemirror.net/docs/ref/#model.NodeSpec). Has a single\nattribute, `order`, which determines the number at which the list\nstarts counting, and defaults to 1. Represented as an `<ol>`\nelement.\n*/\nconst orderedList = {\n attrs: { order: { default: 1 } },\n parseDOM: [{ tag: \"ol\", getAttrs(dom) {\n return { order: dom.hasAttribute(\"start\") ? +dom.getAttribute(\"start\") : 1 };\n } }],\n toDOM(node) {\n return node.attrs.order == 1 ? olDOM : [\"ol\", { start: node.attrs.order }, 0];\n }\n};\n/**\nA bullet list node spec, represented in the DOM as `<ul>`.\n*/\nconst bulletList = {\n parseDOM: [{ tag: \"ul\" }],\n toDOM() { return ulDOM; }\n};\n/**\nA list item (`<li>`) spec.\n*/\nconst listItem = {\n parseDOM: [{ tag: \"li\" }],\n toDOM() { return liDOM; },\n defining: true\n};\nfunction add(obj, props) {\n let copy = {};\n for (let prop in obj)\n copy[prop] = obj[prop];\n for (let prop in props)\n copy[prop] = props[prop];\n return copy;\n}\n/**\nConvenience function for adding list-related node types to a map\nspecifying the nodes for a schema. Adds\n[`orderedList`](https://prosemirror.net/docs/ref/#schema-list.orderedList) as `\"ordered_list\"`,\n[`bulletList`](https://prosemirror.net/docs/ref/#schema-list.bulletList) as `\"bullet_list\"`, and\n[`listItem`](https://prosemirror.net/docs/ref/#schema-list.listItem) as `\"list_item\"`.\n\n`itemContent` determines the content expression for the list items.\nIf you want the commands defined in this module to apply to your\nlist structure, it should have a shape like `\"paragraph block*\"` or\n`\"paragraph (ordered_list | bullet_list)*\"`. `listGroup` can be\ngiven to assign a group name to the list node types, for example\n`\"block\"`.\n*/\nfunction addListNodes(nodes, itemContent, listGroup) {\n return nodes.append({\n ordered_list: add(orderedList, { content: \"list_item+\", group: listGroup }),\n bullet_list: add(bulletList, { content: \"list_item+\", group: listGroup }),\n list_item: add(listItem, { content: itemContent })\n });\n}\n/**\nReturns a command function that wraps the selection in a list with\nthe given type an attributes. If `dispatch` is null, only return a\nvalue to indicate whether this is possible, but don't actually\nperform the change.\n*/\nfunction wrapInList(listType, attrs = null) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to), doJoin = false, outerRange = range;\n if (!range)\n return false;\n // This is at the top of an existing list item\n if (range.depth >= 2 && $from.node(range.depth - 1).type.compatibleContent(listType) && range.startIndex == 0) {\n // Don't do anything if this is the top of the list\n if ($from.index(range.depth - 1) == 0)\n return false;\n let $insert = state.doc.resolve(range.start - 2);\n outerRange = new NodeRange($insert, $insert, range.depth);\n if (range.endIndex < range.parent.childCount)\n range = new NodeRange($from, state.doc.resolve($to.end(range.depth)), range.depth);\n doJoin = true;\n }\n let wrap = findWrapping(outerRange, listType, attrs, range);\n if (!wrap)\n return false;\n if (dispatch)\n dispatch(doWrapInList(state.tr, range, wrap, doJoin, listType).scrollIntoView());\n return true;\n };\n}\nfunction doWrapInList(tr, range, wrappers, joinBefore, listType) {\n let content = Fragment.empty;\n for (let i = wrappers.length - 1; i >= 0; i--)\n content = Fragment.from(wrappers[i].type.create(wrappers[i].attrs, content));\n tr.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice(content, 0, 0), wrappers.length, true));\n let found = 0;\n for (let i = 0; i < wrappers.length; i++)\n if (wrappers[i].type == listType)\n found = i + 1;\n let splitDepth = wrappers.length - found;\n let splitPos = range.start + wrappers.length - (joinBefore ? 2 : 0), parent = range.parent;\n for (let i = range.startIndex, e = range.endIndex, first = true; i < e; i++, first = false) {\n if (!first && canSplit(tr.doc, splitPos, splitDepth)) {\n tr.split(splitPos, splitDepth);\n splitPos += 2 * splitDepth;\n }\n splitPos += parent.child(i).nodeSize;\n }\n return tr;\n}\n/**\nBuild a command that splits a non-empty textblock at the top level\nof a list item by also splitting that list item.\n*/\nfunction splitListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to, node } = state.selection;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to))\n return false;\n let grandParent = $from.node(-1);\n if (grandParent.type != itemType)\n return false;\n if ($from.parent.content.size == 0 && $from.node(-1).childCount == $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth == 3 || $from.node(-3).type != itemType ||\n $from.index(-2) != $from.node(-2).childCount - 1)\n return false;\n if (dispatch) {\n let wrap = Fragment.empty;\n let depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d--)\n wrap = Fragment.from($from.node(d).copy(wrap));\n let depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1\n : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n wrap = wrap.append(Fragment.from(itemType.createAndFill()));\n let start = $from.before($from.depth - (depthBefore - 1));\n let tr = state.tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (node, pos) => {\n if (sel > -1)\n return false;\n if (node.isTextblock && node.content.size == 0)\n sel = pos + 1;\n });\n if (sel > -1)\n tr.setSelection(Selection.near(tr.doc.resolve(sel)));\n dispatch(tr.scrollIntoView());\n }\n return true;\n }\n let nextType = $to.pos == $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n let tr = state.tr.delete($from.pos, $to.pos);\n let types = nextType ? [null, { type: nextType }] : undefined;\n if (!canSplit(tr.doc, $from.pos, 2, types))\n return false;\n if (dispatch)\n dispatch(tr.split($from.pos, 2, types).scrollIntoView());\n return true;\n };\n}\n/**\nCreate a command to lift the list item around the selection up into\na wrapping list.\n*/\nfunction liftListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n if (!dispatch)\n return true;\n if ($from.node(range.depth - 1).type == itemType) // Inside a parent list\n return liftToOuterList(state, dispatch, itemType, range);\n else // Outer list node\n return liftOutOfList(state, dispatch, range);\n };\n}\nfunction liftToOuterList(state, dispatch, itemType, range) {\n let tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth);\n if (end < endOfList) {\n // There are siblings after the lifted items, which must become\n // children of the last item\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice(Fragment.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth);\n }\n const target = liftTarget(range);\n if (target == null)\n return false;\n tr.lift(range, target);\n let after = tr.mapping.map(end, -1) - 1;\n if (canJoin(tr.doc, after))\n tr.join(after);\n dispatch(tr.scrollIntoView());\n return true;\n}\nfunction liftOutOfList(state, dispatch, range) {\n let tr = state.tr, list = range.parent;\n // Merge the list items into a single big item\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\n pos -= list.child(i).nodeSize;\n tr.delete(pos - 1, pos + 1);\n }\n let $start = tr.doc.resolve(range.start), item = $start.nodeAfter;\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter.nodeSize)\n return false;\n let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;\n let parent = $start.node(-1), indexBefore = $start.index(-1);\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\n return false;\n let start = $start.pos, end = start + item.nodeSize;\n // Strip off the surrounding list. At the sides where we're not at\n // the end of the list, the existing list is closed. At sides where\n // this is the end, it is overwritten to its end.\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));\n dispatch(tr.scrollIntoView());\n return true;\n}\n/**\nCreate a command to sink the list item around the selection down\ninto an inner list.\n*/\nfunction sinkListItem(itemType) {\n return function (state, dispatch) {\n let { $from, $to } = state.selection;\n let range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild.type == itemType);\n if (!range)\n return false;\n let startIndex = range.startIndex;\n if (startIndex == 0)\n return false;\n let parent = range.parent, nodeBefore = parent.child(startIndex - 1);\n if (nodeBefore.type != itemType)\n return false;\n if (dispatch) {\n let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;\n let inner = Fragment.from(nestedBefore ? itemType.create() : null);\n let slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);\n let before = range.start, after = range.end;\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice, 1, true))\n .scrollIntoView());\n }\n return true;\n };\n}\n\nexport { addListNodes, bulletList, liftListItem, listItem, orderedList, sinkListItem, splitListItem, wrapInList };\n","/*\r\n * extension.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { PandocExtensions } from './pandoc';\r\n\r\nimport { Extension, ExtensionContext, ExtensionFn } from './extension-types'\r\n\r\nexport type { Extension, ExtensionContext, ExtensionFn } ;\r\n\r\n// create an ExtensionFn for a given extension and format option that must be enabled\r\nexport function extensionIfEnabled(extension: Extension, name: string | string[]) {\r\n return (context: ExtensionContext) => {\r\n if (extensionEnabled(context.pandocExtensions, name)) {\r\n return extension;\r\n } else {\r\n return null;\r\n }\r\n };\r\n}\r\n\r\nexport function extensionEnabled(pandocExtensions: PandocExtensions, name: string | string[]) {\r\n // match single extension name\r\n if (typeof name === 'string') {\r\n if (pandocExtensions[name]) {\r\n return true;\r\n }\r\n\r\n // match any one of several names\r\n } else if (Array.isArray(name)) {\r\n for (const nm of name) {\r\n if (pandocExtensions[nm]) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n","/*\r\n * pandoc_attr.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { NodeSpec, MarkSpec } from 'prosemirror-model';\r\n\r\nimport { PandocAttr } from 'editor-types';\r\n\r\nimport { PandocToken, PandocExtensions } from './pandoc';\r\nimport { extensionEnabled, extensionIfEnabled, Extension } from './extension';\r\n\r\nexport const kPandocAttrId = 0;\r\nexport const kPandocAttrClasses = 1;\r\nexport const kPandocAttrKeyvalue = 2;\r\n\r\nconst kDataPmPandocAttr = 'data-pm-pandoc-attr';\r\n\r\nexport const kWidthAttrib = 'width';\r\nexport const kHeightAttrib = 'height';\r\nexport const kStyleAttrib = 'style';\r\nexport const kAlignAttrib = 'align';\r\nexport const kFigAltAttrib = 'fig-alt';\r\nexport const kFigAlignAttrib = 'fig-align';\r\nexport const kFigEnvAttrib = 'fig-env';\r\n\r\nexport const kCodeBlockAttr = 0;\r\nexport const kCodeBlockText = 1;\r\n\r\nexport const kSpanAttr = 0;\r\nexport const kSpanChildren = 1;\r\n\r\nexport type { PandocAttr };\r\n\r\n\r\n\r\nexport const pandocAttrSpec = {\r\n id: { default: null },\r\n classes: { default: [] },\r\n keyvalue: { default: [] },\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrAvailable(attrs: any, keyvalue = true) {\r\n return !!attrs.id || \r\n (attrs.classes && attrs.classes.length > 0) || \r\n (keyvalue && attrs.keyvalue && attrs.keyvalue.length > 0);\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrFrom(attrs: any) : PandocAttr {\r\n const pandocAttr: PandocAttr = {\r\n id: \"\",\r\n classes: [],\r\n keyvalue: []\r\n };\r\n if (attrs.id) {\r\n pandocAttr.id = attrs.id;\r\n }\r\n if (attrs.classes) {\r\n pandocAttr.classes = attrs.classes;\r\n }\r\n if (attrs.keyvalue) {\r\n pandocAttr.keyvalue = attrs.keyvalue;\r\n }\r\n\r\n return pandocAttr;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrEnsureClass(attr: any, name: string) {\r\n attr.classes = [name].concat((attr.classes || []).filter((clz: string) => clz !== name));\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrRemoveClass(attr: any, predicate: (str: string) => boolean) : string | undefined {\r\n let foundClass: string | undefined;\r\n if (Array.isArray(attr.classes)) {\r\n const classes: string[] = [];\r\n for (const clz of attr.classes) {\r\n if (predicate(clz)) {\r\n foundClass = clz;\r\n } else {\r\n classes.push(clz);\r\n }\r\n }\r\n attr.classes = classes;\r\n return foundClass;\r\n \r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrHasClass(attrs: any, predicate: (str: string) => boolean) {\r\n if (Array.isArray(attrs.classes)) {\r\n const classes = attrs.classes as string[];\r\n return classes.some(clz => predicate(clz));\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrGetKeyvalue(attr: any, key: string) {\r\n if (attr.keyvalue) {\r\n const entry = attr.keyvalue.find((keyval: string[]) => keyval[0] === key);\r\n if (entry) {\r\n return entry[1];\r\n } else {\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrSetKeyvalue(attr: any, key: string, value: string) {\r\n const keyvalue = [...(attr.keyvalue || [])] as string[][];\r\n let add = true;\r\n for (const entry of keyvalue) {\r\n if (entry[0] === key) {\r\n entry[1] = value;\r\n add = false;\r\n break;\r\n }\r\n }\r\n if (add) {\r\n keyvalue.push([key, value]);\r\n }\r\n attr.keyvalue = keyvalue;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrRemoveKeyvalue(attr: any, key: string) {\r\n if (attr.keyvalue) {\r\n attr.keyvalue = attr.keyvalue.filter((entry: string[]) => entry[0] !== key);\r\n }\r\n}\r\n\r\nexport function pandocAttrInSpec(spec: NodeSpec | MarkSpec) {\r\n const keys = Object.keys((spec.attrs as object) || {});\r\n return keys.includes('id') && keys.includes('classes') && keys.includes('keyvalue');\r\n}\r\n\r\nexport function pandocAttrReadAST(tok: PandocToken, index: number) : PandocAttr {\r\n const pandocAttr = tok.c[index];\r\n return {\r\n id: pandocAttr[kPandocAttrId] || undefined,\r\n classes: (pandocAttr[kPandocAttrClasses] || []).map((clz: string) => clz.replace(/^\\.+/, \"\")),\r\n keyvalue: pandocAttr[kPandocAttrKeyvalue],\r\n };\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function pandocAttrToDomAttr(attrs: any, marker = true) {\r\n // id and class\r\n const domAttr: Record<string,unknown> = {};\r\n if (attrs.id) {\r\n domAttr.id = attrs.id;\r\n }\r\n if (attrs.classes && attrs.classes.length > 0) {\r\n domAttr.class = attrs.classes.join(' ');\r\n }\r\n\r\n // keyvalue pairs\r\n attrs.keyvalue.forEach((keyvalue: [string, string]) => {\r\n domAttr[keyvalue[0]] = keyvalue[1];\r\n });\r\n\r\n // marker\r\n if (marker) {\r\n domAttr[kDataPmPandocAttr] = '1';\r\n }\r\n\r\n return domAttr;\r\n}\r\n\r\nexport function pandocAttrParseDom(el: Element, attrs: { [key: string]: string | null }, forceAttrs = false) {\r\n \r\n // exclude any keys passed to us as well as always exclude the spellcheck attribute\r\n const excludedNames = [...Object.keys(attrs), \"spellcheck\"];\r\n\r\n // if this isn't from a prosemirror pandoc node then include only src and alt\r\n const includedNames: string[] = [];\r\n if (!forceAttrs && !el.hasAttribute(kDataPmPandocAttr)) {\r\n includedNames.push('src', 'alt');\r\n }\r\n\r\n // read attributes\r\n const attr: PandocAttr = {\r\n id: \"\",\r\n classes: [],\r\n keyvalue: []\r\n };\r\n el.getAttributeNames().forEach(name => {\r\n const value: string = el.getAttribute(name) as string;\r\n // exclude attributes already parsed and prosemirror internal attributes\r\n if (excludedNames.indexOf(name) === -1 && !name.startsWith('data-pm')) {\r\n // if we have an include filter then use it\r\n if (!includedNames.length || includedNames.includes(name)) {\r\n if (name === 'id') {\r\n attr.id = value;\r\n } else if (name === 'class') {\r\n attr.classes = value\r\n .split(/\\s+/)\r\n .filter(val => !!val.length)\r\n .filter(val => !val.startsWith('pm-'));\r\n } else {\r\n attr.keyvalue.push([name, value]);\r\n }\r\n }\r\n }\r\n });\r\n return attr;\r\n}\r\n\r\nexport function pandocAttrParseText(attr: string): PandocAttr | null {\r\n attr = attr.trim();\r\n\r\n let id = '';\r\n const classes: string[] = [];\r\n let remainder = '';\r\n\r\n let current = '';\r\n const resolveCurrent = () => {\r\n const resolve = current;\r\n current = '';\r\n\r\n if (resolve.length === 0) {\r\n return true;\r\n } else if (resolve.startsWith('#')) {\r\n if (id.length === 0 && resolve.length > 1) {\r\n id = resolve.substr(1);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else if (resolve.startsWith('.')) {\r\n if (resolve.length > 1) {\r\n classes.push(resolve.substr(1));\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n remainder = resolve;\r\n return true;\r\n }\r\n };\r\n\r\n for (let i = 0; i < attr.length; i++) {\r\n let inQuotes = false;\r\n const ch = attr[i];\r\n inQuotes = ch === '\"' ? !inQuotes : inQuotes;\r\n if (ch !== ' ' && !inQuotes) {\r\n current += ch;\r\n } else if (resolveCurrent()) {\r\n // if we have a remainder then the rest of the string is the remainder\r\n if (remainder.length > 0) {\r\n remainder = remainder + attr.substr(i);\r\n break;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n if (resolveCurrent()) {\r\n if (id.length === 0 && classes.length === 0) {\r\n remainder = attr;\r\n }\r\n return {\r\n id,\r\n classes,\r\n keyvalue: remainder.length > 0 ? pandocAttrKeyvalueFromText(remainder, ' ') : [],\r\n };\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function pandocAttrKeyvalueFromText(text: string, separator: ' ' | '\\n'): Array<[string, string]> {\r\n // if the separator is a space then convert unquoted spaces to newline\r\n if (separator === ' ') {\r\n let convertedText = '';\r\n let inQuotes = false;\r\n for (let i = 0; i < text.length; i++) {\r\n let ch = text.charAt(i);\r\n if (ch === '\"') {\r\n inQuotes = !inQuotes;\r\n } else if (ch === ' ' && !inQuotes) {\r\n ch = '\\n';\r\n }\r\n convertedText += ch;\r\n }\r\n text = convertedText;\r\n }\r\n\r\n const lines = text.trim().split('\\n');\r\n return lines.map(line => {\r\n const parts = line.trim().split('=');\r\n return [parts[0], (parts[1] || '').replace(/^\"/, '').replace(/\"$/, '')];\r\n });\r\n}\r\n\r\nexport interface AttrKeyvaluePartitioned {\r\n base: Array<[string, string]>;\r\n partitioned: Array<[string, string]>;\r\n}\r\n\r\nexport function attrPartitionKeyvalue(partition: string[], keyvalue: Array<[string, string]>): AttrKeyvaluePartitioned {\r\n const base = new Array<[string, string]>();\r\n const partitioned = new Array<[string, string]>();\r\n\r\n keyvalue.forEach(kv => {\r\n if (partition.includes(kv[0])) {\r\n partitioned.push(kv);\r\n } else {\r\n base.push(kv);\r\n }\r\n });\r\n\r\n return {\r\n base,\r\n partitioned,\r\n };\r\n}\r\n\r\nexport function extensionIfPandocAttrEnabled(extension: Extension) {\r\n return extensionIfEnabled(extension, kPandocAttrExtensions);\r\n}\r\n\r\nexport function pandocAttrEnabled(pandocExtensions: PandocExtensions) {\r\n return extensionEnabled(pandocExtensions, kPandocAttrExtensions);\r\n}\r\n\r\nconst kPandocAttrExtensions = [\r\n 'link_attributes',\r\n 'mmd_link_attributes',\r\n 'mmd_header_identifiers',\r\n 'header_attributes',\r\n 'fenced_code_attributes',\r\n 'inline_code_attributes',\r\n 'bracketed_spans',\r\n 'native_spans',\r\n 'fenced_divs',\r\n 'native_divs',\r\n];\r\n","// Convert the given range of a fragment to tokens, where node open\n// tokens are encoded as strings holding the node name, characters as\n// their character code, and node close tokens as -1.\nfunction tokens(frag, start, end, target) {\n for (let i = 0, off = 0; i < frag.childCount; i++) {\n let child = frag.child(i), endOff = off + child.nodeSize;\n let from = Math.max(off, start), to = Math.min(endOff, end);\n if (from < to) {\n if (child.isText) {\n for (let j = from; j < to; j++)\n target.push(child.text.charCodeAt(j - off));\n }\n else if (child.isLeaf) {\n target.push(child.type.name);\n }\n else {\n if (from == off)\n target.push(child.type.name);\n tokens(child.content, Math.max(off + 1, from) - off - 1, Math.min(endOff - 1, to) - off - 1, target);\n if (to == endOff)\n target.push(-1);\n }\n }\n off = endOff;\n }\n return target;\n}\n// The code below will refuse to compute a diff with more than 5000\n// insertions or deletions, which takes about 300ms to reach on my\n// machine. This is a safeguard against runaway computations.\nconst MAX_DIFF_SIZE = 5000;\n// This obscure mess of constants computes the minimum length of an\n// unchanged range (not at the start/end of the compared content). The\n// idea is to make it higher in bigger replacements, so that you don't\n// get a diff soup of coincidentally identical letters when replacing\n// a paragraph.\nfunction minUnchanged(sizeA, sizeB) {\n return Math.min(15, Math.max(2, Math.floor(Math.max(sizeA, sizeB) / 10)));\n}\nfunction computeDiff(fragA, fragB, range) {\n let tokA = tokens(fragA, range.fromA, range.toA, []);\n let tokB = tokens(fragB, range.fromB, range.toB, []);\n // Scan from both sides to cheaply eliminate work\n let start = 0, endA = tokA.length, endB = tokB.length;\n while (start < tokA.length && start < tokB.length && tokA[start] === tokB[start])\n start++;\n if (start == tokA.length && start == tokB.length)\n return [];\n while (endA > start && endB > start && tokA[endA - 1] === tokB[endB - 1])\n endA--, endB--;\n // If the result is simple _or_ too big to cheaply compute, return\n // the remaining region as the diff\n if (endA == start || endB == start || (endA == endB && endA == start + 1))\n return [range.slice(start, endA, start, endB)];\n // This is an implementation of Myers' diff algorithm\n // See https://neil.fraser.name/writing/diff/myers.pdf and\n // https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm-part-1/\n let lenA = endA - start, lenB = endB - start;\n let max = Math.min(MAX_DIFF_SIZE, lenA + lenB), off = max + 1;\n let history = [];\n let frontier = [];\n for (let len = off * 2, i = 0; i < len; i++)\n frontier[i] = -1;\n for (let size = 0; size <= max; size++) {\n for (let diag = -size; diag <= size; diag += 2) {\n let next = frontier[diag + 1 + max], prev = frontier[diag - 1 + max];\n let x = next < prev ? prev : next + 1, y = x + diag;\n while (x < lenA && y < lenB && tokA[start + x] === tokB[start + y])\n x++, y++;\n frontier[diag + max] = x;\n // Found a match\n if (x >= lenA && y >= lenB) {\n // Trace back through the history to build up a set of changed ranges.\n let diff = [], minSpan = minUnchanged(endA - start, endB - start);\n // Used to add steps to a diff one at a time, back to front, merging\n // ones that are less than minSpan tokens apart\n let fromA = -1, toA = -1, fromB = -1, toB = -1;\n let add = (fA, tA, fB, tB) => {\n if (fromA > -1 && fromA < tA + minSpan) {\n fromA = fA;\n fromB = fB;\n }\n else {\n if (fromA > -1)\n diff.push(range.slice(fromA, toA, fromB, toB));\n fromA = fA;\n toA = tA;\n fromB = fB;\n toB = tB;\n }\n };\n for (let i = size - 1; i >= 0; i--) {\n let next = frontier[diag + 1 + max], prev = frontier[diag - 1 + max];\n if (next < prev) { // Deletion\n diag--;\n x = prev + start;\n y = x + diag;\n add(x, x, y, y + 1);\n }\n else { // Insertion\n diag++;\n x = next + start;\n y = x + diag;\n add(x, x + 1, y, y);\n }\n frontier = history[i >> 1];\n }\n if (fromA > -1)\n diff.push(range.slice(fromA, toA, fromB, toB));\n return diff.reverse();\n }\n }\n // Since only either odd or even diagonals are read from each\n // frontier, we only copy them every other iteration.\n if (size % 2 == 0)\n history.push(frontier.slice());\n }\n // The loop exited, meaning the maximum amount of work was done.\n // Just return a change spanning the entire range.\n return [range.slice(start, endA, start, endB)];\n}\n\n/**\nStores metadata for a part of a change.\n*/\nclass Span {\n /**\n @internal\n */\n constructor(\n /**\n The length of this span.\n */\n length, \n /**\n The data associated with this span.\n */\n data) {\n this.length = length;\n this.data = data;\n }\n /**\n @internal\n */\n cut(length) {\n return length == this.length ? this : new Span(length, this.data);\n }\n /**\n @internal\n */\n static slice(spans, from, to) {\n if (from == to)\n return Span.none;\n if (from == 0 && to == Span.len(spans))\n return spans;\n let result = [];\n for (let i = 0, off = 0; off < to; i++) {\n let span = spans[i], end = off + span.length;\n let overlap = Math.min(to, end) - Math.max(from, off);\n if (overlap > 0)\n result.push(span.cut(overlap));\n off = end;\n }\n return result;\n }\n /**\n @internal\n */\n static join(a, b, combine) {\n if (a.length == 0)\n return b;\n if (b.length == 0)\n return a;\n let combined = combine(a[a.length - 1].data, b[0].data);\n if (combined == null)\n return a.concat(b);\n let result = a.slice(0, a.length - 1);\n result.push(new Span(a[a.length - 1].length + b[0].length, combined));\n for (let i = 1; i < b.length; i++)\n result.push(b[i]);\n return result;\n }\n /**\n @internal\n */\n static len(spans) {\n let len = 0;\n for (let i = 0; i < spans.length; i++)\n len += spans[i].length;\n return len;\n }\n}\n/**\n@internal\n*/\nSpan.none = [];\n/**\nA replaced range with metadata associated with it.\n*/\nclass Change {\n /**\n @internal\n */\n constructor(\n /**\n The start of the range deleted/replaced in the old document.\n */\n fromA, \n /**\n The end of the range in the old document.\n */\n toA, \n /**\n The start of the range inserted in the new document.\n */\n fromB, \n /**\n The end of the range in the new document.\n */\n toB, \n /**\n Data associated with the deleted content. The length of these\n spans adds up to `this.toA - this.fromA`.\n */\n deleted, \n /**\n Data associated with the inserted content. Length adds up to\n `this.toB - this.toA`.\n */\n inserted) {\n this.fromA = fromA;\n this.toA = toA;\n this.fromB = fromB;\n this.toB = toB;\n this.deleted = deleted;\n this.inserted = inserted;\n }\n /**\n @internal\n */\n get lenA() { return this.toA - this.fromA; }\n /**\n @internal\n */\n get lenB() { return this.toB - this.fromB; }\n /**\n @internal\n */\n slice(startA, endA, startB, endB) {\n if (startA == 0 && startB == 0 && endA == this.toA - this.fromA &&\n endB == this.toB - this.fromB)\n return this;\n return new Change(this.fromA + startA, this.fromA + endA, this.fromB + startB, this.fromB + endB, Span.slice(this.deleted, startA, endA), Span.slice(this.inserted, startB, endB));\n }\n /**\n This merges two changesets (the end document of x should be the\n start document of y) into a single one spanning the start of x to\n the end of y.\n */\n static merge(x, y, combine) {\n if (x.length == 0)\n return y;\n if (y.length == 0)\n return x;\n let result = [];\n // Iterate over both sets in parallel, using the middle coordinate\n // system (B in x, A in y) to synchronize.\n for (let iX = 0, iY = 0, curX = x[0], curY = y[0];;) {\n if (!curX && !curY) {\n return result;\n }\n else if (curX && (!curY || curX.toB < curY.fromA)) { // curX entirely in front of curY\n let off = iY ? y[iY - 1].toB - y[iY - 1].toA : 0;\n result.push(off == 0 ? curX :\n new Change(curX.fromA, curX.toA, curX.fromB + off, curX.toB + off, curX.deleted, curX.inserted));\n curX = iX++ == x.length ? null : x[iX];\n }\n else if (curY && (!curX || curY.toA < curX.fromB)) { // curY entirely in front of curX\n let off = iX ? x[iX - 1].toB - x[iX - 1].toA : 0;\n result.push(off == 0 ? curY :\n new Change(curY.fromA - off, curY.toA - off, curY.fromB, curY.toB, curY.deleted, curY.inserted));\n curY = iY++ == y.length ? null : y[iY];\n }\n else { // Touch, need to merge\n // The rules for merging ranges are that deletions from the\n // old set and insertions from the new are kept. Areas of the\n // middle document covered by a but not by b are insertions\n // from a that need to be added, and areas covered by b but\n // not a are deletions from b that need to be added.\n let pos = Math.min(curX.fromB, curY.fromA);\n let fromA = Math.min(curX.fromA, curY.fromA - (iX ? x[iX - 1].toB - x[iX - 1].toA : 0)), toA = fromA;\n let fromB = Math.min(curY.fromB, curX.fromB + (iY ? y[iY - 1].toB - y[iY - 1].toA : 0)), toB = fromB;\n let deleted = Span.none, inserted = Span.none;\n // Used to prevent appending ins/del range for the same Change twice\n let enteredX = false, enteredY = false;\n // Need to have an inner loop since any number of further\n // ranges might be touching this group\n for (;;) {\n let nextX = !curX ? 2e8 : pos >= curX.fromB ? curX.toB : curX.fromB;\n let nextY = !curY ? 2e8 : pos >= curY.fromA ? curY.toA : curY.fromA;\n let next = Math.min(nextX, nextY);\n let inX = curX && pos >= curX.fromB, inY = curY && pos >= curY.fromA;\n if (!inX && !inY)\n break;\n if (inX && pos == curX.fromB && !enteredX) {\n deleted = Span.join(deleted, curX.deleted, combine);\n toA += curX.lenA;\n enteredX = true;\n }\n if (inX && !inY) {\n inserted = Span.join(inserted, Span.slice(curX.inserted, pos - curX.fromB, next - curX.fromB), combine);\n toB += next - pos;\n }\n if (inY && pos == curY.fromA && !enteredY) {\n inserted = Span.join(inserted, curY.inserted, combine);\n toB += curY.lenB;\n enteredY = true;\n }\n if (inY && !inX) {\n deleted = Span.join(deleted, Span.slice(curY.deleted, pos - curY.fromA, next - curY.fromA), combine);\n toA += next - pos;\n }\n if (inX && next == curX.toB) {\n curX = iX++ == x.length ? null : x[iX];\n enteredX = false;\n }\n if (inY && next == curY.toA) {\n curY = iY++ == y.length ? null : y[iY];\n enteredY = false;\n }\n pos = next;\n }\n if (fromA < toA || fromB < toB)\n result.push(new Change(fromA, toA, fromB, toB, deleted, inserted));\n }\n }\n }\n}\n\nlet letter;\n// If the runtime support unicode properties in regexps, that's a good\n// source of info on whether something is a letter.\ntry {\n letter = new RegExp(\"[\\\\p{Alphabetic}_]\", \"u\");\n}\ncatch (_) { }\n// Otherwise, we see if the character changes when upper/lowercased,\n// or if it is part of these common single-case scripts.\nconst nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nfunction isLetter(code) {\n if (code < 128)\n return code >= 48 && code <= 57 || code >= 65 && code <= 90 || code >= 79 && code <= 122;\n let ch = String.fromCharCode(code);\n if (letter)\n return letter.test(ch);\n return ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch);\n}\n// Convert a range of document into a string, so that we can easily\n// access characters at a given position. Treat non-text tokens as\n// spaces so that they aren't considered part of a word.\nfunction getText(frag, start, end) {\n let out = \"\";\n function convert(frag, start, end) {\n for (let i = 0, off = 0; i < frag.childCount; i++) {\n let child = frag.child(i), endOff = off + child.nodeSize;\n let from = Math.max(off, start), to = Math.min(endOff, end);\n if (from < to) {\n if (child.isText) {\n out += child.text.slice(Math.max(0, start - off), Math.min(child.text.length, end - off));\n }\n else if (child.isLeaf) {\n out += \" \";\n }\n else {\n if (from == off)\n out += \" \";\n convert(child.content, Math.max(0, from - off - 1), Math.min(child.content.size, end - off));\n if (to == endOff)\n out += \" \";\n }\n }\n off = endOff;\n }\n }\n convert(frag, start, end);\n return out;\n}\n// The distance changes have to be apart for us to not consider them\n// candidates for merging.\nconst MAX_SIMPLIFY_DISTANCE = 30;\n/**\nSimplifies a set of changes for presentation. This makes the\nassumption that having both insertions and deletions within a word\nis confusing, and, when such changes occur without a word boundary\nbetween them, they should be expanded to cover the entire set of\nwords (in the new document) they touch. An exception is made for\nsingle-character replacements.\n*/\nfunction simplifyChanges(changes, doc) {\n let result = [];\n for (let i = 0; i < changes.length; i++) {\n let end = changes[i].toB, start = i;\n while (i < changes.length - 1 && changes[i + 1].fromB <= end + MAX_SIMPLIFY_DISTANCE)\n end = changes[++i].toB;\n simplifyAdjacentChanges(changes, start, i + 1, doc, result);\n }\n return result;\n}\nfunction simplifyAdjacentChanges(changes, from, to, doc, target) {\n let start = Math.max(0, changes[from].fromB - MAX_SIMPLIFY_DISTANCE);\n let end = Math.min(doc.content.size, changes[to - 1].toB + MAX_SIMPLIFY_DISTANCE);\n let text = getText(doc.content, start, end);\n for (let i = from; i < to; i++) {\n let startI = i, last = changes[i], deleted = last.lenA, inserted = last.lenB;\n while (i < to - 1) {\n let next = changes[i + 1], boundary = false;\n let prevLetter = last.toB == end ? false : isLetter(text.charCodeAt(last.toB - 1 - start));\n for (let pos = last.toB; !boundary && pos < next.fromB; pos++) {\n let nextLetter = pos == end ? false : isLetter(text.charCodeAt(pos - start));\n if ((!prevLetter || !nextLetter) && pos != changes[startI].fromB)\n boundary = true;\n prevLetter = nextLetter;\n }\n if (boundary)\n break;\n deleted += next.lenA;\n inserted += next.lenB;\n last = next;\n i++;\n }\n if (inserted > 0 && deleted > 0 && !(inserted == 1 && deleted == 1)) {\n let from = changes[startI].fromB, to = changes[i].toB;\n if (from < end && isLetter(text.charCodeAt(from - start)))\n while (from > start && isLetter(text.charCodeAt(from - 1 - start)))\n from--;\n if (to > start && isLetter(text.charCodeAt(to - 1 - start)))\n while (to < end && isLetter(text.charCodeAt(to - start)))\n to++;\n let joined = fillChange(changes.slice(startI, i + 1), from, to);\n let last = target.length ? target[target.length - 1] : null;\n if (last && last.toA == joined.fromA)\n target[target.length - 1] = new Change(last.fromA, joined.toA, last.fromB, joined.toB, last.deleted.concat(joined.deleted), last.inserted.concat(joined.inserted));\n else\n target.push(joined);\n }\n else {\n for (let j = startI; j <= i; j++)\n target.push(changes[j]);\n }\n }\n return changes;\n}\nfunction combine(a, b) { return a === b ? a : null; }\nfunction fillChange(changes, fromB, toB) {\n let fromA = changes[0].fromA - (changes[0].fromB - fromB);\n let last = changes[changes.length - 1];\n let toA = last.toA + (toB - last.toB);\n let deleted = Span.none, inserted = Span.none;\n let delData = (changes[0].deleted.length ? changes[0].deleted : changes[0].inserted)[0].data;\n let insData = (changes[0].inserted.length ? changes[0].inserted : changes[0].deleted)[0].data;\n for (let posA = fromA, posB = fromB, i = 0;; i++) {\n let next = i == changes.length ? null : changes[i];\n let endA = next ? next.fromA : toA, endB = next ? next.fromB : toB;\n if (endA > posA)\n deleted = Span.join(deleted, [new Span(endA - posA, delData)], combine);\n if (endB > posB)\n inserted = Span.join(inserted, [new Span(endB - posB, insData)], combine);\n if (!next)\n break;\n deleted = Span.join(deleted, next.deleted, combine);\n inserted = Span.join(inserted, next.inserted, combine);\n if (deleted.length)\n delData = deleted[deleted.length - 1].data;\n if (inserted.length)\n insData = inserted[inserted.length - 1].data;\n posA = next.toA;\n posB = next.toB;\n }\n return new Change(fromA, toA, fromB, toB, deleted, inserted);\n}\n\n/**\nA change set tracks the changes to a document from a given point\nin the past. It condenses a number of step maps down to a flat\nsequence of replacements, and simplifies replacments that\npartially undo themselves by comparing their content.\n*/\nclass ChangeSet {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n config, \n /**\n Replaced regions.\n */\n changes) {\n this.config = config;\n this.changes = changes;\n }\n /**\n Computes a new changeset by adding the given step maps and\n metadata (either as an array, per-map, or as a single value to be\n associated with all maps) to the current set. Will not mutate the\n old set.\n \n Note that due to simplification that happens after each add,\n incrementally adding steps might create a different final set\n than adding all those changes at once, since different document\n tokens might be matched during simplification depending on the\n boundaries of the current changed ranges.\n */\n addSteps(newDoc, maps, data) {\n // This works by inspecting the position maps for the changes,\n // which indicate what parts of the document were replaced by new\n // content, and the size of that new content. It uses these to\n // build up Change objects.\n //\n // These change objects are put in sets and merged together using\n // Change.merge, giving us the changes created by the new steps.\n // Those changes can then be merged with the existing set of\n // changes.\n //\n // For each change that was touched by the new steps, we recompute\n // a diff to try to minimize the change by dropping matching\n // pieces of the old and new document from the change.\n let stepChanges = [];\n // Add spans for new steps.\n for (let i = 0; i < maps.length; i++) {\n let d = Array.isArray(data) ? data[i] : data;\n let off = 0;\n maps[i].forEach((fromA, toA, fromB, toB) => {\n stepChanges.push(new Change(fromA + off, toA + off, fromB, toB, fromA == toA ? Span.none : [new Span(toA - fromA, d)], fromB == toB ? Span.none : [new Span(toB - fromB, d)]));\n off = (toB - fromB) - (toA - fromA);\n });\n }\n if (stepChanges.length == 0)\n return this;\n let newChanges = mergeAll(stepChanges, this.config.combine);\n let changes = Change.merge(this.changes, newChanges, this.config.combine);\n let updated = changes;\n // Minimize changes when possible\n for (let i = 0; i < updated.length; i++) {\n let change = updated[i];\n if (change.fromA == change.toA || change.fromB == change.toB ||\n // Only look at changes that touch newly added changed ranges\n !newChanges.some(r => r.toB > change.fromB && r.fromB < change.toB))\n continue;\n let diff = computeDiff(this.config.doc.content, newDoc.content, change);\n // Fast path: If they are completely different, don't do anything\n if (diff.length == 1 && diff[0].fromB == 0 && diff[0].toB == change.toB - change.fromB)\n continue;\n if (updated == changes)\n updated = changes.slice();\n if (diff.length == 1) {\n updated[i] = diff[0];\n }\n else {\n updated.splice(i, 1, ...diff);\n i += diff.length - 1;\n }\n }\n return new ChangeSet(this.config, updated);\n }\n /**\n The starting document of the change set.\n */\n get startDoc() { return this.config.doc; }\n /**\n Map the span's data values in the given set through a function\n and construct a new set with the resulting data.\n */\n map(f) {\n let mapSpan = (span) => {\n let newData = f(span);\n return newData === span.data ? span : new Span(span.length, newData);\n };\n return new ChangeSet(this.config, this.changes.map((ch) => {\n return new Change(ch.fromA, ch.toA, ch.fromB, ch.toB, ch.deleted.map(mapSpan), ch.inserted.map(mapSpan));\n }));\n }\n /**\n Compare two changesets and return the range in which they are\n changed, if any. If the document changed between the maps, pass\n the maps for the steps that changed it as second argument, and\n make sure the method is called on the old set and passed the new\n set. The returned positions will be in new document coordinates.\n */\n changedRange(b, maps) {\n if (b == this)\n return null;\n let touched = maps && touchedRange(maps);\n let moved = touched ? (touched.toB - touched.fromB) - (touched.toA - touched.fromA) : 0;\n function map(p) {\n return !touched || p <= touched.fromA ? p : p + moved;\n }\n let from = touched ? touched.fromB : 2e8, to = touched ? touched.toB : -2e8;\n function add(start, end = start) {\n from = Math.min(start, from);\n to = Math.max(end, to);\n }\n let rA = this.changes, rB = b.changes;\n for (let iA = 0, iB = 0; iA < rA.length && iB < rB.length;) {\n let rangeA = rA[iA], rangeB = rB[iB];\n if (rangeA && rangeB && sameRanges(rangeA, rangeB, map)) {\n iA++;\n iB++;\n }\n else if (rangeB && (!rangeA || map(rangeA.fromB) >= rangeB.fromB)) {\n add(rangeB.fromB, rangeB.toB);\n iB++;\n }\n else {\n add(map(rangeA.fromB), map(rangeA.toB));\n iA++;\n }\n }\n return from <= to ? { from, to } : null;\n }\n /**\n Create a changeset with the given base object and configuration.\n The `combine` function is used to compare and combine metadata—it\n should return null when metadata isn't compatible, and a combined\n version for a merged range when it is.\n */\n static create(doc, combine = (a, b) => a === b ? a : null) {\n return new ChangeSet({ combine, doc }, []);\n }\n}\n/**\nExported for testing @internal\n*/\nChangeSet.computeDiff = computeDiff;\n// Divide-and-conquer approach to merging a series of ranges.\nfunction mergeAll(ranges, combine, start = 0, end = ranges.length) {\n if (end == start + 1)\n return [ranges[start]];\n let mid = (start + end) >> 1;\n return Change.merge(mergeAll(ranges, combine, start, mid), mergeAll(ranges, combine, mid, end), combine);\n}\nfunction endRange(maps) {\n let from = 2e8, to = -2e8;\n for (let i = 0; i < maps.length; i++) {\n let map = maps[i];\n if (from != 2e8) {\n from = map.map(from, -1);\n to = map.map(to, 1);\n }\n map.forEach((_s, _e, start, end) => {\n from = Math.min(from, start);\n to = Math.max(to, end);\n });\n }\n return from == 2e8 ? null : { from, to };\n}\nfunction touchedRange(maps) {\n let b = endRange(maps);\n if (!b)\n return null;\n let a = endRange(maps.map(m => m.invert()).reverse());\n return { fromA: a.from, toA: a.to, fromB: b.from, toB: b.to };\n}\nfunction sameRanges(a, b, map) {\n return map(a.fromB) == b.fromB && map(a.toB) == b.toB &&\n sameSpans(a.deleted, b.deleted) && sameSpans(a.inserted, b.inserted);\n}\nfunction sameSpans(a, b) {\n if (a.length != b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i].length != b[i].length || a[i].data !== b[i].data)\n return false;\n return true;\n}\n\nexport { Change, ChangeSet, Span, simplifyChanges };\n","/*\r\n * fragment.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Fragment, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nexport function fragmentText(fragment: Fragment, unemoji = false) {\r\n let text = '';\r\n fragment.forEach(node => {\r\n const emjojiMark = node.marks.find(mark => mark.type === node.type.schema.marks.emoji);\r\n if (unemoji && emjojiMark) {\r\n return (text = text + (emjojiMark.attrs.emojihint || node.textContent));\r\n } else {\r\n return (text = text + node.textContent);\r\n }\r\n });\r\n return text;\r\n}\r\n\r\n\r\nexport const mapFragment = (\r\n fragment: Fragment,\r\n map: (node: ProsemirrorNode) => ProsemirrorNode | null\r\n): Fragment => {\r\n\r\n let mappedFragment = Fragment.from(fragment);\r\n fragment.forEach((node, _offset, index) => {\r\n const mappedNode = map(node);\r\n if (mappedNode !== null) {\r\n mappedFragment = mappedFragment.replaceChild(index, mappedNode);\r\n }\r\n node = mappedNode || node;\r\n if (node.content.childCount > 0) {\r\n mappedFragment = mappedFragment.replaceChild(\r\n index, \r\n node.type.create(node.attrs, mapFragment(node.content, map))\r\n );\r\n }\r\n\r\n });\r\n return mappedFragment;\r\n}\r\n","/*\r\n * slice.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Slice, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { mapFragment } from './fragment';\r\n\r\nexport function sliceContentLength(slice: Slice) {\r\n let length = 0;\r\n for (let i = 0; i < slice.content.childCount; i++) {\r\n length += slice.content.child(i).textContent.length;\r\n }\r\n return length;\r\n}\r\n\r\nexport function sliceHasNode(slice: Slice, predicate: (node: ProsemirrorNode) => boolean) {\r\n let hasNode = false;\r\n slice.content.descendants(node => {\r\n if (predicate(node)) {\r\n hasNode = true;\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n return hasNode;\r\n}\r\n\r\n\r\nexport const mapSlice = (\r\n slice: Slice,\r\n map: (node: ProsemirrorNode) => ProsemirrorNode | null\r\n): Slice => {\r\n const fragment = mapFragment(slice.content, map);\r\n return new Slice(fragment, slice.openStart, slice.openEnd);\r\n};\r\n","/*\r\n * transaction.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction, EditorState, Plugin, PluginKey, Selection } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode, Mark, MarkType, Slice } from 'prosemirror-model';\r\nimport { ChangeSet } from 'prosemirror-changeset';\r\nimport { ReplaceStep, Step, Transform } from 'prosemirror-transform';\r\n\r\nimport { sliceContentLength } from './slice';\r\n\r\nexport const kPasteTransaction = 'paste';\r\nexport const kSetMarkdownTransaction = 'setMarkdown';\r\nexport const kNoUpdateTransaction = 'noUpdateTransaction';\r\nexport const kAddToHistoryTransaction = 'addToHistory';\r\nexport const kFixupTransaction = 'docFixup';\r\nexport const kRestoreLocationTransaction = 'restoreLocation';\r\nexport const kNavigationTransaction = 'navigationTransaction';\r\nexport const kInsertSymbolTransaction = 'insertSymbol';\r\nexport const kInsertCompletionTransaction = 'insertCompletion';\r\nexport const kThemeChangedTransaction = 'themeChnaged';\r\n\r\nexport type TransactionsFilter = (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => boolean;\r\n\r\nexport type TransactionNodeFilter = (\r\n node: ProsemirrorNode,\r\n pos: number,\r\n parent: ProsemirrorNode | null,\r\n index: number,\r\n) => boolean;\r\n\r\nexport interface AppendTransactionHandler {\r\n name: string;\r\n filter?: TransactionsFilter;\r\n nodeFilter?: TransactionNodeFilter;\r\n append: (tr: Transaction, transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => void;\r\n}\r\n\r\n// wrapper for transaction that is guaranteed not to modify the position of any\r\n// nodes in the document (useful for grouping many disparate handlers that arne't\r\n// aware of each other's actions onto the same trasaction)\r\nexport class MarkTransaction {\r\n private tr: Transaction;\r\n\r\n constructor(tr: Transaction) {\r\n this.tr = tr;\r\n }\r\n get doc(): ProsemirrorNode {\r\n return this.tr.doc;\r\n }\r\n get selection(): Selection {\r\n return this.tr.selection;\r\n }\r\n public addMark(from: number, to: number, mark: Mark): this {\r\n this.tr.addMark(from, to, mark);\r\n return this;\r\n }\r\n public removeMark(from: number, to: number, mark?: Mark | MarkType): this {\r\n this.tr.removeMark(from, to, mark);\r\n return this;\r\n }\r\n public removeStoredMark(mark: Mark | MarkType): this {\r\n this.tr.removeStoredMark(mark);\r\n return this;\r\n }\r\n public insertText(text: string, from: number): this {\r\n this.tr.insertText(text, from, from + text.length);\r\n return this;\r\n }\r\n}\r\n\r\nexport interface AppendMarkTransactionHandler {\r\n name: string;\r\n filter: (node: ProsemirrorNode, transactions: readonly Transaction[]) => boolean;\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number, state: EditorState) => void;\r\n}\r\n\r\nexport function appendMarkTransactionsPlugin(handlers: readonly AppendMarkTransactionHandler[]): Plugin {\r\n return new Plugin({\r\n key: new PluginKey('appendMarkTransactions'),\r\n\r\n appendTransaction: (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => {\r\n // skip for selection-only changes\r\n if (!transactionsDocChanged(transactions)) {\r\n return;\r\n }\r\n\r\n // create transaction\r\n const tr = newState.tr;\r\n\r\n // create markTransaction wrapper\r\n const markTr = new MarkTransaction(tr);\r\n\r\n forChangedNodes(\r\n oldState,\r\n newState,\r\n () => true,\r\n (node: ProsemirrorNode, pos: number) => {\r\n for (const handler of handlers) {\r\n // get a fresh view of the node\r\n node = tr.doc.nodeAt(pos)!;\r\n\r\n // call the handler\r\n if (handler.filter(node, transactions)) {\r\n handler.append(markTr, node, pos, newState);\r\n }\r\n }\r\n },\r\n );\r\n\r\n // return transaction\r\n if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) {\r\n return tr;\r\n } else {\r\n return undefined;\r\n }\r\n },\r\n });\r\n}\r\n\r\nexport function appendTransactionsPlugin(handlers: readonly AppendTransactionHandler[]): Plugin {\r\n return new Plugin({\r\n key: new PluginKey('appendTransactions'),\r\n\r\n appendTransaction: (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => {\r\n // skip for selection-only changes\r\n if (!transactionsDocChanged(transactions)) {\r\n return;\r\n }\r\n\r\n // create transaction\r\n const tr = newState.tr;\r\n\r\n // compute the changeSet\r\n if (transactionsAreTypingChange(transactions)) {\r\n const changeSet = transactionsChangeSet(transactions, oldState, newState);\r\n\r\n // call each handler\r\n for (const handler of handlers) {\r\n // track whether there is a change\r\n let haveChange = false;\r\n\r\n // call filters if we have them\r\n if (handler.filter || handler.nodeFilter) {\r\n // first the low-level transaction filter\r\n if (handler.filter) {\r\n haveChange = handler.filter(transactions, oldState, newState);\r\n }\r\n\r\n // if that doesn't detect a change then try the nodeFilter if we have one\r\n if (!haveChange && handler.nodeFilter) {\r\n const checkForChange = (\r\n node: ProsemirrorNode,\r\n pos: number,\r\n parent: ProsemirrorNode | null,\r\n index: number,\r\n ) => {\r\n if (handler.nodeFilter!(node, pos, parent, index)) {\r\n haveChange = true;\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n for (const change of changeSet.changes) {\r\n oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange);\r\n newState.doc.nodesBetween(change.fromB, change.toB, checkForChange);\r\n }\r\n }\r\n\r\n // no filters means we should always run (force haveChange to true)\r\n } else {\r\n haveChange = true;\r\n }\r\n\r\n // run the handler if applicable\r\n if (haveChange) {\r\n handler.append(tr, transactions, oldState, newState);\r\n }\r\n }\r\n\r\n // run them all if this is a larger change\r\n } else {\r\n handlers.forEach(handler => handler.append(tr, transactions, oldState, newState));\r\n }\r\n\r\n // return transaction\r\n if (tr.docChanged || tr.selectionSet || tr.storedMarksSet) {\r\n return tr;\r\n } else {\r\n return undefined;\r\n }\r\n },\r\n });\r\n}\r\n\r\nexport function transactionsDocChanged(transactions: readonly Transaction[]) {\r\n return transactions.some(transaction => transaction.docChanged);\r\n}\r\n\r\nexport function transactionsChangeSet(transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) {\r\n let changeSet = ChangeSet.create(oldState.doc);\r\n for (const transaction of transactions) {\r\n changeSet = changeSet.addSteps(newState.doc, transaction.mapping.maps, {});\r\n }\r\n return changeSet;\r\n}\r\n\r\nexport function trTransform(tr: Transaction, f: (transform: Transform) => void): Transaction {\r\n // create a new transform so we can do position mapping relative\r\n // to the actions taken here (b/c the transaction might already\r\n // have other steps so we can't do tr.mapping.map)\r\n const newActions = new Transform(tr.doc);\r\n\r\n // call the function (passing it a mapping function that uses our newActions)\r\n f(newActions);\r\n\r\n // copy the contents of newActions to the actual transaction\r\n for (const step of newActions.steps) {\r\n tr.step(step);\r\n }\r\n\r\n // return the transaction for chaining\r\n return tr;\r\n}\r\n\r\nexport function transactionsHaveChange(\r\n transactions: readonly Transaction[],\r\n oldState: EditorState,\r\n newState: EditorState,\r\n predicate: (node: ProsemirrorNode, pos: number, parent: ProsemirrorNode | null, index: number) => boolean,\r\n) {\r\n // screen out transactions with no doc changes\r\n if (!transactionsDocChanged(transactions)) {\r\n return false;\r\n }\r\n\r\n // function to check for whether we have a change and set a flag if we do\r\n let haveChange = false;\r\n const checkForChange = (node: ProsemirrorNode, pos: number, parent: ProsemirrorNode | null, index: number) => {\r\n if (predicate(node, pos, parent, index)) {\r\n haveChange = true;\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n\r\n // for each change in each transaction, check for a node that matches the predicate in either the old or new doc\r\n const changeSet = transactionsChangeSet(transactions, oldState, newState);\r\n\r\n for (const change of changeSet.changes) {\r\n oldState.doc.nodesBetween(change.fromA, change.toA, checkForChange);\r\n newState.doc.nodesBetween(change.fromB, change.toB, checkForChange);\r\n if (haveChange) {\r\n break;\r\n }\r\n }\r\n\r\n return haveChange;\r\n}\r\n\r\nexport function forChangedNodes(\r\n oldState: EditorState | null,\r\n newState: EditorState,\r\n predicate: (node: ProsemirrorNode) => boolean,\r\n f: (node: ProsemirrorNode, pos: number) => boolean | void,\r\n) {\r\n let complete = false;\r\n const handler = (node: ProsemirrorNode, pos: number) => {\r\n if (complete) {\r\n return;\r\n }\r\n\r\n if (!predicate || predicate(node)) {\r\n if (f(node, pos) === false) {\r\n complete = true;\r\n }\r\n }\r\n };\r\n\r\n if (!oldState) {\r\n newState.doc.descendants(handler);\r\n } else if (oldState.doc !== newState.doc) {\r\n changedDescendants(oldState.doc, newState.doc, 0, handler);\r\n }\r\n}\r\n\r\n// Helper for iterating through the nodes in a document that changed\r\n// compared to the given previous document. Useful for avoiding\r\n// duplicate work on each transaction.\r\n// from: https://github.com/ProseMirror/prosemirror-tables/blob/master/src/fixtables.js\r\nfunction changedDescendants(\r\n old: ProsemirrorNode,\r\n cur: ProsemirrorNode,\r\n offset: number,\r\n f: (node: ProsemirrorNode, pos: number) => void,\r\n) {\r\n const oldSize = old.childCount;\r\n const curSize = cur.childCount;\r\n outer: for (let i = 0, j = 0; i < curSize; i++) {\r\n const child = cur.child(i);\r\n for (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) {\r\n if (old.child(scan) === child) {\r\n j = scan + 1;\r\n offset += child.nodeSize;\r\n continue outer;\r\n }\r\n }\r\n f(child, offset);\r\n if (j < oldSize && old.child(j).sameMarkup(child)) {\r\n changedDescendants(old.child(j), child, offset + 1, f);\r\n } else {\r\n child.nodesBetween(0, child.content.size, f, offset + 1);\r\n }\r\n offset += child.nodeSize;\r\n }\r\n}\r\n\r\n// effect transactions are applied for their side effect of updating decorations\r\n// (e.g. spelling and find decorators)\r\nexport function isEffectTransaction(tr: Transaction) {\r\n return !tr.docChanged && !tr.selectionSet && !tr.storedMarksSet;\r\n}\r\n\r\nexport function transactionsAreTypingChange(transactions: readonly Transaction[]) {\r\n if (\r\n transactions.length === 1 &&\r\n transactions[0].steps.length === 1 &&\r\n transactions[0].steps[0] instanceof ReplaceStep\r\n ) {\r\n // step to examine\r\n const step: SliceStep = transactions[0].steps[0];\r\n\r\n // insert single chraracter or new empty slice (e.g. from enter after a paragraph)\r\n if (step.from === step.to && sliceContentLength(step.slice) <= 1) {\r\n return true;\r\n }\r\n\r\n // remove single character\r\n if (Math.abs(step.from - step.to) === 1 && step.slice.content.size === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport interface RangeStep extends Step {\r\n from: number;\r\n to: number;\r\n}\r\n\r\nexport interface SliceStep extends RangeStep {\r\n slice: Slice;\r\n}\r\n","/*\r\n * selection.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Selection, NodeSelection } from 'prosemirror-state';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { GapCursor } from 'prosemirror-gapcursor';\r\n\r\nimport { NodeWithPos, setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { kAddToHistoryTransaction, kRestoreLocationTransaction } from './transaction';\r\nimport { editingRootNode } from './node';\r\n\r\nexport function selectionIsWithin(selection: Selection, nodeWithPos: NodeWithPos) {\r\n const from = nodeWithPos.pos + 1;\r\n const to = from + nodeWithPos.node.nodeSize;\r\n return selectionIsWithinRange(selection, { from, to });\r\n}\r\n\r\nexport function selectionHasRange(selection: Selection, range: { from: number; to: number }) {\r\n return selection.from === range.from && selection.to === range.to;\r\n}\r\n\r\nexport function selectionIsWithinRange(selection: Selection, range: { from: number; to: number }) {\r\n return selection.anchor >= range.from && selection.anchor <= range.to;\r\n}\r\n\r\nexport function selectionIsBodyTopLevel(selection: Selection) {\r\n const { $head } = selection;\r\n const parentNode = $head.node($head.depth - 1);\r\n return parentNode && \r\n (parentNode.type === parentNode.type.schema.nodes.body ||\r\n (selection instanceof GapCursor && parentNode.type === parentNode.type.schema.nodes.doc));\r\n}\r\n\r\nexport function selectionIsImageNode(schema: Schema, selection: Selection) {\r\n return selection instanceof NodeSelection && [schema.nodes.image, schema.nodes.figure].includes(selection.node.type);\r\n}\r\n\r\nexport function selectionIsEmptyParagraph(schema: Schema, selection: Selection) {\r\n const { $head } = selection;\r\n return $head.parent.type === schema.nodes.paragraph && $head.parent.childCount === 0;\r\n}\r\n\r\nexport function selectionWithinLastBodyParagraph(selection: Selection) {\r\n if (selectionIsBodyTopLevel(selection)) {\r\n const editingRoot = editingRootNode(selection);\r\n if (editingRoot) {\r\n const node = selection.$head.node();\r\n return node === editingRoot.node.lastChild && node.type === node.type.schema.nodes.paragraph;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function restoreSelection(view: EditorView, pos: number) {\r\n const tr = view.state.tr;\r\n if (pos < view.state.doc.nodeSize) {\r\n setTextSelection(pos)(tr);\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n tr.setMeta(kRestoreLocationTransaction, true);\r\n view.dispatch(tr);\r\n }\r\n}\r\n","/*\r\n * paragraph.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { canInsertNode } from './node';\r\n\r\nexport function insertParagraph(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const schema = state.schema;\r\n\r\n if (!canInsertNode(state, schema.nodes.paragraph)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\r\n setTextSelection(state.selection.from + 1, 1)(tr);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function isParagraphNode(node: ProsemirrorNode | null | undefined) {\r\n if (node) {\r\n const schema = node.type.schema;\r\n return node.type === schema.nodes.paragraph;\r\n } else {\r\n return false;\r\n }\r\n}\r\n","/*\r\n * trailing_p.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction, Selection } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Transform } from 'prosemirror-transform';\r\nimport { ContentNodeWithPos } from 'prosemirror-utils';\r\n\r\nimport { editingRootNode } from '../api/node';\r\nimport { trTransform } from '../api/transaction';\r\nimport { isParagraphNode } from '../api/paragraph';\r\n\r\n\r\nexport function insertTrailingP(tr: Transaction) {\r\n const editingNode = editingRootNode(tr.selection);\r\n if (editingNode) {\r\n trTransform(tr, insertTrailingPTransform(editingNode));\r\n }\r\n}\r\n\r\n\r\nexport function requiresTrailingP(selection: Selection) {\r\n const editingRoot = editingRootNode(selection);\r\n if (editingRoot) {\r\n return !isParagraphNode(editingRoot.node.lastChild) || isDisplayMathNode(editingRoot.node.lastChild);\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction insertTrailingPTransform(editingNode: ContentNodeWithPos) {\r\n return (tr: Transform) => {\r\n const schema = editingNode.node.type.schema;\r\n tr.insert(editingNode.pos + editingNode.node.nodeSize - 1, schema.nodes.paragraph.create());\r\n };\r\n}\r\n\r\nfunction isDisplayMathNode(node: ProsemirrorNode | null | undefined) {\r\n if (node && node.firstChild) {\r\n return node.childCount === 1 && node.type.schema.marks.math?.isInSet(node.firstChild.marks);\r\n } else {\r\n return false;\r\n }\r\n}\r\n","/*\r\n * command.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { lift, setBlockType, toggleMark, wrapIn } from 'prosemirror-commands';\r\nimport { Attrs, MarkType, Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\r\nimport { wrapInList, liftListItem } from 'prosemirror-schema-list';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { findParentNode, findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { markIsActive, getMarkRange } from './mark';\r\nimport { canInsertNode, nodeIsActive } from './node';\r\nimport { pandocAttrInSpec, pandocAttrAvailable, pandocAttrFrom } from './pandoc_attr';\r\nimport { isList } from './list';\r\nimport { OmniInsert } from './omni_insert';\r\nimport { EditorUIPrefs, kListSpacingTight } from './ui-types';\r\nimport { selectionIsWithinRange, selectionHasRange } from './selection';\r\nimport { requiresTrailingP, insertTrailingP } from './trailing_p';\r\n\r\nimport { EditorCommandId, EditorCommand } from './command-types';\r\n\r\nexport { EditorCommandId };\r\nexport type { EditorCommand }\r\n\r\nexport class ProsemirrorCommand {\r\n public readonly id: EditorCommandId;\r\n public readonly keymap: readonly string[];\r\n public readonly execute: CommandFn;\r\n public readonly omniInsert?: OmniInsert;\r\n public readonly keepFocus: boolean;\r\n\r\n constructor(\r\n id: EditorCommandId,\r\n keymap: readonly string[],\r\n execute: CommandFn,\r\n omniInsert?: OmniInsert,\r\n keepFocus?: boolean,\r\n ) {\r\n this.id = id;\r\n this.keymap = keymap;\r\n this.execute = execute;\r\n this.omniInsert = omniInsert;\r\n this.keepFocus = !(keepFocus === false);\r\n }\r\n\r\n public isEnabled(state: EditorState): boolean {\r\n return this.execute(state);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public isActive(_state: EditorState): boolean {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public plural(_state: EditorState): number {\r\n return 1;\r\n }\r\n}\r\n\r\nexport class MarkCommand extends ProsemirrorCommand {\r\n public readonly markType: MarkType;\r\n public readonly attrs: object;\r\n\r\n constructor(id: EditorCommandId, keymap: string[], markType: MarkType, attrs = {}) {\r\n super(id, keymap, toggleMarkType(markType, attrs) as CommandFn);\r\n this.markType = markType;\r\n this.attrs = attrs;\r\n }\r\n\r\n public isActive(state: EditorState) {\r\n return markIsActive(state, this.markType);\r\n }\r\n}\r\n\r\nexport class NodeCommand extends ProsemirrorCommand {\r\n public readonly nodeType: NodeType;\r\n public readonly attrs: object;\r\n\r\n constructor(\r\n id: EditorCommandId,\r\n keymap: string[],\r\n nodeType: NodeType,\r\n attrs: object,\r\n execute: CommandFn,\r\n omniInsert?: OmniInsert,\r\n ) {\r\n super(id, keymap, execute, omniInsert);\r\n this.nodeType = nodeType;\r\n this.attrs = attrs;\r\n }\r\n\r\n public isActive(state: EditorState) {\r\n return nodeIsActive(state, this.nodeType, this.attrs);\r\n }\r\n}\r\n\r\nexport class BlockCommand extends NodeCommand {\r\n constructor(\r\n id: EditorCommandId,\r\n keymap: string[],\r\n blockType: NodeType,\r\n toggleType: NodeType,\r\n attrs = {},\r\n omniInsert?: OmniInsert,\r\n ) {\r\n super(id, keymap, blockType, attrs, toggleBlockType(blockType, toggleType, attrs), omniInsert);\r\n }\r\n}\r\n\r\nexport class WrapCommand extends NodeCommand {\r\n constructor(id: EditorCommandId, keymap: string[], wrapType: NodeType, attrs = {}, omniInsert?: OmniInsert) {\r\n super(id, keymap, wrapType, attrs, toggleWrap(wrapType, attrs), omniInsert);\r\n }\r\n}\r\n\r\nexport class InsertCharacterCommand extends ProsemirrorCommand {\r\n constructor(id: EditorCommandId, ch: string, keymap: string[]) {\r\n super(id, keymap, (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // enable/disable command\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.text)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(schema.text(ch), true).scrollIntoView();\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n}\r\n\r\nexport type CommandFn = (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => boolean;\r\n\r\nexport function toggleMarkType(markType: MarkType, attrs?: Attrs) {\r\n const defaultToggleMark = toggleMark(markType, attrs);\r\n\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // disallow non-code marks when the selection is contained within a code mark\r\n // (this is a pandoc constraint). note that we can allow them if the selection\r\n // contains the code mark range entirely (as in that case the code mark will\r\n // nest within the other mark)\r\n if (markType !== state.schema.marks.code) {\r\n if (markIsActive(state, state.schema.marks.code)) {\r\n const codeRange = getMarkRange(state.selection.$anchor, state.schema.marks.code);\r\n if (\r\n codeRange &&\r\n selectionIsWithinRange(state.selection, codeRange) &&\r\n !selectionHasRange(state.selection, codeRange)\r\n ) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n // default implementation\r\n return defaultToggleMark(state, dispatch);\r\n };\r\n}\r\n\r\nexport function toggleList(listType: NodeType, itemType: NodeType, prefs: EditorUIPrefs): CommandFn {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const { selection } = state;\r\n const { $from, $to } = selection;\r\n const range = $from.blockRange($to);\r\n\r\n if (!range) {\r\n return false;\r\n }\r\n\r\n const parentList = findParentNode(isList)(selection);\r\n\r\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\r\n if (isList(parentList.node) && listType.validContent(parentList.node.content)) {\r\n if (parentList.node.type !== listType) {\r\n if (dispatch) {\r\n const tr: Transaction = state.tr;\r\n const attrs: { tight?: boolean } = {};\r\n if (parentList.node.attrs.tight) {\r\n attrs.tight = true;\r\n }\r\n tr.setNodeMarkup(parentList.pos, listType, attrs);\r\n dispatch(tr);\r\n }\r\n return true;\r\n } else {\r\n return liftListItem(itemType)(state, dispatch);\r\n }\r\n }\r\n }\r\n\r\n // if we are in a heading then this isn't valid\r\n if (findParentNodeOfType(state.schema.nodes.heading)(state.selection)) {\r\n return false;\r\n }\r\n\r\n // reflect tight preference\r\n const tight = prefs.listSpacing() === kListSpacingTight;\r\n\r\n return wrapInList(listType, { tight })(state, dispatch);\r\n };\r\n}\r\n\r\nexport function toggleBlockType(type: NodeType, toggletype: NodeType, attrs = {}): CommandFn {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!dispatch) {\r\n return type === toggletype || setBlockType(type, { ...attrs })(state, dispatch);\r\n }\r\n\r\n // if the type has pandoc attrs then see if we can transfer from the existing node\r\n let pandocAttr: Attrs = {};\r\n if (pandocAttrInSpec(type.spec)) {\r\n const parentNode = state.selection.$anchor.node();\r\n if (parentNode && pandocAttrAvailable(parentNode.attrs)) {\r\n pandocAttr = pandocAttrFrom(parentNode.attrs);\r\n }\r\n }\r\n\r\n return setBlockType(type, { ...attrs, ...pandocAttr })(state, dispatch);\r\n };\r\n}\r\n\r\nexport function toggleWrap(type: NodeType, attrs?: Attrs): CommandFn {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const isActive = nodeIsActive(state, type, attrs);\r\n\r\n if (isActive) {\r\n return lift(state, dispatch);\r\n }\r\n\r\n return wrapIn(type, attrs)(state, dispatch);\r\n };\r\n}\r\n\r\nexport function insertNode(nodeType: NodeType, attrs = {}, selectAfter = false): CommandFn {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!canInsertNode(state, nodeType)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(nodeType.create(attrs));\r\n if (selectAfter) {\r\n if (requiresTrailingP(tr.selection)) {\r\n insertTrailingP(tr);\r\n setTextSelection(tr.selection.to + 1, 1)(tr);\r\n }\r\n }\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function exitNode(\r\n nodeType: NodeType,\r\n depth: number,\r\n allowKey: boolean,\r\n filter: (node: ProsemirrorNode) => boolean = () => true,\r\n) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // must be within the node type and pass the filter\r\n const { $head, $anchor } = state.selection;\r\n if ($head.parent.type !== nodeType || !filter($head.parent)) {\r\n return false;\r\n }\r\n\r\n // must be empty and entirely contained by the node\r\n if (!$head.sameParent($anchor) || !state.selection.empty) {\r\n return !allowKey;\r\n }\r\n\r\n // must be at the end of the node\r\n const node = findParentNodeOfType(nodeType)(state.selection)!;\r\n const endCaptionPos = node.pos + node.node.nodeSize - 1;\r\n if (state.selection.from !== endCaptionPos) {\r\n return !allowKey;\r\n }\r\n\r\n // insert must be valid in container above\r\n const above = $head.node(depth);\r\n const after = $head.indexAfter(depth);\r\n const type = above.contentMatchAt(after).defaultType!;\r\n if (!above.canReplaceWith(after, after, type)) {\r\n return !allowKey;\r\n }\r\n\r\n // perform insert\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const pos = node.pos + node.node.nodeSize + (Math.abs(depth) - 1);\r\n tr.insert(pos, type.create());\r\n setTextSelection(pos, 1)(tr);\r\n dispatch(tr.scrollIntoView());\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n","/*\r\n * util.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// tslint:disable:no-bitwise\r\nexport function uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n\r\n\r\n// Returns a random string of (alpha)numeric characters of len length.\r\n// Note that this may return strings with leading numbers, which isn't\r\n// allowed for JavaScript identifiers.\r\nexport function randomAlphanumeric(len: number, includeLower = true, includeUpper = true) {\r\n const pool = \"0123456789\" +\r\n (includeLower ? \"abcdefghijklmnopqrstuvwxyz\" : \"\") +\r\n (includeUpper ? \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" : \"\");\r\n\r\n return \" \".repeat(len).replace(/./g, () => {\r\n return pool.charAt(Math.floor(Math.random() * pool.length));\r\n });\r\n}\r\n\r\n","/*\r\n * rmd.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { GapCursor } from 'prosemirror-gapcursor';\r\n\r\nimport {\r\n findParentNodeOfType,\r\n findChildrenByType,\r\n findChildren,\r\n findChildrenByMark,\r\n setTextSelection,\r\n findParentNode,\r\n} from 'prosemirror-utils';\r\n\r\nimport { getMarkRange } from './mark';\r\nimport { precedingListItemInsertPos, precedingListItemInsert } from './list';\r\nimport { toggleBlockType } from './command';\r\nimport { selectionIsBodyTopLevel, selectionWithinLastBodyParagraph } from './selection';\r\nimport { uuidv4 } from './util';\r\n\r\nexport interface EditorRmdChunk {\r\n lang: string;\r\n meta: string;\r\n code: string;\r\n delimiter: string;\r\n}\r\n\r\nexport type ExecuteRmdChunkFn = (chunk: EditorRmdChunk) => void;\r\n\r\nexport function canInsertRmdChunk(state: EditorState) {\r\n // must either be at the body top level, within a list item, within a div, or within a\r\n // blockquote (and never within a table)\r\n const schema = state.schema;\r\n const within = (nodeType: NodeType) => !!findParentNodeOfType(nodeType)(state.selection);\r\n if (within(schema.nodes.table)) {\r\n return false;\r\n }\r\n if (\r\n !selectionIsBodyTopLevel(state.selection) &&\r\n !within(schema.nodes.list_item) &&\r\n !within(schema.nodes.blockquote) &&\r\n schema.nodes.div && !within(schema.nodes.div)\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function insertRmdChunk(chunkPlaceholder: string) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const schema = state.schema;\r\n\r\n if (\r\n !(state.selection instanceof GapCursor) &&\r\n !toggleBlockType(schema.nodes.rmd_chunk, schema.nodes.paragraph)(state) &&\r\n !precedingListItemInsertPos(state.doc, state.selection)\r\n ) {\r\n return false;\r\n }\r\n\r\n // must either be at the body top level, within a list item, within a div, or within a\r\n // blockquote (and never within a table)\r\n if (!canInsertRmdChunk(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n // perform insert\r\n const tr = state.tr;\r\n const rmdText = schema.text(chunkPlaceholder);\r\n const rmdNode = schema.nodes.rmd_chunk.create({ navigation_id: uuidv4() }, rmdText);\r\n const prevListItemPos = precedingListItemInsertPos(tr.doc, tr.selection);\r\n if (prevListItemPos) {\r\n precedingListItemInsert(tr, prevListItemPos, rmdNode);\r\n } else {\r\n const emptyNode = findParentNode(node => node.type === state.schema.nodes.paragraph && node.childCount === 0)(tr.selection);\r\n if (emptyNode && selectionWithinLastBodyParagraph(tr.selection)) {\r\n tr.insert(tr.selection.from-1, rmdNode);\r\n } else {\r\n tr.replaceSelectionWith(rmdNode);\r\n }\r\n setTextSelection(tr.selection.from - 2)(tr);\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function activeRmdChunk(state: EditorState): EditorRmdChunk | null {\r\n if (state.schema.nodes.rmd_chunk) {\r\n const rmdNode = findParentNodeOfType(state.schema.nodes.rmd_chunk)(state.selection);\r\n if (rmdNode) {\r\n return rmdChunk(rmdNode.node.textContent);\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function previousExecutableRmdChunks(state: EditorState, pos = state.selection.from): EditorRmdChunk[] {\r\n const activeChunk = activeRmdChunk(state);\r\n const lang = activeChunk ? activeChunk.lang : 'r';\r\n const kEvalFalseRegEx = /eval\\s*=\\s*F(?:ALSE)?/;\r\n return previousRmdChunks(state, pos, chunk => {\r\n return (\r\n chunk.lang.localeCompare(lang, undefined, { sensitivity: 'accent' }) === 0 && !kEvalFalseRegEx.test(chunk.meta)\r\n );\r\n });\r\n}\r\n\r\nexport function previousRmdChunks(state: EditorState, pos: number, filter?: (chunk: EditorRmdChunk) => boolean) {\r\n // chunks to return\r\n const chunks: EditorRmdChunk[] = [];\r\n\r\n // find all chunks in the document and return ones before the position that pass the specified filter\r\n const schema = state.schema;\r\n const rmdChunkNodes = findChildrenByType(state.doc, schema.nodes.rmd_chunk);\r\n for (const rmdChunkNode of rmdChunkNodes) {\r\n if (rmdChunkNode.pos + rmdChunkNode.node.nodeSize > pos) {\r\n break;\r\n }\r\n const chunk = rmdChunk(rmdChunkNode.node.textContent);\r\n if (chunk && (!filter || filter(chunk))) {\r\n chunks.push(chunk);\r\n }\r\n }\r\n\r\n // return chunks\r\n return chunks;\r\n}\r\n\r\nexport function rmdChunk(code: string): EditorRmdChunk | null {\r\n let lines = code.trimLeft().split('\\n');\r\n if (lines.length > 0) {\r\n const meta = lines[0].replace(/^[\\s`{]*(.*?)\\}?\\s*$/, '$1');\r\n const matchLang = meta.match(/[\\w_-]+/);\r\n const lang = matchLang ? matchLang[0] : '';\r\n\r\n const isContainerChunk = [\"verbatim\", \"asis\", \"comment\"].includes(lang);\r\n\r\n // for container chunks, delimiter is one backtick greater than the most \r\n // ticks we've found starting a line (otherwise is ```)\r\n const delimiter = isContainerChunk ? lines.reduce((ticks: string, line: string) => {\r\n const match = line.match(/^```+/);\r\n if (match && (match[0].length >= ticks.length)) {\r\n ticks = match[0] + \"`\";\r\n }\r\n return ticks;\r\n }, \"```\") : \"```\";\r\n\r\n // filter out stray ``` if this isn't a container chunk\r\n if (!isContainerChunk) {\r\n // remove lines, other than the first, which are chunk delimiters (start\r\n // with ```). these are generally unintended but can be accidentally\r\n // introduced by e.g., pasting a chunk with its delimiters into visual mode,\r\n // where delimiters are implicit. if these lines aren't removed, they create\r\n // nested chunks that break parsing and can corrupt the document (see case\r\n // 8452)\r\n lines = lines.filter((line, idx) => {\r\n if (idx === 0) {\r\n return true;\r\n }\r\n return !line.startsWith(\"```\");\r\n });\r\n }\r\n \r\n\r\n // a completely empty chunk (no second line) should be returned\r\n // as such. if it's not completely empty then append a newline\r\n // to the result of split (so that the chunk ends w/ a newline)\r\n const chunkCode = lines.length > 1 ? lines.slice(1).join('\\n') + '\\n' : '';\r\n\r\n return {\r\n lang,\r\n meta,\r\n code: chunkCode,\r\n delimiter\r\n };\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function mergeRmdChunks(chunks: EditorRmdChunk[]) {\r\n if (chunks.length) {\r\n const merged = {\r\n lang: chunks[0].lang,\r\n meta: '',\r\n code: '',\r\n };\r\n chunks.forEach(chunk => (merged.code += chunk.code + '\\n'));\r\n return merged;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Attempts to extract the engine name and label from a chunk header.\r\n * \r\n * @param text The chunk header, e.g. {r foo}\r\n * @returns An object with `engine` and `label` properties, or null.\r\n */\r\nexport function rmdChunkEngineAndLabel(text: string) {\r\n\r\n // Match the engine and (maybe the) label with a regex\r\n const match = text.match(/^\\{([a-zA-Z0-9_-]+)[\\s,]*([a-zA-Z0-9/._='\"-]*)/);\r\n \r\n if (match) {\r\n // The first capturing group is the engine\r\n const engine = match[1];\r\n\r\n // The second capturing group in the regex matches the first string after\r\n // the engine. This might be: \r\n // - a label (e.g., {r label})\r\n // - a chunk option (e.g., {r echo=FALSE}). If it has an =, presume that it's an option.\r\n // - empty\r\n if (match[2].length && match[2].indexOf(\"=\") == -1) {\r\n return {\r\n engine: engine,\r\n label: match[2],\r\n };\r\n }\r\n\r\n // Finally, look for label in #| comments\r\n // \r\n // ```{r}\r\n // #| label: label\r\n // \r\n for (const line of text.split(\"\\n\")) {\r\n const labelMatch = line.match(/^#\\|\\s*label:\\s+(.*)$/);\r\n if (labelMatch) {\r\n return {\r\n engine: engine,\r\n label: labelMatch[1],\r\n };\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function haveTableCellsWithInlineRcode(doc: ProsemirrorNode) {\r\n const schema = doc.type.schema;\r\n const haveRCode = !!doc.type.schema.nodes.rmd_chunk;\r\n if (haveRCode) {\r\n const isTableCell = (node: ProsemirrorNode) =>\r\n node.type === schema.nodes.table_cell || node.type === schema.nodes.table_header;\r\n return findChildren(doc, isTableCell).some(cell => {\r\n if (doc.rangeHasMark(cell.pos, cell.pos + cell.node.nodeSize, schema.marks.code)) {\r\n const markedNodes = findChildrenByMark(cell.node, schema.marks.code, true);\r\n return markedNodes.some(markedNode => {\r\n const from = cell.pos + 1 + markedNode.pos;\r\n const markedRange = getMarkRange(doc.resolve(from), schema.marks.code);\r\n if (markedRange) {\r\n const text = doc.textBetween(markedRange.from, markedRange.to);\r\n return /^r[ #].+$/.test(text);\r\n } else {\r\n return false;\r\n }\r\n });\r\n } else {\r\n return false;\r\n }\r\n });\r\n } else {\r\n return false;\r\n }\r\n}\r\n","/*\r\n * pandoc_id.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// emulate pandoc behavior (https://pandoc.org/MANUAL.html#headings-and-sections)\r\nexport function pandocAutoIdentifier(text: string, asciify: boolean) {\r\n if (asciify) {\r\n text = pandocAsciify(text);\r\n }\r\n\r\n return (\r\n text\r\n // Remove all non-alphanumeric characters, except underscores, hyphens, and periods.\r\n .replace(/[!\"#$%&')*+,/:;<=>?@[\\\\\\]^`{|}~]/g, '') // filterPunct\r\n\r\n // Replace all spaces with hyphens\r\n .replace(/\\s/g, '-')\r\n\r\n // Convert all alphabetic characters to lowercase\r\n .toLowerCase()\r\n\r\n // Remove everything up to the first letter\r\n .replace(/^[^A-Za-z]+/, '')\r\n );\r\n}\r\n\r\n// emulate github behavior (note that unemoji should be done prior to calling this)\r\n// https://pandoc.org/MANUAL.html#extension-gfm_auto_identifiers\r\n// https://github.com/jgm/pandoc/blob/83880b0dbc318703babfbb6905b1046fa48f1216/src/Text/Pandoc/Shared.hs#L539\r\nexport function gfmAutoIdentifier(text: string, asciify: boolean) {\r\n if (asciify) {\r\n text = pandocAsciify(text);\r\n }\r\n\r\n return text\r\n .replace(/[!\"#$%&')*+,./:;<=>?@[\\\\\\]^`{|}~]/g, '') // filterPunct (all but underscore and hyphen)\r\n .replace(/\\s/g, '-') // spaceToDash\r\n .toLowerCase(); // toLower\r\n}\r\n\r\n// https://github.com/jgm/pandoc/blob/a5fa55969f1b4afc0ca3e38be50b69c65d43a460/src/Text/Pandoc/Asciify.hs\r\nexport function pandocAsciify(text: string) {\r\n const chars: number[] = [];\r\n const len = text.length;\r\n let newch;\r\n for (let i = 0; i < len; i++) {\r\n newch = '';\r\n const ch = text.charCodeAt(i);\r\n switch (ch) {\r\n case 192:\r\n case 193:\r\n case 194:\r\n case 195:\r\n case 196:\r\n case 197:\r\n case 256:\r\n case 258:\r\n case 260:\r\n case 461:\r\n case 512:\r\n case 514:\r\n case 550:\r\n case 7680:\r\n case 7840:\r\n case 7842:\r\n newch = 'A';\r\n break;\r\n\r\n case 7682:\r\n case 7684:\r\n case 7686:\r\n newch = 'B';\r\n break;\r\n\r\n case 199:\r\n case 262:\r\n case 264:\r\n case 266:\r\n case 268:\r\n newch = 'C';\r\n break;\r\n\r\n case 270:\r\n case 7690:\r\n case 7692:\r\n case 7694:\r\n case 7696:\r\n case 7698:\r\n newch = 'D';\r\n break;\r\n\r\n case 200:\r\n case 201:\r\n case 203:\r\n case 274:\r\n case 276:\r\n case 278:\r\n case 280:\r\n case 282:\r\n case 516:\r\n case 518:\r\n case 552:\r\n case 7704:\r\n case 7706:\r\n case 7864:\r\n case 7866:\r\n case 7868:\r\n newch = 'E';\r\n break;\r\n\r\n case 7710:\r\n newch = 'F';\r\n break;\r\n\r\n case 284:\r\n case 286:\r\n case 288:\r\n case 290:\r\n case 486:\r\n case 500:\r\n case 7712:\r\n newch = 'G';\r\n break;\r\n\r\n case 292:\r\n case 542:\r\n case 7714:\r\n case 7716:\r\n case 7718:\r\n case 7720:\r\n case 7722:\r\n newch = 'H';\r\n break;\r\n\r\n case 204:\r\n case 205:\r\n case 206:\r\n case 207:\r\n case 296:\r\n case 298:\r\n case 300:\r\n case 302:\r\n case 304:\r\n case 463:\r\n case 520:\r\n case 522:\r\n case 7724:\r\n case 7880:\r\n case 7882:\r\n newch = 'I';\r\n break;\r\n\r\n case 308:\r\n newch = 'J';\r\n break;\r\n\r\n case 310:\r\n case 488:\r\n case 7728:\r\n case 7730:\r\n case 7732:\r\n case 8490:\r\n newch = 'K';\r\n break;\r\n\r\n case 313:\r\n case 315:\r\n case 317:\r\n case 7734:\r\n case 7738:\r\n case 7740:\r\n newch = 'L';\r\n break;\r\n\r\n case 7742:\r\n case 7744:\r\n case 7746:\r\n newch = 'M';\r\n break;\r\n\r\n case 209:\r\n case 323:\r\n case 325:\r\n case 327:\r\n case 504:\r\n case 7748:\r\n case 7750:\r\n case 7752:\r\n case 7754:\r\n newch = 'N';\r\n break;\r\n\r\n case 210:\r\n case 211:\r\n case 212:\r\n case 213:\r\n case 214:\r\n case 332:\r\n case 334:\r\n case 336:\r\n case 416:\r\n case 465:\r\n case 490:\r\n case 524:\r\n case 526:\r\n case 558:\r\n case 7884:\r\n case 7886:\r\n newch = 'O';\r\n break;\r\n\r\n case 7764:\r\n case 7766:\r\n newch = 'P';\r\n break;\r\n\r\n case 340:\r\n case 342:\r\n case 344:\r\n case 528:\r\n case 530:\r\n case 7768:\r\n case 7770:\r\n case 7774:\r\n newch = 'R';\r\n break;\r\n\r\n case 346:\r\n case 348:\r\n case 350:\r\n case 352:\r\n case 536:\r\n case 7776:\r\n case 7778:\r\n newch = 'S';\r\n break;\r\n\r\n case 354:\r\n case 356:\r\n case 538:\r\n case 7786:\r\n case 7788:\r\n case 7790:\r\n case 7792:\r\n newch = 'T';\r\n break;\r\n\r\n case 217:\r\n case 218:\r\n case 219:\r\n case 220:\r\n case 360:\r\n case 362:\r\n case 364:\r\n case 366:\r\n case 368:\r\n case 370:\r\n case 431:\r\n case 467:\r\n case 532:\r\n case 534:\r\n case 7794:\r\n case 7796:\r\n case 7798:\r\n case 7908:\r\n case 7910:\r\n newch = 'U';\r\n break;\r\n\r\n case 7804:\r\n case 7806:\r\n newch = 'V';\r\n break;\r\n\r\n case 372:\r\n case 7808:\r\n case 7810:\r\n case 7812:\r\n case 7814:\r\n case 7816:\r\n newch = 'W';\r\n break;\r\n\r\n case 7818:\r\n case 7820:\r\n newch = 'X';\r\n break;\r\n\r\n case 221:\r\n case 374:\r\n case 376:\r\n case 562:\r\n case 7822:\r\n case 7922:\r\n case 7924:\r\n case 7926:\r\n case 7928:\r\n newch = 'Y';\r\n break;\r\n\r\n case 377:\r\n case 379:\r\n case 381:\r\n case 7824:\r\n case 7826:\r\n case 7828:\r\n newch = 'Z';\r\n break;\r\n\r\n case 224:\r\n case 225:\r\n case 226:\r\n case 227:\r\n case 228:\r\n case 229:\r\n case 257:\r\n case 259:\r\n case 261:\r\n case 462:\r\n case 513:\r\n case 515:\r\n case 551:\r\n case 553:\r\n case 7681:\r\n case 7841:\r\n case 7843:\r\n newch = 'a';\r\n break;\r\n\r\n case 7683:\r\n case 7685:\r\n case 7687:\r\n newch = 'b';\r\n break;\r\n\r\n case 231:\r\n case 263:\r\n case 265:\r\n case 267:\r\n case 269:\r\n newch = 'c';\r\n break;\r\n\r\n case 271:\r\n case 7691:\r\n case 7693:\r\n case 7695:\r\n case 7697:\r\n case 7699:\r\n newch = 'd';\r\n break;\r\n\r\n case 232:\r\n case 233:\r\n case 234:\r\n case 235:\r\n case 275:\r\n case 277:\r\n case 279:\r\n case 281:\r\n case 283:\r\n case 517:\r\n case 519:\r\n case 7705:\r\n case 7707:\r\n case 7865:\r\n case 7867:\r\n case 7869:\r\n newch = 'e';\r\n break;\r\n\r\n case 7711:\r\n newch = 'f';\r\n break;\r\n\r\n case 285:\r\n case 287:\r\n case 289:\r\n case 291:\r\n case 487:\r\n case 501:\r\n case 7713:\r\n newch = 'g';\r\n break;\r\n\r\n case 293:\r\n case 543:\r\n case 7715:\r\n case 7717:\r\n case 7719:\r\n case 7721:\r\n case 7723:\r\n case 7830:\r\n newch = 'h';\r\n break;\r\n\r\n case 236:\r\n case 237:\r\n case 238:\r\n case 239:\r\n case 297:\r\n case 299:\r\n case 301:\r\n case 303:\r\n case 305:\r\n case 464:\r\n case 521:\r\n case 523:\r\n case 7725:\r\n case 7881:\r\n case 7883:\r\n newch = 'i';\r\n break;\r\n\r\n case 309:\r\n case 496:\r\n newch = 'j';\r\n break;\r\n\r\n case 311:\r\n case 489:\r\n case 7729:\r\n case 7731:\r\n case 7733:\r\n newch = 'k';\r\n break;\r\n\r\n case 314:\r\n case 316:\r\n case 318:\r\n case 7735:\r\n case 7739:\r\n case 7741:\r\n newch = 'l';\r\n break;\r\n\r\n case 7743:\r\n case 7745:\r\n case 7747:\r\n newch = 'm';\r\n break;\r\n\r\n case 241:\r\n case 324:\r\n case 326:\r\n case 328:\r\n case 505:\r\n case 7749:\r\n case 7751:\r\n case 7753:\r\n case 7755:\r\n newch = 'n';\r\n break;\r\n\r\n case 242:\r\n case 243:\r\n case 244:\r\n case 245:\r\n case 246:\r\n case 333:\r\n case 335:\r\n case 337:\r\n case 417:\r\n case 432:\r\n case 466:\r\n case 491:\r\n case 525:\r\n case 527:\r\n case 559:\r\n case 7885:\r\n case 7887:\r\n newch = 'o';\r\n break;\r\n\r\n case 7765:\r\n case 7767:\r\n newch = 'p';\r\n break;\r\n\r\n case 341:\r\n case 343:\r\n case 345:\r\n case 529:\r\n case 531:\r\n case 7769:\r\n case 7771:\r\n case 7775:\r\n newch = 'r';\r\n break;\r\n\r\n case 347:\r\n case 349:\r\n case 351:\r\n case 353:\r\n case 537:\r\n case 7777:\r\n case 7779:\r\n newch = 's';\r\n break;\r\n\r\n case 355:\r\n case 357:\r\n case 539:\r\n case 7787:\r\n case 7789:\r\n case 7791:\r\n case 7793:\r\n case 7831:\r\n newch = 't';\r\n break;\r\n\r\n case 249:\r\n case 250:\r\n case 251:\r\n case 252:\r\n case 361:\r\n case 363:\r\n case 365:\r\n case 367:\r\n case 369:\r\n case 371:\r\n case 468:\r\n case 533:\r\n case 535:\r\n case 7795:\r\n case 7797:\r\n case 7799:\r\n case 7909:\r\n case 7911:\r\n newch = 'u';\r\n break;\r\n\r\n case 7805:\r\n case 7807:\r\n newch = 'v';\r\n break;\r\n\r\n case 373:\r\n case 7809:\r\n case 7811:\r\n case 7813:\r\n case 7815:\r\n case 7817:\r\n case 7832:\r\n newch = 'w';\r\n break;\r\n\r\n case 7819:\r\n case 7821:\r\n newch = 'x';\r\n break;\r\n\r\n case 253:\r\n case 255:\r\n case 375:\r\n case 563:\r\n case 7833:\r\n case 7923:\r\n case 7925:\r\n case 7927:\r\n case 7929:\r\n newch = 'y';\r\n break;\r\n\r\n case 378:\r\n case 380:\r\n case 382:\r\n case 7825:\r\n case 7827:\r\n case 7829:\r\n newch = 'z';\r\n break;\r\n\r\n case 894:\r\n newch = ';';\r\n break;\r\n\r\n case 8175:\r\n newch = '`';\r\n break;\r\n\r\n case 8800:\r\n newch = '=';\r\n break;\r\n\r\n case 8814:\r\n newch = '<';\r\n break;\r\n\r\n case 8815:\r\n newch = '>';\r\n break;\r\n }\r\n if (newch) {\r\n chars.push(newch.charCodeAt(0));\r\n } else if (ch < 128) {\r\n chars.push(ch);\r\n }\r\n }\r\n\r\n // return string\r\n return String.fromCharCode(...chars);\r\n}\r\n","/*\r\n * raw.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { EditorUI } from './ui-types';\r\nimport { setBlockType } from 'prosemirror-commands';\r\n\r\nexport const kTexFormat = 'tex';\r\nexport const kHTMLFormat = 'html';\r\nexport const kHTML4Format = 'html4';\r\nexport const kHTML5Format = 'html5';\r\n\r\nexport function isRawHTMLFormat(format: string) {\r\n return [kHTMLFormat, kHTML4Format, kHTML5Format].includes(format);\r\n}\r\n\r\nexport function editRawBlockCommand(ui: EditorUI, outputFormats: string[]) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n const schema = state.schema;\r\n\r\n // enable if we are either inside a raw block or we can insert a raw block\r\n const rawBlock = findParentNodeOfType(schema.nodes.raw_block)(state.selection);\r\n\r\n if (!rawBlock && !setBlockType(schema.nodes.raw_block, { format: 'html' })(state)) {\r\n return false;\r\n }\r\n\r\n async function asyncEditRawBlock() {\r\n if (dispatch) {\r\n // get existing attributes (if any)\r\n const raw = {\r\n format: '',\r\n content: '',\r\n };\r\n if (rawBlock) {\r\n raw.format = rawBlock.node.attrs.format;\r\n }\r\n\r\n // show dialog\r\n const result = await ui.dialogs.editRawBlock(raw, outputFormats);\r\n if (result) {\r\n const tr = state.tr;\r\n\r\n // remove means convert the block to text\r\n if (rawBlock) {\r\n const range = { from: rawBlock.pos, to: rawBlock.pos + rawBlock.node.nodeSize };\r\n if (result.action === 'remove') {\r\n tr.setBlockType(range.from, range.to, schema.nodes.paragraph);\r\n } else if (result.action === 'edit') {\r\n tr.setNodeMarkup(range.from, rawBlock.node.type, { format: result.raw.format });\r\n setTextSelection(tr.selection.from - 1, -1)(tr);\r\n }\r\n } else {\r\n insertRawNode(tr, result.raw.format);\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n }\r\n\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n asyncEditRawBlock();\r\n\r\n return true;\r\n };\r\n}\r\n\r\n// function to create a raw node\r\nfunction createRawNode(schema: Schema, format: string) {\r\n return schema.nodes.raw_block.create({ format })!;\r\n}\r\n\r\n// function to create and insert a raw node, then set selection inside of it\r\nfunction insertRawNode(tr: Transaction, format: string) {\r\n const schema = tr.doc.type.schema;\r\n const prevSel = tr.selection;\r\n tr.replaceSelectionWith(createRawNode(schema, format), false);\r\n setTextSelection(tr.mapping.map(prevSel.from), -1)(tr);\r\n}\r\n","/*\r\n * xref.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, MarkType } from 'prosemirror-model';\r\n\r\nimport { findChildrenByMark } from 'prosemirror-utils';\r\n\r\nimport { pandocAutoIdentifier } from './pandoc_id';\r\nimport { rmdChunkEngineAndLabel } from './rmd';\r\nimport { kTexFormat } from './raw';\r\nimport { findChildrenByType } from 'prosemirror-utils';\r\nimport { XRef, XRefType } from 'editor-types';\r\n\r\n\r\nexport function xrefKey(xref: XRef, xrefType?: XRefType) {\r\n if (xrefType === \"quarto\") {\r\n // Quarto keys are merely type-id\r\n if (xref.suffix) {\r\n return `${xref.type}-${xref.id}${xref.suffix}`;\r\n } else {\r\n return `${xref.type}-${xref.id}`;\r\n }\r\n } else {\r\n // headings don't include their type in the key\r\n const key = /^h\\d$/.test(xref.type)\r\n ? xref.id\r\n : // no colon if there is no type\r\n xref.type.length > 0\r\n ? `${xref.type}:${xref.id}`\r\n : xref.id;\r\n\r\n // return key with suffix\r\n return key + xref.suffix;\r\n }\r\n}\r\n\r\nexport function parseQuartoXRef(xref: string) {\r\n const dashPos = xref.indexOf('-');\r\n if (dashPos !== -1) {\r\n return {\r\n type: xref.substring(0, dashPos),\r\n id: xref.substring(dashPos + 1),\r\n };\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function xrefPosition(doc: ProsemirrorNode, xref: string, xrefType: XRefType): number {\r\n\r\n if (xrefType === 'quarto') {\r\n return xrefPositionLocate(doc, xref, quartoXrefPositionLocators);\r\n } else {\r\n return xrefPositionLocate(doc, xref, bookdownXrefPositionLocators);\r\n }\r\n}\r\n\r\nfunction xrefPositionLocate(doc: ProsemirrorNode, xref: string, locators: Record<string, XRefPositionLocator>) {\r\n // -1 if not found\r\n let xrefPos = -1;\r\n\r\n // get type and id\r\n const xrefInfo = parseBookdownXRef(xref);\r\n if (xrefInfo) {\r\n const { type, id } = xrefInfo;\r\n const locator = locators[type];\r\n if (locator) {\r\n // if this locator finds by mark then look at doc for marks\r\n if (locator.markType) {\r\n const schema = doc.type.schema;\r\n const markType = schema.marks[locator.markType];\r\n const markedNodes = findChildrenByMark(doc, markType, true);\r\n markedNodes.forEach(markedNode => {\r\n // bail if we already found it\r\n if (xrefPos !== -1) {\r\n return;\r\n }\r\n // see if we can locate the xref\r\n if (locator.hasXRef(markedNode.node, id, markType)) {\r\n xrefPos = markedNode.pos;\r\n }\r\n });\r\n }\r\n if (xrefPos === -1 && locator.nodeTypes) {\r\n // otherwise recursively examine nodes to find the xref\r\n doc.descendants((node, pos) => {\r\n // bail if we already found it\r\n if (xrefPos !== -1) {\r\n return false;\r\n }\r\n // see if we can locate the xref\r\n if (locator.nodeTypes!.includes(node.type.name) && locator.hasXRef(node, id)) {\r\n xrefPos = pos;\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n }\r\n }\r\n\r\n // return the position\r\n return xrefPos;\r\n}\r\n\r\nfunction parseBookdownXRef(xref: string) {\r\n const colonPos = xref.indexOf(':');\r\n if (colonPos !== -1) {\r\n return {\r\n type: xref.substring(0, colonPos),\r\n id: xref.substring(colonPos + 1),\r\n };\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\ninterface XRefPositionLocator {\r\n markType?: string;\r\n nodeTypes?: string[];\r\n hasXRef: (node: ProsemirrorNode, id: string, markType?: MarkType) => boolean;\r\n}\r\n\r\nconst quartoXrefPositionLocators: { [key: string]: XRefPositionLocator } = {\r\n sec: quartoHeadingLocator(),\r\n fig: quartoFigureLocator(),\r\n tbl: quartoTableLocator(),\r\n eq: quartoMathLocator(),\r\n lst: quartoListingLocator(),\r\n thm: quartoDivLocator(\"thm\"),\r\n lem: quartoDivLocator(\"lem\"),\r\n cor: quartoDivLocator(\"cor\"),\r\n prp: quartoDivLocator(\"prp\"),\r\n cnj: quartoDivLocator(\"cnj\"),\r\n def: quartoDivLocator(\"def\"),\r\n exm: quartoDivLocator(\"exm\"),\r\n exr: quartoDivLocator(\"exr\"),\r\n};\r\n\r\n\r\nfunction quartoMathLocator() {\r\n return {\r\n nodeTypes: ['paragraph'],\r\n hasXRef: (node: ProsemirrorNode) => {\r\n const mathType = node.type.schema.marks.math;\r\n let prevNodeMath = false;\r\n for (let i = 0; i < node.childCount; i++) {\r\n const childNode = node.child(i);\r\n if (prevNodeMath) {\r\n const text = childNode.textContent;\r\n if (text.match(/^\\s*\\{#eq-.*\\}/)) {\r\n return true;\r\n }\r\n }\r\n prevNodeMath = !!childNode.marks.find(\r\n mark => mark.type === mathType && mark.attrs.type === \"DisplayMath\"\r\n );\r\n }\r\n return false;\r\n },\r\n };\r\n}\r\n\r\nfunction quartoFigureLocator() {\r\n return {\r\n nodeTypes: ['figure'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n return node.attrs.id === `fig-${id}`;\r\n },\r\n };\r\n}\r\n\r\nfunction quartoHeadingLocator() {\r\n return {\r\n nodeTypes: ['heading'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n return node.attrs.id === `sec-${id}`;\r\n },\r\n };\r\n}\r\n\r\nfunction quartoTableLocator() {\r\n return {\r\n nodeTypes: ['table_container'],\r\n hasXRef: (node: ProsemirrorNode) => {\r\n // Look for a table which has a table caption that contains the id\r\n const captions = findChildrenByType(node, node.type.schema.nodes.table_caption);\r\n if (captions.length) {\r\n return !!captions[0].node.textContent.match(/\\{#tbl-.*\\}/);\r\n }\r\n return false;\r\n },\r\n };\r\n}\r\n\r\nfunction quartoDivLocator(type: string) {\r\n return {\r\n nodeTypes: ['div'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n return node.attrs.id === `${type}-${id}`;\r\n },\r\n };\r\n}\r\n\r\nfunction quartoListingLocator() {\r\n return {\r\n nodeTypes: ['code_block'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n const attrs = node.attrs;\r\n return attrs.id === `lst-${id}`;\r\n },\r\n };\r\n}\r\n\r\nconst bookdownXrefPositionLocators: { [key: string]: XRefPositionLocator } = {\r\n h1: headingLocator(),\r\n h2: headingLocator(),\r\n h3: headingLocator(),\r\n h4: headingLocator(),\r\n h5: headingLocator(),\r\n h6: headingLocator(),\r\n fig: {\r\n nodeTypes: ['rmd_chunk'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => rmdChunkHasXRef(node, 'r', id, /^\\{.*[ ,].*fig\\.cap\\s*=.*\\}\\s*\\n/m),\r\n },\r\n tab: {\r\n nodeTypes: ['rmd_chunk', 'table_container'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n if (node.type.name === 'rmd_chunk') {\r\n return rmdChunkHasXRef(node, 'r', id, /kable\\s*\\([\\s\\S]*caption/);\r\n } else if (node.type.name === 'table_container') {\r\n const caption = node.child(1);\r\n const match = caption.textContent.match(/^\\s*\\(#tab:([a-zA-Z0-9/-]+)\\)\\s*(.*)$/);\r\n return !!match && match[1].localeCompare(id, undefined, { sensitivity: 'accent' }) === 0;\r\n } else {\r\n return false;\r\n }\r\n },\r\n },\r\n eq: {\r\n nodeTypes: ['raw_block'],\r\n markType: 'math',\r\n hasXRef: (node: ProsemirrorNode, id: string, markType?: MarkType) => {\r\n // if it's not a mark then ensure it is tex format before proceeding\r\n if (!markType && (node.attrs.format !== kTexFormat)) {\r\n return false;\r\n }\r\n const match = node.textContent.match(/^.*\\(\\\\#eq:([a-zA-Z0-9/-]+)\\).*$/m);\r\n return !!match && match[1].localeCompare(id, undefined, { sensitivity: 'accent' }) === 0;\r\n },\r\n },\r\n thm: thereomLocator('theorem'),\r\n lem: thereomLocator('lemma'),\r\n cor: thereomLocator('corollary'),\r\n prp: thereomLocator('proposition'),\r\n cnj: thereomLocator('conjecture'),\r\n def: thereomLocator('definition'),\r\n exr: thereomLocator('exercise'),\r\n};\r\n\r\nfunction rmdChunkHasXRef(node: ProsemirrorNode, engine: string, label: string, pattern?: RegExp) {\r\n const chunk = rmdChunkEngineAndLabel(node.textContent);\r\n if (chunk) {\r\n return (\r\n chunk.engine.localeCompare(engine, undefined, { sensitivity: 'accent' }) === 0 &&\r\n chunk.label === label &&\r\n (!pattern || !!node.textContent.match(pattern))\r\n );\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction headingLocator() {\r\n return {\r\n nodeTypes: ['heading'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n // note we use default pandoc auto id semantics here no matter what the documnet\r\n // happens to use b/c our xref indexing code also does this (so only ids generated\r\n // using the 'standard' rules will be in the index)\r\n return node.attrs.id === id || pandocAutoIdentifier(node.textContent, false) === id;\r\n },\r\n };\r\n}\r\n\r\nfunction thereomLocator(engine: string) {\r\n return {\r\n nodeTypes: ['rmd_chunk'],\r\n hasXRef: (node: ProsemirrorNode, id: string) => {\r\n // look for conventional engine/label\r\n if (rmdChunkHasXRef(node, engine, id)) {\r\n return true;\r\n } else {\r\n // look for explicit label= syntax\r\n const match = node.textContent.match(/^\\{([a-zA-Z0-9_-]+)[\\s,]+label\\s*=\\s*['\"]([^\"']+)['\"].*\\}/);\r\n return !!match && match[1].localeCompare(engine, undefined, { sensitivity: 'accent' }) === 0 && match[2] === id;\r\n }\r\n },\r\n };\r\n}\r\n","/*\r\n * navigation.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { setTextSelection, Predicate, findChildren, findDomRefAtPos, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\r\n\r\nimport zenscroll from 'zenscroll';\r\n\r\nimport { editingRootNodeClosestToPos } from './node';\r\nimport { kNavigationTransaction } from './transaction';\r\nimport { xrefPosition } from './xref';\r\nimport { EditorFormat, kQuartoDocType } from './format';\r\nimport { Navigation, NavigationType } from './navigation-types';\r\nimport { editorScrollContainer } from './scroll';\r\nimport { NodeSelection } from 'prosemirror-state';\r\n\r\nexport function navigateTo(\r\n view: EditorView,\r\n format: EditorFormat,\r\n type: NavigationType,\r\n location: string,\r\n animate = true,\r\n): Navigation | null {\r\n switch (type) {\r\n case NavigationType.Pos:\r\n return navigateToPos(view, parseInt(location, 10), animate);\r\n case NavigationType.Id:\r\n return navigateToId(view, location, animate);\r\n case NavigationType.Href:\r\n return navigateToHref(view, location, animate);\r\n case NavigationType.Heading:\r\n return navigateToHeading(view, location, animate);\r\n case NavigationType.XRef:\r\n return navigateToXRef(view, format, location, animate);\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nexport function navigateToId(view: EditorView, id: string, animate = true): Navigation | null {\r\n return navigate(view, node => id === node.attrs.navigation_id, animate);\r\n}\r\n\r\nexport function navigateToHref(view: EditorView, href: string, animate = true): Navigation | null {\r\n return navigate(view, node => node.attrs.id === href, animate);\r\n}\r\n\r\nexport function navigateToHeading(view: EditorView, heading: string, animate = true): Navigation | null {\r\n return navigate(\r\n view,\r\n node => {\r\n return (\r\n node.type === view.state.schema.nodes.heading &&\r\n node.textContent.localeCompare(heading, undefined, { sensitivity: 'accent' }) === 0\r\n );\r\n },\r\n animate,\r\n );\r\n}\r\n\r\nexport function navigateToXRef(view: EditorView, editorFormat: EditorFormat, xref: string, animate = true): Navigation | null {\r\n const xrefType = editorFormat.docTypes.includes(kQuartoDocType) ? \"quarto\" : \"bookdown\";\r\n const xrefPos = xrefPosition(view.state.doc, xref, xrefType);\r\n if (xrefPos !== -1) {\r\n return navigateToPos(view, xrefPos, animate);\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function navigateToPos(view: EditorView, pos: number, animate = true): Navigation | null {\r\n // get previous position\r\n const prevPos = view.state.selection.from;\r\n\r\n // need to target at least the body\r\n pos = Math.max(pos, 2);\r\n\r\n // set selection (detect node selection)\r\n const tr = view.state.tr;\r\n const pmNode = view.state.doc.nodeAt(pos);\r\n if (pmNode?.type.spec.selectable) {\r\n tr.setSelection(new NodeSelection(tr.doc.resolve(pos)));\r\n } else {\r\n setTextSelection(pos)(tr);\r\n }\r\n tr.setMeta(kNavigationTransaction, true);\r\n view.dispatch(tr);\r\n\r\n // find a targetable dom node at the position\r\n const node = findDomRefAtPos(pos, view.domAtPos.bind(view));\r\n if (node instanceof HTMLElement) {\r\n // auto-scroll to position (delay so we can grab the focus, as autoscrolling\r\n // doesn't seem to work unless you have the focus)\r\n setTimeout(() => {\r\n view.focus();\r\n\r\n const $pos = view.state.doc.resolve(pos);\r\n const container = editingRootNodeClosestToPos($pos);\r\n\r\n // if we have a container then do the scroll\r\n if (container) {\r\n const schema = view.state.schema;\r\n const containerEl = view.nodeDOM(container.pos) as HTMLElement;\r\n const parentList = findParentNodeOfTypeClosestToPos($pos, [schema.nodes.ordered_list, schema.nodes.bullet_list]);\r\n const parentDiv = schema.nodes.div ? findParentNodeOfTypeClosestToPos($pos, schema.nodes.div) : undefined;\r\n const resultPos = parentList || parentDiv ? $pos.before(2) : pos;\r\n const resultNode = view.nodeDOM(resultPos);\r\n if (resultNode) {\r\n const scrollNode = resultNode instanceof HTMLElement ? resultNode : resultNode.parentElement;\r\n if (scrollNode) {\r\n const scroller = zenscroll.createScroller(editorScrollContainer(containerEl), 700, 20);\r\n if (animate) {\r\n scroller.to(scrollNode);\r\n } else {\r\n scroller.to(scrollNode, 0);\r\n }\r\n }\r\n }\r\n }\r\n }, 200);\r\n\r\n return { pos, prevPos };\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction navigate(view: EditorView, predicate: Predicate, animate = true): Navigation | null {\r\n const result = findChildren(view.state.doc, predicate);\r\n if (result.length) {\r\n // pos points immediately before the node so add 1 to it\r\n const pos = result[0].pos + 1;\r\n return navigateToPos(view, pos, animate);\r\n } else {\r\n return null;\r\n }\r\n}\r\n","/*\r\n * code.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\r\n\r\nimport { GapCursor } from 'prosemirror-gapcursor';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { Position } from \"vscode-languageserver-types\"\r\n\r\nimport zenscroll from 'zenscroll';\r\n\r\nimport { lines } from 'core';\r\n\r\nimport { CommandFn } from \"./command\";\r\nimport { ExtensionFn } from \"./extension-types\";\r\nimport { editingRootNode } from './node';\r\nimport { editorScrollContainer } from './scroll';\r\n\r\nimport { rmdChunk } from './rmd';\r\nimport { CodeViewActiveBlockContext, CodeViewCellContext, CodeViewCompletionContext, CodeViewSelectionAction } from 'editor-types';\r\nimport { navigateToPos } from './navigation';\r\n\r\nexport const kCodeViewNextLineTransaction = \"codeViewNextLine\";\r\n\r\nexport type CodeViewExtensionFn = (codeViews: { [key: string]: CodeViewOptions }) => ExtensionFn;\r\n\r\nexport interface CodeViewOptions {\r\n lang: (attrs: ProsemirrorNode, content: string) => string | null;\r\n attrEditFn?: CommandFn;\r\n createFromPastePattern?: RegExp;\r\n classes?: string[];\r\n borderColorClass?: string;\r\n firstLineMeta?: boolean;\r\n lineNumbers?: boolean;\r\n bookdownTheorems?: boolean;\r\n lineNumberFormatter?: (lineNumber: number, lineCount?: number, line?: string) => string;\r\n}\r\n\r\n/**\r\n * Track all code view node view instances to implement additional behavior\r\n * (e.g. gap cursor for clicks between editor instances)\r\n */\r\n\r\nexport interface CodeEditorNodeView {\r\n isFocused() : boolean;\r\n getPos(): number;\r\n dom: HTMLElement;\r\n setGapCursorPending(pending: boolean): void;\r\n}\r\n\r\nexport class CodeEditorNodeViews {\r\n private nodeViews: CodeEditorNodeView[];\r\n\r\n constructor() {\r\n this.nodeViews = [];\r\n }\r\n public add(nodeView: CodeEditorNodeView) {\r\n this.nodeViews.push(nodeView);\r\n }\r\n\r\n public remove(nodeView: CodeEditorNodeView) {\r\n const index = this.nodeViews.indexOf(nodeView);\r\n if (index >= 0) {\r\n this.nodeViews.splice(index, 1);\r\n }\r\n }\r\n\r\n public activeNodeView() : CodeEditorNodeView | undefined {\r\n return this.nodeViews.find(view => view.isFocused());\r\n }\r\n\r\n public handleClick(view: EditorView, event: Event): boolean {\r\n // alias to mouseEvent\r\n const mouseEvent = event as MouseEvent;\r\n\r\n // see if the click is between 2 contiguously located node views\r\n for (const nodeView of this.nodeViews) {\r\n // gap cursor we might detect\r\n let gapCursor: GapCursor | null = null;\r\n\r\n // get the position\r\n const pos = nodeView.getPos();\r\n const $pos = view.state.doc.resolve(pos);\r\n\r\n // if the previous node is code, see if the click is between the 2 nodes\r\n if ($pos.nodeBefore && $pos.nodeBefore.type.spec.code) {\r\n // get our bounding rect\r\n const dom = nodeView.dom;\r\n const nodeViewRect = dom.getBoundingClientRect();\r\n\r\n // get the previous node's bounding rect\r\n const prevNodePos = pos - $pos.nodeBefore!.nodeSize;\r\n const prevNodeView = this.nodeViews.find(nv => nv.getPos() === prevNodePos);\r\n if (prevNodeView) {\r\n const prevNodeRect = prevNodeView.dom.getBoundingClientRect();\r\n\r\n // check for a click between the two nodes\r\n const mouseY = mouseEvent.clientY;\r\n if (mouseY > prevNodeRect.top + prevNodeRect.height && mouseY < nodeViewRect.top) {\r\n gapCursor = new GapCursor($pos);\r\n }\r\n }\r\n\r\n // if there is no previous node and the click is above us then gap cursor above\r\n // (only do this if the cursor is within 150 pixels of the left edge)\r\n } else if (\r\n !$pos.nodeBefore &&\r\n $pos.depth === 1 &&\r\n mouseEvent.clientY < nodeView.dom.getBoundingClientRect().top &&\r\n Math.abs(mouseEvent.clientX - nodeView.dom.getBoundingClientRect().left) < 150\r\n ) {\r\n gapCursor = new GapCursor($pos);\r\n }\r\n\r\n // return gapCursor if we found one\r\n if (gapCursor) {\r\n const tr = view.state.tr;\r\n\r\n // notify the node views that we are setting a gap cursor\r\n this.nodeViews.forEach(ndView => ndView.setGapCursorPending(true));\r\n\r\n // ensure the view is focused\r\n view.focus();\r\n\r\n // set the selection\r\n tr.setSelection(gapCursor);\r\n view.dispatch(tr);\r\n\r\n // notify the node views that we are done setting the gap cursor\r\n this.nodeViews.forEach(ndView => ndView.setGapCursorPending(false));\r\n\r\n // prevent default event handling\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\n\r\nexport function scrollCodeViewElementIntoView(ele: HTMLElement, codeViewDom: HTMLElement, view: EditorView) {\r\n const editingRoot = editingRootNode(view.state.selection);\r\n if (editingRoot) {\r\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n const scroller = zenscroll.createScroller(editorScrollContainer(container));\r\n\r\n let top = 0;\r\n\r\n // The DOM node representing this editor chunk (this.dom) may not be a\r\n // direct child of the scrollable container. If it isn't, walk up the DOM\r\n // tree until we find the main content node (pm-content), which is the\r\n // offset parent against which we need to compute scroll position.\r\n let scrollParent = codeViewDom;\r\n while (scrollParent.offsetParent != null &&\r\n !scrollParent.offsetParent.classList.contains(\"pm-content\"))\r\n {\r\n top += scrollParent.offsetTop;\r\n scrollParent = scrollParent.offsetParent as HTMLElement;\r\n }\r\n\r\n // Since the element we want to scroll into view is not a direct child of\r\n // the scrollable container, do a little math to figure out the\r\n // destination scroll position.\r\n top += ele.offsetTop + scrollParent.offsetTop;\r\n const bottom = top + ele.offsetHeight;\r\n const viewTop = container.scrollTop;\r\n const viewBottom = container.scrollTop + container.offsetHeight;\r\n\r\n // Scroll based on element's current position and size\r\n if (top > viewTop && bottom < viewBottom) {\r\n // Element is already fully contained in the viewport\r\n return;\r\n } else if (ele.offsetHeight > container.offsetHeight) {\r\n // Element is taller than the viewport, so show the first part of it\r\n scroller.toY(top);\r\n } else if (top < viewTop) {\r\n // Element is above viewport, so scroll it into view\r\n scroller.toY(top);\r\n } else if (bottom > viewBottom) {\r\n // Part of the element is beneath the viewport, so scroll just enough to\r\n // bring it into view\r\n scroller.toY(container.scrollTop - (viewBottom - bottom));\r\n }\r\n }\r\n}\r\n\r\nexport function codeViewSetBlockSelection(\r\n view: EditorView, \r\n context: CodeViewActiveBlockContext, \r\n action: CodeViewSelectionAction \r\n) {\r\n \r\n\r\n const activeIndex = context.blocks.findIndex(block => block.active);\r\n\r\n if (activeIndex !== -1) {\r\n if (action === \"nextline\") {\r\n const tr = view.state.tr;\r\n tr.setMeta(kCodeViewNextLineTransaction, true);\r\n view.dispatch(tr);\r\n } else {\r\n let navigatePos : number | undefined;\r\n if (action === \"nextblock\") {\r\n navigatePos = context.blocks[activeIndex + 1]?.pos;\r\n } else if (action === \"prevblock\") {\r\n navigatePos = context.blocks[activeIndex - 1]?.pos;\r\n } \r\n if (navigatePos) { \r\n navigateToPos(view, navigatePos!, false);\r\n }\r\n }\r\n }\r\n\r\n\r\n \r\n}\r\n\r\n\r\nexport function codeViewActiveBlockContext(state: EditorState) : CodeViewActiveBlockContext | undefined {\r\n return codeViewBlockContext(state, false, [state.schema.nodes.rmd_chunk]);\r\n}\r\n\r\n\r\nfunction codeViewBlockContext(state: EditorState, activeLanguageOnly = false, nodeTypes?: NodeType[]) : CodeViewActiveBlockContext | undefined {\r\n\r\n // alias schema\r\n const schema = state.schema;\r\n\r\n // default to all types\r\n nodeTypes = nodeTypes || [schema.nodes.yaml_metadata, schema.nodes.rmd_chunk, schema.nodes.raw_block];\r\n\r\n // function to examine a node and see if has executable codes\r\n const nodeAsLanguageCodeBlock = (node: ProsemirrorNode, pos: number) => {\r\n const languageCodeBlock = (language: string, code?: string, metaLine?: boolean) => {\r\n return {\r\n language,\r\n pos,\r\n code: code || node.textContent,\r\n metaLine\r\n };\r\n }\r\n if (nodeTypes?.includes(node.type)) {\r\n if (node.type === schema.nodes.yaml_metadata) {\r\n return languageCodeBlock('yaml');\r\n } else if (node.type === schema.nodes.rmd_chunk) {\r\n const parts = rmdChunk(node.textContent);\r\n if (parts) {\r\n return languageCodeBlock(parts.lang, parts.code, true);\r\n } else {\r\n return undefined;\r\n }\r\n } else if (node.type === schema.nodes.raw_block) {\r\n return languageCodeBlock(node.attrs.format);\r\n } else {\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n // check the currently active node to see if it has a langauge\r\n const { parent, parentOffset, pos } = state.selection.$from;\r\n const { parentOffset: toParentOffset } = state.selection.$to;\r\n\r\n const activeBlock = nodeAsLanguageCodeBlock(parent, pos - parentOffset);\r\n if (activeBlock) {\r\n\r\n // compute start index (skip over meta line if there is one)\r\n const startIndex = activeBlock.metaLine\r\n ? lines(parent.textContent)[0].length + 1 \r\n : 0;\r\n\r\n // compute position within the active block\r\n const positionForOffset = (offset: number) => {\r\n let line = 0, character = 0;\r\n for (let i=startIndex; i<offset; i++) {\r\n const ch = parent.textContent.at(i);\r\n if (!ch) {\r\n break;\r\n }\r\n if (ch === \"\\n\") {\r\n line++;\r\n character = 0;\r\n } else {\r\n character++;\r\n }\r\n }\r\n return Position.create(line, character);\r\n }\r\n\r\n\r\n // collect all the blocks with this language\r\n const blocks: Array<{ pos: number, language: string, code: string; active: boolean }> = [];\r\n state.doc.descendants((node, pos) => {\r\n const languageBlock = nodeAsLanguageCodeBlock(node, pos+1);\r\n if (languageBlock) {\r\n if (!activeLanguageOnly || (languageBlock.language === activeBlock.language)) {\r\n blocks.push({\r\n ...languageBlock,\r\n active: languageBlock.pos === activeBlock.pos\r\n });\r\n }\r\n }\r\n });\r\n\r\n return {\r\n activeLanguage: activeBlock.language,\r\n blocks,\r\n selection: {\r\n start: positionForOffset(parentOffset),\r\n end: positionForOffset(toParentOffset)\r\n },\r\n selectedText: state.doc.textBetween(\r\n activeBlock.pos + Math.max(parentOffset, startIndex), \r\n activeBlock.pos + toParentOffset\r\n )\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n\r\nexport function codeViewCompletionContext(filepath: string, state: EditorState, explicit: boolean) : CodeViewCompletionContext | undefined {\r\n const context = codeViewCellContext(filepath, state);\r\n if (context) {\r\n return { ...context, explicit };\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function codeViewCellContext(filepath: string, state: EditorState) : CodeViewCellContext | undefined {\r\n\r\n // get blocks (for active language only)\r\n const activeBlockContext = codeViewBlockContext(state, true);\r\n\r\n if (activeBlockContext) {\r\n // if this is yaml we strip the delimiters and use only the active block\r\n if (activeBlockContext.activeLanguage === \"yaml\") {\r\n const activeBlock = activeBlockContext.blocks.find(block => block.active) || activeBlockContext.blocks[0];\r\n const codeLines = lines(activeBlock.code).map(line => !/^(---|\\.\\.\\.)\\s*$/.test(line) ? line : \"\");\r\n return {\r\n filepath,\r\n language: activeBlockContext.activeLanguage,\r\n code: codeLines,\r\n cellBegin: 0,\r\n cellEnd: codeLines.length - 1,\r\n selection: activeBlockContext.selection,\r\n }\r\n // concatenate together all of the code, and indicate start/end lines of active block\r\n } else {\r\n const code: string[] = [];\r\n let cellBegin = -1, cellEnd = -1;\r\n activeBlockContext.blocks.forEach(block => {\r\n const blockLines = lines(block.code);\r\n if (block.active) {\r\n cellBegin = code.length;\r\n cellEnd = code.length + blockLines.length - 1;\r\n }\r\n if (blockLines[blockLines.length-1].trim().length !== 0) {\r\n blockLines.push(\"\");\r\n }\r\n code.push(...blockLines);\r\n });\r\n return {\r\n filepath,\r\n language: activeBlockContext.activeLanguage,\r\n code,\r\n cellBegin,\r\n cellEnd,\r\n selection: { \r\n start: {\r\n line: cellBegin + activeBlockContext.selection.start.line, \r\n character: activeBlockContext.selection.start.character \r\n },\r\n end: {\r\n line: cellBegin + activeBlockContext?.selection.end.line,\r\n character: activeBlockContext?.selection.end.character\r\n }\r\n },\r\n }\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n\r\n\r\n","import { Plugin } from 'prosemirror-state';\nimport { findWrapping, canJoin } from 'prosemirror-transform';\n\n/**\nInput rules are regular expressions describing a piece of text\nthat, when typed, causes something to happen. This might be\nchanging two dashes into an emdash, wrapping a paragraph starting\nwith `\"> \"` into a blockquote, or something entirely different.\n*/\nclass InputRule {\n // :: (RegExp, union<string, (state: EditorState, match: [string], start: number, end: number) → ?Transaction>)\n /**\n Create an input rule. The rule applies when the user typed\n something and the text directly in front of the cursor matches\n `match`, which should end with `$`.\n \n The `handler` can be a string, in which case the matched text, or\n the first matched group in the regexp, is replaced by that\n string.\n \n Or a it can be a function, which will be called with the match\n array produced by\n [`RegExp.exec`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec),\n as well as the start and end of the matched range, and which can\n return a [transaction](https://prosemirror.net/docs/ref/#state.Transaction) that describes the\n rule's effect, or null to indicate the input was not handled.\n */\n constructor(\n /**\n @internal\n */\n match, handler) {\n this.match = match;\n this.match = match;\n this.handler = typeof handler == \"string\" ? stringHandler(handler) : handler;\n }\n}\nfunction stringHandler(string) {\n return function (state, match, start, end) {\n let insert = string;\n if (match[1]) {\n let offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n let cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n return state.tr.insertText(insert, start, end);\n };\n}\nconst MAX_MATCH = 500;\n/**\nCreate an input rules plugin. When enabled, it will cause text\ninput that matches any of the given rules to trigger the rule's\naction.\n*/\nfunction inputRules({ rules }) {\n let plugin = new Plugin({\n state: {\n init() { return null; },\n apply(tr, prev) {\n let stored = tr.getMeta(this);\n if (stored)\n return stored;\n return tr.selectionSet || tr.docChanged ? null : prev;\n }\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run(view, from, to, text, rules, plugin);\n },\n handleDOMEvents: {\n compositionend: (view) => {\n setTimeout(() => {\n let { $cursor } = view.state.selection;\n if ($cursor)\n run(view, $cursor.pos, $cursor.pos, \"\", rules, plugin);\n });\n }\n }\n },\n isInputRules: true\n });\n return plugin;\n}\nfunction run(view, from, to, text, rules, plugin) {\n if (view.composing)\n return false;\n let state = view.state, $from = state.doc.resolve(from);\n if ($from.parent.type.spec.code)\n return false;\n let textBefore = $from.parent.textBetween(Math.max(0, $from.parentOffset - MAX_MATCH), $from.parentOffset, null, \"\\ufffc\") + text;\n for (let i = 0; i < rules.length; i++) {\n let match = rules[i].match.exec(textBefore);\n let tr = match && rules[i].handler(state, match, from - (match[0].length - text.length), to);\n if (!tr)\n continue;\n view.dispatch(tr.setMeta(plugin, { transform: tr, from, to, text }));\n return true;\n }\n return false;\n}\n/**\nThis is a command that will undo an input rule, if applying such a\nrule was the last thing that the user did.\n*/\nconst undoInputRule = (state, dispatch) => {\n let plugins = state.plugins;\n for (let i = 0; i < plugins.length; i++) {\n let plugin = plugins[i], undoable;\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n let tr = state.tr, toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j--)\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n if (undoable.text) {\n let marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n }\n else {\n tr.delete(undoable.from, undoable.to);\n }\n dispatch(tr);\n }\n return true;\n }\n }\n return false;\n};\n\n/**\nConverts double dashes to an emdash.\n*/\nconst emDash = new InputRule(/--$/, \"—\");\n/**\nConverts three dots to an ellipsis character.\n*/\nconst ellipsis = new InputRule(/\\.\\.\\.$/, \"…\");\n/**\n“Smart” opening double quotes.\n*/\nconst openDoubleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(\")$/, \"“\");\n/**\n“Smart” closing double quotes.\n*/\nconst closeDoubleQuote = new InputRule(/\"$/, \"”\");\n/**\n“Smart” opening single quotes.\n*/\nconst openSingleQuote = new InputRule(/(?:^|[\\s\\{\\[\\(\\<'\"\\u2018\\u201C])(')$/, \"‘\");\n/**\n“Smart” closing single quotes.\n*/\nconst closeSingleQuote = new InputRule(/'$/, \"’\");\n/**\nSmart-quote related input rules.\n*/\nconst smartQuotes = [openDoubleQuote, closeDoubleQuote, openSingleQuote, closeSingleQuote];\n\n/**\nBuild an input rule for automatically wrapping a textblock when a\ngiven string is typed. The `regexp` argument is\ndirectly passed through to the `InputRule` constructor. You'll\nprobably want the regexp to start with `^`, so that the pattern can\nonly occur at the start of a textblock.\n\n`nodeType` is the type of node to wrap in. If it needs attributes,\nyou can either pass them directly, or pass a function that will\ncompute them from the regular expression match.\n\nBy default, if there's a node with the same type above the newly\nwrapped node, the rule will try to [join](https://prosemirror.net/docs/ref/#transform.Transform.join) those\ntwo nodes. You can pass a join predicate, which takes a regular\nexpression match and the node before the wrapped node, and can\nreturn a boolean to indicate whether a join should happen.\n*/\nfunction wrappingInputRule(regexp, nodeType, getAttrs = null, joinPredicate) {\n return new InputRule(regexp, (state, match, start, end) => {\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n let tr = state.tr.delete(start, end);\n let $start = tr.doc.resolve(start), range = $start.blockRange(), wrapping = range && findWrapping(range, nodeType, attrs);\n if (!wrapping)\n return null;\n tr.wrap(range, wrapping);\n let before = tr.doc.resolve(start - 1).nodeBefore;\n if (before && before.type == nodeType && canJoin(tr.doc, start - 1) &&\n (!joinPredicate || joinPredicate(match, before)))\n tr.join(start - 1);\n return tr;\n });\n}\n/**\nBuild an input rule that changes the type of a textblock when the\nmatched text is typed into it. You'll usually want to start your\nregexp with `^` to that it is only matched at the start of a\ntextblock. The optional `getAttrs` parameter can be used to compute\nthe new node's attributes, and works the same as in the\n`wrappingInputRule` function.\n*/\nfunction textblockTypeInputRule(regexp, nodeType, getAttrs = null) {\n return new InputRule(regexp, (state, match, start, end) => {\n let $start = state.doc.resolve(start);\n let attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType))\n return null;\n return state.tr\n .delete(start, end)\n .setBlockType(start, start, nodeType, attrs);\n });\n}\n\nexport { InputRule, closeDoubleQuote, closeSingleQuote, ellipsis, emDash, inputRules, openDoubleQuote, openSingleQuote, smartQuotes, textblockTypeInputRule, undoInputRule, wrappingInputRule };\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<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};exports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;\nexports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=function(){throw Error(\"act(...) is not supported in production builds of React.\");};\nexports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};exports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};\nexports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};exports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};\nexports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.2.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * scheduler.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';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(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()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(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 * @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;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}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||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",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<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";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<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){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;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 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 b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;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<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=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.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=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<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=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\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(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<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;function Lg(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}var Mg=Uf(null),Ng=null,Og=null,Pg=null;function Qg(){Pg=Og=Ng=null}function Rg(a){var b=Mg.current;E(Mg);a._currentValue=b}\nfunction Sg(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}function Tg(a,b){Ng=a;Pg=Og=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(Ug=!0),a.firstContext=null)}\nfunction Vg(a){var b=a._currentValue;if(Pg!==a)if(a={context:a,memoizedValue:b,next:null},null===Og){if(null===Ng)throw Error(p(308));Og=a;Ng.dependencies={lanes:0,firstContext:a}}else Og=Og.next=a;return b}var Wg=null;function Xg(a){null===Wg?Wg=[a]:Wg.push(a)}function Yg(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,Xg(b)):(c.next=e.next,e.next=c);b.interleaved=c;return Zg(a,d)}\nfunction Zg(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var $g=!1;function ah(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction bh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function ch(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction dh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return Zg(a,c)}e=d.interleaved;null===e?(b.next=b,Xg(d)):(b.next=e.next,e.next=b);d.interleaved=b;return Zg(a,c)}function eh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction fh(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction gh(a,b,c,d){var e=a.updateQueue;$g=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:$g=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);hh|=g;a.lanes=g;a.memoizedState=q}}\nfunction ih(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var jh=(new aa.Component).refs;function kh(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar nh={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=L(),e=lh(a),f=ch(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=dh(a,f,e);null!==b&&(mh(b,a,e,d),eh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=L(),e=lh(a),f=ch(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=dh(a,f,e);null!==b&&(mh(b,a,e,d),eh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=L(),d=\nlh(a),e=ch(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=dh(a,e,d);null!==b&&(mh(b,a,d,c),eh(b,a,d))}};function oh(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction ph(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=Vg(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=nh;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction qh(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&nh.enqueueReplaceState(b,b.state,null)}\nfunction rh(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=jh;ah(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=Vg(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(kh(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&nh.enqueueReplaceState(e,e.state,null),gh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}\nfunction sh(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;b===jh&&(b=e.refs={});null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction th(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function uh(a){var b=a._init;return b(a._payload)}\nfunction vh(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=wh(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=xh(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&uh(f)===b.type))return d=e(b,c.props),d.ref=sh(a,b,c),d.return=a,d;d=yh(c.type,c.key,c.props,null,a.mode,d);d.ref=sh(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=zh(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Ah(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=xh(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=yh(b.type,b.key,b.props,null,a.mode,c),\nc.ref=sh(a,null,b),c.return=a,c;case wa:return b=zh(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Ah(b,a.mode,c,null),b.return=a,b;th(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);th(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);th(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>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(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(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;a<Nh.length;a++)Nh[a]._workInProgressVersionPrimary=null;Nh.length=0}var Ph=ua.ReactCurrentDispatcher,Qh=ua.ReactCurrentBatchConfig,Rh=0,N=null,O=null,P=null,Sh=!1,Th=!1,Uh=0,Vh=0;function Q(){throw Error(p(321));}function Wh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Xh(a,b,c,d,e,f){Rh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Ph.current=null===a||null===a.memoizedState?Yh:Zh;a=c(d,e);if(Th){f=0;do{Th=!1;Uh=0;if(25<=f)throw Error(p(301));f+=1;P=O=null;b.updateQueue=null;Ph.current=$h;a=c(d,e)}while(Th)}Ph.current=ai;b=null!==O&&null!==O.next;Rh=0;P=O=N=null;Sh=!1;if(b)throw Error(p(300));return a}function bi(){var a=0!==Uh;Uh=0;return a}\nfunction ci(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function di(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(p(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction ei(a,b){return\"function\"===typeof b?b(a):b}\nfunction fi(a){var b=di(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Rh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;N.lanes|=m;hh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(Ug=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,N.lanes|=f,hh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction gi(a){var b=di(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(Ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function hi(){}\nfunction ii(a,b){var c=N,d=di(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,Ug=!0);d=d.queue;ji(ki.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==P&&P.memoizedState.tag&1){c.flags|=2048;li(9,mi.bind(null,c,d,e,b),void 0,null);if(null===R)throw Error(p(349));0!==(Rh&30)||ni(c,b,e)}return e}function ni(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=N.updateQueue;null===b?(b={lastEffect:null,stores:null},N.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction mi(a,b,c,d){b.value=c;b.getSnapshot=d;oi(b)&&pi(a)}function ki(a,b,c){return c(function(){oi(b)&&pi(a)})}function oi(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function pi(a){var b=Zg(a,1);null!==b&&mh(b,a,1,-1)}\nfunction qi(a){var b=ci();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:ei,lastRenderedState:a};b.queue=a;a=a.dispatch=ri.bind(null,N,a);return[b.memoizedState,a]}\nfunction li(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null,stores:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function si(){return di().memoizedState}function ti(a,b,c,d){var e=ci();N.flags|=a;e.memoizedState=li(1|b,c,void 0,void 0===d?null:d)}\nfunction ui(a,b,c,d){var e=di();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&Wh(d,g.deps)){e.memoizedState=li(b,c,f,d);return}}N.flags|=a;e.memoizedState=li(1|b,c,f,d)}function vi(a,b){return ti(8390656,8,a,b)}function ji(a,b){return ui(2048,8,a,b)}function wi(a,b){return ui(4,2,a,b)}function xi(a,b){return ui(4,4,a,b)}\nfunction yi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function zi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ui(4,4,yi.bind(null,b,a),c)}function Ai(){}function Bi(a,b){var c=di();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Wh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Ci(a,b){var c=di();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Wh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Di(a,b,c){if(0===(Rh&21))return a.baseState&&(a.baseState=!1,Ug=!0),a.memoizedState=c;He(c,b)||(c=yc(),N.lanes|=c,hh|=c,a.baseState=!0);return b}function Ei(a,b){var c=C;C=0!==c&&4>c?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<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Vh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Zh={readContext:Vg,useCallback:Bi,useContext:Vg,useEffect:ji,useImperativeHandle:zi,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ci,useReducer:fi,useRef:si,useState:function(){return fi(ei)},\nuseDebugValue:Ai,useDeferredValue:function(a){var b=di();return Di(b,O.memoizedState,a)},useTransition:function(){var a=fi(ei)[0],b=di().memoizedState;return[a,b]},useMutableSource:hi,useSyncExternalStore:ii,useId:Fi,unstable_isNewReconciler:!1},$h={readContext:Vg,useCallback:Bi,useContext:Vg,useEffect:ji,useImperativeHandle:zi,useInsertionEffect:wi,useLayoutEffect:xi,useMemo:Ci,useReducer:gi,useRef:si,useState:function(){return gi(ei)},useDebugValue:Ai,useDeferredValue:function(a){var b=di();return null===\nO?b.memoizedState=a:Di(b,O.memoizedState,a)},useTransition:function(){var a=gi(ei)[0],b=di().memoizedState;return[a,b]},useMutableSource:hi,useSyncExternalStore:ii,useId:Fi,unstable_isNewReconciler:!1};function Ki(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}function Li(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}\nfunction Mi(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Ni=\"function\"===typeof WeakMap?WeakMap:Map;function Oi(a,b,c){c=ch(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Pi||(Pi=!0,Qi=d);Mi(a,b)};return c}\nfunction Ri(a,b,c){c=ch(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Mi(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Mi(a,b);\"function\"!==typeof d&&(null===Si?Si=new Set([this]):Si.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Ti(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Ni;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ui.bind(null,a,b,c),b.then(a,a))}function Vi(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Wi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=ch(-1,1),b.tag=2,dh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Xi=ua.ReactCurrentOwner,Ug=!1;function Yi(a,b,c,d){b.child=null===a?Ch(b,null,c,d):Bh(b,a.child,c,d)}\nfunction Zi(a,b,c,d,e){c=c.render;var f=b.ref;Tg(b,e);d=Xh(a,b,c,d,f,e);c=bi();if(null!==a&&!Ug)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,$i(a,b,e);I&&c&&vg(b);b.flags|=1;Yi(a,b,d,e);return b.child}\nfunction aj(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!bj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,cj(a,b,f,d,e);a=yh(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return $i(a,b,e)}b.flags|=1;a=wh(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction cj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(Ug=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(Ug=!0);else return b.lanes=a.lanes,$i(a,b,e)}return dj(a,b,c,d,e)}\nfunction ej(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(fj,gj),gj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(fj,gj),gj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(fj,gj);gj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(fj,gj),gj|=d;Yi(a,b,e,c);return b.child}function hj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function dj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);Tg(b,e);c=Xh(a,b,c,d,f,e);d=bi();if(null!==a&&!Ug)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,$i(a,b,e);I&&d&&vg(b);b.flags|=1;Yi(a,b,c,e);return b.child}\nfunction ij(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;Tg(b,e);if(null===b.stateNode)jj(a,b),ph(b,c,d),rh(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=Vg(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&qh(b,g,d,l);$g=!1;var r=b.memoizedState;g.state=r;gh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||$g?(\"function\"===typeof m&&(kh(b,c,m,d),k=b.memoizedState),(h=$g||oh(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;bh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Lg(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=Vg(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&qh(b,g,d,k);$g=!1;r=b.memoizedState;g.state=r;gh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||$g?(\"function\"===typeof y&&(kh(b,c,y,d),n=b.memoizedState),(l=$g||oh(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return kj(a,b,c,d,f,e)}\nfunction kj(a,b,c,d,e,f){hj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),$i(a,b,f);d=b.stateNode;Xi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Bh(b,a.child,null,f),b.child=Bh(b,null,h,f)):Yi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function lj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);Ih(a,b.containerInfo)}\nfunction mj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Yi(a,b,c,d);return b.child}var nj={dehydrated:null,treeContext:null,retryLane:0};function oj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction pj(a,b,c){var d=b.pendingProps,e=M.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(M,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=qj(g,d,0,null),a=Ah(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=oj(c),b.memoizedState=nj,a):rj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return sj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=wh(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=wh(h,f):(f=Ah(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?oj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=nj;return d}f=a.child;a=f.sibling;d=wh(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction rj(a,b){b=qj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function tj(a,b,c,d){null!==d&&Jg(d);Bh(b,a.child,null,c);a=rj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction sj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Li(Error(p(422))),tj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=qj({mode:\"visible\",children:d.children},e,0,null);f=Ah(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Bh(b,a.child,null,g);b.child.memoizedState=oj(g);b.memoizedState=nj;return f}if(0===(b.mode&1))return tj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Li(f,d,void 0);return tj(a,b,g,d)}h=0!==(g&a.childLanes);if(Ug||h){d=R;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,Zg(a,e),mh(d,a,e,-1))}uj();d=Li(Error(p(421)));return tj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=vj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=rj(b,d.children);b.flags|=4096;return b}function wj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);Sg(a.return,b,c)}\nfunction xj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction yj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Yi(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&wj(a,c,b);else if(19===a.tag)wj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(M,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Mh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);xj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Mh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}xj(b,!0,c,null,f);break;case \"together\":xj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction jj(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function $i(a,b,c){null!==a&&(b.dependencies=a.dependencies);hh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=wh(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=wh(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction zj(a,b,c){switch(b.tag){case 3:lj(b);Ig();break;case 5:Kh(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:Ih(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Mg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(M,M.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return pj(a,b,c);G(M,M.current&1);a=$i(a,b,c);return null!==a?a.sibling:null}G(M,M.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return yj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(M,M.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,ej(a,b,c)}return $i(a,b,c)}var Aj,Bj,Cj,Dj;\nAj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Bj=function(){};\nCj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;Hh(Eh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Dj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Ej(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Fj(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;Jh();E(Wf);E(H);Oh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Gj(zg),zg=null));Bj(a,b);S(b);return null;case 5:Lh(b);var e=Hh(Gh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Cj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=Hh(Eh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\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;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Dj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=Hh(Gh.current);Hh(Eh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(M);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Gj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(M.current&1)?0===T&&(T=3):uj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return Jh(),\nBj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return Rg(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(M);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Ej(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Mh(a);if(null!==g){b.flags|=128;Ej(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(M,M.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Hj&&(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;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Yj=!1;break a;case 3:X=h.stateNode.containerInfo;Yj=!0;break a;case 4:X=h.stateNode.containerInfo;Yj=!0;break a}h=h.return}if(null===X)throw Error(p(160));ak(f,g,e);X=null;Yj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)ek(b,a),b=b.sibling}\nfunction ek(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:dk(b,a);fk(a);if(d&4){try{Qj(3,a,a.return),Rj(3,a)}catch(t){W(a,a.return,t)}try{Qj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:dk(b,a);fk(a);d&512&&null!==c&&Mj(c,c.return);break;case 5:dk(b,a);fk(a);d&512&&null!==c&&Mj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:dk(b,a);fk(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:dk(b,a);fk(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:dk(b,a);fk(a);break;case 13:dk(b,a);fk(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(gk=B()));d&4&&bk(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,dk(b,a),U=l):dk(b,a);fk(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Qj(4,r,r.return);break;case 1:Mj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Mj(r,r.return);break;case 22:if(null!==r.memoizedState){hk(q);continue}}null!==y?(y.return=r,V=y):hk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:dk(b,a);fk(a);d&4&&bk(a);break;case 21:break;default:dk(b,\na),fk(a)}}function fk(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Uj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Vj(a);Xj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Vj(a);Wj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function ik(a,b,c){V=a;jk(a,b,c)}\nfunction jk(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Kj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Kj;var l=U;Kj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?kk(e):null!==k?(k.return=g,V=k):kk(e);for(;null!==f;)V=f,jk(f,b,c),f=f.sibling;V=e;Kj=h;U=l}lk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):lk(a,b,c)}}\nfunction lk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Rj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Lg(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&ih(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}ih(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Sj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function hk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction kk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Rj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Sj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Sj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar mk=Math.ceil,nk=ua.ReactCurrentDispatcher,ok=ua.ReactCurrentOwner,pk=ua.ReactCurrentBatchConfig,K=0,R=null,Y=null,Z=0,gj=0,fj=Uf(0),T=0,qk=null,hh=0,rk=0,sk=0,tk=null,uk=null,gk=0,Hj=Infinity,vk=null,Pi=!1,Qi=null,Si=null,wk=!1,xk=null,yk=0,zk=0,Ak=null,Bk=-1,Ck=0;function L(){return 0!==(K&6)?B():-1!==Bk?Bk:Bk=B()}\nfunction lh(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Ck&&(Ck=yc()),Ck;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function mh(a,b,c,d){if(50<zk)throw zk=0,Ak=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==R)a===R&&(0===(K&2)&&(rk|=c),4===T&&Dk(a,Z)),Ek(a,d),1===c&&0===K&&0===(b.mode&1)&&(Hj=B()+500,fg&&jg())}\nfunction Ek(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===R?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Fk.bind(null,a)):hg(Fk.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Gk(c,Hk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Hk(a,b){Bk=-1;Ck=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Ik()&&a.callbackNode!==c)return null;var d=uc(a,a===R?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Jk(a,d);else{b=d;var e=K;K|=2;var f=Kk();if(R!==a||Z!==b)vk=null,Hj=B()+500,Lk(a,b);do try{Mk();break}catch(h){Nk(a,h)}while(1);Qg();nk.current=f;K=e;null!==Y?b=0:(R=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Ok(a,e)));if(1===b)throw c=qk,Lk(a,0),Dk(a,d),Ek(a,B()),c;if(6===b)Dk(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Pk(e)&&(b=Jk(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Ok(a,f))),1===b))throw c=qk,Lk(a,0),Dk(a,d),Ek(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Qk(a,uk,vk);break;case 3:Dk(a,d);if((d&130023424)===d&&(b=gk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){L();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Qk.bind(null,a,uk,vk),b);break}Qk(a,uk,vk);break;case 4:Dk(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(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(10<d){a.timeoutHandle=Ff(Qk.bind(null,a,uk,vk),d);break}Qk(a,uk,vk);break;case 5:Qk(a,uk,vk);break;default:throw Error(p(329));}}}Ek(a,B());return a.callbackNode===c?Hk.bind(null,a):null}\nfunction Ok(a,b){var c=tk;a.current.memoizedState.isDehydrated&&(Lk(a,b).flags|=256);a=Jk(a,b);2!==a&&(b=uk,uk=c,null!==b&&Gj(b));return a}function Gj(a){null===uk?uk=a:uk.push.apply(uk,a)}\nfunction Pk(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Dk(a,b){b&=~sk;b&=~rk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Fk(a){if(0!==(K&6))throw Error(p(327));Ik();var b=uc(a,0);if(0===(b&1))return Ek(a,B()),null;var c=Jk(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Ok(a,d))}if(1===c)throw c=qk,Lk(a,0),Dk(a,b),Ek(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Qk(a,uk,vk);Ek(a,B());return null}\nfunction Rk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Hj=B()+500,fg&&jg())}}function Sk(a){null!==xk&&0===xk.tag&&0===(K&6)&&Ik();var b=K;K|=1;var c=pk.transition,d=C;try{if(pk.transition=null,C=1,a)return a()}finally{C=d,pk.transition=c,K=b,0===(K&6)&&jg()}}function Ij(){gj=fj.current;E(fj)}\nfunction Lk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:Jh();E(Wf);E(H);Oh();break;case 5:Lh(d);break;case 4:Jh();break;case 13:E(M);break;case 19:E(M);break;case 10:Rg(d.type._context);break;case 22:case 23:Ij()}c=c.return}R=a;Y=a=wh(a.current,null);Z=gj=b;T=0;qk=null;sk=rk=hh=0;uk=tk=null;if(null!==Wg){for(b=\n0;b<Wg.length;b++)if(c=Wg[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}Wg=null}return a}\nfunction Nk(a,b){do{var c=Y;try{Qg();Ph.current=ai;if(Sh){for(var d=N.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Sh=!1}Rh=0;P=O=N=null;Th=!1;Uh=0;ok.current=null;if(null===c||null===c.return){T=1;qk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Vi(g);if(null!==y){y.flags&=-257;Wi(y,g,h,f,b);y.mode&1&&Ti(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Ti(f,l,b);uj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Vi(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Wi(J,g,h,f,b);Jg(Ki(k,h));break a}}f=k=Ki(k,h);4!==T&&(T=2);null===tk?tk=[f]:tk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Oi(f,k,b);fh(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Si||!Si.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Ri(f,h,b);fh(f,F);break a}}f=f.return}while(null!==f)}Tk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Kk(){var a=nk.current;nk.current=ai;return null===a?ai:a}\nfunction uj(){if(0===T||3===T||2===T)T=4;null===R||0===(hh&268435455)&&0===(rk&268435455)||Dk(R,Z)}function Jk(a,b){var c=K;K|=2;var d=Kk();if(R!==a||Z!==b)vk=null,Lk(a,b);do try{Uk();break}catch(e){Nk(a,e)}while(1);Qg();K=c;nk.current=d;if(null!==Y)throw Error(p(261));R=null;Z=0;return T}function Uk(){for(;null!==Y;)Vk(Y)}function Mk(){for(;null!==Y&&!cc();)Vk(Y)}function Vk(a){var b=Wk(a.alternate,a,gj);a.memoizedProps=a.pendingProps;null===b?Tk(a):Y=b;ok.current=null}\nfunction Tk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Fj(c,b,gj),null!==c){Y=c;return}}else{c=Jj(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Qk(a,b,c){var d=C,e=pk.transition;try{pk.transition=null,C=1,Xk(a,b,c,d)}finally{pk.transition=e,C=d}return null}\nfunction Xk(a,b,c,d){do Ik();while(null!==xk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===R&&(Y=R=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||wk||(wk=!0,Gk(hc,function(){Ik();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=pk.transition;pk.transition=null;\nvar g=C;C=1;var h=K;K|=4;ok.current=null;Pj(a,c);ek(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;ik(c,a,e);dc();K=h;C=g;pk.transition=f}else a.current=c;wk&&(wk=!1,xk=a,yk=e);f=a.pendingLanes;0===f&&(Si=null);mc(c.stateNode,d);Ek(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Pi)throw Pi=!1,a=Qi,Qi=null,a;0!==(yk&1)&&0!==a.tag&&Ik();f=a.pendingLanes;0!==(f&1)?a===Ak?zk++:(zk=0,Ak=a):zk=0;jg();return null}\nfunction Ik(){if(null!==xk){var a=Dc(yk),b=pk.transition,c=C;try{pk.transition=null;C=16>a?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;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Qj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Tj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Qj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Rj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,pk.transition=b}}return!1}function Yk(a,b,c){b=Ki(c,b);b=Oi(a,b,1);a=dh(a,b,1);b=L();null!==a&&(Ac(a,1,b),Ek(a,b))}\nfunction W(a,b,c){if(3===a.tag)Yk(a,a,c);else for(;null!==b;){if(3===b.tag){Yk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Si||!Si.has(d))){a=Ki(c,a);a=Ri(b,a,1);b=dh(b,a,1);a=L();null!==b&&(Ac(b,1,a),Ek(b,a));break}}b=b.return}}\nfunction Ui(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=L();a.pingedLanes|=a.suspendedLanes&c;R===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-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<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction el(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction fl(a,b,c,d,e,f,g,h,k){a=cl(c,d,!0,a,e,f,g,h,k);a.context=el(null);c=a.current;d=L();e=lh(c);f=ch(d,e);f.callback=void 0!==b&&null!==b?b:null;dh(c,f,e);a.current.lanes=e;Ac(a,e,d);Ek(a,d);return a}function gl(a,b,c,d){var e=b.current,f=L(),g=lh(e);c=el(c);null===b.context?b.context=c:b.pendingContext=c;b=ch(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=dh(e,b,g);null!==a&&(mh(a,e,g,f),eh(a,e,g));return g}\nfunction hl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function il(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function jl(a,b){il(a,b);(a=a.alternate)&&il(a,b)}function kl(){return null}var ll=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ml(a){this._internalRoot=a}\nnl.prototype.render=ml.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));gl(a,b,null,null)};nl.prototype.unmount=ml.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Sk(function(){gl(null,a,null,null)});b[uf]=null}};function nl(a){this._internalRoot=a}\nnl.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function pl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function ql(){}\nfunction rl(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=hl(g);f.call(a)}}var g=fl(b,d,a,0,null,!1,!1,\"\",ql);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Sk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=hl(k);h.call(a)}}var k=cl(a,0,!1,null,null,!1,!1,\"\",ql);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Sk(function(){gl(b,k,c,d)});return k}\nfunction sl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=hl(g);h.call(a)}}gl(b,g,a,e)}else g=rl(c,b,a,e,d);return hl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Ek(b,B()),0===(K&6)&&(Hj=B()+500,jg()))}break;case 13:Sk(function(){var b=Zg(a,1);if(null!==b){var c=L();mh(b,a,1,c)}}),jl(a,1)}};\nFc=function(a){if(13===a.tag){var b=Zg(a,134217728);if(null!==b){var c=L();mh(b,a,134217728,c)}jl(a,134217728)}};Gc=function(a){if(13===a.tag){var b=lh(a),c=Zg(a,b);if(null!==c){var d=L();mh(c,a,b,d)}jl(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Rk;Hb=Sk;\nvar tl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Rk]},ul={findFiberByHostInstance:Wc,bundleType:0,version:\"18.2.0\",rendererPackageName:\"react-dom\"};\nvar vl={bundleType:ul.bundleType,version:ul.version,rendererPackageName:ul.rendererPackageName,rendererConfig:ul.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:ul.findFiberByHostInstance||\nkl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.2.0-next-9e3b772b8-20220608\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var wl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!wl.isDisabled&&wl.supportsFiber)try{kc=wl.inject(vl),lc=wl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ol(b))throw Error(p(200));return dl(a,b,null,c)};exports.createRoot=function(a,b){if(!ol(a))throw Error(p(299));var c=!1,d=\"\",e=ll;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=cl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ml(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Sk(a)};exports.hydrate=function(a,b,c){if(!pl(b))throw Error(p(200));return sl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!ol(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=ll;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=fl(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new nl(b)};exports.render=function(a,b,c){if(!pl(b))throw Error(p(200));return sl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!pl(a))throw Error(p(40));return a._reactRootContainer?(Sk(function(){sl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Rk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!pl(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return sl(a,b,c,!1,d)};exports.version=\"18.2.0-next-9e3b772b8-20220608\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\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 * 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","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction createEventEmitter(value) {\n var handlers = [];\n return {\n on: function on(handler) {\n handlers.push(handler);\n },\n off: function off(handler) {\n handlers = handlers.filter(function (h) {\n return h !== handler;\n });\n },\n get: function get() {\n return value;\n },\n set: function set(newValue) {\n value = newValue;\n handlers.forEach(function (handler) {\n return handler(value);\n });\n }\n };\n}\n\nfunction onlyChild(children) {\n return Array.isArray(children) ? children[0] : children;\n}\n\nvar uniqueId = 0;\n\nfunction createReactContext(defaultValue) {\n var _Provider$childContex, _Consumer$contextType;\n\n var contextProp = '__create-react-context-' + uniqueId++ + '__';\n\n var Provider = function (_Component) {\n _inherits(Provider, _Component);\n\n function Provider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, Provider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.emitter = createEventEmitter(_this.props.value), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n Provider.prototype.getChildContext = function getChildContext() {\n var _ref;\n\n return _ref = {}, _ref[contextProp] = this.emitter, _ref;\n };\n\n Provider.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n if (this.props.value !== nextProps.value) {\n this.emitter.set(nextProps.value);\n }\n };\n\n Provider.prototype.render = function render() {\n return this.props.children;\n };\n\n return Provider;\n }(_react.Component);\n\n Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = _propTypes2.default.object.isRequired, _Provider$childContex);\n\n var Consumer = function (_Component2) {\n _inherits(Consumer, _Component2);\n\n function Consumer() {\n var _temp2, _this2, _ret2;\n\n _classCallCheck(this, Consumer);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this2 = _possibleConstructorReturn(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.state = {\n value: _this2.getValue()\n }, _this2.onUpdate = function () {\n _this2.setState({\n value: _this2.getValue()\n });\n }, _temp2), _possibleConstructorReturn(_this2, _ret2);\n }\n\n Consumer.prototype.componentDidMount = function componentDidMount() {\n if (this.context[contextProp]) {\n this.context[contextProp].on(this.onUpdate);\n }\n };\n\n Consumer.prototype.componentWillUnmount = function componentWillUnmount() {\n if (this.context[contextProp]) {\n this.context[contextProp].off(this.onUpdate);\n }\n };\n\n Consumer.prototype.getValue = function getValue() {\n if (this.context[contextProp]) {\n return this.context[contextProp].get();\n } else {\n return defaultValue;\n }\n };\n\n Consumer.prototype.render = function render() {\n return onlyChild(this.props.children)(this.state.value);\n };\n\n return Consumer;\n }(_react.Component);\n\n Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = _propTypes2.default.object, _Consumer$contextType);\n\n\n return {\n Provider: Provider,\n Consumer: Consumer\n };\n}\n\nexports.default = createReactContext;\nmodule.exports = exports['default'];","import React from 'react';\nimport createReactContext from 'create-react-context';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StateContext = createReactContext(null);\n\nvar Container = function () {\n function Container() {\n var _this = this;\n\n _classCallCheck(this, Container);\n\n this._listeners = [];\n\n CONTAINER_DEBUG_CALLBACKS.forEach(function (cb) {\n return cb(_this);\n });\n }\n\n Container.prototype.setState = function setState(updater, callback) {\n var _this2 = this;\n\n return Promise.resolve().then(function () {\n var nextState = void 0;\n\n if (typeof updater === 'function') {\n nextState = updater(_this2.state);\n } else {\n nextState = updater;\n }\n\n if (nextState == null) {\n if (callback) callback();\n return;\n }\n\n _this2.state = Object.assign({}, _this2.state, nextState);\n\n var promises = _this2._listeners.map(function (listener) {\n return listener();\n });\n\n return Promise.all(promises).then(function () {\n if (callback) {\n return callback();\n }\n });\n });\n };\n\n Container.prototype.subscribe = function subscribe(fn) {\n this._listeners.push(fn);\n };\n\n Container.prototype.unsubscribe = function unsubscribe(fn) {\n this._listeners = this._listeners.filter(function (f) {\n return f !== fn;\n });\n };\n\n return Container;\n}();\n\nvar DUMMY_STATE = {};\n\nvar Subscribe = function (_React$Component) {\n _inherits(Subscribe, _React$Component);\n\n function Subscribe() {\n var _temp, _this3, _ret;\n\n _classCallCheck(this, Subscribe);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this3), _this3.state = {}, _this3.instances = [], _this3.unmounted = false, _this3.onUpdate = function () {\n return new Promise(function (resolve) {\n if (!_this3.unmounted) {\n _this3.setState(DUMMY_STATE, resolve);\n } else {\n resolve();\n }\n });\n }, _temp), _possibleConstructorReturn(_this3, _ret);\n }\n\n Subscribe.prototype.componentWillUnmount = function componentWillUnmount() {\n this.unmounted = true;\n this._unsubscribe();\n };\n\n Subscribe.prototype._unsubscribe = function _unsubscribe() {\n var _this4 = this;\n\n this.instances.forEach(function (container) {\n container.unsubscribe(_this4.onUpdate);\n });\n };\n\n Subscribe.prototype._createInstances = function _createInstances(map, containers) {\n var _this5 = this;\n\n this._unsubscribe();\n\n if (map === null) {\n throw new Error('You must wrap your <Subscribe> components with a <Provider>');\n }\n\n var safeMap = map;\n var instances = containers.map(function (ContainerItem) {\n var instance = void 0;\n\n if ((typeof ContainerItem === 'undefined' ? 'undefined' : _typeof(ContainerItem)) === 'object' && ContainerItem instanceof Container) {\n instance = ContainerItem;\n } else {\n instance = safeMap.get(ContainerItem);\n\n if (!instance) {\n instance = new ContainerItem();\n safeMap.set(ContainerItem, instance);\n }\n }\n\n instance.unsubscribe(_this5.onUpdate);\n instance.subscribe(_this5.onUpdate);\n\n return instance;\n });\n\n this.instances = instances;\n return instances;\n };\n\n Subscribe.prototype.render = function render() {\n var _this6 = this;\n\n return React.createElement(\n StateContext.Consumer,\n null,\n function (map) {\n return _this6.props.children.apply(null, _this6._createInstances(map, _this6.props.to));\n }\n );\n };\n\n return Subscribe;\n}(React.Component);\n\nfunction Provider(props) {\n return React.createElement(\n StateContext.Consumer,\n null,\n function (parentMap) {\n var childMap = new Map(parentMap);\n\n if (props.inject) {\n props.inject.forEach(function (instance) {\n childMap.set(instance.constructor, instance);\n });\n }\n\n return React.createElement(\n StateContext.Provider,\n { value: childMap },\n props.children\n );\n }\n );\n}\n\nvar CONTAINER_DEBUG_CALLBACKS = [];\n\n// If your name isn't Sindre, this is not for you.\n// I might ruin your day suddenly if you depend on this without talking to me.\nfunction __SUPER_SECRET_CONTAINER_DEBUG_HOOK__(callback) {\n CONTAINER_DEBUG_CALLBACKS.push(callback);\n}\n\nexport { Container, Subscribe, Provider, __SUPER_SECRET_CONTAINER_DEBUG_HOOK__ };\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nimport { Container } from \"unstated\";\n\nvar GlobalStateContainer = /*#__PURE__*/function (_Container) {\n _inherits(GlobalStateContainer, _Container);\n\n var _super = _createSuper(GlobalStateContainer);\n\n function GlobalStateContainer() {\n var _this;\n\n _classCallCheck(this, GlobalStateContainer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n opened: false,\n tabIndex: \"state\",\n defaultSize: 0.5\n });\n\n _defineProperty(_assertThisInitialized(_this), \"toggleDevTools\", function () {\n var _this$state = _this.state,\n opened = _this$state.opened,\n defaultSize = _this$state.defaultSize;\n\n if (opened) {\n document.querySelector(\"html\").style.marginBottom = \"\";\n } else {\n var size = defaultSize * window.innerHeight;\n document.querySelector(\"html\").style.marginBottom = \"\".concat(size, \"px\");\n }\n\n _this.setState({\n opened: !opened\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectTab\", function () {\n var tabIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n _this.setState({\n tabIndex: tabIndex\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateBodyMargin\", function (devToolsSize) {\n var size = devToolsSize * window.innerHeight;\n document.querySelector(\"html\").style.marginBottom = \"\".concat(size, \"px\");\n });\n\n return _this;\n }\n\n return GlobalStateContainer;\n}(Container);\n\nexport { GlobalStateContainer as default };","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n // Using Node instead of HTMLElement since container may be a ShadowRoot\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, COMMENT, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule' || cache.compat) return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses) {\n var isNested = element.parent === children[0]; // in nested rules comments become children of the \"auto-inserted\" rule\n //\n // considering this input:\n // .a {\n // .b /* comm */ {}\n // color: hotpink;\n // }\n // we get output corresponding to this:\n // .a {\n // & {\n // /* comm */\n // color: hotpink;\n // }\n // .b {}\n // }\n\n var commentContainer = isNested ? children[0].children : // global rule at the root level\n children;\n\n for (var i = commentContainer.length - 1; i >= 0; i--) {\n var node = commentContainer[i];\n\n if (node.line < element.line) {\n break;\n } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n // this will also match inputs like this:\n // .a {\n // /* comm */\n // .b {}\n // }\n //\n // but that is fine\n //\n // it would be the easiest to change the placement of the comment to be the first child of the rule:\n // .a {\n // .b { /* comm */ }\n // }\n // with such inputs we wouldn't have to search for the comment at all\n // TODO: consider changing this comment placement in the next major version\n\n\n if (node.column < element.column) {\n if (isIgnoringComment(node)) {\n return;\n }\n\n break;\n }\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n switch (hash(value, length)) {\n // color-adjust\n case 5103:\n return WEBKIT + 'print-' + value + value;\n // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n case 5737:\n case 4201:\n case 3177:\n case 3433:\n case 1641:\n case 4457:\n case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n case 5572:\n case 6356:\n case 5844:\n case 3191:\n case 6645:\n case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n case 6391:\n case 5879:\n case 5623:\n case 6135:\n case 4599:\n case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n case 4215:\n case 6389:\n case 5109:\n case 5365:\n case 5621:\n case 3829:\n return WEBKIT + value + value;\n // appearance, user-select, transform, hyphens, text-size-adjust\n\n case 5349:\n case 4246:\n case 4810:\n case 6968:\n case 2756:\n return WEBKIT + value + MOZ + value + MS + value + value;\n // flex, flex-direction\n\n case 6828:\n case 4268:\n return WEBKIT + value + MS + value + value;\n // order\n\n case 6165:\n return WEBKIT + value + MS + 'flex-' + value + value;\n // align-items\n\n case 5187:\n return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n // align-self\n\n case 5443:\n return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n // align-content\n\n case 4675:\n return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n // flex-shrink\n\n case 5548:\n return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n // flex-basis\n\n case 5292:\n return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n // flex-grow\n\n case 6060:\n return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n // transition\n\n case 4554:\n return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n // cursor\n\n case 6187:\n return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n // background, background-image\n\n case 5495:\n case 3959:\n return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n // justify-content\n\n case 4968:\n return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n // (margin|padding)-inline-(start|end)\n\n case 4095:\n case 3583:\n case 4068:\n case 2532:\n return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n // (min|max)?(width|height|inline-size|block-size)\n\n case 8116:\n case 7059:\n case 5753:\n case 5535:\n case 5445:\n case 5701:\n case 4933:\n case 4677:\n case 5533:\n case 5789:\n case 5021:\n case 4765:\n // stretch, max-content, min-content, fill-available\n if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n // (m)ax-content, (m)in-content\n case 109:\n // -\n if (charat(value, length + 4) !== 45) break;\n // (f)ill-available, (f)it-content\n\n case 102:\n return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n // (s)tretch\n\n case 115:\n return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n }\n break;\n // position: sticky\n\n case 4949:\n // (s)ticky?\n if (charat(value, length + 1) !== 115) break;\n // display: (flex|inline-flex)\n\n case 6444:\n switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n // stic(k)y\n case 107:\n return replace(value, ':', ':' + WEBKIT) + value;\n // (inline-)?fl(e)x\n\n case 101:\n return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n }\n\n break;\n // writing-mode\n\n case 5936:\n switch (charat(value, length + 11)) {\n // vertical-l(r)\n case 114:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n // vertical-r(l)\n\n case 108:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n // horizontal(-)tb\n\n case 45:\n return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n }\n\n return WEBKIT + value + MS + value + value;\n }\n\n return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n case DECLARATION:\n element[\"return\"] = prefix(element.value, element.length);\n break;\n\n case KEYFRAMES:\n return serialize([copy(element, {\n value: replace(element.value, '@', '@' + WEBKIT)\n })], callback);\n\n case RULESET:\n if (element.length) return combine(element.props, function (value) {\n switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n // :read-(only|write)\n case ':read-only':\n case ':read-write':\n return serialize([copy(element, {\n props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n })], callback);\n // :placeholder\n\n case '::placeholder':\n return serialize([copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n }), copy(element, {\n props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n })], callback);\n }\n\n return '';\n });\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {};\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n registerStyles(cache, serialized, isStringTag);\n var className = cache.key + \"-\" + serialized.name;\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error(noComponentSelectorMessage);\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error(noComponentSelectorMessage);\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import * as React from 'react';\nimport { useLayoutEffect } from 'react';\n\nvar syncFallback = function syncFallback(create) {\n return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n // The match may be something like 'Object.createEmotionProps' or\n // 'Loader.prototype.render'\n var parts = functionName.split('.');\n return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n if (match) return getLastPart(match[1]); // Safari / Firefox\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return getLastPart(match[1]);\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var WrappedComponent = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof WrappedComponent === 'string'\n }), /*#__PURE__*/createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Insertion = function Insertion(_ref) {\n var cache = _ref.cache,\n serialized = _ref.serialized,\n isStringTag = _ref.isStringTag;\n registerStyles(cache, serialized, isStringTag);\n var rules = useInsertionEffectAlwaysWithSyncFallback(function () {\n return insertStyles(cache, serialized, isStringTag);\n });\n\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var FinalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n return /*#__PURE__*/createElement(Fragment, null, /*#__PURE__*/createElement(Insertion, {\n cache: cache,\n serialized: serialized,\n isStringTag: typeof FinalTag === 'string'\n }), /*#__PURE__*/createElement(FinalTag, newProps));\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","import '@babel/runtime/helpers/extends';\nimport 'react';\nimport '@emotion/is-prop-valid';\nimport createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@emotion/react';\nimport '@emotion/utils';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = createStyled.bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","var jsonTreeTheme = {\n scheme: \"monokai\",\n base00: \"#363755\",\n base01: \"#604D49\",\n base02: \"#6D5A55\",\n base03: \"#D1929B\",\n base04: \"#B79F8D\",\n base05: \"#F9F8F2\",\n base06: \"#F7F4F1\",\n base07: \"#FAF8F5\",\n base08: \"#FA3E7E\",\n base09: \"#FD993C\",\n base0A: \"#F6BF81\",\n base0B: \"#B8E248\",\n base0C: \"#B4EFE4\",\n base0D: \"#85D9EF\",\n base0E: \"#BE87FF\",\n base0F: \"#D6724C\"\n};\nvar mainTheme = {\n main: \"#ffa2b1\",\n main20: \"rgba(255, 162, 177, .2)\",\n main40: \"rgba(255, 162, 177, .4)\",\n main60: \"rgba(255, 162, 177, .6)\",\n main80: \"rgba(255, 162, 177, .8)\",\n main90: \"rgba(255, 162, 177, .9)\",\n mainBg: \"#363755\",\n softerMain: \"#BB91A3\",\n white: \"#fff\",\n white05: \"rgba(255, 255, 255, .05)\",\n white10: \"rgba(255, 255, 255, .1)\",\n white20: \"rgba(255, 255, 255, .2)\",\n white60: \"rgba(255, 255, 255, .6)\",\n white80: \"rgba(255, 255, 255, .8)\",\n black30: \"rgba(0, 0, 0, .3)\",\n // For diffs and structure\n lightYellow: \"#FFF9C4\",\n lightPink: \"#FB4B85\",\n darkGreen: \"#81AF6D\",\n syntax: jsonTreeTheme\n};\nexport default mainTheme;\nexport { jsonTreeTheme };","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport theme from \"./theme\";\nvar FloattingButton = styled(\"div\")({\n position: \"fixed\",\n bottom: \"16px\",\n right: \"16px\",\n background: theme.mainBg,\n boxShadow: \"0 0 30px \".concat(theme.black30),\n borderRadius: \"50%\",\n padding: \"4px 6px\",\n transition: \"opacity 0.3s\",\n zIndex: 99999,\n \"&:hover\": {\n opacity: 0.7,\n cursor: \"pointer\"\n },\n \"& svg\": {\n width: \"34px\",\n height: \"34px\",\n position: \"relative\",\n bottom: \"-2px\"\n }\n});\nFloattingButton.displayName = \"FloattingButton\";\nexport default function DevToolsCollapsed(props) {\n return /*#__PURE__*/React.createElement(FloattingButton, {\n onClick: props.onClick\n }, /*#__PURE__*/React.createElement(\"svg\", {\n width: \"530\",\n height: \"530\",\n viewBox: \"0 0 530 530\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\"\n }, /*#__PURE__*/React.createElement(\"title\", null, \"prosemirror\"), /*#__PURE__*/React.createElement(\"desc\", null, \"Created using Figma\"), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#a\",\n transform: \"matrix(2 0 0 2 118 116)\",\n fill: \"#FFF\"\n }), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#b\",\n transform: \"rotate(16 59.054 420.192) scale(2)\",\n fill: \"#FFF\"\n }), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#c\",\n transform: \"matrix(2 0 0 2 154.024 141.58)\",\n fill: \"#363755\"\n }), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#d\",\n transform: \"matrix(2 0 0 2 220 334.8)\",\n fill: \"#FFF\"\n }), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#e\",\n transform: \"matrix(2 0 0 2 218.826 262.052)\",\n fill: \"#363755\"\n }), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#f\",\n transform: \"matrix(2 0 0 2 197.108 184.998)\",\n fill: \"#FFF\"\n }), /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#g\",\n transform: \"matrix(2 0 0 2 221.8 216)\",\n fill: \"#363755\"\n }), /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n id: \"a\",\n d: \"M73.5 0C32.859 0 0 32.859 0 73.5S32.859 147 73.5 147 147 114.141 147 73.5 114.069 0 73.5 0z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"b\",\n d: \"M193.601 107.116c0-13.376 8.238-23.91 20.619-31.153-2.244-7.447-5.19-14.6-8.824-21.32-13.886 3.633-25.12-1.799-34.568-11.26-9.449-9.437-12.344-20.672-8.709-34.571A111.362 111.362 0 0 0 140.799 0c-7.243 12.37-20.339 20.594-33.689 20.594-13.363 0-26.446-8.225-33.701-20.594A110.888 110.888 0 0 0 52.1 8.812c3.634 13.9.753 25.134-8.721 34.57-9.436 9.462-20.67 14.894-34.569 11.26A112.178 112.178 0 0 0 0 75.963c12.369 7.243 20.593 17.777 20.593 31.153 0 13.352-8.224 26.448-20.593 33.704a113.338 113.338 0 0 0 8.811 21.321c13.899-3.634 25.133-.752 34.569 8.697 9.448 9.462 12.355 20.696 8.721 34.57a112.653 112.653 0 0 0 21.32 8.837c7.243-12.407 20.338-20.619 33.702-20.619 13.35 0 26.446 8.225 33.701 20.619a114.22 114.22 0 0 0 21.32-8.837c-3.634-13.874-.752-25.108 8.709-34.57 9.449-9.437 20.683-14.869 34.569-11.26a112.343 112.343 0 0 0 8.823-21.321c-12.406-7.256-20.644-17.789-20.644-31.141zm-86.491 46.57c-25.732 0-46.58-20.849-46.58-46.57 0-25.733 20.86-46.595 46.58-46.595 25.732 0 46.567 20.875 46.567 46.595 0 25.734-20.835 46.57-46.567 46.57z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"c\",\n d: \"M98.088 49.91c-6.9 83.9 10.8 103.401 10.8 103.401s-55.1 5.499-82.7-13.401c-30.5-20.9-26-67.5-25.9-94.6.1-28.4 25.6-45.8 49.9-45.3 29.1.5 50.2 21.6 47.9 49.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"d\",\n d: \"M.1.1c12.2 33.3 22.5 42.7 40 55.2 25.3 18 36.6 17.5 76.3 41C78.1 60.3 30.8 45.7 0 0l.1.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"e\",\n d: \"M.687 36.474c3 13.3 17.9 29.9 30.4 41.6 24.8 23.2 42 22.4 86 54.7-18.2-51.8-18.8-62-43.5-106.1-24.7-44-67.6-20.3-67.6-20.3s-8.4 16.6-5.3 29.9v.2z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"f\",\n d: \"M38.346 11.5s-4-11.6-18-11.5c-30 .2-28.8 52.1 16.9 52 39.6-.1 39.2-49.4 16.1-49.6-10.2-.2-15 9.1-15 9.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n id: \"g\",\n d: \"M26.5 15c10.8 0 2 14.9-.6 20.9-1.8-8.4-10.2-20.9.6-20.9zM10.2.1C4.6.1 0 4.6 0 10.3c0 5.6 4.5 10.2 10.2 10.2 5.6 0 10.2-4.5 10.2-10.2C20.4 4.7 15.9.1 10.2.1zM40.7 0c-4.8 0-8.8 4.5-8.8 10.2 0 5.6 3.9 10.2 8.8 10.2 4.8 0 8.8-4.5 8.8-10.2C49.5 4.6 45.6 0 40.7 0z\"\n }))));\n}","/**\n * lodash 3.9.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 equivalents which return 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\nmodule.exports = getNative;\n","/**\n * lodash 3.1.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\nvar getNative = require('lodash._getnative');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeNow = getNative(Date, 'now');\n\n/**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n return new Date().getTime();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it is invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = debounce;\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || 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; };\n\nexports.default = autoprefix;\n// Same as https://github.com/SimenB/react-vendor-prefixes/blob/master/src/index.js,\n// but dumber\n\nvar vendorSpecificProperties = ['animation', 'animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction', 'appearance', 'backfaceVisibility', 'backgroundClip', 'borderImage', 'borderImageSlice', 'boxSizing', 'boxShadow', 'contentColumns', 'transform', 'transformOrigin', 'transformStyle', 'transition', 'transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction', 'perspective', 'perspectiveOrigin', 'userSelect'];\n\nvar prefixes = ['Moz', 'Webkit', 'ms', 'O'];\n\nfunction prefixProp(key, value) {\n return prefixes.reduce(function (obj, pre) {\n return obj[pre + key[0].toUpperCase() + key.substr(1)] = value, obj;\n }, {});\n}\n\nfunction autoprefix(style) {\n return Object.keys(style).reduce(function (obj, key) {\n return vendorSpecificProperties.indexOf(key) !== -1 ? _extends({}, obj, prefixProp(key, style[key])) : obj;\n }, style);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = undefined;\n\nvar _extends = Object.assign || 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; };\n\nvar _createClass = function () { function 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _class, _temp;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _lodash = require('lodash.debounce');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _autoprefix = require('./autoprefix');\n\nvar _autoprefix2 = _interopRequireDefault(_autoprefix);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction autoprefixes(styles) {\n return Object.keys(styles).reduce(function (obj, key) {\n return obj[key] = (0, _autoprefix2.default)(styles[key]), obj;\n }, {});\n}\n\nvar styles = autoprefixes({\n wrapper: {\n position: 'fixed',\n width: 0,\n height: 0,\n top: 0,\n left: 0\n },\n\n dim: {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex: 0,\n background: 'rgba(0, 0, 0, 0.2)',\n opacity: 1\n },\n\n dimAppear: {\n opacity: 0\n },\n\n dimTransparent: {\n pointerEvents: 'none'\n },\n\n dimHidden: {\n opacity: 0\n },\n\n dock: {\n position: 'fixed',\n zIndex: 1,\n boxShadow: '0 0 4px rgba(0, 0, 0, 0.3)',\n background: 'white',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n },\n\n dockHidden: {\n opacity: 0\n },\n\n dockResizing: {\n transition: 'none'\n },\n\n dockContent: {\n width: '100%',\n height: '100%',\n overflow: 'auto'\n },\n\n resizer: {\n position: 'absolute',\n zIndex: 2,\n opacity: 0\n }\n});\n\nfunction getTransitions(duration) {\n return ['left', 'top', 'width', 'height'].map(function (p) {\n return p + ' ' + duration / 1000 + 's ease-out';\n });\n}\n\nfunction getDockStyles(_ref, _ref2) {\n var fluid = _ref.fluid;\n var dockStyle = _ref.dockStyle;\n var dockHiddenStyle = _ref.dockHiddenStyle;\n var duration = _ref.duration;\n var position = _ref.position;\n var isVisible = _ref.isVisible;\n var size = _ref2.size;\n var isResizing = _ref2.isResizing;\n var fullWidth = _ref2.fullWidth;\n var fullHeight = _ref2.fullHeight;\n\n var posStyle = void 0;\n var absSize = fluid ? size * 100 + '%' : size + 'px';\n\n function getRestSize(fullSize) {\n return fluid ? 100 - size * 100 + '%' : fullSize - size + 'px';\n }\n\n switch (position) {\n case 'left':\n posStyle = {\n width: absSize,\n left: isVisible ? 0 : '-' + absSize\n };\n break;\n case 'right':\n posStyle = {\n left: isVisible ? getRestSize(fullWidth) : fullWidth,\n width: absSize\n };\n break;\n case 'top':\n posStyle = {\n top: isVisible ? 0 : '-' + absSize,\n height: absSize\n };\n break;\n case 'bottom':\n posStyle = {\n top: isVisible ? getRestSize(fullHeight) : fullHeight,\n height: absSize\n };\n break;\n }\n\n var transitions = getTransitions(duration);\n\n return [styles.dock, (0, _autoprefix2.default)({\n transition: [].concat(_toConsumableArray(transitions), [!isVisible && 'opacity 0.01s linear ' + duration / 1000 + 's']).filter(function (t) {\n return t;\n }).join(',')\n }), dockStyle, (0, _autoprefix2.default)(posStyle), isResizing && styles.dockResizing, !isVisible && styles.dockHidden, !isVisible && dockHiddenStyle];\n}\n\nfunction getDimStyles(_ref3, _ref4) {\n var dimMode = _ref3.dimMode;\n var dimStyle = _ref3.dimStyle;\n var duration = _ref3.duration;\n var isVisible = _ref3.isVisible;\n var isTransitionStarted = _ref4.isTransitionStarted;\n\n return [styles.dim, (0, _autoprefix2.default)({\n transition: 'opacity ' + duration / 1000 + 's ease-out'\n }), dimStyle, dimMode === 'transparent' && styles.dimTransparent, !isVisible && styles.dimHidden, isTransitionStarted && isVisible && styles.dimAppear, isTransitionStarted && !isVisible && styles.dimDisappear];\n}\n\nfunction getResizerStyles(position) {\n var resizerStyle = void 0;\n var size = 10;\n\n switch (position) {\n case 'left':\n resizerStyle = {\n right: -size / 2,\n width: size,\n top: 0,\n height: '100%',\n cursor: 'col-resize'\n };\n break;\n case 'right':\n resizerStyle = {\n left: -size / 2,\n width: size,\n top: 0,\n height: '100%',\n cursor: 'col-resize'\n };\n break;\n case 'top':\n resizerStyle = {\n bottom: -size / 2,\n height: size,\n left: 0,\n width: '100%',\n cursor: 'row-resize'\n };\n break;\n case 'bottom':\n resizerStyle = {\n top: -size / 2,\n height: size,\n left: 0,\n width: '100%',\n cursor: 'row-resize'\n };\n break;\n }\n\n return [styles.resizer, (0, _autoprefix2.default)(resizerStyle)];\n}\n\nfunction getFullSize(position, fullWidth, fullHeight) {\n return position === 'left' || position === 'right' ? fullWidth : fullHeight;\n}\n\nvar Dock = (_temp = _class = function (_Component) {\n _inherits(Dock, _Component);\n\n function Dock(props) {\n _classCallCheck(this, Dock);\n\n var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Dock).call(this, props));\n\n _this.transitionEnd = function () {\n _this.setState({ isTransitionStarted: false });\n };\n\n _this.hideDim = function () {\n if (!_this.props.isVisible) {\n _this.setState({ isDimHidden: true });\n }\n };\n\n _this.handleDimClick = function () {\n if (_this.props.dimMode === 'opaque') {\n _this.props.onVisibleChange && _this.props.onVisibleChange(false);\n }\n };\n\n _this.handleResize = function () {\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(_this.updateWindowSize.bind(_this, true));\n } else {\n _this.updateWindowSize(true);\n }\n };\n\n _this.updateWindowSize = function (windowResize) {\n var sizeState = {\n fullWidth: window.innerWidth,\n fullHeight: window.innerHeight\n };\n\n if (windowResize) {\n _this.setState(_extends({}, sizeState, {\n isResizing: true,\n isWindowResizing: windowResize\n }));\n\n _this.debouncedUpdateWindowSizeEnd();\n } else {\n _this.setState(sizeState);\n }\n };\n\n _this.updateWindowSizeEnd = function () {\n _this.setState({\n isResizing: false,\n isWindowResizing: false\n });\n };\n\n _this.debouncedUpdateWindowSizeEnd = (0, _lodash2.default)(_this.updateWindowSizeEnd, 30);\n\n _this.handleWrapperLeave = function () {\n _this.setState({ isResizing: false });\n };\n\n _this.handleMouseDown = function () {\n _this.setState({ isResizing: true });\n };\n\n _this.handleMouseUp = function () {\n _this.setState({ isResizing: false });\n };\n\n _this.handleMouseMove = function (e) {\n if (!_this.state.isResizing || _this.state.isWindowResizing) return;\n e.preventDefault();\n\n var _this$props = _this.props;\n var position = _this$props.position;\n var fluid = _this$props.fluid;\n var _this$state = _this.state;\n var fullWidth = _this$state.fullWidth;\n var fullHeight = _this$state.fullHeight;\n var isControlled = _this$state.isControlled;\n var x = e.clientX;\n var y = e.clientY;\n\n var size = void 0;\n\n switch (position) {\n case 'left':\n size = fluid ? x / fullWidth : x;\n break;\n case 'right':\n size = fluid ? (fullWidth - x) / fullWidth : fullWidth - x;\n break;\n case 'top':\n size = fluid ? y / fullHeight : y;\n break;\n case 'bottom':\n size = fluid ? (fullHeight - y) / fullHeight : fullHeight - y;\n break;\n }\n\n _this.props.onSizeChange && _this.props.onSizeChange(size);\n\n if (!isControlled) {\n _this.setState({ size: size });\n }\n };\n\n _this.state = {\n isControlled: typeof props.size !== 'undefined',\n size: props.size || props.defaultSize,\n isDimHidden: !props.isVisible,\n fullWidth: typeof window !== 'undefined' && window.innerWidth,\n fullHeight: typeof window !== 'undefined' && window.innerHeight,\n isTransitionStarted: false,\n isWindowResizing: false\n };\n return _this;\n }\n\n _createClass(Dock, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n window.addEventListener('mouseup', this.handleMouseUp);\n window.addEventListener('mousemove', this.handleMouseMove);\n window.addEventListener('resize', this.handleResize);\n\n if (!window.fullWidth) {\n this.updateWindowSize();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n window.removeEventListener('mouseup', this.handleMouseUp);\n window.removeEventListener('mousemove', this.handleMouseMove);\n window.removeEventListener('resize', this.handleResize);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n var isControlled = typeof nextProps.size !== 'undefined';\n\n this.setState({ isControlled: isControlled });\n\n if (isControlled && this.props.size !== nextProps.size) {\n this.setState({ size: nextProps.size });\n } else if (this.props.fluid !== nextProps.fluid) {\n this.updateSize(nextProps);\n }\n\n if (this.props.isVisible !== nextProps.isVisible) {\n this.setState({\n isTransitionStarted: true\n });\n }\n }\n }, {\n key: 'updateSize',\n value: function updateSize(props) {\n var _state = this.state;\n var fullWidth = _state.fullWidth;\n var fullHeight = _state.fullHeight;\n\n\n this.setState({\n size: props.fluid ? this.state.size / getFullSize(props.position, fullWidth, fullHeight) : getFullSize(props.position, fullWidth, fullHeight) * this.state.size\n });\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n var _this2 = this;\n\n if (this.props.isVisible !== prevProps.isVisible) {\n if (!this.props.isVisible) {\n window.setTimeout(function () {\n return _this2.hideDim();\n }, this.props.duration);\n } else {\n this.setState({ isDimHidden: false });\n }\n\n window.setTimeout(function () {\n return _this2.setState({ isTransitionStarted: false });\n }, 0);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props;\n var children = _props.children;\n var zIndex = _props.zIndex;\n var dimMode = _props.dimMode;\n var position = _props.position;\n var isVisible = _props.isVisible;\n var _state2 = this.state;\n var isResizing = _state2.isResizing;\n var size = _state2.size;\n var isDimHidden = _state2.isDimHidden;\n\n\n var dimStyles = Object.assign.apply(Object, [{}].concat(_toConsumableArray(getDimStyles(this.props, this.state))));\n var dockStyles = Object.assign.apply(Object, [{}].concat(_toConsumableArray(getDockStyles(this.props, this.state))));\n var resizerStyles = Object.assign.apply(Object, [{}].concat(_toConsumableArray(getResizerStyles(position))));\n\n return _react2.default.createElement(\n 'div',\n { style: Object.assign({}, styles.wrapper, { zIndex: zIndex }) },\n dimMode !== 'none' && !isDimHidden && _react2.default.createElement('div', { style: dimStyles, onClick: this.handleDimClick }),\n _react2.default.createElement(\n 'div',\n { style: dockStyles },\n _react2.default.createElement('div', { style: resizerStyles,\n onMouseDown: this.handleMouseDown }),\n _react2.default.createElement(\n 'div',\n { style: styles.dockContent },\n typeof children === 'function' ? children({\n position: position,\n isResizing: isResizing,\n size: size,\n isVisible: isVisible\n }) : children\n )\n )\n );\n }\n }]);\n\n return Dock;\n}(_react.Component), _class.propTypes = {\n position: _propTypes2.default.oneOf(['left', 'right', 'top', 'bottom']),\n zIndex: _propTypes2.default.number,\n fluid: _propTypes2.default.bool,\n size: _propTypes2.default.number,\n defaultSize: _propTypes2.default.number,\n dimMode: _propTypes2.default.oneOf(['none', 'transparent', 'opaque']),\n isVisible: _propTypes2.default.bool,\n onVisibleChange: _propTypes2.default.func,\n onSizeChange: _propTypes2.default.func,\n dimStyle: _propTypes2.default.object,\n dockStyle: _propTypes2.default.object,\n duration: _propTypes2.default.number\n}, _class.defaultProps = {\n position: 'left',\n zIndex: 99999999,\n fluid: true,\n defaultSize: 0.3,\n dimMode: 'opaque',\n duration: 200\n}, _temp);\nexports.default = Dock;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = undefined;\n\nvar _Dock = require('./Dock');\n\nvar _Dock2 = _interopRequireDefault(_Dock);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Dock2.default;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport PropTypes from \"prop-types\";\nimport theme from \"../theme\";\nexport var TabList = styled(\"div\")({\n display: \"flex\",\n listStyle: \"none\",\n borderBottom: \"1px solid \".concat(theme.main20)\n});\nTabList.displayName = \"TabList\";\nexport var TabsStled = styled(\"div\")({\n height: \"100%\",\n width: \"100%\"\n});\nTabsStled.displayName = \"TabsStyled\";\nexport var TabStyled = styled(\"div\")({\n color: theme.white,\n textTransform: \"uppercase\",\n fontSize: \"13px\",\n padding: \"16px 24px 14px\",\n boxSizing: \"border-box\",\n userSelect: \"none\",\n \"&:hover\": {\n cursor: \"pointer\",\n background: theme.white05\n },\n \"&:focus\": {\n outline: \"none\"\n }\n}, function (props) {\n return {\n borderBottom: props.isSelected ? \"2px solid \".concat(theme.main) : \"none\"\n };\n});\nTabStyled.displayName = \"TabStyled\";\nexport var Tab = /*#__PURE__*/function (_React$Component) {\n _inherits(Tab, _React$Component);\n\n var _super = _createSuper(Tab);\n\n function Tab() {\n _classCallCheck(this, Tab);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Tab, [{\n key: \"render\",\n value: function render() {\n var _this = this;\n\n return /*#__PURE__*/React.createElement(TabStyled, {\n isSelected: this.props.index === this.context.tabs.selectedIndex,\n onClick: function onClick() {\n (_this.context.tabs.onSelect || function () {})(_this.props.index);\n }\n }, this.props.children);\n }\n }]);\n\n return Tab;\n}(React.Component);\nTab.contextTypes = {\n tabs: PropTypes.object.isRequired\n};\nexport var TabPanelStyled = styled(\"div\")({\n width: \"100%\",\n height: \"calc(100% - 48px)\",\n boxSizing: \"border-box\"\n});\nTabPanelStyled.displayName = \"TabPanelStyled\";\nexport var TabPanel = /*#__PURE__*/function (_React$Component2) {\n _inherits(TabPanel, _React$Component2);\n\n var _super2 = _createSuper(TabPanel);\n\n function TabPanel() {\n _classCallCheck(this, TabPanel);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(TabPanel, [{\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(TabPanelStyled, null, this.props.children({\n index: this.context.tabs.selectedIndex\n }));\n }\n }]);\n\n return TabPanel;\n}(React.Component);\nTabPanel.contextTypes = {\n tabs: PropTypes.object.isRequired\n};\nexport var Tabs = /*#__PURE__*/function (_React$Component3) {\n _inherits(Tabs, _React$Component3);\n\n var _super3 = _createSuper(Tabs);\n\n function Tabs() {\n _classCallCheck(this, Tabs);\n\n return _super3.apply(this, arguments);\n }\n\n _createClass(Tabs, [{\n key: \"getChildContext\",\n value: function getChildContext() {\n return {\n tabs: {\n onSelect: this.props.onSelect,\n selectedIndex: this.props.selectedIndex\n }\n };\n }\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(TabsStled, null, this.props.children);\n }\n }]);\n\n return Tabs;\n}(React.Component);\nTabs.childContextTypes = {\n tabs: PropTypes.object\n};","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return doneResult();\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method,\n method = delegate.iterator[methodName];\n if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel;\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n return {\n next: doneResult\n };\n }\n function doneResult() {\n return {\n value: undefined,\n done: !0\n };\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) keys.push(key);\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*\n\n Style HTML\n---------------\n\n Written by Nochum Sossonko, (nsossonko@hotmail.com)\n\n Based on code initially developed by: Einar Lielmanis, <elfz@laacz.lv>\n http://jsbeautifier.org/\n\n\n You are free to use this in any way you want, in case you find this useful or working for you.\n\n Usage:\n style_html(html_source);\n\n style_html(html_source, options);\n\n The options are:\n indent_size (default 4) — indentation size,\n indent_char (default space) — character to indent with,\n max_char (default 70) - maximum amount of characters per line,\n brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\"\n put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line.\n unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted\n indent_scripts (default normal) - \"keep\"|\"separate\"|\"normal\"\n\n e.g.\n\n style_html(html_source, {\n 'indent_size': 2,\n 'indent_char': ' ',\n 'max_char': 78,\n 'brace_style': 'expand',\n 'unformatted': ['a', 'sub', 'sup', 'b', 'i', 'u']\n });\n*/\n\nfunction style_html(html_source, options) {\n//Wrapper function to invoke all the necessary constructors and deal with the output.\n\n var multi_parser,\n indent_size,\n indent_character,\n max_char,\n brace_style,\n unformatted;\n\n options = options || {};\n indent_size = options.indent_size || 4;\n indent_character = options.indent_char || ' ';\n brace_style = options.brace_style || 'collapse';\n max_char = options.max_char == 0 ? Infinity : options.max_char || 70;\n unformatted = options.unformatted || ['a', 'span', 'bdo', 'em', 'strong', 'dfn', 'code', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'q', 'sub', 'sup', 'tt', 'i', 'b', 'big', 'small', 'u', 's', 'strike', 'font', 'ins', 'del', 'pre', 'address', 'dt', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n\n function Parser() {\n\n this.pos = 0; //Parser position\n this.token = '';\n this.current_mode = 'CONTENT'; //reflects the current Parser mode: TAG/CONTENT\n this.tags = { //An object to hold tags, their position, and their parent-tags, initiated with default values\n parent: 'parent1',\n parentcount: 1,\n parent1: ''\n };\n this.tag_type = '';\n this.token_text = this.last_token = this.last_text = this.token_type = '';\n\n this.Utils = { //Uilities made available to the various functions\n whitespace: \"\\n\\r\\t \".split(''),\n single_token: 'br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed,?php,?,?='.split(','), //all the single tags for HTML\n extra_liners: 'head,body,/html'.split(','), //for tags that need a line of whitespace before them\n in_array: function (what, arr) {\n for (var i=0; i<arr.length; i++) {\n if (what === arr[i]) {\n return true;\n }\n }\n return false;\n }\n }\n\n this.get_content = function () { //function to capture regular content between tags\n\n var input_char = '',\n content = [],\n space = false; //if a space is needed\n\n while (this.input.charAt(this.pos) !== '<') {\n if (this.pos >= this.input.length) {\n return content.length?content.join(''):['', 'TK_EOF'];\n }\n\n input_char = this.input.charAt(this.pos);\n this.pos++;\n this.line_char_count++;\n\n if (this.Utils.in_array(input_char, this.Utils.whitespace)) {\n if (content.length) {\n space = true;\n }\n this.line_char_count--;\n continue; //don't want to insert unnecessary space\n }\n else if (space) {\n if (this.line_char_count >= this.max_char) { //insert a line when the max_char is reached\n content.push('\\n');\n for (var i=0; i<this.indent_level; i++) {\n content.push(this.indent_string);\n }\n this.line_char_count = 0;\n }\n else{\n content.push(' ');\n this.line_char_count++;\n }\n space = false;\n }\n content.push(input_char); //letter at-a-time (or string) inserted to an array\n }\n return content.length?content.join(''):'';\n }\n\n this.get_contents_to = function (name) { //get the full content of a script or style to pass to js_beautify\n if (this.pos == this.input.length) {\n return ['', 'TK_EOF'];\n }\n var input_char = '';\n var content = '';\n var reg_match = new RegExp('\\<\\/' + name + '\\\\s*\\>', 'igm');\n reg_match.lastIndex = this.pos;\n var reg_array = reg_match.exec(this.input);\n var end_script = reg_array?reg_array.index:this.input.length; //absolute end of script\n if(this.pos < end_script) { //get everything in between the script tags\n content = this.input.substring(this.pos, end_script);\n this.pos = end_script;\n }\n return content;\n }\n\n this.record_tag = function (tag){ //function to record a tag and its parent in this.tags Object\n if (this.tags[tag + 'count']) { //check for the existence of this tag type\n this.tags[tag + 'count']++;\n this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level\n }\n else { //otherwise initialize this tag type\n this.tags[tag + 'count'] = 1;\n this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level\n }\n this.tags[tag + this.tags[tag + 'count'] + 'parent'] = this.tags.parent; //set the parent (i.e. in the case of a div this.tags.div1parent)\n this.tags.parent = tag + this.tags[tag + 'count']; //and make this the current parent (i.e. in the case of a div 'div1')\n }\n\n this.retrieve_tag = function (tag) { //function to retrieve the opening tag to the corresponding closer\n if (this.tags[tag + 'count']) { //if the openener is not in the Object we ignore it\n var temp_parent = this.tags.parent; //check to see if it's a closable tag.\n while (temp_parent) { //till we reach '' (the initial value);\n if (tag + this.tags[tag + 'count'] === temp_parent) { //if this is it use it\n break;\n }\n temp_parent = this.tags[temp_parent + 'parent']; //otherwise keep on climbing up the DOM Tree\n }\n if (temp_parent) { //if we caught something\n this.indent_level = this.tags[tag + this.tags[tag + 'count']]; //set the indent_level accordingly\n this.tags.parent = this.tags[temp_parent + 'parent']; //and set the current parent\n }\n delete this.tags[tag + this.tags[tag + 'count'] + 'parent']; //delete the closed tags parent reference...\n delete this.tags[tag + this.tags[tag + 'count']]; //...and the tag itself\n if (this.tags[tag + 'count'] == 1) {\n delete this.tags[tag + 'count'];\n }\n else {\n this.tags[tag + 'count']--;\n }\n }\n }\n\n this.get_tag = function () { //function to get a full tag and parse its type\n var input_char = '',\n content = [],\n space = false,\n tag_start, tag_end;\n\n do {\n if (this.pos >= this.input.length) {\n return content.length?content.join(''):['', 'TK_EOF'];\n }\n\n input_char = this.input.charAt(this.pos);\n this.pos++;\n this.line_char_count++;\n\n if (this.Utils.in_array(input_char, this.Utils.whitespace)) { //don't want to insert unnecessary space\n space = true;\n this.line_char_count--;\n continue;\n }\n\n if (input_char === \"'\" || input_char === '\"') {\n if (!content[1] || content[1] !== '!') { //if we're in a comment strings don't get treated specially\n input_char += this.get_unformatted(input_char);\n space = true;\n }\n }\n\n if (input_char === '=') { //no space before =\n space = false;\n }\n\n if (content.length && content[content.length-1] !== '=' && input_char !== '>'\n && space) { //no space after = or before >\n if (this.line_char_count >= this.max_char) {\n this.print_newline(false, content);\n this.line_char_count = 0;\n }\n else {\n content.push(' ');\n this.line_char_count++;\n }\n space = false;\n }\n if (input_char === '<') {\n tag_start = this.pos - 1;\n }\n content.push(input_char); //inserts character at-a-time (or string)\n } while (input_char !== '>');\n\n var tag_complete = content.join('');\n var tag_index;\n if (tag_complete.indexOf(' ') != -1) { //if there's whitespace, thats where the tag name ends\n tag_index = tag_complete.indexOf(' ');\n }\n else { //otherwise go with the tag ending\n tag_index = tag_complete.indexOf('>');\n }\n var tag_check = tag_complete.substring(1, tag_index).toLowerCase();\n if (tag_complete.charAt(tag_complete.length-2) === '/' ||\n this.Utils.in_array(tag_check, this.Utils.single_token)) { //if this tag name is a single tag type (either in the list or has a closing /)\n this.tag_type = 'SINGLE';\n }\n else if (tag_check === 'script') { //for later script handling\n this.record_tag(tag_check);\n this.tag_type = 'SCRIPT';\n }\n else if (tag_check === 'style') { //for future style handling (for now it justs uses get_content)\n this.record_tag(tag_check);\n this.tag_type = 'STYLE';\n }\n else if (this.Utils.in_array(tag_check, unformatted)) { // do not reformat the \"unformatted\" tags\n var comment = this.get_unformatted('</'+tag_check+'>', tag_complete); //...delegate to get_unformatted function\n content.push(comment);\n // Preserve collapsed whitespace either before or after this tag.\n if (tag_start > 0 && this.Utils.in_array(this.input.charAt(tag_start - 1), this.Utils.whitespace)){\n content.splice(0, 0, this.input.charAt(tag_start - 1));\n }\n tag_end = this.pos - 1;\n if (this.Utils.in_array(this.input.charAt(tag_end + 1), this.Utils.whitespace)){\n content.push(this.input.charAt(tag_end + 1));\n }\n this.tag_type = 'SINGLE';\n }\n else if (tag_check.charAt(0) === '!') { //peek for <!-- comment\n if (tag_check.indexOf('[if') != -1) { //peek for <!--[if conditional comment\n if (tag_complete.indexOf('!IE') != -1) { //this type needs a closing --> so...\n var comment = this.get_unformatted('-->', tag_complete); //...delegate to get_unformatted\n content.push(comment);\n }\n this.tag_type = 'START';\n }\n else if (tag_check.indexOf('[endif') != -1) {//peek for <!--[endif end conditional comment\n this.tag_type = 'END';\n this.unindent();\n }\n else if (tag_check.indexOf('[cdata[') != -1) { //if it's a <[cdata[ comment...\n var comment = this.get_unformatted(']]>', tag_complete); //...delegate to get_unformatted function\n content.push(comment);\n this.tag_type = 'SINGLE'; //<![CDATA[ comments are treated like single tags\n }\n else {\n var comment = this.get_unformatted('-->', tag_complete);\n content.push(comment);\n this.tag_type = 'SINGLE';\n }\n }\n else {\n if (tag_check.charAt(0) === '/') { //this tag is a double tag so check for tag-ending\n this.retrieve_tag(tag_check.substring(1)); //remove it and all ancestors\n this.tag_type = 'END';\n }\n else { //otherwise it's a start-tag\n this.record_tag(tag_check); //push it on the tag stack\n this.tag_type = 'START';\n }\n if (this.Utils.in_array(tag_check, this.Utils.extra_liners)) { //check if this double needs an extra line\n this.print_newline(true, this.output);\n }\n }\n return content.join(''); //returns fully formatted tag\n }\n\n this.get_unformatted = function (delimiter, orig_tag) { //function to return unformatted content in its entirety\n\n if (orig_tag && orig_tag.toLowerCase().indexOf(delimiter) != -1) {\n return '';\n }\n var input_char = '';\n var content = '';\n var space = true;\n do {\n\n if (this.pos >= this.input.length) {\n return content;\n }\n\n input_char = this.input.charAt(this.pos);\n this.pos++\n\n if (this.Utils.in_array(input_char, this.Utils.whitespace)) {\n if (!space) {\n this.line_char_count--;\n continue;\n }\n if (input_char === '\\n' || input_char === '\\r') {\n content += '\\n';\n /* Don't change tab indention for unformatted blocks. If using code for html editing, this will greatly affect <pre> tags if they are specified in the 'unformatted array'\n for (var i=0; i<this.indent_level; i++) {\n content += this.indent_string;\n }\n space = false; //...and make sure other indentation is erased\n */\n this.line_char_count = 0;\n continue;\n }\n }\n content += input_char;\n this.line_char_count++;\n space = true;\n\n\n } while (content.toLowerCase().indexOf(delimiter) == -1);\n return content;\n }\n\n this.get_token = function () { //initial handler for token-retrieval\n var token;\n\n if (this.last_token === 'TK_TAG_SCRIPT' || this.last_token === 'TK_TAG_STYLE') { //check if we need to format javascript\n var type = this.last_token.substr(7)\n token = this.get_contents_to(type);\n if (typeof token !== 'string') {\n return token;\n }\n return [token, 'TK_' + type];\n }\n if (this.current_mode === 'CONTENT') {\n token = this.get_content();\n if (typeof token !== 'string') {\n return token;\n }\n else {\n return [token, 'TK_CONTENT'];\n }\n }\n\n if (this.current_mode === 'TAG') {\n token = this.get_tag();\n if (typeof token !== 'string') {\n return token;\n }\n else {\n var tag_name_type = 'TK_TAG_' + this.tag_type;\n return [token, tag_name_type];\n }\n }\n }\n\n this.get_full_indent = function (level) {\n level = this.indent_level + level || 0;\n if (level < 1)\n return '';\n\n return Array(level + 1).join(this.indent_string);\n }\n\n\n this.printer = function (js_source, indent_character, indent_size, max_char, brace_style) { //handles input/output and some other printing functions\n\n this.input = js_source || ''; //gets the input for the Parser\n this.output = [];\n this.indent_character = indent_character;\n this.indent_string = '';\n this.indent_size = indent_size;\n this.brace_style = brace_style;\n this.indent_level = 0;\n this.max_char = max_char;\n this.line_char_count = 0; //count to see if max_char was exceeded\n\n for (var i=0; i<this.indent_size; i++) {\n this.indent_string += this.indent_character;\n }\n\n this.print_newline = function (ignore, arr) {\n this.line_char_count = 0;\n if (!arr || !arr.length) {\n return;\n }\n if (!ignore) { //we might want the extra line\n while (this.Utils.in_array(arr[arr.length-1], this.Utils.whitespace)) {\n arr.pop();\n }\n }\n arr.push('\\n');\n for (var i=0; i<this.indent_level; i++) {\n arr.push(this.indent_string);\n }\n }\n\n this.print_token = function (text) {\n this.output.push(text);\n }\n\n this.indent = function () {\n this.indent_level++;\n }\n\n this.unindent = function () {\n if (this.indent_level > 0) {\n this.indent_level--;\n }\n }\n }\n return this;\n }\n\n /*_____________________--------------------_____________________*/\n\n multi_parser = new Parser(); //wrapping functions Parser\n multi_parser.printer(html_source, indent_character, indent_size, max_char, brace_style); //initialize starting values\n\n while (true) {\n var t = multi_parser.get_token();\n multi_parser.token_text = t[0];\n multi_parser.token_type = t[1];\n\n if (multi_parser.token_type === 'TK_EOF') {\n break;\n }\n\n switch (multi_parser.token_type) {\n case 'TK_TAG_START':\n multi_parser.print_newline(false, multi_parser.output);\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.indent();\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_TAG_STYLE':\n case 'TK_TAG_SCRIPT':\n multi_parser.print_newline(false, multi_parser.output);\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_TAG_END':\n //Print new line only if the tag has no content and has child\n if (multi_parser.last_token === 'TK_CONTENT' && multi_parser.last_text === '') {\n var tag_name = multi_parser.token_text.match(/\\w+/)[0];\n var tag_extracted_from_last_output = multi_parser.output[multi_parser.output.length -1].match(/<\\s*(\\w+)/);\n if (tag_extracted_from_last_output === null || tag_extracted_from_last_output[1] !== tag_name)\n multi_parser.print_newline(true, multi_parser.output);\n }\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_TAG_SINGLE':\n // Don't add a newline before elements that should remain unformatted.\n var tag_check = multi_parser.token_text.match(/^\\s*<([a-z]+)/i);\n if (!tag_check || !multi_parser.Utils.in_array(tag_check[1], unformatted)){\n multi_parser.print_newline(false, multi_parser.output);\n }\n multi_parser.print_token(multi_parser.token_text);\n multi_parser.current_mode = 'CONTENT';\n break;\n case 'TK_CONTENT':\n if (multi_parser.token_text !== '') {\n multi_parser.print_token(multi_parser.token_text);\n }\n multi_parser.current_mode = 'TAG';\n break;\n case 'TK_STYLE':\n case 'TK_SCRIPT':\n if (multi_parser.token_text !== '') {\n multi_parser.output.push('\\n');\n var text = multi_parser.token_text;\n if (multi_parser.token_type == 'TK_SCRIPT') {\n var _beautifier = typeof js_beautify == 'function' && js_beautify;\n } else if (multi_parser.token_type == 'TK_STYLE') {\n var _beautifier = typeof css_beautify == 'function' && css_beautify;\n }\n\n if (options.indent_scripts == \"keep\") {\n var script_indent_level = 0;\n } else if (options.indent_scripts == \"separate\") {\n var script_indent_level = -multi_parser.indent_level;\n } else {\n var script_indent_level = 1;\n }\n\n var indentation = multi_parser.get_full_indent(script_indent_level);\n if (_beautifier) {\n // call the Beautifier if avaliable\n text = _beautifier(text.replace(/^\\s*/, indentation), options);\n } else {\n // simply indent the string otherwise\n var white = text.match(/^\\s*/)[0];\n var _level = white.match(/[^\\n\\r]*$/)[0].split(multi_parser.indent_string).length - 1;\n var reindent = multi_parser.get_full_indent(script_indent_level -_level);\n text = text.replace(/^\\s*/, indentation)\n .replace(/\\r\\n|\\r|\\n/g, '\\n' + reindent)\n .replace(/\\s*$/, '');\n }\n if (text) {\n multi_parser.print_token(text);\n multi_parser.print_newline(true, multi_parser.output);\n }\n }\n multi_parser.current_mode = 'TAG';\n break;\n }\n multi_parser.last_token = multi_parser.token_type;\n multi_parser.last_text = multi_parser.token_text;\n }\n return multi_parser.output.join('');\n}\n\nmodule.exports = {\n prettyPrint: style_html\n};","// This file replaces `index.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nif (process.env.NODE_ENV !== 'production') {\n // All bundlers will remove this block in production bundle\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n throw new Error(\n 'React Native does not have a built-in secure random generator. ' +\n 'If you don’t need unpredictable IDs, you can use `nanoid/non-secure`. ' +\n 'For secure ID install `expo-random` locally and use `nanoid/async`.'\n )\n }\n if (typeof self === 'undefined' || (!self.crypto && !self.msCrypto)) {\n throw new Error(\n 'Your browser does not have secure random generator. ' +\n 'If you don’t need unpredictable IDs, you can use nanoid/non-secure.'\n )\n }\n}\n\nvar crypto = self.crypto || self.msCrypto\n\n// This alphabet uses a-z A-Z 0-9 _- symbols.\n// Symbols are generated for smaller size.\n// -_zyxwvutsrqponmlkjihgfedcba9876543210ZYXWVUTSRQPONMLKJIHGFEDCBA\nvar url = '-_'\n// Loop from 36 to 0 (from z to a and 9 to 0 in Base36).\nvar i = 36\nwhile (i--) {\n // 36 is radix. Number.prototype.toString(36) returns number\n // in Base36 representation. Base36 is like hex, but it uses 0–9 and a-z.\n url += i.toString(36)\n}\n// Loop from 36 to 10 (from Z to A in Base36).\ni = 36\nwhile (i-- - 10) {\n url += i.toString(36).toUpperCase()\n}\n\nmodule.exports = function (size) {\n var id = ''\n var bytes = crypto.getRandomValues(new Uint8Array(size || 21))\n i = size || 21\n\n // Compact alternative for `for (var i = 0; i < size; i++)`\n while (i--) {\n // We can’t use bytes bigger than the alphabet. 63 is 00111111 bitmask.\n // This mask reduces random byte 0-255 to 0-63 values.\n // There is no need in `|| ''` and `* 1.6` hacks in here,\n // because bitmask trim bytes exact to alphabet size.\n id += url[bytes[i] & 63]\n }\n return id\n}\n","export default function subscribeOnUpdates(editorView, callback) {\n var dispatch = (editorView._props.dispatchTransaction || editorView.dispatch).bind(editorView);\n\n var handler = function handler(tr) {\n var oldState = editorView.state;\n dispatch(tr);\n callback(tr, oldState, editorView.state);\n };\n\n if (editorView._props.dispatchTransaction) {\n editorView._props.dispatchTransaction = handler;\n } else {\n editorView.dispatch = handler;\n }\n}","function findNode(fullPath, currentNode, nodeToFind) {\n if (nodeToFind === currentNode) {\n return fullPath;\n }\n\n if (!currentNode.content || !currentNode.content.content) return null;\n var res = currentNode.content.content.map(function (currentNode, i) {\n return findNode([].concat(fullPath, \"content\", i), currentNode, nodeToFind);\n }).filter(function (res) {\n return Array.isArray(res) && res.length;\n })[0];\n return res;\n}\n\nexport default function findNodeIn(doc, node) {\n var path = findNode([], doc, node);\n\n if (path) {\n return path.reduce(function (newPath, item) {\n // [0, content, content, 0] => [0, content, 0]\n // Because JSON representation a bit different from actual DOC.\n if (item === \"content\" && newPath[newPath.length - 1] === \"content\") {\n return newPath;\n }\n\n newPath.push(item);\n return newPath;\n }, []);\n }\n}\n\nfunction findNodeJSON(fullPath, currentNode, nodeToFind) {\n if (nodeToFind === currentNode) {\n return fullPath;\n }\n\n if (!currentNode.content) return null;\n\n if (currentNode.content === nodeToFind) {\n return fullPath.concat(\"content\");\n }\n\n var res = currentNode.content.map(function (currentNode, i) {\n return findNodeJSON([].concat(fullPath, \"content\", i), currentNode, nodeToFind);\n }).filter(function (res) {\n return Array.isArray(res) && res.length;\n })[0];\n return res;\n}\n\nexport function findNodeInJSON(doc, node) {\n var path = findNodeJSON([], doc, node);\n\n if (path) {\n return path.reduce(function (newPath, item) {\n newPath.push(item);\n\n if (item === \"content\") {\n newPath.push(\"content\");\n }\n\n return newPath;\n }, []);\n }\n}","import { EditorState } from \"prosemirror-state\";\nexport default function getEditorStateClass() {\n return EditorState;\n}","import _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { 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\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); }\n\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; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nimport { DOMSerializer } from \"prosemirror-model\";\nimport { Container } from \"unstated\";\nimport { prettyPrint } from \"html\";\nimport nanoid from \"nanoid\";\nimport subscribeOnUpdates from \"../utils/subscribe-on-updates\";\nimport findNodeIn, { findNodeInJSON } from \"../utils/find-node\";\nimport getEditorStateClass from \"./get-editor-state\";\nvar NODE_PICKER_DEFAULT = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n active: false\n};\nvar HISTORY_SIZE = 200;\nvar SNAPSHOTS_KEY = \"prosemirror-dev-tools-snapshots\";\nvar nodesColors = [\"#EA7C7F\", // red\n\"#67B0C6\", // cyan 400\n\"#94BB7F\", // green\n\"#CA9EDB\", // deep purple\n\"#DCDC5D\", // lime\n\"#B9CC7C\", // light green\n\"#DD97D8\", // purple\n\"#FFB761\", // orange\n\"#4D8FD1\", // light blue\n\"#F36E98\", // pink\n\"#E45F44\", // deep orange\n\"#A6A4AE\", // blue grey\n\"#FCC047\", // yellow\n\"#FFC129\", // amber\n\"#D3929C\", // can can\n\"#4CBCD4\", // cyan\n\"#8D7BC0\" // indigo\n];\nexport function calculateSafeIndex(index, total) {\n var quotient = index / total;\n return Math.round(total * (quotient - Math.floor(quotient)));\n}\nexport function buildColors(schema) {\n return Object.keys(schema.nodes).reduce(function (acc, node, index) {\n var safeIndex = index >= nodesColors.length ? calculateSafeIndex(index, nodesColors.length) : index;\n acc[node] = nodesColors[safeIndex];\n return acc;\n }, {});\n}\nexport function findPMNode(domNode) {\n var node;\n var target = domNode;\n\n while (!node && target) {\n if (target.pmViewDesc) {\n node = target;\n }\n\n target = target.parentNode;\n }\n\n return node;\n}\nexport function getActiveMarks(editorState) {\n var selection = editorState.selection;\n var marks = [];\n\n if (selection.empty) {\n marks = selection.storedMarks || selection.$from.marks();\n } else {\n editorState.doc.nodesBetween(selection.from, selection.to, function (node) {\n marks = marks.concat(node.marks);\n });\n }\n\n marks = marks.reduce(function (acc, mark) {\n if (acc.indexOf(mark) === -1) {\n acc.push(mark);\n }\n\n return acc;\n }, []).map(function (m) {\n return m.toJSON();\n });\n return marks;\n}\nexport function buildSelection(selection) {\n return {\n type: selection.type,\n empty: selection.empty,\n anchor: selection.anchor,\n head: selection.head,\n from: selection.from,\n to: selection.to\n };\n}\nexport function createHistoryEntry(editorState) {\n var serializer = DOMSerializer.fromSchema(editorState.schema);\n var selection = editorState.selection;\n var domFragment = serializer.serializeFragment(selection.content().content);\n var selectionContent = [];\n\n if (domFragment) {\n var child = domFragment.firstChild;\n\n while (child) {\n selectionContent.push(child.outerHTML);\n child = child.nextSibling;\n }\n }\n\n return {\n id: nanoid(),\n state: editorState,\n timestamp: Date.now(),\n diffPending: true,\n diff: undefined,\n selection: undefined,\n selectionContent: prettyPrint(selectionContent.join(\"\\n\"), {\n max_char: 60,\n indent_size: 2\n })\n };\n}\nexport function shrinkEditorHistory(history, historyRolledBackTo) {\n var startIndex = historyRolledBackTo !== false ? historyRolledBackTo : 0;\n return history.slice(startIndex, HISTORY_SIZE);\n}\nexport function updateEditorHistory(history, historyRolledBackTo, tr, newState) {\n var skipHistory = tr.getMeta(\"_skip-dev-tools-history_\");\n if (skipHistory) return;\n var newHistory = shrinkEditorHistory(history, historyRolledBackTo);\n newHistory.unshift(createHistoryEntry(newState));\n return newHistory;\n}\n\nvar EditorStateContainer = /*#__PURE__*/function (_Container) {\n _inherits(EditorStateContainer, _Container);\n\n var _super = _createSuper(EditorStateContainer);\n\n function EditorStateContainer(_editorView, props) {\n var _this;\n\n _classCallCheck(this, EditorStateContainer);\n\n _this = _super.call(this);\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n EditorState: function EditorState() {},\n view: null,\n state: {},\n schema: {},\n nodeColors: {},\n activeMarks: [],\n history: [],\n expandPath: [],\n historyRolledBackTo: false,\n selectedHistoryItem: 0,\n snapshots: JSON.parse(window.localStorage.getItem(SNAPSHOTS_KEY)) || [],\n nodePicker: NODE_PICKER_DEFAULT\n });\n\n _defineProperty(_assertThisInitialized(_this), \"activatePicker\", function () {\n _this.setState({\n nodePicker: Object.assign({}, NODE_PICKER_DEFAULT, {\n active: true\n })\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"deactivatePicker\", function () {\n var picker = _this.state.nodePicker;\n\n if (picker.onMouseOver) {\n document.removeEventListener(\"mouseover\", picker.onMouseOver);\n }\n\n if (picker.onMouseOver) {\n document.removeEventListener(\"click\", picker.onClick);\n }\n\n _this.setState({\n nodePicker: NODE_PICKER_DEFAULT\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"updateNodePickerPossition\", function (target) {\n var node = findPMNode(target);\n\n if (node && (node.pmViewDesc.node && node.pmViewDesc.node.type.name !== \"doc\" || node.pmViewDesc.mark)) {\n var _node$getBoundingClie = node.getBoundingClientRect(),\n top = _node$getBoundingClie.top,\n left = _node$getBoundingClie.left,\n width = _node$getBoundingClie.width,\n height = _node$getBoundingClie.height;\n\n _this.setState({\n nodePicker: {\n top: top + window.scrollY,\n left: left,\n width: width,\n height: height,\n active: true\n }\n });\n } else {\n _this.setState({\n nodePicker: Object.assign({}, NODE_PICKER_DEFAULT, {\n active: true\n })\n });\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"nodePickerSelect\", function (target) {\n var node = findPMNode(target);\n\n if (node) {\n var editorState = _this.state.state;\n var path = findNodeIn(editorState.doc, editorState.doc.nodeAt(node.pmViewDesc.posAtStart));\n\n _this.setState({\n expandPath: path\n });\n }\n\n _this.setState({\n nodePicker: NODE_PICKER_DEFAULT\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"saveSnapshot\", function () {\n var snapshotName = prompt(\"Enter snapshot name\", Date.now());\n if (!snapshotName) return;\n var snapshots = [{\n name: snapshotName,\n timestamp: Date.now(),\n snapshot: _this.state.state.doc.toJSON()\n }].concat(_this.state.snapshots);\n\n _this.setState({\n snapshots: snapshots\n });\n\n window.localStorage.setItem(SNAPSHOTS_KEY, JSON.stringify(snapshots));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"loadSnapshot\", function (snapshot) {\n var EditorState = _this.state.EditorState;\n var editorView = _this.state.view;\n var editorState = editorView.state;\n var newState = EditorState.create({\n schema: editorState.schema,\n plugins: editorState.plugins,\n doc: editorState.schema.nodeFromJSON(snapshot.snapshot)\n });\n\n _this.setState({\n history: [createHistoryEntry(newState)],\n state: newState\n });\n\n editorView.updateState(newState);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"deleteSnapshot\", function (snapshot) {\n var snapshots = _this.state.snapshots;\n var snapshotIndex = snapshots.indexOf(snapshot);\n snapshots.splice(snapshotIndex, 1);\n\n _this.setState({\n snapshots: [].concat(snapshots)\n });\n\n window.localStorage.setItem(SNAPSHOTS_KEY, JSON.stringify(snapshots));\n });\n\n _defineProperty(_assertThisInitialized(_this), \"logNodeFromJSON\", function (_ref) {\n var doc = _ref.doc,\n node = _ref.node;\n var fullDoc = _this.state.state.doc;\n var path = findNodeInJSON(doc, node);\n\n if (path) {\n console.log(path.reduce(function (node, pathItem) {\n return node[pathItem];\n }, fullDoc));\n } else {\n console.log(node);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectHistoryItem\", function (index) {\n return _this.setState({\n selectedHistoryItem: index\n });\n });\n\n _defineProperty(_assertThisInitialized(_this), \"rollbackHistory\", function (index) {\n var EditorState = _this.state.EditorState;\n var editorState = _this.state.history[index].state;\n var editorView = _this.state.view;\n var newState = EditorState.create({\n schema: editorState.schema,\n plugins: editorState.plugins,\n doc: editorState.schema.nodeFromJSON(editorState.doc.toJSON())\n });\n editorView.updateState(newState);\n editorView.dom.focus();\n var tr = editorView.state.tr.setSelection(editorState.selection).setMeta(\"addToHistory\", false).setMeta(\"_skip-dev-tools-history_\", true);\n editorView.dispatch(tr);\n\n _this.setState({\n state: newState,\n historyRolledBackTo: index\n });\n });\n\n _this.diffWorker = props && props.diffWorker ? import(\"./json-diff-worker\").then(function (_ref2) {\n var JsonDiffWorker = _ref2.JsonDiffWorker;\n return new JsonDiffWorker(props.diffWorker);\n }) : import(\"./json-diff-main\").then(function (_ref3) {\n var JsonDiffMain = _ref3.JsonDiffMain;\n return new JsonDiffMain();\n });\n _this.state = Object.assign({}, _this.state, {\n EditorState: getEditorStateClass(props),\n view: _editorView,\n state: _editorView.state,\n nodeColors: buildColors(_editorView.state.schema),\n history: [{\n state: _editorView.state,\n timestamp: Date.now()\n }]\n });\n subscribeOnUpdates(_editorView, function (tr, oldState, newState) {\n var updatedHistory = updateEditorHistory(_this.state.history, _this.state.historyRolledBackTo, tr, newState);\n\n if (oldState && updatedHistory) {\n var _updatedHistory = _slicedToArray(updatedHistory, 1),\n id = _updatedHistory[0].id;\n\n var self = _assertThisInitialized(_this);\n\n _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n var diffWorker, _yield$Promise$all, _yield$Promise$all2, diff, selection, history;\n\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return _this.diffWorker;\n\n case 2:\n diffWorker = _context.sent;\n _context.next = 5;\n return Promise.all([diffWorker.diff({\n a: oldState.doc.toJSON(),\n b: newState.doc.toJSON(),\n id: id\n }), diffWorker.diff({\n a: buildSelection(oldState.selection),\n b: buildSelection(newState.selection),\n id: id\n })]);\n\n case 5:\n _yield$Promise$all = _context.sent;\n _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);\n diff = _yield$Promise$all2[0].delta;\n selection = _yield$Promise$all2[1].delta;\n history = updatedHistory.map(function (item) {\n return item.id === id ? Object.assign({}, item, {\n diff: diff,\n diffPending: false,\n selection: selection\n }) : item;\n });\n self.setState({\n history: history\n });\n\n case 11:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }))();\n }\n\n _this.setState({\n state: newState,\n nodeColors: buildColors(newState.schema),\n activeMarks: getActiveMarks(newState),\n history: updatedHistory || _this.state.history,\n selectedHistoryItem: updatedHistory ? 0 : _this.state.selectedHistoryItem,\n historyRolledBackTo: updatedHistory ? false : _this.state.historyRolledBackTo\n });\n });\n return _this;\n }\n\n return EditorStateContainer;\n}(Container);\n\nexport { EditorStateContainer as default };","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nimport { Container } from \"unstated\";\n\nvar StateTabStateContainer = /*#__PURE__*/function (_Container) {\n _inherits(StateTabStateContainer, _Container);\n\n var _super = _createSuper(StateTabStateContainer);\n\n function StateTabStateContainer() {\n var _this;\n\n _classCallCheck(this, StateTabStateContainer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n selectionExpanded: false\n });\n\n _defineProperty(_assertThisInitialized(_this), \"toggleSelection\", function () {\n _this.setState({\n selectionExpanded: !_this.state.selectionExpanded\n });\n });\n\n return _this;\n }\n\n return StateTabStateContainer;\n}(Container);\n\nexport { StateTabStateContainer as default };","var copyProps = [\"jsonID\", \"empty\", \"anchor\", \"from\", \"head\", \"to\", \"$anchor\", \"$head\", \"$cursor\", \"$to\", \"$from\"];\nvar copySubProps = {\n $from: [\"nodeAfter\", \"nodeBefore\", \"parent\", \"textOffset\", \"depth\", \"pos\"],\n $to: [\"nodeAfter\", \"nodeBefore\", \"parent\", \"textOffset\", \"depth\", \"pos\"]\n};\nvar isNode = [\"nodeAfter\", \"nodeBefore\", \"parent\"];\n\nfunction filterProps(selection, props, subProps) {\n return props.reduce(function (acc, prop) {\n if (subProps && subProps[prop]) {\n acc[prop] = subProps[prop].reduce(function (subAcc, subProp) {\n subAcc[subProp] = isNode.indexOf(subProp) === -1 || !selection[prop][subProp] ? selection[prop][subProp] : selection[prop][subProp].toJSON();\n return subAcc;\n }, {});\n } else {\n acc[prop === \"jsonID\" ? \"type\" : prop] = selection[prop];\n }\n\n return acc;\n }, {});\n}\n\nexport function expandedStateFormatSelection(selection) {\n return filterProps(selection, copyProps, copySubProps);\n}\nexport function collapsedStateFormatSelection(selection) {\n return filterProps(selection, copyProps.slice(0, 6));\n}","import styled from \"@emotion/styled\";\nimport theme from \"../theme\";\nexport var SplitView = styled(\"div\")({\n display: \"flex\",\n height: \"100%\"\n});\nSplitView.displayName = \"SplitView\";\nexport var SplitViewCol = styled(\"div\")({\n boxSizing: \"border-box\",\n height: \"100%\",\n overflow: \"scroll\"\n}, function (_ref) {\n var grow = _ref.grow,\n sep = _ref.sep,\n noPaddings = _ref.noPaddings,\n minWidth = _ref.minWidth,\n maxWidth = _ref.maxWidth;\n return {\n flexGrow: grow ? 1 : 0,\n borderLeft: sep ? \"1px solid \" + theme.main20 : \"none\",\n padding: noPaddings ? \"\" : \"16px 18px 18px\",\n minWidth: minWidth ? \"\".concat(minWidth, \"px\") : \"none\",\n maxWidth: maxWidth ? \"\".concat(maxWidth, \"px\") : \"none\"\n };\n});\nSplitViewCol.displayName = \"SplitViewCol\";","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","module.exports = true;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","module.exports = require('./_hide');\n","module.exports = {};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","exports.f = require('./_wks');\n","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = Object.getOwnPropertySymbols;\n","exports.f = {}.propertyIsEnumerable;\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","require('./_wks-define')('asyncIterator');\n","require('./_wks-define')('observable');\n","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D) {\n return $Object.create(P, D);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n }\n\n subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };","'use strict';\n\nexports.__esModule = true;\n\nvar _iterator = require('babel-runtime/core-js/symbol/iterator');\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nexports['default'] = objType;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction objType(obj) {\n var type = Object.prototype.toString.call(obj).slice(8, -1);\n if (type === 'Object' && typeof obj[_iterator2['default']] === 'function') {\n return 'Iterable';\n }\n\n if (type === 'Custom' && obj.constructor !== Object && obj instanceof Object) {\n // For projects implementing objects overriding `.prototype[Symbol.toStringTag]`\n return 'Object';\n }\n\n return type;\n}","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","require('../../modules/es6.object.get-own-property-names');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function getOwnPropertyNames(it) {\n return $Object.getOwnPropertyNames(it);\n};\n","module.exports = { \"default\": require(\"core-js/library/fn/object/get-own-property-names\"), __esModule: true };","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar JSONArrow = function JSONArrow(_ref) {\n var styling = _ref.styling,\n arrowStyle = _ref.arrowStyle,\n expanded = _ref.expanded,\n nodeType = _ref.nodeType,\n onClick = _ref.onClick;\n return _react2['default'].createElement(\n 'div',\n (0, _extends3['default'])({}, styling('arrowContainer', arrowStyle), { onClick: onClick }),\n _react2['default'].createElement(\n 'div',\n styling(['arrow', 'arrowSign'], nodeType, expanded, arrowStyle),\n '\\u25B6',\n arrowStyle === 'double' && _react2['default'].createElement(\n 'div',\n styling(['arrowSign', 'arrowSignInner']),\n '\\u25B6'\n )\n )\n );\n};\n\nJSONArrow.propTypes = {\n styling: _propTypes2['default'].func.isRequired,\n arrowStyle: _propTypes2['default'].oneOf(['single', 'double']),\n expanded: _propTypes2['default'].bool.isRequired,\n nodeType: _propTypes2['default'].string.isRequired,\n onClick: _propTypes2['default'].func.isRequired\n};\n\nJSONArrow.defaultProps = {\n arrowStyle: 'single'\n};\n\nexports['default'] = JSONArrow;","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };","'use strict';\n\nexports.__esModule = true;\n\nvar _getIterator2 = require('babel-runtime/core-js/get-iterator');\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _getOwnPropertyNames = require('babel-runtime/core-js/object/get-own-property-names');\n\nvar _getOwnPropertyNames2 = _interopRequireDefault(_getOwnPropertyNames);\n\nvar _keys = require('babel-runtime/core-js/object/keys');\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nexports['default'] = getCollectionEntries;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction getLength(type, collection) {\n if (type === 'Object') {\n return (0, _keys2['default'])(collection).length;\n } else if (type === 'Array') {\n return collection.length;\n }\n\n return Infinity;\n}\n\nfunction isIterableMap(collection) {\n return typeof collection.set === 'function';\n}\n\nfunction getEntries(type, collection, sortObjectKeys) {\n var from = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var to = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Infinity;\n\n var res = void 0;\n\n if (type === 'Object') {\n var keys = (0, _getOwnPropertyNames2['default'])(collection);\n\n if (sortObjectKeys) {\n keys.sort(sortObjectKeys === true ? undefined : sortObjectKeys);\n }\n\n keys = keys.slice(from, to + 1);\n\n res = {\n entries: keys.map(function (key) {\n return { key: key, value: collection[key] };\n })\n };\n } else if (type === 'Array') {\n res = {\n entries: collection.slice(from, to + 1).map(function (val, idx) {\n return { key: idx + from, value: val };\n })\n };\n } else {\n var idx = 0;\n var entries = [];\n var done = true;\n\n var isMap = isIterableMap(collection);\n\n for (var _iterator = collection, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3['default'])(_iterator);;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var item = _ref;\n\n if (idx > to) {\n done = false;\n break;\n }\n if (from <= idx) {\n if (isMap && Array.isArray(item)) {\n if (typeof item[0] === 'string' || typeof item[0] === 'number') {\n entries.push({ key: item[0], value: item[1] });\n } else {\n entries.push({\n key: '[entry ' + idx + ']',\n value: {\n '[key]': item[0],\n '[value]': item[1]\n }\n });\n }\n } else {\n entries.push({ key: idx, value: item });\n }\n }\n idx++;\n }\n\n res = {\n hasMore: !done,\n entries: entries\n };\n }\n\n return res;\n}\n\nfunction getRanges(from, to, limit) {\n var ranges = [];\n while (to - from > limit * limit) {\n limit = limit * limit;\n }\n for (var i = from; i <= to; i += limit) {\n ranges.push({ from: i, to: Math.min(to, i + limit - 1) });\n }\n\n return ranges;\n}\n\nfunction getCollectionEntries(type, collection, sortObjectKeys, limit) {\n var from = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var to = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : Infinity;\n\n var getEntriesBound = getEntries.bind(null, type, collection, sortObjectKeys);\n\n if (!limit) {\n return getEntriesBound().entries;\n }\n\n var isSubset = to < Infinity;\n var length = Math.min(to - from, getLength(type, collection));\n\n if (type !== 'Iterable') {\n if (length <= limit || limit < 7) {\n return getEntriesBound(from, to).entries;\n }\n } else {\n if (length <= limit && !isSubset) {\n return getEntriesBound(from, to).entries;\n }\n }\n\n var limitedEntries = void 0;\n if (type === 'Iterable') {\n var _getEntriesBound = getEntriesBound(from, from + limit - 1),\n hasMore = _getEntriesBound.hasMore,\n entries = _getEntriesBound.entries;\n\n limitedEntries = hasMore ? [].concat(entries, getRanges(from + limit, from + 2 * limit - 1, limit)) : entries;\n } else {\n limitedEntries = isSubset ? getRanges(from, to, limit) : [].concat(getEntriesBound(0, limit - 5).entries, getRanges(limit - 4, length - 5, limit), getEntriesBound(length - 4, length - 1).entries);\n }\n\n return limitedEntries;\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = require('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _JSONArrow = require('./JSONArrow');\n\nvar _JSONArrow2 = _interopRequireDefault(_JSONArrow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar ItemRange = function (_React$Component) {\n (0, _inherits3['default'])(ItemRange, _React$Component);\n\n function ItemRange(props) {\n (0, _classCallCheck3['default'])(this, ItemRange);\n\n var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));\n\n _this.state = { expanded: false };\n\n _this.handleClick = _this.handleClick.bind(_this);\n return _this;\n }\n\n ItemRange.prototype.render = function render() {\n var _props = this.props,\n styling = _props.styling,\n from = _props.from,\n to = _props.to,\n renderChildNodes = _props.renderChildNodes,\n nodeType = _props.nodeType;\n\n\n return this.state.expanded ? _react2['default'].createElement(\n 'div',\n styling('itemRange', this.state.expanded),\n renderChildNodes(this.props, from, to)\n ) : _react2['default'].createElement(\n 'div',\n (0, _extends3['default'])({}, styling('itemRange', this.state.expanded), {\n onClick: this.handleClick\n }),\n _react2['default'].createElement(_JSONArrow2['default'], {\n nodeType: nodeType,\n styling: styling,\n expanded: false,\n onClick: this.handleClick,\n arrowStyle: 'double'\n }),\n from + ' ... ' + to\n );\n };\n\n ItemRange.prototype.handleClick = function handleClick() {\n this.setState({ expanded: !this.state.expanded });\n };\n\n return ItemRange;\n}(_react2['default'].Component);\n\nItemRange.propTypes = {\n styling: _propTypes2['default'].func.isRequired,\n from: _propTypes2['default'].number.isRequired,\n to: _propTypes2['default'].number.isRequired,\n renderChildNodes: _propTypes2['default'].func.isRequired,\n nodeType: _propTypes2['default'].string.isRequired\n};\nexports['default'] = ItemRange;","'use strict';\n\nexports.__esModule = true;\n\nvar _keys = require('babel-runtime/core-js/object/keys');\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = require('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _JSONArrow = require('./JSONArrow');\n\nvar _JSONArrow2 = _interopRequireDefault(_JSONArrow);\n\nvar _getCollectionEntries = require('./getCollectionEntries');\n\nvar _getCollectionEntries2 = _interopRequireDefault(_getCollectionEntries);\n\nvar _JSONNode = require('./JSONNode');\n\nvar _JSONNode2 = _interopRequireDefault(_JSONNode);\n\nvar _ItemRange = require('./ItemRange');\n\nvar _ItemRange2 = _interopRequireDefault(_ItemRange);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Renders nested values (eg. objects, arrays, lists, etc.)\n */\n\nfunction renderChildNodes(props, from, to) {\n var nodeType = props.nodeType,\n data = props.data,\n collectionLimit = props.collectionLimit,\n circularCache = props.circularCache,\n keyPath = props.keyPath,\n postprocessValue = props.postprocessValue,\n sortObjectKeys = props.sortObjectKeys;\n\n var childNodes = [];\n\n (0, _getCollectionEntries2['default'])(nodeType, data, sortObjectKeys, collectionLimit, from, to).forEach(function (entry) {\n if (entry.to) {\n childNodes.push(_react2['default'].createElement(_ItemRange2['default'], (0, _extends3['default'])({}, props, {\n key: 'ItemRange--' + entry.from + '-' + entry.to,\n from: entry.from,\n to: entry.to,\n renderChildNodes: renderChildNodes\n })));\n } else {\n var key = entry.key,\n value = entry.value;\n\n var isCircular = circularCache.indexOf(value) !== -1;\n\n var node = _react2['default'].createElement(_JSONNode2['default'], (0, _extends3['default'])({}, props, { postprocessValue: postprocessValue, collectionLimit: collectionLimit }, {\n key: 'Node--' + key,\n keyPath: [key].concat(keyPath),\n value: postprocessValue(value),\n circularCache: [].concat(circularCache, [value]),\n isCircular: isCircular,\n hideRoot: false\n }));\n\n if (node !== false) {\n childNodes.push(node);\n }\n }\n });\n\n return childNodes;\n}\n\nfunction getStateFromProps(props) {\n // calculate individual node expansion if necessary\n var expanded = props.shouldExpandNode && !props.isCircular ? props.shouldExpandNode(props.keyPath, props.data, props.level) : false;\n return {\n expanded: expanded\n };\n}\n\nvar JSONNestedNode = function (_React$Component) {\n (0, _inherits3['default'])(JSONNestedNode, _React$Component);\n\n function JSONNestedNode(props) {\n (0, _classCallCheck3['default'])(this, JSONNestedNode);\n\n var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));\n\n _this.handleClick = function () {\n if (_this.props.expandable) {\n _this.setState({ expanded: !_this.state.expanded });\n }\n };\n\n _this.state = getStateFromProps(props);\n return _this;\n }\n\n JSONNestedNode.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var nextState = getStateFromProps(nextProps);\n if (getStateFromProps(this.props).expanded !== nextState.expanded) {\n this.setState(nextState);\n }\n };\n\n JSONNestedNode.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps, nextState) {\n var _this2 = this;\n\n return !!(0, _keys2['default'])(nextProps).find(function (key) {\n return key !== 'circularCache' && (key === 'keyPath' ? nextProps[key].join('/') !== _this2.props[key].join('/') : nextProps[key] !== _this2.props[key]);\n }) || nextState.expanded !== this.state.expanded;\n };\n\n JSONNestedNode.prototype.render = function render() {\n var _props = this.props,\n getItemString = _props.getItemString,\n nodeTypeIndicator = _props.nodeTypeIndicator,\n nodeType = _props.nodeType,\n data = _props.data,\n hideRoot = _props.hideRoot,\n createItemString = _props.createItemString,\n styling = _props.styling,\n collectionLimit = _props.collectionLimit,\n keyPath = _props.keyPath,\n labelRenderer = _props.labelRenderer,\n expandable = _props.expandable;\n var expanded = this.state.expanded;\n\n var renderedChildren = expanded || hideRoot && this.props.level === 0 ? renderChildNodes((0, _extends3['default'])({}, this.props, { level: this.props.level + 1 })) : null;\n\n var itemType = _react2['default'].createElement(\n 'span',\n styling('nestedNodeItemType', expanded),\n nodeTypeIndicator\n );\n var renderedItemString = getItemString(nodeType, data, itemType, createItemString(data, collectionLimit));\n var stylingArgs = [keyPath, nodeType, expanded, expandable];\n\n return hideRoot ? _react2['default'].createElement(\n 'li',\n styling.apply(undefined, ['rootNode'].concat(stylingArgs)),\n _react2['default'].createElement(\n 'ul',\n styling.apply(undefined, ['rootNodeChildren'].concat(stylingArgs)),\n renderedChildren\n )\n ) : _react2['default'].createElement(\n 'li',\n styling.apply(undefined, ['nestedNode'].concat(stylingArgs)),\n expandable && _react2['default'].createElement(_JSONArrow2['default'], {\n styling: styling,\n nodeType: nodeType,\n expanded: expanded,\n onClick: this.handleClick\n }),\n _react2['default'].createElement(\n 'label',\n (0, _extends3['default'])({}, styling.apply(undefined, [['label', 'nestedNodeLabel']].concat(stylingArgs)), {\n onClick: this.handleClick\n }),\n labelRenderer.apply(undefined, stylingArgs)\n ),\n _react2['default'].createElement(\n 'span',\n (0, _extends3['default'])({}, styling.apply(undefined, ['nestedNodeItemString'].concat(stylingArgs)), {\n onClick: this.handleClick\n }),\n renderedItemString\n ),\n _react2['default'].createElement(\n 'ul',\n styling.apply(undefined, ['nestedNodeChildren'].concat(stylingArgs)),\n renderedChildren\n )\n );\n };\n\n return JSONNestedNode;\n}(_react2['default'].Component);\n\nJSONNestedNode.propTypes = {\n getItemString: _propTypes2['default'].func.isRequired,\n nodeTypeIndicator: _propTypes2['default'].any,\n nodeType: _propTypes2['default'].string.isRequired,\n data: _propTypes2['default'].any,\n hideRoot: _propTypes2['default'].bool.isRequired,\n createItemString: _propTypes2['default'].func.isRequired,\n styling: _propTypes2['default'].func.isRequired,\n collectionLimit: _propTypes2['default'].number,\n keyPath: _propTypes2['default'].arrayOf(_propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number])).isRequired,\n labelRenderer: _propTypes2['default'].func.isRequired,\n shouldExpandNode: _propTypes2['default'].func,\n level: _propTypes2['default'].number.isRequired,\n sortObjectKeys: _propTypes2['default'].oneOfType([_propTypes2['default'].func, _propTypes2['default'].bool]),\n isCircular: _propTypes2['default'].bool,\n expandable: _propTypes2['default'].bool\n};\nJSONNestedNode.defaultProps = {\n data: [],\n circularCache: [],\n level: 0,\n expandable: true\n};\nexports['default'] = JSONNestedNode;","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');\n\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\nvar _getOwnPropertyNames = require('babel-runtime/core-js/object/get-own-property-names');\n\nvar _getOwnPropertyNames2 = _interopRequireDefault(_getOwnPropertyNames);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _JSONNestedNode = require('./JSONNestedNode');\n\nvar _JSONNestedNode2 = _interopRequireDefault(_JSONNestedNode);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Returns the \"n Items\" string for this node,\n// generating and caching it if it hasn't been created yet.\nfunction createItemString(data) {\n var len = (0, _getOwnPropertyNames2['default'])(data).length;\n return len + ' ' + (len !== 1 ? 'keys' : 'key');\n}\n\n// Configures <JSONNestedNode> to render an Object\nvar JSONObjectNode = function JSONObjectNode(_ref) {\n var data = _ref.data,\n props = (0, _objectWithoutProperties3['default'])(_ref, ['data']);\n return _react2['default'].createElement(_JSONNestedNode2['default'], (0, _extends3['default'])({}, props, {\n data: data,\n nodeType: 'Object',\n nodeTypeIndicator: props.nodeType === 'Error' ? 'Error()' : '{}',\n createItemString: createItemString,\n expandable: (0, _getOwnPropertyNames2['default'])(data).length > 0\n }));\n};\n\nJSONObjectNode.propTypes = {\n data: _propTypes2['default'].object,\n nodeType: _propTypes2['default'].string\n};\n\nexports['default'] = JSONObjectNode;","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');\n\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _JSONNestedNode = require('./JSONNestedNode');\n\nvar _JSONNestedNode2 = _interopRequireDefault(_JSONNestedNode);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Returns the \"n Items\" string for this node,\n// generating and caching it if it hasn't been created yet.\nfunction createItemString(data) {\n return data.length + ' ' + (data.length !== 1 ? 'items' : 'item');\n}\n\n// Configures <JSONNestedNode> to render an Array\nvar JSONArrayNode = function JSONArrayNode(_ref) {\n var data = _ref.data,\n props = (0, _objectWithoutProperties3['default'])(_ref, ['data']);\n return _react2['default'].createElement(_JSONNestedNode2['default'], (0, _extends3['default'])({}, props, {\n data: data,\n nodeType: 'Array',\n nodeTypeIndicator: '[]',\n createItemString: createItemString,\n expandable: data.length > 0\n }));\n};\n\nJSONArrayNode.propTypes = {\n data: _propTypes2['default'].array\n};\n\nexports['default'] = JSONArrayNode;","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","require('../../modules/es6.number.is-safe-integer');\nmodule.exports = require('../../modules/_core').Number.isSafeInteger;\n","module.exports = { \"default\": require(\"core-js/library/fn/number/is-safe-integer\"), __esModule: true };","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');\n\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\nvar _getIterator2 = require('babel-runtime/core-js/get-iterator');\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _isSafeInteger = require('babel-runtime/core-js/number/is-safe-integer');\n\nvar _isSafeInteger2 = _interopRequireDefault(_isSafeInteger);\n\nexports['default'] = JSONIterableNode;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _JSONNestedNode = require('./JSONNestedNode');\n\nvar _JSONNestedNode2 = _interopRequireDefault(_JSONNestedNode);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Returns the \"n Items\" string for this node,\n// generating and caching it if it hasn't been created yet.\nfunction createItemString(data, limit) {\n var count = 0;\n var hasMore = false;\n if ((0, _isSafeInteger2['default'])(data.size)) {\n count = data.size;\n } else {\n // eslint-disable-next-line no-unused-vars\n for (var _iterator = data, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3['default'])(_iterator);;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var entry = _ref;\n\n if (limit && count + 1 > limit) {\n hasMore = true;\n break;\n }\n count += 1;\n }\n }\n return '' + (hasMore ? '>' : '') + count + ' ' + (count !== 1 ? 'entries' : 'entry');\n}\n\n// Configures <JSONNestedNode> to render an iterable\nfunction JSONIterableNode(_ref2) {\n var props = (0, _objectWithoutProperties3['default'])(_ref2, []);\n\n return _react2['default'].createElement(_JSONNestedNode2['default'], (0, _extends3['default'])({}, props, {\n nodeType: 'Iterable',\n nodeTypeIndicator: '()',\n createItemString: createItemString\n }));\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Renders simple values (eg. strings, numbers, booleans, etc)\n */\n\nvar JSONValueNode = function JSONValueNode(_ref) {\n var nodeType = _ref.nodeType,\n styling = _ref.styling,\n labelRenderer = _ref.labelRenderer,\n keyPath = _ref.keyPath,\n valueRenderer = _ref.valueRenderer,\n value = _ref.value,\n valueGetter = _ref.valueGetter;\n return _react2['default'].createElement(\n 'li',\n styling('value', nodeType, keyPath),\n _react2['default'].createElement(\n 'label',\n styling(['label', 'valueLabel'], nodeType, keyPath),\n labelRenderer(keyPath, nodeType, false, false)\n ),\n _react2['default'].createElement(\n 'span',\n styling('valueText', nodeType, keyPath),\n valueRenderer.apply(undefined, [valueGetter(value), value].concat(keyPath))\n )\n );\n};\n\nJSONValueNode.propTypes = {\n nodeType: _propTypes2['default'].string.isRequired,\n styling: _propTypes2['default'].func.isRequired,\n labelRenderer: _propTypes2['default'].func.isRequired,\n keyPath: _propTypes2['default'].arrayOf(_propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number])).isRequired,\n valueRenderer: _propTypes2['default'].func.isRequired,\n value: _propTypes2['default'].any,\n valueGetter: _propTypes2['default'].func\n};\n\nJSONValueNode.defaultProps = {\n valueGetter: function valueGetter(value) {\n return value;\n }\n};\n\nexports['default'] = JSONValueNode;","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');\n\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _objType = require('./objType');\n\nvar _objType2 = _interopRequireDefault(_objType);\n\nvar _JSONObjectNode = require('./JSONObjectNode');\n\nvar _JSONObjectNode2 = _interopRequireDefault(_JSONObjectNode);\n\nvar _JSONArrayNode = require('./JSONArrayNode');\n\nvar _JSONArrayNode2 = _interopRequireDefault(_JSONArrayNode);\n\nvar _JSONIterableNode = require('./JSONIterableNode');\n\nvar _JSONIterableNode2 = _interopRequireDefault(_JSONIterableNode);\n\nvar _JSONValueNode = require('./JSONValueNode');\n\nvar _JSONValueNode2 = _interopRequireDefault(_JSONValueNode);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar JSONNode = function JSONNode(_ref) {\n var getItemString = _ref.getItemString,\n keyPath = _ref.keyPath,\n labelRenderer = _ref.labelRenderer,\n styling = _ref.styling,\n value = _ref.value,\n valueRenderer = _ref.valueRenderer,\n isCustomNode = _ref.isCustomNode,\n rest = (0, _objectWithoutProperties3['default'])(_ref, ['getItemString', 'keyPath', 'labelRenderer', 'styling', 'value', 'valueRenderer', 'isCustomNode']);\n\n var nodeType = isCustomNode(value) ? 'Custom' : (0, _objType2['default'])(value);\n\n var simpleNodeProps = {\n getItemString: getItemString,\n key: keyPath[0],\n keyPath: keyPath,\n labelRenderer: labelRenderer,\n nodeType: nodeType,\n styling: styling,\n value: value,\n valueRenderer: valueRenderer\n };\n\n var nestedNodeProps = (0, _extends3['default'])({}, rest, simpleNodeProps, {\n data: value,\n isCustomNode: isCustomNode\n });\n\n switch (nodeType) {\n case 'Object':\n case 'Error':\n case 'WeakMap':\n case 'WeakSet':\n return _react2['default'].createElement(_JSONObjectNode2['default'], nestedNodeProps);\n case 'Array':\n return _react2['default'].createElement(_JSONArrayNode2['default'], nestedNodeProps);\n case 'Iterable':\n case 'Map':\n case 'Set':\n return _react2['default'].createElement(_JSONIterableNode2['default'], nestedNodeProps);\n case 'String':\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) {\n return '\"' + raw + '\"';\n } }));\n case 'Number':\n return _react2['default'].createElement(_JSONValueNode2['default'], simpleNodeProps);\n case 'Boolean':\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, {\n valueGetter: function valueGetter(raw) {\n return raw ? 'true' : 'false';\n }\n }));\n case 'Date':\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, {\n valueGetter: function valueGetter(raw) {\n return raw.toISOString();\n }\n }));\n case 'Null':\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter() {\n return 'null';\n } }));\n case 'Undefined':\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter() {\n return 'undefined';\n } }));\n case 'Function':\n case 'Symbol':\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, {\n valueGetter: function valueGetter(raw) {\n return raw.toString();\n }\n }));\n case 'Custom':\n return _react2['default'].createElement(_JSONValueNode2['default'], simpleNodeProps);\n default:\n return _react2['default'].createElement(_JSONValueNode2['default'], (0, _extends3['default'])({}, simpleNodeProps, { valueGetter: function valueGetter(raw) {\n return '<' + nodeType + '>';\n } }));\n }\n};\n\nJSONNode.propTypes = {\n getItemString: _propTypes2['default'].func.isRequired,\n keyPath: _propTypes2['default'].arrayOf(_propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number])).isRequired,\n labelRenderer: _propTypes2['default'].func.isRequired,\n styling: _propTypes2['default'].func.isRequired,\n value: _propTypes2['default'].any,\n valueRenderer: _propTypes2['default'].func.isRequired,\n isCustomNode: _propTypes2['default'].func.isRequired\n};\n\nexports['default'] = JSONNode;","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function (it) {\n var O = Object(it);\n return O[ITERATOR] !== undefined\n || '@@iterator' in O\n // eslint-disable-next-line no-prototype-builtins\n || Iterators.hasOwnProperty(classof(O));\n};\n","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if ((0, _isIterable3.default)(Object(arr))) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as the internal argument placeholder. */\nvar PLACEHOLDER = '__lodash_placeholder__';\n\n/** Used to compose bitmasks for function metadata. */\nvar BIND_FLAG = 1,\n BIND_KEY_FLAG = 2,\n CURRY_BOUND_FLAG = 4,\n CURRY_FLAG = 8,\n CURRY_RIGHT_FLAG = 16,\n PARTIAL_FLAG = 32,\n PARTIAL_RIGHT_FLAG = 64,\n ARY_FLAG = 128,\n REARG_FLAG = 256,\n FLIP_FLAG = 512;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** Used to associate wrap methods with their bit flags. */\nvar wrapFlags = [\n ['ary', ARY_FLAG],\n ['bind', BIND_FLAG],\n ['bindKey', BIND_KEY_FLAG],\n ['curry', CURRY_FLAG],\n ['curryRight', CURRY_RIGHT_FLAG],\n ['flip', FLIP_FLAG],\n ['partial', PARTIAL_FLAG],\n ['partialRight', PARTIAL_RIGHT_FLAG],\n ['rearg', REARG_FLAG]\n];\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to match wrap detail comments. */\nvar reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\nfunction countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n result++;\n }\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\nfunction replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/* Used to set `toString` methods. */\nvar defineProperty = (function() {\n var func = getNative(Object, 'defineProperty'),\n name = getNative.name;\n\n return (name && name.length > 2) ? func : undefined;\n}());\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n}\n\n/**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\nfunction composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createBind(func, bitmask, thisArg) {\n var isBind = bitmask & BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n}\n\n/**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & ARY_FLAG,\n isBind = bitmask & BIND_FLAG,\n isBindKey = bitmask & BIND_KEY_FLAG,\n isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),\n isFlip = bitmask & FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n}\n\n/**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);\n\n if (!(bitmask & CURRY_BOUND_FLAG)) {\n bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);\n }\n\n var result = wrapFunc(func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity);\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n}\n\n/**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * The bitmask may be composed of the following flags:\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\nfunction createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] == null\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {\n bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n return setWrapToString(result, func, bitmask);\n}\n\n/**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\nfunction getHolder(func) {\n var object = func;\n return object.placeholder;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\nfunction getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n}\n\n/**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\nfunction insertWrapDetails(source, details) {\n var length = details.length,\n lastIndex = length - 1;\n\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\nfunction reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n}\n\n/**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\nvar setWrapToString = !defineProperty ? identity : function(wrapper, reference, bitmask) {\n var source = (reference + '');\n return defineProperty(wrapper, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)))\n });\n};\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\nfunction updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n}\n\n/**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\nfunction curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n// Assign default placeholders.\ncurry.placeholder = {};\n\nmodule.exports = curry;\n","export default {\n scheme: 'threezerotwofour',\n author: 'jan t. sott (http://github.com/idleberg)',\n base00: '#090300',\n base01: '#3a3432',\n base02: '#4a4543',\n base03: '#5c5855',\n base04: '#807d7c',\n base05: '#a5a2a2',\n base06: '#d6d5d4',\n base07: '#f7f7f7',\n base08: '#db2d20',\n base09: '#e8bbd0',\n base0A: '#fded02',\n base0B: '#01a252',\n base0C: '#b5e4f4',\n base0D: '#01a0e4',\n base0E: '#a16a94',\n base0F: '#cdab53'\n};\n","export default {\n scheme: 'apathy',\n author: 'jannik siebert (https://github.com/janniks)',\n base00: '#031A16',\n base01: '#0B342D',\n base02: '#184E45',\n base03: '#2B685E',\n base04: '#5F9C92',\n base05: '#81B5AC',\n base06: '#A7CEC8',\n base07: '#D2E7E4',\n base08: '#3E9688',\n base09: '#3E7996',\n base0A: '#3E4C96',\n base0B: '#883E96',\n base0C: '#963E4C',\n base0D: '#96883E',\n base0E: '#4C963E',\n base0F: '#3E965B'\n};\n","export default {\n scheme: 'ashes',\n author: 'jannik siebert (https://github.com/janniks)',\n base00: '#1C2023',\n base01: '#393F45',\n base02: '#565E65',\n base03: '#747C84',\n base04: '#ADB3BA',\n base05: '#C7CCD1',\n base06: '#DFE2E5',\n base07: '#F3F4F5',\n base08: '#C7AE95',\n base09: '#C7C795',\n base0A: '#AEC795',\n base0B: '#95C7AE',\n base0C: '#95AEC7',\n base0D: '#AE95C7',\n base0E: '#C795AE',\n base0F: '#C79595'\n};\n","export default {\n scheme: 'atelier dune',\n author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune)',\n base00: '#20201d',\n base01: '#292824',\n base02: '#6e6b5e',\n base03: '#7d7a68',\n base04: '#999580',\n base05: '#a6a28c',\n base06: '#e8e4cf',\n base07: '#fefbec',\n base08: '#d73737',\n base09: '#b65611',\n base0A: '#cfb017',\n base0B: '#60ac39',\n base0C: '#1fad83',\n base0D: '#6684e1',\n base0E: '#b854d4',\n base0F: '#d43552'\n};\n","export default {\n scheme: 'atelier forest',\n author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest)',\n base00: '#1b1918',\n base01: '#2c2421',\n base02: '#68615e',\n base03: '#766e6b',\n base04: '#9c9491',\n base05: '#a8a19f',\n base06: '#e6e2e0',\n base07: '#f1efee',\n base08: '#f22c40',\n base09: '#df5320',\n base0A: '#d5911a',\n base0B: '#5ab738',\n base0C: '#00ad9c',\n base0D: '#407ee7',\n base0E: '#6666ea',\n base0F: '#c33ff3'\n};\n","export default {\n scheme: 'atelier heath',\n author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath)',\n base00: '#1b181b',\n base01: '#292329',\n base02: '#695d69',\n base03: '#776977',\n base04: '#9e8f9e',\n base05: '#ab9bab',\n base06: '#d8cad8',\n base07: '#f7f3f7',\n base08: '#ca402b',\n base09: '#a65926',\n base0A: '#bb8a35',\n base0B: '#379a37',\n base0C: '#159393',\n base0D: '#516aec',\n base0E: '#7b59c0',\n base0F: '#cc33cc'\n};\n","export default {\n scheme: 'atelier lakeside',\n author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside/)',\n base00: '#161b1d',\n base01: '#1f292e',\n base02: '#516d7b',\n base03: '#5a7b8c',\n base04: '#7195a8',\n base05: '#7ea2b4',\n base06: '#c1e4f6',\n base07: '#ebf8ff',\n base08: '#d22d72',\n base09: '#935c25',\n base0A: '#8a8a0f',\n base0B: '#568c3b',\n base0C: '#2d8f6f',\n base0D: '#257fad',\n base0E: '#5d5db1',\n base0F: '#b72dd2'\n};\n","export default {\n scheme: 'atelier seaside',\n author: 'bram de haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside/)',\n base00: '#131513',\n base01: '#242924',\n base02: '#5e6e5e',\n base03: '#687d68',\n base04: '#809980',\n base05: '#8ca68c',\n base06: '#cfe8cf',\n base07: '#f0fff0',\n base08: '#e6193c',\n base09: '#87711d',\n base0A: '#c3c322',\n base0B: '#29a329',\n base0C: '#1999b3',\n base0D: '#3d62f5',\n base0E: '#ad2bee',\n base0F: '#e619c3'\n};\n","export default {\n scheme: 'bespin',\n author: 'jan t. sott',\n base00: '#28211c',\n base01: '#36312e',\n base02: '#5e5d5c',\n base03: '#666666',\n base04: '#797977',\n base05: '#8a8986',\n base06: '#9d9b97',\n base07: '#baae9e',\n base08: '#cf6a4c',\n base09: '#cf7d34',\n base0A: '#f9ee98',\n base0B: '#54be0d',\n base0C: '#afc4db',\n base0D: '#5ea6ea',\n base0E: '#9b859d',\n base0F: '#937121'\n};\n","export default {\n scheme: 'brewer',\n author: 'timothée poisot (http://github.com/tpoisot)',\n base00: '#0c0d0e',\n base01: '#2e2f30',\n base02: '#515253',\n base03: '#737475',\n base04: '#959697',\n base05: '#b7b8b9',\n base06: '#dadbdc',\n base07: '#fcfdfe',\n base08: '#e31a1c',\n base09: '#e6550d',\n base0A: '#dca060',\n base0B: '#31a354',\n base0C: '#80b1d3',\n base0D: '#3182bd',\n base0E: '#756bb1',\n base0F: '#b15928'\n};\n","export default {\n scheme: 'bright',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#000000',\n base01: '#303030',\n base02: '#505050',\n base03: '#b0b0b0',\n base04: '#d0d0d0',\n base05: '#e0e0e0',\n base06: '#f5f5f5',\n base07: '#ffffff',\n base08: '#fb0120',\n base09: '#fc6d24',\n base0A: '#fda331',\n base0B: '#a1c659',\n base0C: '#76c7b7',\n base0D: '#6fb3d2',\n base0E: '#d381c3',\n base0F: '#be643c'\n};\n","export default {\n scheme: 'chalk',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#151515',\n base01: '#202020',\n base02: '#303030',\n base03: '#505050',\n base04: '#b0b0b0',\n base05: '#d0d0d0',\n base06: '#e0e0e0',\n base07: '#f5f5f5',\n base08: '#fb9fb1',\n base09: '#eda987',\n base0A: '#ddb26f',\n base0B: '#acc267',\n base0C: '#12cfc0',\n base0D: '#6fc2ef',\n base0E: '#e1a3ee',\n base0F: '#deaf8f'\n};\n","export default {\n scheme: 'codeschool',\n author: 'brettof86',\n base00: '#232c31',\n base01: '#1c3657',\n base02: '#2a343a',\n base03: '#3f4944',\n base04: '#84898c',\n base05: '#9ea7a6',\n base06: '#a7cfa3',\n base07: '#b5d8f6',\n base08: '#2a5491',\n base09: '#43820d',\n base0A: '#a03b1e',\n base0B: '#237986',\n base0C: '#b02f30',\n base0D: '#484d79',\n base0E: '#c59820',\n base0F: '#c98344'\n};\n","export default {\n scheme: 'colors',\n author: 'mrmrs (http://clrs.cc)',\n base00: '#111111',\n base01: '#333333',\n base02: '#555555',\n base03: '#777777',\n base04: '#999999',\n base05: '#bbbbbb',\n base06: '#dddddd',\n base07: '#ffffff',\n base08: '#ff4136',\n base09: '#ff851b',\n base0A: '#ffdc00',\n base0B: '#2ecc40',\n base0C: '#7fdbff',\n base0D: '#0074d9',\n base0E: '#b10dc9',\n base0F: '#85144b'\n};\n","export default {\n scheme: 'default',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#181818',\n base01: '#282828',\n base02: '#383838',\n base03: '#585858',\n base04: '#b8b8b8',\n base05: '#d8d8d8',\n base06: '#e8e8e8',\n base07: '#f8f8f8',\n base08: '#ab4642',\n base09: '#dc9656',\n base0A: '#f7ca88',\n base0B: '#a1b56c',\n base0C: '#86c1b9',\n base0D: '#7cafc2',\n base0E: '#ba8baf',\n base0F: '#a16946'\n};\n","export default {\n scheme: 'eighties',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#2d2d2d',\n base01: '#393939',\n base02: '#515151',\n base03: '#747369',\n base04: '#a09f93',\n base05: '#d3d0c8',\n base06: '#e8e6df',\n base07: '#f2f0ec',\n base08: '#f2777a',\n base09: '#f99157',\n base0A: '#ffcc66',\n base0B: '#99cc99',\n base0C: '#66cccc',\n base0D: '#6699cc',\n base0E: '#cc99cc',\n base0F: '#d27b53'\n};\n","export default {\n scheme: 'embers',\n author: 'jannik siebert (https://github.com/janniks)',\n base00: '#16130F',\n base01: '#2C2620',\n base02: '#433B32',\n base03: '#5A5047',\n base04: '#8A8075',\n base05: '#A39A90',\n base06: '#BEB6AE',\n base07: '#DBD6D1',\n base08: '#826D57',\n base09: '#828257',\n base0A: '#6D8257',\n base0B: '#57826D',\n base0C: '#576D82',\n base0D: '#6D5782',\n base0E: '#82576D',\n base0F: '#825757'\n};\n","export default {\n scheme: 'flat',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#2C3E50',\n base01: '#34495E',\n base02: '#7F8C8D',\n base03: '#95A5A6',\n base04: '#BDC3C7',\n base05: '#e0e0e0',\n base06: '#f5f5f5',\n base07: '#ECF0F1',\n base08: '#E74C3C',\n base09: '#E67E22',\n base0A: '#F1C40F',\n base0B: '#2ECC71',\n base0C: '#1ABC9C',\n base0D: '#3498DB',\n base0E: '#9B59B6',\n base0F: '#be643c'\n};\n","export default {\n scheme: 'google',\n author: 'seth wright (http://sethawright.com)',\n base00: '#1d1f21',\n base01: '#282a2e',\n base02: '#373b41',\n base03: '#969896',\n base04: '#b4b7b4',\n base05: '#c5c8c6',\n base06: '#e0e0e0',\n base07: '#ffffff',\n base08: '#CC342B',\n base09: '#F96A38',\n base0A: '#FBA922',\n base0B: '#198844',\n base0C: '#3971ED',\n base0D: '#3971ED',\n base0E: '#A36AC7',\n base0F: '#3971ED'\n};\n","export default {\n scheme: 'grayscale',\n author: 'alexandre gavioli (https://github.com/alexx2/)',\n base00: '#101010',\n base01: '#252525',\n base02: '#464646',\n base03: '#525252',\n base04: '#ababab',\n base05: '#b9b9b9',\n base06: '#e3e3e3',\n base07: '#f7f7f7',\n base08: '#7c7c7c',\n base09: '#999999',\n base0A: '#a0a0a0',\n base0B: '#8e8e8e',\n base0C: '#868686',\n base0D: '#686868',\n base0E: '#747474',\n base0F: '#5e5e5e'\n};\n","export default {\n scheme: 'green screen',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#001100',\n base01: '#003300',\n base02: '#005500',\n base03: '#007700',\n base04: '#009900',\n base05: '#00bb00',\n base06: '#00dd00',\n base07: '#00ff00',\n base08: '#007700',\n base09: '#009900',\n base0A: '#007700',\n base0B: '#00bb00',\n base0C: '#005500',\n base0D: '#009900',\n base0E: '#00bb00',\n base0F: '#005500'\n};\n","export default {\n scheme: 'harmonic16',\n author: 'jannik siebert (https://github.com/janniks)',\n base00: '#0b1c2c',\n base01: '#223b54',\n base02: '#405c79',\n base03: '#627e99',\n base04: '#aabcce',\n base05: '#cbd6e2',\n base06: '#e5ebf1',\n base07: '#f7f9fb',\n base08: '#bf8b56',\n base09: '#bfbf56',\n base0A: '#8bbf56',\n base0B: '#56bf8b',\n base0C: '#568bbf',\n base0D: '#8b56bf',\n base0E: '#bf568b',\n base0F: '#bf5656'\n};\n","export default {\n scheme: 'hopscotch',\n author: 'jan t. sott',\n base00: '#322931',\n base01: '#433b42',\n base02: '#5c545b',\n base03: '#797379',\n base04: '#989498',\n base05: '#b9b5b8',\n base06: '#d5d3d5',\n base07: '#ffffff',\n base08: '#dd464c',\n base09: '#fd8b19',\n base0A: '#fdcc59',\n base0B: '#8fc13e',\n base0C: '#149b93',\n base0D: '#1290bf',\n base0E: '#c85e7c',\n base0F: '#b33508'\n};\n","export default {\n scheme: 'isotope',\n author: 'jan t. sott',\n base00: '#000000',\n base01: '#404040',\n base02: '#606060',\n base03: '#808080',\n base04: '#c0c0c0',\n base05: '#d0d0d0',\n base06: '#e0e0e0',\n base07: '#ffffff',\n base08: '#ff0000',\n base09: '#ff9900',\n base0A: '#ff0099',\n base0B: '#33ff00',\n base0C: '#00ffff',\n base0D: '#0066ff',\n base0E: '#cc00ff',\n base0F: '#3300ff'\n};\n","export default {\n scheme: 'marrakesh',\n author: 'alexandre gavioli (http://github.com/alexx2/)',\n base00: '#201602',\n base01: '#302e00',\n base02: '#5f5b17',\n base03: '#6c6823',\n base04: '#86813b',\n base05: '#948e48',\n base06: '#ccc37a',\n base07: '#faf0a5',\n base08: '#c35359',\n base09: '#b36144',\n base0A: '#a88339',\n base0B: '#18974e',\n base0C: '#75a738',\n base0D: '#477ca1',\n base0E: '#8868b3',\n base0F: '#b3588e'\n};\n","export default {\n scheme: 'mocha',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#3B3228',\n base01: '#534636',\n base02: '#645240',\n base03: '#7e705a',\n base04: '#b8afad',\n base05: '#d0c8c6',\n base06: '#e9e1dd',\n base07: '#f5eeeb',\n base08: '#cb6077',\n base09: '#d28b71',\n base0A: '#f4bc87',\n base0B: '#beb55b',\n base0C: '#7bbda4',\n base0D: '#8ab3b5',\n base0E: '#a89bb9',\n base0F: '#bb9584'\n};\n","export default {\n scheme: 'monokai',\n author: 'wimer hazenberg (http://www.monokai.nl)',\n base00: '#272822',\n base01: '#383830',\n base02: '#49483e',\n base03: '#75715e',\n base04: '#a59f85',\n base05: '#f8f8f2',\n base06: '#f5f4f1',\n base07: '#f9f8f5',\n base08: '#f92672',\n base09: '#fd971f',\n base0A: '#f4bf75',\n base0B: '#a6e22e',\n base0C: '#a1efe4',\n base0D: '#66d9ef',\n base0E: '#ae81ff',\n base0F: '#cc6633'\n};\n","export default {\n scheme: 'ocean',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#2b303b',\n base01: '#343d46',\n base02: '#4f5b66',\n base03: '#65737e',\n base04: '#a7adba',\n base05: '#c0c5ce',\n base06: '#dfe1e8',\n base07: '#eff1f5',\n base08: '#bf616a',\n base09: '#d08770',\n base0A: '#ebcb8b',\n base0B: '#a3be8c',\n base0C: '#96b5b4',\n base0D: '#8fa1b3',\n base0E: '#b48ead',\n base0F: '#ab7967'\n};\n","export default {\n scheme: 'paraiso',\n author: 'jan t. sott',\n base00: '#2f1e2e',\n base01: '#41323f',\n base02: '#4f424c',\n base03: '#776e71',\n base04: '#8d8687',\n base05: '#a39e9b',\n base06: '#b9b6b0',\n base07: '#e7e9db',\n base08: '#ef6155',\n base09: '#f99b15',\n base0A: '#fec418',\n base0B: '#48b685',\n base0C: '#5bc4bf',\n base0D: '#06b6ef',\n base0E: '#815ba4',\n base0F: '#e96ba8'\n};\n","export default {\n scheme: 'pop',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#000000',\n base01: '#202020',\n base02: '#303030',\n base03: '#505050',\n base04: '#b0b0b0',\n base05: '#d0d0d0',\n base06: '#e0e0e0',\n base07: '#ffffff',\n base08: '#eb008a',\n base09: '#f29333',\n base0A: '#f8ca12',\n base0B: '#37b349',\n base0C: '#00aabb',\n base0D: '#0e5a94',\n base0E: '#b31e8d',\n base0F: '#7a2d00'\n};\n","export default {\n scheme: 'railscasts',\n author: 'ryan bates (http://railscasts.com)',\n base00: '#2b2b2b',\n base01: '#272935',\n base02: '#3a4055',\n base03: '#5a647e',\n base04: '#d4cfc9',\n base05: '#e6e1dc',\n base06: '#f4f1ed',\n base07: '#f9f7f3',\n base08: '#da4939',\n base09: '#cc7833',\n base0A: '#ffc66d',\n base0B: '#a5c261',\n base0C: '#519f50',\n base0D: '#6d9cbe',\n base0E: '#b6b3eb',\n base0F: '#bc9458'\n};\n","export default {\n scheme: 'shapeshifter',\n author: 'tyler benziger (http://tybenz.com)',\n base00: '#000000',\n base01: '#040404',\n base02: '#102015',\n base03: '#343434',\n base04: '#555555',\n base05: '#ababab',\n base06: '#e0e0e0',\n base07: '#f9f9f9',\n base08: '#e92f2f',\n base09: '#e09448',\n base0A: '#dddd13',\n base0B: '#0ed839',\n base0C: '#23edda',\n base0D: '#3b48e3',\n base0E: '#f996e2',\n base0F: '#69542d'\n};\n","export default {\n scheme: 'solarized',\n author: 'ethan schoonover (http://ethanschoonover.com/solarized)',\n base00: '#002b36',\n base01: '#073642',\n base02: '#586e75',\n base03: '#657b83',\n base04: '#839496',\n base05: '#93a1a1',\n base06: '#eee8d5',\n base07: '#fdf6e3',\n base08: '#dc322f',\n base09: '#cb4b16',\n base0A: '#b58900',\n base0B: '#859900',\n base0C: '#2aa198',\n base0D: '#268bd2',\n base0E: '#6c71c4',\n base0F: '#d33682'\n};\n","export default {\n scheme: 'summerfruit',\n author: 'christopher corley (http://cscorley.github.io/)',\n base00: '#151515',\n base01: '#202020',\n base02: '#303030',\n base03: '#505050',\n base04: '#B0B0B0',\n base05: '#D0D0D0',\n base06: '#E0E0E0',\n base07: '#FFFFFF',\n base08: '#FF0086',\n base09: '#FD8900',\n base0A: '#ABA800',\n base0B: '#00C918',\n base0C: '#1faaaa',\n base0D: '#3777E6',\n base0E: '#AD00A1',\n base0F: '#cc6633'\n};\n","export default {\n scheme: 'tomorrow',\n author: 'chris kempson (http://chriskempson.com)',\n base00: '#1d1f21',\n base01: '#282a2e',\n base02: '#373b41',\n base03: '#969896',\n base04: '#b4b7b4',\n base05: '#c5c8c6',\n base06: '#e0e0e0',\n base07: '#ffffff',\n base08: '#cc6666',\n base09: '#de935f',\n base0A: '#f0c674',\n base0B: '#b5bd68',\n base0C: '#8abeb7',\n base0D: '#81a2be',\n base0E: '#b294bb',\n base0F: '#a3685a'\n};\n","export default {\n scheme: 'london tube',\n author: 'jan t. sott',\n base00: '#231f20',\n base01: '#1c3f95',\n base02: '#5a5758',\n base03: '#737171',\n base04: '#959ca1',\n base05: '#d9d8d8',\n base06: '#e7e7e8',\n base07: '#ffffff',\n base08: '#ee2e24',\n base09: '#f386a1',\n base0A: '#ffd204',\n base0B: '#00853e',\n base0C: '#85cebc',\n base0D: '#009ddc',\n base0E: '#98005d',\n base0F: '#b06110'\n};\n","export default {\n scheme: 'twilight',\n author: 'david hart (http://hart-dev.com)',\n base00: '#1e1e1e',\n base01: '#323537',\n base02: '#464b50',\n base03: '#5f5a60',\n base04: '#838184',\n base05: '#a7a7a7',\n base06: '#c3c3c3',\n base07: '#ffffff',\n base08: '#cf6a4c',\n base09: '#cda869',\n base0A: '#f9ee98',\n base0B: '#8f9d6a',\n base0C: '#afc4db',\n base0D: '#7587a6',\n base0E: '#9b859d',\n base0F: '#9b703f'\n};\n","function clamp(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nmodule.exports = clamp;","var clamp = require(\"../util/clamp\");\n\nfunction componentToHex(c) {\n var value = Math.round(clamp(c, 0, 255));\n var hex = value.toString(16);\n\n return hex.length == 1 ? \"0\" + hex : hex;\n}\n\nfunction rgb2hex(rgb) {\n var alpha = rgb.length === 4 ? componentToHex(rgb[3] * 255) : \"\";\n\n return \"#\" + componentToHex(rgb[0]) + componentToHex(rgb[1]) + componentToHex(rgb[2]) + alpha;\n}\n\nmodule.exports = rgb2hex;","var component = /-?\\d+(\\.\\d+)?%?/g;\nfunction extractComponents(color) {\n return color.match(component);\n}\n\nmodule.exports = extractComponents;","var extractComponents = require(\"./extractComponents\");\nvar clamp = require(\"../util/clamp\");\n\nfunction parseHslComponent(component, i) {\n component = parseFloat(component);\n\n switch(i) {\n case 0:\n return clamp(component, 0, 360);\n case 1:\n case 2:\n return clamp(component, 0, 100);\n case 3:\n return clamp(component, 0, 1);\n }\n}\n\nfunction hsl(color) {\n return extractComponents(color).map(parseHslComponent);\n}\n\nmodule.exports = hsl;","function expand(hex) {\n var result = \"#\";\n\n for (var i = 1; i < hex.length; i++) {\n var val = hex.charAt(i);\n result += val + val;\n }\n\n return result;\n}\n\nfunction hex(hex) {\n // #RGB or #RGBA\n if(hex.length === 4 || hex.length === 5) {\n hex = expand(hex);\n }\n\n var rgb = [\n parseInt(hex.substring(1,3), 16),\n parseInt(hex.substring(3,5), 16),\n parseInt(hex.substring(5,7), 16)\n ];\n\n // #RRGGBBAA\n if (hex.length === 9) {\n var alpha = parseFloat((parseInt(hex.substring(7,9), 16) / 255).toFixed(2));\n rgb.push(alpha);\n }\n\n return rgb;\n}\n\nmodule.exports = hex;","var extractComponents = require(\"./extractComponents\");\nvar clamp = require(\"../util/clamp\");\n\nfunction parseRgbComponent(component, i) {\n if (i < 3) {\n if (component.indexOf('%') != -1) {\n return Math.round(255 * clamp(parseInt(component, 10), 0, 100)/100);\n } else {\n return clamp(parseInt(component, 10), 0, 255);\n }\n } else {\n return clamp(parseFloat(component), 0, 1);\n } \n}\n\nfunction rgb(color) {\n return extractComponents(color).map(parseRgbComponent);\n}\n\nmodule.exports = rgb;","function hsl2rgb(hsl) {\n var h = hsl[0] / 360,\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n t1, t2, t3, rgb, val;\n\n if (s == 0) {\n val = l * 255;\n return [val, val, val];\n }\n\n if (l < 0.5)\n t2 = l * (1 + s);\n else\n t2 = l + s - l * s;\n t1 = 2 * l - t2;\n\n rgb = [0, 0, 0];\n for (var i = 0; i < 3; i++) {\n t3 = h + 1 / 3 * - (i - 1);\n t3 < 0 && t3++;\n t3 > 1 && t3--;\n\n if (6 * t3 < 1)\n val = t1 + (t2 - t1) * 6 * t3;\n else if (2 * t3 < 1)\n val = t2;\n else if (3 * t3 < 2)\n val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n else\n val = t1;\n\n rgb[i] = val * 255;\n }\n\n return rgb;\n}\n\nmodule.exports = hsl2rgb;","var hsl = require(\"./hsl\");\nvar hex = require(\"./hex\");\nvar rgb = require(\"./rgb\");\nvar hsl2rgb = require(\"../convert/hsl2rgb\");\n\nfunction hsl2rgbParse(color) {\n var h = hsl(color);\n var r = hsl2rgb(h);\n\n // handle alpha since hsl2rgb doesn't know (or care!) about it\n if(h.length === 4) {\n r.push(h[3]);\n }\n\n return r;\n}\n\nvar space2parser = {\n \"#\" : hex,\n \"hsl\" : hsl2rgbParse,\n \"rgb\" : rgb\n};\n\nfunction parse(color) {\n for(var scheme in space2parser) {\n if(color.indexOf(scheme) === 0) {\n return space2parser[scheme](color);\n }\n }\n}\n\nparse.rgb = rgb;\nparse.hsl = hsl;\nparse.hex = hex;\n\nmodule.exports = parse;","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\nfunction createFlow(fromRight) {\n return baseRest(function(funcs) {\n funcs = baseFlatten(funcs, 1);\n\n var length = funcs.length,\n index = length;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n if (typeof funcs[index] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n }\n return function() {\n var index = 0,\n result = length ? funcs[index].apply(this, arguments) : arguments[0];\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\nvar flow = createFlow();\n\nmodule.exports = flow;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.yuv2rgb = yuv2rgb;\nexports.rgb2yuv = rgb2yuv;\nfunction yuv2rgb(yuv) {\n var y = yuv[0],\n u = yuv[1],\n v = yuv[2],\n r,\n g,\n b;\n\n r = y * 1 + u * 0 + v * 1.13983;\n g = y * 1 + u * -0.39465 + v * -0.58060;\n b = y * 1 + u * 2.02311 + v * 0;\n\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n\n return [r * 255, g * 255, b * 255];\n}\n\nfunction rgb2yuv(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255;\n\n var y = r * 0.299 + g * 0.587 + b * 0.114;\n var u = r * -0.14713 + g * -0.28886 + b * 0.436;\n var v = r * 0.615 + g * -0.51499 + b * -0.10001;\n\n return [y, u, v];\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getBase16Theme = exports.createStyling = exports.invertTheme = undefined;\n\nvar _typeof2 = require('babel-runtime/helpers/typeof');\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');\n\nvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\nvar _keys = require('babel-runtime/core-js/object/keys');\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _lodash = require('lodash.curry');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _base = require('base16');\n\nvar base16 = _interopRequireWildcard(_base);\n\nvar _rgb2hex = require('pure-color/convert/rgb2hex');\n\nvar _rgb2hex2 = _interopRequireDefault(_rgb2hex);\n\nvar _parse = require('pure-color/parse');\n\nvar _parse2 = _interopRequireDefault(_parse);\n\nvar _lodash3 = require('lodash.flow');\n\nvar _lodash4 = _interopRequireDefault(_lodash3);\n\nvar _colorConverters = require('./colorConverters');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEFAULT_BASE16 = base16.default;\n\nvar BASE16_KEYS = (0, _keys2.default)(DEFAULT_BASE16);\n\n// we need a correcting factor, so that a dark, but not black background color\n// converts to bright enough inversed color\nvar flip = function flip(x) {\n return x < 0.25 ? 1 : x < 0.5 ? 0.9 - x : 1.1 - x;\n};\n\nvar invertColor = (0, _lodash4.default)(_parse2.default, _colorConverters.rgb2yuv, function (_ref) {\n var _ref2 = (0, _slicedToArray3.default)(_ref, 3),\n y = _ref2[0],\n u = _ref2[1],\n v = _ref2[2];\n\n return [flip(y), u, v];\n}, _colorConverters.yuv2rgb, _rgb2hex2.default);\n\nvar merger = function merger(styling) {\n return function (prevStyling) {\n return {\n className: [prevStyling.className, styling.className].filter(Boolean).join(' '),\n style: (0, _extends3.default)({}, prevStyling.style || {}, styling.style || {})\n };\n };\n};\n\nvar mergeStyling = function mergeStyling(customStyling, defaultStyling) {\n if (customStyling === undefined) {\n return defaultStyling;\n }\n if (defaultStyling === undefined) {\n return customStyling;\n }\n\n var customType = typeof customStyling === 'undefined' ? 'undefined' : (0, _typeof3.default)(customStyling);\n var defaultType = typeof defaultStyling === 'undefined' ? 'undefined' : (0, _typeof3.default)(defaultStyling);\n\n switch (customType) {\n case 'string':\n switch (defaultType) {\n case 'string':\n return [defaultStyling, customStyling].filter(Boolean).join(' ');\n case 'object':\n return merger({ className: customStyling, style: defaultStyling });\n case 'function':\n return function (styling) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return merger({\n className: customStyling\n })(defaultStyling.apply(undefined, [styling].concat(args)));\n };\n }\n case 'object':\n switch (defaultType) {\n case 'string':\n return merger({ className: defaultStyling, style: customStyling });\n case 'object':\n return (0, _extends3.default)({}, defaultStyling, customStyling);\n case 'function':\n return function (styling) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return merger({\n style: customStyling\n })(defaultStyling.apply(undefined, [styling].concat(args)));\n };\n }\n case 'function':\n switch (defaultType) {\n case 'string':\n return function (styling) {\n for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return customStyling.apply(undefined, [merger(styling)({\n className: defaultStyling\n })].concat(args));\n };\n case 'object':\n return function (styling) {\n for (var _len4 = arguments.length, args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return customStyling.apply(undefined, [merger(styling)({\n style: defaultStyling\n })].concat(args));\n };\n case 'function':\n return function (styling) {\n for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return customStyling.apply(undefined, [defaultStyling.apply(undefined, [styling].concat(args))].concat(args));\n };\n }\n }\n};\n\nvar mergeStylings = function mergeStylings(customStylings, defaultStylings) {\n var keys = (0, _keys2.default)(defaultStylings);\n for (var key in customStylings) {\n if (keys.indexOf(key) === -1) keys.push(key);\n }\n\n return keys.reduce(function (mergedStyling, key) {\n return mergedStyling[key] = mergeStyling(customStylings[key], defaultStylings[key]), mergedStyling;\n }, {});\n};\n\nvar getStylingByKeys = function getStylingByKeys(mergedStyling, keys) {\n for (var _len6 = arguments.length, args = Array(_len6 > 2 ? _len6 - 2 : 0), _key6 = 2; _key6 < _len6; _key6++) {\n args[_key6 - 2] = arguments[_key6];\n }\n\n if (keys === null) {\n return mergedStyling;\n }\n\n if (!Array.isArray(keys)) {\n keys = [keys];\n }\n\n var styles = keys.map(function (key) {\n return mergedStyling[key];\n }).filter(Boolean);\n\n var props = styles.reduce(function (obj, s) {\n if (typeof s === 'string') {\n obj.className = [obj.className, s].filter(Boolean).join(' ');\n } else if ((typeof s === 'undefined' ? 'undefined' : (0, _typeof3.default)(s)) === 'object') {\n obj.style = (0, _extends3.default)({}, obj.style, s);\n } else if (typeof s === 'function') {\n obj = (0, _extends3.default)({}, obj, s.apply(undefined, [obj].concat(args)));\n }\n\n return obj;\n }, { className: '', style: {} });\n\n if (!props.className) {\n delete props.className;\n }\n\n if ((0, _keys2.default)(props.style).length === 0) {\n delete props.style;\n }\n\n return props;\n};\n\nvar invertTheme = exports.invertTheme = function invertTheme(theme) {\n return (0, _keys2.default)(theme).reduce(function (t, key) {\n return t[key] = /^base/.test(key) ? invertColor(theme[key]) : key === 'scheme' ? theme[key] + ':inverted' : theme[key], t;\n }, {});\n};\n\nvar createStyling = exports.createStyling = (0, _lodash2.default)(function (getStylingFromBase16) {\n for (var _len7 = arguments.length, args = Array(_len7 > 3 ? _len7 - 3 : 0), _key7 = 3; _key7 < _len7; _key7++) {\n args[_key7 - 3] = arguments[_key7];\n }\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var themeOrStyling = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _options$defaultBase = options.defaultBase16,\n defaultBase16 = _options$defaultBase === undefined ? DEFAULT_BASE16 : _options$defaultBase,\n _options$base16Themes = options.base16Themes,\n base16Themes = _options$base16Themes === undefined ? null : _options$base16Themes;\n\n\n var base16Theme = getBase16Theme(themeOrStyling, base16Themes);\n if (base16Theme) {\n themeOrStyling = (0, _extends3.default)({}, base16Theme, themeOrStyling);\n }\n\n var theme = BASE16_KEYS.reduce(function (t, key) {\n return t[key] = themeOrStyling[key] || defaultBase16[key], t;\n }, {});\n\n var customStyling = (0, _keys2.default)(themeOrStyling).reduce(function (s, key) {\n return BASE16_KEYS.indexOf(key) === -1 ? (s[key] = themeOrStyling[key], s) : s;\n }, {});\n\n var defaultStyling = getStylingFromBase16(theme);\n\n var mergedStyling = mergeStylings(customStyling, defaultStyling);\n\n return (0, _lodash2.default)(getStylingByKeys, 2).apply(undefined, [mergedStyling].concat(args));\n}, 3);\n\nvar getBase16Theme = exports.getBase16Theme = function getBase16Theme(theme, base16Themes) {\n if (theme && theme.extend) {\n theme = theme.extend;\n }\n\n if (typeof theme === 'string') {\n var _theme$split = theme.split(':'),\n _theme$split2 = (0, _slicedToArray3.default)(_theme$split, 2),\n themeName = _theme$split2[0],\n modifier = _theme$split2[1];\n\n theme = (base16Themes || {})[themeName] || base16[themeName];\n if (modifier === 'inverted') {\n theme = invertTheme(theme);\n }\n }\n\n return theme && theme.hasOwnProperty('base00') ? theme : undefined;\n};","'use strict';\n\nexports.__esModule = true;\nexports['default'] = {\n scheme: 'solarized',\n author: 'ethan schoonover (http://ethanschoonover.com/solarized)',\n base00: '#002b36',\n base01: '#073642',\n base02: '#586e75',\n base03: '#657b83',\n base04: '#839496',\n base05: '#93a1a1',\n base06: '#eee8d5',\n base07: '#fdf6e3',\n base08: '#dc322f',\n base09: '#cb4b16',\n base0A: '#b58900',\n base0B: '#859900',\n base0C: '#2aa198',\n base0D: '#268bd2',\n base0E: '#6c71c4',\n base0F: '#d33682'\n};","'use strict';\n\nexports.__esModule = true;\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _reactBase16Styling = require('react-base16-styling');\n\nvar _solarized = require('./themes/solarized');\n\nvar _solarized2 = _interopRequireDefault(_solarized);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar colorMap = function colorMap(theme) {\n return {\n BACKGROUND_COLOR: theme.base00,\n TEXT_COLOR: theme.base07,\n STRING_COLOR: theme.base0B,\n DATE_COLOR: theme.base0B,\n NUMBER_COLOR: theme.base09,\n BOOLEAN_COLOR: theme.base09,\n NULL_COLOR: theme.base08,\n UNDEFINED_COLOR: theme.base08,\n FUNCTION_COLOR: theme.base08,\n SYMBOL_COLOR: theme.base08,\n LABEL_COLOR: theme.base0D,\n ARROW_COLOR: theme.base0D,\n ITEM_STRING_COLOR: theme.base0B,\n ITEM_STRING_EXPANDED_COLOR: theme.base03\n };\n};\n\nvar valueColorMap = function valueColorMap(colors) {\n return {\n String: colors.STRING_COLOR,\n Date: colors.DATE_COLOR,\n Number: colors.NUMBER_COLOR,\n Boolean: colors.BOOLEAN_COLOR,\n Null: colors.NULL_COLOR,\n Undefined: colors.UNDEFINED_COLOR,\n Function: colors.FUNCTION_COLOR,\n Symbol: colors.SYMBOL_COLOR\n };\n};\n\nvar getDefaultThemeStyling = function getDefaultThemeStyling(theme) {\n var colors = colorMap(theme);\n\n return {\n tree: {\n border: 0,\n padding: 0,\n marginTop: '0.5em',\n marginBottom: '0.5em',\n marginLeft: '0.125em',\n marginRight: 0,\n listStyle: 'none',\n MozUserSelect: 'none',\n WebkitUserSelect: 'none',\n backgroundColor: colors.BACKGROUND_COLOR\n },\n\n value: function value(_ref, nodeType, keyPath) {\n var style = _ref.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n paddingTop: '0.25em',\n paddingRight: 0,\n marginLeft: '0.875em',\n WebkitUserSelect: 'text',\n MozUserSelect: 'text',\n wordWrap: 'break-word',\n paddingLeft: keyPath.length > 1 ? '2.125em' : '1.25em',\n textIndent: '-0.5em',\n wordBreak: 'break-all'\n })\n };\n },\n\n label: {\n display: 'inline-block',\n color: colors.LABEL_COLOR\n },\n\n valueLabel: {\n margin: '0 0.5em 0 0'\n },\n\n valueText: function valueText(_ref2, nodeType) {\n var style = _ref2.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n color: valueColorMap(colors)[nodeType]\n })\n };\n },\n\n itemRange: function itemRange(styling, expanded) {\n return {\n style: {\n paddingTop: expanded ? 0 : '0.25em',\n cursor: 'pointer',\n color: colors.LABEL_COLOR\n }\n };\n },\n\n arrow: function arrow(_ref3, nodeType, expanded) {\n var style = _ref3.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n marginLeft: 0,\n transition: '150ms',\n WebkitTransition: '150ms',\n MozTransition: '150ms',\n WebkitTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',\n MozTransform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',\n transform: expanded ? 'rotateZ(90deg)' : 'rotateZ(0deg)',\n transformOrigin: '45% 50%',\n WebkitTransformOrigin: '45% 50%',\n MozTransformOrigin: '45% 50%',\n position: 'relative',\n lineHeight: '1.1em',\n fontSize: '0.75em'\n })\n };\n },\n\n arrowContainer: function arrowContainer(_ref4, arrowStyle) {\n var style = _ref4.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n display: 'inline-block',\n paddingRight: '0.5em',\n paddingLeft: arrowStyle === 'double' ? '1em' : 0,\n cursor: 'pointer'\n })\n };\n },\n\n arrowSign: {\n color: colors.ARROW_COLOR\n },\n\n arrowSignInner: {\n position: 'absolute',\n top: 0,\n left: '-0.4em'\n },\n\n nestedNode: function nestedNode(_ref5, keyPath, nodeType, expanded, expandable) {\n var style = _ref5.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n position: 'relative',\n paddingTop: '0.25em',\n marginLeft: keyPath.length > 1 ? '0.875em' : 0,\n paddingLeft: !expandable ? '1.125em' : 0\n })\n };\n },\n\n rootNode: {\n padding: 0,\n margin: 0\n },\n\n nestedNodeLabel: function nestedNodeLabel(_ref6, keyPath, nodeType, expanded, expandable) {\n var style = _ref6.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n margin: 0,\n padding: 0,\n WebkitUserSelect: expandable ? 'inherit' : 'text',\n MozUserSelect: expandable ? 'inherit' : 'text',\n cursor: expandable ? 'pointer' : 'default'\n })\n };\n },\n\n nestedNodeItemString: function nestedNodeItemString(_ref7, keyPath, nodeType, expanded) {\n var style = _ref7.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n paddingLeft: '0.5em',\n cursor: 'default',\n color: expanded ? colors.ITEM_STRING_EXPANDED_COLOR : colors.ITEM_STRING_COLOR\n })\n };\n },\n\n nestedNodeItemType: {\n marginLeft: '0.3em',\n marginRight: '0.3em'\n },\n\n nestedNodeChildren: function nestedNodeChildren(_ref8, nodeType, expanded) {\n var style = _ref8.style;\n return {\n style: (0, _extends3['default'])({}, style, {\n padding: 0,\n margin: 0,\n listStyle: 'none',\n display: expanded ? 'block' : 'none'\n })\n };\n },\n\n rootNodeChildren: {\n padding: 0,\n margin: 0,\n listStyle: 'none'\n }\n };\n};\n\nexports['default'] = (0, _reactBase16Styling.createStyling)(getDefaultThemeStyling, {\n defaultBase16: _solarized2['default']\n});","'use strict';\n\nexports.__esModule = true;\n\nvar _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');\n\nvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\nvar _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = require('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _extends2 = require('babel-runtime/helpers/extends');\n\nvar _extends3 = _interopRequireDefault(_extends2);\n\nvar _keys = require('babel-runtime/core-js/object/keys');\n\nvar _keys2 = _interopRequireDefault(_keys);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _JSONNode = require('./JSONNode');\n\nvar _JSONNode2 = _interopRequireDefault(_JSONNode);\n\nvar _createStylingFromTheme = require('./createStylingFromTheme');\n\nvar _createStylingFromTheme2 = _interopRequireDefault(_createStylingFromTheme);\n\nvar _reactBase16Styling = require('react-base16-styling');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar identity = function identity(value) {\n return value;\n}; // ES6 + inline style port of JSONViewer https://bitbucket.org/davevedder/react-json-viewer/\n// all credits and original code to the author\n// Dave Vedder <veddermatic@gmail.com> http://www.eskimospy.com/\n// port by Daniele Zannotti http://www.github.com/dzannotti <dzannotti@me.com>\n\nvar expandRootNode = function expandRootNode(keyName, data, level) {\n return level === 0;\n};\nvar defaultItemString = function defaultItemString(type, data, itemType, itemString) {\n return _react2['default'].createElement(\n 'span',\n null,\n itemType,\n ' ',\n itemString\n );\n};\nvar defaultLabelRenderer = function defaultLabelRenderer(_ref) {\n var label = _ref[0];\n return _react2['default'].createElement(\n 'span',\n null,\n label,\n ':'\n );\n};\nvar noCustomNode = function noCustomNode() {\n return false;\n};\n\nfunction checkLegacyTheming(theme, props) {\n var deprecatedStylingMethodsMap = {\n getArrowStyle: 'arrow',\n getListStyle: 'nestedNodeChildren',\n getItemStringStyle: 'nestedNodeItemString',\n getLabelStyle: 'label',\n getValueStyle: 'valueText'\n };\n\n var deprecatedStylingMethods = (0, _keys2['default'])(deprecatedStylingMethodsMap).filter(function (name) {\n return props[name];\n });\n\n if (deprecatedStylingMethods.length > 0) {\n if (typeof theme === 'string') {\n theme = {\n extend: theme\n };\n } else {\n theme = (0, _extends3['default'])({}, theme);\n }\n\n deprecatedStylingMethods.forEach(function (name) {\n // eslint-disable-next-line no-console\n console.error('Styling method \"' + name + '\" is deprecated, use \"theme\" property instead');\n\n theme[deprecatedStylingMethodsMap[name]] = function (_ref2) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var style = _ref2.style;\n return {\n style: (0, _extends3['default'])({}, style, props[name].apply(props, args))\n };\n };\n });\n }\n\n return theme;\n}\n\nfunction getStateFromProps(props) {\n var theme = checkLegacyTheming(props.theme, props);\n if (props.invertTheme) {\n if (typeof theme === 'string') {\n theme = theme + ':inverted';\n } else if (theme && theme.extend) {\n if (typeof theme === 'string') {\n theme = (0, _extends3['default'])({}, theme, { extend: theme.extend + ':inverted' });\n } else {\n theme = (0, _extends3['default'])({}, theme, { extend: (0, _reactBase16Styling.invertTheme)(theme.extend) });\n }\n } else if (theme) {\n theme = (0, _reactBase16Styling.invertTheme)(theme);\n }\n }\n return {\n styling: (0, _createStylingFromTheme2['default'])(theme)\n };\n}\n\nvar JSONTree = function (_React$Component) {\n (0, _inherits3['default'])(JSONTree, _React$Component);\n\n function JSONTree(props) {\n (0, _classCallCheck3['default'])(this, JSONTree);\n\n var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props));\n\n _this.state = getStateFromProps(props);\n return _this;\n }\n\n JSONTree.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n var _this2 = this;\n\n if (['theme', 'invertTheme'].find(function (k) {\n return nextProps[k] !== _this2.props[k];\n })) {\n this.setState(getStateFromProps(nextProps));\n }\n };\n\n JSONTree.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n var _this3 = this;\n\n return !!(0, _keys2['default'])(nextProps).find(function (k) {\n return k === 'keyPath' ? nextProps[k].join('/') !== _this3.props[k].join('/') : nextProps[k] !== _this3.props[k];\n });\n };\n\n JSONTree.prototype.render = function render() {\n var _props = this.props,\n value = _props.data,\n keyPath = _props.keyPath,\n postprocessValue = _props.postprocessValue,\n hideRoot = _props.hideRoot,\n theme = _props.theme,\n _ = _props.invertTheme,\n rest = (0, _objectWithoutProperties3['default'])(_props, ['data', 'keyPath', 'postprocessValue', 'hideRoot', 'theme', 'invertTheme']);\n var styling = this.state.styling;\n\n\n return _react2['default'].createElement(\n 'ul',\n styling('tree'),\n _react2['default'].createElement(_JSONNode2['default'], (0, _extends3['default'])({}, (0, _extends3['default'])({ postprocessValue: postprocessValue, hideRoot: hideRoot, styling: styling }, rest), {\n keyPath: hideRoot ? [] : keyPath,\n value: postprocessValue(value)\n }))\n );\n };\n\n return JSONTree;\n}(_react2['default'].Component);\n\nJSONTree.propTypes = {\n data: _propTypes2['default'].oneOfType([_propTypes2['default'].array, _propTypes2['default'].object]).isRequired,\n hideRoot: _propTypes2['default'].bool,\n theme: _propTypes2['default'].oneOfType([_propTypes2['default'].object, _propTypes2['default'].string]),\n invertTheme: _propTypes2['default'].bool,\n keyPath: _propTypes2['default'].arrayOf(_propTypes2['default'].oneOfType([_propTypes2['default'].string, _propTypes2['default'].number])),\n postprocessValue: _propTypes2['default'].func,\n sortObjectKeys: _propTypes2['default'].oneOfType([_propTypes2['default'].func, _propTypes2['default'].bool])\n};\nJSONTree.defaultProps = {\n shouldExpandNode: expandRootNode,\n hideRoot: false,\n keyPath: ['root'],\n getItemString: defaultItemString,\n labelRenderer: defaultLabelRenderer,\n valueRenderer: identity,\n postprocessValue: identity,\n isCustomNode: noCustomNode,\n collectionLimit: 50,\n invertTheme: true\n};\nexports['default'] = JSONTree;","function _extends() { _extends = Object.assign || 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); }\n\nimport React from \"react\";\nimport JSONTreeVendor from \"react-json-tree\";\nimport { jsonTreeTheme } from \"../theme\";\nexport default function JSONTree(props) {\n return /*#__PURE__*/React.createElement(JSONTreeVendor, _extends({\n invertTheme: false,\n theme: jsonTreeTheme,\n hideRoot: true\n }, props));\n}","import styled from \"@emotion/styled\";\nimport theme from \"../theme\";\nvar Heading = styled(\"h2\")({\n color: theme.softerMain,\n padding: 0,\n margin: 0,\n fontWeight: 400,\n letterSpacing: \"1px\",\n fontSize: \"13px\",\n textTransform: \"uppercase\",\n flexGrow: 1\n});\nHeading.displayName = \"Heading\";\nvar HeadingWithButton = styled(\"div\")({\n display: \"flex\"\n});\nHeadingWithButton.displayName = \"HeadingWithButton\";\nvar HeadingButton = styled(\"button\")({\n padding: \"6px 10px\",\n margin: \"-6px -10px 0 8px\",\n fontWeight: 400,\n letterSpacing: \"1px\",\n fontSize: \"11px\",\n color: theme.white80,\n textTransform: \"uppercase\",\n transition: \"background 0.3s, color 0.3s\",\n borderRadius: \"2px\",\n border: \"none\",\n background: \"transparent\",\n \"&:hover\": {\n background: theme.main40,\n color: theme.white,\n cursor: \"pointer\"\n },\n \"&:focus\": {\n outline: \"none\"\n },\n \"&:active\": {\n background: theme.main60\n }\n});\nHeadingButton.displayName = \"HeadingButton\";\nexport { Heading, HeadingWithButton, HeadingButton };","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Subscribe } from \"unstated\";\nimport EditorStateContainer from \"../state/editor\";\nimport StateTabStateContainer from \"../state/state-tab\";\nimport { expandedStateFormatSelection, collapsedStateFormatSelection } from \"../utils/format-selection-object\";\nimport { SplitView, SplitViewCol } from \"../components/split-view\";\nimport JSONTree from \"../components/json-tree\";\nimport { Heading, HeadingWithButton, HeadingButton } from \"../components/heading\";\nimport theme from \"../theme\";\nvar JSONTreeWrapper = styled(\"div\")({\n padding: \"0 0 9px 0\",\n overflow: \"hidden\"\n});\nJSONTreeWrapper.displayName = \"JSONTreeWrapper\";\nvar Section = styled(\"div\")({\n minWidth: \"180px\",\n boxSizing: \"border-box\",\n \"& + &\": {\n paddingTop: \"9px\"\n }\n});\nSection.displayName = \"Section\";\nvar Group = styled(\"div\")({\n margin: \"0.5em 0px 0.5em 1em\"\n});\nGroup.displayName = \"Group\";\nvar GroupRow = styled(\"div\")({\n paddingTop: \"0.25em\"\n});\nGroupRow.displayName = \"GroupRow\";\nvar Key = styled(\"span\")({\n display: \"inline-block\",\n color: theme.syntax.base0D,\n margin: \"0px 0.5em 0px 0px\"\n});\nKey.displayName = \"Key\";\nvar ValueNum = styled(\"span\")({\n color: theme.syntax.base09\n});\nValueNum.displayName = \"ValueNum\";\nvar LogNodeButton = styled(\"button\")({\n color: theme.white60,\n background: \"none\",\n border: \"none\",\n transition: \"background 0.3s, color 0.3s\",\n borderRadius: \"3px\",\n \"&:hover\": {\n cursor: \"pointer\",\n background: theme.main40,\n color: theme.white\n },\n \"&:focus\": {\n outline: \"none\"\n }\n});\nLogNodeButton.displayName = \"LogNodeButton\";\nexport function getItemString(doc, action) {\n return function getItemStringWithBindedDoc(type, value, defaultView, keysCount) {\n var logButton = /*#__PURE__*/React.createElement(LogNodeButton, {\n onClick: function onClick(e) {\n e.preventDefault();\n e.stopPropagation();\n action({\n doc: doc,\n node: value\n });\n }\n }, \"log\");\n\n if (type === \"Object\" && value.type) {\n return /*#__PURE__*/React.createElement(\"span\", null, \"{} \", value.type, \" \", logButton);\n }\n\n return /*#__PURE__*/React.createElement(\"span\", null, defaultView, \" \", keysCount, \" \", logButton);\n };\n}\n\nfunction getItemStringForMark(type, value, defaultView, keysCount) {\n if (type === \"Object\" && value.type) {\n return /*#__PURE__*/React.createElement(\"span\", null, \"{} \", value.type);\n }\n\n return /*#__PURE__*/React.createElement(\"span\", null, defaultView, \" \", keysCount);\n}\n\nfunction _shouldExpandNode(expandPath, nodePath) {\n var path = [].concat(nodePath).reverse();\n if (!expandPath) return false; // Expand attrs if node has them.\n\n expandPath.push(\"attrs\");\n if (path.length > expandPath.length) return false;\n if (path.join(\".\") === expandPath.join(\".\")) return true;\n if (path.every(function (el, idx) {\n return el === expandPath[idx];\n })) return true;\n return false;\n}\n\nexport { _shouldExpandNode as shouldExpandNode };\nexport default function StateTab() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer, StateTabStateContainer]\n }, function (editorState, stateTab) {\n var logNodeFromJSON = editorState.logNodeFromJSON;\n var _editorState$state = editorState.state,\n state = _editorState$state.state,\n activeMarks = _editorState$state.activeMarks,\n expandPath = _editorState$state.expandPath;\n var toggleSelection = stateTab.toggleSelection;\n var selectionExpanded = stateTab.state.selectionExpanded;\n var doc = state.doc.toJSON();\n return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(SplitViewCol, {\n grow: true\n }, /*#__PURE__*/React.createElement(HeadingWithButton, null, /*#__PURE__*/React.createElement(Heading, null, \"Current Doc\"), /*#__PURE__*/React.createElement(HeadingButton, {\n onClick: function onClick() {\n return console.log(state);\n }\n }, \"Log State\")), /*#__PURE__*/React.createElement(JSONTree, {\n data: doc,\n hideRoot: true,\n getItemString: getItemString(doc, logNodeFromJSON),\n shouldExpandNode: function shouldExpandNode(nodePath) {\n return _shouldExpandNode(expandPath, nodePath);\n }\n })), /*#__PURE__*/React.createElement(SplitViewCol, {\n sep: true,\n minWidth: 220\n }, /*#__PURE__*/React.createElement(Section, null, /*#__PURE__*/React.createElement(HeadingWithButton, null, /*#__PURE__*/React.createElement(Heading, null, \"Selection\"), /*#__PURE__*/React.createElement(HeadingButton, {\n onClick: function onClick() {\n return toggleSelection();\n }\n }, selectionExpanded ? \"▼\" : \"▶\")), /*#__PURE__*/React.createElement(JSONTreeWrapper, null, /*#__PURE__*/React.createElement(JSONTree, {\n data: selectionExpanded ? expandedStateFormatSelection(state.selection) : collapsedStateFormatSelection(state.selection),\n hideRoot: true\n }))), /*#__PURE__*/React.createElement(Section, null, /*#__PURE__*/React.createElement(Heading, null, \"Active Marks\"), /*#__PURE__*/React.createElement(JSONTreeWrapper, null, activeMarks.length ? /*#__PURE__*/React.createElement(JSONTree, {\n data: activeMarks,\n hideRoot: true,\n getItemString: getItemStringForMark\n }) : /*#__PURE__*/React.createElement(Group, null, /*#__PURE__*/React.createElement(GroupRow, null, /*#__PURE__*/React.createElement(Key, null, \"no active marks\"))))), /*#__PURE__*/React.createElement(Section, null, /*#__PURE__*/React.createElement(Heading, null, \"Document Stats\"), /*#__PURE__*/React.createElement(Group, null, /*#__PURE__*/React.createElement(GroupRow, null, /*#__PURE__*/React.createElement(Key, null, \"nodeSize:\"), /*#__PURE__*/React.createElement(ValueNum, null, state.doc.nodeSize)), /*#__PURE__*/React.createElement(GroupRow, null, /*#__PURE__*/React.createElement(Key, null, \"childCount:\"), /*#__PURE__*/React.createElement(ValueNum, null, state.doc.childCount))))));\n });\n}","import styled from \"@emotion/styled\";\nimport theme from \"../theme\";\nvar InfoPanel = styled(\"div\")({\n position: \"relative\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n textAlign: \"center\",\n color: theme.main,\n fontSize: \"14px\"\n});\nInfoPanel.displayName = \"InfoPanel\";\nexport { InfoPanel };","function _extends() { _extends = Object.assign || 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); }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React, { PureComponent } from \"react\";\nimport styled from \"@emotion/styled\";\nimport theme from \"../theme\";\n\nvar noop = function noop() {};\n\nexport var ListItem = styled(\"div\")({\n minWidth: \"190px\",\n width: \"100%\",\n display: \"flex\",\n boxSizing: \"border-box\",\n fontWeight: 400,\n letterSpacing: \"1px\",\n fontSize: \"11px\",\n color: theme.white80,\n textTransform: \"uppercase\",\n transition: \"background .3s\",\n textAlign: \"left\",\n fontFamily: \"monospace\",\n border: \"none\",\n borderTop: \"1px solid \".concat(theme.main20),\n margin: 0,\n \"&:first-child\": {\n borderTop: \"none\"\n },\n \"&:hover\": {\n background: theme.main40,\n color: theme.white,\n cursor: \"pointer\"\n },\n \"&:focus\": {\n outline: \"none\"\n },\n \"&:active\": {\n background: theme.main60\n }\n}, function (props) {\n return {\n opacity: props.isDimmed ? 0.3 : 1,\n padding: props.nested ? \"6px 18px 6px 36px\" : \"6px 18px\",\n background: props.background ? props.background(props) : props.isSelected ? theme.main40 : \"transparent\"\n };\n});\nListItem.displayName = \"ListItem\";\nvar ListItemGroupContent = styled(\"div\")({\n display: \"block\"\n}, function (props) {\n return {\n display: props.collapsed ? \"none\" : \"block\"\n };\n});\nListItemGroupContent.displayName = \"ListItemGroupContent\";\n\nvar ListItemGroup = /*#__PURE__*/function (_PureComponent) {\n _inherits(ListItemGroup, _PureComponent);\n\n var _super = _createSuper(ListItemGroup);\n\n function ListItemGroup(props) {\n var _this;\n\n _classCallCheck(this, ListItemGroup);\n\n _this = _super.call(this, props);\n _this.state = {\n collapsed: true\n };\n return _this;\n }\n\n _createClass(ListItemGroup, [{\n key: \"toggle\",\n value: function toggle() {\n this.setState({\n collapsed: !this.state.collapsed\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$props = this.props,\n items = _this$props.items,\n groupTitle = _this$props.groupTitle,\n title = _this$props.title,\n _this$props$isSelecte = _this$props.isSelected,\n isSelected = _this$props$isSelecte === void 0 ? noop : _this$props$isSelecte,\n _this$props$isPreviou = _this$props.isPrevious,\n isPrevious = _this$props$isPreviou === void 0 ? noop : _this$props$isPreviou,\n _this$props$isDimmed = _this$props.isDimmed,\n isDimmed = _this$props$isDimmed === void 0 ? noop : _this$props$isDimmed,\n _this$props$getKey = _this$props.getKey,\n getKey = _this$props$getKey === void 0 ? noop : _this$props$getKey,\n _this$props$onListIte = _this$props.onListItemClick,\n onListItemClick = _this$props$onListIte === void 0 ? noop : _this$props$onListIte,\n _this$props$onListIte2 = _this$props.onListItemDoubleClick,\n onListItemDoubleClick = _this$props$onListIte2 === void 0 ? noop : _this$props$onListIte2,\n customItemBackground = _this$props.customItemBackground;\n return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(ListItem, {\n key: getKey(items[0]),\n onClick: function onClick() {\n return _this2.toggle();\n },\n isSelected: items.some(isSelected) && this.state.collapsed,\n isPrevious: isPrevious(items[0], 0) && this.state.collapsed,\n isDimmed: items.every(isDimmed),\n background: customItemBackground\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n flexGrow: 1\n }\n }, groupTitle(items, 0)), /*#__PURE__*/React.createElement(\"div\", null, this.state.collapsed ? \"▶\" : \"▼\")), /*#__PURE__*/React.createElement(ListItemGroupContent, {\n collapsed: this.state.collapsed\n }, (items || []).map(function (item, index) {\n return /*#__PURE__*/React.createElement(ListItem, {\n key: getKey(item),\n nested: true,\n isSelected: isSelected(item, index),\n isPrevious: isPrevious(item, index),\n isDimmed: isDimmed(item, index),\n background: customItemBackground,\n onClick: function onClick() {\n return onListItemClick(item, index);\n },\n onDoubleClick: function onDoubleClick() {\n return onListItemDoubleClick(item, index);\n }\n }, title(item, index));\n })));\n }\n }]);\n\n return ListItemGroup;\n}(PureComponent);\n\nexport function List(props) {\n var _props$isSelected = props.isSelected,\n isSelected = _props$isSelected === void 0 ? noop : _props$isSelected,\n _props$isPrevious = props.isPrevious,\n isPrevious = _props$isPrevious === void 0 ? noop : _props$isPrevious,\n _props$isDimmed = props.isDimmed,\n isDimmed = _props$isDimmed === void 0 ? noop : _props$isDimmed,\n _props$getKey = props.getKey,\n getKey = _props$getKey === void 0 ? noop : _props$getKey,\n _props$onListItemClic = props.onListItemClick,\n onListItemClick = _props$onListItemClic === void 0 ? noop : _props$onListItemClic,\n _props$onListItemDoub = props.onListItemDoubleClick,\n onListItemDoubleClick = _props$onListItemDoub === void 0 ? noop : _props$onListItemDoub;\n return /*#__PURE__*/React.createElement(\"div\", null, (props.items || []).map(function (item, index) {\n if (Array.isArray(item)) {\n return /*#__PURE__*/React.createElement(ListItemGroup, _extends({}, props, {\n items: item,\n key: item[0].timestamp\n }), props.groupTitle(item, index));\n }\n\n return /*#__PURE__*/React.createElement(ListItem, {\n key: getKey(item),\n isSelected: isSelected(item, index),\n isPrevious: isPrevious(item, index),\n isDimmed: isDimmed(item, index),\n background: props.customItemBackground,\n onClick: function onClick() {\n return onListItemClick(item, index);\n },\n onDoubleClick: function onDoubleClick() {\n return onListItemDoubleClick(item, index);\n }\n }, props.title(item, index));\n }));\n}","function _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; }\n\nimport React from \"react\";\nimport JSONTree from \"./json-tree\";\nimport styled from \"@emotion/styled\";\nimport theme from \"../theme\";\nvar Updated = styled(\"span\")({\n color: theme.main\n});\nUpdated.displayName = \"Updated\";\nvar White = styled(\"span\")({\n color: theme.white\n});\nWhite.displayName = \"White\";\nvar Deleted = styled(\"span\")({\n display: \"inline-block\",\n background: theme.lightYellow,\n color: theme.lightPink,\n padding: \"1px 3px 2px\",\n textIndent: 0,\n textDecoration: \"line-through\",\n minHeight: \"1ex\"\n});\nDeleted.displayName = \"Deleted\";\nvar Added = styled(\"span\")({\n display: \"inline-block\",\n background: theme.lightYellow,\n color: theme.darkGreen,\n padding: \"1px 3px 2px\",\n textIndent: 0,\n minHeight: \"1ex\"\n});\nAdded.displayName = \"Added\";\n\nfunction postprocessValue(value) {\n if (value && value._t === \"a\") {\n var res = {};\n\n for (var key in value) {\n if (key !== \"_t\") {\n if (key[0] === \"_\" && !value[key.substr(1)]) {\n res[key.substr(1)] = value[key];\n } else if (value[\"_\" + key]) {\n res[key] = [value[\"_\" + key][0], value[key][0]];\n } else if (!value[\"_\" + key] && key[0] !== \"_\") {\n res[key] = value[key];\n }\n }\n }\n\n return res;\n }\n\n return value;\n}\n\nfunction labelRenderer(raw) {\n return raw[0];\n}\n\nfunction stringifyAndShrink(val) {\n if (val === null) {\n return \"null\";\n }\n\n var str = JSON.stringify(val);\n\n if (typeof str === \"undefined\") {\n return \"undefined\";\n }\n\n return str.length > 22 ? \"\".concat(str.substr(0, 15), \"\\u2026\").concat(str.substr(-5)) : str;\n}\n\nfunction getValueString(raw) {\n if (typeof raw === \"string\") {\n return raw;\n }\n\n return stringifyAndShrink(raw);\n}\n\nfunction replaceSpacesWithNonBreakingSpace(value) {\n return value.replace(/\\s/gm, \" \");\n}\n\nfunction parseTextDiff(textDiff) {\n var diffByLines = textDiff.split(/\\n/gm).slice(1);\n return diffByLines.map(function (line) {\n var type = line.startsWith(\"-\") ? \"delete\" : line.startsWith(\"+\") ? \"add\" : \"raw\";\n return _defineProperty({}, type, replaceSpacesWithNonBreakingSpace(line.substr(1)));\n });\n}\n\nfunction valueRenderer(raw) {\n if (Array.isArray(raw)) {\n if (raw.length === 1) {\n return /*#__PURE__*/React.createElement(Added, null, getValueString(raw[0]));\n }\n\n if (raw.length === 2) {\n return /*#__PURE__*/React.createElement(Updated, null, /*#__PURE__*/React.createElement(Deleted, null, getValueString(raw[0])), \" =>\", \" \", /*#__PURE__*/React.createElement(Added, null, getValueString(raw[1])));\n }\n\n if (raw.length === 3 && raw[1] === 0 && raw[2] === 0) {\n return /*#__PURE__*/React.createElement(Deleted, null, getValueString(raw[0]));\n }\n\n if (raw.length === 3 && raw[2] === 2) {\n return /*#__PURE__*/React.createElement(Updated, null, \"\\\"\", parseTextDiff(raw[0]).map(function (item) {\n if (item[\"delete\"]) {\n return /*#__PURE__*/React.createElement(Deleted, {\n key: item[\"delete\"] + \"delete\"\n }, item[\"delete\"]);\n }\n\n if (item.add) {\n return /*#__PURE__*/React.createElement(Added, {\n key: item.add + \"add\"\n }, item.add);\n }\n\n return /*#__PURE__*/React.createElement(White, {\n key: item.raw + \"raw\"\n }, item.raw);\n }), \"\\\"\");\n }\n }\n\n return \"\" + raw;\n}\n\nexport function itemsCountString(count) {\n return \"\".concat(count);\n}\nexport function getItemString(type, value, defaultView, keysCount) {\n switch (type) {\n case \"Object\":\n return /*#__PURE__*/React.createElement(\"span\", null, \"{…}\");\n\n default:\n return /*#__PURE__*/React.createElement(\"span\", null, defaultView, \" \", keysCount);\n }\n}\nexport default function JSONDiff(props) {\n if (!props.delta) return null;\n return /*#__PURE__*/React.createElement(JSONTree, {\n data: props.delta,\n hideRoot: true,\n postprocessValue: postprocessValue,\n labelRenderer: labelRenderer,\n valueRenderer: valueRenderer,\n isCustomNode: Array.isArray,\n getItemString: getItemString,\n shouldExpandNode: function shouldExpandNode() {\n return true;\n }\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport theme from \"../theme\";\nvar CustomPre = styled(\"pre\")({\n padding: \"9px 0 18px 0 !important\",\n margin: 0,\n color: theme.white80,\n \"& .prosemirror-dev-tools-highlighter-tag\": {\n color: theme.main\n }\n});\nCustomPre.displayName = \"CustomPre\";\nvar regexp = /(<\\/?[\\w\\d\\s=\"']+>)/gim;\n\nvar highlight = function highlight(str) {\n return str.replace(/</g, \"<\").replace(/>/g, \">\").replace(regexp, \"<span class='prosemirror-dev-tools-highlighter-tag'>$&</span>\");\n};\n\nexport var Highlighter = /*#__PURE__*/function (_React$Component) {\n _inherits(Highlighter, _React$Component);\n\n var _super = _createSuper(Highlighter);\n\n function Highlighter() {\n _classCallCheck(this, Highlighter);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(Highlighter, [{\n key: \"render\",\n value: function render() {\n if (!this.props.children) return null;\n return /*#__PURE__*/React.createElement(CustomPre, {\n dangerouslySetInnerHTML: {\n __html: highlight(this.props.children)\n }\n });\n }\n }]);\n\n return Highlighter;\n}(React.Component);","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Subscribe } from \"unstated\";\nimport EditorStateContainer from \"../state/editor\";\nimport { InfoPanel } from \"../components/info-panel\";\nimport { Heading } from \"../components/heading\";\nimport { List } from \"../components/list\";\nimport JSONDiff from \"../components/json-diff\";\nimport { SplitView, SplitViewCol } from \"../components/split-view\";\nimport { Highlighter } from \"../components/highlighter\";\nimport theme from \"../theme\";\nvar Section = styled(\"div\")({\n minWidth: \"180px\",\n boxSizing: \"border-box\",\n \"& + &\": {\n paddingTop: \"9px\"\n }\n});\nSection.displayName = \"Section\";\n\nfunction pad(num) {\n return (\"00\" + num).slice(-2);\n}\n\nfunction pad3(num) {\n return (\"000\" + num).slice(-3);\n}\n\nvar formatTimestamp = function formatTimestamp(timestamp) {\n var date = new Date(timestamp);\n return [pad(date.getHours()), pad(date.getMinutes()), pad(date.getSeconds()), pad3(date.getMilliseconds())].join(\":\");\n};\n\nexport function SelectionContentSection(props) {\n if (!props.selectionContent) return null;\n return /*#__PURE__*/React.createElement(Section, null, /*#__PURE__*/React.createElement(Heading, null, \"Selection Content\"), /*#__PURE__*/React.createElement(Highlighter, null, props.selectionContent));\n}\nexport function DocDiffSection(props) {\n if (!props.diff) return null;\n return /*#__PURE__*/React.createElement(Section, null, /*#__PURE__*/React.createElement(Heading, null, \"Doc diff\"), /*#__PURE__*/React.createElement(JSONDiff, {\n delta: props.diff\n }));\n}\nexport function SelectionSection(props) {\n if (!props.selection) return null;\n return /*#__PURE__*/React.createElement(Section, null, /*#__PURE__*/React.createElement(Heading, null, \"Selection diff\"), /*#__PURE__*/React.createElement(JSONDiff, {\n delta: props.selection\n }));\n}\nexport default function HistoryView() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer]\n }, function (editorState) {\n var selectHistoryItem = editorState.selectHistoryItem,\n rollbackHistory = editorState.rollbackHistory;\n var _editorState$state = editorState.state,\n history = _editorState$state.history,\n selectedHistoryItem = _editorState$state.selectedHistoryItem,\n historyRolledBackTo = _editorState$state.historyRolledBackTo;\n var prevItem = history[selectedHistoryItem + 1];\n var selectedItem = history[selectedHistoryItem];\n var historyRolledBackToItem = history[historyRolledBackTo];\n var historyList = history.reduce(function (h, item, index) {\n var prev = h[h.length - 1];\n item.index = index;\n\n if (!item.diff) {\n if (!prev || !Array.isArray(prev)) {\n h.push([item]);\n } else {\n prev.push(item);\n }\n } else {\n h.push(item);\n }\n\n return h;\n }, []).reduce(function (h, item) {\n if (Array.isArray(item) && item.length === 1) {\n h.push(item[0]);\n } else {\n h.push(item);\n }\n\n return h;\n }, []);\n\n var isSelected = function isSelected(item) {\n return item.timestamp === selectedItem.timestamp;\n };\n\n var isPrevious = function isPrevious(item) {\n return prevItem && item.timestamp === prevItem.timestamp;\n };\n\n var isDimmed = function isDimmed(item) {\n return historyRolledBackToItem && item.timestamp > historyRolledBackToItem.timestamp;\n };\n\n return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(SplitViewCol, {\n noPaddings: true,\n minWidth: 190\n }, /*#__PURE__*/React.createElement(List, {\n items: historyList,\n getKey: function getKey(item) {\n return item.timestamp;\n },\n title: function title(item) {\n return formatTimestamp(item.timestamp);\n },\n groupTitle: function groupTitle(item) {\n return formatTimestamp(item[0].timestamp) + \" [\".concat(item.length, \"]\");\n },\n isSelected: isSelected,\n isPrevious: isPrevious,\n isDimmed: isDimmed,\n customItemBackground: function customItemBackground(props) {\n return props.isSelected ? theme.main40 : props.isPrevious ? theme.main20 : \"transparent\";\n },\n onListItemClick: function onListItemClick(item) {\n return selectHistoryItem(item.index);\n },\n onListItemDoubleClick: function onListItemDoubleClick(item) {\n return rollbackHistory(item.index);\n }\n })), /*#__PURE__*/React.createElement(SplitViewCol, {\n grow: true,\n sep: true\n }, /*#__PURE__*/React.createElement(DocDiffSection, {\n diff: selectedItem.diff\n }), /*#__PURE__*/React.createElement(SelectionSection, {\n selection: selectedItem.selection\n }), /*#__PURE__*/React.createElement(SelectionContentSection, {\n selectionContent: selectedItem.selectionContent\n }), !selectedItem.diff && !selectedItem.selectionContent && !selectedItem.diffPending && /*#__PURE__*/React.createElement(InfoPanel, null, \"Docs are equal.\")));\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React from \"react\";\nimport { Subscribe } from \"unstated\";\nimport EditorStateContainer from \"../state/editor\";\nimport { SplitView, SplitViewCol } from \"../components/split-view\";\nimport JSONTree from \"../components/json-tree\";\nimport { Heading } from \"../components/heading\";\nvar ignoreFields = [\"schema\", \"contentExpr\", \"schema\", \"parseDOM\", \"toDOM\"];\nexport function postprocessValue(ignore, data) {\n if (!data || Object.prototype.toString.call(data) !== \"[object Object]\") {\n return data;\n }\n\n return Object.keys(data).filter(function (key) {\n return ignore.indexOf(key) === -1;\n }).reduce(function (res, key) {\n res[key] = data[key];\n return res;\n }, {});\n}\nexport var SchemaTab = /*#__PURE__*/function (_React$Component) {\n _inherits(SchemaTab, _React$Component);\n\n var _super = _createSuper(SchemaTab);\n\n function SchemaTab() {\n _classCallCheck(this, SchemaTab);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(SchemaTab, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(nextProps) {\n return this.props.schema !== nextProps.schema;\n }\n }, {\n key: \"render\",\n value: function render() {\n var schema = this.props.schema;\n return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(SplitViewCol, {\n grow: true\n }, /*#__PURE__*/React.createElement(Heading, null, \"Nodes\"), /*#__PURE__*/React.createElement(JSONTree, {\n data: schema.nodes,\n postprocessValue: postprocessValue.bind(null, ignoreFields)\n })), /*#__PURE__*/React.createElement(SplitViewCol, {\n grow: true,\n sep: true\n }, /*#__PURE__*/React.createElement(Heading, null, \"Marks\"), /*#__PURE__*/React.createElement(JSONTree, {\n data: schema.marks,\n postprocessValue: postprocessValue.bind(null, ignoreFields)\n })));\n }\n }]);\n\n return SchemaTab;\n}(React.Component);\nexport default function SchemaTabContainer() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer]\n }, function (_ref) {\n var schema = _ref.state.state.schema;\n return /*#__PURE__*/React.createElement(SchemaTab, {\n schema: schema\n });\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nimport { Container } from \"unstated\";\n\nvar PluginsTabStateContainer = /*#__PURE__*/function (_Container) {\n _inherits(PluginsTabStateContainer, _Container);\n\n var _super = _createSuper(PluginsTabStateContainer);\n\n function PluginsTabStateContainer() {\n var _this;\n\n _classCallCheck(this, PluginsTabStateContainer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n selected: 0\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectPlugin\", function (index) {\n _this.setState({\n selected: index\n });\n });\n\n return _this;\n }\n\n return PluginsTabStateContainer;\n}(Container);\n\nexport { PluginsTabStateContainer as default };","import React from \"react\";\nimport { Subscribe } from \"unstated\";\nimport EditorStateContainer from \"../state/editor\";\nimport PluginsTabStateContainer from \"../state/plugins-tab\";\nimport { InfoPanel } from \"../components/info-panel\";\nimport { Heading } from \"../components/heading\";\nimport JSONTree from \"../components/json-tree\";\nimport { List } from \"../components/list\";\nimport { SplitView, SplitViewCol } from \"../components/split-view\";\nexport function valueRenderer(raw) {\n if (typeof (arguments.length <= 1 ? undefined : arguments[1]) === \"function\") {\n return \"func\";\n }\n\n return raw;\n}\nexport function PluginState(props) {\n return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(Heading, null, \"Plugin State\"), /*#__PURE__*/React.createElement(JSONTree, {\n data: props.pluginState,\n valueRenderer: valueRenderer\n }));\n}\nexport default function PluginsTab() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer, PluginsTabStateContainer]\n }, function (editorState, pluginsTabState) {\n var state = editorState.state.state;\n var plugins = state.plugins;\n var selectedPlugin = plugins[pluginsTabState.state.selected];\n var selectedPluginState = selectedPlugin.getState(state);\n return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(SplitViewCol, {\n noPaddings: true\n }, /*#__PURE__*/React.createElement(List, {\n items: plugins,\n getKey: function getKey(plugin) {\n return plugin.key;\n },\n title: function title(plugin) {\n return plugin.key;\n },\n isSelected: function isSelected(plugin, index) {\n return pluginsTabState.state.selected === index;\n },\n isDimmed: function isDimmed(plugin) {\n return !plugin.getState(state);\n },\n onListItemClick: function onListItemClick(plugin, index) {\n return pluginsTabState.selectPlugin(index);\n }\n })), /*#__PURE__*/React.createElement(SplitViewCol, {\n grow: true,\n sep: true\n }, selectedPluginState ? /*#__PURE__*/React.createElement(PluginState, {\n pluginState: selectedPluginState\n }) : /*#__PURE__*/React.createElement(InfoPanel, null, \"Plugin doesn't have any state\")));\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nimport { Container } from \"unstated\";\n\nvar StructureTabStateContainer = /*#__PURE__*/function (_Container) {\n _inherits(StructureTabStateContainer, _Container);\n\n var _super = _createSuper(StructureTabStateContainer);\n\n function StructureTabStateContainer() {\n var _this;\n\n _classCallCheck(this, StructureTabStateContainer);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n selectedNode: null\n });\n\n _defineProperty(_assertThisInitialized(_this), \"selectNode\", function (_ref) {\n var node = _ref.node;\n\n _this.setState({\n selectedNode: node\n });\n });\n\n return _this;\n }\n\n return StructureTabStateContainer;\n}(Container);\n\nexport { StructureTabStateContainer as default };","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Subscribe } from \"unstated\";\nimport theme from \"../theme\";\nimport EditorStateContainer from \"../state/editor\";\nimport StructureTabStateContainer from \"../state/structure-tab\";\nimport { SplitView, SplitViewCol } from \"../components/split-view\";\nimport JSONTree from \"../components/json-tree\";\nimport { Heading, HeadingWithButton, HeadingButton } from \"../components/heading\";\nvar GraphWrapper = styled(\"div\")({\n marginTop: \"12px\"\n});\nGraphWrapper.displayName = \"GraphWrapper\";\nvar BlockNodeWrapper = styled(\"div\")({});\nBlockNodeWrapper.displayName = \"BlockNodeWrapper\";\nvar BlockNodeContentView = styled(\"div\")({\n padding: \"0 12px\",\n boxSizing: \"border-box\",\n borderLeft: \"1px solid \".concat(theme.white20),\n borderRight: \"1px solid \".concat(theme.white20)\n});\nBlockNodeContentView.displayName = \"BlockNodeContentView\";\nvar BlockNodeContentViewWithInline = styled(\"div\")({\n padding: \"0 12px\",\n display: \"flex\",\n width: \"100%\",\n boxSizing: \"border-box\",\n borderLeft: \"1px solid \".concat(theme.white20),\n borderRight: \"1px solid \".concat(theme.white20),\n flexWrap: \"wrap\"\n});\nBlockNodeContentViewWithInline.displayName = \"BlockNodeContentViewWithInline\";\nvar BlockNodeView = styled(\"div\")({\n width: \"100%\",\n marginBottom: \"3px\",\n boxSizing: \"border-box\",\n display: \"flex\",\n \"&:hover\": {\n cursor: \"pointer\"\n }\n}, function (_ref) {\n var bg = _ref.bg;\n return {\n background: bg\n };\n});\nBlockNodeView.displayName = \"BlockNodeView\";\nvar Side = styled(\"div\")({\n padding: \"3px 6px\",\n background: \"rgba(255, 255, 255, 0.3)\"\n});\nSide.displayName = \"Side\";\nvar Center = styled(\"div\")({\n flexGrow: 1,\n padding: \"3px 9px\",\n whiteSpace: \"pre\"\n});\nCenter.displayName = \"Center\";\nvar InlineNodeView = styled(\"div\")({\n flexGrow: 1,\n marginBottom: \"3px\",\n display: \"flex\",\n boxSizing: \"border-box\",\n \"&:hover\": {\n cursor: \"pointer\"\n }\n}, function (_ref2) {\n var bg = _ref2.bg;\n return {\n background: bg\n };\n});\nInlineNodeView.displayName = \"InlineNodeView\";\nexport function BlockNodeContent(props) {\n if (!props.content || !props.content.content || !props.content.content.length) return null;\n var content = props.content.content;\n\n if (content[0].isBlock) {\n var _startPos = props.startPos + 1;\n\n return /*#__PURE__*/React.createElement(BlockNodeContentView, null, content.map(function (childNode, index) {\n var pos = _startPos;\n _startPos += childNode.nodeSize;\n return /*#__PURE__*/React.createElement(BlockNode, {\n key: index,\n node: childNode,\n colors: props.colors,\n onNodeSelected: props.onNodeSelected,\n startPos: pos\n });\n }));\n }\n\n var startPos = props.startPos;\n return /*#__PURE__*/React.createElement(BlockNodeContentViewWithInline, null, content.map(function (childNode, index) {\n var pos = startPos;\n startPos += childNode.nodeSize;\n return /*#__PURE__*/React.createElement(InlineNode, {\n key: index,\n index: index,\n node: childNode,\n bg: props.colors[childNode.type.name],\n onNodeSelected: props.onNodeSelected,\n startPos: pos\n });\n }));\n}\nexport function BlockNode(props) {\n var colors = props.colors,\n node = props.node,\n startPos = props.startPos;\n var color = colors[node.type.name];\n return /*#__PURE__*/React.createElement(BlockNodeWrapper, null, /*#__PURE__*/React.createElement(BlockNodeView, {\n bg: color,\n onClick: function onClick() {\n return props.onNodeSelected({\n node: node\n });\n }\n }, /*#__PURE__*/React.createElement(Side, null, startPos), /*#__PURE__*/React.createElement(Center, null, node.type.name), /*#__PURE__*/React.createElement(Side, null, startPos + node.nodeSize - 1)), /*#__PURE__*/React.createElement(BlockNodeContent, {\n content: node.content,\n colors: colors,\n onNodeSelected: props.onNodeSelected,\n startPos: startPos\n }));\n}\nexport function InlineNode(props) {\n var node = props.node,\n bg = props.bg,\n startPos = props.startPos,\n index = props.index;\n var marks = node.marks.length === 1 ? \" - [\".concat(node.marks[0].type.name, \"]\") : node.marks.length > 1 ? \" - [\".concat(node.marks.length, \" marks]\") : \"\";\n return /*#__PURE__*/React.createElement(InlineNodeView, {\n onClick: function onClick() {\n return props.onNodeSelected({\n node: node\n });\n },\n bg: bg\n }, index === 0 ? /*#__PURE__*/React.createElement(Side, null, startPos) : null, /*#__PURE__*/React.createElement(Center, null, node.type.name, \" \", marks), /*#__PURE__*/React.createElement(Side, null, startPos + node.nodeSize));\n}\nexport default function GraphTab() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer, StructureTabStateContainer]\n }, function (editorState, structureTabState) {\n var _editorState$state = editorState.state,\n state = _editorState$state.state,\n nodeColors = _editorState$state.nodeColors;\n var selectedNode = structureTabState.state.selectedNode;\n var selected = selectedNode ? selectedNode : state.doc;\n return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(SplitViewCol, {\n grow: true\n }, /*#__PURE__*/React.createElement(Heading, null, \"Current Doc\"), /*#__PURE__*/React.createElement(GraphWrapper, null, /*#__PURE__*/React.createElement(BlockNode, {\n colors: nodeColors,\n node: state.doc,\n startPos: 0,\n onNodeSelected: structureTabState.selectNode\n }))), /*#__PURE__*/React.createElement(SplitViewCol, {\n sep: true,\n minWidth: 200,\n maxWidth: 300\n }, /*#__PURE__*/React.createElement(HeadingWithButton, null, /*#__PURE__*/React.createElement(Heading, null, \"Node Info\"), /*#__PURE__*/React.createElement(HeadingButton, {\n onClick: function onClick() {\n return console.log(selected);\n }\n }, \"Log Node\")), /*#__PURE__*/React.createElement(JSONTree, {\n data: selected.toJSON(),\n hideRoot: true,\n shouldExpandNode: function shouldExpandNode() {\n return selected.type.name !== \"doc\" ? true : false;\n }\n })));\n });\n}","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport { Subscribe } from \"unstated\";\nimport EditorStateContainer from \"../state/editor\";\nimport { SplitView, SplitViewCol } from \"../components/split-view\";\nimport { List } from \"../components/list\";\nimport { InfoPanel } from \"../components/info-panel\";\nimport theme from \"../theme\";\nvar ActionButton = styled(\"button\")({\n padding: \"6px 10px\",\n fontWeight: 400,\n letterSpacing: \"1px\",\n fontSize: \"11px\",\n color: theme.white80,\n background: theme.white10,\n textTransform: \"uppercase\",\n transition: \"background 0.3s, color 0.3s\",\n borderRadius: \"2px\",\n border: \"none\",\n \"& + &\": {\n marginLeft: \"4px\"\n },\n \"&:hover\": {\n background: theme.main40,\n color: theme.white,\n cursor: \"pointer\"\n },\n \"&:focus\": {\n outline: \"none\"\n },\n \"&:active\": {\n background: theme.main60\n }\n});\nActionButton.displayName = \"ActionButton\";\nvar ListItem = styled(\"div\")({\n height: \"24px\",\n lineHeight: \"24px\",\n display: \"flex\",\n width: \"100%\"\n});\nListItem.displayName = \"ListItem\";\nvar ListItemTitle = styled(\"div\")({\n flexGrow: 1\n});\nListItemTitle.displayName = \"ListItemTitle\";\nexport function SnapshotsList(_ref) {\n var snapshots = _ref.snapshots,\n deleteSnapshot = _ref.deleteSnapshot,\n loadSnapshot = _ref.loadSnapshot;\n return /*#__PURE__*/React.createElement(List, {\n getKey: function getKey(item) {\n return item.name + item.timestamp;\n },\n items: snapshots,\n title: function title(item) {\n return /*#__PURE__*/React.createElement(ListItem, null, /*#__PURE__*/React.createElement(ListItemTitle, null, item.name), /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(ActionButton, {\n onClick: function onClick() {\n return deleteSnapshot(item);\n }\n }, \"delete\"), /*#__PURE__*/React.createElement(ActionButton, {\n onClick: function onClick() {\n return loadSnapshot(item);\n }\n }, \"restore\")));\n }\n });\n}\n\nvar SnapshotTab = /*#__PURE__*/function (_React$Component) {\n _inherits(SnapshotTab, _React$Component);\n\n var _super = _createSuper(SnapshotTab);\n\n function SnapshotTab() {\n _classCallCheck(this, SnapshotTab);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(SnapshotTab, [{\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(nextProps) {\n return this.props.snapshots !== nextProps.snapshots;\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$props = this.props,\n snapshots = _this$props.snapshots,\n loadSnapshot = _this$props.loadSnapshot,\n deleteSnapshot = _this$props.deleteSnapshot;\n return /*#__PURE__*/React.createElement(SplitView, null, /*#__PURE__*/React.createElement(SplitViewCol, {\n noPaddings: true,\n grow: true\n }, snapshots && snapshots.length ? /*#__PURE__*/React.createElement(SnapshotsList, {\n snapshots: snapshots,\n loadSnapshot: loadSnapshot,\n deleteSnapshot: deleteSnapshot\n }) : /*#__PURE__*/React.createElement(InfoPanel, null, \"No saved snapshots yet. Press \\\"Save Snapshot\\\" button to add one.\")));\n }\n }]);\n\n return SnapshotTab;\n}(React.Component);\n\nexport default function SnapshotsTabContainer() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer]\n }, function (_ref2) {\n var snapshots = _ref2.state.snapshots,\n loadSnapshot = _ref2.loadSnapshot,\n deleteSnapshot = _ref2.deleteSnapshot;\n return /*#__PURE__*/React.createElement(SnapshotTab, {\n snapshots: snapshots,\n loadSnapshot: loadSnapshot,\n deleteSnapshot: deleteSnapshot\n });\n });\n}","import styled from \"@emotion/styled\";\nvar CSSReset = styled(\"div\")({\n fontSize: \"100%\",\n lineHeight: 1,\n \"& li + li\": {\n margin: 0\n }\n});\nCSSReset.displayName = \"CSSReset\";\nexport default CSSReset;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { 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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\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; }\n\nimport React from \"react\";\nimport styled from \"@emotion/styled\";\nimport theme from \"../../theme\";\nvar icon = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAQAAAACNCElAAAAxklEQVRIx+2Vuw3DMAxEXWUD9VrKvTYJRzAygWpPkSVcBlDtJS6Fg8AQqQ+lAEECXU08iid+pmnoTwWDKzbU6IEbLnkYQaMlD9uA6iqAUArQwDBgX4T1Z+uF4Q4PB/sZmH/1e1BCRZiLhqgWKsJsYjJLUPkDEJKjvmPWwnwCtcKoW4O5VnpTFmaVb8o3LXONOiZAcI3aYe5UIFXiUmv77doOc7oUpDoozLU5iiPFqYtcW4W01LJP3FEiwzXBLG9SUBNq6Ef0BJ8IApq+rItIAAAAAElFTkSuQmCC\";\nvar NodePickerStyled = styled(\"div\")({\n position: \"absolute\",\n pointerEvents: \"none\",\n top: 0,\n left: 0,\n background: \"rgba(0, 0, 255, 0.3)\",\n zIndex: 99999,\n cursor: \"pointer\"\n}, function (_ref) {\n var nodePicker = _ref.nodePicker;\n return {\n transform: \"translateX(\".concat(nodePicker.left, \"px) translateY(\").concat(nodePicker.top, \"px)\"),\n display: nodePicker.top && nodePicker.left ? \"block\" : \"none\",\n width: \"\".concat(nodePicker.width, \"px\"),\n height: \"\".concat(nodePicker.height, \"px\")\n };\n});\nNodePickerStyled.displayName = \"NodePickerStyled\";\n\nvar NodePicker = /*#__PURE__*/function (_React$Component) {\n _inherits(NodePicker, _React$Component);\n\n var _super = _createSuper(NodePicker);\n\n function NodePicker() {\n var _this;\n\n _classCallCheck(this, NodePicker);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _super.call.apply(_super, [this].concat(args));\n\n _defineProperty(_assertThisInitialized(_this), \"handleMouseMove\", function (e) {\n if (!_this.props.nodePicker.active) return;\n\n _this.props.onMouseMove(e.target);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"handleNodeClick\", function (e) {\n if (!_this.props.nodePicker.active) return;\n e.preventDefault();\n\n _this.props.onSelect(e.target);\n });\n\n _defineProperty(_assertThisInitialized(_this), \"closePicker\", function () {\n if (!_this.props.nodePicker.active) return;\n\n _this.props.onClose();\n });\n\n return _this;\n }\n\n _createClass(NodePicker, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.nodePicker.active) {\n this.initEventHandlers();\n }\n }\n }, {\n key: \"componentWillReceiveProps\",\n value: function componentWillReceiveProps(nextProps) {\n this.destroyEventHandlers();\n\n if (nextProps.nodePicker.active) {\n this.initEventHandlers();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.destroyEventHandlers();\n }\n }, {\n key: \"initEventHandlers\",\n value: function initEventHandlers() {\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"click\", this.handleNodeClick);\n document.addEventListener(\"keydown\", this.closePicker);\n }\n }, {\n key: \"destroyEventHandlers\",\n value: function destroyEventHandlers() {\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"click\", this.handleNodeClick);\n document.removeEventListener(\"keydown\", this.closePicker);\n }\n }, {\n key: \"render\",\n value: function render() {\n return /*#__PURE__*/React.createElement(NodePickerStyled, {\n nodePicker: this.props.nodePicker\n });\n }\n }]);\n\n return NodePicker;\n}(React.Component);\n\nvar NodePickerTrigger = styled(\"div\")({\n position: \"absolute\",\n right: \"4px\",\n top: \"-28px\",\n width: \"24px\",\n height: \"24px\",\n borderRadius: \"3px\",\n \"&:hover\": {\n backgroundColor: theme.main80,\n cursor: \"pointer\"\n }\n}, function (_ref2) {\n var isActive = _ref2.isActive;\n return {\n background: \"\".concat(isActive ? theme.main : theme.main60, \" url(\\\"\").concat(icon, \"\\\")\"),\n backgroundSize: \"20px 20px\",\n backgroundRepeat: \"none\",\n backgroundPosition: \"50% 50%\"\n };\n});\nNodePickerTrigger.displayName = \"NodePickerTrigger\";\nexport { NodePicker, NodePickerTrigger };","import styled from \"@emotion/styled\";\nimport theme from \"../theme\";\nvar SaveSnapshotButton = styled(\"div\")({\n position: \"absolute\",\n right: \"32px\",\n top: \"-28px\",\n color: theme.white,\n background: theme.main60,\n fontSize: \"12px\",\n lineHeight: \"25px\",\n padding: \"0 6px\",\n height: \"24px\",\n backgroundSize: \"20px 20px\",\n backgroundRepeat: \"none\",\n backgroundPosition: \"50% 50%\",\n borderRadius: \"3px\",\n \"&:hover\": {\n backgroundColor: theme.main80,\n cursor: \"pointer\"\n }\n});\nSaveSnapshotButton.displayName = \"SaveSnapshotButton\";\nexport default SaveSnapshotButton;","import React from \"react\";\nimport Dock from \"react-dock\";\nimport styled from \"@emotion/styled\";\nimport { Tab, Tabs, TabList, TabPanel } from \"./components/tabs\";\nimport { Subscribe } from \"unstated\";\nimport GlobalStateContainer from \"./state/global\";\nimport EditorStateContainer from \"./state/editor\";\nimport StateTab from \"./tabs/state\";\nimport HistoryTab from \"./tabs/history\";\nimport SchemaTab from \"./tabs/schema\";\nimport PluginsTab from \"./tabs/plugins\";\nimport StructureTab from \"./tabs/structure\";\nimport SnapshotsTab from \"./tabs/snapshots\";\nimport CSSReset from \"./components/css-reset\";\nimport { NodePicker, NodePickerTrigger } from \"./components/node-picker\";\nimport SaveSnapshotButton from \"./components/save-snapshot-button\";\nimport theme from \"./theme\";\nvar DockContainer = styled(\"div\")({\n width: \"100%\",\n height: \"100%\",\n overflow: \"hidden\",\n background: theme.mainBg,\n fontFamily: \"Helvetica Neue, Calibri Light, Roboto, sans-serif\",\n fontSize: \"13px\"\n});\nDockContainer.displayName = \"DockContainer\";\nvar CloseButton = styled(\"button\")({\n background: \"none\",\n border: \"none\",\n position: \"absolute\",\n right: 0,\n color: theme.white60,\n fontSize: \"18px\",\n \"&:hover\": {\n cursor: \"pointer\",\n background: theme.white05,\n color: theme.white\n },\n \"&:focus\": {\n outline: \"none\"\n }\n});\nCloseButton.displayName = \"CloseButton\";\nexport default function DevToolsExpanded() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [GlobalStateContainer]\n }, function (globalState) {\n var _globalState$state = globalState.state,\n defaultSize = _globalState$state.defaultSize,\n tabIndex = _globalState$state.tabIndex;\n var toggleDevTools = globalState.toggleDevTools,\n updateBodyMargin = globalState.updateBodyMargin,\n selectTab = globalState.selectTab;\n return /*#__PURE__*/React.createElement(CSSReset, null, /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer]\n }, function (_ref) {\n var nodePicker = _ref.state.nodePicker,\n deactivatePicker = _ref.deactivatePicker,\n updateNodePickerPossition = _ref.updateNodePickerPossition,\n nodePickerSelect = _ref.nodePickerSelect;\n return /*#__PURE__*/React.createElement(NodePicker, {\n nodePicker: nodePicker,\n onClose: deactivatePicker,\n onMouseMove: updateNodePickerPossition,\n onSelect: function onSelect(target) {\n nodePickerSelect(target);\n selectTab(0); // Switch to the \"State\" tab.\n }\n });\n }), /*#__PURE__*/React.createElement(Dock, {\n position: \"bottom\",\n dimMode: \"none\",\n isVisible: true,\n defaultSize: defaultSize,\n onSizeChange: updateBodyMargin\n }, function () {\n return /*#__PURE__*/React.createElement(DockContainer, null, /*#__PURE__*/React.createElement(CloseButton, {\n onClick: toggleDevTools\n }, \"\\xD7\"), /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer]\n }, function (_ref2) {\n var nodePicker = _ref2.state.nodePicker,\n deactivatePicker = _ref2.deactivatePicker,\n activatePicker = _ref2.activatePicker;\n return /*#__PURE__*/React.createElement(NodePickerTrigger, {\n onClick: nodePicker.active ? deactivatePicker : activatePicker,\n isActive: nodePicker.active\n });\n }), /*#__PURE__*/React.createElement(Subscribe, {\n to: [EditorStateContainer]\n }, function (_ref3) {\n var saveSnapshot = _ref3.saveSnapshot;\n return /*#__PURE__*/React.createElement(SaveSnapshotButton, {\n onClick: saveSnapshot\n }, \"Save Snapshot\");\n }), /*#__PURE__*/React.createElement(Tabs, {\n onSelect: selectTab,\n selectedIndex: tabIndex\n }, /*#__PURE__*/React.createElement(TabList, null, /*#__PURE__*/React.createElement(Tab, {\n index: \"state\"\n }, \"State\"), /*#__PURE__*/React.createElement(Tab, {\n index: \"history\"\n }, \"History\"), /*#__PURE__*/React.createElement(Tab, {\n index: \"plugins\"\n }, \"Plugins\"), /*#__PURE__*/React.createElement(Tab, {\n index: \"schema\"\n }, \"Schema\"), /*#__PURE__*/React.createElement(Tab, {\n index: \"structure\"\n }, \"Structure\"), /*#__PURE__*/React.createElement(Tab, {\n index: \"snapshots\"\n }, \"Snapshots\")), /*#__PURE__*/React.createElement(TabPanel, null, function (_ref4) {\n var index = _ref4.index;\n\n switch (index) {\n case \"state\":\n return /*#__PURE__*/React.createElement(StateTab, null);\n\n case \"history\":\n return /*#__PURE__*/React.createElement(HistoryTab, null);\n\n case \"plugins\":\n return /*#__PURE__*/React.createElement(PluginsTab, null);\n\n case \"schema\":\n return /*#__PURE__*/React.createElement(SchemaTab, null);\n\n case \"structure\":\n return /*#__PURE__*/React.createElement(StructureTab, null);\n\n case \"snapshots\":\n return /*#__PURE__*/React.createElement(SnapshotsTab, null);\n\n default:\n return /*#__PURE__*/React.createElement(StateTab, null);\n }\n })));\n }));\n });\n}","import React from \"react\";\nimport { Subscribe } from \"unstated\";\nimport GlobalStateContainer from \"./state/global\";\nimport DevToolsCollapsed from \"./dev-tools-collapsed\";\nimport DevToolsExpanded from \"./dev-tools-expanded\";\nexport default function DevTools() {\n return /*#__PURE__*/React.createElement(Subscribe, {\n to: [GlobalStateContainer]\n }, function (_ref) {\n var state = _ref.state,\n toggleDevTools = _ref.toggleDevTools;\n return state.opened ? /*#__PURE__*/React.createElement(DevToolsExpanded, null) : /*#__PURE__*/React.createElement(DevToolsCollapsed, {\n onClick: toggleDevTools\n });\n });\n}","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"unstated\";\nimport DevTools from \"./dev-tools\";\nimport EditorStateContainer from \"./state/editor\";\nvar DEVTOOLS_CLASS_NAME = \"__prosemirror-dev-tools__\";\n\nfunction createPlace() {\n var place = document.querySelector(\".\".concat(DEVTOOLS_CLASS_NAME));\n\n if (!place) {\n place = document.createElement(\"div\");\n place.className = DEVTOOLS_CLASS_NAME;\n document.body.appendChild(place);\n } else {\n ReactDOM.unmountComponentAtNode(place);\n place.innerHTML = \"\";\n }\n\n return place;\n}\n\nfunction applyDevTools(editorView, props) {\n var place = createPlace();\n var editorState = new EditorStateContainer(editorView, props);\n ReactDOM.render( /*#__PURE__*/React.createElement(Provider, {\n inject: [editorState]\n }, /*#__PURE__*/React.createElement(DevTools, null)), place);\n}\n\nexport default applyDevTools;\nexport { applyDevTools };","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","'use strict';\n\nconst uuid = require('uuid').v4;\n\n/**\n * Generates a JSON-RPC 1.0 or 2.0 request\n * @param {String} method Name of method to call\n * @param {Array|Object} params Array of parameters passed to the method as specified, or an object of parameter names and corresponding value\n * @param {String|Number|null} [id] Request ID can be a string, number, null for explicit notification or left out for automatic generation\n * @param {Object} [options]\n * @param {Number} [options.version=2] JSON-RPC version to use (1 or 2)\n * @param {Boolean} [options.notificationIdNull=false] When true, version 2 requests will set id to null instead of omitting it\n * @param {Function} [options.generator] Passed the request, and the options object and is expected to return a request ID\n * @throws {TypeError} If any of the parameters are invalid\n * @return {Object} A JSON-RPC 1.0 or 2.0 request\n * @memberOf Utils\n */\nconst generateRequest = function(method, params, id, options) {\n if(typeof method !== 'string') {\n throw new TypeError(method + ' must be a string');\n }\n\n options = options || {};\n\n // check valid version provided\n const version = typeof options.version === 'number' ? options.version : 2;\n if (version !== 1 && version !== 2) {\n throw new TypeError(version + ' must be 1 or 2');\n }\n\n const request = {\n method: method\n };\n\n if(version === 2) {\n request.jsonrpc = '2.0';\n }\n\n if(params) {\n // params given, but invalid?\n if(typeof params !== 'object' && !Array.isArray(params)) {\n throw new TypeError(params + ' must be an object, array or omitted');\n }\n request.params = params;\n }\n\n // if id was left out, generate one (null means explicit notification)\n if(typeof(id) === 'undefined') {\n const generator = typeof options.generator === 'function' ? options.generator : function() { return uuid(); };\n request.id = generator(request, options);\n } else if (version === 2 && id === null) {\n // we have a version 2 notification\n if (options.notificationIdNull) {\n request.id = null; // id will not be set at all unless option provided\n }\n } else {\n request.id = id;\n }\n\n return request;\n};\n\nmodule.exports = generateRequest;\n","'use strict';\n\nconst uuid = require('uuid').v4;\nconst generateRequest = require('../../generateRequest');\n\n/**\n * Constructor for a Jayson Browser Client that does not depend any node.js core libraries\n * @class ClientBrowser\n * @param {Function} callServer Method that calls the server, receives the stringified request and a regular node-style callback\n * @param {Object} [options]\n * @param {Function} [options.reviver] Reviver function for JSON\n * @param {Function} [options.replacer] Replacer function for JSON\n * @param {Number} [options.version=2] JSON-RPC version to use (1|2)\n * @param {Function} [options.generator] Function to use for generating request IDs\n * @param {Boolean} [options.notificationIdNull=false] When true, version 2 requests will set id to null instead of omitting it\n * @return {ClientBrowser}\n */\nconst ClientBrowser = function(callServer, options) {\n if(!(this instanceof ClientBrowser)) {\n return new ClientBrowser(callServer, options);\n }\n\n if (!options) {\n options = {};\n }\n\n this.options = {\n reviver: typeof options.reviver !== 'undefined' ? options.reviver : null,\n replacer: typeof options.replacer !== 'undefined' ? options.replacer : null,\n generator: typeof options.generator !== 'undefined' ? options.generator : function() { return uuid(); },\n version: typeof options.version !== 'undefined' ? options.version : 2,\n notificationIdNull: typeof options.notificationIdNull === 'boolean' ? options.notificationIdNull : false,\n };\n\n this.callServer = callServer;\n};\n\nmodule.exports = ClientBrowser;\n\n/**\n * Creates a request and dispatches it if given a callback.\n * @param {String|Array} method A batch request if passed an Array, or a method name if passed a String\n * @param {Array|Object} [params] Parameters for the method\n * @param {String|Number} [id] Optional id. If undefined an id will be generated. If null it creates a notification request\n * @param {Function} [callback] Request callback. If specified, executes the request rather than only returning it.\n * @throws {TypeError} Invalid parameters\n * @return {Object} JSON-RPC 1.0 or 2.0 compatible request\n */\nClientBrowser.prototype.request = function(method, params, id, callback) {\n const self = this;\n let request = null;\n\n // is this a batch request?\n const isBatch = Array.isArray(method) && typeof params === 'function';\n\n if (this.options.version === 1 && isBatch) {\n throw new TypeError('JSON-RPC 1.0 does not support batching');\n }\n\n // is this a raw request?\n const isRaw = !isBatch && method && typeof method === 'object' && typeof params === 'function';\n\n if(isBatch || isRaw) {\n callback = params;\n request = method;\n } else {\n if(typeof id === 'function') {\n callback = id;\n // specifically undefined because \"null\" is a notification request\n id = undefined;\n }\n\n const hasCallback = typeof callback === 'function';\n\n try {\n request = generateRequest(method, params, id, {\n generator: this.options.generator,\n version: this.options.version,\n notificationIdNull: this.options.notificationIdNull,\n });\n } catch(err) {\n if(hasCallback) {\n return callback(err);\n }\n throw err;\n }\n\n // no callback means we should just return a raw request\n if(!hasCallback) {\n return request;\n }\n\n }\n\n let message;\n try {\n message = JSON.stringify(request, this.options.replacer);\n } catch(err) {\n return callback(err);\n }\n\n this.callServer(message, function(err, response) {\n self._parseResponse(err, response, callback);\n });\n\n // always return the raw request\n return request;\n};\n\n/**\n * Parses a response from a server\n * @param {Object} err Error to pass on that is unrelated to the actual response\n * @param {String} responseText JSON-RPC 1.0 or 2.0 response\n * @param {Function} callback Callback that will receive different arguments depending on the amount of parameters\n * @private\n */\nClientBrowser.prototype._parseResponse = function(err, responseText, callback) {\n if(err) {\n callback(err);\n return;\n }\n\n if(!responseText) {\n // empty response text, assume that is correct because it could be a\n // notification which jayson does not give any body for\n return callback();\n }\n\n let response;\n try {\n response = JSON.parse(responseText, this.options.reviver);\n } catch(err) {\n return callback(err);\n }\n\n if(callback.length === 3) {\n // if callback length is 3, we split callback arguments on error and response\n\n // is batch response?\n if(Array.isArray(response)) {\n\n // neccesary to split strictly on validity according to spec here\n const isError = function(res) {\n return typeof res.error !== 'undefined';\n };\n\n const isNotError = function (res) {\n return !isError(res);\n };\n\n return callback(null, response.filter(isError), response.filter(isNotError));\n \n } else {\n\n // split regardless of validity\n return callback(null, response.error, response.result);\n \n }\n \n }\n\n callback(null, response);\n};\n","/*\r\n * browser.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nexport function qtWebEngineVersion() {\r\n const pattern = new RegExp(\"QtWebEngine/([^\\\\s]+)\", \"i\");\r\n const match = navigator.userAgent.match(pattern);\r\n if (match) {\r\n return match[1];\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function isWindows() {\r\n return navigator.userAgent.search('Windows') !== -1;\r\n}","/*\r\n * doi.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { DOIServer } from \"editor-types\";\r\nexport type { DOIServer }\r\n\r\n// ^10.\\d{4,9}/[-._;()/:A-Z0-9]+$\r\n// Core regexes come from https://www.crossref.org/blog/dois-and-matching-regular-expressions/\r\nconst kModernCrossrefDOIRegex = /10.\\d{4,9}\\/[-._;()/:A-Z0-9]+$/i;\r\nconst kEarlyWileyCrossrefDOIRegex = /10.1002\\/[^\\s]+$/i;\r\nconst kOtherCrossrefDOIRegex1 = /10.\\\\d{4}\\/\\d+-\\d+X?(\\d+)\\d+<[\\d\\w]+:[\\d\\w]*>\\d+.\\d+.\\w+;\\d$/i;\r\nconst kOtherCrossrefDOIRegex2 = /10.1021\\/\\w\\w\\d+$/i;\r\nconst kOtherCrossrefDOIRegex3 = /10.1207\\/[\\w\\d]+&\\d+_\\d+$/i;\r\n\r\nconst kCrossrefMatches = [\r\n kModernCrossrefDOIRegex,\r\n kEarlyWileyCrossrefDOIRegex,\r\n kOtherCrossrefDOIRegex1,\r\n kOtherCrossrefDOIRegex2,\r\n kOtherCrossrefDOIRegex3,\r\n];\r\n\r\n// Determines whether a a given string may be a DOI\r\n// Note that this will validate the form of the string, but not\r\n// whether it is actually a registered DOI\r\nexport function hasDOI(token: string): boolean {\r\n return findDOI(token) !== undefined;\r\n}\r\n\r\nexport function findDOI(token: string): string | undefined {\r\n let match = null;\r\n kCrossrefMatches.find(regex => {\r\n match = token.match(regex);\r\n return match && match[0].length > 0;\r\n });\r\n\r\n if (match === null) {\r\n return undefined;\r\n } else {\r\n return match[0];\r\n }\r\n}\r\n\r\nexport function urlForDOI(doi: string): string {\r\n return `https://doi.org/${doi}`;\r\n}\r\n","module.exports = {\n\"a\":\"\",\n\"ā\":\"吖锕錒\",\n\"á\":\"嗄\",\n\"ǎ\":\"\",\n\"à\":\"\",\n\"āi\":\"哎哀埃娭溾嗳銰锿噯諰鎄\",\n\"ái\":\"啀娾捱皑凒隑嵦溰嘊敱敳皚磑癌\",\n\"ǎi\":\"毐昹娾欸絠嗳矮蔼躷噯濭藹譪霭靄\",\n\"ài\":\"艾伌欬爱砹硋堨焥隘嗌嗳塧嫒愛碍叆暧瑷僾噯壒嬡懓薆鴱懝曖璦賹餲皧瞹馤礙譺鑀鱫靉\",\n\"ān\":\"安侒峖桉氨偣庵菴谙啽媕萻葊痷腤裺鹌蓭誝鞍鞌盦諳馣鮟盫鵪韽鶕\",\n\"án\":\"玵啽雸儑\",\n\"ǎn\":\"垵俺唵埯铵揞晻罯銨\",\n\"àn\":\"厈屵屽犴岸咹按洝荌案胺豻堓隌晻暗貋儑錌闇黯\",\n\"āng\":\"肮骯\",\n\"áng\":\"卬岇昂昻\",\n\"ǎng\":\"\",\n\"àng\":\"枊盎醠\",\n\"āo\":\"泑柪眑梎軪熝爊\",\n\"áo\":\"敖厫隞嗷嗸嶅廒慠滶獓蔜遨骜摮獒璈磝墽翱聱螯翶謷謸翺鳌鏕鏖鰲鷔鼇\",\n\"ǎo\":\"艹抝芺袄眑郩镺媪媼襖\",\n\"ào\":\"岙扷抝坳垇岰柪傲奡軪奧嫯嶅慠澚隩墺嶴懊擙澳鏊驁\",\n\"ba\":\"罷\",\n\"bā\":\"丷八仈巴叭朳玐夿岜扷芭峇柭疤哱哵捌笆粑羓蚆釟豝鲃魞\",\n\"bá\":\"叐犮抜妭拔茇炦癹胈菝詙跋軷颰魃鼥\",\n\"bǎ\":\"钯鈀靶\",\n\"bà\":\"坝弝爸皅垻跁鲃魞鲅鲌罷鮁鮊覇矲霸壩灞欛\",\n\"bāi\":\"挀掰擘\",\n\"bái\":\"白\",\n\"bǎi\":\"百佰栢瓸捭竡粨絔摆擺襬\",\n\"bài\":\"呗庍拝败拜唄敗猈稗粺薭贁韛\",\n\"bān\":\"扳攽朌肦班般颁斑搬斒頒搫瘢鳻螌褩癍辬\",\n\"bǎn\":\"阪坂岅昄板版瓪钣粄舨鈑蝂魬闆\",\n\"bàn\":\"办半伴扮坢姅怑绊柈秚湴絆跘鉡靽辦瓣\",\n\"bāng\":\"邦垹帮捠梆浜邫幇幚縍幫鞤\",\n\"bǎng\":\"绑綁牓膀髈\",\n\"bàng\":\"玤挷蚄傍棒棓硥谤塝搒稖蒡蛖蜯镑縍艕謗鎊\",\n\"bāo\":\"勹包佨孢苞枹胞剝笣煲龅裦蕔褒襃闁齙\",\n\"báo\":\"窇雹\",\n\"bǎo\":\"宝怉饱保鸨宲珤堢媬葆寚飹飽褓駂鳵緥鴇賲藵寳寶靌\",\n\"bào\":\"勽犳报怉抱豹趵铇菢蚫袌報鉋鲍骲髱虣鮑儤曓嚗曝爆犦忁鑤\",\n\"bei\":\"呗唄\",\n\"bēi\":\"陂卑杯柸盃庳桮悲揹棓椑碑鹎箄諀鞞藣鵯\",\n\"běi\":\"鉳\",\n\"bèi\":\"贝孛狈貝邶备昁杮牬苝郥钡俻倍悖狽偝偹梖珼鄁備僃惫棑棓焙琲軰辈愂碚禙蓓蛽犕褙誖鞁骳輩鋇憊糒鞴鐾\",\n\"bēn\":\"泍贲栟喯犇賁锛漰錛蟦\",\n\"běn\":\"夲本苯奙畚翉楍\",\n\"bèn\":\"坋坌泍炃倴捹桳渀笨逩撪\",\n\"bēng\":\"伻祊奟崩絣閍嗙嵭痭嘣綳繃\",\n\"béng\":\"甮甭\",\n\"běng\":\"埄埲菶琣琫綳繃鞛\",\n\"bèng\":\"泵迸堋逬揼跰塴綳甏镚繃蹦鏰\",\n\"bī\":\"皀屄偪毴逼楅榌豍螕鵖鲾鎞鰏\",\n\"bí\":\"荸鼻嬶\",\n\"bǐ\":\"匕比夶朼佊吡妣沘疕纰彼毞肶柀秕俾娝笔粃紕舭啚崥筆鄙聛貏\",\n\"bì\":\"币必毕闬闭佖坒庇芘诐邲咇妼怭怶畁畀肶苾哔柲毖珌畐疪祕胇荜贲陛毙狴畢笓粊袐铋婢敝旇梐紴翍萆萞閇閈閉堛弼弻愊愎湢皕禆筚詖貱賁赑嗶彃滗滭煏痺痹睤睥腷蓖蓽蜌裨跸鉍閟飶幣弊熚獙碧稫箅箆綼蔽鄪馝幤潷獘罼襅駜髲壁嬖廦篦篳縪薜觱避鮅斃濞蹕鞞髀奰璧鄨鎞鏎饆繴襣襞鞸韠魓躃躄驆鶝朇贔鐴鷝鷩鼊\",\n\"biān\":\"辺边炞砭笾猵编萹煸牑甂箯糄編臱蝙鞕獱邉鍽鳊邊鞭鯾鯿籓籩\",\n\"biǎn\":\"贬疺窆匾貶惼揙碥稨褊糄鴘藊覵鶣\",\n\"biàn\":\"卞弁忭抃汳汴苄釆变峅玣変昪覍徧缏遍閞辡緶艑諚辧辨辩辫辮辯變\",\n\"biāo\":\"灬杓标飑骉髟彪淲猋脿颩僄墂幖摽滮蔈颮骠標熛膔膘麃瘭磦镖飚飙儦檦篻颷瀌藨謤爂臕贆鏢穮镳飈飆飊飇鑣驫\",\n\"biáo\":\"嫑\",\n\"biǎo\":\"表婊裱諘褾錶檦\",\n\"biào\":\"俵摽鳔\",\n\"biē\":\"柭憋蟞癟鳖鱉鼈虌龞\",\n\"bié\":\"別柲莂蛂徶襒蟞蹩\",\n\"biě\":\"癟\",\n\"biè\":\"別彆\",\n\"bīn\":\"汃邠玢砏宾彬梹傧斌椕滨缤槟瑸豩賓賔镔儐濒頻濱濵虨豳檳璸瀕霦繽鑌顮\",\n\"bǐn\":\"\",\n\"bìn\":\"摈殡膑髩儐擯鬂殯臏髌鬓髕鬢\",\n\"bīng\":\"冫仌仒氷冰兵幷栟掤梹蛃絣槟鋲檳\",\n\"bǐng\":\"丙邴陃怲抦秉苪昞昺柄炳饼眪偋屛寎棅琕禀稟鈵鉼鞆餅餠鞞鞸\",\n\"bìng\":\"並併幷枋垪庰倂栤病窉竝偋傡寎摒誁鮩靐\",\n\"bo\":\"啵蔔噃\",\n\"bō\":\"癶拨波癷玻剝哱盋砵趵钵饽紴缽菠袰溊碆鉢僠嶓撥播餑磻礡蹳皪驋鱍\",\n\"bó\":\"仢彴肑驳帛狛瓝苩侼柭胉郣亳挬浡瓟秡袯钹铂桲淿脖舶萡袹博殕渤葧鹁愽搏猼鉑鈸馎鲌僰榑煿牔箔膊艊誖馛駁踣鋍镈壆馞駮鮊穛襏謈嚗懪簙鎛餺鵓糪髆髉欂襮礴鑮\",\n\"bǒ\":\"癷蚾跛\",\n\"bò\":\"孹擗擘檗檘譒蘗\",\n\"bū\":\"峬庯逋钸晡鈽誧餔錻鯆鵏\",\n\"bú\":\"鳪轐醭\",\n\"bǔ\":\"卟补哺捕捬補鸔\",\n\"bù\":\"布佈吥步咘怖抪歩歨柨钚勏埔埗悑捗荹部埠婄瓿鈈廍蔀箁踄郶篰餢\",\n\"cā\":\"嚓擦攃\",\n\"cǎ\":\"礤礸\",\n\"cà\":\"遪囃\",\n\"cāi\":\"偲猜\",\n\"cái\":\"才扐材财財裁纔\",\n\"cǎi\":\"毝倸啋埰婇寀彩採棌睬跴綵踩\",\n\"cài\":\"埰寀菜蔡縩\",\n\"cān\":\"參叄飡骖叅喰湌傪嬠餐爘驂囋\",\n\"cán\":\"残蚕惭殘慚摲蝅慙蠺蠶\",\n\"cǎn\":\"惨朁慘憯穇篸黪黲\",\n\"càn\":\"灿孱傪粲嘇摻儏澯薒燦璨謲鏒\",\n\"cāng\":\"仓仺伧沧苍玱鸧倉舱傖凔嵢滄獊蒼瑲濸篬艙螥鶬\",\n\"cáng\":\"匨臧欌鑶\",\n\"càng\":\"賶\",\n\"cāo\":\"撡操糙\",\n\"cáo\":\"曺曹傮嘈嶆慒漕蓸槽褿艚螬鏪\",\n\"cǎo\":\"屮艸草愺慅懆騲\",\n\"cào\":\"肏鄵襙鼜\",\n\"cè\":\"夨冊册厕恻拺测荝敇畟側厠笧粣萗廁惻測策萴筞筴蓛箣憡簎\",\n\"cēn\":\"參叄叅嵾穇篸\",\n\"cén\":\"岑汵埁涔笒\",\n\"cēng\":\"噌\",\n\"céng\":\"层曽層嶒橧竲驓\",\n\"cèng\":\"蹭\",\n\"cī\":\"呰呲玼疵趀偨跐縒骴髊蠀齹\",\n\"cí\":\"词珁兹垐柌祠茨瓷粢詞辝慈甆辞磁雌鹚糍辤飺餈嬨濨薋鴜礠辭鷀鶿\",\n\"cǐ\":\"此佌泚玼皉啙跐鮆\",\n\"cì\":\"朿次佽刾庛茦栨莿絘蛓赐螆賜\",\n\"cōng\":\"匆囪囱苁忩枞茐怱悤棇焧葱楤漗聡蓯蔥骢暰樅樬潨熜瑽璁聦聪瞛篵聰蟌鍯繱鏓鏦騘驄\",\n\"cóng\":\"丛徔従婃孮徖從悰淙琮碂慒漎潀潈誴賨賩樷錝藂叢灇欉爜\",\n\"cǒng\":\"\",\n\"còng\":\"愡憁謥\",\n\"cōu\":\"\",\n\"cóu\":\"\",\n\"cǒu\":\"\",\n\"còu\":\"凑湊傶楱腠辏輳\",\n\"cū\":\"怚粗觕麁麄橻麆麤\",\n\"cú\":\"徂殂\",\n\"cǔ\":\"皻\",\n\"cù\":\"促猝脨媨瘄蔟誎趗噈憱踧醋瘯踿簇縬趨鼀蹙蹵蹴顣\",\n\"cuān\":\"汆撺鋑镩蹿攛躥鑹\",\n\"cuán\":\"濽櫕巑攢灒欑穳\",\n\"cuàn\":\"窜殩熶窽篡窾簒竄爨\",\n\"cuī\":\"隹崔脺催凗嵟缞墔慛摧榱漼槯磪縗鏙\",\n\"cuǐ\":\"漼熣璀趡皠\",\n\"cuì\":\"伜忰疩倅粋紣翆脃脆啐啛崒悴淬萃椊毳焠琗瘁粹綷翠膵膬濢竁襊顇臎\",\n\"cūn\":\"邨村皴踆澊竴膥\",\n\"cún\":\"存侟拵壿澊\",\n\"cǔn\":\"刌忖\",\n\"cùn\":\"寸吋籿\",\n\"cuō\":\"搓瑳遳磋蹉醝鎈\",\n\"cuó\":\"虘嵯嵳痤睉矬蒫瘥蔖鹾酂鹺酇\",\n\"cuǒ\":\"脞\",\n\"cuò\":\"剉剒厝夎挫莡莝庴措逪锉蓌错縒諎銼錯\",\n\"chā\":\"扠扱芆臿挿偛嗏插揷馇銟锸艖疀嚓鍤鎈餷\",\n\"chá\":\"秅苴垞査茬茶捈梌嵖搽猹靫楂槎詧察摖檫\",\n\"chǎ\":\"紁蹅镲鑔\",\n\"chà\":\"仛奼汊岔侘衩诧剎姹紁詫\",\n\"chāi\":\"芆肞钗釵\",\n\"chái\":\"犲侪柴豺祡喍儕\",\n\"chǎi\":\"茝\",\n\"chài\":\"虿袃訍瘥蠆囆\",\n\"chān\":\"辿觇梴搀覘裧摻緂鋓幨襜攙\",\n\"chán\":\"苂婵谗單孱棎湹禅馋煘缠僝嶃嶄獑蝉誗鋋儃嬋廛潹潺緾澶磛禪毚螹蟐鄽瀍繟蟬儳劖繵蟾酁嚵壥巉瀺欃纏纒躔镵艬讒鑱饞\",\n\"chǎn\":\"产刬旵丳斺浐剗谄啴產産铲阐蒇剷嵼摌滻嘽幝蕆諂閳骣燀簅冁繟醦譂鏟闡囅灛讇\",\n\"chàn\":\"忏刬剗硟摲幝幨燀懴儳懺羼韂顫\",\n\"chāng\":\"伥昌倀娼淐猖菖阊椙琩裮锠錩閶鲳闛鯧鼚\",\n\"cháng\":\"仩仧兏肠苌镸長尝偿常徜瓺萇場甞腸嘗塲嫦瑺膓償嚐鲿鱨\",\n\"chǎng\":\"昶惝場敞僘厰塲廠氅鋹\",\n\"chàng\":\"怅玚畅鬯唱悵焻瑒暢畼誯韔\",\n\"chāo\":\"抄弨怊欩钞訬焯超鈔勦摷綽劋樔窼\",\n\"cháo\":\"牊晁巣巢鄛鼌漅樔潮窲罺鼂轈謿\",\n\"chǎo\":\"炒眧粆焣煼槱麨巐\",\n\"chào\":\"仦仯耖觘\",\n\"chē\":\"伡車俥砗唓莗硨蛼\",\n\"ché\":\"\",\n\"chě\":\"扯偖撦奲\",\n\"chè\":\"屮彻呫坼迠烢烲焎聅掣揊硩頙徹摰撤澈勶瞮爡\",\n\"chen\":\"伧傖\",\n\"chēn\":\"肜抻郴捵棽琛嗔綝瘨瞋諃賝謓\",\n\"chén\":\"尘臣忱沉辰陈迧茞宸栕莀莐陳敐晨桭梣訦谌軙愖跈鈂煁蔯塵敶樄瘎霃螴諶薼麎曟鷐\",\n\"chěn\":\"趻硶碜墋夦磣踸鍖贂醦\",\n\"chèn\":\"衬爯疢龀偁趂趁榇稱齓齔儭嚫穪谶櫬襯讖\",\n\"chēng\":\"朾阷泟柽爯凈棦浾琤偁淨碀蛏晿牚搶赪僜憆摚稱靗撐撑緽橖橕瞠赬頳檉竀罉鎗矃穪蟶鏿鐣饓鐺\",\n\"chéng\":\"氶丞成朾呈承枨诚郕乗城埩娍宬峸洆荿埕挰晟浧珹掁珵窚脭铖堘惩揨棖椉程筬絾裎塍塖溗誠畻酲鋮憕撜澂橙檙鯎瀓懲騬\",\n\"chěng\":\"侱徎悜逞骋庱睈裎騁\",\n\"chèng\":\"秤牚稱竀穪\",\n\"chi\":\"麶\",\n\"chī\":\"吃妛哧彨胵蚩鸱瓻眵笞粚喫訵嗤媸摛痴絺樆噄殦瞝誺噭螭鴟鵄癡魑齝攡彲黐\",\n\"chí\":\"弛池驰迟坻沶狋茌迡持柢竾荎俿歭耛菭蚳赿筂貾遅跢遟馳箈箎墀徲漦踟遲篪謘鍉邌鶗鶙\",\n\"chǐ\":\"叺伬扡呎肔侈卶齿垑奓拸胣恥耻蚇袳豉欼歯袲裭誃鉹褫齒\",\n\"chì\":\"彳叱斥佁杘灻赤饬侙抶勅恜柅炽勑捇眙翄翅敕烾啻湁飭傺痸腟誃鉓雴憏瘈翤遫銐慗慸瘛翨熾懘趩鶒鷘\",\n\"chōng\":\"充忡沖茺浺珫翀舂嘃摏徸憃憧衝罿艟蹖\",\n\"chóng\":\"虫崈崇痋隀漴褈緟蝩蟲爞\",\n\"chǒng\":\"宠埫寵\",\n\"chòng\":\"铳揰銃\",\n\"chou\":\"鮘\",\n\"chōu\":\"抽牰婤掫紬搊跾瘳篘醔犨犫\",\n\"chóu\":\"怞俦诪帱栦惆梼畤紬绸菗椆畴絒愁皗稠筹裯詶酧酬綢踌儔雔嚋嬦幬懤盩薵檮燽雠疇籌躊醻讐讎雦\",\n\"chǒu\":\"丒丑吜杽杻偢瞅醜矁魗\",\n\"chòu\":\"臰遚殠\",\n\"chu\":\"橻\",\n\"chū\":\"出岀初榋摢摴樗貙櫖齣\",\n\"chú\":\"刍除芻耝厨滁蒢豠锄媰耡蒭蜍趎鉏雏犓廚篨鋤橱幮櫉藸蟵躇雛櫥蹰鶵躕\",\n\"chǔ\":\"処杵础椘處储楮禇楚褚濋儲檚璴礎齭齼\",\n\"chù\":\"亍処竌怵泏绌豖欪炪竐俶敊埱珿絀菆傗鄐慉搐滀触閦儊嘼諔憷斶歜臅黜觸矗\",\n\"chuā\":\"欻\",\n\"chuǎ\":\"\",\n\"chuà\":\"\",\n\"chuāi\":\"搋\",\n\"chuái\":\"膗\",\n\"chuǎi\":\"\",\n\"chuài\":\"啜欼膪踹\",\n\"chuān\":\"巛川氚穿猭瑏\",\n\"chuán\":\"舡舩剶船圌遄傳椯椽歂暷篅膞輲\",\n\"chuǎn\":\"舛荈喘堾歂僢踳\",\n\"chuàn\":\"汌串玔钏釧猭賗鶨\",\n\"chuāng\":\"刅疮窓創窗牎摐牕瘡窻\",\n\"chuáng\":\"床牀喠噇朣橦\",\n\"chuǎng\":\"闯傸磢闖\",\n\"chuàng\":\"怆刱剏剙創愴\",\n\"chuī\":\"吹炊龡\",\n\"chuí\":\"垂倕埀桘陲捶菙圌搥棰腄槌硾锤箠錘鎚顀\",\n\"chuǐ\":\"\",\n\"chuì\":\"惙\",\n\"chūn\":\"芚旾杶春萅媋暙椿槆瑃箺蝽橁輴櫄鰆鶞\",\n\"chún\":\"纯肫陙唇浱純莼脣湻犉滣蒓鹑漘蓴膞醇醕錞鯙鶉\",\n\"chǔn\":\"朐偆萶惷睶賰蠢\",\n\"chuō\":\"逴趠踔戳繛\",\n\"chuò\":\"辶吷辵拺哾娖娕啜婥婼惙涰淖辍酫綽踀箹輟鋜龊擉磭餟繛歠鏃嚽齪鑡孎\",\n\"da\":\"繨\",\n\"dā\":\"咑哒耷笚嗒搭褡噠墶撘鎝鎉\",\n\"dá\":\"达迏迖迚呾妲怛沓垯炟羍荅荙畗剳匒惮畣笪逹溚詚達跶靼憚薘鞑燵蟽鐽韃龖龘\",\n\"dǎ\":\"\",\n\"dà\":\"亣汏眔\",\n\"dāi\":\"呆呔獃懛\",\n\"dǎi\":\"歹逮傣\",\n\"dài\":\"代诒轪侢垈岱帒甙绐迨带怠柋殆玳贷帯貣軑埭帶紿蚮袋軚逮釱棣詒貸軩瑇跢廗箉叇曃緿蝳駘鮘鴏戴艜黛簤蹛瀻霴襶黱靆\",\n\"dān\":\"丹妉単眈砃耼耽郸聃躭酖單媅愖殚瘅匰箪褝鄲頕儋勯擔殫甔癉襌簞聸\",\n\"dǎn\":\"伔刐抌玬瓭胆衴疸紞赕亶馾撢撣賧燀黕膽皽黵\",\n\"dàn\":\"旦但帎呾沊泹狚诞唌柦疍訑啗啖惔惮淡萏蛋啿弾氮腅蜑觛亶瘅窞蓞誕僤噉馾髧儋嘾彈憚醈憺擔澹禫餤駳鴠癉膻癚嚪繵贉霮饏黮\",\n\"dāng\":\"珰裆筜當儅噹澢璫襠簹艡蟷鐺闣\",\n\"dǎng\":\"党谠當擋譡黨攩灙欓讜\",\n\"dàng\":\"氹凼圵宕砀垱荡档偒菪婸崵愓瓽逿嵣當雼潒碭儅瞊蕩趤壋擋檔璗盪礑簜蘯闣\",\n\"dāo\":\"刀刂忉朷氘舠釖鱽裯魛螩\",\n\"dáo\":\"捯\",\n\"dǎo\":\"导岛陦島捣祷禂搗隝嘄嶋嶌槝導隯壔嶹擣蹈檮禱\",\n\"dào\":\"辺到帱悼梼焘盗菿椡盜絩道稲箌翢噵稻艔衜檤衟幬燾翿軇瓙纛\",\n\"de\":\"旳\",\n\"dē\":\"嘚\",\n\"dé\":\"恴淂蚮悳惪棏锝徳德鍀\",\n\"dēi\":\"嘚\",\n\"děi\":\"\",\n\"dèn\":\"扥扽\",\n\"dēng\":\"灯登豋僜噔嬁燈璒竳簦艠蹬\",\n\"děng\":\"等戥\",\n\"dèng\":\"邓凳鄧隥墱嶝憕瞪磴镫櫈瀓覴鐙\",\n\"dī\":\"氐仾低奃岻彽秪袛啲埞羝隄堤渧趆滴碮樀磾鞮鏑\",\n\"dí\":\"扚廸旳狄肑籴苖迪唙敌浟涤荻啇梑笛觌靮滌蓧馰髢嘀嫡翟蔋蔐頔敵篴镝嚁藡豴蹢鏑糴覿鸐\",\n\"dǐ\":\"氐厎坘诋邸阺呧坻弤抵拞枑柢牴砥掋菧觝詆軧楴聜骶鯳\",\n\"dì\":\"坔旳杕玓怟枤苐俤哋埅帝埊娣逓递偙梊焍珶眱祶第菂谛釱媂揥棣渧睇缔蒂遆僀楴禘腣遞鉪墆墑墬嵽摕疐碲蔕蝃遰慸甋締蝭嶳諦諟踶螮\",\n\"diǎ\":\"嗲\",\n\"diān\":\"佔敁掂傎厧嵮滇槇槙瘨窴颠蹎巅顚顛癫巓攧巔癲齻\",\n\"dián\":\"\",\n\"diǎn\":\"典奌点婰敟椣跕碘蒧蕇踮點嚸\",\n\"diàn\":\"电阽坫店垫扂玷痁钿婝惦淀奠琔殿痶蜔鈿電墊壂橂橝澱靛磹癜簟驔\",\n\"diāo\":\"刁叼汈刟虭凋奝弴彫蛁椆琱貂碉鳭瞗錭雕鮉鲷簓鼦鯛鵰\",\n\"diǎo\":\"扚屌鳥\",\n\"diào\":\"弔伄吊钓盄窎訋掉釣铞铫絩鈟竨蓧誂銚銱雿魡調瘹窵鋽藋鑃\",\n\"diē\":\"爹跌褺\",\n\"dié\":\"佚怢泆苵迭咥垤峌恎挕昳柣绖胅瓞眣耊啑戜眰谍喋堞崼幉惵揲畳絰耋臷詄趃跕軼镻叠楪殜牃牒跮嵽碟蜨褋槢艓蝶疂諜蹀鴩螲鲽鞢曡疉鰈疊氎\",\n\"diě\":\"\",\n\"diè\":\"哋\",\n\"dīng\":\"仃叮奵帄玎甼町疔盯耵虰酊釘靪\",\n\"dǐng\":\"奵艼顶酊頂鼎嵿鼑濎薡鐤\",\n\"dìng\":\"订忊饤矴定訂釘飣啶掟萣铤椗腚碇锭碠聢蝊鋌錠磸顁\",\n\"diū\":\"丟丢铥颩銩\",\n\"dōng\":\"东冬咚岽東苳昸氡倲鸫埬娻崬崠涷笗菄徚氭蝀鮗鼕鯟鶇鶫\",\n\"dǒng\":\"揰董墥嬞懂箽蕫諌\",\n\"dòng\":\"动冻侗垌姛峒恫挏栋洞狪胨迵凍戙烔胴動娻崠硐棟湩絧腖働勭燑駧霘\",\n\"dōu\":\"吺枓侸唗兜兠蔸橷瞗篼\",\n\"dóu\":\"唞\",\n\"dǒu\":\"乧阧抖钭陡蚪鈄\",\n\"dòu\":\"吋豆郖浢狵荳逗饾鬥梪毭渎脰酘痘閗窦鬦鋀餖斣瀆闘竇鬪鬬鬭\",\n\"dū\":\"厾剢阇嘟督醏闍\",\n\"dú\":\"独涜渎椟牍犊裻読獨錖凟匵嬻瀆櫝殰牘犢瓄皾騳黩讀豄贕韣髑鑟韇韥黷讟\",\n\"dǔ\":\"竺笃堵暏琽赌睹覩賭篤\",\n\"dù\":\"芏妒杜妬姤荰秺晵渡靯镀螙斁殬鍍蠧蠹\",\n\"duān\":\"耑偳剬媏端褍鍴\",\n\"duǎn\":\"短\",\n\"duàn\":\"段断塅缎葮椴煅瑖腶碫锻緞毈簖鍛斷躖籪\",\n\"duī\":\"垖堆塠痽磓镦鴭鐓鐜\",\n\"duǐ\":\"啍頧\",\n\"duì\":\"队对兊兌対杸祋怼陮敓敚隊碓綐對憞憝濧濻薱懟瀢瀩譈譵轛\",\n\"dūn\":\"吨惇蜳墪墫墩撴獤噸撉橔犜礅蹾蹲驐\",\n\"dǔn\":\"盹趸躉\",\n\"dùn\":\"伅坉庉忳沌炖盾砘逇钝顿遁鈍楯頓碷遯憞潡燉踲\",\n\"duo\":\"\",\n\"duō\":\"夛多咄哆畓剟掇敠敪毲裰跢嚉\",\n\"duó\":\"仛夺沰铎剫敓敚喥痥鈬奪凙踱鐸\",\n\"duǒ\":\"朵朶哚垜挆埵崜缍袳椯硾趓躱躲綞亸軃鬌嚲奲\",\n\"duò\":\"杕杝刴剁枤沲陊陏饳垜尮挆挅柁柂柮桗舵隋媠惰隓跢跥跺飿馱墮憜駄墯隳鵽\",\n\"ē\":\"妸妿娿婀屙痾\",\n\"é\":\"讹吪囮迗俄峉哦娥峩峨涐莪珴訛皒睋鈋锇鹅磀誐鋨頟额魤額鵞鵝譌\",\n\"ě\":\"枙娿砨惡頋噁騀鵈\",\n\"è\":\"厄戹歺岋阨呃扼苊阸呝枙砐轭咢咹垩姶洝砈匎敋蚅饿偔卾堊娾悪硆谔軛鄂阏堮堨崿惡愕湂萼豟軶遌遏鈪廅搕搤搹琧痷腭僫蝁锷鹗蕚遻頞颚餓噩擜覨諤閼餩鍔鳄歞顎礘櫮鰐鶚鰪讍齃鑩齶鱷\",\n\"ēi\":\"诶欸誒\",\n\"éi\":\"诶欸誒\",\n\"ěi\":\"诶欸誒\",\n\"èi\":\"诶欸誒\",\n\"ēn\":\"奀恩蒽煾\",\n\"ěn\":\"峎\",\n\"èn\":\"摁\",\n\"ēng\":\"鞥\",\n\"ér\":\"儿而児杒侕兒陑峏洏耏荋栭胹唲梕袻鸸粫聏輀鲕隭髵鮞鴯轜\",\n\"ěr\":\"尒尓尔耳迩洱饵栮毦珥铒衈爾鉺餌駬薾邇趰\",\n\"èr\":\"二弍弐佴刵咡贰貮貳誀樲髶\",\n\"fā\":\"冹沷発發彂醗醱\",\n\"fá\":\"乏伐姂坺垡浌疺罚茷阀栰笩傠筏瞂罰閥墢罸橃藅\",\n\"fǎ\":\"佱法峜砝鍅灋\",\n\"fà\":\"珐琺髪蕟髮\",\n\"fān\":\"帆忛犿拚畨勫噃嬏幡憣旙旛繙翻藩轓颿籓飜鱕\",\n\"fán\":\"凢凣凡匥杋柉矾籵钒舤烦舧笲釩棥煩緐墦樊蕃燔璠膰薠襎羳蹯瀿礬蘩鐇鐢蠜鷭\",\n\"fǎn\":\"反払仮返橎\",\n\"fàn\":\"氾犯奿汎泛饭范贩畈訉軓婏桳梵盕笵販軬飰飯滼嬎範輽瀪\",\n\"fāng\":\"匚方邡汸芳枋牥祊钫淓蚄堏趽鈁錺鴋\",\n\"fáng\":\"防妨房肪埅鲂魴\",\n\"fǎng\":\"仿访彷纺昉昘瓬眆倣旊眪紡舫訪髣鶭\",\n\"fàng\":\"放趽\",\n\"fēi\":\"飞妃非飛啡婓婔渄绯扉斐暃猆靟裶緋蜚霏鲱餥馡騑騛鯡飝\",\n\"féi\":\"肥疿淝腓痱蜰\",\n\"fěi\":\"朏胐匪诽奜悱斐棐榧翡蕜誹篚\",\n\"fèi\":\"吠犻芾废杮柹沸狒肺胏昲胇费俷剕厞疿砩陫屝笰萉廃費痱镄廢曊橃橨癈鼣濷蟦櫠鐨靅\",\n\"fēn\":\"吩帉纷芬昐氛玢砏竕衯紛翂梤棻訜躮酚鈖雰馚朆餴饙\",\n\"fén\":\"坆坟妢岎汾朌枌炃羒蚠蚡棼焚蒶隫墳幩濆獖蕡魵鳻橨燌燓豮鼢羵鼖豶轒鐼馩黂\",\n\"fěn\":\"粉黺\",\n\"fèn\":\"坋弅奋忿秎偾愤粪僨憤獖瞓奮橨膹糞鲼瀵鱝\",\n\"fēng\":\"丰仹凨凬夆妦沣沨凮枫炐封疯盽砜風埄峰峯莑偑桻烽琒堼崶渢猦葑锋楓犎蜂熢瘋碸僼篈鄷鋒檒豐鎽鏠酆寷灃蘴霻蠭靊飌麷\",\n\"féng\":\"夆浲逢堸溄馮摓漨綘艂縫\",\n\"fěng\":\"讽風覂唪諷\",\n\"fèng\":\"凤奉俸桻湗焨煈赗鳯鳳鴌縫賵\",\n\"fó\":\"仏仸坲梻\",\n\"fōu\":\"\",\n\"fóu\":\"紑\",\n\"fǒu\":\"缶妚炰缹缻殕雬鴀\",\n\"fū\":\"伕邞呋妋抙姇枎玞肤怤柎砆胕荂衭娐尃捊荴旉琈紨趺酜麸稃跗鈇筟綒鄜孵粰蓲敷膚鳺麩糐麬麱懯璷\",\n\"fú\":\"乀巿弗払伏凫甶刜孚扶芣芙芾咈姇宓岪帗怫枎泭绂绋苻茀俘垘枹柫柭氟洑炥玸畉畐祓罘胕茯郛韨鳬哹垺栿浮畗砩莩蚨袚匐桴涪烰琈符笰紱紼翇艴菔虙袱幅棴絥罦葍福綍艀蜉辐鉘鉜颫鳧榑稪箁箙粰褔豧韍颰幞澓蝠髴鴔諨踾輻鮄癁襆鮲黻襥鵩纀鶝\",\n\"fǔ\":\"阝呒抚甫乶府弣拊斧俌俛柎郙俯蚥釡釜捬脯辅椨焤盙腑滏蜅腐輔嘸撫頫鬴簠黼\",\n\"fù\":\"讣付妇负附咐坿彿竎阜驸复峊柎洑祔訃負赴蚥袝偩冨婏婦捬紨蚹傅媍富復秿萯蛗覄詂赋椱缚腹鲋榑禣複褔赙緮蕧蝜蝮賦駙嬔縛輹鮒賻鍑鍢鳆覆馥鰒\",\n\"gā\":\"旮伽夾嘎嘠\",\n\"gá\":\"钆軋尜釓嘎嘠噶錷\",\n\"gǎ\":\"尕玍朒嘎嘠\",\n\"gà\":\"尬魀\",\n\"gāi\":\"侅该郂陔垓姟峐荄晐赅畡祴絯隑該豥賅賌\",\n\"gǎi\":\"忋改絠\",\n\"gài\":\"丐乢匄匃杚钙摡溉葢鈣戤概槩蓋漑槪瓂\",\n\"gān\":\"甘忓迀攼玕肝咁坩泔矸苷柑玵竿疳酐粓凲尲尴筸漧鳱尶尷魐\",\n\"gǎn\":\"仠芉皯秆衦赶敢桿稈感澉趕橄擀澸篢簳鳡鱤\",\n\"gàn\":\"佄旰汵盰绀倝凎淦紺詌骭幹榦檊簳贑赣贛灨\",\n\"gāng\":\"冈冮刚纲肛岡牨疘矼缸剛罡堈崗掆釭棡犅堽摃碙綱罁鋼鎠\",\n\"gǎng\":\"岗犺崗\",\n\"gàng\":\"焵焹筻槓鋼戅戆戇\",\n\"gāo\":\"皋羔羙高皐髙臯睪槔睾槹獋橰篙糕餻櫜韟鷎鼛鷱\",\n\"gǎo\":\"夰杲菒稁搞缟槀槁稾稿镐縞藁檺藳鎬\",\n\"gào\":\"吿告勂诰郜峼祮祰锆筶禞誥鋯\",\n\"gē\":\"戈仡圪扢犵纥戓肐牫咯紇饹哥袼鸽割彁滒戨歌鴚擱謌鴿鎶\",\n\"gé\":\"呄佮佫匌挌阁革敋格鬲愅猲臵蛒裓隔颌嗝塥滆觡搿槅膈閣閤獦镉鞈韐骼臈諽輵擱鮥鮯櫊鎑鎘韚轕鞷騔\",\n\"gě\":\"個哿笴舸嘅嗰蓋鲄\",\n\"gè\":\"亇吤茖虼個硌铬箇鉻\",\n\"gěi\":\"給\",\n\"gēn\":\"根跟\",\n\"gén\":\"哏\",\n\"gěn\":\"\",\n\"gèn\":\"亙亘艮茛揯搄\",\n\"gēng\":\"刯庚畊浭耕菮椩焿絙絚赓鹒緪縆羮賡羹鶊\",\n\"gěng\":\"郠哽埂峺挭绠耿莄梗綆鲠骾鯁\",\n\"gèng\":\"堩緪縆\",\n\"gōng\":\"工弓公厷功攻杛侊糿糼肱宫紅宮恭躬龚匑塨幊愩觥躳慐匔碽篢髸觵龏龔\",\n\"gǒng\":\"廾巩汞拱唝拲栱珙嗊輁澒銾鞏\",\n\"gòng\":\"贡羾唝貢嗊愩慐熕\",\n\"gōu\":\"佝沟芶钩痀袧缑鈎溝鉤緱褠篝簼鞲韝\",\n\"gǒu\":\"芶岣狗苟枸玽耉耇笱耈蚼豿\",\n\"gòu\":\"呴坸构诟购垢姤冓啂夠够傋訽媾彀搆詬遘雊構煹觏撀糓覯購\",\n\"gū\":\"杚呱咕姑孤沽泒苽巭巬柧轱唃唂罛鸪笟菇菰蛄蓇觚軱軲辜酤稒鈲磆箍箛嫴篐橭鮕鴣\",\n\"gú\":\"\",\n\"gǔ\":\"夃古扢抇汩诂谷股牯罟羖逧钴傦啒淈脵蛊嗗尳愲詁馉毂賈鈷鼔鼓嘏榖皷鹘穀縎糓薣濲皼臌轂餶櫎瀔盬瞽鶻蠱\",\n\"gù\":\"固怘故凅顾堌崓崮梏牿棝祻雇榾痼锢僱錮鲴鯝顧\",\n\"guā\":\"瓜刮呱胍栝桰铦鸹歄煱颪趏劀緺銛諣踻銽颳鴰騧\",\n\"guá\":\"\",\n\"guǎ\":\"冎叧呙呱咼剐剮寡\",\n\"guà\":\"卦坬诖挂啩掛罣袿絓罫褂詿\",\n\"guāi\":\"乖\",\n\"guái\":\"叏\",\n\"guǎi\":\"拐枴柺罫箉\",\n\"guài\":\"夬怪恠\",\n\"guān\":\"关纶官矜覌倌矝莞涫棺蒄窤閞綸関瘝癏観闗鳏關鰥觀鱞\",\n\"guǎn\":\"莞馆琯痯筦斡管輨璭舘錧館鳤\",\n\"guàn\":\"卝毌丱贯泴覌悺惯掼淉貫悹祼慣摜潅遦樌盥罆雚観躀鏆灌爟瓘矔礶鹳罐觀鑵欟鱹鸛\",\n\"guāng\":\"光灮炚炛炗咣垙姯挄洸茪桄烡珖胱硄僙輄潢銧黆\",\n\"guǎng\":\"広犷廣獷臩\",\n\"guàng\":\"俇桄逛臦撗\",\n\"guī\":\"归圭妫规邽皈茥闺帰珪胿亀硅窐袿規媯廆椝瑰郌嫢摫閨鲑嬀嶲槣槻槼鳺璝瞡龜鮭巂歸雟鬶騩櫰櫷瓌蘬鬹\",\n\"guǐ\":\"宄氿朹轨庋佹匦诡陒垝姽恑攱癸軌鬼庪祪軓匭晷湀蛫觤詭厬簋蟡\",\n\"guì\":\"攰刿刽昋炅攱贵桂桧匮眭硊趹椢猤筀貴溎蓕跪匱瞆劊劌嶡撌槶螝樻檜瞶禬簂櫃癐襘鐀鳜鞼鑎鱖鱥\",\n\"gǔn\":\"丨衮惃硍绲袞辊滚蓘裷滾緄蔉磙緷輥鲧鮌鯀\",\n\"gùn\":\"睔謴\",\n\"guo\":\"\",\n\"guō\":\"呙咼咶埚郭啯堝崞渦猓楇聒鈛锅墎瘑嘓彉濄蝈鍋彍蟈懖矌\",\n\"guó\":\"囗囯囶囻国圀敋喐國帼掴腘摑幗慖漍聝蔮膕虢簂馘\",\n\"guǒ\":\"果惈淉菓馃椁褁槨粿綶蜾裹輠餜櫎\",\n\"guò\":\"過腂鐹\",\n\"hā\":\"虾紦铪鉿蝦\",\n\"há\":\"\",\n\"hǎ\":\"奤\",\n\"hà\":\"\",\n\"hāi\":\"咍嗨\",\n\"hái\":\"郂孩骸還嚡\",\n\"hǎi\":\"海胲烸塰酼醢\",\n\"hài\":\"亥妎拸骇害氦猲絯嗐餀駭駴饚\",\n\"han\":\"兯爳\",\n\"hān\":\"犴佄顸哻蚶酣頇嫨谽憨馠魽歛鼾\",\n\"hán\":\"邗含汵邯函肣凾虷唅圅娢浛笒崡晗梒涵焓琀寒嵅韩椷甝筨馯蜬澏鋡韓\",\n\"hǎn\":\"丆罕浫喊豃闞\",\n\"hàn\":\"仠厈汉屽忓扞闬攼旰旱肣唅垾悍捍涆猂莟晘焊菡釬閈皔睅傼蛿颔馯撖漢蔊蜭鳱暵熯輚銲鋎憾撼翰螒頷顄駻譀雗瀚鶾\",\n\"hāng\":\"\",\n\"háng\":\"邟妔苀迒斻杭垳绗桁笐航蚢颃裄貥筕絎頏魧\",\n\"hàng\":\"忼沆笐\",\n\"hāo\":\"茠蒿嚆薅薧\",\n\"háo\":\"乚毜呺竓皋蚝毫椃嗥獆號貉噑獔豪嘷獋諕儫嚎壕濠籇蠔譹\",\n\"hǎo\":\"郝\",\n\"hào\":\"昊侴昦秏哠恏悎浩耗晧淏傐皓鄗滈滜聕號暠暤暭澔皜皞镐曍皡薃皥藃鎬颢灏顥鰝灝\",\n\"hē\":\"诃抲欱訶嗬蠚\",\n\"hé\":\"禾纥呙劾咊咼姀河郃峆曷柇狢盇籺紇阂饸敆盉盍荷釛啝涸渮盒菏萂龁喛惒粭訸颌楁毼澕蓋詥貈貉鉌阖鲄朅熆閡閤餄鹖麧噈頜篕翮螛魺礉闔鞨齕覈鶡皬鑉龢\",\n\"hě\":\"\",\n\"hè\":\"咊抲垎贺哬袔隺寉焃惒猲賀嗃煂碋熇褐赫鹤翯嚇壑癋謞燺爀鶮鶴靍靎鸖靏\",\n\"hēi\":\"黒黑嗨潶\",\n\"hén\":\"拫痕鞎\",\n\"hěn\":\"佷哏很狠詪噷\",\n\"hèn\":\"恨噷\",\n\"hēng\":\"亨哼悙涥脝\",\n\"héng\":\"姮恆恒桁烆珩胻鸻撗橫衡鴴鵆蘅鑅\",\n\"hèng\":\"悙啈橫\",\n\"hng\":\"哼\",\n\"hōng\":\"叿吽呍灴轰訇烘軣揈渹焢硡谾薨輷嚝鍧巆轟\",\n\"hóng\":\"厷仜弘叿妅屸吰宏汯玒瓨纮闳宖泓玜苰垬娂沗洪竑紅羾荭虹浤浲紘翃耾硔紭谹鸿渱溄竤粠葓葒鈜閎綋翝谼潂鉷鞃魟篊鋐彋霐黉霟鴻黌\",\n\"hǒng\":\"唝晎嗊愩慐\",\n\"hòng\":\"讧訌閧撔澒銾蕻闂鬨闀\",\n\"hōu\":\"齁\",\n\"hóu\":\"矦鄇喉帿猴葔瘊睺銗篌糇翭骺翵鍭餱鯸\",\n\"hǒu\":\"吼吽犼呴\",\n\"hòu\":\"后郈厚垕後洉矦茩逅候堠豞鲎鲘鮜鱟\",\n\"hū\":\"乎乯匢虍芴呼垀忽昒曶泘苸恗烀芔轷匫唿惚淴虖軤雽嘑寣滹雐幠戯歑戱膴戲謼\",\n\"hú\":\"囫抇弧狐瓳胡壶隺壷斛焀喖壺媩搰湖猢絗葫鹄楜煳瑚瓡嘝蔛鹕鹘槲箶縎蝴衚魱縠螜醐頶觳鍸餬礐鵠瀫鬍鰗鶘鶦鶻鶮\",\n\"hǔ\":\"乕汻虎浒俿淲萀琥虝滸錿鯱\",\n\"hù\":\"互弖戶戸户冱芐帍护沍沪岵怙戽昈曶枑姱怘祜笏粐婟扈瓠楛嗃嗀綔鄠雽嫭嫮摢滬蔰槴熩鳸濩簄豰鍙嚛鹱觷護鳠頀鱯鸌\",\n\"huā\":\"吪芲花砉埖婲華椛硴蒊嘩糀誮錵蘤\",\n\"huá\":\"呚姡骅華釪釫铧滑猾嘩搳撶劃磆蕐螖鋘譁鏵驊鷨\",\n\"huà\":\"夻杹枠画话崋桦華婳畫嬅畵觟話劃摦樺嫿槬澅諙諣黊繣舙譮\",\n\"huái\":\"怀佪徊淮槐褢踝懐褱懷瀤櫰耲蘹\",\n\"huài\":\"咶壊壞蘾\",\n\"huān\":\"欢犿狟貆歓鴅懁鵍酄嚾孉懽獾歡讙貛驩\",\n\"huán\":\"环郇峘洹狟荁垸桓萈萑堚寏絙雈獂綄羦蒝貆锾瞏圜嬛寰澴缳還阛環豲鍰雚镮鹮糫繯鐶闤鬟瓛\",\n\"huǎn\":\"睆缓緩\",\n\"huàn\":\"幻奂肒奐宦唤换浣涣烉患梙焕逭喚喛嵈愌換渙痪煥瑍綄豢漶瘓槵鲩擐澣藧鯇攌嚾轘鯶鰀\",\n\"huāng\":\"巟肓荒衁宺朚塃慌\",\n\"huáng\":\"皇偟凰隍黄喤堭媓崲徨惶揘湟葟遑黃楻煌瑝墴潢獚锽熿璜篁艎蝗癀磺穔諻簧蟥鍠餭鳇趪韹鐄騜鰉鱑鷬\",\n\"huǎng\":\"汻怳恍炾宺晄奛谎幌詤熀熿縨謊兤櫎爌\",\n\"huàng\":\"愰滉榥曂皝鎤皩\",\n\"hui\":\"\",\n\"huī\":\"灰灳诙咴恢拻挥洃虺袆晖烣珲豗婎媈揮翚辉隓暉椲楎煇琿睢禈詼墮幑睳褘噅噕撝翬輝麾徽隳瀈蘳孈鰴\",\n\"huí\":\"囘回囬佪廻廽恛洄茴迴烠蚘逥痐缋蛕蛔蜖藱鮰繢\",\n\"huǐ\":\"虺悔烠毀毁螝毇檓燬譭\",\n\"huì\":\"卉屷屶汇讳泋哕浍绘芔荟诲恚恵桧烩贿彗晦秽喙廆惠湏絵缋翙阓匯彚彙會滙詯賄颒僡嘒瘣蔧誨銊圚寭慧憓暳槥潓潰蕙噦嬒徻橞殨澮濊獩璤薈薉諱頮檅檜燴璯篲藱餯嚖懳瞺穢繢蟪櫘繪翽譓儶鏸闠鐬靧譿顪\",\n\"hūn\":\"昏昬荤婚惛涽焄阍棔殙湣葷睧睯蔒閽轋\",\n\"hún\":\"忶浑珲馄渾湷琿魂餛鼲\",\n\"hǔn\":\"\",\n\"hùn\":\"诨俒眃倱圂婫掍焝溷尡慁睴觨諢\",\n\"huō\":\"吙秴耠劐攉騞\",\n\"huó\":\"佸姡活秮秳趏\",\n\"huǒ\":\"灬火伙邩钬鈥漷煷夥\",\n\"huò\":\"沎或货咟俰捇眓获閄剨喐掝祸貨惑旤湱禍漷窢蒦锪嚄奯擭濊濩獲篧鍃霍檴謋雘矆礊穫镬嚯彟瀖耯艧藿蠖嚿曤臛癨矐鑊韄靃彠\",\n\"jī\":\"丌讥击刉叽饥乩刏圾机玑肌芨矶鸡枅苙咭剞唧姬屐积笄飢基庴喞嵆嵇幾攲敧朞犄筓缉赍嗘畸稘跻鳮僟毄箕綨緁銈嘰撃槣樭畿緝觭諅賫踑躸齑墼撽機激璣禨積錤隮懠擊磯簊羁賷櫅耭雞譏韲鶏譤鐖饑癪躋鞿魕鶺鷄羇虀鑇覉鑙齏羈鸄覊\",\n\"jí\":\"乁亽亼及尐伋吉岌彶忣汲级即极皀亟佶诘郆卽叝姞急皍笈級堲揤疾觙偮卙唶楖淁焏谻戢棘極殛湒集塉嫉愱楫蒺蝍趌辑槉耤膌銡嶯潗濈瘠箿蕀蕺諔趞踖鞊鹡檝螏輯磼簎藉襋蹐鍓艥籍轚鏶霵齎躤雧\",\n\"jǐ\":\"己丮妀屰犱泲虮挤脊掎済鱾幾戟給嵴麂魢撠憿橶擠濟穖蟣\",\n\"jì\":\"彐彑旡计记伎坖妓忌技汥芰际剂季哜垍既洎紀茍茤荠計迹剤畟紒继觊記偈寄寂帺徛悸旣梞済绩塈惎臮葪蔇兾勣痵継蓟裚跡際鬾魝摖暨漃漈禝稩穊誋跽霁魥鲚暩瞉稷諅鲫冀劑曁禨穄薊襀髻嚌懠檕濟穖績繋罽薺覬鮆檵櫅櫭璾蹟鯽鵋齌廭懻癠穧繫蘎骥鯚瀱繼蘮鱀蘻霽鰶鰿鷑鱭驥\",\n\"jia\":\"\",\n\"jiā\":\"加乫伽夾宊抸佳拁泇徍枷毠浃珈哿埉挾浹痂梜笳耞袈傢猳葭跏椵犌腵鉫嘉擖镓糘豭貑鴐鎵麚\",\n\"jiá\":\"圿夾忦扴郏拮荚郟唊恝莢戛脥袷铗戞猰蛱裌颉颊蛺鋏頬頰鴶鵊\",\n\"jiǎ\":\"甲岬叚玾胛斚钾婽徦斝椵賈鉀榎槚瘕檟\",\n\"jià\":\"驾架嫁幏賈榢價稼駕\",\n\"jiān\":\"戋奸尖幵坚歼冿戔玪肩艰姧姦兼堅帴惤猏笺菅菺豜傔揃湔牋犍缄葌閒間雃靬搛椷椾煎瑊睷碊缣蒹豣漸監箋蔪樫熞稴緘蕑蕳鋑鲣鳽鹣熸篯縑鋻艱鞬餰馢麉瀐濺鞯鳒鵑殱礛籈鵳攕瀸鰔櫼殲譼鰜鶼礷籛韀鰹囏虃鑯韉\",\n\"jiǎn\":\"囝拣枧俭柬茧倹挸捡笕减剪帴揵梘检湕趼堿揀揃検減睑硷裥詃锏弿暕瑐筧简絸谫彅戩戬碱儉翦鋄撿橏篯檢藆襇襉謇蹇瞼礆簡繭謭鎫鬋鰎鹸瀽蠒鐗鐧鹻籛譾襺鹼\",\n\"jiàn\":\"件見侟建饯剑洊牮荐贱俴健剣栫涧珔舰剱徤揵袸谏釰釼寋旔朁楗毽腱臶跈践閒間賎鉴键僣僭榗槛漸監劎劍墹澗箭糋諓賤趝踐踺劒劔薦諫鋻鍵餞瞷瞯磵礀螹鍳鞬擶檻濺繝瀳覵覸譛鏩聻艦轞鐱鑒鑑鑬鑳\",\n\"jiāng\":\"江姜茳畕豇將葁畺摪翞僵漿螀壃缰薑橿殭螿鳉疅礓繮韁鱂\",\n\"jiǎng\":\"讲奖桨傋塂蒋奨奬蔣槳獎耩膙講顜\",\n\"jiàng\":\"匞匠夅弜洚绛將弶強絳畺酱勥滰嵹摾漿彊犟糡醤糨醬櫤謽\",\n\"jiāo\":\"艽交郊姣娇峧浇茮茭骄胶敎喬椒焦蛟跤僬嘐虠鲛嬌嶕嶣憍憢澆膠蕉燋膲礁穚鮫鵁鹪簥蟭轇鐎驕鷦鷮\",\n\"jiáo\":\"矯\",\n\"jiǎo\":\"臫佼恔挢狡绞饺捁晈烄笅皎脚釥铰搅湫筊絞勦敫湬煍腳賋僥摎摷暞踋鉸餃儌劋徺撟撹樔徼憿敽敿燞曒璬矯皦蟜繳譑孂纐攪灚鱎龣\",\n\"jiào\":\"叫呌峤挍訆悎珓窌笅轿较敎斍覐窖筊覚滘較嘂嘄嘦斠漖酵噍嶠潐噭嬓徼獥癄藠趭轎醮灂覺譥皭釂\",\n\"jie\":\"價\",\n\"jiē\":\"阶疖哜皆袓接掲痎秸菨階喈喼嗟堦媘嫅椄湝結脻街裓楬煯瑎稭鞂擑蝔嚌癤謯鶛\",\n\"jié\":\"卩卪孑尐讦扢刧刦劫岊昅杢刼劼杰疌衱诘拮洁狤迼倢桀桔桝洯紒莭訐偈偼啑婕崨捷掶袷袺傑媫嵑結絜蛣颉嵥搩楶滐睫節蜐詰趌跲鉣截榤碣竭蓵鲒嶱潔羯誱踕镼鞊頡幯擳嶻擮礍鍻鮚巀蠞蠘蠽\",\n\"jiě\":\"姐毑媎觧飷檞\",\n\"jiè\":\"丯介吤妎岕庎戒屆届斺玠畍界疥砎衸诫借悈紒蚧唶徣堺楐琾蛶觧骱犗耤誡褯魪嶰藉鎅鶡\",\n\"jīn\":\"巾今仐斤钅竻釒金津矜砛荕衿觔埐珒矝紟惍琎菳堻琻筋釿璡鹶黅襟\",\n\"jǐn\":\"侭卺巹紧堇婜菫僅厪谨锦嫤廑慬漌緊蓳馑槿瑾儘錦謹饉\",\n\"jìn\":\"伒劤妗近进枃勁浕荩晉晋浸烬笒紟赆唫祲進煡臸僅寖搢溍缙靳墐嫤慬榗瑨盡馸僸凚歏殣觐噤嬐濅縉賮嚍壗嬧濜藎燼璶覲贐齽\",\n\"jīng\":\"坕坙巠京泾经茎亰秔荊荆涇粇婛惊旍旌猄経菁晶稉腈葏睛粳經兢箐精綡聙鋞橸鲸鯨鶁鶄麖鼱驚麠\",\n\"jǐng\":\"井丼阱刭坓宑汫汬肼剄穽殌儆頚幜憬擏澋璄憼暻璟璥頸蟼警\",\n\"jìng\":\"劤妌弪径迳俓勁婙浄胫倞凈弳徑痉竞莖逕婧桱梷殑淨竟竫脛敬痙竧靓傹靖境獍誩踁静靚憼曔镜靜瀞鵛鏡競竸\",\n\"jiōng\":\"冂冋坰扃埛扄浻絅銄駉駫蘏蘔\",\n\"jiǒng\":\"冏囧泂炅迥侰炯逈浻烱絅煚窘颎綗臦僒煛熲澃褧燛顈臩\",\n\"jiòng\":\"\",\n\"jiū\":\"丩勼纠朻牞究糺鸠糾赳阄萛啾揂揪剹揫鳩摎稵樛鬏鬮\",\n\"jiú\":\"\",\n\"jiǔ\":\"九乆久乣氿奺汣杦灸玖糺舏韭紤酒镹韮\",\n\"jiù\":\"匛旧臼咎疚柩柾倃捄桕匓厩救就廄廐舅僦廏慦殧舊鹫匶鯦麔欍齨鷲\",\n\"jū\":\"凥伡抅車匊居岨泃狙苴驹俥毩疽眗砠罝陱娵婮崌掬梮涺揟椐毱琚腒趄跔跙锔裾雎艍蜛諊踘躹鋦駒據鋸鮈鴡檋鞠鞫鶋\",\n\"jú\":\"局泦侷狊挶桔啹婅淗焗菊郹椈湨犑輂僪粷蓻跼閰趜鋦橘駶繘鵙蹫鵴巈蘜鶪鼰鼳驧\",\n\"jǔ\":\"咀岨弆举枸矩莒挙椇筥榉榘蒟龃聥舉踽擧櫸齟欅襷\",\n\"jù\":\"巨乬巪讵姖岠怇拒洰苣邭具怐怚拠昛歫炬珇秬钜俱倨倶剧烥粔耟蚷袓埧埾惧詎距焣犋跙鉅飓蒩虡豦锯寠愳窭聚駏劇勮屦踞鮔壉懅據澽窶螶遽鋸屨颶瞿貗簴躆醵忂懼鐻\",\n\"juān\":\"姢勌娟捐涓朘梋焆瓹脧圏裐鹃勬鋑鋗镌鞙鎸鐫蠲\",\n\"juǎn\":\"呟巻帣埍捲菤锩臇錈闂\",\n\"juàn\":\"奆劵奍巻帣弮倦勌悁桊狷绢隽婘惓淃瓹眷鄄圏棬椦睊絭罥腃雋睠絹飬慻蔨嶲鋗餋獧縳巂羂讂\",\n\"juē\":\"噘撅撧屩屫\",\n\"jué\":\"亅孒孓决刔氒诀吷妜弡抉決芵叕泬玨玦挗珏疦砄绝虳埆捔欮蚗袦崫崛掘斍桷覐觖訣赽趹傕厥焳矞絕絶覚趉鈌劂瑴谲駃噊嶡嶥憰撅熦爴獗瘚蕝蕨觮鴂鴃噱壆憠橜橛燋璚爵臄镢櫭繘蟨蟩爑譎蹷蹶髉匷矍覺鐍鐝鳜灍爝觼穱彏戄攫玃鷢矡貜躩钁\",\n\"juě\":\"蹶\",\n\"juè\":\"誳\",\n\"jūn\":\"军君均汮姰袀軍钧莙蚐桾皲鈞碅筠皸皹覠銁銞鲪頵麇龜鍕鮶麏麕\",\n\"jǔn\":\"\",\n\"jùn\":\"呁俊郡陖埈峻捃浚隽馂骏晙焌珺棞畯竣葰雋儁箘箟蜠賐寯懏餕燇濬駿鵘鵔鵕攈攟\",\n\"kā\":\"喀\",\n\"kǎ\":\"佧咔咯垰胩裃鉲\",\n\"kāi\":\"开奒揩锎開鐦\",\n\"kǎi\":\"凯剀垲恺闿豈铠凱剴嘅慨蒈塏嵦愷輆暟锴鍇鎧闓颽\",\n\"kài\":\"忾炌欯欬烗勓愒愾濭鎎\",\n\"kān\":\"刊栞勘龛堪嵁戡龕\",\n\"kǎn\":\"凵冚坎扻侃砍莰偘埳惂欿歁槛輡檻顑竷轗\",\n\"kàn\":\"衎崁墈阚瞰磡闞竷鬫矙\",\n\"kāng\":\"忼闶砊粇康閌嫝嵻慷漮槺穅糠躿鏮鱇\",\n\"káng\":\"\",\n\"kǎng\":\"\",\n\"kàng\":\"亢伉匟邟囥抗犺闶炕钪鈧閌\",\n\"kāo\":\"尻嵪髛\",\n\"kǎo\":\"丂攷考拷洘栲烤薧\",\n\"kào\":\"洘铐犒銬鲓靠鮳鯌\",\n\"kē\":\"匼柯牁牱珂科轲疴砢趷钶蚵铪嵙棵痾萪軻颏嗑搕犐稞窠鈳榼薖鉿颗樖瞌磕蝌頦窼醘顆髁礚\",\n\"ké\":\"殻揢殼翗\",\n\"kě\":\"岢炣渇嵑敤渴軻閜磆嶱\",\n\"kè\":\"克刻剋勀勊客峇恪娔尅悈袔课堁氪骒愘硞缂衉嗑愙歁溘锞碦緙艐課濭錁礊騍\",\n\"kēi\":\"剋尅\",\n\"kēn\":\"\",\n\"kěn\":\"肎肯肻垦恳啃龂豤貇龈墾錹懇\",\n\"kèn\":\"珢掯硍裉褃\",\n\"kēng\":\"劥阬坈坑妔挳硁殸牼揁硜铿硻摼誙銵鍞鏗\",\n\"kěng\":\"硻\",\n\"kōng\":\"倥埪崆悾涳椌硿箜躻錓鵼\",\n\"kǒng\":\"孔倥恐悾\",\n\"kòng\":\"矼控羫鞚\",\n\"kōu\":\"抠芤眍眗剾彄摳瞘\",\n\"kǒu\":\"口劶竘\",\n\"kòu\":\"叩扣佝怐敂冦宼寇釦窛筘滱蔲蔻瞉簆鷇\",\n\"kū\":\"扝刳矻郀朏枯胐哭桍秙窋堀圐跍窟骷鮬\",\n\"kú\":\"\",\n\"kǔ\":\"狜苦楛\",\n\"kù\":\"库俈绔庫捁秙焅袴喾硞絝裤瘔酷廤褲嚳\",\n\"kuā\":\"咵姱恗晇絓舿誇\",\n\"kuǎ\":\"侉垮楇銙\",\n\"kuà\":\"胯趶誇跨骻\",\n\"kuǎi\":\"蒯擓\",\n\"kuài\":\"巜凷圦块快侩郐哙浍狯脍欳塊蒉會筷駃鲙儈墤鄶噲廥澮獪璯膾旝糩鱠\",\n\"kuān\":\"宽寛寬臗髋鑧髖\",\n\"kuǎn\":\"梡欵款歀窽窾\",\n\"kuàn\":\"\",\n\"kuāng\":\"匡迋劻诓邼匩哐恇洭硄筐筺誆軭\",\n\"kuáng\":\"忹抂狅狂诳軖軠誑鵟\",\n\"kuǎng\":\"夼儣懭\",\n\"kuàng\":\"卝丱邝圹纩况旷岲況矿昿贶框眖砿眶絋絖貺軦鉱鋛鄺壙黋懬曠爌矌礦穬纊鑛\",\n\"kuī\":\"亏刲岿悝盔窥聧窺虧顝闚巋\",\n\"kuí\":\"奎晆逵鄈隗馗喹揆葵骙戣暌楏楑魁睽蝰頯櫆藈鍨鍷騤夔蘷巙虁犪躨\",\n\"kuǐ\":\"尯煃跬頍磈蹞\",\n\"kuì\":\"尯胿匮喟媿愧愦蒉馈匱瞆嘳嬇憒潰篑聭聩蕢殨膭謉瞶餽簣聵籄饋\",\n\"kūn\":\"坤昆堃堒婫崑崐晜猑菎裈焜琨髠裩貇锟髡鹍潉蜫褌髨熴瑻醌錕鲲騉鯤鵾鶤\",\n\"kǔn\":\"悃捆阃壸梱祵硱稇裍壼稛綑閫閸\",\n\"kùn\":\"困涃睏\",\n\"kuò\":\"扩拡挄适秮秳铦筈萿葀蛞阔廓漷銛噋銽頢髺擴濶闊鞟韕霩鞹鬠\",\n\"la\":\"鞡\",\n\"lā\":\"垃柆砬菈搚磖邋\",\n\"lá\":\"旯剌砬揦磖嚹\",\n\"lǎ\":\"喇藞\",\n\"là\":\"剌翋揦溂揧楋瘌蜡蝋辢辣蝲臈擸攋爉臘鬎櫴瓎镴鯻蠟鑞\",\n\"lái\":\"来來俫倈崃徕涞莱郲婡崍庲徠梾淶猍萊逨棶琜筙铼箂錸騋鯠鶆麳\",\n\"lǎi\":\"襰\",\n\"lài\":\"疠娕徕唻婡徠赉睐睞赖誺賚濑賴頼癘顂癞鵣攋瀨瀬籁藾櫴癩籟\",\n\"lán\":\"兰岚拦栏啉婪惏嵐葻阑暕蓝谰厱澜褴儖斓篮懢燣燷藍襕镧闌璼幱襤譋攔瀾灆籃繿蘫蘭斕欄襴囒灡籣欗讕躝襽鑭韊\",\n\"lǎn\":\"览浨揽缆榄漤罱醂壈懒覧擥嬾懶孄覽孏攬灠欖爦顲纜\",\n\"làn\":\"坔烂滥燗嚂壏濫爁爛瓓爤爦糷钄\",\n\"lāng\":\"啷\",\n\"láng\":\"勆郞哴欴狼嫏廊斏桹琅蓈榔瑯硠稂锒筤艆蜋郒樃螂躴鋃鎯駺\",\n\"lǎng\":\"崀朗朖烺塱蓢誏朤\",\n\"làng\":\"埌浪莨阆筤蒗誏閬\",\n\"lāo\":\"捞粩撈\",\n\"láo\":\"労劳牢窂哰崂浶勞痨铹僗嘮嶗憦憥朥癆磱簩蟧醪鐒顟髝\",\n\"lǎo\":\"耂老佬咾恅狫荖栳珯硓铑蛯銠鮱轑\",\n\"lào\":\"涝絡嗠耢酪嫪嘮憦樂澇躼橯耮軂\",\n\"le\":\"饹\",\n\"lē\":\"嘞\",\n\"lè\":\"仂阞叻忇扐氻艻牞玏泐竻砳楽韷餎樂簕鳓鰳鱳\",\n\"lei\":\"嘞\",\n\"lēi\":\"\",\n\"léi\":\"絫雷嫘缧蔂樏畾磥檑縲攂礌镭櫑瓃羸礧纍罍蘲鐳轠儽鑘靁虆鱩欙纝鼺\",\n\"lěi\":\"厽耒诔垒洡塁絫傫誄瘣樏磊蕌磥蕾儡壘癗礌藟櫑櫐矋礨礧灅蠝蘽讄壨鑸鸓\",\n\"lèi\":\"泪洡类涙淚祱絫酹銇頛頪錑攂颣類礧纇蘱禷\",\n\"lēng\":\"稜\",\n\"léng\":\"唥崚塄楞碐稜薐\",\n\"lěng\":\"冷\",\n\"lèng\":\"倰堎愣睖踜\",\n\"li\":\"\",\n\"lī\":\"\",\n\"lí\":\"刕杝厘柂剓狸离荲骊悡梨梸犁琍菞喱棃犂鹂剺漓睝筣缡艃蓠嫠孷樆璃盠竰貍犛糎蔾褵鋫鲡黎篱縭罹錅蟍謧醨嚟藜邌釐離鯏斄瓈蟸鏫鯬鵹麗黧囄灕蘺蠫孋廲劙鑗穲籬纚驪鱺鸝\",\n\"lǐ\":\"礼李里俚峛峢娌峲悝浬逦理裡锂粴裏豊鋰鲤澧禮鯉醴蠡鳢邐鱧欚纚鱱\",\n\"lì\":\"力历厉屴扐立吏扚朸利励叓呖坜杝沥苈例叕岦戾枥沴沵疠苙迣俐俪栃栎疬砅茘荔赲轹郦唎娳悧栛栗浰涖猁珕砬砺砾秝莉莅鬲唳婯悷笠粒粝脷蚸蛎傈凓厤棙痢蛠詈跞雳厯塛慄搮溧睙蒞蒚蜊鉝鳨厲暦歴瑮綟蜧銐蝷镉勵曆歷篥隷鴗巁檪濿癘磿隸鬁儮擽曞櫔爄犡禲蠇鎘嚦壢攊櫟瀝瓅礪藶麗櫪爏瓑皪盭礫糲蠣儷癧礰纅酈鷅麜囇孋攦觻躒轢欐讈轣攭瓥靂靋\",\n\"liǎ\":\"俩倆\",\n\"lián\":\"奁连帘怜涟莲連梿联裢亷嗹廉慩溓漣蓮匲奩槏槤熑覝劆匳噒嫾憐磏聨聫褳鲢濂濓縺翴聮薕螊櫣燫聯臁謰蹥檶鎌镰瀮簾蠊鬑鐮鰱籢籨\",\n\"liǎn\":\"莶敛梿琏脸裣慩摙溓槤璉蔹嬚薟斂櫣歛臉鄻襝羷蘞蘝醶\",\n\"liàn\":\"练炼恋殓僆堜媡湅萰链摙楝煉瑓潋稴練澰錬殮鍊鏈瀲鰊戀纞\",\n\"liāng\":\"\",\n\"liáng\":\"良俍莨梁涼椋辌粱粮墚踉樑輬駺糧\",\n\"liǎng\":\"両两兩俩倆唡啢掚脼裲緉蜽魉魎\",\n\"liàng\":\"亮倞哴悢谅涼辆喨晾湸靓輌踉諒輛鍄\",\n\"liāo\":\"蹽\",\n\"liáo\":\"辽疗窌聊尞僚寥嵺憀摎漻膋嘹嫽寮嶚嶛憭敹樛獠缭遼暸橑璙膫療竂鹩屪廫簝繚藔蟟蟧豂賿蹘爎爒飂髎飉鷯\",\n\"liǎo\":\"钌釕鄝缪蓼憭繆曢爎镽爒\",\n\"liào\":\"尥尦钌炓料釕廖撂窷镣鐐\",\n\"lie\":\"\",\n\"liē\":\"\",\n\"lié\":\"\",\n\"liě\":\"忚毟挘\",\n\"liè\":\"列劣劦冽劽姴挒洌茢迾哷埓埒栵浖烈烮捩猎猟脟棙蛚煭聗趔綟巤獦颲燤儠巁鮤鴷擸爄獵爉犣躐鬛鬣鱲\",\n\"līn\":\"拎\",\n\"lín\":\"厸邻阾林临冧啉崊惏晽琳粦碄箖粼綝鄰隣嶙潾獜遴斴暽燐璘辚霖疄瞵磷臨繗翷麐轔壣瀶鏻鳞驎鱗麟\",\n\"lǐn\":\"菻亃僯箖凜凛撛廩廪懍懔澟檁檩癝癛\",\n\"lìn\":\"吝恡悋赁焛亃痳賃蔺獜橉甐膦閵疄藺蹸躏躙躪轥\",\n\"líng\":\"伶刢灵呤囹坽夌姈岺彾泠狑苓昤朎柃玲瓴〇凌皊砱秢竛羐袊铃陵鸰婈崚掕棂淩琌笭紷绫羚翎聆舲菱蛉衑祾詅跉軨稜蓤裬鈴閝零龄綾蔆輘霊駖澪蕶錂霗魿鲮鴒鹷燯霝霛齢酃鯪孁齡櫺醽靈欞爧麢龗\",\n\"lǐng\":\"岺袊领領嶺\",\n\"lìng\":\"另炩蘦\",\n\"liū\":\"熘澑蹓\",\n\"liú\":\"刘畄斿浏流留旈琉畱硫裗媹嵧旒蒥蓅骝摎榴漻瑠飗劉瑬瘤磂镏駠鹠橊璢疁镠癅蟉駵嚠懰瀏藰鎏鎦麍鏐飀鐂騮飅鰡鶹驑\",\n\"liǔ\":\"柳栁桞珋桺绺锍綹熮罶鋶橮嬼懰羀藰\",\n\"liù\":\"窌翏塯廇遛澑磂磟鹨鎦霤餾雡飂鬸鷚\",\n\"lo\":\"咯\",\n\"lóng\":\"龙屸尨咙泷茏昽栊珑胧眬砻竜聋隆湰滝嶐槞漋癃窿篭龍儱蘢鏧霳嚨巃巄瀧曨朧櫳爖瓏襱矓礲礱蠬蠪龓龒籠聾豅躘靇鑨驡鸗\",\n\"lǒng\":\"陇垅垄拢篢篭龍隴儱徿壟壠攏竉龓籠躘\",\n\"lòng\":\"哢梇硦儱徿贚\",\n\"lou\":\"喽嘍瞜\",\n\"lōu\":\"摟\",\n\"lóu\":\"剅娄偻婁喽溇蒌僂楼嘍寠廔慺漊蔞遱樓熡耧蝼瞜耬艛螻謱貗軁髅鞻髏鷜\",\n\"lǒu\":\"嵝塿嶁摟甊篓簍\",\n\"lòu\":\"陋屚漏瘘镂瘻瘺鏤\",\n\"lū\":\"噜撸謢嚕擼\",\n\"lú\":\"卢庐芦垆枦泸炉栌胪轳舮鸬玈舻颅鈩鲈馿魲盧嚧壚廬攎瀘獹璷蘆曥櫨爐瓐臚矑籚纑罏艫蠦轤鑪顱髗鱸鸕黸\",\n\"lǔ\":\"卤虏掳鹵硵鲁虜塷滷蓾樐澛魯擄橹氇磠穞镥瀂櫓氌艣鏀艪鐪鑥\",\n\"lù\":\"圥甪陆侓坴彔录峍勎赂辂陸娽淕淥渌硉菉逯鹿椂琭祿禄僇剹勠盝睩稑賂路輅塶廘摝漉箓粶緑蓼蔍戮樚熝膔趢踛辘醁潞穋蕗錄錴録璐簏螰鴼簶蹗轆騄鹭簬簵鏕鯥鵦鵱麓鏴騼籙觻虂鷺\",\n\"luán\":\"娈孪峦挛栾鸾脔滦銮鵉圝奱孌孿巒攣曫欒灓羉臡臠圞灤虊鑾癴癵鸞\",\n\"luǎn\":\"卵覶\",\n\"luàn\":\"乱釠乿亂薍灓\",\n\"lūn\":\"掄\",\n\"lún\":\"仑伦囵沦纶芲侖轮倫陯圇婨崘崙掄淪菕棆腀碖綸耣蜦論踚輪磮錀鯩\",\n\"lǔn\":\"埨惀碖稐耣\",\n\"lùn\":\"惀溣碖論\",\n\"luo\":\"囉囖\",\n\"luō\":\"捋頱囉囖\",\n\"luó\":\"寽罗猡脶萝逻椤腡锣箩骡镙螺攎羅覶鏍儸覼騾囉攞玀蘿邏欏驘鸁籮鑼饠囖\",\n\"luǒ\":\"剆倮砢捰蓏裸躶瘰蠃臝曪攭癳\",\n\"luò\":\"泺咯峈洛荦骆洜珞捰渃硌硦笿絡蛒跞詻摞漯犖雒駱磱鮥鵅擽濼攊皪躒纙\",\n\"lǘ\":\"驴闾榈閭氀膢瞜櫚藘驢\",\n\"lǚ\":\"吕呂侣郘侶挔捛捋旅梠焒祣偻稆铝屡絽缕僂屢慺膂褛鋁履膐褸儢縷穭鷜\",\n\"lǜ\":\"垏律哷虑嵂氯葎滤綠緑慮箻膟勴繂濾櫖爈卛鑢\",\n\"lüè\":\"寽掠畧略锊稤圙鋢鋝\",\n\"ma\":\"嗎嘛麽\",\n\"mā\":\"亇妈孖庅媽嫲榪螞\",\n\"má\":\"菻麻嗎痲痳嘛嫲蔴犘蟇\",\n\"mǎ\":\"马犸杩玛码馬嗎溤獁遤瑪碼螞鎷鰢鷌\",\n\"mà\":\"杩祃閁骂傌睰嘜榪禡罵螞駡鬕\",\n\"mái\":\"薶霾\",\n\"mǎi\":\"买荬買嘪蕒鷶\",\n\"mài\":\"劢迈佅売麦卖唛脈麥衇勱賣邁霡霢\",\n\"mān\":\"颟顢\",\n\"mán\":\"姏悗蛮絻谩慲摱馒樠瞞鞔謾饅鳗鬘鬗鰻矕蠻\",\n\"mǎn\":\"娨屘満满滿螨襔蟎鏋矕\",\n\"màn\":\"曼僈鄤墁嫚幔慢摱漫獌缦蔄槾澫熳澷镘縵鏝蘰\",\n\"māng\":\"牤\",\n\"máng\":\"邙吂忙汒芒尨杗杧盲盳厖恾笀茫哤娏庬浝狵朚牻硭釯铓痝蛖鋩駹蘉\",\n\"mǎng\":\"莽莾硥茻壾漭蟒蠎\",\n\"màng\":\"\",\n\"māo\":\"貓\",\n\"máo\":\"毛矛芼枆牦茅茆旄罞渵軞酕堥嵍楙锚緢鉾髦氂犛蝥貓髳錨蟊鶜\",\n\"mǎo\":\"冇卯夘乮峁戼泖昴铆笷蓩鉚\",\n\"mào\":\"冃皃芼冐茂柕眊秏贸旄耄袤覒媢帽萺貿鄚愗暓毷瑁瞀貌鄮蝐懋\",\n\"me\":\"庅麽麼嚜\",\n\"mē\":\"嚒\",\n\"mè\":\"濹嚰\",\n\"méi\":\"坆沒枚玫苺栂眉脄莓梅珻脢郿堳媒嵋湄湈猸睂葿楣楳煤瑂禖腜塺槑酶镅鹛鋂霉穈徾鎇攗鶥黴\",\n\"měi\":\"毎每凂美挴浼羙媄嵄渼媺镁嬍燘躾鎂黣\",\n\"mèi\":\"妹抺沬旀昧祙袂眛媚寐殙痗跊鬽煝睸韎魅篃蝞嚜櫗\",\n\"mēn\":\"悶椚\",\n\"mén\":\"门们扪汶怋玧钔門們閅捫菛璊瞞穈鍆亹斖虋\",\n\"mèn\":\"悗惛焖悶暪燜鞔懑懣\",\n\"mēng\":\"掹擝矇\",\n\"méng\":\"尨甿虻庬莔萌溕盟雺甍鄳儚橗瞢蕄蝱鄸鋂髳幪懜懞濛獴曚朦檬氋礞鯍鹲艨矒靀霿饛顭鸏\",\n\"měng\":\"黾冡勐猛黽锰艋蜢瞢懜懞蟒錳懵蠓鯭矒鼆\",\n\"mèng\":\"孟梦夢夣懜霥癦\",\n\"mī\":\"咪瞇\",\n\"mí\":\"冞祢迷袮猕谜蒾詸摵瞇謎醚彌擟瞴縻藌麊麋麿檷禰靡瀰獼蘪麛镾戂攠瓕蘼爢醾醿鸍釄\",\n\"mǐ\":\"米芈侎沵羋弭洣敉粎脒渳葞蔝銤彌濔孊攠灖\",\n\"mì\":\"冖糸汨沕宓怽枈觅峚祕宻密淧覔覓幂谧塓幎覛嘧榓滵漞熐蔤蜜鼏冪樒幦濗謐櫁簚羃\",\n\"mián\":\"宀芇杣眠婂绵媔棉綿緜臱蝒嬵檰櫋矈矊矏\",\n\"miǎn\":\"丏汅免沔黾勉眄娩莬偭冕勔渑喕媔愐湎睌缅葂黽絻腼澠緬靦鮸\",\n\"miàn\":\"靣面牑糆麫麪麺麵\",\n\"miāo\":\"喵\",\n\"miáo\":\"苗媌描瞄鹋嫹緢鶓\",\n\"miǎo\":\"厸仯劰杪眇秒淼渺缈篎緲藐邈\",\n\"miào\":\"妙庙玅竗庿缪廟繆\",\n\"miē\":\"乜吀咩哶孭\",\n\"mié\":\"\",\n\"miè\":\"灭烕眜覕搣滅蔑薎鴓幭懱瀎篾櫗簚礣蠛衊鑖鱴\",\n\"mín\":\"民忟垊姄岷忞怋旻旼玟苠珉盿砇罠崏捪渂琘琝缗暋瑉痻碈鈱緍緡賯錉鴖鍲\",\n\"mǐn\":\"皿冺刡忟闵呡忞抿泯黾勄敃闽悯敏笢笽惽湏湣閔黽愍敯暋僶閩慜憫潣簢鳘蠠鰵\",\n\"míng\":\"名明鸣洺眀茗冥朙眳铭鄍嫇溟猽蓂詺暝榠銘鳴瞑螟覭\",\n\"mǐng\":\"佲姳凕嫇慏酩\",\n\"mìng\":\"命掵\",\n\"miǔ\":\"\",\n\"miù\":\"谬缪繆謬\",\n\"mō\":\"摸嚤\",\n\"mó\":\"庅尛谟嫫馍摹膜骳麽麼魹橅糢嬤嬷謨謩擵饃蘑髍魔劘戂攠饝\",\n\"mǒ\":\"懡\",\n\"mò\":\"末圽沒妺帓殁歿歾沫茉陌帞昩枺狢皌眜眿砞秣莈眽絈袹絔蛨貃嗼塻寞漠獏蓦貈貊貉銆靺墨嫼瘼瞐瞙镆魩黙縸默瀎貘嚜藦蟔鏌爅驀礳纆耱\",\n\"mōu\":\"哞\",\n\"móu\":\"牟侔劺呣恈敄桙眸谋堥蛑缪踎謀繆鍪鴾麰鞪\",\n\"mǒu\":\"厶某\",\n\"mòu\":\"\",\n\"mú\":\"毪氁\",\n\"mǔ\":\"母亩牡坶姆拇畂峔牳畆畒胟娒畝畞砪畮鉧踇\",\n\"mù\":\"木仫目凩朷牟沐狇坶炑牧苜毣莯蚞钼募雮墓幙幕慔楘睦鉬慕暯暮缪樢艒霂穆縸繆鞪\",\n\"n\":\"\",\n\"ń\":\"唔嗯\",\n\"ň\":\"嗯\",\n\"na\":\"\",\n\"nā\":\"\",\n\"ná\":\"秅拏拿挐嗱蒘搻誽镎鎿\",\n\"nǎ\":\"乸雫\",\n\"nà\":\"吶妠抐纳肭郍衲钠納袦捺笚笝豽軜貀鈉蒳靹魶\",\n\"nái\":\"腉搱摨孻\",\n\"nǎi\":\"乃奶艿氖疓妳廼迺倷釢嬭\",\n\"nài\":\"佴奈柰耏耐萘渿鼐褦螚錼\",\n\"nān\":\"囝囡\",\n\"nán\":\"男抩枏侽柟娚畘莮喃遖暔楠諵難\",\n\"nǎn\":\"赧揇湳萳煵腩嫨蝻戁\",\n\"nàn\":\"妠婻諵難\",\n\"nāng\":\"儾囔\",\n\"náng\":\"乪涳搑憹嚢蠰饟馕欜饢\",\n\"nǎng\":\"搑擃瀼曩攮灢馕\",\n\"nàng\":\"儾齉\",\n\"nāo\":\"孬\",\n\"náo\":\"呶怓挠峱桡硇铙猱蛲詉碙摎撓嶩憹橈獶蟯夒譊鐃巎獿\",\n\"nǎo\":\"垴恼悩脑匘脳堖惱嫐瑙腦碯憹獶\",\n\"nào\":\"闹婥淖閙鬧臑\",\n\"ne\":\"\",\n\"né\":\"\",\n\"nè\":\"疒讷吶抐眲訥\",\n\"néi\":\"\",\n\"něi\":\"娞浽馁脮腇餒鮾鯘\",\n\"nèi\":\"內氝氞錗\",\n\"nèn\":\"恁媆嫩嫰\",\n\"néng\":\"\",\n\"něng\":\"螚\",\n\"nèng\":\"\",\n\"ńg\":\"唔嗯\",\n\"ňg\":\"嗯\",\n\"nī\":\"妮\",\n\"ní\":\"尼坭怩抳籾倪屔秜郳铌埿婗淣猊蚭棿蛪跜鈮聣蜺馜觬貎輗霓鲵鯢麑齯臡\",\n\"nǐ\":\"伱伲你拟妳抳狔苨柅婗掜旎晲棿孴儞儗隬懝擬濔薿檷聻\",\n\"nì\":\"屰氼伲抐昵胒逆匿眤秜堄惄嫟愵睨腻暱縌誽膩嬺\",\n\"niān\":\"拈蔫\",\n\"nián\":\"年秊哖姩秥粘溓鲇鮎鲶鵇黏鯰\",\n\"niǎn\":\"涊淰焾辇榐辗撚撵碾輦簐蹍攆蹨躎\",\n\"niàn\":\"卄廿念姩唸埝悥惗艌\",\n\"niáng\":\"娘嬢孃釀\",\n\"niǎng\":\"\",\n\"niàng\":\"酿醸釀\",\n\"niǎo\":\"鸟茑袅鳥嫋裊蔦樢嬝褭嬲\",\n\"niào\":\"脲\",\n\"niē\":\"捏揑\",\n\"nié\":\"苶\",\n\"niě\":\"\",\n\"niè\":\"乜帇圼峊枿陧涅痆聂臬啮掜菍隉敜湼嗫嵲踂噛摰槷踗踙銸镊镍嶭篞臲鋷錜颞蹑嚙聶鎳闑孼孽櫱籋蘖囁攝齧巕糱糵蠥鑈囐囓讘躡鑷顳钀\",\n\"nín\":\"囜恁脌您\",\n\"nǐn\":\"拰\",\n\"níng\":\"咛狞苧柠聍寍寕甯寗寜寧儜凝橣嚀嬣擰獰薴檸聹鑏鬡鸋\",\n\"nǐng\":\"擰矃\",\n\"nìng\":\"佞侫泞倿寍寕甯寗寜寧澝擰濘\",\n\"niū\":\"妞孧\",\n\"niú\":\"牜牛汼怓\",\n\"niǔ\":\"忸扭沑狃纽杻炄钮紐莥鈕靵\",\n\"niù\":\"抝\",\n\"nóng\":\"农侬哝浓脓秾農儂辳噥濃蕽檂燶禯膿癑穠襛譨醲欁鬞\",\n\"nǒng\":\"繷\",\n\"nòng\":\"挊挵癑齈\",\n\"nóu\":\"羺\",\n\"nǒu\":\"\",\n\"nòu\":\"搙槈耨獳檽鎒鐞\",\n\"nú\":\"奴伮孥帑驽笯駑\",\n\"nǔ\":\"伮努弩砮胬\",\n\"nù\":\"怒傉搙\",\n\"nuán\":\"奻渜\",\n\"nuǎn\":\"渜湪暖煖煗餪\",\n\"nuàn\":\"\",\n\"nuó\":\"挪梛傩橠難儺\",\n\"nuǒ\":\"袳袲\",\n\"nuò\":\"耎诺喏掿毭逽愞搙搦锘搻榒稬諾蹃糑鍩懧懦糥穤糯\",\n\"nǘ\":\"\",\n\"nǚ\":\"钕籹釹\",\n\"nǜ\":\"沑衂恧朒衄聏\",\n\"nüè\":\"虐婩硸瘧\",\n\"o\":\"筽\",\n\"ō\":\"喔噢\",\n\"ó\":\"哦\",\n\"ǒ\":\"嚄\",\n\"ò\":\"哦\",\n\"ou\":\"\",\n\"ōu\":\"讴吽沤欧殴瓯鸥區嘔塸漚歐毆熰甌膒鴎櫙藲謳鏂鷗\",\n\"óu\":\"\",\n\"ǒu\":\"吘禺偶腢嘔熰耦蕅藕\",\n\"òu\":\"怄沤嘔慪漚\",\n\"pā\":\"汃妑苩皅趴舥啪葩\",\n\"pá\":\"杷爬钯掱琶筢潖\",\n\"pǎ\":\"\",\n\"pà\":\"汃帊帕怕袙\",\n\"pāi\":\"拍\",\n\"pái\":\"俳徘猅棑牌箄輫簲簰犤\",\n\"pǎi\":\"廹\",\n\"pài\":\"沠哌派渒湃蒎鎃\",\n\"pān\":\"眅畨萠潘攀籓\",\n\"pán\":\"丬爿肨柈洀胖眫湴盘跘媻幋蒰搫槃盤磐縏膰磻蹒瀊蟠蹣鎜鞶\",\n\"pǎn\":\"坢盻\",\n\"pàn\":\"冸判沜拚泮炍肨叛牉盼胖畔聁袢詊溿頖鋬闆鵥襻鑻\",\n\"pāng\":\"乓汸沗胮雱滂膖霶\",\n\"páng\":\"厐夆尨彷庞逄庬趽舽嫎徬膀篣螃鳑龎龐鰟\",\n\"pǎng\":\"嗙耪覫\",\n\"pàng\":\"炐肨胖眫\",\n\"pāo\":\"抛拋脬萢藨穮\",\n\"páo\":\"咆垉庖狍炰爮瓟袍铇匏烰袌跁軳鉋鞄褜麃麅\",\n\"pǎo\":\"\",\n\"pào\":\"奅疱皰砲袌靤麭嚗礟礮\",\n\"pēi\":\"妚呸怌抷肧柸胚衃醅\",\n\"péi\":\"阫陪培婄毰赔锫裵裴賠錇\",\n\"pěi\":\"俖琣\",\n\"pèi\":\"伂妃沛犻佩帔姵斾柭旆浿珮配淠棑媐蓜辔馷嶏霈攈轡\",\n\"pēn\":\"噴濆歕\",\n\"pén\":\"瓫盆湓葐\",\n\"pěn\":\"呠翸\",\n\"pèn\":\"喯噴\",\n\"pēng\":\"亨匉怦抨泙恲胓砰梈烹硑絣軯剻閛漰嘭駍磞\",\n\"péng\":\"芃朋挷竼倗捀莑堋弸淜袶棚椖傰塜塳搒漨痭硼稝蓬鹏樥熢憉澎輣篣篷膨錋韸髼蟚蟛鬅纄蘕韼鵬騯鬔鑝\",\n\"pěng\":\"捧淎皏摓\",\n\"pèng\":\"掽椪碰閛槰踫磞\",\n\"pi\":\"榌\",\n\"pī\":\"丕伓伾妚批纰邳坯岯怶披抷枈炋狉狓砒悂秛秠紕铍陴旇翍耚豾釽鈚鉟銔磇駓髬噼錃錍魾憵礕礔鎞霹\",\n\"pí\":\"皮仳阰纰芘陂枇肶毘毗疲笓紕蚍郫铍啤埤崥猈蚾蚽豼焷琵禆脾腗裨鈹鲏罴膍蜱罷隦魮壀螕鮍篺螷貔鞞鵧羆朇鼙蠯\",\n\"pǐ\":\"匹庀疋仳圮吡苉悂脴痞銢嶏諀鴄擗噽癖嚭\",\n\"pì\":\"屁埤淠揊嫓媲睥潎稫僻澼嚊濞甓疈譬闢鷿鸊\",\n\"piān\":\"囨偏媥楄犏篇翩鍂鶣\",\n\"pián\":\"骈胼缏腁楩賆跰瑸緶骿蹁駢璸騈\",\n\"piǎn\":\"覑谝貵諞\",\n\"piàn\":\"猵骗魸獱騗騙\",\n\"piāo\":\"剽勡嘌嫖彯慓缥飘旚縹翲螵犥飃飄魒\",\n\"piáo\":\"嫖瓢薸闝\",\n\"piǎo\":\"莩殍缥瞟篻縹醥皫顠\",\n\"piào\":\"僄彯徱骠驃鰾\",\n\"piē\":\"氕覕潎撆暼瞥\",\n\"piě\":\"丿苤鐅\",\n\"piè\":\"嫳\",\n\"pīn\":\"拚姘拼砏礗穦馪驞\",\n\"pín\":\"玭贫娦貧琕嫔嬪薲嚬矉蘋蠙颦顰\",\n\"pǐn\":\"品榀\",\n\"pìn\":\"牝汖聘\",\n\"pīng\":\"乒甹俜娉涄砯聠艵頩\",\n\"píng\":\"平评凭呯坪岼泙郱帡庰枰洴玶胓荓瓶帲淜硑萍蚲塀幈焩甁缾蓱蛢評馮軿鲆凴竮鉼慿箳輧憑鮃檘簈蘋\",\n\"pǐng\":\"屛\",\n\"pìng\":\"\",\n\"pō\":\"钋陂坡岥泺泼釙翍颇溌酦頗潑醗濼醱鏺\",\n\"pó\":\"婆嘙搫蔢鄱皤櫇嚩\",\n\"pǒ\":\"叵尀钷笸鉕箥駊髲\",\n\"pò\":\"廹岶敀昢洦珀哱烞砶破粕奤湐猼蒪魄\",\n\"pōu\":\"抙剖娝捊\",\n\"póu\":\"抔抙垺捊掊裒箁\",\n\"pǒu\":\"咅哣婄掊棓犃\",\n\"pū\":\"攵攴扑抪炇柨陠痡秿噗撲潽鋪鯆\",\n\"pú\":\"圤匍捗莆菩菐葡蒲蒱僕箁酺墣獛璞濮瞨穙镤贌纀鏷\",\n\"pǔ\":\"圃埔浦烳普圑溥暜谱諩擈樸氆檏镨譜蹼鐠\",\n\"pù\":\"痡舗舖鋪曝\",\n\"qi\":\"啐\",\n\"qī\":\"七迉沏恓柒倛凄桤郪娸悽戚捿桼淒萋喰攲敧棲欹欺紪缉傶褄僛嘁墄慽榿漆緀慼緝諆踦螇霋蹊魌鏚鶈\",\n\"qí\":\"丌亓伎祁圻岓岐忯芪亝斉歧畁祇祈肵俟疧荠剘斊旂竒耆脐蚔蚑蚚陭颀埼崎帺掑淇猉畦萁萕跂軝釮骐骑嵜棊棋琦琪祺蛴隑愭碁碕稘褀锜頎鬿旗粸綥綨綦蜝蜞齊璂禥蕲觭螧錡鲯懠濝薺藄鄿檱櫀簯簱臍騎騏鳍蘄鯕鵸鶀麒籏艩蠐鬐騹鰭玂麡\",\n\"qǐ\":\"乞邔企屺芑启呇杞玘盀唘豈起啔啓啟婍梩绮袳跂晵棨綮綺諬闙\",\n\"qì\":\"气讫忔扱気汔迄呚弃汽矵芞亟呮泣炁盵咠洓竐栔欫氣訖唭焏夡愒棄湆湇葺滊碛摖暣甈碶噐憇槭趞器憩磜磧磩藒礘罊蟿鐑\",\n\"qiā\":\"抲掐袷揢葜擖\",\n\"qiá\":\"\",\n\"qiǎ\":\"拤峠跒酠鞐\",\n\"qià\":\"圶冾匼咭帢恰洽胢殎硈愘磍髂\",\n\"qiān\":\"千仟阡圱圲奷扦汘芊迁佥岍杄汧茾欦竏臤钎拪牵粁悭挳蚈谸婜孯牽釺掔谦鈆僉愆签鉛骞鹐慳搴摼撁厱磏諐遷鳽褰謙顅檶攐攑櫏簽鏲鵮孅攓騫籖鬜鬝籤韆\",\n\"qián\":\"仱岒忴扲拑玪乹前炶荨钤歬虔蚙钱钳偂掮揵軡亁媊朁犍葥鈐煔鉗墘榩箝銭撍潛潜羬蕁橬錢黔鎆黚騝濳騚灊鰬\",\n\"qiǎn\":\"凵肷唊淺嵰遣槏膁蜸谴缱繾譴鑓\",\n\"qiàn\":\"欠刋伣芡俔茜倩悓堑掅傔棈椠欿嗛慊皘蒨塹歉綪蔳儙槧篏輤篟壍嬱縴\",\n\"qiāng\":\"羌戕戗斨枪玱矼羗猐啌跄嗴椌溬獇腔嗆搶蜣锖嶈戧摤槍牄瑲羫锵篬謒蹌蹡鎗鏘鏹鶬\",\n\"qiáng\":\"強墙嫱蔷樯漒蔃墻嬙廧彊薔檣牆艢蘠\",\n\"qiǎng\":\"強羟搶羥墏彊繈襁镪繦鏹\",\n\"qiàng\":\"戗炝唴跄嗆戧摪熗羻\",\n\"qiāo\":\"帩硗郻喿嵪煍跷鄥鄡劁勪幓敲毃踍锹墝碻磝頝骹墽幧橇燆缲橾磽鍬鍫礉繑繰趬蹺蹻鏒鐰\",\n\"qiáo\":\"乔侨峤荍荞桥硚菬喬睄僑摮槗谯嘺墧嫶嶠憔潐蕎鞒樵橋燋犞癄瞧礄翹櫵藮譙趫鐈鞽顦\",\n\"qiǎo\":\"丂巧釥愀髜\",\n\"qiào\":\"诮陗峭窍偢殻殼誚髚僺嘺撬箾噭撽鞘韒礉竅翹鞩躈\",\n\"qiē\":\"苆\",\n\"qié\":\"癿伽茄聺\",\n\"qiě\":\"\",\n\"qiè\":\"厒妾怯疌郄匧窃悏挈栔洯帹惬淁笡愜椄猰蛪趄跙嗛慊朅稧箧锲篋踥穕鍥鯜竊籡\",\n\"qīn\":\"兓侵钦衾骎菳媇嵚欽嵰綅誛嶔親顉駸鮼寴\",\n\"qín\":\"庈忴扲芩芹肣矜埐珡矝秦耹菦蚙捦菳琴琹禽覃鈙鈫雂勤嗪嫀溱靲廑慬噙嶜擒斳鳹懄檎澿瘽螓懃蠄鵭\",\n\"qǐn\":\"坅昑笉梫赾寑锓寝寖寢鋟螼\",\n\"qìn\":\"吢吣抋沁唚菣揿搇撳寴瀙藽\",\n\"qīng\":\"靑青氢轻倾卿郬圊埥寈氫淸清軽傾綪蜻輕錆鲭鯖鑋\",\n\"qíng\":\"夝甠剠勍啨情殑硘晴棾氰葝暒擏樈擎檠黥\",\n\"qǐng\":\"苘顷请庼頃廎漀請檾謦\",\n\"qìng\":\"庆凊掅殸渹碃箐綮靘慶磬親儬濪罄櫦\",\n\"qiōng\":\"\",\n\"qióng\":\"卭邛宆穷穹茕桏惸琁筇笻赹焪焭琼舼蛬蛩煢熍睘跫銎瞏窮儝嬛憌橩璚藑瓊竆藭瓗\",\n\"qiòng\":\"\",\n\"qiū\":\"丘丠邱坵恘秌秋恷蚯媝湫萩楸湬塸蓲鹙篍緧蝵穐趥龜橚鳅蟗鞦鞧蘒鰌鰍鶖蠤龝\",\n\"qiú\":\"厹叴囚扏犰玌艽芁朹汓肍求虬泅牫虯俅觓訅訄酋唒浗紌莍逎逑釚梂殏毬球赇釻頄崷巯渞湭皳盚遒煪絿蛷裘巰觩賕璆蝤銶醔鮂鼽鯄鰽\",\n\"qiǔ\":\"搝糗\",\n\"qiù\":\"\",\n\"qū\":\"伹佉匤岖诎阹驱呿坥屈岴抾浀祛胠袪區焌紶蛆躯煀筁粬蛐詘趍嶇憈駆敺觑誳駈麹髷魼趨麯覰覷軀鶌麴黢覻驅鰸鱋\",\n\"qú\":\"佢劬斪朐胊菃衐鸲淭絇翑蚼葋軥蕖璖磲螶鴝璩翵蟝瞿鼩蘧忂灈戵欋氍爠籧臞癯欔蠷衢躣蠼鑺鸜\",\n\"qǔ\":\"苣取竘娶紶詓竬蝺龋齲\",\n\"qù\":\"去厺刞欪耝阒觑閴麮闃鼁覰覷覻\",\n\"quān\":\"奍弮悛圏棬椦箞鐉\",\n\"quán\":\"全权佺狋诠姾峑恮泉洤荃拳牷辁啳埢婘惓捲痊硂铨椦湶犈筌絟葲搼楾瑔觠詮跧輇蜷銓槫権踡縓醛駩闎鳈鬈騡孉巏鰁權齤矔蠸颧顴灥\",\n\"quǎn\":\"犭犬犮畎烇绻綣虇\",\n\"quàn\":\"劝牶勧韏勸灥\",\n\"quē\":\"炔缺缼蚗蒛阙闕\",\n\"qué\":\"瘸\",\n\"què\":\"汋却卻埆崅悫琷傕敠敪棤硞确阕塙搉皵碏阙鹊愨榷墧慤碻確趞燩闋礐闕鵲礭\",\n\"qūn\":\"夋囷逡箘歏\",\n\"qún\":\"宭峮帬裙羣群裠麇\",\n\"qǔn\":\"\",\n\"rán\":\"呥肰衻袇蚦袡蚺然髥嘫髯燃繎\",\n\"rǎn\":\"冄冉姌苒染珃媣蒅熯橪\",\n\"ràn\":\"\",\n\"rāng\":\"\",\n\"ráng\":\"穣儴勷瀼獽蘘禳瓤穰躟鬤\",\n\"rǎng\":\"壌壤攘爙纕\",\n\"ràng\":\"让懹譲讓\",\n\"ráo\":\"娆荛饶桡嬈蕘橈襓饒\",\n\"rǎo\":\"扰娆隢嬈擾\",\n\"rào\":\"绕遶穘繞\",\n\"ré\":\"捼\",\n\"rě\":\"喏惹\",\n\"rè\":\"热渃熱\",\n\"rén\":\"亻人仁壬忈朲忎秂芢魜銋鵀\",\n\"rěn\":\"忍荏栠栣荵秹菍棯稔綛躵銋\",\n\"rèn\":\"刃刄认仞仭讱屻岃扨纫妊杒牣纴肕轫韧饪祍姙紉衽紝訒軔梕袵釰釼絍腍鈓靱靭韌飪認餁\",\n\"rēng\":\"扔\",\n\"réng\":\"仍辸礽芿陾\",\n\"rì\":\"日驲囸氜衵釰釼鈤馹\",\n\"róng\":\"戎肜栄狨绒茙茸荣容峵毧烿傛媶嵘搑絨羢嫆嵤搈榵溶蓉榕榮熔瑢穁槦縙蝾褣镕螎融駥嬫嶸爃鎔瀜曧蠑\",\n\"rǒng\":\"冗宂坈傇軵縙氄\",\n\"ròng\":\"穃縙\",\n\"róu\":\"厹禸柔粈脜媃揉渘葇楺煣瑈腬糅蝚蹂輮鍒鞣瓇騥鰇鶔\",\n\"rǒu\":\"韖\",\n\"ròu\":\"肉宍楺譳\",\n\"rū\":\"嶿\",\n\"rú\":\"邚如吺侞帤茹挐桇袽铷渪筎蒘銣蕠蝡儒鴑嚅嬬孺濡獳薷鴽曘檽襦繻蠕颥醹顬鱬\",\n\"rǔ\":\"汝肗乳辱鄏擩\",\n\"rù\":\"入扖杁洳嗕媷溽缛蓐鳰褥縟\",\n\"ruán\":\"堧撋壖\",\n\"ruǎn\":\"阮朊软耎偄軟媆瑌腝碝緛輭檽瓀礝\",\n\"ruàn\":\"緛\",\n\"ruí\":\"苼桵甤緌蕤\",\n\"ruǐ\":\"惢蕋蕊橤繠壡蘃蘂\",\n\"ruì\":\"兊兌抐汭芮枘笍蚋锐瑞蜹睿銳鋭叡鏸\",\n\"rún\":\"瞤\",\n\"rǔn\":\"\",\n\"rùn\":\"闰润閏閠潤橍膶\",\n\"ruó\":\"挼捼\",\n\"ruò\":\"叒偌弱鄀婼渃焫楉嵶蒻箬篛爇鰙鰯鶸\",\n\"sa\":\"\",\n\"sā\":\"仨\",\n\"sǎ\":\"訯靸潵鞈攃灑躠纚\",\n\"sà\":\"卅泧钑飒脎萨鈒摋隡馺蕯颯薩櫒鏾\",\n\"sāi\":\"毢愢揌毸腮嘥噻鳃顋鰓\",\n\"sǎi\":\"嗮\",\n\"sài\":\"赛僿賽簺\",\n\"san\":\"壭\",\n\"sān\":\"三弎叁參叄叅毶毵厁毿犙鬖\",\n\"sǎn\":\"仐伞傘糁馓糝糤糣繖鏒鏾饊\",\n\"sàn\":\"俕帴閐潵\",\n\"sāng\":\"桒桑喪槡\",\n\"sǎng\":\"嗓搡磉褬颡鎟顙\",\n\"sàng\":\"喪\",\n\"sāo\":\"掻慅搔溞缫懆缲螦繅鳋颾騒繰騷鰠鱢\",\n\"sǎo\":\"埽掃嫂\",\n\"sào\":\"埽掃瘙懆氉矂髞\",\n\"sē\":\"閪\",\n\"sè\":\"色拺洓栜涩啬渋粣铯雭歮琗嗇瑟摵歰銫槭澁廧懎擌濇濏瘷穑薔澀璱瀒穡鎍繬穯轖鏼闟譅飋\",\n\"sēn\":\"森椮槮襂\",\n\"sěn\":\"\",\n\"sēng\":\"僧鬙\",\n\"sèng\":\"\",\n\"sī\":\"厶纟丝司糹糸私咝泀俬恖虒鸶偲傂媤愢斯絲缌蛳楒禗鉰飔凘厮禠罳蜤銯锶嘶噝廝撕澌磃緦蕬鋖燍螄鍶蟖蟴颸騦鯣鐁鷥鼶\",\n\"sí\":\"\",\n\"sǐ\":\"死愢\",\n\"sì\":\"巳亖四寺汜佀兕姒泤祀価孠杫泗饲驷俟娰枱柶洠牭洍涘肂飤梩笥耛耜釲竢覗嗣肆貄鈶鈻飴飼榹銉禩駟蕼儩騃瀃\",\n\"sōng\":\"忪枀松枩娀柗倯凇崧庺梥淞菘愡揔棇嵩硹憽濍檧鬆\",\n\"sóng\":\"\",\n\"sǒng\":\"怂悚捒耸竦傱愯楤嵷摗漎慫聳駷\",\n\"sòng\":\"吅讼宋诵送颂訟頌誦鎹餸\",\n\"sōu\":\"凁捒捜鄋嗖廀廋搜溲獀蒐蓃馊摉飕摗锼撨艘螋醙鎪餿颼颾鏉騪\",\n\"sǒu\":\"叜叟傁棷蓃嗾瞍擞薮擻藪櫢籔\",\n\"sòu\":\"欶嗽擞瘶擻\",\n\"sū\":\"甦酥稡稣窣穌鯂蘇蘓櫯囌\",\n\"sú\":\"圱俗\",\n\"sǔ\":\"\",\n\"sù\":\"玊夙诉泝肃洬涑珟素莤速埣梀殐粛骕傃棴粟訴谡嗉塑塐嫊愫溯溸肅遡鹔僳愬摵榡膆蔌觫趚遬憟樕樎潥碿鋉餗潚縤橚璛簌縮藗謖蹜驌鱐鷫\",\n\"suān\":\"狻痠酸\",\n\"suǎn\":\"匴篹\",\n\"suàn\":\"祘笇筭蒜算\",\n\"suī\":\"夊芕虽倠哸娞浽荾荽眭毸滖睢缞嗺熣濉縗鞖雖\",\n\"suí\":\"绥隋随遀綏隨瓍髄\",\n\"suǐ\":\"膸瀡髓\",\n\"suì\":\"亗岁砕祟谇埣嵗遂歲歳煫睟碎隧嬘澻穂誶賥檖燧璲禭穗穟繀襚邃旞繐繸譢鐆鏸鐩韢\",\n\"sūn\":\"狲荪孫喰飧飱搎猻蓀槂蕵薞\",\n\"sǔn\":\"扻损笋隼筍損榫箰簨鎨鶽\",\n\"sùn\":\"摌\",\n\"suō\":\"唆娑挱莏莎傞挲桫梭睃嗍嗦羧蓑摍趖簑簔縮鮻\",\n\"suó\":\"\",\n\"suǒ\":\"所乺唢索琑琐嫅惢锁嗩暛溑獕瑣褨璅縒鎍鎖鎻鏁\",\n\"suò\":\"逤溹蜶\",\n\"shā\":\"杀杉纱乷剎砂唦挱殺猀粆紗莎挲桬毮铩痧硰摋蔱裟榝樧魦鲨閷髿鎩鯊鯋繺\",\n\"shá\":\"啥\",\n\"shǎ\":\"傻儍\",\n\"shà\":\"倽唼啑帹菨萐喢嗄廈歃翜歰箑翣濈閯霎\",\n\"shāi\":\"筛篩諰簁簛籭\",\n\"shǎi\":\"摋\",\n\"shài\":\"晒攦曬\",\n\"shān\":\"山彡邖圸删刪杉芟姍姗衫钐埏挻柵炶狦珊舢痁脠軕笘釤閊傓跚剼搧煔嘇幓煽潸澘穇檆縿膻鯅羴羶\",\n\"shán\":\"\",\n\"shǎn\":\"闪陕炶陝閃閄晱煔睒摻熌覢\",\n\"shàn\":\"讪汕姍姗疝钐剡訕赸掞釤善單椫禅銏骟僐鄯儃墡墠撣潬缮嬗嶦擅敾樿歚禪膳磰謆赡繕蟮蟺譱贍鐥饍騸鳝鳣灗鱓鱔\",\n\"shang\":\"\",\n\"shāng\":\"伤殇商愓湯觞傷禓墒慯滳漡蔏殤熵螪觴謪鬺\",\n\"shǎng\":\"垧扄晌埫赏樉賞鋿鏛贘鑜\",\n\"shàng\":\"丄尙尚恦绱緔鞝\",\n\"shāo\":\"娋弰烧莦焼萷旓筲艄輎蕱燒鞘髾鮹\",\n\"sháo\":\"勺芍杓苕柖玿韶\",\n\"shǎo\":\"\",\n\"shào\":\"佋劭卲邵绍柖哨娋袑紹睄綤潲\",\n\"shē\":\"奓奢猞赊畭畬畲輋賒賖檨\",\n\"shé\":\"舌佘虵阇揲蛥闍磼\",\n\"shě\":\"舍捨\",\n\"shè\":\"厍设社泏舎舍厙挕涉涻渉設赦弽慑摂滠慴蔎歙蠂韘騇懾攝灄麝欇\",\n\"shéi\":\"誰\",\n\"shēn\":\"申屾扟伸身侁冞呻妽籶绅罙诜姺柛氠珅穼籸娠峷甡眒砷莘參叄堔敒深紳兟叅棽葠裑訷嫀搷罧蓡詵幓甧糁蔘糂燊薓駪鲹曑糝糣鯓鵢鯵鰺\",\n\"shén\":\"神榊鉮鰰\",\n\"shěn\":\"邥吲弞抌审矤哂矧宷谂谉婶淰渖訠棯審諗頣魫曋瞫嬸瀋覾讅\",\n\"shèn\":\"肾侺昚胂涁眘渗祳脤谌腎葚愼慎椹瘆蜄蜃滲鋠瘮黮\",\n\"shēng\":\"升生阩呏声斘昇枡泩狌苼殅牲珄竔陞曻陹殸笙湦焺甥鉎聲鍟鼪鵿\",\n\"shéng\":\"渑绳憴澠縄繉繩譝\",\n\"shěng\":\"眚偗渻\",\n\"shèng\":\"圣乗娍胜晠晟剰剩勝椉貹嵊琞聖墭榺蕂橳賸\",\n\"shi\":\"辻籂\",\n\"shī\":\"尸失师厔呞虱诗邿鸤屍施浉狮師絁釶湤湿葹溮溼獅蒒蓍詩鉇嘘瑡酾鳲噓箷蝨鳾褷鲺濕鍦鯴鰤鶳襹釃\",\n\"shí\":\"十饣乭时竍実实旹飠姼峕炻祏蚀埘宲時莳寔湜遈塒嵵溡蒔鉐實榯碩蝕鲥鮖鼫識鼭鰣\",\n\"shǐ\":\"史矢乨豕使始驶兘宩屎狶痑笶榁鉂駛\",\n\"shì\":\"士礻丗世仕市示卋式忕亊忯戺事侍势呩柹视试饰冟咶室峙恀恃拭昰是枾柿狧眂贳适栻烒眎眡耆舐莳轼逝铈啫埶畤秲視釈崼崻弑徥惿揓谥貰释勢嗜弒楴煶睗筮蒔觢試軾鈰鉃飾舓誓適鉽馶奭銴餝餙噬嬕澨澤諡諟遾檡螫謚簭襫醳釋鰘\",\n\"shōu\":\"収收敊\",\n\"shóu\":\"熟\",\n\"shǒu\":\"扌手守垨首艏\",\n\"shòu\":\"寿受狩兽售授涭绶痩膄壽夀瘦綬嘼獣獸鏉\",\n\"shū\":\"书殳疋忬抒纾叔杸枢陎姝倐倏捈書殊紓婌悆掓梳淑焂菽軗鄃琡疎疏舒摅毹毺綀输瑹跾踈樞緰蔬輸橾鮛儵攄瀭鵨\",\n\"shú\":\"朮尗秫孰赎蒣塾熟璹贖\",\n\"shǔ\":\"鼡暏暑稌黍署蜀鼠數潻薥薯曙癙藷襡糬襩屬籔蠴鱪鱰\",\n\"shù\":\"朮戍束沭述侸俞兪咰怸怷树竖荗恕捒庻庶絉蒁術隃尌裋竪腧鉥墅漱潄數澍豎樹濖錰霔鏣鶐虪\",\n\"shuā\":\"唰\",\n\"shuǎ\":\"耍\",\n\"shuà\":\"誜\",\n\"shuāi\":\"缞摔縗\",\n\"shuǎi\":\"甩\",\n\"shuài\":\"帅帥蟀卛\",\n\"shuān\":\"闩拴閂栓絟\",\n\"shuàn\":\"涮腨槫\",\n\"shuāng\":\"双泷霜雙孀瀧骦孇騻欆礵鷞鹴艭驦鸘\",\n\"shuǎng\":\"爽塽慡漺縔鏯\",\n\"shuàng\":\"灀\",\n\"shuí\":\"谁脽誰\",\n\"shuǐ\":\"氵水氺閖\",\n\"shuì\":\"帨挩捝涗涚娷祱稅税裞睡說説\",\n\"shǔn\":\"吮楯\",\n\"shùn\":\"顺眴舜順蕣橓瞚瞤瞬鬊\",\n\"shuō\":\"說説\",\n\"shuò\":\"妁洬烁朔铄欶矟搠蒴銏愬槊獡碩數箾鎙爍鑠\",\n\"ta\":\"侤\",\n\"tā\":\"他它牠祂趿铊塌榙溻鉈褟闧\",\n\"tá\":\"\",\n\"tǎ\":\"塔溚墖獭鮙鳎獺鰨\",\n\"tà\":\"沓挞狧闼粏崉涾傝嗒搨遝遢阘榻毾漯禢撻澾誻踏鞈嚃橽錔濌蹋鞜鎉鎑闒鞳蹹躂嚺闟闥譶躢\",\n\"tāi\":\"囼孡珆胎\",\n\"tái\":\"旲邰坮抬骀枱炱炲菭跆鲐箈臺颱駘儓鮐嬯擡薹檯斄籉\",\n\"tǎi\":\"奤\",\n\"tài\":\"太冭夳忕汏忲汰汱态肽钛泰舦酞鈦溙態燤\",\n\"tān\":\"坍贪怹啴痑舑貪摊滩嘽潬瘫擹攤灘癱\",\n\"tán\":\"坛昙倓谈郯埮婒惔弾覃榃痰锬谭嘾墰墵彈憛潭談醈壇曇橝澹燂錟檀顃罈藫壜繵譚貚醰譠罎\",\n\"tǎn\":\"忐坦袒钽菼毯僋鉭嗿緂儃憳憻暺醓璮襢\",\n\"tàn\":\"叹炭倓埮探傝湠僋嘆碳舕歎\",\n\"tāng\":\"铴湯嘡劏羰蝪薚镗蹚鏜闛鞺鼞\",\n\"táng\":\"坣唐堂傏啺愓棠鄌塘嵣搪溏蓎隚榶漟煻瑭禟膅樘磄糃膛橖篖糖螗踼糛螳赯醣鎕餹鏜闛饄鶶\",\n\"tǎng\":\"伖帑偒傥耥躺镋鎲儻戃灙曭爣矘钂\",\n\"tàng\":\"烫铴摥燙鐋\",\n\"tāo\":\"夲夵弢抭涛绦掏涭絛詜嫍幍慆搯滔槄瑫韬飸縚縧濤謟轁鞱韜饕\",\n\"táo\":\"匋迯咷洮逃桃陶啕梼淘绹萄祹裪綯蜪鞀醄鞉鋾駣檮饀騊鼗\",\n\"tǎo\":\"讨討\",\n\"tào\":\"套\",\n\"tè\":\"忑忒特脦犆铽慝鋱蟘\",\n\"tēng\":\"熥膯鼟\",\n\"téng\":\"疼痋幐腾誊漛滕邆縢螣駦謄儯藤騰籐鰧籘虅驣\",\n\"tèng\":\"霯\",\n\"tī\":\"剔梯锑踢銻擿鷉鷈體\",\n\"tí\":\"苐厗荑桋绨偍珶啼媂媞崹惿渧稊缇罤遆鹈嗁瑅禔綈睼碮褆徲漽磃緹蕛题趧蹄醍謕蹏鍗鳀題鮷鵜騠鯷鶗鶙禵鷤\",\n\"tǐ\":\"挮徥躰骵醍軆體\",\n\"tì\":\"戻奃屉剃朑俶倜悌挮涕眣绨逖啑屜悐惕掦笹逷屟惖揥替棣綈裼褅歒殢髰薙嚏鬀嚔瓋鬄籊趯\",\n\"tiān\":\"天兲呑婖添酟靔黇靝\",\n\"tián\":\"田屇沺恬畑畋盷胋钿甛甜菾湉塡搷阗瑱碵緂磌窴鴫璳闐鷆鷏\",\n\"tiǎn\":\"奵忝殄倎栝唺悿淟紾铦晪琠腆觍痶睓舔銛餂覥賟銽錪\",\n\"tiàn\":\"掭菾琠瑱舚\",\n\"tiāo\":\"旫佻庣恌條祧聎\",\n\"tiáo\":\"芀朷岧岹苕迢祒條笤萔铫蓚蓨蓧龆樤蜩銚調鋚鞗髫鲦鯈鎥齠鰷\",\n\"tiǎo\":\"宨晀朓脁窕誂斢窱嬥\",\n\"tiào\":\"啁眺粜絩覜趒糶\",\n\"tiē\":\"怗贴萜聑貼跕\",\n\"tié\":\"\",\n\"tiě\":\"铁蛈鉄僣銕鐡鐵驖\",\n\"tiè\":\"呫飻餮\",\n\"tīng\":\"厅庁汀听庍耓厛烃桯烴渟綎鞓聴聼廰聽廳\",\n\"tíng\":\"邒廷亭庭莛停婷嵉渟筳葶蜓楟榳閮霆聤蝏諪鼮\",\n\"tǐng\":\"圢甼町侹侱娗挺涏梃烶珽脡铤艇颋誔鋌閮頲\",\n\"tìng\":\"忊梃濎\",\n\"tōng\":\"囲炵通痌絧嗵蓪樋\",\n\"tóng\":\"仝佟彤侗峂庝哃垌峒峝狪茼晍桐浵烔砼蚒偅痌眮秱铜硧童粡絧詷赨酮鉖僮勭鉵銅餇鲖潼獞曈朣橦氃燑犝膧瞳穜鮦\",\n\"tǒng\":\"侗统捅桶筒統筩綂\",\n\"tòng\":\"恸痛衕慟憅\",\n\"tou\":\"\",\n\"tōu\":\"偸偷婾媮緰鋀鍮\",\n\"tóu\":\"亠投骰頭\",\n\"tǒu\":\"妵紏敨飳斢黈蘣\",\n\"tòu\":\"透埱\",\n\"tu\":\"汢\",\n\"tū\":\"凸宊禿秃怢突涋捸堗湥痜葖嶀鋵鵚鼵\",\n\"tú\":\"図图凃峹庩徒悇捈涂荼莵途啚屠梌菟揬稌趃塗嵞瘏筡腯蒤鈯圗圖廜摕潳瑹跿酴墿馟檡鍎駼鵌鶟鷋鷵\",\n\"tǔ\":\"土圡钍唋釷\",\n\"tù\":\"兎迌兔唋莵堍菟鋀鵵\",\n\"tuān\":\"湍猯圕煓貒\",\n\"tuán\":\"団团抟剸團塼慱摶漙槫篿檲鏄糰鷒鷻\",\n\"tuǎn\":\"畽墥疃\",\n\"tuàn\":\"彖湪猯褖貒\",\n\"tuī\":\"忒推蓷藬讉\",\n\"tuí\":\"弚颓僓隤墤尵橔頺頹頽魋穨蘈蹪\",\n\"tuǐ\":\"俀聉腿僓蹆骽\",\n\"tuì\":\"侻退娧煺蛻蜕螁駾\",\n\"tūn\":\"吞呑旽涒啍朜焞噋憞暾\",\n\"tún\":\"坉庉忳芚饨蛌豘豚軘飩鲀魨霕黗臀臋\",\n\"tǔn\":\"氽\",\n\"tùn\":\"\",\n\"tuō\":\"乇仛讬托扡汑饦杔侂咃咜拕拖沰挩捝莌袉袥託啴涶脫脱飥馲魠鮵\",\n\"tuó\":\"阤驮佗陀陁坨岮沱沲狏驼侻柁砤砣袉铊鸵紽堶媠詑跎酡碢鉈馱槖駄鋖駞駝橐鮀鴕鼧騨鼍驒驝鼉\",\n\"tuǒ\":\"彵妥庹椭楕嫷撱橢鵎鰖\",\n\"tuò\":\"杝柝毤唾涶萚跅毻嶞箨蘀籜\",\n\"wa\":\"哇\",\n\"wā\":\"屲穵呙劸咼哇徍挖洼娲畖窊唲啘媧窐嗗瓾蛙搲溛漥窪鼃攨韈\",\n\"wá\":\"娃\",\n\"wǎ\":\"佤邷咓砙瓸搲\",\n\"wà\":\"帓袜婠聉嗢搲腽膃韎襪韤\",\n\"wai\":\"\",\n\"wāi\":\"呙咼歪喎竵瀤\",\n\"wǎi\":\"崴\",\n\"wài\":\"外顡\",\n\"wān\":\"毌夗弯剜埦婠帵捥塆湾睕蜿潫豌鋺彎壪灣\",\n\"wán\":\"丸刓汍纨芄完岏忨抏杬玩笂紈捖蚖顽烷琓貦頑翫\",\n\"wǎn\":\"夘夗倇唍挽盌莞莬埦婉惋捥晚晥梚涴绾脘菀萖惌晩晼椀琬皖畹碗箢綩綰輓踠鋔鋺\",\n\"wàn\":\"卍卐妧杤捥脕掔腕萬絻綄輐槾澫鋄瞣薍錽蟃贃鎫贎\",\n\"wāng\":\"尣尫尪汪尩瀇\",\n\"wáng\":\"亾兦仼莣蚟朚\",\n\"wǎng\":\"罓罒网彺忹抂徃往枉罖罔迬惘菵暀棢蛧辋網蝄誷輞瀇魍\",\n\"wàng\":\"妄忘迋旺盳徍望暀朢\",\n\"wēi\":\"厃危威倭烓偎逶隇隈喴媙崴嵔愄揋揻葨葳微椳楲溦煨詴蜲縅蝛覣嶶薇燰鳂癐癓巍鰃鰄霺\",\n\"wéi\":\"囗韦圩囲围帏沩违闱隹峗峞洈為韋桅涠唯帷惟硙维喡圍媁嵬幃湋溈爲琟違潍維蓶鄬撝潙潿醀濰鍏闈鮠壝矀覹犩欈\",\n\"wěi\":\"伟伪纬芛苇炜玮洧娓屗捤浘荱诿偉偽唩崣捼梶痏硊萎隗骩媁嵔廆徫愇渨猥葦蒍骫骪暐椲煒瑋痿腲艉韪僞嶉撱碨磈鲔寪緯蔿諉踓韑頠薳儰濻鍡鮪瀢韙颹韡亹瓗斖\",\n\"wèi\":\"卫未位味苿為畏胃叞軎猚硙菋谓喂喡媦渭爲猬煟墛瞆碨蔚蜼慰熭犚磑緭蝟衛懀罻衞謂餧鮇螱褽餵魏藯轊鏏霨鳚蘶饖瓗讆躗讏躛\",\n\"wēn\":\"昷塭温缊榅殟溫瑥辒韫榲瘟緼縕豱輼轀鎾饂鳁鞰鰛鰮\",\n\"wén\":\"文彣芠炆玟闻紋蚉蚊珳阌雯瘒聞馼駇魰鳼鴍螡閺閿蟁闅鼤繧闦\",\n\"wěn\":\"伆刎吻呅忟抆呡忞歾肳紊桽脗稳穏穩\",\n\"wèn\":\"问妏汶紋莬問渂揾搵絻顐璺\",\n\"wēng\":\"翁嗡滃鹟聬螉鎓鶲\",\n\"wěng\":\"勜奣塕嵡滃蓊暡瞈攚\",\n\"wèng\":\"瓮蕹甕罋齆\",\n\"wō\":\"挝倭莴唩涹渦猧萵喔窝窩蜗撾濄緺蝸踒薶\",\n\"wǒ\":\"呙我咼婑婐捰\",\n\"wò\":\"仴沃肟卧枂臥偓捾涴媉幄握渥焥硪楃腛斡瞃濣瓁臒龌馧龏齷\",\n\"wū\":\"乌圬弙扜扝汚汙污邬呜巫杅杇於屋洿诬钨烏剭窏釫惡鄔嗚誈僫歍誣箼鋘螐鴮鎢鰞\",\n\"wú\":\"无毋吳吴吾呉芜郚唔娪峿洖浯茣莁梧珸祦無铻鹀蜈墲蕪鋙鋘橆璑蟱鯃鵐譕鼯鷡\",\n\"wǔ\":\"乄五午仵伍妩庑忤怃迕旿武玝侮倵娒捂逜陚啎娬牾堥珷摀碔鹉熓瑦舞嫵廡憮潕儛甒膴瞴鵡躌\",\n\"wù\":\"兀勿务戊阢屼扤坞岉杌沕芴忢旿物矹俉卼敄柮误務唔娪悟悞悮粅趶晤焐婺嵍惡渞痦隖靰骛塢奦嵨溩雺雾僫寤熃誤鹜鋈窹霚鼿霧齀蘁騖鶩\",\n\"xī\":\"夕兮邜吸忚扱汐西希扸卥昔析矽穸肸肹俙咥咭徆怸恓诶郗饻唏奚娭屖息悕氥浠牺狶莃唽悉惜晞桸欷淅渓烯焁焈琋硒羛菥赥釸傒惁晰晳焟焬犀睎稀粞翖翕舾鄎厀嵠徯溪煕皙碏蒠裼锡僖榽熄熈熙獡緆蜥覡誒豨閪餏嘻噏嬆嬉嶲憘潝瘜磎膝凞暿樨橀歙熻熺熹窸羲螅螇錫燨犠瞦礂蟋豀谿豯貕蹊巂糦繥釐雟鯑鵗觹譆醯鏭鐊隵嚱巇曦爔犧酅饎觽鼷蠵鸂觿鑴\",\n\"xí\":\"习郋席習袭觋雭喺媳椺蒵蓆嶍漝趘槢薂隰檄謵鎴霫鳛飁騱騽鰼襲驨\",\n\"xǐ\":\"杫枲玺徙喜葈葸鈢鉩鉨屣漇蓰銑憘憙暿橲歖禧諰壐縰謑鳃蟢蹝釐璽鰓瓕鱚囍矖纚躧\",\n\"xì\":\"匸卌扢屃忾饩呬忥怬细郄钑係恄欪盻郤屓欯绤細釳阋傒摡椞舃舄趇隙愾慀滊禊綌蒵赩隟墍熂犔稧戯潟澙蕮覤戱縘黖戲磶虩餼鬩繫闟霼屭衋\",\n\"xiā\":\"呷虲疨虾谺傄閕煆颬瘕瞎蝦鰕\",\n\"xiá\":\"匣侠狎俠峡柙炠狭陜埉峽烚狹珨祫捾硖笚翈舺陿徦硤遐敮暇瑕筪舝瘕碬辖磍蕸縖螛赮魻轄鍜霞鎋黠騢鶷\",\n\"xiǎ\":\"閕閜\",\n\"xià\":\"丅下乤圷芐疜夏梺廈睱諕嚇懗罅夓鎼鏬\",\n\"xiān\":\"仚仙屳先奾佡忺氙杴欦祆秈苮姺枮籼珗莶掀铦搟綅跹酰锨僊僲嘕摻銛暹銽韯嬐憸薟鍁繊褼韱鮮蹮馦孅廯攕醶纎鶱襳躚纖鱻\",\n\"xián\":\"伭咞闲咁妶弦臤贤咸唌挦涎玹盷胘娴娹婱絃舷蚿衔啣湺痫蛝閑閒鹇嗛嫌溓衘甉銜嫻嫺憪撏澖稴羬誸賢諴輱醎癇癎瞯藖礥鹹麙贒鑦鷴鷼鷳\",\n\"xiǎn\":\"彡冼狝显险崄毨烍猃蚬険赻筅尟尠搟禒蜆跣銑箲險嶮獫獮藓鍌鮮燹顕幰攇櫶蘚譣玁韅顯灦\",\n\"xiàn\":\"咞岘苋見现线臽限姭宪県陥哯垷娊峴涀莧軐陷埳晛現硍馅睍絤綖缐羡塪搚溓献粯羨腺僩僴槏綫誢憪撊線鋧憲橌橺縣錎餡壏懢豏麲瀗臔獻糮鏾霰鼸\",\n\"xiāng\":\"乡芗香郷厢啍鄉鄊廂湘缃萫葙鄕楿稥薌箱緗膷襄儴勷忀骧麘欀瓖镶鱜纕鑲驤\",\n\"xiáng\":\"夅瓨佭庠羏栙祥絴翔詳跭\",\n\"xiǎng\":\"享亯响蚃饷晑飨想銄餉鲞蠁鮝鯗響饗饟鱶\",\n\"xiàng\":\"向姠项珦象缿衖項像勨嶑潒銗閧曏橡襐闂嚮蟓鐌鱌\",\n\"xiāo\":\"灲灱呺枭侾哓枵骁宯宵庨消烋绡莦虓逍鸮婋梟焇猇萧痚痟睄硣硝窙翛销嗃揱綃蛸嘐歊潇熇箫踃嘵憢撨獟獢箾銷霄骹彇膮蕭颵魈鴞穘簘藃蟂蟏鴵嚣瀟簫蟰髇櫹嚻囂髐鷍蠨驍毊虈\",\n\"xiáo\":\"姣洨郩崤淆訤殽誵\",\n\"xiǎo\":\"小晓暁筱筿皛曉篠謏皢\",\n\"xiào\":\"孝効咲恔俲哮效涍笑啸傚敩殽嗃詨嘋嘨誟嘯薂歗熽斅斆\",\n\"xiē\":\"娎揳猲楔歇滊獦蝎蠍\",\n\"xié\":\"劦协旪協胁垥奊峫恊拹挾脇脅脋衺偕斜梋谐絜翓颉嗋愶慀搚携瑎綊熁膎鲑勰撷擕緳縀缬蝢鞋諧燲鮭嚡擷鞵儶襭孈攜讗龤\",\n\"xiě\":\"写冩寫藛\",\n\"xiè\":\"伳灺泻祄绁缷卸枻洩炨炧卨屑栧偞偰徢械烲焎禼紲亵媟屟渫絏絬谢僁塮觟觧榍榝榭褉靾噧寫屧暬樧碿緤嶰廨懈澥獬糏薤薢邂韰燮褻謝夑瀉鞢韘瀣爕繲蟹蠏齘齛纈齥齂躠躞\",\n\"xīn\":\"忄心邤妡忻辛昕杺欣盺俽莘惞訢鈊锌新歆廞鋅噺噷嬜薪馨鑫馫\",\n\"xín\":\"枔襑镡礥鐔\",\n\"xǐn\":\"伈\",\n\"xìn\":\"阠伩囟孞炘軐脪衅訫愖焮馸顖舋釁\",\n\"xīng\":\"狌星垶骍惺猩煋瑆腥觪箵篂興謃鮏曐觲騂皨鯹\",\n\"xíng\":\"刑邢饧巠形陉侀郉哘型洐荥钘陘娙硎铏鈃蛵滎鉶銒鋞餳\",\n\"xǐng\":\"睲醒擤\",\n\"xìng\":\"杏姓幸性荇倖莕婞悻涬葕睲緈鋞嬹臖\",\n\"xiōng\":\"凶匂兄兇匈芎讻忷汹哅恟洶胷胸訩詾賯\",\n\"xióng\":\"雄熊熋\",\n\"xiǒng\":\"焽焸\",\n\"xiòng\":\"诇詗夐敻\",\n\"xiū\":\"俢修咻庥烌烋羞脩脙鸺臹貅馐樇銝髤髹鎀鮴鵂鏅饈鱃飍\",\n\"xiú\":\"苬\",\n\"xiǔ\":\"朽滫潃糔\",\n\"xiù\":\"秀岫峀珛绣袖琇锈嗅溴綉璓褏褎銹螑嚊繍鏅繡鏥鏽齅\",\n\"xū\":\"圩戌旴姁疞盱欨砉胥须眗訏顼偦虗虚裇許谞媭揟欻湏湑虛須楈綇頊嘘墟稰蓲需魆噓嬃歔緰縃蕦蝑歘藇諝燸譃魖驉鑐鬚\",\n\"xú\":\"俆冔徐禑蒣\",\n\"xǔ\":\"呴姁诩浒栩珝喣湑蛡暊詡滸稰鄦糈諿醑盨\",\n\"xù\":\"旭伵序旴汿芧侐卹妶怴沀叙恓恤昫朐洫垿晇欰殈烅珬勗勖喐惐掝敍敘淢烼绪续蚼酗壻婿朂溆矞絮聓訹慉滀煦続蓄賉槒漵潊盢瞁緒聟蓿銊嘼獝稸緖藇藚續鱮\",\n\"xuān\":\"吅轩昍咺宣弲晅軒梋谖喧塇媗愃愋揎萲萱暄煊瑄蓒睻儇禤箮翧蝖鋗嬛懁蕿諠諼鞙駨鍹駽矎翾藼蘐蠉譞鰚讂\",\n\"xuán\":\"玄伭妶玹痃悬琁蜁嫙漩暶璇縣檈璿懸\",\n\"xuǎn\":\"咺选烜喛暅選癣癬\",\n\"xuàn\":\"怰泫昡炫绚眩袨铉琄眴衒渲絢楥楦鉉夐敻碹蔙镟颴縼繏鏇贙\",\n\"xuē\":\"疶蒆靴薛辥辪鞾\",\n\"xué\":\"穴斈乴学峃茓泶袕鸴敩踅噱壆學嶨澩燢觷鷽\",\n\"xuě\":\"彐雪樰膤艝轌鳕鱈\",\n\"xuè\":\"吷坹岤怴泬狘疦桖谑滈趐謔瞲瀥\",\n\"xūn\":\"坃勋埙焄勛塤煇窨勲勳薫嚑壎獯薰曛燻臐矄蘍壦爋纁醺\",\n\"xún\":\"廵寻巡旬杊畃询郇咰姰峋恂洵浔紃荀荨栒桪毥珣偱眴尋循揗詢鄩鲟噚潯蕁攳樳燅燖璕駨蟫蟳爓鱘鱏灥\",\n\"xùn\":\"卂训讯伨汛迅驯侚巺徇狥迿逊孫殉毥浚訊訓訙奞巽殾稄遜馴愻噀潠蕈濬爋顨鶽鑂\",\n\"ya\":\"\",\n\"yā\":\"丫圧吖亞庘押枒垭鸦桠鸭啞孲铔椏鴉錏鴨壓鵶鐚\",\n\"yá\":\"牙伢厑岈芽厓拁琊笌蚜堐崕崖涯猚釾睚衙漄齖\",\n\"yǎ\":\"疋厊庌挜疨唖啞掗痖雅瘂蕥\",\n\"yà\":\"劜圠轧亚冴襾覀讶亜犽迓亞玡軋姶娅挜砑俹氩埡婭掗訝铔揠氬猰聐圔椻稏碣窫潝磍壓瓛齾\",\n\"yān\":\"恹剦烟珚胭崦淊淹焑焉菸阉殗渰湮傿歅煙硽鄢嫣漹嶖樮醃橪閹閼嬮懨篶懕臙黫黰\",\n\"yán\":\"讠厃延闫严妍芫訁言岩昖沿炏炎郔唌埏姸娫狿莚娮梴盐啱琂硏訮閆阎喦嵓嵒筵綖蜒塩揅楌詽碞蔅羬颜厳虤閻檐顏顔嚴壛巌簷櫩壧巖巗欕礹鹽麣\",\n\"yǎn\":\"夵抁沇乵兖俨兗匽弇衍剡偃厣掞掩眼萒郾酓隁嵃愝扊揜晻棪渰渷琰遃隒椼硽罨裺演褗戭窴蝘魇噞嬐躽縯檿黡厴甗鰋鶠黤儼黬黭龑孍顩鼴巘巚曮魘鼹礹齴黶\",\n\"yàn\":\"厌妟觃牪匽姲彥彦洝砚唁宴晏烻艳覎验偐掞焔猏硏谚隁喭堰敥棪殗焱焰猒硯雁傿椻溎滟豣鳫厭墕暥熖酽鳱嬊谳餍鴈燄諺赝鬳嚈嬮曕鴳酀騐験嚥嬿艶贋軅曣爓醶騴齞鷃灔贗囐觾讌醼饜驗鷰艷灎釅驠灧讞豓豔灩\",\n\"yāng\":\"央姎抰泱柍殃胦眏秧鸯鉠雵鞅鍈鴦\",\n\"yáng\":\"扬阦阳旸杨炀玚飏佯劷氜疡钖垟徉昜洋羏烊珜眻陽婸崵崸愓揚蛘敭暘楊煬瑒禓瘍諹輰鍚鴹颺鰑霷鸉\",\n\"yǎng\":\"卬佒咉坱岟养柍炴氧眏痒紻傟勜楧軮慃氱蝆飬養駚懩攁瀁癢礢\",\n\"yàng\":\"怏柍恙样烊羕楧詇煬様漾鞅樣瀁\",\n\"yāo\":\"幺夭吆妖枖殀祅約訞喓葽楆腰鴁撽邀鴢\",\n\"yáo\":\"爻尧匋尭肴垚姚峣恌轺倄烑珧皐窕窑铫隃傜堯揺殽谣軺嗂媱徭愮搖摇滧猺遙遥僥摿暚榣瑤瑶銚飖餆嶢嶤徺磘窯窰餚繇謡謠鎐鳐颻蘨邎顤鰩鱙\",\n\"yǎo\":\"仸宎岆抭杳枖狕苭咬柼眑窅窈舀偠婹崾溔蓔榚闄騕齩鷕\",\n\"yào\":\"怮穾药烄袎窔筄葯詏愮熎瘧覞靿樂獟箹鹞薬鼼曜燿艞藥矅耀纅鷂讑\",\n\"ye\":\"亪\",\n\"yē\":\"吔耶倻椰暍歋窫噎潱擨蠮\",\n\"yé\":\"爷耶峫捓揶铘爺瑘釾鋣鎁\",\n\"yě\":\"也冶埜野嘢漜壄\",\n\"yè\":\"业曳页曵邺夜抴亱拽枼洂頁捙晔枽烨液焆谒堨揲殗腋葉墷楪業煠痷馌僷曅燁璍擖擛曄皣瞱緤鄴靥嶪嶫澲謁餣擫曗瞸鍱擪爗礏鎑饁鵺鐷靨驜瓛鸈\",\n\"yi\":\"弬\",\n\"yī\":\"一乊弌辷衤伊衣医吚壱依祎咿洢悘渏猗畩郼铱壹揖蛜禕嫛漪稦銥嬄撎噫夁瑿鹥繄檹毉醫黟譩鷖黳\",\n\"yí\":\"乁仪匜圯夷彵迆冝宐杝沂诒侇宜怡沶狏狋迤迱饴咦姨峓恞拸柂洟珆瓵荑贻迻宧巸扅栘桋眙胰袘貤痍移萓釶椬羠蛦詒貽遗媐暆椸煕誃跠頉颐飴儀熪箷遺嶬彛彜螔頥頤寲嶷簃顊鮧鴺彞彝謻鏔籎觺讉\",\n\"yǐ\":\"乚乛乙已以扡迆钇佁攺矣苡叕苢迤迱庡舣蚁釔倚扆笖逘酏偯猗崺攲敧旑鈘鉯鳦裿旖輢嬟敼螘檥礒艤蟻顗轙齮\",\n\"yì\":\"乂义亿弋刈忆艺仡匇肊艾议阣亦伇屹异忔芅伿佚劮呓坄役抑杙耴苅译邑佾呭呹妷峄怈怿易枍欥泆炈秇绎衪诣驿俋奕帟帠弈昳枻浂玴疫羿轶唈垼悒挹栺栧欭浥浳益袘袣谊貤勚埶埸悘悥掜殹異羛翊翌萟訳訲豙豛逸釴隿幆敡晹棭殔湙焲焬蛡詍跇軼鄓鈠骮亄兿嗌意溢獈痬睪竩缢義肄裔裛詣勩嫕廙榏潩瘗膉蓺蜴駅億槸毅熠熤熼瘞篒誼镒鹝鹢黓儗劓圛墿嬑嶧憶懌曀殪澺燚瘱瞖穓縊艗薏螠褹寱懝斁曎檍歝燡燱翳翼臆貖鮨癔藝藙贀鎰镱繶繹豷霬鯣鶃鶂鶍瀷蘙議譯醳醷饐囈鐿鷁鷊懿襼驛鷧虉鸃鷾讛齸\",\n\"yīn\":\"囙因阥阴侌垔姻洇茵荫音骃栶欭氤陰凐秵裀铟陻隂喑堙婣愔湮筃絪歅溵禋蒑蔭慇瘖銦磤緸鞇諲霒駰噾濦闉霠齗韾\",\n\"yín\":\"冘乑伒吟圻犾苂斦烎垠泿圁峾狺珢荶訔訚唫婬寅崟崯淫訡银鈝龂滛碒鄞夤蔩銀龈噖殥璌誾嚚檭蟫霪齦鷣\",\n\"yǐn\":\"廴尹引吲饮粌蚓硍赺淾鈏飲隠靷飮朄輑磤趛檃瘾隱嶾濥縯螾檼蘟櫽癮讔\",\n\"yìn\":\"廴印茚洕胤荫垽梀堷湚猌飲廕隠飮窨酳慭癊憗憖隱鮣懚\",\n\"yīng\":\"応旲英柍荥偀桜珱莺啨婴媖愥渶绬朠楧焽焸煐瑛嫈碤锳嘤撄甇緓缨罂蝧賏樱璎噟罃褮霙鴬鹦嬰應膺韺甖鹰鶑鶧嚶孆孾攖瀴罌蘡譍櫻瓔礯譻鶯鑍纓蠳鷪軈鷹鸎鸚\",\n\"yíng\":\"夃盁迎茔盈荧浧耺莹営桯萤萦营蛍溁溋萾僌塋嵤楹滢蓥滎潆熒蝇瑩禜蝿嬴營縈螢濙濚濴藀覮謍赢瀅爃蠅鎣巆攍瀛瀠瀯櫿贏灐籝灜籯\",\n\"yǐng\":\"矨郢浧梬颍颕颖摬影潁瘿穎頴覮巊廮瀴鐛癭\",\n\"yìng\":\"応映眏暎硬媵膡鞕應瀴鱦\",\n\"yo\":\"喲\",\n\"yō\":\"唷喲\",\n\"yōng\":\"拥痈邕庸傭嗈鄘雍墉嫞慵滽槦牅牗銿噰壅擁澭郺镛臃癕雝鏞鳙廱灉饔鱅鷛癰\",\n\"yóng\":\"喁揘颙顒鰫\",\n\"yǒng\":\"永甬咏怺泳俑勈勇栐埇悀柡恿惥愑湧硧詠塎嵱彮愹蛹慂踊鲬噰澭踴鯒\",\n\"yòng\":\"用苚砽蒏醟\",\n\"yōu\":\"优妋忧攸呦怮泑幽峳浟逌悠羪麀滺憂優鄾嚘懮瀀獶櫌纋耰獿\",\n\"yóu\":\"尢冘尤由甴汼沋犹邮怞油肬怣斿柚疣庮秞莜莤莸郵铀偤蚰訧逰揂游猶遊鱿楢猷鈾鲉輏駀蕕蝣魷輶鮋繇櫾\",\n\"yǒu\":\"友丣卣苃酉羑栯莠梄聈铕湵楢禉蜏銪槱牖牗黝懮\",\n\"yòu\":\"又右幼佑佦侑孧泑狖哊囿姷宥峟柚牰祐诱迶唀梎痏蚴亴貁釉酭誘鼬櫾\",\n\"yū\":\"込扜扝纡迃迂穻陓紆唹淤盓瘀箊\",\n\"yú\":\"丂亐于邘伃余妤扵杅欤玗玙於盂臾衧鱼乻俞兪捓禺竽舁茰虶娛娯娪娱桙狳谀酑馀渔萸釪隃隅雩魚堣堬婾媀媮崳嵎嵛揄楰渝湡畬腴萮逾骬愚楡榆歈牏瑜艅虞觎漁睮窬舆褕歶羭蕍蝓諛雓餘魣嬩懙澞覦踰歟璵螸輿鍝謣髃鮽旟籅騟鯲蘛轝鰅鷠鸆齵\",\n\"yǔ\":\"伛宇屿羽穻俁俣挧禹圄祤偊匬圉庾敔鄅斞萭傴寙楀瑀瘐與語窳頨龉噳嶼懙貐斔穥麌齬\",\n\"yù\":\"肀玉驭圫聿芌芋吾妪忬汩灹饫欥育郁俞昱狱禺秗茟俼叞峪彧栯浴砡钰预域堉悆惐捥欲淢淯痏粖翑袬谕逳阈喅喩喻媀寓庽御棛棜棫焴琙琟矞硢硲裕遇飫馭鹆奧愈滪煜稢罭艈蒮蓣誉鈺預僪嫗嶎戫毓澚獄瘉緎蜟蜮語輍銉隩慾潏熨稶蓹薁豫遹鋊鳿澦燏燠蕷藇諭錥閾鴧鴪鴥儥礇禦魊鹬癒礖礜篽醧鵒櫲饇蘌譽鐭霱雤欎驈鬻籞鱊鷸鸒欝軉鬰鬱灪籲爩\",\n\"yuān\":\"夗囦肙鸢剈冤弲悁眢鸳寃涴渆渁渊渕惌淵葾棩蒬蜎裷鹓箢鳶蜵駌鋺鴛嬽鵷灁鼘鼝\",\n\"yuán\":\"元円贠邧园妧沅芫杬茒垣爰貟原員圆笎蚖袁厡酛傆喛圎媛援湲猨缘鈨鼋園圓塬媴嫄楥溒源猿蒝榞榬辕緣縁蝝蝯褤魭圜橼羱薗螈黿謜轅鎱櫞邍騵鶢鶰厵\",\n\"yuǎn\":\"盶逺遠薳鋺\",\n\"yuàn\":\"夗妴苑怨院垸衏傆媛掾瑗禐愿裫褑噮願\",\n\"yuē\":\"曰曱扚約啘箹矱\",\n\"yuě\":\"哕噦\",\n\"yuè\":\"月戉兊刖兌妜岄抈礿岳枂泧玥恱栎哾悅悦蚏蚎軏钺阅捳跀跃粤越鈅楽粵鉞說説樂閲閱嬳樾篗髺嶽臒龠擽矆櫟籆瀹蘥黦爚禴趯躍籥鑰鸑籰鸙\",\n\"yūn\":\"涒缊蒀暈氲煴蒕氳熅煾奫緼蝹縕赟馧贇\",\n\"yún\":\"云勻匀伝囩妘抣沄纭芸昀畇眃秐貟郧員涢紜耘耺鄖雲愪溳筠筼蒷熉澐蕓鋆橒篔縜\",\n\"yǔn\":\"允阭夽抎狁玧陨荺殒喗鈗隕煴殞熅馻磒賱霣齫齳\",\n\"yùn\":\"孕贠运枟郓恽貟員菀鄆酝傊惲愠缊運慍暈榅煇腪韫韵褞熨緷緼蕰蕴縕薀醖醞餫藴鞰韗韞蘊韻\",\n\"zā\":\"帀匝沞迊咂拶桚紥紮鉔噈魳臜臢\",\n\"zá\":\"杂沯砸偺喒韴雑襍雜囃囋囐雥\",\n\"zǎ\":\"咋偺喒\",\n\"zāi\":\"災灾甾哉栽烖畠菑渽溨睵賳\",\n\"zǎi\":\"宰崽\",\n\"zài\":\"再在扗抂洅傤載酨儎縡\",\n\"zān\":\"兂撍糌橵篸簪簮鵤鐕鐟\",\n\"zán\":\"偺喒\",\n\"zǎn\":\"拶昝桚寁揝噆撍儧攅儹攢趱趲\",\n\"zàn\":\"暂暫賛赞錾鄼濽蹔酂瓉贊鏩鏨瓒酇囋灒讃瓚禶穳襸讚饡\",\n\"zāng\":\"匨牂羘赃賍臧賘贓髒贜\",\n\"zǎng\":\"驵駔\",\n\"zàng\":\"奘弉脏塟葬臧蔵銺臓臟\",\n\"zāo\":\"傮遭糟蹧醩\",\n\"záo\":\"凿鑿\",\n\"zǎo\":\"早枣栆蚤棗璅澡璪薻藻\",\n\"zào\":\"灶皁皂唣唕造梍喿慥煰艁噪簉燥竃竈譟趮躁\",\n\"zé\":\"则択沢咋泎责迮則唶啧帻笮舴責溭滜睪矠飵嘖嫧幘箦蔶樍歵諎赜擇澤皟瞔簀耫礋襗謮賾蠌灂齚齰鸅\",\n\"zè\":\"仄庂汄昃昗捑側崱稄\",\n\"zéi\":\"贼戝賊鲗蠈鰂鱡\",\n\"zēn\":\"撍\",\n\"zěn\":\"怎\",\n\"zèn\":\"谮譖\",\n\"zēng\":\"曽増鄫增憎缯橧璔縡矰磳竲罾繒譄鱛\",\n\"zěng\":\"\",\n\"zèng\":\"锃綜缯鋥熷甑赠繒鬵贈囎\",\n\"zi\":\"嗭\",\n\"zī\":\"孖孜甾茊兹呲咨姕姿茲栥玆畠紎赀资崰淄秶缁菑谘赼嗞孳嵫椔湽滋粢葘辎鄑孶禌觜訾貲資趑锱稵緕緇鈭镃龇輜鼒澬薋諮趦輺錙髭鲻鍿鎡璾頾頿鯔鶅齍纃鰦齜\",\n\"zí\":\"蓻\",\n\"zǐ\":\"子吇芓姉姊杍沝矷秄胏呰秭籽耔茈虸笫梓釨啙紫滓訿榟橴\",\n\"zì\":\"字自芓秄洓茡荢倳剚恣牸渍眦眥菑胔胾漬\",\n\"zōng\":\"宗枞倧骔堫嵏嵕惾棕猣腙葼朡椶潈稯綜緃樅熧緵翪蝬踨踪磫繌鍐豵蹤騌鬃騣鬉鬷鯮鯼鑁\",\n\"zǒng\":\"总倊偬捴惣揔搃焧傯蓗嵸摠潀稯総熜緫縂燪縱總\",\n\"zòng\":\"昮疭從猔碂粽潨糉緵瘲縦縱繌糭\",\n\"zōu\":\"邹驺诹郰陬掫菆棸棷鄒箃緅諏鄹鲰鯫黀騶齱齺\",\n\"zǒu\":\"赱走搊鯐\",\n\"zòu\":\"奏揍媰楱\",\n\"zū\":\"怚柤租菹葅蒩\",\n\"zú\":\"卆足倅哫崒崪族椊稡箤踤镞鎐鏃\",\n\"zǔ\":\"诅阻组俎柤爼珇祖唨組詛靻鎺\",\n\"zù\":\"\",\n\"zuān\":\"鉆劗躜鑚躦鑽\",\n\"zuǎn\":\"繤缵纂纉籫纘\",\n\"zuàn\":\"揝篹賺攥\",\n\"zuī\":\"厜朘嗺樶蟕纗\",\n\"zuí\":\"\",\n\"zuǐ\":\"咀觜嶊嘴噿濢璻\",\n\"zuì\":\"冣栬絊酔晬最祽睟稡罪辠槜酻蕞醉嶵檇鋷錊檌欈\",\n\"zūn\":\"尊噂墫嶟遵樽繜罇鶎鐏鳟鱒鷷\",\n\"zǔn\":\"僔撙繜譐\",\n\"zùn\":\"拵捘栫袸銌瀳\",\n\"zuo\":\"咗\",\n\"zuō\":\"嘬穝\",\n\"zuó\":\"苲昨柮秨莋捽笮稓筰鈼\",\n\"zuǒ\":\"左佐繓\",\n\"zuò\":\"作坐阼岝岞怍侳柞祚胙唑座袏做葄葃酢蓙飵諎糳\",\n\"zhā\":\"吒咋抯挓柤査哳紥偧紮揸渣楂飵劄摣潳皶樝觰皻譇齄齇\",\n\"zhá\":\"札甴軋闸剳蚻铡喋煠牐閘劄箚霅耫鍘譗\",\n\"zhǎ\":\"厏拃苲眨砟鲊鲝諎鮓鮺\",\n\"zhà\":\"乍吒灹诈怍咤奓柞宱痄蚱喥溠詐搾鲊榨鮓醡\",\n\"zhāi\":\"亝哜夈粂捚斋側斎摘榸齊嚌擿齋\",\n\"zhái\":\"厇宅翟擇檡\",\n\"zhǎi\":\"厏抧窄鉙\",\n\"zhài\":\"责债砦責債寨瘵\",\n\"zhān\":\"岾怗枬沾毡旃栴粘蛅飦惉詀趈詹閚谵鳽噡嶦薝邅霑氈氊瞻覱鹯旜譫饘鳣驙魙鱣鸇\",\n\"zhán\":\"讝\",\n\"zhǎn\":\"斩飐展盏斬琖搌盞嶃嶄榐辗颭嫸醆橏輾皽黵\",\n\"zhàn\":\"佔战栈桟站偡绽菚嵁棧湛戦碊僝綻嶘戰虥虦覱轏譧欃蘸驏\",\n\"zhāng\":\"弡张張章傽鄣嫜彰慞漳獐粻蔁遧暲樟璋餦蟑鏱騿鱆麞\",\n\"zhǎng\":\"仉仧兏長掌漲幥礃鞝\",\n\"zhàng\":\"丈仗扙帐杖胀账粀帳涱脹痮障墇嶂幛漲賬瘬瘴瞕\",\n\"zhāo\":\"佋钊妱巶招昭炤釗啁釽鉊鳭駋鍣皽\",\n\"zháo\":\"\",\n\"zhǎo\":\"爫找沼菬瑵\",\n\"zhào\":\"兆诏枛垗炤狣赵笊肁啅旐棹罀詔照罩箌肈肇趙曌濯燳鮡櫂瞾羄\",\n\"zhe\":\"嗻\",\n\"zhē\":\"嗻嫬遮螫\",\n\"zhé\":\"乇厇扸杔歽矺砓籷虴哲埑粍袩啠悊晢晣辄喆棏聑蛰詟搩蜇谪馲摺輒慹磔輙銸辙蟄嚞謫謺鮿轍讁讋\",\n\"zhě\":\"者乽啫锗赭踷褶鍺襵\",\n\"zhè\":\"柘浙這淛嗻蔗樜鹧蟅鷓\",\n\"zhèi\":\"\",\n\"zhēn\":\"贞针侦侲帧枮浈珎珍胗貞帪桢眞真砧祯針偵酙寊幀揕湞葴遉嫃搸斟椹楨溱獉甄禎蒖蓁鉁榛槙殝瑧碪禛潧箴樼澵臻薽錱轃鍼籈鱵\",\n\"zhén\":\"\",\n\"zhěn\":\"诊抮枕姫弫昣轸屒畛疹眕袗紾聄萙竧裖覙診軫嫃缜槙稹駗縝縥辴鬒黰\",\n\"zhèn\":\"圳阵纼甽侲挋陣鸩振朕栚紖桭眹赈塦揕絼榐瑱誫賑鋴镇震鴆鎮鎭\",\n\"zhēng\":\"凧争佂姃征怔爭糽埩峥炡狰烝眐脀钲埥崝崢掙猙睁聇铮媜揁筝徰睜蒸踭鉦徴箏綪錚徵篜鬇癥鏳\",\n\"zhěng\":\"氶抍糽拯掟晸愸撜整\",\n\"zhèng\":\"氶证诤郑政徎钲掙幁証塣諍靕鄭憕鴊證\",\n\"zhī\":\"之支卮汁芝巵汥呮泜肢栀祗秓胑胝衼倁栺疷祬脂隻梔菭椥臸搘稙綕榰蜘馶憄鳷鴲織鼅蘵\",\n\"zhí\":\"执侄妷直秇姪郦値值聀釞埴執淔职戠植犆禃絷臷跖瓡摕摭馽嬂慹漐潪踯樴膱縶職蟙蹠軄躑\",\n\"zhǐ\":\"夂止凪劧旨阯坁址帋扺汦沚纸芷坧抧杫祇祉茋咫恉指枳洔砋秖衹轵淽疻紙蚔訨趾軹黹禔筫絺酯墌徴徵槯藢襧\",\n\"zhì\":\"至芖坁志忮扻豸制厔垁帙帜斦治炙质迣郅俧峙庢庤挃柣栉洷祑陟娡徏挚捗晊桎歭狾秩致袟贽轾乿偫剬徝掷梽楖猘畤痓痔眰秲秷窒紩翐袠觗貭铚鸷傂崻彘智滞痣蛭骘寘廌搱滍稚筫置跱輊锧雉墆滯潌疐瘈聜製覟誌銍幟憄摨摯潪熫稺膣觯質踬銴鋕擳旘瀄璏緻隲駤鴙儨劕懥擲擿櫛穉螲懫織贄櫍瓆觶騭鯯礩豑鶨騺驇躓鷙鑕豒\",\n\"zhōng\":\"夂伀汷刣妐彸忪忠泈炂终柊盅衳钟舯衷終鈡幒蔠蜙锺銿螤鴤螽鍾斔鼨蹱鐘籦\",\n\"zhǒng\":\"肿冢喠尰塚歱煄腫瘇種徸踵穜\",\n\"zhòng\":\"仲众妕狆祌茽衶蚛偅眾堹媑筗衆種緟諥\",\n\"zhōu\":\"州舟诌侜周洲炿诪烐珘辀郮啁婤徟掫淍矪週鸼喌赒輈翢銂賙輖霌駲嚋盩謅鵃騆譸\",\n\"zhóu\":\"妯軸碡\",\n\"zhǒu\":\"肘帚疛胕菷晭睭箒鯞\",\n\"zhòu\":\"纣伷呪咒宙绉冑咮昼紂胄荮皱酎晝粙椆葤詋軸甃僽皺駎噣縐繇薵骤籀籕籒驟\",\n\"zhū\":\"侏诛邾洙茱株珠诸猪硃秼袾铢絑蛛誅跦槠潴蕏蝫銖橥諸豬駯鮢鴸瀦藸鼄櫧櫫鯺蠩\",\n\"zhú\":\"朮竹竺炢笁茿烛窋逐笜舳逫瘃蓫敱磩築篴斀燭蠋躅鱁劚孎灟斸曯欘爥蠾钃\",\n\"zhǔ\":\"丶主劯宔拄砫罜陼帾渚煑煮詝褚嘱濐燝麈瞩屬囑鸀矚\",\n\"zhù\":\"伫佇住纻芧苎坾拀杼注苧贮迬驻乼壴柱柷殶炷祝疰眝砫祩竚莇紵紸羜蛀尌嵀註貯跓軴铸筯鉒飳馵嗻墸箸翥樦澍鋳駐築篫麆簗櫡鑄\",\n\"zhuā\":\"抓挝撾檛膼簻髽\",\n\"zhuǎ\":\"爫\",\n\"zhuāi\":\"拽\",\n\"zhuǎi\":\"跩\",\n\"zhuài\":\"拽睉\",\n\"zhuān\":\"专叀専恮砖耑專剸鄟塼嫥漙瑼甎磗膞颛磚諯篿蟤顓鱄\",\n\"zhuǎn\":\"孨転膞竱轉\",\n\"zhuàn\":\"灷啭転堟蒃傳瑑腞僎僝赚撰篆馔篹縳襈賺簨贃譔饌囀籑\",\n\"zhuāng\":\"妆庄妝庒荘娤桩莊梉湷粧装裝樁糚\",\n\"zhuǎng\":\"奘\",\n\"zhuàng\":\"壮壯状狀壵焋僮漴撞戅戆戇\",\n\"zhuī\":\"隹骓锥錐騅鵻\",\n\"zhuǐ\":\"沝\",\n\"zhuì\":\"坠笍奞娷缀隊惴甀缒腏畷硾膇墜綴赘縋諈醊錣礈贅鑆\",\n\"zhūn\":\"圫宒忳迍肫窀谆啍諄衠\",\n\"zhǔn\":\"准埻凖準稕綧\",\n\"zhùn\":\"旽訰稕綧\",\n\"zhuō\":\"拙炪倬捉桌梲棁涿淖棳棹焯窧槕穛鐯穱\",\n\"zhuó\":\"圴彴汋犳灼卓叕妰茁斫浊丵剢捔浞烵诼酌啄啅娺聉斱斮晫椓琸硺窡罬蓔墌撯擆斲禚劅諁諑趠鋜噣濁燋篧擢斀斵濯藋櫡謶镯繳鵫灂蠗鐲籗鷟蠿籱\",\n\"zhuò\":\"\",\n\"chǎng,ān,hàn\": \"厂\",\n\"dīng,zhēng\": \"丁\",\n\"bǔ,bo\": \"卜\",\n\"jǐ,jī\": \"几\",\n\"le,liǎo\": \"了\",\n\"gān,gàn\": \"干\",\n\"dà,dài,tài\": \"大\",\n\"yǔ,yù,yú\": \"与\",\n\"shàng,shǎng\": \"上\",\n\"wàn,mò\": \"万\",\n\"gè,gě\": \"个各\",\n\"me,mó,ma,yāo\": \"么\",\n\"guǎng,ān\": \"广\",\n\"wáng,wú\": \"亡\",\n\"nǚ,rǔ\": \"女\",\n\"chā,chá,chǎ\": \"叉\",\n\"wáng,wàng\": \"王\",\n\"fū,fú\": \"夫\",\n\"zhā,zā,zhá\": \"扎\",\n\"bù,fǒu\": \"不\",\n\"qū,ōu\": \"区\",\n\"chē,jū\": \"车\",\n\"qiè,qiē\": \"切\",\n\"wǎ,wà\": \"瓦\",\n\"tún,zhūn\": \"屯\",\n\"shǎo,shào\": \"少\",\n\"zhōng,zhòng\": \"中\",\n\"nèi,nà\": \"内\",\n\"jiàn,xiàn\": \"见\",\n\"cháng,zhǎng\": \"长\",\n\"shén,shí\": \"什\",\n\"piàn,piān\": \"片\",\n\"pú,pū\": \"仆\",\n\"huà,huā\": \"化\",\n\"chóu,qiú\": \"仇\",\n\"zhuǎ,zhǎo\": \"爪\",\n\"jǐn,jìn\": \"仅\",\n\"fù,fǔ\": \"父\",\n\"cóng,zòng\": \"从\",\n\"fēn,fèn\": \"分\",\n\"shì,zhī\": \"氏\",\n\"fēng,fěng\": \"风\",\n\"gōu,gòu\": \"勾\",\n\"liù,lù\": \"六\",\n\"dǒu,dòu\": \"斗\",\n\"wèi,wéi\": \"为\",\n\"chǐ,chě\": \"尺\",\n\"yǔ,yú\": \"予\",\n\"dǎ,dá\": \"打\",\n\"zhèng,zhēng\": \"正症挣\",\n\"bā,pá\": \"扒\",\n\"jié,jiē\": \"节结\",\n\"shù,shú,zhú\": \"术\",\n\"kě,kè\": \"可\",\n\"shí,dàn\": \"石\",\n\"kǎ,qiǎ\": \"卡\",\n\"běi,bèi\": \"北\",\n\"zhàn,zhān\": \"占\",\n\"qiě,jū\": \"且\",\n\"yè,xié\": \"叶\",\n\"hào,háo\": \"号\",\n\"zhī,zhǐ\": \"只\",\n\"dāo,tāo\": \"叨\",\n\"zǎi,zǐ,zī\": \"仔\",\n\"lìng,líng,lǐng\": \"令\",\n\"lè,yuè\": \"乐\",\n\"jù,gōu\": \"句\",\n\"chù,chǔ\": \"处\",\n\"tóu,tou\": \"头\",\n\"níng,nìng,zhù\": \"宁\",\n\"zhào,shào\": \"召\",\n\"fā,fà\": \"发\",\n\"tái,tāi\": \"台苔\",\n\"káng,gāng\": \"扛\",\n\"dì,de\": \"地\",\n\"sǎo,sào\": \"扫\",\n\"chǎng,cháng\": \"场\",\n\"pǔ,pò,pō,piáo\": \"朴\",\n\"guò,guo,guō\": \"过\",\n\"yā,yà\": \"压\",\n\"yǒu,yòu\": \"有\",\n\"kuā,kuà\": \"夸\",\n\"xié,yá,yé,yú,xú\": \"邪\",\n\"jiá,jiā,gā,xiá\": \"夹\",\n\"huà,huá\": \"划\",\n\"dāng,dàng\": \"当\",\n\"tù,tǔ\": \"吐\",\n\"xià,hè\": \"吓\",\n\"tóng,tòng\": \"同\",\n\"qū,qǔ\": \"曲\",\n\"ma,má,mǎ\": \"吗\",\n\"qǐ,kǎi\": \"岂\",\n\"zhū,shú\": \"朱\",\n\"chuán,zhuàn\": \"传\",\n\"xiū,xǔ\": \"休\",\n\"rèn,rén\": \"任\",\n\"huá,huà,huā\": \"华\",\n\"jià,jiè,jie\": \"价\",\n\"fèn,bīn\": \"份\",\n\"yǎng,áng\": \"仰\",\n\"xiě,xuè\": \"血\",\n\"sì,shì\": \"似\",\n\"háng,xíng\": \"行\",\n\"huì,kuài\": \"会\",\n\"hé,gě\": \"合\",\n\"chuàng,chuāng\": \"创\",\n\"chōng,chòng\": \"冲\",\n\"qí,jì,zī,zhāi\": \"齐\",\n\"yáng,xiáng\": \"羊\",\n\"bìng,bīng\": \"并\",\n\"hàn,hán\": \"汗\",\n\"tāng,shāng\": \"汤\",\n\"xīng,xìng\": \"兴\",\n\"xǔ,hǔ\": \"许\",\n\"lùn,lún\": \"论\",\n\"nà,nǎ,nèi,nā\": \"那\",\n\"jìn,jǐn\": \"尽\",\n\"sūn,xùn\": \"孙\",\n\"xì,hū\": \"戏\",\n\"hǎo,hào\": \"好\",\n\"tā,jiě\": \"她\",\n\"guān,guàn\": \"观冠\",\n\"hóng,gōng\": \"红\",\n\"xiān,qiàn\": \"纤\",\n\"jì,jǐ\": \"纪济\",\n\"yuē,yāo\": \"约\",\n\"nòng,lòng\": \"弄\",\n\"yuǎn,yuàn\": \"远\",\n\"huài,pēi,pī,péi\": \"坏\",\n\"zhé,shé,zhē\": \"折\",\n\"qiǎng,qiāng,chēng\": \"抢\",\n\"ké,qiào\": \"壳\",\n\"fāng,fáng\": \"坊\",\n\"bǎ,bà\": \"把\",\n\"gān,gǎn\": \"杆\",\n\"sū,sù\": \"苏\",\n\"gàng,gāng\": \"杠\",\n\"gèng,gēng\": \"更\",\n\"lì,lí\": \"丽\",\n\"hái,huán\": \"还\",\n\"fǒu,pǐ\": \"否\",\n\"xiàn,xuán\": \"县\",\n\"zhù,chú\": \"助\",\n\"ya,yā\": \"呀\",\n\"chǎo,chāo\": \"吵\",\n\"yuán,yún,yùn\": \"员\",\n\"ba,bā\": \"吧\",\n\"bié,biè\": \"别\",\n\"dīng,dìng\": \"钉\",\n\"gū,gù\": \"估\",\n\"hé,hē,hè\": \"何\",\n\"tǐ,tī,bèn\": \"体\",\n\"bó,bǎi,bà\": \"伯\",\n\"yòng,yōng\": \"佣\",\n\"fó,fú,bì,bó\": \"佛\",\n\"dù,dǔ\": \"肚\",\n\"guī,jūn,qiū\": \"龟\",\n\"jiǎo,jué\": \"角\",\n\"tiáo,tiāo\": \"条\",\n\"xì,jì\": \"系\",\n\"yìng,yīng\": \"应\",\n\"zhè,zhèi\": \"这\",\n\"jiān,jiàn\": \"间监\",\n\"mēn,mèn\": \"闷\",\n\"dì,tì,tuí\": \"弟\",\n\"shā,shà\": \"沙\",\n\"shà,shā\": \"煞\",\n\"méi,mò\": \"没\",\n\"shěn,chén\": \"沈\",\n\"shí,zhì\": \"识\",\n\"niào,suī\": \"尿\",\n\"wěi,yǐ\": \"尾\",\n\"ē,ā\": \"阿\",\n\"jìn,jìng\": \"劲\",\n\"zòng,zǒng\": \"纵\",\n\"wén,wèn\": \"纹\",\n\"mǒ,mò,mā\": \"抹\",\n\"dān,dàn,dǎn\": \"担\",\n\"chāi,cā\": \"拆\",\n\"jū,gōu\": \"拘\",\n\"lā,lá\": \"拉\",\n\"bàn,pàn\": \"拌\",\n\"zé,zhái\": \"择\",\n\"qí,jī\": \"其奇\",\n\"ruò,rě\": \"若\",\n\"píng,pēng\": \"苹\",\n\"zhī,qí\": \"枝\",\n\"guì,jǔ\": \"柜\",\n\"sàng,sāng\": \"丧\",\n\"cì,cī\": \"刺\",\n\"yǔ,yù\": \"雨语\",\n\"bēn,bèn\": \"奔\",\n\"qī,qì\": \"妻\",\n\"zhuǎn,zhuàn,zhuǎi\": \"转\",\n\"xiē,suò\": \"些\",\n\"ne,ní\": \"呢\",\n\"tiě,tiē,tiè,\": \"帖\",\n\"lǐng,líng\": \"岭\",\n\"zhī,zhì\": \"知织\",\n\"hé,hè,huó,huò,hú\": \"和\",\n\"gòng,gōng\": \"供共\",\n\"wěi,wēi\": \"委\",\n\"cè,zè,zhāi\": \"侧\",\n\"pò,pǎi\": \"迫\",\n\"de,dì,dí\": \"的\",\n\"cǎi,cài\": \"采\",\n\"fú,fù\": \"服\",\n\"dǐ,de\": \"底\",\n\"jìng,chēng\": \"净\",\n\"juàn,juǎn\": \"卷\",\n\"quàn,xuàn\": \"券\",\n\"dān,shàn,chán\": \"单\",\n\"qiǎn,jiān\": \"浅\",\n\"xiè,yì\": \"泄\",\n\"pō,bó\": \"泊\",\n\"pào,pāo\": \"泡\",\n\"ní,nì\": \"泥\",\n\"zé,shì\": \"泽\",\n\"kōng,kòng,kǒng\": \"空\",\n\"láng,làng\": \"郎\",\n\"xiáng,yáng\": \"详\",\n\"lì,dài\": \"隶\",\n\"shuā,shuà\": \"刷\",\n\"jiàng,xiáng\": \"降\",\n\"cān,shēn,cēn,sān\": \"参\",\n\"dú,dài\": \"毒\",\n\"kuà,kū\": \"挎\",\n\"dǎng,dàng\": \"挡\",\n\"kuò,guā\": \"括\",\n\"shí,shè\": \"拾\",\n\"tiāo,tiǎo\": \"挑\",\n\"shèn,shén\": \"甚\",\n\"xiàng,hàng\": \"巷\",\n\"nán,nā\": \"南\",\n\"xiāng,xiàng\": \"相\",\n\"chá,zhā\": \"查\",\n\"bǎi,bó,bò\": \"柏\",\n\"yào,yāo\": \"要\",\n\"yán,yàn\": \"研\",\n\"qì,qiè\": \"砌\",\n\"bèi,bēi\": \"背\",\n\"shěng,xǐng\": \"省\",\n\"xiāo,xuē\": \"削\",\n\"hǒng,hōng,hòng\": \"哄\",\n\"mào,mò\": \"冒\",\n\"yǎ,yā\": \"哑\",\n\"sī,sāi\": \"思\",\n\"mǎ,mā,mà\": \"蚂\",\n\"huá,huā\": \"哗\",\n\"yè,yàn,yān\": \"咽\",\n\"zán,zǎ\": \"咱\",\n\"hā,hǎ,hà\": \"哈\",\n\"nǎ,něi,na,né\": \"哪\",\n\"hāi,ké\": \"咳\",\n\"gǔ,gū\": \"骨\",\n\"gāng,gàng\": \"钢\",\n\"yào,yuè\": \"钥\",\n\"kàn,kān\": \"看\",\n\"zhòng,zhǒng,chóng\": \"种\",\n\"biàn,pián\": \"便\",\n\"zhòng,chóng\": \"重\",\n\"xìn,shēn\": \"信\",\n\"zhuī,duī\": \"追\",\n\"dài,dāi\": \"待\",\n\"shí,sì,yì\": \"食\",\n\"mài,mò\": \"脉\",\n\"jiāng,jiàng\": \"将浆\",\n\"dù,duó\": \"度\",\n\"qīn,qìng\": \"亲\",\n\"chà,chā,chāi,cī\": \"差\",\n\"zhà,zhá\": \"炸\",\n\"pào,páo,bāo\": \"炮\",\n\"sǎ,xǐ\": \"洒\",\n\"xǐ,xiǎn\": \"洗\",\n\"jué,jiào\": \"觉\",\n\"biǎn,piān\": \"扁\",\n\"shuō,shuì,yuè\": \"说\",\n\"lǎo,mǔ\": \"姥\",\n\"gěi,jǐ\": \"给\",\n\"luò,lào\": \"络\",\n\"zǎi,zài\": \"载\",\n\"mái,mán\": \"埋\",\n\"shāo,shào\": \"捎稍\",\n\"dū,dōu\": \"都\",\n\"ái,āi\": \"挨\",\n\"mò,mù\": \"莫\",\n\"è,wù,ě,wū\": \"恶\",\n\"xiào,jiào\": \"校\",\n\"hé,hú\": \"核\",\n\"yūn,yùn\": \"晕\",\n\"huàng,huǎng\": \"晃\",\n\"ài,āi\": \"唉\",\n\"ā,á,ǎ,à,a\": \"啊\",\n\"bà,ba,pí\": \"罢\",\n\"zuàn,zuān\": \"钻\",\n\"qiān,yán\": \"铅\",\n\"chéng,shèng\": \"乘\",\n\"mì,bì\": \"秘泌\",\n\"chēng,chèn,chèng\": \"称\",\n\"dào,dǎo\": \"倒\",\n\"tǎng,cháng\": \"倘\",\n\"chàng,chāng\": \"倡\",\n\"chòu,xiù\": \"臭\",\n\"shè,yè,yì\": \"射\",\n\"gē,gé\": \"胳搁\",\n\"shuāi,cuī\": \"衰\",\n\"liáng,liàng\": \"凉量\",\n\"chù,xù\": \"畜\",\n\"páng,bàng\": \"旁磅\",\n\"zhǎng,zhàng\": \"涨\",\n\"yǒng,chōng\": \"涌\",\n\"qiāo,qiǎo\": \"悄\",\n\"jiā,jia,jie\": \"迦家\",\n\"dú,dòu\": \"读\",\n\"shàn,shān\": \"扇\",\n\"shān,shàn\": \"苫\",\n\"bèi,pī\": \"被\",\n\"tiáo,diào,zhōu\": \"调\",\n\"bō,bāo\": \"剥\",\n\"néng,nài\": \"能\",\n\"nán,nàn,nuó\": \"难\",\n\"pái,pǎi\": \"排\",\n\"jiào,jiāo\": \"教\",\n\"jù,jū\": \"据\",\n\"zhù,zhuó,zhe\": \"著\",\n\"jūn,jùn\": \"菌\",\n\"lè,lēi\": \"勒\",\n\"shāo,sào\": \"梢\",\n\"fù,pì\": \"副\",\n\"piào,piāo\": \"票\",\n\"shèng,chéng\": \"盛\",\n\"què,qiāo,qiǎo\": \"雀\",\n\"chí,shi\": \"匙\",\n\"mī,mí\": \"眯\",\n\"la,lā\": \"啦\",\n\"shé,yí\": \"蛇\",\n\"lèi,léi,lěi\": \"累\",\n\"zhǎn,chán\": \"崭\",\n\"quān,juàn,juān\": \"圈\",\n\"lóng,lǒng\": \"笼\",\n\"dé,děi,de\": \"得\",\n\"jiǎ,jià\": \"假\",\n\"māo,máo\": \"猫\",\n\"xuán,xuàn\": \"旋\",\n\"zhe,zhuó,zháo,zhāo\": \"着\",\n\"lǜ,shuài\": \"率\",\n\"gài,gě,hé\": \"盖\",\n\"lín,lìn\": \"淋\",\n\"qú,jù\": \"渠\",\n\"jiàn,jiān\": \"渐溅\",\n\"hùn,hún\": \"混\",\n\"sù,xiǔ,xiù\": \"宿\",\n\"tán,dàn\": \"弹\",\n\"yǐn,yìn\": \"隐\",\n\"jǐng,gěng\": \"颈\",\n\"lǜ,lù\": \"绿\",\n\"qū,cù\": \"趋\",\n\"tí,dī,dǐ\": \"提\",\n\"jiē,qì\": \"揭\",\n\"lǒu,lōu\": \"搂\",\n\"qī,jī\": \"期\",\n\"sàn,sǎn\": \"散\",\n\"gě,gé\": \"葛\",\n\"zhāo,cháo\": \"朝\",\n\"luò,là,lào\": \"落\",\n\"yǐ,yī\": \"椅\",\n\"gùn,hùn\": \"棍\",\n\"zhí,shi\": \"殖\",\n\"xià,shà\": \"厦\",\n\"liè,liě\": \"裂\",\n\"jǐng,yǐng\": \"景\",\n\"pēn,pèn\": \"喷\",\n\"pǎo,páo\": \"跑\",\n\"hē,hè,yè\": \"喝\",\n\"pù,pū\": \"铺\",\n\"zhù,zhú\": \"筑\",\n\"dá,dā\": \"答\",\n\"bǎo,bǔ,pù\": \"堡\",\n\"ào,yù\": \"奥\",\n\"fān,pān\": \"番\",\n\"là,xī\": \"腊\",\n\"gǎng,jiǎng\": \"港\",\n\"céng,zēng\": \"曾\",\n\"yú,tōu\": \"愉\",\n\"qiáng,qiǎng,jiàng\": \"强\",\n\"shǔ,zhǔ\": \"属\",\n\"zhōu,yù\": \"粥\",\n\"shè,niè\": \"摄\",\n\"tián,zhèn\": \"填\",\n\"méng,mēng,měng\": \"蒙\",\n\"jìn,jīn\": \"禁\",\n\"lù,liù\": \"碌\",\n\"tiào,táo\": \"跳\",\n\"é,yǐ\": \"蛾\",\n\"jiě,jiè,xiè\": \"解\",\n\"shù,shǔ,shuò\": \"数\",\n\"liū,liù\": \"溜\",\n\"sāi,sài,sè\": \"塞\",\n\"pì,bì\": \"辟\",\n\"fèng,féng\": \"缝\",\n\"piě,piē\": \"撇\",\n\"mó,mú\": \"模\",\n\"bǎng,bàng\": \"榜\",\n\"shang,cháng\": \"裳\",\n\"xiān,xiǎn\": \"鲜\",\n\"yí,nǐ\": \"疑\",\n\"gāo,gào\": \"膏\",\n\"piāo,piào,piǎo\": \"漂\",\n\"suō,sù\": \"缩\",\n\"qù,cù\": \"趣\",\n\"sā,sǎ\": \"撒\",\n\"tàng,tāng\": \"趟\",\n\"héng,hèng\": \"横\",\n\"mán,mén\": \"瞒\",\n\"bào,pù\": \"暴\",\n\"mó,mā\": \"摩\",\n\"hú,hū,hù\": \"糊\",\n\"pī,pǐ\": \"劈\",\n\"yàn,yān\": \"燕\",\n\"báo,bó,bò\": \"薄\",\n\"mó,mò\": \"磨\",\n\"jiǎo,zhuó\": \"缴\",\n\"cáng,zàng\": \"藏\",\n\"fán,pó\": \"繁\",\n\"bì,bei\": \"臂\",\n\"chàn,zhàn\": \"颤\",\n\"jiāng,qiáng\": \"疆\",\n\"jiáo,jué,jiào\": \"嚼\",\n\"rǎng,rāng\": \"嚷\",\n\"lù,lòu\": \"露\",\n\"náng,nāng\": \"囊\",\n\"hāng,bèn\": \"夯\",\n\"āo,wā\": \"凹\",\n\"féng,píng\": \"冯\",\n\"xū,yù\": \"吁\",\n\"lèi,lē\": \"肋\",\n\"lūn,lún\": \"抡\",\n\"jiè,gài\": \"芥\",\n\"xīn,xìn\": \"芯\",\n\"chā,chà\": \"杈\",\n\"xiāo,xiào\": \"肖\",\n\"zhī,zī\": \"吱\",\n\"ǒu,ōu,òu\": \"呕\",\n\"nà,nè\": \"呐\",\n\"qiàng,qiāng\": \"呛\",\n\"tún,dùn\": \"囤\",\n\"kēng,háng\": \"吭\",\n\"diàn,tián\": \"佃\",\n\"sì,cì\": \"伺\",\n\"diàn,tián,shèng\": \"甸\",\n\"páo,bào\": \"刨\",\n\"duì,ruì,yuè\": \"兑\",\n\"kē,kě\": \"坷\",\n\"tuò,tà,zhí\": \"拓\",\n\"fú,bì\": \"拂\",\n\"nǐng,níng,nìng\": \"拧\",\n\"ào,ǎo,niù\": \"拗\",\n\"kē,hē\": \"苛\",\n\"yān,yǎn\": \"奄\",\n\"hē,a,kē\": \"呵\",\n\"gā,kā\": \"咖\",\n\"jiǎo,yáo\": \"侥\",\n\"chà,shā\": \"刹\",\n\"nüè,yào\": \"疟\",\n\"máng,méng\": \"氓\",\n\"gē,yì\": \"疙\",\n\"jǔ,jù\": \"沮\",\n\"zú,cù\": \"卒\",\n\"wǎn,yuān\": \"宛\",\n\"mí,mǐ\": \"弥\",\n\"qì,qiè,xiè\": \"契\",\n\"xié,jiā\": \"挟\",\n\"duò,duǒ\": \"垛\",\n\"zhà,shān,shi,cè\": \"栅\",\n\"bó,bèi\": \"勃\",\n\"zhóu,zhòu\": \"轴\",\n\"liē,liě,lié,lie\": \"咧\",\n\"yo,yō\": \"哟\",\n\"qiào,xiào\": \"俏\",\n\"hóu,hòu\": \"侯\",\n\"píng,bǐng\": \"屏\",\n\"nà,nuó\": \"娜\",\n\"pá,bà\": \"耙\",\n\"qī,xī\": \"栖\",\n\"jiǎ,gǔ\": \"贾\",\n\"láo,lào\": \"唠\",\n\"bàng,bèng\": \"蚌\",\n\"gōng,zhōng\": \"蚣\",\n\"li,lǐ,lī\": \"哩\",\n\"juè,jué\": \"倔\",\n\"yīn,yān,yǐn\": \"殷\",\n\"wō,guō\": \"涡\",\n\"lào,luò\": \"烙\",\n\"niǎn,niē\": \"捻\",\n\"yè,yē\": \"掖\",\n\"chān,xiān,càn,shǎn\": \"掺\",\n\"dǎn,shàn\": \"掸\",\n\"fēi,fěi\": \"菲\",\n\"qián,gān\": \"乾\",\n\"shuò,shí\": \"硕\",\n\"luō,luó,luo\": \"啰\",\n\"hǔ,xià\": \"唬\",\n\"dāng,chēng\": \"铛\",\n\"xiǎn,xǐ\": \"铣\",\n\"jiǎo,jiáo\": \"矫\",\n\"kuǐ,guī\": \"傀\",\n\"jì,zhài\": \"祭\",\n\"tǎng,chǎng\": \"淌\",\n\"chún,zhūn\": \"淳\",\n\"wèi,yù\": \"尉\",\n\"duò,huī\": \"堕\",\n\"chuò,chāo\": \"绰\",\n\"bēng,běng,bèng\": \"绷\",\n\"zōng,zèng\": \"综\",\n\"zhuó,zuó\": \"琢\",\n\"chuǎi,chuài,chuāi,tuán,zhuī\": \"揣\",\n\"péng,bāng\": \"彭\",\n\"zhuī,chuí\": \"椎\",\n\"léng,lēng,líng\": \"棱\",\n\"qiào,qiáo\": \"翘\",\n\"zhā,chā\": \"喳\",\n\"há,gé\": \"蛤\",\n\"qiàn,kàn\": \"嵌\",\n\"yān,ā\": \"腌\",\n\"dūn,duì\": \"敦\",\n\"kuì,huì\": \"溃\",\n\"sāo,sǎo\": \"骚\",\n\"kǎi,jiē\": \"楷\",\n\"pín,bīn\": \"频\",\n\"liú,liù\": \"馏\",\n\"nì,niào\": \"溺\",\n\"jiǎo,chāo\": \"剿\",\n\"áo,āo\": \"熬\",\n\"màn,wàn\": \"蔓\",\n\"chá,chā\": \"碴\",\n\"xūn,xùn\": \"熏\",\n\"da,dá\": \"瘩\",\n\"tuì,tùn\": \"褪\",\n\"liáo,liāo\": \"撩\",\n\"cuō,zuǒ\": \"撮\",\n\"cháo,zhāo\": \"嘲\",\n\"hēi,mò\": \"嘿\",\n\"zhuàng,chuáng\": \"幢\",\n\"jī,qǐ\": \"稽\",\n\"biě,biē\": \"瘪\",\n\"liáo,lào,lǎo\": \"潦\",\n\"chéng,dèng\": \"澄\",\n\"lèi,léi\": \"擂\",\n\"mò,má\": \"蟆\",\n\"liáo,liǎo\": \"燎\",\n\"liào,liǎo\": \"瞭\",\n\"sào,sāo\": \"臊\",\n\"mí,méi\": \"糜\",\n\"huò,huō,huá\": \"豁\",\n\"pù,bào\": \"瀑\",\n\"zǎn,cuán\": \"攒\",\n\"bò,bǒ\": \"簸\",\n\"bó,bù\": \"簿\",\n}","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// @see [百家姓](https://zh.wikipedia.org/wiki/%E7%99%BE%E5%AE%B6%E5%A7%93)\nmodule.exports = {\n \"赵\": [[\"zhào\"]],\n \"钱\": [[\"qián\"]],\n \"孙\": [[\"sūn\"]],\n \"李\": [[\"lǐ\"]],\n \"周\": [[\"zhōu\"]],\n \"吴\": [[\"wú\"]],\n \"郑\": [[\"zhèng\"]],\n \"王\": [[\"wáng\"]],\n \"冯\": [[\"féng\"]],\n \"陈\": [[\"chén\"]],\n \"褚\": [[\"chǔ\"]],\n \"卫\": [[\"wèi\"]],\n \"蒋\": [[\"jiǎng\"]],\n \"沈\": [[\"shěn\"]],\n \"韩\": [[\"hán\"]],\n \"杨\": [[\"yáng\"]],\n \"朱\": [[\"zhū\"]],\n \"秦\": [[\"qín\"]],\n \"尤\": [[\"yóu\"]],\n \"许\": [[\"xǔ\"]],\n \"何\": [[\"hé\"]],\n \"吕\": [[\"lǚ\"]],\n \"施\": [[\"shī\"]],\n \"张\": [[\"zhāng\"]],\n \"孔\": [[\"kǒng\"]],\n \"曹\": [[\"cáo\"]],\n \"严\": [[\"yán\"]],\n \"华\": [[\"huà\"]],\n \"金\": [[\"jīn\"]],\n \"魏\": [[\"wèi\"]],\n \"陶\": [[\"táo\"]],\n \"姜\": [[\"jiāng\"]],\n \"戚\": [[\"qī\"]],\n \"谢\": [[\"xiè\"]],\n \"邹\": [[\"zōu\"]],\n \"喻\": [[\"yù\"]],\n \"柏\": [[\"bǎi\"]],\n \"水\": [[\"shuǐ\"]],\n \"窦\": [[\"dòu\"]],\n \"章\": [[\"zhāng\"]],\n \"云\": [[\"yún\"]],\n \"苏\": [[\"sū\"]],\n \"潘\": [[\"pān\"]],\n \"葛\": [[\"gě\"]],\n \"奚\": [[\"xī\"]],\n \"范\": [[\"fàn\"]],\n \"彭\": [[\"péng\"]],\n \"郎\": [[\"láng\"]],\n \"鲁\": [[\"lǔ\"]],\n \"韦\": [[\"wéi\"]],\n \"昌\": [[\"chāng\"]],\n \"马\": [[\"mǎ\"]],\n \"苗\": [[\"miáo\"]],\n \"凤\": [[\"fèng\"]],\n \"花\": [[\"huā\"]],\n \"方\": [[\"fāng\"]],\n \"俞\": [[\"yú\"]],\n \"任\": [[\"rèn\"]],\n \"袁\": [[\"yuán\"]],\n \"柳\": [[\"liǔ\"]],\n \"酆\": [[\"fēng\"]],\n \"鲍\": [[\"bào\"]],\n \"史\": [[\"shǐ\"]],\n \"唐\": [[\"táng\"]],\n \"费\": [[\"fèi\"]],\n \"廉\": [[\"lián\"]],\n \"岑\": [[\"cén\"]],\n \"薛\": [[\"xuē\"]],\n \"雷\": [[\"léi\"]],\n \"贺\": [[\"hè\"]],\n \"倪\": [[\"ní\"]],\n \"汤\": [[\"tāng\"]],\n \"滕\": [[\"téng\"]],\n \"殷\": [[\"yīn\"]],\n \"罗\": [[\"luó\"]],\n \"毕\": [[\"bì\"]],\n \"郝\": [[\"hǎo\"]],\n \"邬\": [[\"wū\"]],\n \"安\": [[\"ān\"]],\n \"常\": [[\"cháng\"]],\n \"乐\": [[\"yuè\"]],\n \"于\": [[\"yú\"]],\n \"时\": [[\"shí\"]],\n \"傅\": [[\"fù\"]],\n \"皮\": [[\"pí\"]],\n \"卞\": [[\"biàn\"]],\n \"齐\": [[\"qí\"]],\n \"康\": [[\"kāng\"]],\n \"伍\": [[\"wǔ\"]],\n \"余\": [[\"yú\"]],\n \"元\": [[\"yuán\"]],\n \"卜\": [[\"bǔ\"]],\n \"顾\": [[\"gù\"]],\n \"孟\": [[\"mèng\"]],\n \"平\": [[\"píng\"]],\n \"黄\": [[\"huáng\"]],\n \"和\": [[\"hé\"]],\n \"穆\": [[\"mù\"]],\n \"萧\": [[\"xiāo\"]],\n \"尹\": [[\"yǐn\"]],\n \"姚\": [[\"yáo\"]],\n \"邵\": [[\"shào\"]],\n \"湛\": [[\"zhàn\"]],\n \"汪\": [[\"wāng\"]],\n \"祁\": [[\"qí\"]],\n \"毛\": [[\"máo\"]],\n \"禹\": [[\"yǔ\"]],\n \"狄\": [[\"dí\"]],\n \"米\": [[\"mǐ\"]],\n \"贝\": [[\"bèi\"]],\n \"明\": [[\"míng\"]],\n \"臧\": [[\"zāng\"]],\n \"计\": [[\"jì\"]],\n \"伏\": [[\"fú\"]],\n \"成\": [[\"chéng\"]],\n \"戴\": [[\"dài\"]],\n \"谈\": [[\"tán\"]],\n \"宋\": [[\"sòng\"]],\n \"茅\": [[\"máo\"]],\n \"庞\": [[\"páng\"]],\n \"熊\": [[\"xióng\"]],\n \"纪\": [[\"jì\"]],\n \"舒\": [[\"shū\"]],\n \"屈\": [[\"qū\"]],\n \"项\": [[\"xiàng\"]],\n \"祝\": [[\"zhù\"]],\n \"董\": [[\"dǒng\"]],\n \"梁\": [[\"liáng\"]],\n \"杜\": [[\"dù\"]],\n \"阮\": [[\"ruǎn\"]],\n \"蓝\": [[\"lán\"]],\n \"闵\": [[\"mǐn\"]],\n \"席\": [[\"xí\"]],\n \"季\": [[\"jì\"]],\n \"麻\": [[\"má\"]],\n \"强\": [[\"qiáng\"]],\n \"贾\": [[\"jiǎ\"]],\n \"路\": [[\"lù\"]],\n \"娄\": [[\"lóu\"]],\n \"危\": [[\"wēi\"]],\n \"江\": [[\"jiāng\"]],\n \"童\": [[\"tóng\"]],\n \"颜\": [[\"yán\"]],\n \"郭\": [[\"guō\"]],\n \"梅\": [[\"méi\"]],\n \"盛\": [[\"shèng\"]],\n \"林\": [[\"lín\"]],\n \"刁\": [[\"diāo\"]],\n \"钟\": [[\"zhōng\"]],\n \"徐\": [[\"xú\"]],\n \"邱\": [[\"qiū\"]],\n \"骆\": [[\"luò\"]],\n \"高\": [[\"gāo\"]],\n \"夏\": [[\"xià\"]],\n \"蔡\": [[\"cài\"]],\n \"田\": [[\"tián\"]],\n \"樊\": [[\"fán\"]],\n \"胡\": [[\"hú\"]],\n \"凌\": [[\"líng\"]],\n \"霍\": [[\"huò\"]],\n \"虞\": [[\"yú\"]],\n \"万\": [[\"wàn\"]],\n \"支\": [[\"zhī\"]],\n \"柯\": [[\"kē\"]],\n \"昝\": [[\"zǎn\"]],\n \"管\": [[\"guǎn\"]],\n \"卢\": [[\"lú\"]],\n \"莫\": [[\"mò\"]],\n \"经\": [[\"jīng\"]],\n \"房\": [[\"fáng\"]],\n \"裘\": [[\"qiú\"]],\n \"缪\": [[\"miào\"]],\n \"干\": [[\"gān\"]],\n \"解\": [[\"xiè\"]],\n \"应\": [[\"yīng\"]],\n \"宗\": [[\"zōng\"]],\n \"丁\": [[\"dīng\"]],\n \"宣\": [[\"xuān\"]],\n \"贲\": [[\"bēn\"]],\n \"邓\": [[\"dèng\"]],\n \"郁\": [[\"yù\"]],\n \"单\": [[\"shàn\"]],\n \"杭\": [[\"háng\"]],\n \"洪\": [[\"hóng\"]],\n \"包\": [[\"bāo\"]],\n \"诸\": [[\"zhū\"]],\n \"左\": [[\"zuǒ\"]],\n \"石\": [[\"shí\"]],\n \"崔\": [[\"cuī\"]],\n \"吉\": [[\"jí\"]],\n \"钮\": [[\"niǔ\"]],\n \"龚\": [[\"gōng\"]],\n \"程\": [[\"chéng\"]],\n \"嵇\": [[\"jī\"]],\n \"邢\": [[\"xíng\"]],\n \"滑\": [[\"huá\"]],\n \"裴\": [[\"péi\"]],\n \"陆\": [[\"lù\"]],\n \"荣\": [[\"róng\"]],\n \"翁\": [[\"wēng\"]],\n \"荀\": [[\"xún\"]],\n \"羊\": [[\"yáng\"]],\n \"於\": [[\"yū\"]],\n \"惠\": [[\"huì\"]],\n \"甄\": [[\"zhēn\"]],\n \"曲\": [[\"qū\"]],\n \"家\": [[\"jiā\"]],\n \"封\": [[\"fēng\"]],\n \"芮\": [[\"ruì\"]],\n \"羿\": [[\"yì\"]],\n \"储\": [[\"chǔ\"]],\n \"靳\": [[\"jìn\"]],\n \"汲\": [[\"jí\"]],\n \"邴\": [[\"bǐng\"]],\n \"糜\": [[\"mí\"]],\n \"松\": [[\"sōng\"]],\n \"井\": [[\"jǐng\"]],\n \"段\": [[\"duàn\"]],\n \"富\": [[\"fù\"]],\n \"巫\": [[\"wū\"]],\n \"乌\": [[\"wū\"]],\n \"焦\": [[\"jiāo\"]],\n \"巴\": [[\"bā\"]],\n \"弓\": [[\"gōng\"]],\n \"牧\": [[\"mù\"]],\n \"隗\": [[\"kuí\"]],\n \"山\": [[\"shān\"]],\n \"谷\": [[\"gǔ\"]],\n \"车\": [[\"chē\"]],\n \"侯\": [[\"hóu\"]],\n \"宓\": [[\"mì\"]],\n \"蓬\": [[\"péng\"]],\n \"全\": [[\"quán\"]],\n \"郗\": [[\"xī\"]],\n \"班\": [[\"bān\"]],\n \"仰\": [[\"yǎng\"]],\n \"秋\": [[\"qiū\"]],\n \"仲\": [[\"zhòng\"]],\n \"伊\": [[\"yī\"]],\n \"宫\": [[\"gōng\"]],\n \"宁\": [[\"nìng\"]],\n \"仇\": [[\"qiú\"]],\n \"栾\": [[\"luán\"]],\n \"暴\": [[\"bào\"]],\n \"甘\": [[\"gān\"]],\n \"钭\": [[\"tǒu\"]],\n \"厉\": [[\"lì\"]],\n \"戎\": [[\"róng\"]],\n \"祖\": [[\"zǔ\"]],\n \"武\": [[\"wǔ\"]],\n \"符\": [[\"fú\"]],\n \"刘\": [[\"liú\"]],\n \"景\": [[\"jǐng\"]],\n \"詹\": [[\"zhān\"]],\n \"束\": [[\"shù\"]],\n \"龙\": [[\"lóng\"]],\n \"叶\": [[\"yè\"]],\n \"幸\": [[\"xìng\"]],\n \"司\": [[\"sī\"]],\n \"韶\": [[\"sháo\"]],\n \"郜\": [[\"gào\"]],\n \"黎\": [[\"lí\"]],\n \"蓟\": [[\"jì\"]],\n \"薄\": [[\"bó\"]],\n \"印\": [[\"yìn\"]],\n \"宿\": [[\"sù\"]],\n \"白\": [[\"bái\"]],\n \"怀\": [[\"huái\"]],\n \"蒲\": [[\"pú\"]],\n \"邰\": [[\"tái\"]],\n \"从\": [[\"cóng\"]],\n \"鄂\": [[\"è\"]],\n \"索\": [[\"suǒ\"]],\n \"咸\": [[\"xián\"]],\n \"籍\": [[\"jí\"]],\n \"赖\": [[\"lài\"]],\n \"卓\": [[\"zhuó\"]],\n \"蔺\": [[\"lìn\"]],\n \"屠\": [[\"tú\"]],\n \"蒙\": [[\"méng\"]],\n \"池\": [[\"chí\"]],\n \"乔\": [[\"qiáo\"]],\n \"阴\": [[\"yīn\"]],\n \"鬱\": [[\"yù\"]],\n \"胥\": [[\"xū\"]],\n \"能\": [[\"nài\"]],\n \"苍\": [[\"cāng\"]],\n \"双\": [[\"shuāng\"]],\n \"闻\": [[\"wén\"]],\n \"莘\": [[\"shēn\"]],\n \"党\": [[\"dǎng\"]],\n \"翟\": [[\"zhái\"]],\n \"谭\": [[\"tán\"]],\n \"贡\": [[\"gòng\"]],\n \"劳\": [[\"láo\"]],\n \"逄\": [[\"páng\"]],\n \"姬\": [[\"jī\"]],\n \"申\": [[\"shēn\"]],\n \"扶\": [[\"fú\"]],\n \"堵\": [[\"dǔ\"]],\n \"冉\": [[\"rǎn\"]],\n \"宰\": [[\"zǎi\"]],\n \"郦\": [[\"lì\"]],\n \"雍\": [[\"yōng\"]],\n \"郤\": [[\"xì\"]],\n \"璩\": [[\"qú\"]],\n \"桑\": [[\"sāng\"]],\n \"桂\": [[\"guì\"]],\n \"濮\": [[\"pú\"]],\n \"牛\": [[\"niú\"]],\n \"寿\": [[\"shòu\"]],\n \"通\": [[\"tōng\"]],\n \"边\": [[\"biān\"]],\n \"扈\": [[\"hù\"]],\n \"燕\": [[\"yān\"]],\n \"冀\": [[\"jì\"]],\n \"郏\": [[\"jiá\"]],\n \"浦\": [[\"pǔ\"]],\n \"尚\": [[\"shàng\"]],\n \"农\": [[\"nóng\"]],\n \"温\": [[\"wēn\"]],\n \"别\": [[\"bié\"]],\n \"庄\": [[\"zhuāng\"]],\n \"晏\": [[\"yàn\"]],\n \"柴\": [[\"chái\"]],\n \"瞿\": [[\"qú\"]],\n \"阎\": [[\"yán\"]],\n \"充\": [[\"chōng\"]],\n \"慕\": [[\"mù\"]],\n \"连\": [[\"lián\"]],\n \"茹\": [[\"rú\"]],\n \"习\": [[\"xí\"]],\n \"宦\": [[\"huàn\"]],\n \"艾\": [[\"ài\"]],\n \"鱼\": [[\"yú\"]],\n \"容\": [[\"róng\"]],\n \"向\": [[\"xiàng\"]],\n \"古\": [[\"gǔ\"]],\n \"易\": [[\"yì\"]],\n \"慎\": [[\"shèn\"]],\n \"戈\": [[\"gē\"]],\n \"廖\": [[\"liào\"]],\n \"庾\": [[\"yǔ\"]],\n \"终\": [[\"zhōng\"]],\n \"暨\": [[\"jì\"]],\n \"居\": [[\"jū\"]],\n \"衡\": [[\"héng\"]],\n \"步\": [[\"bù\"]],\n \"都\": [[\"dū\"]],\n \"耿\": [[\"gěng\"]],\n \"满\": [[\"mǎn\"]],\n \"弘\": [[\"hóng\"]],\n \"匡\": [[\"kuāng\"]],\n \"国\": [[\"guó\"]],\n \"文\": [[\"wén\"]],\n \"寇\": [[\"kòu\"]],\n \"广\": [[\"guǎng\"]],\n \"禄\": [[\"lù\"]],\n \"阙\": [[\"quē\"]],\n \"东\": [[\"dōng\"]],\n \"欧\": [[\"ōu\"]],\n \"殳\": [[\"shū\"]],\n \"沃\": [[\"wò\"]],\n \"利\": [[\"lì\"]],\n \"蔚\": [[\"wèi\"]],\n \"越\": [[\"yuè\"]],\n \"夔\": [[\"kuí\"]],\n \"隆\": [[\"lóng\"]],\n \"师\": [[\"shī\"]],\n \"巩\": [[\"gǒng\"]],\n \"厍\": [[\"shè\"]],\n \"聂\": [[\"niè\"]],\n \"晁\": [[\"cháo\"]],\n \"勾\": [[\"gōu\"]],\n \"敖\": [[\"áo\"]],\n \"融\": [[\"róng\"]],\n \"冷\": [[\"lěng\"]],\n \"訾\": [[\"zǐ\"]],\n \"辛\": [[\"xīn\"]],\n \"阚\": [[\"kàn\"]],\n \"那\": [[\"nā\"]],\n \"简\": [[\"jiǎn\"]],\n \"饶\": [[\"ráo\"]],\n \"空\": [[\"kōng\"]],\n \"曾\": [[\"zēng\"]],\n \"母\": [[\"mǔ\"]],\n \"沙\": [[\"shā\"]],\n \"乜\": [[\"niè\"]],\n \"养\": [[\"yǎng\"]],\n \"鞠\": [[\"jū\"]],\n \"须\": [[\"xū\"]],\n \"丰\": [[\"fēng\"]],\n \"巢\": [[\"cháo\"]],\n \"关\": [[\"guān\"]],\n \"蒯\": [[\"kuǎi\"]],\n \"相\": [[\"xiàng\"]],\n \"查\": [[\"zhā\"]],\n \"后\": [[\"hòu\"]],\n \"荆\": [[\"jīng\"]],\n \"红\": [[\"hóng\"]],\n \"游\": [[\"yóu\"]],\n \"竺\": [[\"zhú\"]],\n \"权\": [[\"quán\"]],\n \"逯\": [[\"lù\"]],\n \"盖\": [[\"gài\"]],\n \"益\": [[\"yì\"]],\n \"桓\": [[\"huán\"]],\n \"公\": [[\"gōng\"]],\n \"牟\": [[\"móu\"]],\n \"哈\": [[\"hǎ\"]],\n \"言\": [[\"yán\"]],\n \"福\": [[\"fú\"]],\n};\n","// 复姓\nmodule.exports = {\n \"万俟\": [[\"mò\"], [\"qí\"]],\n \"上官\": [[\"shàng\"], [\"guān\"]],\n \"东方\": [[\"dōng\"], [\"fāng\"]],\n \"东郭\": [[\"dōng\"], [\"guō\"]],\n \"东门\": [[\"dōng\"], [\"mén\"]],\n \"乐正\": [[\"yuè\"], [\"zhèng\"]],\n \"亓官\": [[\"qí\"], [\"guān\"]],\n \"仉督\": [[\"zhǎng\"], [\"dū\"]],\n \"令狐\": [[\"líng\"], [\"hú\"]],\n \"仲孙\": [[\"zhòng\"], [\"sūn\"]],\n \"公冶\": [[\"gōng\"], [\"yě\"]],\n \"公孙\": [[\"gōng\"], [\"sūn\"]],\n \"公羊\": [[\"gōng\"], [\"yáng\"]],\n \"公良\": [[\"gōng\"], [\"liáng\"]],\n \"公西\": [[\"gōng\"], [\"xī\"]],\n \"单于\": [[\"chán\"], [\"yú\"]],\n \"南宫\": [[\"nán\"], [\"gōng\"]],\n \"南门\": [[\"nán\"], [\"mén\"]],\n \"司寇\": [[\"sī\"], [\"kòu\"]],\n \"司徒\": [[\"sī\"], [\"tú\"]],\n \"司空\": [[\"sī\"], [\"kōng\"]],\n \"司马\": [[\"sī\"], [\"mǎ\"]],\n \"呼延\": [[\"hū\"], [\"yán\"]],\n \"壤驷\": [[\"rǎng\"], [\"sì\"]],\n \"夏侯\": [[\"xià\"], [\"hóu\"]],\n \"太叔\": [[\"tài\"], [\"shū\"]],\n \"夹谷\": [[\"jiá\"], [\"gǔ\"]],\n \"子车\": [[\"zǐ\"], [\"jū\"]],\n \"宇文\": [[\"yǔ\"], [\"wén\"]],\n \"宗政\": [[\"zōng\"], [\"zhèng\"]],\n \"宰父\": [[\"zǎi\"], [\"fǔ\"]],\n \"尉迟\": [[\"yù\"], [\"chí\"]],\n \"左丘\": [[\"zuǒ\"], [\"qiū\"]],\n \"巫马\": [[\"wū\"], [\"mǎ\"]],\n \"慕容\": [[\"mù\"], [\"róng\"]],\n \"拓跋\": [[\"tuò\"], [\"bá\"]],\n \"梁丘\": [[\"liáng\"], [\"qiū\"]],\n \"榖梁\": [[\"gǔ\"], [\"liáng\"]],\n \"欧阳\": [[\"ōu\"], [\"yáng\"]],\n \"段干\": [[\"duàn\"], [\"gān\"]],\n \"淳于\": [[\"chún\"], [\"yú\"]],\n \"漆雕\": [[\"qī\"], [\"diāo\"]],\n \"澹台\": [[\"tán\"], [\"tái\"]],\n \"濮阳\": [[\"pú\"], [\"yáng\"]],\n \"申屠\": [[\"shēn\"], [\"tú\"]],\n \"百里\": [[\"bǎi\"], [\"lǐ\"]],\n \"皇甫\": [[\"huáng\"], [\"pǔ\"]],\n \"端木\": [[\"duān\"], [\"mù\"]],\n \"第五\": [[\"dì\"], [\"wǔ\"]],\n \"羊舌\": [[\"yáng\"], [\"shé\"]],\n \"西门\": [[\"xī\"], [\"mén\"]],\n \"诸葛\": [[\"zhū\"], [\"gě\"]],\n \"赫连\": [[\"hè\"], [\"lián\"]],\n \"轩辕\": [[\"xuān\"], [\"yuán\"]],\n \"钟离\": [[\"zhōng\"], [\"lí\"]],\n \"长孙\": [[\"zhǎng\"], [\"sūn\"]],\n \"闻人\": [[\"wén\"], [\"rén\"]],\n \"闾丘\": [[\"lǘ\"], [\"qiū\"]],\n \"颛孙\": [[\"zhuān\"], [\"sūn\"]],\n \"鲜于\": [[\"xiān\"], [\"yú\"]],\n};\n","// 带声调字符。\nmodule.exports = {\n \"ā\": \"a1\",\n \"á\": \"a2\",\n \"ǎ\": \"a3\",\n \"à\": \"a4\",\n \"ē\": \"e1\",\n \"é\": \"e2\",\n \"ě\": \"e3\",\n \"è\": \"e4\",\n \"ō\": \"o1\",\n \"ó\": \"o2\",\n \"ǒ\": \"o3\",\n \"ò\": \"o4\",\n \"ī\": \"i1\",\n \"í\": \"i2\",\n \"ǐ\": \"i3\",\n \"ì\": \"i4\",\n \"ū\": \"u1\",\n \"ú\": \"u2\",\n \"ǔ\": \"u3\",\n \"ù\": \"u4\",\n \"ü\": \"v0\",\n \"ǘ\": \"v2\",\n \"ǚ\": \"v3\",\n \"ǜ\": \"v4\",\n \"ń\": \"n2\",\n \"ň\": \"n3\",\n \"\": \"m2\",\n};\n","\"use strict\";\n\n/**\n * 组合 2 个拼音数组。\n * @param {Array<String>} a1 第一个数组,形如 [\"zhāo\", \"cháo\"]\n * @param {Array<String>} a2 字符串型数组。形如 [\"yáng\"]\n * @return {Array<String>} 组合后的一维数组,如上可得 [\"zhāoyáng\", \"cháoyáng\"]\n */\nfunction combo2array(a1, a2) {\n const result = [];\n if (!a1.length) {\n return a2;\n }\n if (!a2.length) {\n return a1;\n }\n for (let i = 0, l = a1.length; i < l; i++) {\n for (let j = 0, m = a2.length; j < m; j++) {\n result.push(a1[i] + a2[j]);\n }\n }\n return result;\n}\n\n/**\n * 合并二维元祖。\n * @param {Array<Array<String>>} arr 二维元祖 [[\"zhāo\", \"cháo\"], [\"yáng\"], [\"dōng\"], [\"shēng\"]]\n * @return {Array<String>} 返回二维字符串组合数组。形如\n * [\n * [\"zhāoyáng\"], [\"dōng\"], [\"shēng\"],\n * [\"cháoyáng\"], [\"dōng\"], [\"shēng\"]\n * ]\n */\nfunction combo(arr) {\n if (arr.length === 0) {\n return [];\n }\n if (arr.length === 1) {\n return arr[0];\n }\n let result = combo2array(arr[0], arr[1]);\n for (let i = 2, l = arr.length; i < l; i++) {\n result = combo2array(result, arr[i]);\n }\n return result;\n}\n\n/**\n * 组合两个拼音数组,形成一个新的二维数组\n * @param {string[]|string[][]} arr1 eg: [\"hai\", \"huan\"]\n * @param {Array<String>} arr2 eg: [\"qian\"]\n * @returns {string[][]} 组合后的二维数组,eg: [ [\"hai\", \"qian\"], [\"huan\", \"qian\"] ]\n */\nfunction compact2array(a1, a2) {\n if (!Array.isArray(a1) || !Array.isArray(a2)) {\n throw new Error(\"compact2array expect two array as parameters\");\n }\n if (!a1.length) {\n a1 = [\"\"];\n }\n if (!a2.length) {\n a2 = [\"\"];\n }\n const result = [];\n for (let i = 0, l = a1.length; i < l; i++) {\n for (let j = 0, m = a2.length; j < m; j++) {\n if (Array.isArray(a1[i])) {\n result.push([...a1[i], a2[j]]);\n } else {\n result.push([a1[i], a2[j]]);\n }\n }\n }\n return result;\n}\n\nfunction compact(arr) {\n if (arr.length === 0) {\n return [];\n }\n if (arr.length === 1) {\n return [arr[0]];\n }\n let result = compact2array(arr[0], arr[1]);\n for (let i = 2, l = arr.length; i < l; ++i) {\n result = compact2array(result, arr[i]);\n }\n return result;\n}\n\nexports.combo2array = combo2array;\nexports.combo = combo;\nexports.compact2array = compact2array;\nexports.compact = compact;\n","\"use strict\";\n\nconst assign = require(\"object-assign\");\nconst SurnamePinyinData = require(\"../data/surname\");\nconst CompoundSurnamePinyinData = require(\"../data/compound_surname\");\n\n// XXX: Symbol when web support.\nconst PINYIN_STYLE = {\n NORMAL: 0, // 普通风格,不带声调。\n TONE: 1, // 标准风格,声调在韵母的第一个字母上。\n TONE2: 2, // 声调以数字形式在拼音之后,使用数字 0~4 标识。\n TO3NE: 5, // 声调以数字形式在声母之后,使用数字 0~4 标识。\n INITIALS: 3, // 仅需要声母部分。\n FIRST_LETTER: 4, // 仅保留首字母。\n};\n// 拼音模式。\nconst PINYIN_MODE = {\n NORMAL: 0, // 普通模式\n SURNAME: 1, // 姓氏\n PLACENAME: 2, // 地名\n};\nconst DEFAULT_OPTIONS = {\n mode: PINYIN_MODE.NORMAL, // 拼音模式。\n style: PINYIN_STYLE.TONE, // 风格。\n segment: false, // 分词。\n heteronym: false, // 多音字。\n};\n\n// 声母表。\nconst INITIALS = \"b,p,m,f,d,t,n,l,g,k,h,j,q,x,r,zh,ch,sh,z,c,s\".split(\",\");\n// 韵母表。\n//const FINALS = \"ang,eng,ing,ong,an,en,in,un,er,ai,ei,ui,ao,ou,iu,ie,ve,a,o,e,i,u,v\".split(\",\");\n// 带声调字符。\nconst PHONETIC_SYMBOL = require(\"./phonetic-symbol\");\nconst RE_PHONETIC_SYMBOL = new RegExp(\"([\" + Object.keys(PHONETIC_SYMBOL).join(\"\") + \"])\", \"g\");\nconst RE_TONE2 = /([aeoiuvnm])([0-4])$/;\nconst util = require(\"./util\");\n\n/*\n * 格式化拼音为声母(Initials)形式。\n * @param {String}\n * @return {String}\n */\nfunction initials(pinyin) {\n for (let i = 0, l = INITIALS.length; i < l; i++){\n if (pinyin.indexOf(INITIALS[i]) === 0) {\n return INITIALS[i];\n }\n }\n return \"\";\n}\n\nclass Pinyin {\n constructor (dict) {\n this._dict = dict;\n }\n\n // @param {String} hans 要转为拼音的目标字符串(汉字)。\n // @param {Object} options, 可选,用于指定拼音风格,是否启用多音字。\n // @return {Array} 返回的拼音列表。\n convert (hans, options) {\n\n if (typeof hans !== \"string\") {\n return [];\n }\n\n options = assign({}, DEFAULT_OPTIONS, options);\n\n let pys = [];\n let nohans = \"\";\n\n if (options.mode === PINYIN_MODE.SURNAME) {\n pys.push(this.surname_pinyin(hans, options));\n } else {\n\n for(let i = 0, firstCharCode, words, l = hans.length; i < l; i++) {\n\n words = hans[i];\n firstCharCode = words.charCodeAt(0);\n\n if(this._dict[firstCharCode]) {\n\n // ends of non-chinese words.\n if(nohans.length > 0) {\n pys.push([nohans]);\n nohans = \"\"; // reset non-chinese words.\n }\n\n pys.push(this.single_pinyin(words, options));\n\n } else {\n nohans += words;\n }\n }\n\n }\n\n // 清理最后的非中文字符串。\n if(nohans.length > 0){\n pys.push([nohans]);\n }\n\n Object.defineProperty(pys, \"compact\", {\n value: util.compact.bind(this, pys),\n enumerable: false,\n configurable: false,\n });\n\n return pys;\n }\n\n // 单字拼音转换。\n // @param {String} han, 单个汉字\n // @return {Array} 返回拼音列表,多音字会有多个拼音项。\n single_pinyin(han, options) {\n\n if (typeof han !== \"string\") {\n return [];\n }\n if (han.length !== 1) {\n return this.single_pinyin(han.charAt(0), options);\n }\n\n let hanCode = han.charCodeAt(0);\n\n if (!this._dict[hanCode]) {\n return [han];\n }\n\n let pys = this._dict[hanCode].split(\",\");\n if(!options.heteronym){\n return [Pinyin.toFixed(pys[0], options.style)];\n }\n\n // 临时存储已存在的拼音,避免多音字拼音转换为非注音风格出现重复。\n let py_cached = {};\n let pinyins = [];\n for(let i = 0, py, l = pys.length; i < l; i++){\n py = Pinyin.toFixed(pys[i], options.style);\n if(py_cached.hasOwnProperty(py)){\n continue;\n }\n py_cached[py] = py;\n\n pinyins.push(py);\n }\n return pinyins;\n }\n\n // 姓名转成拼音\n surname_pinyin(hans, options) {\n return this.compound_surname(hans, options);\n }\n\n // 复姓处理\n compound_surname(hans, options) {\n let len = hans.length;\n let prefixIndex = 0;\n let result = [];\n function toFixed(item) {\n return item.map(ch => Pinyin.toFixed(ch, options.style));\n }\n for (let i = 0; i < len; i++) {\n const twowords = hans.substring(i, i + 2);\n if (CompoundSurnamePinyinData.hasOwnProperty(twowords)) {\n if (prefixIndex <= i - 1) {\n result = result.concat(\n this.single_surname(\n hans.substring(prefixIndex, i),\n options\n )\n );\n }\n result = result.concat(CompoundSurnamePinyinData[twowords].map(toFixed));\n\n i = i + 2;\n prefixIndex = i;\n }\n }\n // 处理复姓后面剩余的部分。\n result = result.concat(\n this.single_surname(\n hans.substring(prefixIndex, len),\n options\n )\n );\n return result;\n }\n\n // 单姓处理\n single_surname(hans, options) {\n let result = [];\n function toFixed(item) {\n return item.map(ch => Pinyin.toFixed(ch, options.style));\n }\n for (let i = 0, l = hans.length; i < l; i++) {\n const word = hans.charAt(i);\n if (SurnamePinyinData.hasOwnProperty(word)) {\n result = result.concat(SurnamePinyinData[word].map(toFixed));\n } else {\n result.push(this.single_pinyin(word, options));\n }\n }\n return result;\n }\n\n /**\n * 格式化拼音风格。\n *\n * @param {String} pinyin TONE 风格的拼音。\n * @param {ENUM} style 目标转换的拼音风格。\n * @return {String} 转换后的拼音。\n */\n static toFixed (pinyin, style) {\n let tone = \"\"; // 声调。\n let first_letter;\n let py;\n switch(style){\n case PINYIN_STYLE.INITIALS:\n return initials(pinyin);\n\n case PINYIN_STYLE.FIRST_LETTER:\n first_letter = pinyin.charAt(0);\n if (PHONETIC_SYMBOL.hasOwnProperty(first_letter)) {\n first_letter = PHONETIC_SYMBOL[first_letter].charAt(0);\n }\n return first_letter;\n\n case PINYIN_STYLE.NORMAL:\n return pinyin.replace(RE_PHONETIC_SYMBOL, function($0, $1_phonetic){\n return PHONETIC_SYMBOL[$1_phonetic].replace(RE_TONE2, \"$1\");\n });\n\n case PINYIN_STYLE.TO3NE:\n return pinyin.replace(RE_PHONETIC_SYMBOL, function($0, $1_phonetic){\n return PHONETIC_SYMBOL[$1_phonetic];\n });\n\n case PINYIN_STYLE.TONE2:\n py = pinyin.replace(RE_PHONETIC_SYMBOL, function($0, $1){\n // 声调数值。\n tone = PHONETIC_SYMBOL[$1].replace(RE_TONE2, \"$2\");\n\n return PHONETIC_SYMBOL[$1].replace(RE_TONE2, \"$1\");\n });\n return py + tone;\n\n case PINYIN_STYLE.TONE:\n default:\n return pinyin;\n }\n }\n\n /**\n * 比较两个汉字转成拼音后的排序顺序,可以用作默认的拼音排序算法。\n *\n * @param {String} hanA 汉字字符串 A。\n * @return {String} hanB 汉字字符串 B。\n * @return {Number} 返回 -1,0,或 1。\n */\n compare (hanA, hanB) {\n const pinyinA = this.convert(hanA, DEFAULT_OPTIONS);\n const pinyinB = this.convert(hanB, DEFAULT_OPTIONS);\n return String(pinyinA).localeCompare(String(pinyinB));\n }\n\n compact(arr) {\n return util.compact(arr);\n }\n\n static get STYLE_NORMAL () {\n return PINYIN_STYLE.NORMAL;\n }\n static get STYLE_TONE () {\n return PINYIN_STYLE.TONE;\n }\n static get STYLE_TONE2 () {\n return PINYIN_STYLE.TONE2;\n }\n static get STYLE_TO3NE () {\n return PINYIN_STYLE.TO3NE;\n }\n static get STYLE_INITIALS () {\n return PINYIN_STYLE.INITIALS;\n }\n static get STYLE_FIRST_LETTER () {\n return PINYIN_STYLE.FIRST_LETTER;\n }\n static get MODE_NORMAL () {\n return PINYIN_MODE.NORMAL;\n }\n static get MODE_SURNAME () {\n return PINYIN_MODE.SURNAME;\n }\n static get MODE_PLACENAME () {\n return PINYIN_MODE.PLACENAME;\n }\n static get DEFAULT_OPTIONS () {\n return DEFAULT_OPTIONS;\n }\n}\n\nmodule.exports = Pinyin;\n","\"use strict\";\n\n// 解压拼音库。\n// @param {Object} dict_combo, 压缩的拼音库。\n// @param {Object} 解压的拼音库。\nfunction buildPinyinCache(dict_combo){\n let hans;\n let uncomboed = {};\n\n for(let py in dict_combo){\n hans = dict_combo[py];\n for(let i = 0, han, l = hans.length; i < l; i++){\n han = hans.charCodeAt(i);\n if(!uncomboed.hasOwnProperty(han)){\n uncomboed[han] = py;\n }else{\n uncomboed[han] += \",\" + py;\n }\n }\n }\n\n return uncomboed;\n}\n\nconst PINYIN_DICT = buildPinyinCache(require(\"../data/dict-zi-web\"));\nconst Pinyin = require(\"./pinyin\");\nconst pinyin = new Pinyin(PINYIN_DICT);\n\nmodule.exports = pinyin.convert.bind(pinyin);\nmodule.exports.compare = pinyin.compare.bind(pinyin);\nmodule.exports.compact = pinyin.compact.bind(pinyin);\nmodule.exports.STYLE_NORMAL = Pinyin.STYLE_NORMAL;\nmodule.exports.STYLE_TONE = Pinyin.STYLE_TONE;\nmodule.exports.STYLE_TONE2 = Pinyin.STYLE_TONE2;\nmodule.exports.STYLE_TO3NE = Pinyin.STYLE_TO3NE;\nmodule.exports.STYLE_INITIALS = Pinyin.STYLE_INITIALS;\nmodule.exports.STYLE_FIRST_LETTER = Pinyin.STYLE_FIRST_LETTER;\n","let a=[[\"\\0\",\"\u0001\",\"\u0002\",\"\u0003\",\"\u0004\",\"\u0005\",\"\u0006\",\"\u0007\",\"\\b\",\"\\t\",\"\\n\",\"\\v\",\"\\f\",\"\\r\",\"\u000e\",\"\u000f\",\"\u0010\",\"\u0011\",\"\u0012\",\"\u0013\",\"\u0014\",\"\u0015\",\"\u0016\",\"\u0017\",\"\u0018\",\"\u0019\",\"\u001a\",\"\u001b\",\"\u001c\",\"\u001d\",\"\u001e\",\"\u001f\",\" \",\"!\",'\"',\"#\",\"$\",\"%\",\"&\",\"'\",\"(\",\")\",\"*\",\"+\",\",\",\"-\",\".\",\"/\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\":\",\";\",\"<\",\"=\",\">\",\"?\",\"@\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"[\",\"\\\\\",\"]\",\"^\",\"_\",\"`\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"{\",\"|\",\"}\",\"~\",\"\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\" \",\"!\",\"C/\",\"PS\",\"$?\",\"Y=\",\"|\",\"SS\",'\"',\"(c)\",\"a\",\"<<\",\"!\",,\"(r)\",\"-\",\"deg\",\"+-\",\"2\",\"3\",\"'\",\"u\",\"P\",\"*\",\",\",\"1\",\"o\",\">>\",\"1/4\",\"1/2\",\"3/4\",\"?\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"AE\",\"C\",\"E\",\"E\",\"E\",\"E\",\"I\",\"I\",\"I\",\"I\",\"D\",\"N\",\"O\",\"O\",\"O\",\"O\",\"O\",\"x\",\"O\",\"U\",\"U\",\"U\",\"U\",\"U\",\"Th\",\"ss\",\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"ae\",\"c\",\"e\",\"e\",\"e\",\"e\",\"i\",\"i\",\"i\",\"i\",\"d\",\"n\",\"o\",\"o\",\"o\",\"o\",\"o\",\"/\",\"o\",\"u\",\"u\",\"u\",\"u\",\"y\",\"th\",\"y\"],[\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"C\",\"c\",\"C\",\"c\",\"C\",\"c\",\"C\",\"c\",\"D\",\"d\",\"D\",\"d\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"G\",\"g\",\"G\",\"g\",\"G\",\"g\",\"G\",\"g\",\"H\",\"h\",\"H\",\"h\",\"I\",\"i\",\"I\",\"i\",\"I\",\"i\",\"I\",\"i\",\"I\",\"i\",\"IJ\",\"ij\",\"J\",\"j\",\"K\",\"k\",\"k\",\"L\",\"l\",\"L\",\"l\",\"L\",\"l\",\"L\",\"l\",\"L\",\"l\",\"N\",\"n\",\"N\",\"n\",\"N\",\"n\",\"'n\",\"NG\",\"ng\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"OE\",\"oe\",\"R\",\"r\",\"R\",\"r\",\"R\",\"r\",\"S\",\"s\",\"S\",\"s\",\"S\",\"s\",\"S\",\"s\",\"T\",\"t\",\"T\",\"t\",\"T\",\"t\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"W\",\"w\",\"Y\",\"y\",\"Y\",\"Z\",\"z\",\"Z\",\"z\",\"Z\",\"z\",\"s\",\"b\",\"B\",\"B\",\"b\",\"6\",\"6\",\"O\",\"C\",\"c\",\"D\",\"D\",\"D\",\"d\",\"d\",\"3\",\"@\",\"E\",\"F\",\"f\",\"G\",\"G\",\"hv\",\"I\",\"I\",\"K\",\"k\",\"l\",\"l\",\"W\",\"N\",\"n\",\"O\",\"O\",\"o\",\"OI\",\"oi\",\"P\",\"p\",\"YR\",\"2\",\"2\",\"SH\",\"sh\",\"t\",\"T\",\"t\",\"T\",\"U\",\"u\",\"Y\",\"V\",\"Y\",\"y\",\"Z\",\"z\",\"ZH\",\"ZH\",\"zh\",\"zh\",\"2\",\"5\",\"5\",\"ts\",\"w\",\"|\",\"||\",\"|=\",\"!\",\"DZ\",\"Dz\",\"dz\",\"LJ\",\"Lj\",\"lj\",\"NJ\",\"Nj\",\"nj\",\"A\",\"a\",\"I\",\"i\",\"O\",\"o\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"@\",\"A\",\"a\",\"A\",\"a\",\"AE\",\"ae\",\"G\",\"g\",\"G\",\"g\",\"K\",\"k\",\"O\",\"o\",\"O\",\"o\",\"ZH\",\"zh\",\"j\",\"DZ\",\"D\",\"dz\",\"G\",\"g\",\"HV\",\"W\",\"N\",\"n\",\"A\",\"a\",\"AE\",\"ae\",\"O\",\"o\"],[\"A\",\"a\",\"A\",\"a\",\"E\",\"e\",\"E\",\"e\",\"I\",\"i\",\"I\",\"i\",\"O\",\"o\",\"O\",\"o\",\"R\",\"r\",\"R\",\"r\",\"U\",\"u\",\"U\",\"u\",\"S\",\"s\",\"T\",\"t\",\"Y\",\"y\",\"H\",\"h\",\"N\",\"d\",\"OU\",\"ou\",\"Z\",\"z\",\"A\",\"a\",\"E\",\"e\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"Y\",\"y\",\"l\",\"n\",\"t\",\"j\",\"db\",\"qp\",\"A\",\"C\",\"c\",\"L\",\"T\",\"s\",\"z\",\"?\",\"?\",\"B\",\"U\",\"V\",\"E\",\"e\",\"J\",\"j\",\"Q\",\"q\",\"R\",\"r\",\"Y\",\"y\",\"a\",\"a\",\"a\",\"b\",\"o\",\"c\",\"d\",\"d\",\"e\",\"@\",\"@\",\"e\",\"e\",\"e\",\"e\",\"j\",\"g\",\"g\",\"g\",\"g\",\"u\",\"Y\",\"h\",\"h\",\"i\",\"i\",\"I\",\"l\",\"l\",\"l\",\"lZ\",\"W\",\"W\",\"m\",\"n\",\"n\",\"n\",\"o\",\"OE\",\"O\",\"F\",\"R\",\"R\",\"R\",\"R\",\"r\",\"r\",\"R\",\"R\",\"R\",\"s\",\"S\",\"j\",\"S\",\"S\",\"t\",\"t\",\"U\",\"U\",\"v\",\"^\",\"W\",\"Y\",\"Y\",\"z\",\"z\",\"Z\",\"Z\",\"?\",\"?\",\"?\",\"C\",\"@\",\"B\",\"E\",\"G\",\"H\",\"j\",\"k\",\"L\",\"q\",\"?\",\"?\",\"dz\",\"dZ\",\"dz\",\"ts\",\"tS\",\"tC\",\"fN\",\"ls\",\"lz\",\"WW\",\"]]\",\"h\",\"h\",\"k\",\"h\",\"j\",\"r\",\"r\",\"r\",\"r\",\"w\",\"y\",\"'\",'\"',\"`\",\"'\",\"`\",\"`\",\"'\",\"?\",\"?\",\"<\",\">\",\"^\",\"V\",\"^\",\"V\",\"'\",\"-\",\"/\",\"\\\\\",\",\",\"_\",\"\\\\\",\"/\",\":\",\".\",\"`\",\"'\",\"^\",\"V\",\"+\",\"-\",\"V\",\".\",\"@\",\",\",\"~\",'\"',\"R\",\"X\",\"G\",\"l\",\"s\",\"x\",\"?\",,,,,,,,\"V\",\"=\",'\"'],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"'\",\",\",,,,,,,,,\"?\",,,,,,,,\"A\",\";\",\"E\",\"I\",\"I\",,\"O\",,\"U\",\"O\",\"I\",\"A\",\"V\",\"G\",\"D\",\"E\",\"Z\",\"I\",\"Th\",\"I\",\"K\",\"L\",\"M\",\"N\",\"X\",\"O\",\"P\",\"R\",,\"S\",\"T\",\"Y\",\"F\",\"H\",\"Ps\",\"O\",\"I\",\"Y\",\"a\",\"e\",\"i\",\"i\",\"y\",\"a\",\"v\",\"g\",\"d\",\"e\",\"z\",\"i\",\"th\",\"i\",\"k\",\"l\",\"m\",\"n\",\"x\",\"o\",\"p\",\"r\",\"s\",\"s\",\"t\",\"y\",\"f\",\"h\",\"ps\",\"o\",\"i\",\"y\",\"o\",\"y\",\"o\",,\"b\",\"th\",\"U\",\"U\",\"U\",\"ph\",\"p\",\"&\",,,\"St\",\"st\",\"W\",\"w\",\"Q\",\"q\",\"Sp\",\"sp\",\"Sh\",\"sh\",\"F\",\"f\",\"Kh\",\"kh\",\"H\",\"h\",\"G\",\"g\",\"CH\",\"ch\",\"Ti\",\"ti\",\"k\",\"r\",\"c\",\"j\"],[\"Jo\",\"Yo\",\"Dj\",\"Gj\",\"Ie\",\"Dz\",\"I\",\"Yi\",\"J\",\"Lj\",\"Nj\",\"Tsh\",\"Kj\",\"I\",\"U\",\"Dzh\",\"A\",\"B\",\"V\",\"G\",\"D\",\"E\",\"Zh\",\"Z\",\"I\",\"Y\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"R\",\"S\",\"T\",\"U\",\"F\",\"H\",\"C\",\"Ch\",\"Sh\",\"Shch\",,\"Y\",,\"E\",\"Yu\",\"Ya\",\"a\",\"b\",\"v\",\"g\",\"d\",\"e\",\"zh\",\"z\",\"i\",\"y\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"r\",\"s\",\"t\",\"u\",\"f\",\"h\",\"c\",\"ch\",\"sh\",\"shch\",,\"y\",,\"e\",\"yu\",\"ya\",\"je\",\"yo\",\"dj\",\"gj\",\"ie\",\"dz\",\"i\",\"yi\",\"j\",\"lj\",\"nj\",\"tsh\",\"kj\",\"i\",\"u\",\"dzh\",\"O\",\"o\",\"E\",\"e\",\"Ie\",\"ie\",\"E\",\"e\",\"Ie\",\"ie\",\"O\",\"o\",\"Io\",\"io\",\"Ks\",\"ks\",\"Ps\",\"ps\",\"F\",\"f\",\"Y\",\"y\",\"Y\",\"y\",\"u\",\"u\",\"O\",\"o\",\"O\",\"o\",\"Ot\",\"ot\",\"Q\",\"q\",\"*1000*\",,,,,,\"*100.000*\",\"*1.000.000*\",,,'\"','\"',\"R'\",\"r'\",\"G'\",\"g'\",\"G'\",\"g'\",\"G'\",\"g'\",\"Zh'\",\"zh'\",\"Z'\",\"z'\",\"K'\",\"k'\",\"K'\",\"k'\",\"K'\",\"k'\",\"K'\",\"k'\",\"N'\",\"n'\",\"Ng\",\"ng\",\"P'\",\"p'\",\"Kh\",\"kh\",\"S'\",\"s'\",\"T'\",\"t'\",\"U\",\"u\",\"U'\",\"u'\",\"Kh'\",\"kh'\",\"Tts\",\"tts\",\"Ch'\",\"ch'\",\"Ch'\",\"ch'\",\"H\",\"h\",\"Ch\",\"ch\",\"Ch'\",\"ch'\",\"`\",\"Zh\",\"zh\",\"K'\",\"k'\",,,\"N'\",\"n'\",,,\"Ch\",\"ch\",,,,\"a\",\"a\",\"A\",\"a\",\"Ae\",\"ae\",\"Ie\",\"ie\",\"@\",\"@\",\"@\",\"@\",\"Zh\",\"zh\",\"Z\",\"z\",\"Dz\",\"dz\",\"I\",\"i\",\"I\",\"i\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"E\",\"e\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"Ch\",\"ch\",,,\"Y\",\"y\"],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"A\",\"B\",\"G\",\"D\",\"E\",\"Z\",\"E\",\"E\",\"T`\",\"Zh\",\"I\",\"L\",\"Kh\",\"Ts\",\"K\",\"H\",\"Dz\",\"Gh\",\"Ch\",\"M\",\"Y\",\"N\",\"Sh\",\"O\",\"Ch`\",\"P\",\"J\",\"Rh\",\"S\",\"V\",\"T\",\"R\",\"Ts`\",\"W\",\"P`\",\"K`\",\"O\",\"F\",,,\"<\",\"'\",\"/\",\"!\",\",\",\"?\",\".\",,\"a\",\"b\",\"g\",\"d\",\"e\",\"z\",\"e\",\"e\",\"t`\",\"zh\",\"i\",\"l\",\"kh\",\"ts\",\"k\",\"h\",\"dz\",\"gh\",\"ch\",\"m\",\"y\",\"n\",\"sh\",\"o\",\"ch`\",\"p\",\"j\",\"rh\",\"s\",\"v\",\"t\",\"r\",\"ts`\",\"w\",\"p`\",\"k`\",\"o\",\"f\",\"ew\",,\".\",\"-\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"@\",\"e\",\"a\",\"o\",\"i\",\"e\",\"e\",\"a\",\"a\",\"o\",,\"u\",\"'\",,,,,,,\":\",,,,,,,,,,,,,,\"b\",\"g\",\"d\",\"h\",\"v\",\"z\",\"kh\",\"t\",\"y\",\"k\",\"k\",\"l\",\"m\",\"m\",\"n\",\"n\",\"s\",\"`\",\"p\",\"p\",\"ts\",\"ts\",\"q\",\"r\",\"sh\",\"t\",,,,,,\"V\",\"oy\",\"i\",\"'\",'\"'],[,,,,,,,,,,,,\",\",,,,,,,,,,,,,,,\";\",,,,\"?\",,,\"a\",\"'\",\"w'\",,\"y'\",,\"b\",\"@\",\"t\",\"th\",\"j\",\"H\",\"kh\",\"d\",\"dh\",\"r\",\"z\",\"s\",\"sh\",\"S\",\"D\",\"T\",\"Z\",\"aa\",\"G\",,,,,,,\"f\",\"q\",\"k\",\"l\",\"m\",\"n\",\"h\",\"w\",\"~\",\"y\",\"an\",\"un\",\"in\",\"a\",\"u\",\"i\",\"W\",,,\"'\",\"'\",,,,,,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"%\",\".\",\",\",\"*\",,,,\"'\",\"'\",\"'\",,\"'\",\"'w\",\"'u\",\"'y\",\"tt\",\"tth\",\"b\",\"t\",\"T\",\"p\",\"th\",\"bh\",\"'h\",\"H\",\"ny\",\"dy\",\"H\",\"ch\",\"cch\",\"dd\",\"D\",\"D\",\"Dt\",\"dh\",\"ddh\",\"d\",\"D\",\"D\",\"rr\",\"R\",\"R\",\"R\",\"R\",\"R\",\"R\",\"j\",\"R\",\"S\",\"S\",\"S\",\"S\",\"S\",\"T\",\"GH\",\"F\",\"F\",\"F\",\"v\",\"f\",\"ph\",\"Q\",\"Q\",\"kh\",\"k\",\"K\",\"K\",\"ng\",\"K\",\"g\",\"G\",\"N\",\"G\",\"G\",\"G\",\"L\",\"L\",\"L\",\"L\",\"N\",\"N\",\"N\",\"N\",\"N\",\"h\",\"Ch\",\"hy\",\"h\",\"H\",\"@\",\"W\",\"oe\",\"oe\",\"u\",\"yu\",\"yu\",\"W\",\"v\",\"y\",\"Y\",\"Y\",\"W\",,,\"y\",\"y'\",\".\",\"ae\",,,,,,,,\"@\",\"#\",,,,,,,,,,,\"^\",,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"Sh\",\"D\",\"Gh\",\"&\",\"+m\"],[\"//\",\"/\",\",\",\"!\",\"!\",\"-\",\",\",\",\",\";\",\"?\",\"~\",\"{\",\"}\",\"*\",,,\"'\",,\"b\",\"g\",\"g\",\"d\",\"d\",\"h\",\"w\",\"z\",\"H\",\"t\",\"t\",\"y\",\"yh\",\"k\",\"l\",\"m\",\"n\",\"s\",\"s\",\"`\",\"p\",\"p\",\"S\",\"q\",\"r\",\"sh\",\"t\",,,,\"a\",\"a\",\"a\",\"A\",\"A\",\"A\",\"e\",\"e\",\"e\",\"E\",\"i\",\"i\",\"u\",\"u\",\"u\",\"o\",,\"`\",\"'\",,,\"X\",\"Q\",\"@\",\"@\",\"|\",\"+\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"h\",\"sh\",\"n\",\"r\",\"b\",\"L\",\"k\",\"'\",\"v\",\"m\",\"f\",\"dh\",\"th\",\"l\",\"g\",\"ny\",\"s\",\"d\",\"z\",\"t\",\"y\",\"p\",\"j\",\"ch\",\"tt\",\"hh\",\"kh\",\"th\",\"z\",\"sh\",\"s\",\"d\",\"t\",\"z\",\"`\",\"gh\",\"q\",\"w\",\"a\",\"aa\",\"i\",\"ee\",\"u\",\"oo\",\"e\",\"ey\",\"o\",\"oa\"],[],[,\"N\",\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"L\",\"eN\",\"e\",\"e\",\"ai\",\"oN\",\"o\",\"o\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",\"nnn\",\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",\"rr\",\"l\",\"l\",\"lll\",\"v\",\"sh\",\"ss\",\"s\",\"h\",,,\"'\",\"'\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",\"eN\",\"e\",\"e\",\"ai\",\"oN\",\"o\",\"o\",\"au\",,,,\"AUM\",\"'\",\"'\",\"`\",\"'\",,,,\"q\",\"khh\",\"ghh\",\"z\",\"dddh\",\"rh\",\"f\",\"yy\",\"RR\",\"LL\",\"L\",\"LL\",\" / \",\" // \",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\".\",,,,,,,,,,,,,,,,,\"N\",\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",,,\"e\",\"ai\",,,\"o\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",,\"l\",,,,\"sh\",\"ss\",\"s\",\"h\",,,\"'\",,\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",,,\"e\",\"ai\",,,\"o\",\"au\",,,,,,,,,,,\"+\",,,,,\"rr\",\"rh\",,\"yy\",\"RR\",\"LL\",\"L\",\"LL\",,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"r'\",\"r`\",\"Rs\",\"Rs\",\"1/\",\"2/\",\"3/\",\"4/\",\" 1 - 1/\",\"/16\"],[,,\"N\",,,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",,,,,\"ee\",\"ai\",,,\"oo\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bb\",\"m\",\"y\",\"r\",,\"l\",\"ll\",,\"v\",\"sh\",,\"s\",\"h\",,,\"'\",,\"aa\",\"i\",\"ii\",\"u\",\"uu\",,,,,\"ee\",\"ai\",,,\"oo\",\"au\",,,,,,,,,,,,,\"khh\",\"ghh\",\"z\",\"rr\",,\"f\",,,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"N\",\"H\",,,\"G.E.O.\",,,,,,,,,,,,,\"N\",\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",,\"eN\",,\"e\",\"ai\",\"oN\",,\"o\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bh\",\"m\",\"ya\",\"r\",,\"l\",\"ll\",,\"v\",\"sh\",\"ss\",\"s\",\"h\",,,\"'\",\"'\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",\"eN\",,\"e\",\"ai\",\"oN\",,\"o\",\"au\",,,,\"AUM\",,,,,,,,,,,,,,,,\"RR\",,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],[,\"N\",\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"L\",,,\"e\",\"ai\",,,\"o\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",,\"l\",\"ll\",,,\"sh\",\"ss\",\"s\",\"h\",,,\"'\",\"'\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",,,,\"e\",\"ai\",,,\"o\",\"au\",,,,,,,,,,\"+\",\"+\",,,,,\"rr\",\"rh\",,\"yy\",\"RR\",\"LL\",,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",,,,,,,,,,,,,,,,,,,\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",,,,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",\"k\",,,,\"ng\",\"c\",,\"j\",,\"ny\",\"tt\",,,,\"nn\",\"t\",,,,\"n\",\"nnn\",\"p\",,,,\"m\",\"y\",\"r\",\"rr\",\"l\",\"ll\",\"lll\",\"v\",,\"ss\",\"s\",\"h\",,,,,\"aa\",\"i\",\"ii\",\"u\",\"uu\",,,,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",,,,,,,,,,,\"+\",,,,,,,,,,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"+10+\",\"+100+\",\"+1000+\"],[,\"N\",\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"L\",,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",\"rr\",\"l\",\"ll\",,\"v\",\"sh\",\"ss\",\"s\",\"h\",,,,,\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",,,,,,,,,\"+\",\"+\",,,,,,,,,,\"RR\",\"LL\",,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",,,,,,,,,,,,,,,,,,,\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"L\",,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",\"rr\",\"l\",\"ll\",,\"v\",\"sh\",\"ss\",\"s\",\"h\",,,,,\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",,,,,,,,,\"+\",\"+\",,,,,,,,\"lll\",,\"RR\",\"LL\",,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],[,,\"N\",\"H\",,\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"L\",,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",\"rr\",\"l\",\"ll\",\"lll\",\"v\",\"sh\",\"ss\",\"s\",\"h\",,,,,\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",,,\"e\",\"ee\",\"ai\",,\"o\",\"oo\",\"au\",,,,,,,,,,,\"+\",,,,,,,,,\"RR\",\"LL\",,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",,,,,,,,,,,,,,,,,,,\"N\",\"H\",,\"a\",\"aa\",\"ae\",\"aae\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",\"L\",\"LL\",\"e\",\"ee\",\"ai\",\"o\",\"oo\",\"au\",,,,\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"nng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"jny\",\"nyj\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"nndd\",\"t\",\"th\",\"d\",\"dh\",\"n\",,\"nd\",\"p\",\"ph\",\"b\",\"bh\",\"m\",\"mb\",\"y\",\"r\",,\"l\",,,\"v\",\"sh\",\"ss\",\"s\",\"h\",\"ll\",\"f\",,,,,,,,,\"aa\",\"ae\",\"aae\",\"i\",\"ii\",\"u\",,\"uu\",,\"R\",\"e\",\"ee\",\"ai\",\"o\",\"oo\",\"au\",\"L\",,,,,,,,,,,,,,,,,,,\"RR\",\"LL\",\" . \"],[,\"k\",\"kh\",\"kh\",\"kh\",\"kh\",\"kh\",\"ng\",\"cch\",\"ch\",\"ch\",\"ch\",\"ch\",\"y\",\"d\",\"t\",\"th\",\"th\",\"th\",\"n\",\"d\",\"t\",\"th\",\"th\",\"th\",\"n\",\"b\",\"p\",\"ph\",\"f\",\"ph\",\"f\",\"ph\",\"m\",\"y\",\"r\",\"R\",\"l\",\"L\",\"w\",\"s\",\"s\",\"s\",\"h\",\"l\",\"`\",\"h\",\"~\",\"a\",\"a\",\"aa\",\"am\",\"i\",\"ii\",\"ue\",\"uue\",\"u\",\"uu\",\"'\",,,,,\"Bh.\",\"e\",\"ae\",\"o\",\"ai\",\"ai\",\"ao\",\"+\",,,,,,,\"M\",,\" * \",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\" // \",\" /// \",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"k\",\"kh\",,\"kh\",,,\"ng\",\"ch\",,\"s\",,,\"ny\",,,,,,,\"d\",\"h\",\"th\",\"th\",,\"n\",\"b\",\"p\",\"ph\",\"f\",\"ph\",\"f\",,\"m\",\"y\",\"r\",,\"l\",,\"w\",,,\"s\",\"h\",,\"`\",,\"~\",\"a\",,\"aa\",\"am\",\"i\",\"ii\",\"y\",\"yy\",\"u\",\"uu\",,\"o\",\"l\",\"ny\",,,\"e\",\"ei\",\"o\",\"ay\",\"ai\",,\"+\",,,,,,,\"M\",,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",,,\"hn\",\"hm\"],[\"AUM\",,,,,,,,\" // \",\" * \",,\"-\",\" / \",\" / \",\" // \",\" -/ \",\" +/ \",\" X/ \",\" /XX/ \",\" /X/ \",\",\",,,,,,,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\".5\",\"1.5\",\"2.5\",\"3.5\",\"4.5\",\"5.5\",\"6.5\",\"7.5\",\"8.5\",\"-.5\",\"+\",\"*\",\"^\",\"_\",,\"~\",,\"]\",\"[[\",\"]]\",,,\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",,\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",\"p\",\"ph\",\"b\",\"bh\",\"m\",\"ts\",\"tsh\",\"dz\",\"dzh\",\"w\",\"zh\",\"z\",\"'\",\"y\",\"r\",\"l\",\"sh\",\"ssh\",\"s\",\"h\",\"a\",\"kss\",\"r\",,,,,,,\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"R\",\"RR\",\"L\",\"LL\",\"e\",\"ee\",\"o\",\"oo\",\"M\",\"H\",\"i\",\"ii\",,,,,,,,,,,,,,,\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",,\"ny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",\"p\",\"ph\",\"b\",\"bh\",\"m\",\"ts\",\"tsh\",\"dz\",\"dzh\",\"w\",\"zh\",\"z\",\"'\",\"y\",\"r\",\"l\",\"sh\",\"ss\",\"s\",\"h\",\"a\",\"kss\",\"w\",\"y\",\"r\",,\"X\",\" :X: \",\" /O/ \",\" /o/ \",\" \\\\o\\\\ \",\" (O) \"],[\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"nny\",\"tt\",\"tth\",\"dd\",\"ddh\",\"nn\",\"tt\",\"th\",\"d\",\"dh\",\"n\",\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",\"l\",\"w\",\"s\",\"h\",\"ll\",\"a\",,\"i\",\"ii\",\"u\",\"uu\",\"e\",,\"o\",\"au\",,\"aa\",\"i\",\"ii\",\"u\",\"uu\",\"e\",\"ai\",,,,\"N\",\"'\",\":\",,,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\" / \",\" // \",\"n*\",\"r*\",\"l*\",\"e*\",\"sh\",\"ss\",\"R\",\"RR\",\"L\",\"LL\",\"R\",\"RR\",\"L\",\"LL\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"A\",\"B\",\"G\",\"D\",\"E\",\"V\",\"Z\",\"T`\",\"I\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Zh\",\"R\",\"S\",\"T\",\"U\",\"P`\",\"K`\",\"G'\",\"Q\",\"Sh\",\"Ch`\",\"C`\",\"Z'\",\"C\",\"Ch\",\"X\",\"J\",\"H\",\"E\",\"Y\",\"W\",\"Xh\",\"OE\",,,,,,,,,,,\"a\",\"b\",\"g\",\"d\",\"e\",\"v\",\"z\",\"t`\",\"i\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"zh\",\"r\",\"s\",\"t\",\"u\",\"p`\",\"k`\",\"g'\",\"q\",\"sh\",\"ch`\",\"c`\",\"z'\",\"c\",\"ch\",\"x\",\"j\",\"h\",\"e\",\"y\",\"w\",\"xh\",\"oe\",\"f\",,,,,\" // \"],[\"g\",\"gg\",\"n\",\"d\",\"dd\",\"r\",\"m\",\"b\",\"bb\",\"s\",\"ss\",,\"j\",\"jj\",\"c\",\"k\",\"t\",\"p\",\"h\",\"ng\",\"nn\",\"nd\",\"nb\",\"dg\",\"rn\",\"rr\",\"rh\",\"rN\",\"mb\",\"mN\",\"bg\",\"bn\",,\"bs\",\"bsg\",\"bst\",\"bsb\",\"bss\",\"bsj\",\"bj\",\"bc\",\"bt\",\"bp\",\"bN\",\"bbN\",\"sg\",\"sn\",\"sd\",\"sr\",\"sm\",\"sb\",\"sbg\",\"sss\",\"s\",\"sj\",\"sc\",\"sk\",\"st\",\"sp\",\"sh\",,,,,\"Z\",\"g\",\"d\",\"m\",\"b\",\"s\",\"Z\",,\"j\",\"c\",\"t\",\"p\",\"N\",\"j\",,,,,\"ck\",\"ch\",,,\"pb\",\"pN\",\"hh\",\"Q\",,,,,,,,\"a\",\"ae\",\"ya\",\"yae\",\"eo\",\"e\",\"yeo\",\"ye\",\"o\",\"wa\",\"wae\",\"oe\",\"yo\",\"u\",\"weo\",\"we\",\"wi\",\"yu\",\"eu\",\"yi\",\"i\",\"a-o\",\"a-u\",\"ya-o\",\"ya-yo\",\"eo-o\",\"eo-u\",\"eo-eu\",\"yeo-o\",\"yeo-u\",\"o-eo\",\"o-e\",\"o-ye\",\"o-o\",\"o-u\",\"yo-ya\",\"yo-yae\",\"yo-yeo\",\"yo-o\",\"yo-i\",\"u-a\",\"u-ae\",\"u-eo-eu\",\"u-ye\",\"u-u\",\"yu-a\",\"yu-eo\",\"yu-e\",\"yu-yeo\",\"yu-ye\",\"yu-u\",\"yu-i\",\"eu-u\",\"eu-eu\",\"yi-u\",\"i-a\",\"i-ya\",\"i-o\",\"i-u\",\"i-eu\",\"i-U\",\"U\",\"U-eo\",\"U-u\",\"U-i\",\"UU\",,,,,,\"g\",\"gg\",\"gs\",\"n\",\"nj\",\"nh\",\"d\",\"l\",\"lg\",\"lm\",\"lb\",\"ls\",\"lt\",\"lp\",\"lh\",\"m\",\"b\",\"bs\",\"s\",\"ss\",\"ng\",\"j\",\"c\",\"k\",\"t\",\"p\",\"h\",\"gl\",\"gsg\",\"ng\",\"nd\",\"ns\",\"nZ\",\"nt\",\"dg\",\"tl\",\"lgs\",\"ln\",\"ld\",\"lth\",\"ll\",\"lmg\",\"lms\",\"lbs\",\"lbh\",\"rNp\",\"lss\",\"lZ\",\"lk\",\"lQ\",\"mg\",\"ml\",\"mb\",\"ms\",\"mss\",\"mZ\",\"mc\",\"mh\",\"mN\",\"bl\",\"bp\",\"ph\",\"pN\",\"sg\",\"sd\",\"sl\",\"sb\",\"Z\",\"g\",\"ss\",,\"kh\",\"N\",\"Ns\",\"NZ\",\"pb\",\"pN\",\"hn\",\"hl\",\"hm\",\"hb\",\"Q\"],[\"ha\",\"hu\",\"hi\",\"haa\",\"hee\",\"he\",\"ho\",,\"la\",\"lu\",\"li\",\"laa\",\"lee\",\"le\",\"lo\",\"lwa\",\"hha\",\"hhu\",\"hhi\",\"hhaa\",\"hhee\",\"hhe\",\"hho\",\"hhwa\",\"ma\",\"mu\",\"mi\",\"maa\",\"mee\",\"me\",\"mo\",\"mwa\",\"sza\",\"szu\",\"szi\",\"szaa\",\"szee\",\"sze\",\"szo\",\"szwa\",\"ra\",\"ru\",\"ri\",\"raa\",\"ree\",\"re\",\"ro\",\"rwa\",\"sa\",\"su\",\"si\",\"saa\",\"see\",\"se\",\"so\",\"swa\",\"sha\",\"shu\",\"shi\",\"shaa\",\"shee\",\"she\",\"sho\",\"shwa\",\"qa\",\"qu\",\"qi\",\"qaa\",\"qee\",\"qe\",\"qo\",,\"qwa\",,\"qwi\",\"qwaa\",\"qwee\",\"qwe\",,,\"qha\",\"qhu\",\"qhi\",\"qhaa\",\"qhee\",\"qhe\",\"qho\",,\"qhwa\",,\"qhwi\",\"qhwaa\",\"qhwee\",\"qhwe\",,,\"ba\",\"bu\",\"bi\",\"baa\",\"bee\",\"be\",\"bo\",\"bwa\",\"va\",\"vu\",\"vi\",\"vaa\",\"vee\",\"ve\",\"vo\",\"vwa\",\"ta\",\"tu\",\"ti\",\"taa\",\"tee\",\"te\",\"to\",\"twa\",\"ca\",\"cu\",\"ci\",\"caa\",\"cee\",\"ce\",\"co\",\"cwa\",\"xa\",\"xu\",\"xi\",\"xaa\",\"xee\",\"xe\",\"xo\",,\"xwa\",,\"xwi\",\"xwaa\",\"xwee\",\"xwe\",,,\"na\",\"nu\",\"ni\",\"naa\",\"nee\",\"ne\",\"no\",\"nwa\",\"nya\",\"nyu\",\"nyi\",\"nyaa\",\"nyee\",\"nye\",\"nyo\",\"nywa\",\"'a\",\"'u\",,\"'aa\",\"'ee\",\"'e\",\"'o\",\"'wa\",\"ka\",\"ku\",\"ki\",\"kaa\",\"kee\",\"ke\",\"ko\",,\"kwa\",,\"kwi\",\"kwaa\",\"kwee\",\"kwe\",,,\"kxa\",\"kxu\",\"kxi\",\"kxaa\",\"kxee\",\"kxe\",\"kxo\",,\"kxwa\",,\"kxwi\",\"kxwaa\",\"kxwee\",\"kxwe\",,,\"wa\",\"wu\",\"wi\",\"waa\",\"wee\",\"we\",\"wo\",,\"`a\",\"`u\",\"`i\",\"`aa\",\"`ee\",\"`e\",\"`o\",,\"za\",\"zu\",\"zi\",\"zaa\",\"zee\",\"ze\",\"zo\",\"zwa\",\"zha\",\"zhu\",\"zhi\",\"zhaa\",\"zhee\",\"zhe\",\"zho\",\"zhwa\",\"ya\",\"yu\",\"yi\",\"yaa\",\"yee\",\"ye\",\"yo\",,\"da\",\"du\",\"di\",\"daa\",\"dee\",\"de\",\"do\",\"dwa\",\"dda\",\"ddu\",\"ddi\",\"ddaa\",\"ddee\",\"dde\",\"ddo\",\"ddwa\"],[\"ja\",\"ju\",\"ji\",\"jaa\",\"jee\",\"je\",\"jo\",\"jwa\",\"ga\",\"gu\",\"gi\",\"gaa\",\"gee\",\"ge\",\"go\",,\"gwa\",,\"gwi\",\"gwaa\",\"gwee\",\"gwe\",,,\"gga\",\"ggu\",\"ggi\",\"ggaa\",\"ggee\",\"gge\",\"ggo\",,\"tha\",\"thu\",\"thi\",\"thaa\",\"thee\",\"the\",\"tho\",\"thwa\",\"cha\",\"chu\",\"chi\",\"chaa\",\"chee\",\"che\",\"cho\",\"chwa\",\"pha\",\"phu\",\"phi\",\"phaa\",\"phee\",\"phe\",\"pho\",\"phwa\",\"tsa\",\"tsu\",\"tsi\",\"tsaa\",\"tsee\",\"tse\",\"tso\",\"tswa\",\"tza\",\"tzu\",\"tzi\",\"tzaa\",\"tzee\",\"tze\",\"tzo\",,\"fa\",\"fu\",\"fi\",\"faa\",\"fee\",\"fe\",\"fo\",\"fwa\",\"pa\",\"pu\",\"pi\",\"paa\",\"pee\",\"pe\",\"po\",\"pwa\",\"rya\",\"mya\",\"fya\",,,,,,,\" \",\".\",\",\",\";\",\":\",\":: \",\"?\",\"//\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10+\",\"20+\",\"30+\",\"40+\",\"50+\",\"60+\",\"70+\",\"80+\",\"90+\",\"100+\",\"10,000+\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"a\",\"e\",\"i\",\"o\",\"u\",\"v\",\"ga\",\"ka\",\"ge\",\"gi\",\"go\",\"gu\",\"gv\",\"ha\",\"he\",\"hi\",\"ho\",\"hu\",\"hv\",\"la\",\"le\",\"li\",\"lo\",\"lu\",\"lv\",\"ma\",\"me\",\"mi\",\"mo\",\"mu\",\"na\",\"hna\",\"nah\",\"ne\",\"ni\",\"no\",\"nu\",\"nv\",\"qua\",\"que\",\"qui\",\"quo\",\"quu\",\"quv\",\"sa\",\"s\",\"se\",\"si\",\"so\",\"su\",\"sv\",\"da\",\"ta\",\"de\",\"te\",\"di\",\"ti\",\"do\",\"du\",\"dv\",\"dla\",\"tla\",\"tle\",\"tli\",\"tlo\",\"tlu\",\"tlv\",\"tsa\",\"tse\",\"tsi\",\"tso\",\"tsu\",\"tsv\",\"wa\",\"we\",\"wi\",\"wo\",\"wu\",\"wv\",\"ya\",\"ye\",\"yi\",\"yo\",\"yu\",\"yv\"],[,\"ai\",\"aai\",\"i\",\"ii\",\"u\",\"uu\",\"oo\",\"ee\",\"i\",\"a\",\"aa\",\"we\",\"we\",\"wi\",\"wi\",\"wii\",\"wii\",\"wo\",\"wo\",\"woo\",\"woo\",\"woo\",\"wa\",\"wa\",\"waa\",\"waa\",\"waa\",\"ai\",\"w\",\"'\",\"t\",\"k\",\"sh\",\"s\",\"n\",\"w\",\"n\",,\"w\",\"c\",\"?\",\"l\",\"en\",\"in\",\"on\",\"an\",\"pai\",\"paai\",\"pi\",\"pii\",\"pu\",\"puu\",\"poo\",\"hee\",\"hi\",\"pa\",\"paa\",\"pwe\",\"pwe\",\"pwi\",\"pwi\",\"pwii\",\"pwii\",\"pwo\",\"pwo\",\"pwoo\",\"pwoo\",\"pwa\",\"pwa\",\"pwaa\",\"pwaa\",\"pwaa\",\"p\",\"p\",\"h\",\"tai\",\"taai\",\"ti\",\"tii\",\"tu\",\"tuu\",\"too\",\"dee\",\"di\",\"ta\",\"taa\",\"twe\",\"twe\",\"twi\",\"twi\",\"twii\",\"twii\",\"two\",\"two\",\"twoo\",\"twoo\",\"twa\",\"twa\",\"twaa\",\"twaa\",\"twaa\",\"t\",\"tte\",\"tti\",\"tto\",\"tta\",\"kai\",\"kaai\",\"ki\",\"kii\",\"ku\",\"kuu\",\"koo\",\"ka\",\"kaa\",\"kwe\",\"kwe\",\"kwi\",\"kwi\",\"kwii\",\"kwii\",\"kwo\",\"kwo\",\"kwoo\",\"kwoo\",\"kwa\",\"kwa\",\"kwaa\",\"kwaa\",\"kwaa\",\"k\",\"kw\",\"keh\",\"kih\",\"koh\",\"kah\",\"gai\",\"caai\",\"gi\",\"gii\",\"gu\",\"guu\",\"coo\",\"ga\",\"gaa\",\"cwe\",\"cwe\",\"cwi\",\"cwi\",\"cwii\",\"cwii\",\"cwo\",\"cwo\",\"cwoo\",\"cwoo\",\"cwa\",\"cwa\",\"cwaa\",\"cwaa\",\"cwaa\",\"g\",\"th\",\"mai\",\"maai\",\"mi\",\"mii\",\"mu\",\"muu\",\"moo\",\"ma\",\"maa\",\"mwe\",\"mwe\",\"mwi\",\"mwi\",\"mwii\",\"mwii\",\"mwo\",\"mwo\",\"mwoo\",\"mwoo\",\"mwa\",\"mwa\",\"mwaa\",\"mwaa\",\"mwaa\",\"m\",\"m\",\"mh\",\"m\",\"m\",\"nai\",\"naai\",\"ni\",\"nii\",\"nu\",\"nuu\",\"noo\",\"na\",\"naa\",\"nwe\",\"nwe\",\"nwa\",\"nwa\",\"nwaa\",\"nwaa\",\"nwaa\",\"n\",\"ng\",\"nh\",\"lai\",\"laai\",\"li\",\"lii\",\"lu\",\"luu\",\"loo\",\"la\",\"laa\",\"lwe\",\"lwe\",\"lwi\",\"lwi\",\"lwii\",\"lwii\",\"lwo\",\"lwo\",\"lwoo\",\"lwoo\",\"lwa\",\"lwa\",\"lwaa\",\"lwaa\",\"l\",\"l\",\"l\",\"sai\",\"saai\",\"si\",\"sii\",\"su\",\"suu\",\"soo\",\"sa\",\"saa\",\"swe\",\"swe\",\"swi\",\"swi\",\"swii\",\"swii\",\"swo\",\"swo\",\"swoo\",\"swoo\"],[\"swa\",\"swa\",\"swaa\",\"swaa\",\"swaa\",\"s\",\"s\",\"sw\",\"s\",\"sk\",\"skw\",\"sW\",\"spwa\",\"stwa\",\"skwa\",\"scwa\",\"she\",\"shi\",\"shii\",\"sho\",\"shoo\",\"sha\",\"shaa\",\"shwe\",\"shwe\",\"shwi\",\"shwi\",\"shwii\",\"shwii\",\"shwo\",\"shwo\",\"shwoo\",\"shwoo\",\"shwa\",\"shwa\",\"shwaa\",\"shwaa\",\"sh\",\"jai\",\"yaai\",\"ji\",\"jii\",\"ju\",\"juu\",\"yoo\",\"ja\",\"jaa\",\"ywe\",\"ywe\",\"ywi\",\"ywi\",\"ywii\",\"ywii\",\"ywo\",\"ywo\",\"ywoo\",\"ywoo\",\"ywa\",\"ywa\",\"ywaa\",\"ywaa\",\"ywaa\",\"j\",\"y\",\"y\",\"yi\",\"re\",\"rai\",\"le\",\"raai\",\"ri\",\"rii\",\"ru\",\"ruu\",\"lo\",\"ra\",\"raa\",\"la\",\"rwaa\",\"rwaa\",\"r\",\"r\",\"r\",\"vai\",\"faai\",\"vi\",\"vii\",\"vu\",\"vuu\",\"va\",\"vaa\",\"fwaa\",\"fwaa\",\"v\",\"the\",\"the\",\"thi\",\"thi\",\"thii\",\"thii\",\"tho\",\"thoo\",\"tha\",\"thaa\",\"thwaa\",\"thwaa\",\"th\",\"tthe\",\"tthi\",\"ttho\",\"ttha\",\"tth\",\"tye\",\"tyi\",\"tyo\",\"tya\",\"he\",\"hi\",\"hii\",\"ho\",\"hoo\",\"ha\",\"haa\",\"h\",\"h\",\"hk\",\"qaai\",\"qi\",\"qii\",\"qu\",\"quu\",\"qa\",\"qaa\",\"q\",\"tlhe\",\"tlhi\",\"tlho\",\"tlha\",\"re\",\"ri\",\"ro\",\"ra\",\"ngaai\",\"ngi\",\"ngii\",\"ngu\",\"nguu\",\"nga\",\"ngaa\",\"ng\",\"nng\",\"she\",\"shi\",\"sho\",\"sha\",\"the\",\"thi\",\"tho\",\"tha\",\"th\",\"lhi\",\"lhii\",\"lho\",\"lhoo\",\"lha\",\"lhaa\",\"lh\",\"the\",\"thi\",\"thii\",\"tho\",\"thoo\",\"tha\",\"thaa\",\"th\",\"b\",\"e\",\"i\",\"o\",\"a\",\"we\",\"wi\",\"wo\",\"wa\",\"ne\",\"ni\",\"no\",\"na\",\"ke\",\"ki\",\"ko\",\"ka\",\"he\",\"hi\",\"ho\",\"ha\",\"ghu\",\"gho\",\"ghe\",\"ghee\",\"ghi\",\"gha\",\"ru\",\"ro\",\"re\",\"ree\",\"ri\",\"ra\",\"wu\",\"wo\",\"we\",\"wee\",\"wi\",\"wa\",\"hwu\",\"hwo\",\"hwe\",\"hwee\",\"hwi\",\"hwa\",\"thu\",\"tho\",\"the\",\"thee\",\"thi\",\"tha\",\"ttu\",\"tto\",\"tte\",\"ttee\",\"tti\",\"tta\",\"pu\",\"po\",\"pe\",\"pee\",\"pi\",\"pa\",\"p\",\"gu\",\"go\",\"ge\",\"gee\",\"gi\",\"ga\",\"khu\",\"kho\",\"khe\",\"khee\",\"khi\",\"kha\",\"kku\",\"kko\",\"kke\",\"kkee\",\"kki\"],[\"kka\",\"kk\",\"nu\",\"no\",\"ne\",\"nee\",\"ni\",\"na\",\"mu\",\"mo\",\"me\",\"mee\",\"mi\",\"ma\",\"yu\",\"yo\",\"ye\",\"yee\",\"yi\",\"ya\",\"ju\",\"ju\",\"jo\",\"je\",\"jee\",\"ji\",\"ji\",\"ja\",\"jju\",\"jjo\",\"jje\",\"jjee\",\"jji\",\"jja\",\"lu\",\"lo\",\"le\",\"lee\",\"li\",\"la\",\"dlu\",\"dlo\",\"dle\",\"dlee\",\"dli\",\"dla\",\"lhu\",\"lho\",\"lhe\",\"lhee\",\"lhi\",\"lha\",\"tlhu\",\"tlho\",\"tlhe\",\"tlhee\",\"tlhi\",\"tlha\",\"tlu\",\"tlo\",\"tle\",\"tlee\",\"tli\",\"tla\",\"zu\",\"zo\",\"ze\",\"zee\",\"zi\",\"za\",\"z\",\"z\",\"dzu\",\"dzo\",\"dze\",\"dzee\",\"dzi\",\"dza\",\"su\",\"so\",\"se\",\"see\",\"si\",\"sa\",\"shu\",\"sho\",\"she\",\"shee\",\"shi\",\"sha\",\"sh\",\"tsu\",\"tso\",\"tse\",\"tsee\",\"tsi\",\"tsa\",\"chu\",\"cho\",\"che\",\"chee\",\"chi\",\"cha\",\"ttsu\",\"ttso\",\"ttse\",\"ttsee\",\"ttsi\",\"ttsa\",\"X\",\".\",\"qai\",\"ngai\",\"nngi\",\"nngii\",\"nngo\",\"nngoo\",\"nnga\",\"nngaa\",,,,,,,,,,\" \",\"b\",\"l\",\"f\",\"s\",\"n\",\"h\",\"d\",\"t\",\"c\",\"q\",\"m\",\"g\",\"ng\",\"z\",\"r\",\"a\",\"o\",\"u\",\"e\",\"i\",\"ch\",\"th\",\"ph\",\"p\",\"x\",\"p\",\"<\",\">\",,,,\"f\",\"v\",\"u\",\"yr\",\"y\",\"w\",\"th\",\"th\",\"a\",\"o\",\"ac\",\"ae\",\"o\",\"o\",\"o\",\"oe\",\"on\",\"r\",\"k\",\"c\",\"k\",\"g\",\"ng\",\"g\",\"g\",\"w\",\"h\",\"h\",\"h\",\"h\",\"n\",\"n\",\"n\",\"i\",\"e\",\"j\",\"g\",\"ae\",\"a\",\"eo\",\"p\",\"z\",\"s\",\"s\",\"s\",\"c\",\"z\",\"t\",\"t\",\"d\",\"b\",\"b\",\"p\",\"p\",\"e\",\"m\",\"m\",\"m\",\"l\",\"l\",\"ng\",\"ng\",\"d\",\"o\",\"ear\",\"ior\",\"qu\",\"qu\",\"qu\",\"s\",\"yr\",\"yr\",\"yr\",\"q\",\"x\",\".\",\":\",\"+\",\"17\",\"18\",\"19\"],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"k\",\"kh\",\"g\",\"gh\",\"ng\",\"c\",\"ch\",\"j\",\"jh\",\"ny\",\"t\",\"tth\",\"d\",\"ddh\",\"nn\",\"t\",\"th\",\"d\",\"dh\",\"n\",\"p\",\"ph\",\"b\",\"bh\",\"m\",\"y\",\"r\",\"l\",\"v\",\"sh\",\"ss\",\"s\",\"h\",\"l\",\"q\",\"a\",\"aa\",\"i\",\"ii\",\"u\",\"uk\",\"uu\",\"uuv\",\"ry\",\"ryy\",\"ly\",\"lyy\",\"e\",\"ai\",\"oo\",\"oo\",\"au\",\"a\",\"aa\",\"aa\",\"i\",\"ii\",\"y\",\"yy\",\"u\",\"uu\",\"ua\",\"oe\",\"ya\",\"ie\",\"e\",\"ae\",\"ai\",\"oo\",\"au\",\"M\",\"H\",\"a`\",,,,\"r\",,\"!\",,,,,,\".\",\" // \",\":\",\"+\",\"++\",\" * \",\" /// \",\"KR\",\"'\",,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],[\" @ \",\" ... \",\",\",\". \",\": \",\" // \",,\"-\",\",\",\". \",,,,,,,\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",,,,,,,\"a\",\"e\",\"i\",\"o\",\"u\",\"O\",\"U\",\"ee\",\"n\",\"ng\",\"b\",\"p\",\"q\",\"g\",\"m\",\"l\",\"s\",\"sh\",\"t\",\"d\",\"ch\",\"j\",\"y\",\"r\",\"w\",\"f\",\"k\",\"kha\",\"ts\",\"z\",\"h\",\"zr\",\"lh\",\"zh\",\"ch\",\"-\",\"e\",\"i\",\"o\",\"u\",\"O\",\"U\",\"ng\",\"b\",\"p\",\"q\",\"g\",\"m\",\"t\",\"d\",\"ch\",\"j\",\"ts\",\"y\",\"w\",\"k\",\"g\",\"h\",\"jy\",\"ny\",\"dz\",\"e\",\"i\",\"iy\",\"U\",\"u\",\"ng\",\"k\",\"g\",\"h\",\"p\",\"sh\",\"t\",\"d\",\"j\",\"f\",\"g\",\"h\",\"ts\",\"z\",\"r\",\"ch\",\"zh\",\"i\",\"k\",\"r\",\"f\",\"zh\",,,,,,,,,,\"H\",\"X\",\"W\",\"M\",\" 3 \",\" 333 \",\"a\",\"i\",\"k\",\"ng\",\"c\",\"tt\",\"tth\",\"dd\",\"nn\",\"t\",\"d\",\"p\",\"ph\",\"ss\",\"zh\",\"z\",\"a\",\"t\",\"zh\",\"gh\",\"ng\",\"c\",\"jh\",\"tta\",\"ddh\",\"t\",\"dh\",\"ss\",\"cy\",\"zh\",\"z\",\"u\",\"y\",\"bh\",\"'\"],[],[],[],[],[],[\"A\",\"a\",\"B\",\"b\",\"B\",\"b\",\"B\",\"b\",\"C\",\"c\",\"D\",\"d\",\"D\",\"d\",\"D\",\"d\",\"D\",\"d\",\"D\",\"d\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"F\",\"f\",\"G\",\"g\",\"H\",\"h\",\"H\",\"h\",\"H\",\"h\",\"H\",\"h\",\"H\",\"h\",\"I\",\"i\",\"I\",\"i\",\"K\",\"k\",\"K\",\"k\",\"K\",\"k\",\"L\",\"l\",\"L\",\"l\",\"L\",\"l\",\"L\",\"l\",\"M\",\"m\",\"M\",\"m\",\"M\",\"m\",\"N\",\"n\",\"N\",\"n\",\"N\",\"n\",\"N\",\"n\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"P\",\"p\",\"P\",\"p\",\"R\",\"r\",\"R\",\"r\",\"R\",\"r\",\"R\",\"r\",\"S\",\"s\",\"S\",\"s\",\"S\",\"s\",\"S\",\"s\",\"S\",\"s\",\"T\",\"t\",\"T\",\"t\",\"T\",\"t\",\"T\",\"t\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"V\",\"v\",\"V\",\"v\",\"W\",\"w\",\"W\",\"w\",\"W\",\"w\",\"W\",\"w\",\"W\",\"w\",\"X\",\"x\",\"X\",\"x\",\"Y\",\"y\",\"Z\",\"z\",\"Z\",\"z\",\"Z\",\"z\",\"h\",\"t\",\"w\",\"y\",\"a\",\"S\",,,,,\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"A\",\"a\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"E\",\"e\",\"I\",\"i\",\"I\",\"i\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"O\",\"o\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"U\",\"u\",\"Y\",\"y\",\"Y\",\"y\",\"Y\",\"y\",\"Y\",\"y\"],[\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",,,\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",,,\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",\"i\",\"i\",\"i\",\"i\",\"i\",\"i\",\"i\",\"i\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",,,\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",,,\"u\",\"u\",\"u\",\"u\",\"u\",\"u\",\"u\",\"u\",,\"U\",,\"U\",,\"U\",,\"U\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",\"a\",\"a\",\"e\",\"e\",\"e\",\"e\",\"i\",\"i\",\"o\",\"o\",\"u\",\"u\",\"o\",\"o\",,,\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"a\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",\"e\",\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",\"E\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",\"o\",\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",\"O\",\"a\",\"a\",\"a\",\"a\",\"a\",,\"a\",\"a\",\"A\",\"A\",\"A\",\"A\",\"A\",\"'\",\"i\",\"'\",\"~\",'\"~',\"e\",\"e\",\"e\",,\"e\",\"e\",\"E\",\"E\",\"E\",\"E\",\"E\",\"'`\",\"''\",\"'~\",\"i\",\"i\",\"i\",\"i\",,,\"i\",\"i\",\"I\",\"I\",\"I\",\"I\",,\"`'\",\"`'\",\"`~\",\"u\",\"u\",\"u\",\"u\",\"R\",\"R\",\"u\",\"u\",\"U\",\"U\",\"U\",\"U\",\"R\",'\"`',\"\\\"'\",\"`\",,,\"o\",\"o\",\"o\",,\"o\",\"o\",\"O\",\"O\",\"O\",\"O\",\"O\",\"'\",\"`\"],[\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",,,,,\"-\",\"-\",\"-\",\"-\",\"--\",\"--\",\"||\",\"_\",\"'\",\"'\",\",\",\"'\",'\"','\"',\",,\",'\"',\"+\",\"++\",\"*\",\"*>\",\".\",\"..\",\"...\",\".\",\"\\n\",\"\\n\\n\",,,,,,\" \",\"%0\",\"%00\",\"'\",\"''\",\"'''\",\"`\",\"``\",\"```\",\"^\",\"<\",\">\",\"*\",\"!!\",\"!?\",\"-\",\"_\",\"-\",\"^\",\"***\",\"--\",\"/\",\"-[\",\"]-\",,\"?!\",\"!?\",\"7\",\"PP\",\"(]\",\"[)\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"0\",,,,\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"+\",\"-\",\"=\",\"(\",\")\",\"n\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"+\",\"-\",\"=\",\"(\",\")\",,,,,,,,,,,,,,,,,,\"ECU\",\"CL\",\"Cr\",\"FF\",\"L\",\"mil\",\"N\",\"Pts\",\"Rs\",\"W\",\"NS\",\"D\",\"EU\",\"K\",\"T\",\"Dr\"],[,,\"C\",,,,,,,,\"g\",\"H\",\"H\",\"H\",\"h\",,\"I\",\"I\",\"L\",\"l\",\"lb\",\"N\",\"no\",\"(p)\",\"P\",\"P\",\"Q\",\"R\",\"R\",\"R\",,,\"(sm)\",\"(tel)\",\"(tm)\",,\"Z\",,,\"mho\",\"Z\",,,,\"B\",\"C\",\"e\",\"e\",,\"F\",,\"M\",\"o\",,,,,\"i\",\"Q\",\"(fax)\",\"pi\",,,\"Pi\",,\"G\",\"L\",\"L\",\"Y\",\"D\",\"d\",\"e\",\"i\",\"j\",,,\"per\",,,,,,,\" 1/3 \",\" 2/3 \",\" 1/5 \",\" 2/5 \",\" 3/5 \",\" 4/5 \",\" 1/6 \",\" 5/6 \",\" 1/8 \",\" 3/8 \",\" 5/8 \",\" 7/8 \",\" 1/\",\"I\",\"II\",\"III\",\"IV\",\"V\",\"VI\",\"VII\",\"VIII\",\"IX\",\"X\",\"XI\",\"XII\",\"L\",\"C\",\"D\",\"M\",\"i\",\"ii\",\"iii\",\"iv\",\"v\",\"vi\",\"vii\",\"viii\",\"ix\",\"x\",\"xi\",\"xii\",\"l\",\"c\",\"d\",\"m\",\"(D\",\"D)\",\"((|))\",\")\",,,,,,,,,,,,,\"-\",\"|\",\"-\",\"|\",\"-\",\"|\",\"\\\\\",\"/\",\"\\\\\",\"/\",\"-\",\"-\",\"~\",\"~\",\"-\",\"|\",\"-\",\"|\",\"-\",\"-\",\"-\",\"|\",\"-\",\"|\",\"|\",\"-\",\"-\",\"-\",\"-\",\"-\",\"-\",\"|\",\"|\",\"|\",\"|\",\"|\",\"|\",\"|\",\"^\",\"V\",\"\\\\\",\"=\",\"V\",\"^\",\"-\",\"-\",\"|\",\"|\",\"-\",\"-\",\"|\",\"|\",\"=\",\"|\",\"=\",\"=\",\"|\",\"=\",\"|\",\"=\",\"=\",\"=\",\"=\",\"=\",\"=\",\"|\",\"=\",\"|\",\"=\",\"|\",\"\\\\\",\"/\",\"\\\\\",\"/\",\"=\",\"=\",\"~\",\"~\",\"|\",\"|\",\"-\",\"|\",\"-\",\"|\",\"-\",\"-\",\"-\",\"|\",\"-\",\"|\",\"|\",\"|\",\"|\",\"|\",\"|\",\"|\",\"-\",\"\\\\\",\"\\\\\",\"|\"],[],[],[],[\"-\",\"-\",\"|\",\"|\",\"-\",\"-\",\"|\",\"|\",\"-\",\"-\",\"|\",\"|\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"-\",\"-\",\"|\",\"|\",\"-\",\"|\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"+\",\"/\",\"\\\\\",\"X\",\"-\",\"|\",\"-\",\"|\",\"-\",\"|\",\"-\",\"|\",\"-\",\"|\",\"-\",\"|\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"-\",\"|\",,,,,,,,,,,\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"^\",\"^\",\"^\",\"^\",\">\",\">\",\">\",\">\",\">\",\">\",\"V\",\"V\",\"V\",\"V\",\"<\",\"<\",\"<\",\"<\",\"<\",\"<\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"*\",\"#\",\"#\",\"#\",\"#\",\"#\",\"^\",\"^\",\"^\",\"O\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\",\"#\"],[],[],[\" \",\"a\",\"1\",\"b\",\"'\",\"k\",\"2\",\"l\",\"@\",\"c\",\"i\",\"f\",\"/\",\"m\",\"s\",\"p\",'\"',\"e\",\"3\",\"h\",\"9\",\"o\",\"6\",\"r\",\"^\",\"d\",\"j\",\"g\",\">\",\"n\",\"t\",\"q\",\",\",\"*\",\"5\",\"<\",\"-\",\"u\",\"8\",\"v\",\".\",\"%\",\"[\",\"$\",\"+\",\"x\",\"!\",\"&\",\";\",\":\",\"4\",\"\\\\\",\"0\",\"z\",\"7\",\"(\",\"_\",\"?\",\"w\",\"]\",\"#\",\"y\",\")\",\"=\",\"[d7]\",\"[d17]\",\"[d27]\",\"[d127]\",\"[d37]\",\"[d137]\",\"[d237]\",\"[d1237]\",\"[d47]\",\"[d147]\",\"[d247]\",\"[d1247]\",\"[d347]\",\"[d1347]\",\"[d2347]\",\"[d12347]\",\"[d57]\",\"[d157]\",\"[d257]\",\"[d1257]\",\"[d357]\",\"[d1357]\",\"[d2357]\",\"[d12357]\",\"[d457]\",\"[d1457]\",\"[d2457]\",\"[d12457]\",\"[d3457]\",\"[d13457]\",\"[d23457]\",\"[d123457]\",\"[d67]\",\"[d167]\",\"[d267]\",\"[d1267]\",\"[d367]\",\"[d1367]\",\"[d2367]\",\"[d12367]\",\"[d467]\",\"[d1467]\",\"[d2467]\",\"[d12467]\",\"[d3467]\",\"[d13467]\",\"[d23467]\",\"[d123467]\",\"[d567]\",\"[d1567]\",\"[d2567]\",\"[d12567]\",\"[d3567]\",\"[d13567]\",\"[d23567]\",\"[d123567]\",\"[d4567]\",\"[d14567]\",\"[d24567]\",\"[d124567]\",\"[d34567]\",\"[d134567]\",\"[d234567]\",\"[d1234567]\",\"[d8]\",\"[d18]\",\"[d28]\",\"[d128]\",\"[d38]\",\"[d138]\",\"[d238]\",\"[d1238]\",\"[d48]\",\"[d148]\",\"[d248]\",\"[d1248]\",\"[d348]\",\"[d1348]\",\"[d2348]\",\"[d12348]\",\"[d58]\",\"[d158]\",\"[d258]\",\"[d1258]\",\"[d358]\",\"[d1358]\",\"[d2358]\",\"[d12358]\",\"[d458]\",\"[d1458]\",\"[d2458]\",\"[d12458]\",\"[d3458]\",\"[d13458]\",\"[d23458]\",\"[d123458]\",\"[d68]\",\"[d168]\",\"[d268]\",\"[d1268]\",\"[d368]\",\"[d1368]\",\"[d2368]\",\"[d12368]\",\"[d468]\",\"[d1468]\",\"[d2468]\",\"[d12468]\",\"[d3468]\",\"[d13468]\",\"[d23468]\",\"[d123468]\",\"[d568]\",\"[d1568]\",\"[d2568]\",\"[d12568]\",\"[d3568]\",\"[d13568]\",\"[d23568]\",\"[d123568]\",\"[d4568]\",\"[d14568]\",\"[d24568]\",\"[d124568]\",\"[d34568]\",\"[d134568]\",\"[d234568]\",\"[d1234568]\",\"[d78]\",\"[d178]\",\"[d278]\",\"[d1278]\",\"[d378]\",\"[d1378]\",\"[d2378]\",\"[d12378]\",\"[d478]\",\"[d1478]\",\"[d2478]\",\"[d12478]\",\"[d3478]\",\"[d13478]\",\"[d23478]\",\"[d123478]\",\"[d578]\",\"[d1578]\",\"[d2578]\",\"[d12578]\",\"[d3578]\",\"[d13578]\",\"[d23578]\",\"[d123578]\",\"[d4578]\",\"[d14578]\",\"[d24578]\",\"[d124578]\",\"[d34578]\",\"[d134578]\",\"[d234578]\",\"[d1234578]\",\"[d678]\",\"[d1678]\",\"[d2678]\",\"[d12678]\",\"[d3678]\",\"[d13678]\",\"[d23678]\",\"[d123678]\",\"[d4678]\",\"[d14678]\",\"[d24678]\",\"[d124678]\",\"[d34678]\",\"[d134678]\",\"[d234678]\",\"[d1234678]\",\"[d5678]\",\"[d15678]\",\"[d25678]\",\"[d125678]\",\"[d35678]\",\"[d135678]\",\"[d235678]\",\"[d1235678]\",\"[d45678]\",\"[d145678]\",\"[d245678]\",\"[d1245678]\",\"[d345678]\",\"[d1345678]\",\"[d2345678]\",\"[d12345678]\"],[],[],[],[],[],[],[],[\" \",\",\",\". \",'\"',\"[JIS]\",'\"',\"/\",\"0\",\"<\",\"> \",\"<<\",\">> \",\"[\",\"] \",\"{\",\"} \",\"[(\",\")] \",\"@\",\"X \",\"[\",\"] \",\"[[\",\"]] \",\"((\",\")) \",\"[[\",\"]] \",\"~ \",\"``\",\"''\",\",,\",\"@\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",,,,,,,\"~\",\"+\",\"+\",\"+\",\"+\",,\"@\",\" // \",\"+10+\",\"+20+\",\"+30+\",,,,,,,\"a\",\"a\",\"i\",\"i\",\"u\",\"u\",\"e\",\"e\",\"o\",\"o\",\"ka\",\"ga\",\"ki\",\"gi\",\"ku\",\"gu\",\"ke\",\"ge\",\"ko\",\"go\",\"sa\",\"za\",\"si\",\"zi\",\"su\",\"zu\",\"se\",\"ze\",\"so\",\"zo\",\"ta\",\"da\",\"ti\",\"di\",\"tu\",\"tu\",\"du\",\"te\",\"de\",\"to\",\"do\",\"na\",\"ni\",\"nu\",\"ne\",\"no\",\"ha\",\"ba\",\"pa\",\"hi\",\"bi\",\"pi\",\"hu\",\"bu\",\"pu\",\"he\",\"be\",\"pe\",\"ho\",\"bo\",\"po\",\"ma\",\"mi\",\"mu\",\"me\",\"mo\",\"ya\",\"ya\",\"yu\",\"yu\",\"yo\",\"yo\",\"ra\",\"ri\",\"ru\",\"re\",\"ro\",\"wa\",\"wa\",\"wi\",\"we\",\"wo\",\"n\",\"vu\",,,,,,,,,'\"','\"',,,\"a\",\"a\",\"i\",\"i\",\"u\",\"u\",\"e\",\"e\",\"o\",\"o\",\"ka\",\"ga\",\"ki\",\"gi\",\"ku\",\"gu\",\"ke\",\"ge\",\"ko\",\"go\",\"sa\",\"za\",\"si\",\"zi\",\"su\",\"zu\",\"se\",\"ze\",\"so\",\"zo\",\"ta\",\"da\",\"ti\",\"di\",\"tu\",\"tu\",\"du\",\"te\",\"de\",\"to\",\"do\",\"na\",\"ni\",\"nu\",\"ne\",\"no\",\"ha\",\"ba\",\"pa\",\"hi\",\"bi\",\"pi\",\"hu\",\"bu\",\"pu\",\"he\",\"be\",\"pe\",\"ho\",\"bo\",\"po\",\"ma\",\"mi\",\"mu\",\"me\",\"mo\",\"ya\",\"ya\",\"yu\",\"yu\",\"yo\",\"yo\",\"ra\",\"ri\",\"ru\",\"re\",\"ro\",\"wa\",\"wa\",\"wi\",\"we\",\"wo\",\"n\",\"vu\",\"ka\",\"ke\",\"va\",\"vi\",\"ve\",\"vo\",,,'\"','\"'],[,,,,,\"B\",\"P\",\"M\",\"F\",\"D\",\"T\",\"N\",\"L\",\"G\",\"K\",\"H\",\"J\",\"Q\",\"X\",\"ZH\",\"CH\",\"SH\",\"R\",\"Z\",\"C\",\"S\",\"A\",\"O\",\"E\",\"EH\",\"AI\",\"EI\",\"AU\",\"OU\",\"AN\",\"EN\",\"ANG\",\"ENG\",\"ER\",\"I\",\"U\",\"IU\",\"V\",\"NG\",\"GN\",,,,,\"g\",\"gg\",\"gs\",\"n\",\"nj\",\"nh\",\"d\",\"dd\",\"r\",\"lg\",\"lm\",\"lb\",\"ls\",\"lt\",\"lp\",\"rh\",\"m\",\"b\",\"bb\",\"bs\",\"s\",\"ss\",,\"j\",\"jj\",\"c\",\"k\",\"t\",\"p\",\"h\",\"a\",\"ae\",\"ya\",\"yae\",\"eo\",\"e\",\"yeo\",\"ye\",\"o\",\"wa\",\"wae\",\"oe\",\"yo\",\"u\",\"weo\",\"we\",\"wi\",\"yu\",\"eu\",\"yi\",\"i\",,\"nn\",\"nd\",\"ns\",\"nZ\",\"lgs\",\"ld\",\"lbs\",\"lZ\",\"lQ\",\"mb\",\"ms\",\"mZ\",\"mN\",\"bg\",,\"bsg\",\"bst\",\"bj\",\"bt\",\"bN\",\"bbN\",\"sg\",\"sn\",\"sd\",\"sb\",\"sj\",\"Z\",,\"N\",\"Ns\",\"NZ\",\"pN\",\"hh\",\"Q\",\"yo-ya\",\"yo-yae\",\"yo-i\",\"yu-yeo\",\"yu-ye\",\"yu-i\",\"U\",\"U-i\",,,,,,,,,,,,,,,,,,\"BU\",\"ZI\",\"JI\",\"GU\",\"EE\",\"ENN\",\"OO\",\"ONN\",\"IR\",\"ANN\",\"INN\",\"UNN\",\"IM\",\"NGG\",\"AINN\",\"AUNN\",\"AM\",\"OM\",\"ONG\",\"INNN\",\"P\",\"T\",\"K\",\"H\"],[\"(g)\",\"(n)\",\"(d)\",\"(r)\",\"(m)\",\"(b)\",\"(s)\",\"()\",\"(j)\",\"(c)\",\"(k)\",\"(t)\",\"(p)\",\"(h)\",\"(ga)\",\"(na)\",\"(da)\",\"(ra)\",\"(ma)\",\"(ba)\",\"(sa)\",\"(a)\",\"(ja)\",\"(ca)\",\"(ka)\",\"(ta)\",\"(pa)\",\"(ha)\",\"(ju)\",,,,\"(1) \",\"(2) \",\"(3) \",\"(4) \",\"(5) \",\"(6) \",\"(7) \",\"(8) \",\"(9) \",\"(10) \",\"(Yue) \",\"(Huo) \",\"(Shui) \",\"(Mu) \",\"(Jin) \",\"(Tu) \",\"(Ri) \",\"(Zhu) \",\"(You) \",\"(She) \",\"(Ming) \",\"(Te) \",\"(Cai) \",\"(Zhu) \",\"(Lao) \",\"(Dai) \",\"(Hu) \",\"(Xue) \",\"(Jian) \",\"(Qi) \",\"(Zi) \",\"(Xie) \",\"(Ji) \",\"(Xiu) \",\"<<\",\">>\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"(g)\",\"(n)\",\"(d)\",\"(r)\",\"(m)\",\"(b)\",\"(s)\",\"()\",\"(j)\",\"(c)\",\"(k)\",\"(t)\",\"(p)\",\"(h)\",\"(ga)\",\"(na)\",\"(da)\",\"(ra)\",\"(ma)\",\"(ba)\",\"(sa)\",\"(a)\",\"(ja)\",\"(ca)\",\"(ka)\",\"(ta)\",\"(pa)\",\"(ha)\",,,,\"KIS \",\"(1) \",\"(2) \",\"(3) \",\"(4) \",\"(5) \",\"(6) \",\"(7) \",\"(8) \",\"(9) \",\"(10) \",\"(Yue) \",\"(Huo) \",\"(Shui) \",\"(Mu) \",\"(Jin) \",\"(Tu) \",\"(Ri) \",\"(Zhu) \",\"(You) \",\"(She) \",\"(Ming) \",\"(Te) \",\"(Cai) \",\"(Zhu) \",\"(Lao) \",\"(Mi) \",\"(Nan) \",\"(Nu) \",\"(Shi) \",\"(You) \",\"(Yin) \",\"(Zhu) \",\"(Xiang) \",\"(Xiu) \",\"(Xie) \",\"(Zheng) \",\"(Shang) \",\"(Zhong) \",\"(Xia) \",\"(Zuo) \",\"(You) \",\"(Yi) \",\"(Zong) \",\"(Xue) \",\"(Jian) \",\"(Qi) \",\"(Zi) \",\"(Xie) \",\"(Ye) \",,,,,,,,,,,,,,,,\"1M\",\"2M\",\"3M\",\"4M\",\"5M\",\"6M\",\"7M\",\"8M\",\"9M\",\"10M\",\"11M\",\"12M\",,,,,\"a\",\"i\",\"u\",\"u\",\"o\",\"ka\",\"ki\",\"ku\",\"ke\",\"ko\",\"sa\",\"si\",\"su\",\"se\",\"so\",\"ta\",\"ti\",\"tu\",\"te\",\"to\",\"na\",\"ni\",\"nu\",\"ne\",\"no\",\"ha\",\"hi\",\"hu\",\"he\",\"ho\",\"ma\",\"mi\",\"mu\",\"me\",\"mo\",\"ya\",\"yu\",\"yo\",\"ra\",\"ri\",\"ru\",\"re\",\"ro\",\"wa\",\"wi\",\"we\",\"wo\"],[\"apartment\",\"alpha\",\"ampere\",\"are\",\"inning\",\"inch\",\"won\",\"escudo\",\"acre\",\"ounce\",\"ohm\",\"kai-ri\",\"carat\",\"calorie\",\"gallon\",\"gamma\",\"giga\",\"guinea\",\"curie\",\"guilder\",\"kilo\",\"kilogram\",\"kilometer\",\"kilowatt\",\"gram\",\"gram ton\",\"cruzeiro\",\"krone\",\"case\",\"koruna\",\"co-op\",\"cycle\",\"centime\",\"shilling\",\"centi\",\"cent\",\"dozen\",\"desi\",\"dollar\",\"ton\",\"nano\",\"knot\",\"heights\",\"percent\",\"parts\",\"barrel\",\"piaster\",\"picul\",\"pico\",\"building\",\"farad\",\"feet\",\"bushel\",\"franc\",\"hectare\",\"peso\",\"pfennig\",\"hertz\",\"pence\",\"page\",\"beta\",\"point\",\"volt\",\"hon\",\"pound\",\"hall\",\"horn\",\"micro\",\"mile\",\"mach\",\"mark\",\"mansion\",\"micron\",\"milli\",\"millibar\",\"mega\",\"megaton\",\"meter\",\"yard\",\"yard\",\"yuan\",\"liter\",\"lira\",\"rupee\",\"ruble\",\"rem\",\"roentgen\",\"watt\",\"0h\",\"1h\",\"2h\",\"3h\",\"4h\",\"5h\",\"6h\",\"7h\",\"8h\",\"9h\",\"10h\",\"11h\",\"12h\",\"13h\",\"14h\",\"15h\",\"16h\",\"17h\",\"18h\",\"19h\",\"20h\",\"21h\",\"22h\",\"23h\",\"24h\",\"HPA\",\"da\",\"AU\",\"bar\",\"oV\",\"pc\",,,,,\"Heisei\",\"Syouwa\",\"Taisyou\",\"Meiji\",\"Inc.\",\"pA\",\"nA\",\"microamp\",\"mA\",\"kA\",\"kB\",\"MB\",\"GB\",\"cal\",\"kcal\",\"pF\",\"nF\",\"microFarad\",\"microgram\",\"mg\",\"kg\",\"Hz\",\"kHz\",\"MHz\",\"GHz\",\"THz\",\"microliter\",\"ml\",\"dl\",\"kl\",\"fm\",\"nm\",\"micrometer\",\"mm\",\"cm\",\"km\",\"mm^2\",\"cm^2\",\"m^2\",\"km^2\",\"mm^4\",\"cm^3\",\"m^3\",\"km^3\",\"m/s\",\"m/s^2\",\"Pa\",\"kPa\",\"MPa\",\"GPa\",\"rad\",\"rad/s\",\"rad/s^2\",\"ps\",\"ns\",\"microsecond\",\"ms\",\"pV\",\"nV\",\"microvolt\",\"mV\",\"kV\",\"MV\",\"pW\",\"nW\",\"microwatt\",\"mW\",\"kW\",\"MW\",\"kOhm\",\"MOhm\",\"a.m.\",\"Bq\",\"cc\",\"cd\",\"C/kg\",\"Co.\",\"dB\",\"Gy\",\"ha\",\"HP\",\"in\",\"K.K.\",\"KM\",\"kt\",\"lm\",\"ln\",\"log\",\"lx\",\"mb\",\"mil\",\"mol\",\"pH\",\"p.m.\",\"PPM\",\"PR\",\"sr\",\"Sv\",\"Wb\",,,\"1d\",\"2d\",\"3d\",\"4d\",\"5d\",\"6d\",\"7d\",\"8d\",\"9d\",\"10d\",\"11d\",\"12d\",\"13d\",\"14d\",\"15d\",\"16d\",\"17d\",\"18d\",\"19d\",\"20d\",\"21d\",\"22d\",\"23d\",\"24d\",\"25d\",\"26d\",\"27d\",\"28d\",\"29d\",\"30d\",\"31d\"],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[\"Yi\",\"Ding\",\"Kao\",\"Qi\",\"Shang\",\"Xia\",,\"Wan\",\"Zhang\",\"San\",\"Shang\",\"Xia\",\"Ji\",\"Bu\",\"Yu\",\"Mian\",\"Gai\",\"Chou\",\"Chou\",\"Zhuan\",\"Qie\",\"Pi\",\"Shi\",\"Shi\",\"Qiu\",\"Bing\",\"Ye\",\"Cong\",\"Dong\",\"Si\",\"Cheng\",\"Diu\",\"Qiu\",\"Liang\",\"Diu\",\"You\",\"Liang\",\"Yan\",\"Bing\",\"Sang\",\"Gun\",\"Jiu\",\"Ge\",\"Ya\",\"Qiang\",\"Zhong\",\"Ji\",\"Jie\",\"Feng\",\"Guan\",\"Chuan\",\"Chan\",\"Lin\",\"Zhuo\",\"Zhu\",\"Ha\",\"Wan\",\"Dan\",\"Wei\",\"Zhu\",\"Jing\",\"Li\",\"Ju\",\"Pie\",\"Fu\",\"Yi\",\"Yi\",\"Nai\",\"Shime\",\"Jiu\",\"Jiu\",\"Zhe\",\"Me\",\"Yi\",,\"Zhi\",\"Wu\",\"Zha\",\"Hu\",\"Fa\",\"Le\",\"Zhong\",\"Ping\",\"Pang\",\"Qiao\",\"Hu\",\"Guai\",\"Cheng\",\"Cheng\",\"Yi\",\"Yin\",,\"Mie\",\"Jiu\",\"Qi\",\"Ye\",\"Xi\",\"Xiang\",\"Gai\",\"Diu\",\"Hal\",,\"Shu\",\"Twul\",\"Shi\",\"Ji\",\"Nang\",\"Jia\",\"Kel\",\"Shi\",,\"Ol\",\"Mai\",\"Luan\",\"Cal\",\"Ru\",\"Xue\",\"Yan\",\"Fu\",\"Sha\",\"Na\",\"Gan\",\"Sol\",\"El\",\"Cwul\",,\"Gan\",\"Chi\",\"Gui\",\"Gan\",\"Luan\",\"Lin\",\"Yi\",\"Jue\",\"Liao\",\"Ma\",\"Yu\",\"Zheng\",\"Shi\",\"Shi\",\"Er\",\"Chu\",\"Yu\",\"Yu\",\"Yu\",\"Yun\",\"Hu\",\"Qi\",\"Wu\",\"Jing\",\"Si\",\"Sui\",\"Gen\",\"Gen\",\"Ya\",\"Xie\",\"Ya\",\"Qi\",\"Ya\",\"Ji\",\"Tou\",\"Wang\",\"Kang\",\"Ta\",\"Jiao\",\"Hai\",\"Yi\",\"Chan\",\"Heng\",\"Mu\",,\"Xiang\",\"Jing\",\"Ting\",\"Liang\",\"Xiang\",\"Jing\",\"Ye\",\"Qin\",\"Bo\",\"You\",\"Xie\",\"Dan\",\"Lian\",\"Duo\",\"Wei\",\"Ren\",\"Ren\",\"Ji\",\"La\",\"Wang\",\"Yi\",\"Shi\",\"Ren\",\"Le\",\"Ding\",\"Ze\",\"Jin\",\"Pu\",\"Chou\",\"Ba\",\"Zhang\",\"Jin\",\"Jie\",\"Bing\",\"Reng\",\"Cong\",\"Fo\",\"San\",\"Lun\",\"Sya\",\"Cang\",\"Zi\",\"Shi\",\"Ta\",\"Zhang\",\"Fu\",\"Xian\",\"Xian\",\"Tuo\",\"Hong\",\"Tong\",\"Ren\",\"Qian\",\"Gan\",\"Yi\",\"Di\",\"Dai\",\"Ling\",\"Yi\",\"Chao\",\"Chang\",\"Sa\",,\"Yi\",\"Mu\",\"Men\",\"Ren\",\"Jia\",\"Chao\",\"Yang\",\"Qian\",\"Zhong\",\"Pi\",\"Wan\",\"Wu\",\"Jian\",\"Jie\",\"Yao\",\"Feng\",\"Cang\",\"Ren\",\"Wang\",\"Fen\",\"Di\",\"Fang\"],[\"Zhong\",\"Qi\",\"Pei\",\"Yu\",\"Diao\",\"Dun\",\"Wen\",\"Yi\",\"Xin\",\"Kang\",\"Yi\",\"Ji\",\"Ai\",\"Wu\",\"Ji\",\"Fu\",\"Fa\",\"Xiu\",\"Jin\",\"Bei\",\"Dan\",\"Fu\",\"Tang\",\"Zhong\",\"You\",\"Huo\",\"Hui\",\"Yu\",\"Cui\",\"Chuan\",\"San\",\"Wei\",\"Chuan\",\"Che\",\"Ya\",\"Xian\",\"Shang\",\"Chang\",\"Lun\",\"Cang\",\"Xun\",\"Xin\",\"Wei\",\"Zhu\",,\"Xuan\",\"Nu\",\"Bo\",\"Gu\",\"Ni\",\"Ni\",\"Xie\",\"Ban\",\"Xu\",\"Ling\",\"Zhou\",\"Shen\",\"Qu\",\"Si\",\"Beng\",\"Si\",\"Jia\",\"Pi\",\"Yi\",\"Si\",\"Ai\",\"Zheng\",\"Dian\",\"Han\",\"Mai\",\"Dan\",\"Zhu\",\"Bu\",\"Qu\",\"Bi\",\"Shao\",\"Ci\",\"Wei\",\"Di\",\"Zhu\",\"Zuo\",\"You\",\"Yang\",\"Ti\",\"Zhan\",\"He\",\"Bi\",\"Tuo\",\"She\",\"Yu\",\"Yi\",\"Fo\",\"Zuo\",\"Kou\",\"Ning\",\"Tong\",\"Ni\",\"Xuan\",\"Qu\",\"Yong\",\"Wa\",\"Qian\",,\"Ka\",,\"Pei\",\"Huai\",\"He\",\"Lao\",\"Xiang\",\"Ge\",\"Yang\",\"Bai\",\"Fa\",\"Ming\",\"Jia\",\"Er\",\"Bing\",\"Ji\",\"Hen\",\"Huo\",\"Gui\",\"Quan\",\"Tiao\",\"Jiao\",\"Ci\",\"Yi\",\"Shi\",\"Xing\",\"Shen\",\"Tuo\",\"Kan\",\"Zhi\",\"Gai\",\"Lai\",\"Yi\",\"Chi\",\"Kua\",\"Guang\",\"Li\",\"Yin\",\"Shi\",\"Mi\",\"Zhu\",\"Xu\",\"You\",\"An\",\"Lu\",\"Mou\",\"Er\",\"Lun\",\"Tong\",\"Cha\",\"Chi\",\"Xun\",\"Gong\",\"Zhou\",\"Yi\",\"Ru\",\"Jian\",\"Xia\",\"Jia\",\"Zai\",\"Lu\",\"Ko\",\"Jiao\",\"Zhen\",\"Ce\",\"Qiao\",\"Kuai\",\"Chai\",\"Ning\",\"Nong\",\"Jin\",\"Wu\",\"Hou\",\"Jiong\",\"Cheng\",\"Zhen\",\"Zuo\",\"Chou\",\"Qin\",\"Lu\",\"Ju\",\"Shu\",\"Ting\",\"Shen\",\"Tuo\",\"Bo\",\"Nan\",\"Hao\",\"Bian\",\"Tui\",\"Yu\",\"Xi\",\"Cu\",\"E\",\"Qiu\",\"Xu\",\"Kuang\",\"Ku\",\"Wu\",\"Jun\",\"Yi\",\"Fu\",\"Lang\",\"Zu\",\"Qiao\",\"Li\",\"Yong\",\"Hun\",\"Jing\",\"Xian\",\"San\",\"Pai\",\"Su\",\"Fu\",\"Xi\",\"Li\",\"Fu\",\"Ping\",\"Bao\",\"Yu\",\"Si\",\"Xia\",\"Xin\",\"Xiu\",\"Yu\",\"Ti\",\"Che\",\"Chou\",,\"Yan\",\"Lia\",\"Li\",\"Lai\",,\"Jian\",\"Xiu\",\"Fu\",\"He\",\"Ju\",\"Xiao\",\"Pai\",\"Jian\",\"Biao\",\"Chu\",\"Fei\",\"Feng\",\"Ya\",\"An\",\"Bei\",\"Yu\",\"Xin\",\"Bi\",\"Jian\"],[\"Chang\",\"Chi\",\"Bing\",\"Zan\",\"Yao\",\"Cui\",\"Lia\",\"Wan\",\"Lai\",\"Cang\",\"Zong\",\"Ge\",\"Guan\",\"Bei\",\"Tian\",\"Shu\",\"Shu\",\"Men\",\"Dao\",\"Tan\",\"Jue\",\"Chui\",\"Xing\",\"Peng\",\"Tang\",\"Hou\",\"Yi\",\"Qi\",\"Ti\",\"Gan\",\"Jing\",\"Jie\",\"Sui\",\"Chang\",\"Jie\",\"Fang\",\"Zhi\",\"Kong\",\"Juan\",\"Zong\",\"Ju\",\"Qian\",\"Ni\",\"Lun\",\"Zhuo\",\"Wei\",\"Luo\",\"Song\",\"Leng\",\"Hun\",\"Dong\",\"Zi\",\"Ben\",\"Wu\",\"Ju\",\"Nai\",\"Cai\",\"Jian\",\"Zhai\",\"Ye\",\"Zhi\",\"Sha\",\"Qing\",,\"Ying\",\"Cheng\",\"Jian\",\"Yan\",\"Nuan\",\"Zhong\",\"Chun\",\"Jia\",\"Jie\",\"Wei\",\"Yu\",\"Bing\",\"Ruo\",\"Ti\",\"Wei\",\"Pian\",\"Yan\",\"Feng\",\"Tang\",\"Wo\",\"E\",\"Xie\",\"Che\",\"Sheng\",\"Kan\",\"Di\",\"Zuo\",\"Cha\",\"Ting\",\"Bei\",\"Ye\",\"Huang\",\"Yao\",\"Zhan\",\"Chou\",\"Yan\",\"You\",\"Jian\",\"Xu\",\"Zha\",\"Ci\",\"Fu\",\"Bi\",\"Zhi\",\"Zong\",\"Mian\",\"Ji\",\"Yi\",\"Xie\",\"Xun\",\"Si\",\"Duan\",\"Ce\",\"Zhen\",\"Ou\",\"Tou\",\"Tou\",\"Bei\",\"Za\",\"Lu\",\"Jie\",\"Wei\",\"Fen\",\"Chang\",\"Gui\",\"Sou\",\"Zhi\",\"Su\",\"Xia\",\"Fu\",\"Yuan\",\"Rong\",\"Li\",\"Ru\",\"Yun\",\"Gou\",\"Ma\",\"Bang\",\"Dian\",\"Tang\",\"Hao\",\"Jie\",\"Xi\",\"Shan\",\"Qian\",\"Jue\",\"Cang\",\"Chu\",\"San\",\"Bei\",\"Xiao\",\"Yong\",\"Yao\",\"Tan\",\"Suo\",\"Yang\",\"Fa\",\"Bing\",\"Jia\",\"Dai\",\"Zai\",\"Tang\",,\"Bin\",\"Chu\",\"Nuo\",\"Can\",\"Lei\",\"Cui\",\"Yong\",\"Zao\",\"Zong\",\"Peng\",\"Song\",\"Ao\",\"Chuan\",\"Yu\",\"Zhai\",\"Cou\",\"Shang\",\"Qiang\",\"Jing\",\"Chi\",\"Sha\",\"Han\",\"Zhang\",\"Qing\",\"Yan\",\"Di\",\"Xi\",\"Lu\",\"Bei\",\"Piao\",\"Jin\",\"Lian\",\"Lu\",\"Man\",\"Qian\",\"Xian\",\"Tan\",\"Ying\",\"Dong\",\"Zhuan\",\"Xiang\",\"Shan\",\"Qiao\",\"Jiong\",\"Tui\",\"Zun\",\"Pu\",\"Xi\",\"Lao\",\"Chang\",\"Guang\",\"Liao\",\"Qi\",\"Deng\",\"Chan\",\"Wei\",\"Ji\",\"Fan\",\"Hui\",\"Chuan\",\"Jian\",\"Dan\",\"Jiao\",\"Jiu\",\"Seng\",\"Fen\",\"Xian\",\"Jue\",\"E\",\"Jiao\",\"Jian\",\"Tong\",\"Lin\",\"Bo\",\"Gu\",,\"Su\",\"Xian\",\"Jiang\",\"Min\",\"Ye\",\"Jin\",\"Jia\",\"Qiao\",\"Pi\",\"Feng\",\"Zhou\",\"Ai\",\"Sai\"],[\"Yi\",\"Jun\",\"Nong\",\"Chan\",\"Yi\",\"Dang\",\"Jing\",\"Xuan\",\"Kuai\",\"Jian\",\"Chu\",\"Dan\",\"Jiao\",\"Sha\",\"Zai\",,\"Bin\",\"An\",\"Ru\",\"Tai\",\"Chou\",\"Chai\",\"Lan\",\"Ni\",\"Jin\",\"Qian\",\"Meng\",\"Wu\",\"Ning\",\"Qiong\",\"Ni\",\"Chang\",\"Lie\",\"Lei\",\"Lu\",\"Kuang\",\"Bao\",\"Du\",\"Biao\",\"Zan\",\"Zhi\",\"Si\",\"You\",\"Hao\",\"Chen\",\"Chen\",\"Li\",\"Teng\",\"Wei\",\"Long\",\"Chu\",\"Chan\",\"Rang\",\"Shu\",\"Hui\",\"Li\",\"Luo\",\"Zan\",\"Nuo\",\"Tang\",\"Yan\",\"Lei\",\"Nang\",\"Er\",\"Wu\",\"Yun\",\"Zan\",\"Yuan\",\"Xiong\",\"Chong\",\"Zhao\",\"Xiong\",\"Xian\",\"Guang\",\"Dui\",\"Ke\",\"Dui\",\"Mian\",\"Tu\",\"Chang\",\"Er\",\"Dui\",\"Er\",\"Xin\",\"Tu\",\"Si\",\"Yan\",\"Yan\",\"Shi\",\"Shi\",\"Dang\",\"Qian\",\"Dou\",\"Fen\",\"Mao\",\"Shen\",\"Dou\",\"Bai\",\"Jing\",\"Li\",\"Huang\",\"Ru\",\"Wang\",\"Nei\",\"Quan\",\"Liang\",\"Yu\",\"Ba\",\"Gong\",\"Liu\",\"Xi\",,\"Lan\",\"Gong\",\"Tian\",\"Guan\",\"Xing\",\"Bing\",\"Qi\",\"Ju\",\"Dian\",\"Zi\",\"Ppwun\",\"Yang\",\"Jian\",\"Shou\",\"Ji\",\"Yi\",\"Ji\",\"Chan\",\"Jiong\",\"Mao\",\"Ran\",\"Nei\",\"Yuan\",\"Mao\",\"Gang\",\"Ran\",\"Ce\",\"Jiong\",\"Ce\",\"Zai\",\"Gua\",\"Jiong\",\"Mao\",\"Zhou\",\"Mou\",\"Gou\",\"Xu\",\"Mian\",\"Mi\",\"Rong\",\"Yin\",\"Xie\",\"Kan\",\"Jun\",\"Nong\",\"Yi\",\"Mi\",\"Shi\",\"Guan\",\"Meng\",\"Zhong\",\"Ju\",\"Yuan\",\"Ming\",\"Kou\",\"Lam\",\"Fu\",\"Xie\",\"Mi\",\"Bing\",\"Dong\",\"Tai\",\"Gang\",\"Feng\",\"Bing\",\"Hu\",\"Chong\",\"Jue\",\"Hu\",\"Kuang\",\"Ye\",\"Leng\",\"Pan\",\"Fu\",\"Min\",\"Dong\",\"Xian\",\"Lie\",\"Xia\",\"Jian\",\"Jing\",\"Shu\",\"Mei\",\"Tu\",\"Qi\",\"Gu\",\"Zhun\",\"Song\",\"Jing\",\"Liang\",\"Qing\",\"Diao\",\"Ling\",\"Dong\",\"Gan\",\"Jian\",\"Yin\",\"Cou\",\"Yi\",\"Li\",\"Cang\",\"Ming\",\"Zhuen\",\"Cui\",\"Si\",\"Duo\",\"Jin\",\"Lin\",\"Lin\",\"Ning\",\"Xi\",\"Du\",\"Ji\",\"Fan\",\"Fan\",\"Fan\",\"Feng\",\"Ju\",\"Chu\",\"Tako\",\"Feng\",\"Mok\",\"Ci\",\"Fu\",\"Feng\",\"Ping\",\"Feng\",\"Kai\",\"Huang\",\"Kai\",\"Gan\",\"Deng\",\"Ping\",\"Qu\",\"Xiong\",\"Kuai\",\"Tu\",\"Ao\",\"Chu\",\"Ji\",\"Dang\",\"Han\",\"Han\",\"Zao\"],[\"Dao\",\"Diao\",\"Dao\",\"Ren\",\"Ren\",\"Chuang\",\"Fen\",\"Qie\",\"Yi\",\"Ji\",\"Kan\",\"Qian\",\"Cun\",\"Chu\",\"Wen\",\"Ji\",\"Dan\",\"Xing\",\"Hua\",\"Wan\",\"Jue\",\"Li\",\"Yue\",\"Lie\",\"Liu\",\"Ze\",\"Gang\",\"Chuang\",\"Fu\",\"Chu\",\"Qu\",\"Ju\",\"Shan\",\"Min\",\"Ling\",\"Zhong\",\"Pan\",\"Bie\",\"Jie\",\"Jie\",\"Bao\",\"Li\",\"Shan\",\"Bie\",\"Chan\",\"Jing\",\"Gua\",\"Gen\",\"Dao\",\"Chuang\",\"Kui\",\"Ku\",\"Duo\",\"Er\",\"Zhi\",\"Shua\",\"Quan\",\"Cha\",\"Ci\",\"Ke\",\"Jie\",\"Gui\",\"Ci\",\"Gui\",\"Kai\",\"Duo\",\"Ji\",\"Ti\",\"Jing\",\"Lou\",\"Gen\",\"Ze\",\"Yuan\",\"Cuo\",\"Xue\",\"Ke\",\"La\",\"Qian\",\"Cha\",\"Chuang\",\"Gua\",\"Jian\",\"Cuo\",\"Li\",\"Ti\",\"Fei\",\"Pou\",\"Chan\",\"Qi\",\"Chuang\",\"Zi\",\"Gang\",\"Wan\",\"Bo\",\"Ji\",\"Duo\",\"Qing\",\"Yan\",\"Zhuo\",\"Jian\",\"Ji\",\"Bo\",\"Yan\",\"Ju\",\"Huo\",\"Sheng\",\"Jian\",\"Duo\",\"Duan\",\"Wu\",\"Gua\",\"Fu\",\"Sheng\",\"Jian\",\"Ge\",\"Zha\",\"Kai\",\"Chuang\",\"Juan\",\"Chan\",\"Tuan\",\"Lu\",\"Li\",\"Fou\",\"Shan\",\"Piao\",\"Kou\",\"Jiao\",\"Gua\",\"Qiao\",\"Jue\",\"Hua\",\"Zha\",\"Zhuo\",\"Lian\",\"Ju\",\"Pi\",\"Liu\",\"Gui\",\"Jiao\",\"Gui\",\"Jian\",\"Jian\",\"Tang\",\"Huo\",\"Ji\",\"Jian\",\"Yi\",\"Jian\",\"Zhi\",\"Chan\",\"Cuan\",\"Mo\",\"Li\",\"Zhu\",\"Li\",\"Ya\",\"Quan\",\"Ban\",\"Gong\",\"Jia\",\"Wu\",\"Mai\",\"Lie\",\"Jin\",\"Keng\",\"Xie\",\"Zhi\",\"Dong\",\"Zhu\",\"Nu\",\"Jie\",\"Qu\",\"Shao\",\"Yi\",\"Zhu\",\"Miao\",\"Li\",\"Jing\",\"Lao\",\"Lao\",\"Juan\",\"Kou\",\"Yang\",\"Wa\",\"Xiao\",\"Mou\",\"Kuang\",\"Jie\",\"Lie\",\"He\",\"Shi\",\"Ke\",\"Jing\",\"Hao\",\"Bo\",\"Min\",\"Chi\",\"Lang\",\"Yong\",\"Yong\",\"Mian\",\"Ke\",\"Xun\",\"Juan\",\"Qing\",\"Lu\",\"Pou\",\"Meng\",\"Lai\",\"Le\",\"Kai\",\"Mian\",\"Dong\",\"Xu\",\"Xu\",\"Kan\",\"Wu\",\"Yi\",\"Xun\",\"Weng\",\"Sheng\",\"Lao\",\"Mu\",\"Lu\",\"Piao\",\"Shi\",\"Ji\",\"Qin\",\"Qiang\",\"Jiao\",\"Quan\",\"Yang\",\"Yi\",\"Jue\",\"Fan\",\"Juan\",\"Tong\",\"Ju\",\"Dan\",\"Xie\",\"Mai\",\"Xun\",\"Xun\",\"Lu\",\"Li\",\"Che\",\"Rang\",\"Quan\",\"Bao\",\"Shao\",\"Yun\",\"Jiu\",\"Bao\",\"Gou\",\"Wu\"],[\"Yun\",\"Mwun\",\"Nay\",\"Gai\",\"Gai\",\"Bao\",\"Cong\",,\"Xiong\",\"Peng\",\"Ju\",\"Tao\",\"Ge\",\"Pu\",\"An\",\"Pao\",\"Fu\",\"Gong\",\"Da\",\"Jiu\",\"Qiong\",\"Bi\",\"Hua\",\"Bei\",\"Nao\",\"Chi\",\"Fang\",\"Jiu\",\"Yi\",\"Za\",\"Jiang\",\"Kang\",\"Jiang\",\"Kuang\",\"Hu\",\"Xia\",\"Qu\",\"Bian\",\"Gui\",\"Qie\",\"Zang\",\"Kuang\",\"Fei\",\"Hu\",\"Tou\",\"Gui\",\"Gui\",\"Hui\",\"Dan\",\"Gui\",\"Lian\",\"Lian\",\"Suan\",\"Du\",\"Jiu\",\"Qu\",\"Xi\",\"Pi\",\"Qu\",\"Yi\",\"Qia\",\"Yan\",\"Bian\",\"Ni\",\"Qu\",\"Shi\",\"Xin\",\"Qian\",\"Nian\",\"Sa\",\"Zu\",\"Sheng\",\"Wu\",\"Hui\",\"Ban\",\"Shi\",\"Xi\",\"Wan\",\"Hua\",\"Xie\",\"Wan\",\"Bei\",\"Zu\",\"Zhuo\",\"Xie\",\"Dan\",\"Mai\",\"Nan\",\"Dan\",\"Ji\",\"Bo\",\"Shuai\",\"Bu\",\"Kuang\",\"Bian\",\"Bu\",\"Zhan\",\"Qia\",\"Lu\",\"You\",\"Lu\",\"Xi\",\"Gua\",\"Wo\",\"Xie\",\"Jie\",\"Jie\",\"Wei\",\"Ang\",\"Qiong\",\"Zhi\",\"Mao\",\"Yin\",\"Wei\",\"Shao\",\"Ji\",\"Que\",\"Luan\",\"Shi\",\"Juan\",\"Xie\",\"Xu\",\"Jin\",\"Que\",\"Wu\",\"Ji\",\"E\",\"Qing\",\"Xi\",,\"Han\",\"Zhan\",\"E\",\"Ting\",\"Li\",\"Zhe\",\"Han\",\"Li\",\"Ya\",\"Ya\",\"Yan\",\"She\",\"Zhi\",\"Zha\",\"Pang\",,\"He\",\"Ya\",\"Zhi\",\"Ce\",\"Pang\",\"Ti\",\"Li\",\"She\",\"Hou\",\"Ting\",\"Zui\",\"Cuo\",\"Fei\",\"Yuan\",\"Ce\",\"Yuan\",\"Xiang\",\"Yan\",\"Li\",\"Jue\",\"Sha\",\"Dian\",\"Chu\",\"Jiu\",\"Qin\",\"Ao\",\"Gui\",\"Yan\",\"Si\",\"Li\",\"Chang\",\"Lan\",\"Li\",\"Yan\",\"Yan\",\"Yuan\",\"Si\",\"Gong\",\"Lin\",\"Qiu\",\"Qu\",\"Qu\",\"Uk\",\"Lei\",\"Du\",\"Xian\",\"Zhuan\",\"San\",\"Can\",\"Can\",\"Can\",\"Can\",\"Ai\",\"Dai\",\"You\",\"Cha\",\"Ji\",\"You\",\"Shuang\",\"Fan\",\"Shou\",\"Guai\",\"Ba\",\"Fa\",\"Ruo\",\"Shi\",\"Shu\",\"Zhuo\",\"Qu\",\"Shou\",\"Bian\",\"Xu\",\"Jia\",\"Pan\",\"Sou\",\"Gao\",\"Wei\",\"Sou\",\"Die\",\"Rui\",\"Cong\",\"Kou\",\"Gu\",\"Ju\",\"Ling\",\"Gua\",\"Tao\",\"Kou\",\"Zhi\",\"Jiao\",\"Zhao\",\"Ba\",\"Ding\",\"Ke\",\"Tai\",\"Chi\",\"Shi\",\"You\",\"Qiu\",\"Po\",\"Ye\",\"Hao\",\"Si\",\"Tan\",\"Chi\",\"Le\",\"Diao\",\"Ji\",,\"Hong\"],[\"Mie\",\"Xu\",\"Mang\",\"Chi\",\"Ge\",\"Xuan\",\"Yao\",\"Zi\",\"He\",\"Ji\",\"Diao\",\"Cun\",\"Tong\",\"Ming\",\"Hou\",\"Li\",\"Tu\",\"Xiang\",\"Zha\",\"Xia\",\"Ye\",\"Lu\",\"A\",\"Ma\",\"Ou\",\"Xue\",\"Yi\",\"Jun\",\"Chou\",\"Lin\",\"Tun\",\"Yin\",\"Fei\",\"Bi\",\"Qin\",\"Qin\",\"Jie\",\"Bu\",\"Fou\",\"Ba\",\"Dun\",\"Fen\",\"E\",\"Han\",\"Ting\",\"Hang\",\"Shun\",\"Qi\",\"Hong\",\"Zhi\",\"Shen\",\"Wu\",\"Wu\",\"Chao\",\"Ne\",\"Xue\",\"Xi\",\"Chui\",\"Dou\",\"Wen\",\"Hou\",\"Ou\",\"Wu\",\"Gao\",\"Ya\",\"Jun\",\"Lu\",\"E\",\"Ge\",\"Mei\",\"Ai\",\"Qi\",\"Cheng\",\"Wu\",\"Gao\",\"Fu\",\"Jiao\",\"Hong\",\"Chi\",\"Sheng\",\"Ne\",\"Tun\",\"Fu\",\"Yi\",\"Dai\",\"Ou\",\"Li\",\"Bai\",\"Yuan\",\"Kuai\",,\"Qiang\",\"Wu\",\"E\",\"Shi\",\"Quan\",\"Pen\",\"Wen\",\"Ni\",\"M\",\"Ling\",\"Ran\",\"You\",\"Di\",\"Zhou\",\"Shi\",\"Zhou\",\"Tie\",\"Xi\",\"Yi\",\"Qi\",\"Ping\",\"Zi\",\"Gu\",\"Zi\",\"Wei\",\"Xu\",\"He\",\"Nao\",\"Xia\",\"Pei\",\"Yi\",\"Xiao\",\"Shen\",\"Hu\",\"Ming\",\"Da\",\"Qu\",\"Ju\",\"Gem\",\"Za\",\"Tuo\",\"Duo\",\"Pou\",\"Pao\",\"Bi\",\"Fu\",\"Yang\",\"He\",\"Zha\",\"He\",\"Hai\",\"Jiu\",\"Yong\",\"Fu\",\"Que\",\"Zhou\",\"Wa\",\"Ka\",\"Gu\",\"Ka\",\"Zuo\",\"Bu\",\"Long\",\"Dong\",\"Ning\",\"Tha\",\"Si\",\"Xian\",\"Huo\",\"Qi\",\"Er\",\"E\",\"Guang\",\"Zha\",\"Xi\",\"Yi\",\"Lie\",\"Zi\",\"Mie\",\"Mi\",\"Zhi\",\"Yao\",\"Ji\",\"Zhou\",\"Ge\",\"Shuai\",\"Zan\",\"Xiao\",\"Ke\",\"Hui\",\"Kua\",\"Huai\",\"Tao\",\"Xian\",\"E\",\"Xuan\",\"Xiu\",\"Wai\",\"Yan\",\"Lao\",\"Yi\",\"Ai\",\"Pin\",\"Shen\",\"Tong\",\"Hong\",\"Xiong\",\"Chi\",\"Wa\",\"Ha\",\"Zai\",\"Yu\",\"Di\",\"Pai\",\"Xiang\",\"Ai\",\"Hen\",\"Kuang\",\"Ya\",\"Da\",\"Xiao\",\"Bi\",\"Yue\",,\"Hua\",\"Sasou\",\"Kuai\",\"Duo\",,\"Ji\",\"Nong\",\"Mou\",\"Yo\",\"Hao\",\"Yuan\",\"Long\",\"Pou\",\"Mang\",\"Ge\",\"E\",\"Chi\",\"Shao\",\"Li\",\"Na\",\"Zu\",\"He\",\"Ku\",\"Xiao\",\"Xian\",\"Lao\",\"Bo\",\"Zhe\",\"Zha\",\"Liang\",\"Ba\",\"Mie\",\"Le\",\"Sui\",\"Fou\",\"Bu\",\"Han\",\"Heng\",\"Geng\",\"Shuo\",\"Ge\"],[\"You\",\"Yan\",\"Gu\",\"Gu\",\"Bai\",\"Han\",\"Suo\",\"Chun\",\"Yi\",\"Ai\",\"Jia\",\"Tu\",\"Xian\",\"Huan\",\"Li\",\"Xi\",\"Tang\",\"Zuo\",\"Qiu\",\"Che\",\"Wu\",\"Zao\",\"Ya\",\"Dou\",\"Qi\",\"Di\",\"Qin\",\"Ma\",\"Mal\",\"Hong\",\"Dou\",\"Kes\",\"Lao\",\"Liang\",\"Suo\",\"Zao\",\"Huan\",\"Lang\",\"Sha\",\"Ji\",\"Zuo\",\"Wo\",\"Feng\",\"Yin\",\"Hu\",\"Qi\",\"Shou\",\"Wei\",\"Shua\",\"Chang\",\"Er\",\"Li\",\"Qiang\",\"An\",\"Jie\",\"Yo\",\"Nian\",\"Yu\",\"Tian\",\"Lai\",\"Sha\",\"Xi\",\"Tuo\",\"Hu\",\"Ai\",\"Zhou\",\"Nou\",\"Ken\",\"Zhuo\",\"Zhuo\",\"Shang\",\"Di\",\"Heng\",\"Lan\",\"A\",\"Xiao\",\"Xiang\",\"Tun\",\"Wu\",\"Wen\",\"Cui\",\"Sha\",\"Hu\",\"Qi\",\"Qi\",\"Tao\",\"Dan\",\"Dan\",\"Ye\",\"Zi\",\"Bi\",\"Cui\",\"Chuo\",\"He\",\"Ya\",\"Qi\",\"Zhe\",\"Pei\",\"Liang\",\"Xian\",\"Pi\",\"Sha\",\"La\",\"Ze\",\"Qing\",\"Gua\",\"Pa\",\"Zhe\",\"Se\",\"Zhuan\",\"Nie\",\"Guo\",\"Luo\",\"Yan\",\"Di\",\"Quan\",\"Tan\",\"Bo\",\"Ding\",\"Lang\",\"Xiao\",,\"Tang\",\"Chi\",\"Ti\",\"An\",\"Jiu\",\"Dan\",\"Ke\",\"Yong\",\"Wei\",\"Nan\",\"Shan\",\"Yu\",\"Zhe\",\"La\",\"Jie\",\"Hou\",\"Han\",\"Die\",\"Zhou\",\"Chai\",\"Wai\",\"Re\",\"Yu\",\"Yin\",\"Zan\",\"Yao\",\"Wo\",\"Mian\",\"Hu\",\"Yun\",\"Chuan\",\"Hui\",\"Huan\",\"Huan\",\"Xi\",\"He\",\"Ji\",\"Kui\",\"Zhong\",\"Wei\",\"Sha\",\"Xu\",\"Huang\",\"Du\",\"Nie\",\"Xuan\",\"Liang\",\"Yu\",\"Sang\",\"Chi\",\"Qiao\",\"Yan\",\"Dan\",\"Pen\",\"Can\",\"Li\",\"Yo\",\"Zha\",\"Wei\",\"Miao\",\"Ying\",\"Pen\",\"Phos\",\"Kui\",\"Xi\",\"Yu\",\"Jie\",\"Lou\",\"Ku\",\"Sao\",\"Huo\",\"Ti\",\"Yao\",\"He\",\"A\",\"Xiu\",\"Qiang\",\"Se\",\"Yong\",\"Su\",\"Hong\",\"Xie\",\"Yi\",\"Suo\",\"Ma\",\"Cha\",\"Hai\",\"Ke\",\"Ta\",\"Sang\",\"Tian\",\"Ru\",\"Sou\",\"Wa\",\"Ji\",\"Pang\",\"Wu\",\"Xian\",\"Shi\",\"Ge\",\"Zi\",\"Jie\",\"Luo\",\"Weng\",\"Wa\",\"Si\",\"Chi\",\"Hao\",\"Suo\",\"Jia\",\"Hai\",\"Suo\",\"Qin\",\"Nie\",\"He\",\"Cis\",\"Sai\",\"Ng\",\"Ge\",\"Na\",\"Dia\",\"Ai\",,\"Tong\",\"Bi\",\"Ao\",\"Ao\",\"Lian\",\"Cui\",\"Zhe\",\"Mo\",\"Sou\",\"Sou\",\"Tan\"],[\"Di\",\"Qi\",\"Jiao\",\"Chong\",\"Jiao\",\"Kai\",\"Tan\",\"San\",\"Cao\",\"Jia\",\"Ai\",\"Xiao\",\"Piao\",\"Lou\",\"Ga\",\"Gu\",\"Xiao\",\"Hu\",\"Hui\",\"Guo\",\"Ou\",\"Xian\",\"Ze\",\"Chang\",\"Xu\",\"Po\",\"De\",\"Ma\",\"Ma\",\"Hu\",\"Lei\",\"Du\",\"Ga\",\"Tang\",\"Ye\",\"Beng\",\"Ying\",\"Saai\",\"Jiao\",\"Mi\",\"Xiao\",\"Hua\",\"Mai\",\"Ran\",\"Zuo\",\"Peng\",\"Lao\",\"Xiao\",\"Ji\",\"Zhu\",\"Chao\",\"Kui\",\"Zui\",\"Xiao\",\"Si\",\"Hao\",\"Fu\",\"Liao\",\"Qiao\",\"Xi\",\"Xiu\",\"Tan\",\"Tan\",\"Mo\",\"Xun\",\"E\",\"Zun\",\"Fan\",\"Chi\",\"Hui\",\"Zan\",\"Chuang\",\"Cu\",\"Dan\",\"Yu\",\"Tun\",\"Cheng\",\"Jiao\",\"Ye\",\"Xi\",\"Qi\",\"Hao\",\"Lian\",\"Xu\",\"Deng\",\"Hui\",\"Yin\",\"Pu\",\"Jue\",\"Qin\",\"Xun\",\"Nie\",\"Lu\",\"Si\",\"Yan\",\"Ying\",\"Da\",\"Dan\",\"Yu\",\"Zhou\",\"Jin\",\"Nong\",\"Yue\",\"Hui\",\"Qi\",\"E\",\"Zao\",\"Yi\",\"Shi\",\"Jiao\",\"Yuan\",\"Ai\",\"Yong\",\"Jue\",\"Kuai\",\"Yu\",\"Pen\",\"Dao\",\"Ge\",\"Xin\",\"Dun\",\"Dang\",\"Sin\",\"Sai\",\"Pi\",\"Pi\",\"Yin\",\"Zui\",\"Ning\",\"Di\",\"Lan\",\"Ta\",\"Huo\",\"Ru\",\"Hao\",\"Xia\",\"Ya\",\"Duo\",\"Xi\",\"Chou\",\"Ji\",\"Jin\",\"Hao\",\"Ti\",\"Chang\",,,\"Ca\",\"Ti\",\"Lu\",\"Hui\",\"Bo\",\"You\",\"Nie\",\"Yin\",\"Hu\",\"Mo\",\"Huang\",\"Zhe\",\"Li\",\"Liu\",\"Haai\",\"Nang\",\"Xiao\",\"Mo\",\"Yan\",\"Li\",\"Lu\",\"Long\",\"Fu\",\"Dan\",\"Chen\",\"Pin\",\"Pi\",\"Xiang\",\"Huo\",\"Mo\",\"Xi\",\"Duo\",\"Ku\",\"Yan\",\"Chan\",\"Ying\",\"Rang\",\"Dian\",\"La\",\"Ta\",\"Xiao\",\"Jiao\",\"Chuo\",\"Huan\",\"Huo\",\"Zhuan\",\"Nie\",\"Xiao\",\"Ca\",\"Li\",\"Chan\",\"Chai\",\"Li\",\"Yi\",\"Luo\",\"Nang\",\"Zan\",\"Su\",\"Xi\",\"So\",\"Jian\",\"Za\",\"Zhu\",\"Lan\",\"Nie\",\"Nang\",,,\"Wei\",\"Hui\",\"Yin\",\"Qiu\",\"Si\",\"Nin\",\"Jian\",\"Hui\",\"Xin\",\"Yin\",\"Nan\",\"Tuan\",\"Tuan\",\"Dun\",\"Kang\",\"Yuan\",\"Jiong\",\"Pian\",\"Yun\",\"Cong\",\"Hu\",\"Hui\",\"Yuan\",\"You\",\"Guo\",\"Kun\",\"Cong\",\"Wei\",\"Tu\",\"Wei\",\"Lun\",\"Guo\",\"Qun\",\"Ri\",\"Ling\",\"Gu\",\"Guo\",\"Tai\",\"Guo\",\"Tu\",\"You\"],[\"Guo\",\"Yin\",\"Hun\",\"Pu\",\"Yu\",\"Han\",\"Yuan\",\"Lun\",\"Quan\",\"Yu\",\"Qing\",\"Guo\",\"Chuan\",\"Wei\",\"Yuan\",\"Quan\",\"Ku\",\"Fu\",\"Yuan\",\"Yuan\",\"E\",\"Tu\",\"Tu\",\"Tu\",\"Tuan\",\"Lue\",\"Hui\",\"Yi\",\"Yuan\",\"Luan\",\"Luan\",\"Tu\",\"Ya\",\"Tu\",\"Ting\",\"Sheng\",\"Pu\",\"Lu\",\"Iri\",\"Ya\",\"Zai\",\"Wei\",\"Ge\",\"Yu\",\"Wu\",\"Gui\",\"Pi\",\"Yi\",\"Di\",\"Qian\",\"Qian\",\"Zhen\",\"Zhuo\",\"Dang\",\"Qia\",\"Akutsu\",\"Yama\",\"Kuang\",\"Chang\",\"Qi\",\"Nie\",\"Mo\",\"Ji\",\"Jia\",\"Zhi\",\"Zhi\",\"Ban\",\"Xun\",\"Tou\",\"Qin\",\"Fen\",\"Jun\",\"Keng\",\"Tun\",\"Fang\",\"Fen\",\"Ben\",\"Tan\",\"Kan\",\"Pi\",\"Zuo\",\"Keng\",\"Bi\",\"Xing\",\"Di\",\"Jing\",\"Ji\",\"Kuai\",\"Di\",\"Jing\",\"Jian\",\"Tan\",\"Li\",\"Ba\",\"Wu\",\"Fen\",\"Zhui\",\"Po\",\"Pan\",\"Tang\",\"Kun\",\"Qu\",\"Tan\",\"Zhi\",\"Tuo\",\"Gan\",\"Ping\",\"Dian\",\"Gua\",\"Ni\",\"Tai\",\"Pi\",\"Jiong\",\"Yang\",\"Fo\",\"Ao\",\"Liu\",\"Qiu\",\"Mu\",\"Ke\",\"Gou\",\"Xue\",\"Ba\",\"Chi\",\"Che\",\"Ling\",\"Zhu\",\"Fu\",\"Hu\",\"Zhi\",\"Chui\",\"La\",\"Long\",\"Long\",\"Lu\",\"Ao\",\"Tay\",\"Pao\",,\"Xing\",\"Dong\",\"Ji\",\"Ke\",\"Lu\",\"Ci\",\"Chi\",\"Lei\",\"Gai\",\"Yin\",\"Hou\",\"Dui\",\"Zhao\",\"Fu\",\"Guang\",\"Yao\",\"Duo\",\"Duo\",\"Gui\",\"Cha\",\"Yang\",\"Yin\",\"Fa\",\"Gou\",\"Yuan\",\"Die\",\"Xie\",\"Ken\",\"Jiong\",\"Shou\",\"E\",\"Ha\",\"Dian\",\"Hong\",\"Wu\",\"Kua\",,\"Tao\",\"Dang\",\"Kai\",\"Gake\",\"Nao\",\"An\",\"Xing\",\"Xian\",\"Huan\",\"Bang\",\"Pei\",\"Ba\",\"Yi\",\"Yin\",\"Han\",\"Xu\",\"Chui\",\"Cen\",\"Geng\",\"Ai\",\"Peng\",\"Fang\",\"Que\",\"Yong\",\"Xun\",\"Jia\",\"Di\",\"Mai\",\"Lang\",\"Xuan\",\"Cheng\",\"Yan\",\"Jin\",\"Zhe\",\"Lei\",\"Lie\",\"Bu\",\"Cheng\",\"Gomi\",\"Bu\",\"Shi\",\"Xun\",\"Guo\",\"Jiong\",\"Ye\",\"Nian\",\"Di\",\"Yu\",\"Bu\",\"Ya\",\"Juan\",\"Sui\",\"Pi\",\"Cheng\",\"Wan\",\"Ju\",\"Lun\",\"Zheng\",\"Kong\",\"Chong\",\"Dong\",\"Dai\",\"Tan\",\"An\",\"Cai\",\"Shu\",\"Beng\",\"Kan\",\"Zhi\",\"Duo\",\"Yi\",\"Zhi\",\"Yi\",\"Pei\",\"Ji\",\"Zhun\",\"Qi\",\"Sao\",\"Ju\",\"Ni\"],[\"Ku\",\"Ke\",\"Tang\",\"Kun\",\"Ni\",\"Jian\",\"Dui\",\"Jin\",\"Gang\",\"Yu\",\"E\",\"Peng\",\"Gu\",\"Tu\",\"Leng\",,\"Ya\",\"Qian\",,\"An\",,\"Duo\",\"Nao\",\"Tu\",\"Cheng\",\"Yin\",\"Hun\",\"Bi\",\"Lian\",\"Guo\",\"Die\",\"Zhuan\",\"Hou\",\"Bao\",\"Bao\",\"Yu\",\"Di\",\"Mao\",\"Jie\",\"Ruan\",\"E\",\"Geng\",\"Kan\",\"Zong\",\"Yu\",\"Huang\",\"E\",\"Yao\",\"Yan\",\"Bao\",\"Ji\",\"Mei\",\"Chang\",\"Du\",\"Tuo\",\"Yin\",\"Feng\",\"Zhong\",\"Jie\",\"Zhen\",\"Feng\",\"Gang\",\"Chuan\",\"Jian\",\"Pyeng\",\"Toride\",\"Xiang\",\"Huang\",\"Leng\",\"Duan\",,\"Xuan\",\"Ji\",\"Ji\",\"Kuai\",\"Ying\",\"Ta\",\"Cheng\",\"Yong\",\"Kai\",\"Su\",\"Su\",\"Shi\",\"Mi\",\"Ta\",\"Weng\",\"Cheng\",\"Tu\",\"Tang\",\"Que\",\"Zhong\",\"Li\",\"Peng\",\"Bang\",\"Sai\",\"Zang\",\"Dui\",\"Tian\",\"Wu\",\"Cheng\",\"Xun\",\"Ge\",\"Zhen\",\"Ai\",\"Gong\",\"Yan\",\"Kan\",\"Tian\",\"Yuan\",\"Wen\",\"Xie\",\"Liu\",\"Ama\",\"Lang\",\"Chang\",\"Peng\",\"Beng\",\"Chen\",\"Cu\",\"Lu\",\"Ou\",\"Qian\",\"Mei\",\"Mo\",\"Zhuan\",\"Shuang\",\"Shu\",\"Lou\",\"Chi\",\"Man\",\"Biao\",\"Jing\",\"Qi\",\"Shu\",\"Di\",\"Zhang\",\"Kan\",\"Yong\",\"Dian\",\"Chen\",\"Zhi\",\"Xi\",\"Guo\",\"Qiang\",\"Jin\",\"Di\",\"Shang\",\"Mu\",\"Cui\",\"Yan\",\"Ta\",\"Zeng\",\"Qi\",\"Qiang\",\"Liang\",,\"Zhui\",\"Qiao\",\"Zeng\",\"Xu\",\"Shan\",\"Shan\",\"Ba\",\"Pu\",\"Kuai\",\"Dong\",\"Fan\",\"Que\",\"Mo\",\"Dun\",\"Dun\",\"Dun\",\"Di\",\"Sheng\",\"Duo\",\"Duo\",\"Tan\",\"Deng\",\"Wu\",\"Fen\",\"Huang\",\"Tan\",\"Da\",\"Ye\",\"Sho\",\"Mama\",\"Yu\",\"Qiang\",\"Ji\",\"Qiao\",\"Ken\",\"Yi\",\"Pi\",\"Bi\",\"Dian\",\"Jiang\",\"Ye\",\"Yong\",\"Bo\",\"Tan\",\"Lan\",\"Ju\",\"Huai\",\"Dang\",\"Rang\",\"Qian\",\"Xun\",\"Lan\",\"Xi\",\"He\",\"Ai\",\"Ya\",\"Dao\",\"Hao\",\"Ruan\",\"Mama\",\"Lei\",\"Kuang\",\"Lu\",\"Yan\",\"Tan\",\"Wei\",\"Huai\",\"Long\",\"Long\",\"Rui\",\"Li\",\"Lin\",\"Rang\",\"Ten\",\"Xun\",\"Yan\",\"Lei\",\"Ba\",,\"Shi\",\"Ren\",,\"Zhuang\",\"Zhuang\",\"Sheng\",\"Yi\",\"Mai\",\"Ke\",\"Zhu\",\"Zhuang\",\"Hu\",\"Hu\",\"Kun\",\"Yi\",\"Hu\",\"Xu\",\"Kun\",\"Shou\",\"Mang\",\"Zun\"],[\"Shou\",\"Yi\",\"Zhi\",\"Gu\",\"Chu\",\"Jiang\",\"Feng\",\"Bei\",\"Cay\",\"Bian\",\"Sui\",\"Qun\",\"Ling\",\"Fu\",\"Zuo\",\"Xia\",\"Xiong\",,\"Nao\",\"Xia\",\"Kui\",\"Xi\",\"Wai\",\"Yuan\",\"Mao\",\"Su\",\"Duo\",\"Duo\",\"Ye\",\"Qing\",\"Uys\",\"Gou\",\"Gou\",\"Qi\",\"Meng\",\"Meng\",\"Yin\",\"Huo\",\"Chen\",\"Da\",\"Ze\",\"Tian\",\"Tai\",\"Fu\",\"Guai\",\"Yao\",\"Yang\",\"Hang\",\"Gao\",\"Shi\",\"Ben\",\"Tai\",\"Tou\",\"Yan\",\"Bi\",\"Yi\",\"Kua\",\"Jia\",\"Duo\",\"Kwu\",\"Kuang\",\"Yun\",\"Jia\",\"Pa\",\"En\",\"Lian\",\"Huan\",\"Di\",\"Yan\",\"Pao\",\"Quan\",\"Qi\",\"Nai\",\"Feng\",\"Xie\",\"Fen\",\"Dian\",,\"Kui\",\"Zou\",\"Huan\",\"Qi\",\"Kai\",\"Zha\",\"Ben\",\"Yi\",\"Jiang\",\"Tao\",\"Zang\",\"Ben\",\"Xi\",\"Xiang\",\"Fei\",\"Diao\",\"Xun\",\"Keng\",\"Dian\",\"Ao\",\"She\",\"Weng\",\"Pan\",\"Ao\",\"Wu\",\"Ao\",\"Jiang\",\"Lian\",\"Duo\",\"Yun\",\"Jiang\",\"Shi\",\"Fen\",\"Huo\",\"Bi\",\"Lian\",\"Duo\",\"Nu\",\"Nu\",\"Ding\",\"Nai\",\"Qian\",\"Jian\",\"Ta\",\"Jiu\",\"Nan\",\"Cha\",\"Hao\",\"Xian\",\"Fan\",\"Ji\",\"Shuo\",\"Ru\",\"Fei\",\"Wang\",\"Hong\",\"Zhuang\",\"Fu\",\"Ma\",\"Dan\",\"Ren\",\"Fu\",\"Jing\",\"Yan\",\"Xie\",\"Wen\",\"Zhong\",\"Pa\",\"Du\",\"Ji\",\"Keng\",\"Zhong\",\"Yao\",\"Jin\",\"Yun\",\"Miao\",\"Pei\",\"Shi\",\"Yue\",\"Zhuang\",\"Niu\",\"Yan\",\"Na\",\"Xin\",\"Fen\",\"Bi\",\"Yu\",\"Tuo\",\"Feng\",\"Yuan\",\"Fang\",\"Wu\",\"Yu\",\"Gui\",\"Du\",\"Ba\",\"Ni\",\"Zhou\",\"Zhuo\",\"Zhao\",\"Da\",\"Nai\",\"Yuan\",\"Tou\",\"Xuan\",\"Zhi\",\"E\",\"Mei\",\"Mo\",\"Qi\",\"Bi\",\"Shen\",\"Qie\",\"E\",\"He\",\"Xu\",\"Fa\",\"Zheng\",\"Min\",\"Ban\",\"Mu\",\"Fu\",\"Ling\",\"Zi\",\"Zi\",\"Shi\",\"Ran\",\"Shan\",\"Yang\",\"Man\",\"Jie\",\"Gu\",\"Si\",\"Xing\",\"Wei\",\"Zi\",\"Ju\",\"Shan\",\"Pin\",\"Ren\",\"Yao\",\"Tong\",\"Jiang\",\"Shu\",\"Ji\",\"Gai\",\"Shang\",\"Kuo\",\"Juan\",\"Jiao\",\"Gou\",\"Mu\",\"Jian\",\"Jian\",\"Yi\",\"Nian\",\"Zhi\",\"Ji\",\"Ji\",\"Xian\",\"Heng\",\"Guang\",\"Jun\",\"Kua\",\"Yan\",\"Ming\",\"Lie\",\"Pei\",\"Yan\",\"You\",\"Yan\",\"Cha\",\"Shen\",\"Yin\",\"Chi\",\"Gui\",\"Quan\",\"Zi\"],[\"Song\",\"Wei\",\"Hong\",\"Wa\",\"Lou\",\"Ya\",\"Rao\",\"Jiao\",\"Luan\",\"Ping\",\"Xian\",\"Shao\",\"Li\",\"Cheng\",\"Xiao\",\"Mang\",\"Fu\",\"Suo\",\"Wu\",\"Wei\",\"Ke\",\"Lai\",\"Chuo\",\"Ding\",\"Niang\",\"Xing\",\"Nan\",\"Yu\",\"Nuo\",\"Pei\",\"Nei\",\"Juan\",\"Shen\",\"Zhi\",\"Han\",\"Di\",\"Zhuang\",\"E\",\"Pin\",\"Tui\",\"Han\",\"Mian\",\"Wu\",\"Yan\",\"Wu\",\"Xi\",\"Yan\",\"Yu\",\"Si\",\"Yu\",\"Wa\",,\"Xian\",\"Ju\",\"Qu\",\"Shui\",\"Qi\",\"Xian\",\"Zhui\",\"Dong\",\"Chang\",\"Lu\",\"Ai\",\"E\",\"E\",\"Lou\",\"Mian\",\"Cong\",\"Pou\",\"Ju\",\"Po\",\"Cai\",\"Ding\",\"Wan\",\"Biao\",\"Xiao\",\"Shu\",\"Qi\",\"Hui\",\"Fu\",\"E\",\"Wo\",\"Tan\",\"Fei\",\"Wei\",\"Jie\",\"Tian\",\"Ni\",\"Quan\",\"Jing\",\"Hun\",\"Jing\",\"Qian\",\"Dian\",\"Xing\",\"Hu\",\"Wa\",\"Lai\",\"Bi\",\"Yin\",\"Chou\",\"Chuo\",\"Fu\",\"Jing\",\"Lun\",\"Yan\",\"Lan\",\"Kun\",\"Yin\",\"Ya\",\"Ju\",\"Li\",\"Dian\",\"Xian\",\"Hwa\",\"Hua\",\"Ying\",\"Chan\",\"Shen\",\"Ting\",\"Dang\",\"Yao\",\"Wu\",\"Nan\",\"Ruo\",\"Jia\",\"Tou\",\"Xu\",\"Yu\",\"Wei\",\"Ti\",\"Rou\",\"Mei\",\"Dan\",\"Ruan\",\"Qin\",\"Hui\",\"Wu\",\"Qian\",\"Chun\",\"Mao\",\"Fu\",\"Jie\",\"Duan\",\"Xi\",\"Zhong\",\"Mei\",\"Huang\",\"Mian\",\"An\",\"Ying\",\"Xuan\",\"Jie\",\"Wei\",\"Mei\",\"Yuan\",\"Zhen\",\"Qiu\",\"Ti\",\"Xie\",\"Tuo\",\"Lian\",\"Mao\",\"Ran\",\"Si\",\"Pian\",\"Wei\",\"Wa\",\"Jiu\",\"Hu\",\"Ao\",,\"Bou\",\"Xu\",\"Tou\",\"Gui\",\"Zou\",\"Yao\",\"Pi\",\"Xi\",\"Yuan\",\"Ying\",\"Rong\",\"Ru\",\"Chi\",\"Liu\",\"Mei\",\"Pan\",\"Ao\",\"Ma\",\"Gou\",\"Kui\",\"Qin\",\"Jia\",\"Sao\",\"Zhen\",\"Yuan\",\"Cha\",\"Yong\",\"Ming\",\"Ying\",\"Ji\",\"Su\",\"Niao\",\"Xian\",\"Tao\",\"Pang\",\"Lang\",\"Nao\",\"Bao\",\"Ai\",\"Pi\",\"Pin\",\"Yi\",\"Piao\",\"Yu\",\"Lei\",\"Xuan\",\"Man\",\"Yi\",\"Zhang\",\"Kang\",\"Yong\",\"Ni\",\"Li\",\"Di\",\"Gui\",\"Yan\",\"Jin\",\"Zhuan\",\"Chang\",\"Ce\",\"Han\",\"Nen\",\"Lao\",\"Mo\",\"Zhe\",\"Hu\",\"Hu\",\"Ao\",\"Nen\",\"Qiang\",\"Ma\",\"Pie\",\"Gu\",\"Wu\",\"Jiao\",\"Tuo\",\"Zhan\",\"Mao\",\"Xian\",\"Xian\",\"Mo\",\"Liao\",\"Lian\",\"Hua\"],[\"Gui\",\"Deng\",\"Zhi\",\"Xu\",\"Yi\",\"Hua\",\"Xi\",\"Hui\",\"Rao\",\"Xi\",\"Yan\",\"Chan\",\"Jiao\",\"Mei\",\"Fan\",\"Fan\",\"Xian\",\"Yi\",\"Wei\",\"Jiao\",\"Fu\",\"Shi\",\"Bi\",\"Shan\",\"Sui\",\"Qiang\",\"Lian\",\"Huan\",\"Xin\",\"Niao\",\"Dong\",\"Yi\",\"Can\",\"Ai\",\"Niang\",\"Neng\",\"Ma\",\"Tiao\",\"Chou\",\"Jin\",\"Ci\",\"Yu\",\"Pin\",\"Yong\",\"Xu\",\"Nai\",\"Yan\",\"Tai\",\"Ying\",\"Can\",\"Niao\",\"Wo\",\"Ying\",\"Mian\",\"Kaka\",\"Ma\",\"Shen\",\"Xing\",\"Ni\",\"Du\",\"Liu\",\"Yuan\",\"Lan\",\"Yan\",\"Shuang\",\"Ling\",\"Jiao\",\"Niang\",\"Lan\",\"Xian\",\"Ying\",\"Shuang\",\"Shuai\",\"Quan\",\"Mi\",\"Li\",\"Luan\",\"Yan\",\"Zhu\",\"Lan\",\"Zi\",\"Jie\",\"Jue\",\"Jue\",\"Kong\",\"Yun\",\"Zi\",\"Zi\",\"Cun\",\"Sun\",\"Fu\",\"Bei\",\"Zi\",\"Xiao\",\"Xin\",\"Meng\",\"Si\",\"Tai\",\"Bao\",\"Ji\",\"Gu\",\"Nu\",\"Xue\",,\"Zhuan\",\"Hai\",\"Luan\",\"Sun\",\"Huai\",\"Mie\",\"Cong\",\"Qian\",\"Shu\",\"Chan\",\"Ya\",\"Zi\",\"Ni\",\"Fu\",\"Zi\",\"Li\",\"Xue\",\"Bo\",\"Ru\",\"Lai\",\"Nie\",\"Nie\",\"Ying\",\"Luan\",\"Mian\",\"Ning\",\"Rong\",\"Ta\",\"Gui\",\"Zhai\",\"Qiong\",\"Yu\",\"Shou\",\"An\",\"Tu\",\"Song\",\"Wan\",\"Rou\",\"Yao\",\"Hong\",\"Yi\",\"Jing\",\"Zhun\",\"Mi\",\"Zhu\",\"Dang\",\"Hong\",\"Zong\",\"Guan\",\"Zhou\",\"Ding\",\"Wan\",\"Yi\",\"Bao\",\"Shi\",\"Shi\",\"Chong\",\"Shen\",\"Ke\",\"Xuan\",\"Shi\",\"You\",\"Huan\",\"Yi\",\"Tiao\",\"Shi\",\"Xian\",\"Gong\",\"Cheng\",\"Qun\",\"Gong\",\"Xiao\",\"Zai\",\"Zha\",\"Bao\",\"Hai\",\"Yan\",\"Xiao\",\"Jia\",\"Shen\",\"Chen\",\"Rong\",\"Huang\",\"Mi\",\"Kou\",\"Kuan\",\"Bin\",\"Su\",\"Cai\",\"Zan\",\"Ji\",\"Yuan\",\"Ji\",\"Yin\",\"Mi\",\"Kou\",\"Qing\",\"Que\",\"Zhen\",\"Jian\",\"Fu\",\"Ning\",\"Bing\",\"Huan\",\"Mei\",\"Qin\",\"Han\",\"Yu\",\"Shi\",\"Ning\",\"Qin\",\"Ning\",\"Zhi\",\"Yu\",\"Bao\",\"Kuan\",\"Ning\",\"Qin\",\"Mo\",\"Cha\",\"Ju\",\"Gua\",\"Qin\",\"Hu\",\"Wu\",\"Liao\",\"Shi\",\"Zhu\",\"Zhai\",\"Shen\",\"Wei\",\"Xie\",\"Kuan\",\"Hui\",\"Liao\",\"Jun\",\"Huan\",\"Yi\",\"Yi\",\"Bao\",\"Qin\",\"Chong\",\"Bao\",\"Feng\",\"Cun\",\"Dui\",\"Si\",\"Xun\",\"Dao\",\"Lu\",\"Dui\",\"Shou\"],[\"Po\",\"Feng\",\"Zhuan\",\"Fu\",\"She\",\"Ke\",\"Jiang\",\"Jiang\",\"Zhuan\",\"Wei\",\"Zun\",\"Xun\",\"Shu\",\"Dui\",\"Dao\",\"Xiao\",\"Ji\",\"Shao\",\"Er\",\"Er\",\"Er\",\"Ga\",\"Jian\",\"Shu\",\"Chen\",\"Shang\",\"Shang\",\"Mo\",\"Ga\",\"Chang\",\"Liao\",\"Xian\",\"Xian\",,\"Wang\",\"Wang\",\"You\",\"Liao\",\"Liao\",\"Yao\",\"Mang\",\"Wang\",\"Wang\",\"Wang\",\"Ga\",\"Yao\",\"Duo\",\"Kui\",\"Zhong\",\"Jiu\",\"Gan\",\"Gu\",\"Gan\",\"Tui\",\"Gan\",\"Gan\",\"Shi\",\"Yin\",\"Chi\",\"Kao\",\"Ni\",\"Jin\",\"Wei\",\"Niao\",\"Ju\",\"Pi\",\"Ceng\",\"Xi\",\"Bi\",\"Ju\",\"Jie\",\"Tian\",\"Qu\",\"Ti\",\"Jie\",\"Wu\",\"Diao\",\"Shi\",\"Shi\",\"Ping\",\"Ji\",\"Xie\",\"Chen\",\"Xi\",\"Ni\",\"Zhan\",\"Xi\",,\"Man\",\"E\",\"Lou\",\"Ping\",\"Ti\",\"Fei\",\"Shu\",\"Xie\",\"Tu\",\"Lu\",\"Lu\",\"Xi\",\"Ceng\",\"Lu\",\"Ju\",\"Xie\",\"Ju\",\"Jue\",\"Liao\",\"Jue\",\"Shu\",\"Xi\",\"Che\",\"Tun\",\"Ni\",\"Shan\",,\"Xian\",\"Li\",\"Xue\",\"Nata\",,\"Long\",\"Yi\",\"Qi\",\"Ren\",\"Wu\",\"Han\",\"Shen\",\"Yu\",\"Chu\",\"Sui\",\"Qi\",,\"Yue\",\"Ban\",\"Yao\",\"Ang\",\"Ya\",\"Wu\",\"Jie\",\"E\",\"Ji\",\"Qian\",\"Fen\",\"Yuan\",\"Qi\",\"Cen\",\"Qian\",\"Qi\",\"Cha\",\"Jie\",\"Qu\",\"Gang\",\"Xian\",\"Ao\",\"Lan\",\"Dao\",\"Ba\",\"Zuo\",\"Zuo\",\"Yang\",\"Ju\",\"Gang\",\"Ke\",\"Gou\",\"Xue\",\"Bei\",\"Li\",\"Tiao\",\"Ju\",\"Yan\",\"Fu\",\"Xiu\",\"Jia\",\"Ling\",\"Tuo\",\"Pei\",\"You\",\"Dai\",\"Kuang\",\"Yue\",\"Qu\",\"Hu\",\"Po\",\"Min\",\"An\",\"Tiao\",\"Ling\",\"Chi\",\"Yuri\",\"Dong\",\"Cem\",\"Kui\",\"Xiu\",\"Mao\",\"Tong\",\"Xue\",\"Yi\",\"Kura\",\"He\",\"Ke\",\"Luo\",\"E\",\"Fu\",\"Xun\",\"Die\",\"Lu\",\"An\",\"Er\",\"Gai\",\"Quan\",\"Tong\",\"Yi\",\"Mu\",\"Shi\",\"An\",\"Wei\",\"Hu\",\"Zhi\",\"Mi\",\"Li\",\"Ji\",\"Tong\",\"Wei\",\"You\",\"Sang\",\"Xia\",\"Li\",\"Yao\",\"Jiao\",\"Zheng\",\"Luan\",\"Jiao\",\"E\",\"E\",\"Yu\",\"Ye\",\"Bu\",\"Qiao\",\"Qun\",\"Feng\",\"Feng\",\"Nao\",\"Li\",\"You\",\"Xian\",\"Hong\",\"Dao\",\"Shen\",\"Cheng\",\"Tu\",\"Geng\",\"Jun\",\"Hao\",\"Xia\",\"Yin\",\"Yu\"],[\"Lang\",\"Kan\",\"Lao\",\"Lai\",\"Xian\",\"Que\",\"Kong\",\"Chong\",\"Chong\",\"Ta\",\"Lin\",\"Hua\",\"Ju\",\"Lai\",\"Qi\",\"Min\",\"Kun\",\"Kun\",\"Zu\",\"Gu\",\"Cui\",\"Ya\",\"Ya\",\"Gang\",\"Lun\",\"Lun\",\"Leng\",\"Jue\",\"Duo\",\"Zheng\",\"Guo\",\"Yin\",\"Dong\",\"Han\",\"Zheng\",\"Wei\",\"Yao\",\"Pi\",\"Yan\",\"Song\",\"Jie\",\"Beng\",\"Zu\",\"Jue\",\"Dong\",\"Zhan\",\"Gu\",\"Yin\",,\"Ze\",\"Huang\",\"Yu\",\"Wei\",\"Yang\",\"Feng\",\"Qiu\",\"Dun\",\"Ti\",\"Yi\",\"Zhi\",\"Shi\",\"Zai\",\"Yao\",\"E\",\"Zhu\",\"Kan\",\"Lu\",\"Yan\",\"Mei\",\"Gan\",\"Ji\",\"Ji\",\"Huan\",\"Ting\",\"Sheng\",\"Mei\",\"Qian\",\"Wu\",\"Yu\",\"Zong\",\"Lan\",\"Jue\",\"Yan\",\"Yan\",\"Wei\",\"Zong\",\"Cha\",\"Sui\",\"Rong\",\"Yamashina\",\"Qin\",\"Yu\",\"Kewashii\",\"Lou\",\"Tu\",\"Dui\",\"Xi\",\"Weng\",\"Cang\",\"Dang\",\"Hong\",\"Jie\",\"Ai\",\"Liu\",\"Wu\",\"Song\",\"Qiao\",\"Zi\",\"Wei\",\"Beng\",\"Dian\",\"Cuo\",\"Qian\",\"Yong\",\"Nie\",\"Cuo\",\"Ji\",,\"Tao\",\"Song\",\"Zong\",\"Jiang\",\"Liao\",\"Kang\",\"Chan\",\"Die\",\"Cen\",\"Ding\",\"Tu\",\"Lou\",\"Zhang\",\"Zhan\",\"Zhan\",\"Ao\",\"Cao\",\"Qu\",\"Qiang\",\"Zui\",\"Zui\",\"Dao\",\"Dao\",\"Xi\",\"Yu\",\"Bo\",\"Long\",\"Xiang\",\"Ceng\",\"Bo\",\"Qin\",\"Jiao\",\"Yan\",\"Lao\",\"Zhan\",\"Lin\",\"Liao\",\"Liao\",\"Jin\",\"Deng\",\"Duo\",\"Zun\",\"Jiao\",\"Gui\",\"Yao\",\"Qiao\",\"Yao\",\"Jue\",\"Zhan\",\"Yi\",\"Xue\",\"Nao\",\"Ye\",\"Ye\",\"Yi\",\"E\",\"Xian\",\"Ji\",\"Xie\",\"Ke\",\"Xi\",\"Di\",\"Ao\",\"Zui\",,\"Ni\",\"Rong\",\"Dao\",\"Ling\",\"Za\",\"Yu\",\"Yue\",\"Yin\",,\"Jie\",\"Li\",\"Sui\",\"Long\",\"Long\",\"Dian\",\"Ying\",\"Xi\",\"Ju\",\"Chan\",\"Ying\",\"Kui\",\"Yan\",\"Wei\",\"Nao\",\"Quan\",\"Chao\",\"Cuan\",\"Luan\",\"Dian\",\"Dian\",,\"Yan\",\"Yan\",\"Yan\",\"Nao\",\"Yan\",\"Chuan\",\"Gui\",\"Chuan\",\"Zhou\",\"Huang\",\"Jing\",\"Xun\",\"Chao\",\"Chao\",\"Lie\",\"Gong\",\"Zuo\",\"Qiao\",\"Ju\",\"Gong\",\"Kek\",\"Wu\",\"Pwu\",\"Pwu\",\"Chai\",\"Qiu\",\"Qiu\",\"Ji\",\"Yi\",\"Si\",\"Ba\",\"Zhi\",\"Zhao\",\"Xiang\",\"Yi\",\"Jin\",\"Xun\",\"Juan\",\"Phas\",\"Xun\",\"Jin\",\"Fu\"],[\"Za\",\"Bi\",\"Shi\",\"Bu\",\"Ding\",\"Shuai\",\"Fan\",\"Nie\",\"Shi\",\"Fen\",\"Pa\",\"Zhi\",\"Xi\",\"Hu\",\"Dan\",\"Wei\",\"Zhang\",\"Tang\",\"Dai\",\"Ma\",\"Pei\",\"Pa\",\"Tie\",\"Fu\",\"Lian\",\"Zhi\",\"Zhou\",\"Bo\",\"Zhi\",\"Di\",\"Mo\",\"Yi\",\"Yi\",\"Ping\",\"Qia\",\"Juan\",\"Ru\",\"Shuai\",\"Dai\",\"Zheng\",\"Shui\",\"Qiao\",\"Zhen\",\"Shi\",\"Qun\",\"Xi\",\"Bang\",\"Dai\",\"Gui\",\"Chou\",\"Ping\",\"Zhang\",\"Sha\",\"Wan\",\"Dai\",\"Wei\",\"Chang\",\"Sha\",\"Qi\",\"Ze\",\"Guo\",\"Mao\",\"Du\",\"Hou\",\"Zheng\",\"Xu\",\"Mi\",\"Wei\",\"Wo\",\"Fu\",\"Yi\",\"Bang\",\"Ping\",\"Tazuna\",\"Gong\",\"Pan\",\"Huang\",\"Dao\",\"Mi\",\"Jia\",\"Teng\",\"Hui\",\"Zhong\",\"Shan\",\"Man\",\"Mu\",\"Biao\",\"Guo\",\"Ze\",\"Mu\",\"Bang\",\"Zhang\",\"Jiong\",\"Chan\",\"Fu\",\"Zhi\",\"Hu\",\"Fan\",\"Chuang\",\"Bi\",\"Hei\",,\"Mi\",\"Qiao\",\"Chan\",\"Fen\",\"Meng\",\"Bang\",\"Chou\",\"Mie\",\"Chu\",\"Jie\",\"Xian\",\"Lan\",\"Gan\",\"Ping\",\"Nian\",\"Qian\",\"Bing\",\"Bing\",\"Xing\",\"Gan\",\"Yao\",\"Huan\",\"You\",\"You\",\"Ji\",\"Guang\",\"Pi\",\"Ting\",\"Ze\",\"Guang\",\"Zhuang\",\"Mo\",\"Qing\",\"Bi\",\"Qin\",\"Dun\",\"Chuang\",\"Gui\",\"Ya\",\"Bai\",\"Jie\",\"Xu\",\"Lu\",\"Wu\",,\"Ku\",\"Ying\",\"Di\",\"Pao\",\"Dian\",\"Ya\",\"Miao\",\"Geng\",\"Ci\",\"Fu\",\"Tong\",\"Pang\",\"Fei\",\"Xiang\",\"Yi\",\"Zhi\",\"Tiao\",\"Zhi\",\"Xiu\",\"Du\",\"Zuo\",\"Xiao\",\"Tu\",\"Gui\",\"Ku\",\"Pang\",\"Ting\",\"You\",\"Bu\",\"Ding\",\"Cheng\",\"Lai\",\"Bei\",\"Ji\",\"An\",\"Shu\",\"Kang\",\"Yong\",\"Tuo\",\"Song\",\"Shu\",\"Qing\",\"Yu\",\"Yu\",\"Miao\",\"Sou\",\"Ce\",\"Xiang\",\"Fei\",\"Jiu\",\"He\",\"Hui\",\"Liu\",\"Sha\",\"Lian\",\"Lang\",\"Sou\",\"Jian\",\"Pou\",\"Qing\",\"Jiu\",\"Jiu\",\"Qin\",\"Ao\",\"Kuo\",\"Lou\",\"Yin\",\"Liao\",\"Dai\",\"Lu\",\"Yi\",\"Chu\",\"Chan\",\"Tu\",\"Si\",\"Xin\",\"Miao\",\"Chang\",\"Wu\",\"Fei\",\"Guang\",\"Koc\",\"Kuai\",\"Bi\",\"Qiang\",\"Xie\",\"Lin\",\"Lin\",\"Liao\",\"Lu\",,\"Ying\",\"Xian\",\"Ting\",\"Yong\",\"Li\",\"Ting\",\"Yin\",\"Xun\",\"Yan\",\"Ting\",\"Di\",\"Po\",\"Jian\",\"Hui\",\"Nai\",\"Hui\",\"Gong\",\"Nian\"],[\"Kai\",\"Bian\",\"Yi\",\"Qi\",\"Nong\",\"Fen\",\"Ju\",\"Yan\",\"Yi\",\"Zang\",\"Bi\",\"Yi\",\"Yi\",\"Er\",\"San\",\"Shi\",\"Er\",\"Shi\",\"Shi\",\"Gong\",\"Diao\",\"Yin\",\"Hu\",\"Fu\",\"Hong\",\"Wu\",\"Tui\",\"Chi\",\"Jiang\",\"Ba\",\"Shen\",\"Di\",\"Zhang\",\"Jue\",\"Tao\",\"Fu\",\"Di\",\"Mi\",\"Xian\",\"Hu\",\"Chao\",\"Nu\",\"Jing\",\"Zhen\",\"Yi\",\"Mi\",\"Quan\",\"Wan\",\"Shao\",\"Ruo\",\"Xuan\",\"Jing\",\"Dun\",\"Zhang\",\"Jiang\",\"Qiang\",\"Peng\",\"Dan\",\"Qiang\",\"Bi\",\"Bi\",\"She\",\"Dan\",\"Jian\",\"Gou\",\"Sei\",\"Fa\",\"Bi\",\"Kou\",\"Nagi\",\"Bie\",\"Xiao\",\"Dan\",\"Kuo\",\"Qiang\",\"Hong\",\"Mi\",\"Kuo\",\"Wan\",\"Jue\",\"Ji\",\"Ji\",\"Gui\",\"Dang\",\"Lu\",\"Lu\",\"Tuan\",\"Hui\",\"Zhi\",\"Hui\",\"Hui\",\"Yi\",\"Yi\",\"Yi\",\"Yi\",\"Huo\",\"Huo\",\"Shan\",\"Xing\",\"Wen\",\"Tong\",\"Yan\",\"Yan\",\"Yu\",\"Chi\",\"Cai\",\"Biao\",\"Diao\",\"Bin\",\"Peng\",\"Yong\",\"Piao\",\"Zhang\",\"Ying\",\"Chi\",\"Chi\",\"Zhuo\",\"Tuo\",\"Ji\",\"Pang\",\"Zhong\",\"Yi\",\"Wang\",\"Che\",\"Bi\",\"Chi\",\"Ling\",\"Fu\",\"Wang\",\"Zheng\",\"Cu\",\"Wang\",\"Jing\",\"Dai\",\"Xi\",\"Xun\",\"Hen\",\"Yang\",\"Huai\",\"Lu\",\"Hou\",\"Wa\",\"Cheng\",\"Zhi\",\"Xu\",\"Jing\",\"Tu\",\"Cong\",,\"Lai\",\"Cong\",\"De\",\"Pai\",\"Xi\",,\"Qi\",\"Chang\",\"Zhi\",\"Cong\",\"Zhou\",\"Lai\",\"Yu\",\"Xie\",\"Jie\",\"Jian\",\"Chi\",\"Jia\",\"Bian\",\"Huang\",\"Fu\",\"Xun\",\"Wei\",\"Pang\",\"Yao\",\"Wei\",\"Xi\",\"Zheng\",\"Piao\",\"Chi\",\"De\",\"Zheng\",\"Zheng\",\"Bie\",\"De\",\"Chong\",\"Che\",\"Jiao\",\"Wei\",\"Jiao\",\"Hui\",\"Mei\",\"Long\",\"Xiang\",\"Bao\",\"Qu\",\"Xin\",\"Shu\",\"Bi\",\"Yi\",\"Le\",\"Ren\",\"Dao\",\"Ding\",\"Gai\",\"Ji\",\"Ren\",\"Ren\",\"Chan\",\"Tan\",\"Te\",\"Te\",\"Gan\",\"Qi\",\"Shi\",\"Cun\",\"Zhi\",\"Wang\",\"Mang\",\"Xi\",\"Fan\",\"Ying\",\"Tian\",\"Min\",\"Min\",\"Zhong\",\"Chong\",\"Wu\",\"Ji\",\"Wu\",\"Xi\",\"Ye\",\"You\",\"Wan\",\"Cong\",\"Zhong\",\"Kuai\",\"Yu\",\"Bian\",\"Zhi\",\"Qi\",\"Cui\",\"Chen\",\"Tai\",\"Tun\",\"Qian\",\"Nian\",\"Hun\",\"Xiong\",\"Niu\",\"Wang\",\"Xian\",\"Xin\",\"Kang\",\"Hu\",\"Kai\",\"Fen\"],[\"Huai\",\"Tai\",\"Song\",\"Wu\",\"Ou\",\"Chang\",\"Chuang\",\"Ju\",\"Yi\",\"Bao\",\"Chao\",\"Min\",\"Pei\",\"Zuo\",\"Zen\",\"Yang\",\"Kou\",\"Ban\",\"Nu\",\"Nao\",\"Zheng\",\"Pa\",\"Bu\",\"Tie\",\"Gu\",\"Hu\",\"Ju\",\"Da\",\"Lian\",\"Si\",\"Chou\",\"Di\",\"Dai\",\"Yi\",\"Tu\",\"You\",\"Fu\",\"Ji\",\"Peng\",\"Xing\",\"Yuan\",\"Ni\",\"Guai\",\"Fu\",\"Xi\",\"Bi\",\"You\",\"Qie\",\"Xuan\",\"Cong\",\"Bing\",\"Huang\",\"Xu\",\"Chu\",\"Pi\",\"Xi\",\"Xi\",\"Tan\",\"Koraeru\",\"Zong\",\"Dui\",,\"Ki\",\"Yi\",\"Chi\",\"Ren\",\"Xun\",\"Shi\",\"Xi\",\"Lao\",\"Heng\",\"Kuang\",\"Mu\",\"Zhi\",\"Xie\",\"Lian\",\"Tiao\",\"Huang\",\"Die\",\"Hao\",\"Kong\",\"Gui\",\"Heng\",\"Xi\",\"Xiao\",\"Shu\",\"S\",\"Kua\",\"Qiu\",\"Yang\",\"Hui\",\"Hui\",\"Chi\",\"Jia\",\"Yi\",\"Xiong\",\"Guai\",\"Lin\",\"Hui\",\"Zi\",\"Xu\",\"Chi\",\"Xiang\",\"Nu\",\"Hen\",\"En\",\"Ke\",\"Tong\",\"Tian\",\"Gong\",\"Quan\",\"Xi\",\"Qia\",\"Yue\",\"Peng\",\"Ken\",\"De\",\"Hui\",\"E\",\"Kyuu\",\"Tong\",\"Yan\",\"Kai\",\"Ce\",\"Nao\",\"Yun\",\"Mang\",\"Yong\",\"Yong\",\"Yuan\",\"Pi\",\"Kun\",\"Qiao\",\"Yue\",\"Yu\",\"Yu\",\"Jie\",\"Xi\",\"Zhe\",\"Lin\",\"Ti\",\"Han\",\"Hao\",\"Qie\",\"Ti\",\"Bu\",\"Yi\",\"Qian\",\"Hui\",\"Xi\",\"Bei\",\"Man\",\"Yi\",\"Heng\",\"Song\",\"Quan\",\"Cheng\",\"Hui\",\"Wu\",\"Wu\",\"You\",\"Li\",\"Liang\",\"Huan\",\"Cong\",\"Yi\",\"Yue\",\"Li\",\"Nin\",\"Nao\",\"E\",\"Que\",\"Xuan\",\"Qian\",\"Wu\",\"Min\",\"Cong\",\"Fei\",\"Bei\",\"Duo\",\"Cui\",\"Chang\",\"Men\",\"Li\",\"Ji\",\"Guan\",\"Guan\",\"Xing\",\"Dao\",\"Qi\",\"Kong\",\"Tian\",\"Lun\",\"Xi\",\"Kan\",\"Kun\",\"Ni\",\"Qing\",\"Chou\",\"Dun\",\"Guo\",\"Chan\",\"Liang\",\"Wan\",\"Yuan\",\"Jin\",\"Ji\",\"Lin\",\"Yu\",\"Huo\",\"He\",\"Quan\",\"Tan\",\"Ti\",\"Ti\",\"Nie\",\"Wang\",\"Chuo\",\"Bu\",\"Hun\",\"Xi\",\"Tang\",\"Xin\",\"Wei\",\"Hui\",\"E\",\"Rui\",\"Zong\",\"Jian\",\"Yong\",\"Dian\",\"Ju\",\"Can\",\"Cheng\",\"De\",\"Bei\",\"Qie\",\"Can\",\"Dan\",\"Guan\",\"Duo\",\"Nao\",\"Yun\",\"Xiang\",\"Zhui\",\"Die\",\"Huang\",\"Chun\",\"Qiong\",\"Re\",\"Xing\",\"Ce\",\"Bian\",\"Hun\",\"Zong\",\"Ti\"],[\"Qiao\",\"Chou\",\"Bei\",\"Xuan\",\"Wei\",\"Ge\",\"Qian\",\"Wei\",\"Yu\",\"Yu\",\"Bi\",\"Xuan\",\"Huan\",\"Min\",\"Bi\",\"Yi\",\"Mian\",\"Yong\",\"Kai\",\"Dang\",\"Yin\",\"E\",\"Chen\",\"Mou\",\"Ke\",\"Ke\",\"Yu\",\"Ai\",\"Qie\",\"Yan\",\"Nuo\",\"Gan\",\"Yun\",\"Zong\",\"Sai\",\"Leng\",\"Fen\",,\"Kui\",\"Kui\",\"Que\",\"Gong\",\"Yun\",\"Su\",\"Su\",\"Qi\",\"Yao\",\"Song\",\"Huang\",\"Ji\",\"Gu\",\"Ju\",\"Chuang\",\"Ni\",\"Xie\",\"Kai\",\"Zheng\",\"Yong\",\"Cao\",\"Sun\",\"Shen\",\"Bo\",\"Kai\",\"Yuan\",\"Xie\",\"Hun\",\"Yong\",\"Yang\",\"Li\",\"Sao\",\"Tao\",\"Yin\",\"Ci\",\"Xu\",\"Qian\",\"Tai\",\"Huang\",\"Yun\",\"Shen\",\"Ming\",,\"She\",\"Cong\",\"Piao\",\"Mo\",\"Mu\",\"Guo\",\"Chi\",\"Can\",\"Can\",\"Can\",\"Cui\",\"Min\",\"Te\",\"Zhang\",\"Tong\",\"Ao\",\"Shuang\",\"Man\",\"Guan\",\"Que\",\"Zao\",\"Jiu\",\"Hui\",\"Kai\",\"Lian\",\"Ou\",\"Song\",\"Jin\",\"Yin\",\"Lu\",\"Shang\",\"Wei\",\"Tuan\",\"Man\",\"Qian\",\"She\",\"Yong\",\"Qing\",\"Kang\",\"Di\",\"Zhi\",\"Lou\",\"Juan\",\"Qi\",\"Qi\",\"Yu\",\"Ping\",\"Liao\",\"Cong\",\"You\",\"Chong\",\"Zhi\",\"Tong\",\"Cheng\",\"Qi\",\"Qu\",\"Peng\",\"Bei\",\"Bie\",\"Chun\",\"Jiao\",\"Zeng\",\"Chi\",\"Lian\",\"Ping\",\"Kui\",\"Hui\",\"Qiao\",\"Cheng\",\"Yin\",\"Yin\",\"Xi\",\"Xi\",\"Dan\",\"Tan\",\"Duo\",\"Dui\",\"Dui\",\"Su\",\"Jue\",\"Ce\",\"Xiao\",\"Fan\",\"Fen\",\"Lao\",\"Lao\",\"Chong\",\"Han\",\"Qi\",\"Xian\",\"Min\",\"Jing\",\"Liao\",\"Wu\",\"Can\",\"Jue\",\"Cu\",\"Xian\",\"Tan\",\"Sheng\",\"Pi\",\"Yi\",\"Chu\",\"Xian\",\"Nao\",\"Dan\",\"Tan\",\"Jing\",\"Song\",\"Han\",\"Jiao\",\"Wai\",\"Huan\",\"Dong\",\"Qin\",\"Qin\",\"Qu\",\"Cao\",\"Ken\",\"Xie\",\"Ying\",\"Ao\",\"Mao\",\"Yi\",\"Lin\",\"Se\",\"Jun\",\"Huai\",\"Men\",\"Lan\",\"Ai\",\"Lin\",\"Yan\",\"Gua\",\"Xia\",\"Chi\",\"Yu\",\"Yin\",\"Dai\",\"Meng\",\"Ai\",\"Meng\",\"Dui\",\"Qi\",\"Mo\",\"Lan\",\"Men\",\"Chou\",\"Zhi\",\"Nuo\",\"Nuo\",\"Yan\",\"Yang\",\"Bo\",\"Zhi\",\"Kuang\",\"Kuang\",\"You\",\"Fu\",\"Liu\",\"Mie\",\"Cheng\",,\"Chan\",\"Meng\",\"Lan\",\"Huai\",\"Xuan\",\"Rang\",\"Chan\",\"Ji\",\"Ju\",\"Huan\",\"She\",\"Yi\"],[\"Lian\",\"Nan\",\"Mi\",\"Tang\",\"Jue\",\"Gang\",\"Gang\",\"Gang\",\"Ge\",\"Yue\",\"Wu\",\"Jian\",\"Xu\",\"Shu\",\"Rong\",\"Xi\",\"Cheng\",\"Wo\",\"Jie\",\"Ge\",\"Jian\",\"Qiang\",\"Huo\",\"Qiang\",\"Zhan\",\"Dong\",\"Qi\",\"Jia\",\"Die\",\"Zei\",\"Jia\",\"Ji\",\"Shi\",\"Kan\",\"Ji\",\"Kui\",\"Gai\",\"Deng\",\"Zhan\",\"Chuang\",\"Ge\",\"Jian\",\"Jie\",\"Yu\",\"Jian\",\"Yan\",\"Lu\",\"Xi\",\"Zhan\",\"Xi\",\"Xi\",\"Chuo\",\"Dai\",\"Qu\",\"Hu\",\"Hu\",\"Hu\",\"E\",\"Shi\",\"Li\",\"Mao\",\"Hu\",\"Li\",\"Fang\",\"Suo\",\"Bian\",\"Dian\",\"Jiong\",\"Shang\",\"Yi\",\"Yi\",\"Shan\",\"Hu\",\"Fei\",\"Yan\",\"Shou\",\"T\",\"Cai\",\"Zha\",\"Qiu\",\"Le\",\"Bu\",\"Ba\",\"Da\",\"Reng\",\"Fu\",\"Hameru\",\"Zai\",\"Tuo\",\"Zhang\",\"Diao\",\"Kang\",\"Yu\",\"Ku\",\"Han\",\"Shen\",\"Cha\",\"Yi\",\"Gu\",\"Kou\",\"Wu\",\"Tuo\",\"Qian\",\"Zhi\",\"Ren\",\"Kuo\",\"Men\",\"Sao\",\"Yang\",\"Niu\",\"Ban\",\"Che\",\"Rao\",\"Xi\",\"Qian\",\"Ban\",\"Jia\",\"Yu\",\"Fu\",\"Ao\",\"Xi\",\"Pi\",\"Zhi\",\"Zi\",\"E\",\"Dun\",\"Zhao\",\"Cheng\",\"Ji\",\"Yan\",\"Kuang\",\"Bian\",\"Chao\",\"Ju\",\"Wen\",\"Hu\",\"Yue\",\"Jue\",\"Ba\",\"Qin\",\"Zhen\",\"Zheng\",\"Yun\",\"Wan\",\"Nu\",\"Yi\",\"Shu\",\"Zhua\",\"Pou\",\"Tou\",\"Dou\",\"Kang\",\"Zhe\",\"Pou\",\"Fu\",\"Pao\",\"Ba\",\"Ao\",\"Ze\",\"Tuan\",\"Kou\",\"Lun\",\"Qiang\",,\"Hu\",\"Bao\",\"Bing\",\"Zhi\",\"Peng\",\"Tan\",\"Pu\",\"Pi\",\"Tai\",\"Yao\",\"Zhen\",\"Zha\",\"Yang\",\"Bao\",\"He\",\"Ni\",\"Yi\",\"Di\",\"Chi\",\"Pi\",\"Za\",\"Mo\",\"Mo\",\"Shen\",\"Ya\",\"Chou\",\"Qu\",\"Min\",\"Chu\",\"Jia\",\"Fu\",\"Zhan\",\"Zhu\",\"Dan\",\"Chai\",\"Mu\",\"Nian\",\"La\",\"Fu\",\"Pao\",\"Ban\",\"Pai\",\"Ling\",\"Na\",\"Guai\",\"Qian\",\"Ju\",\"Tuo\",\"Ba\",\"Tuo\",\"Tuo\",\"Ao\",\"Ju\",\"Zhuo\",\"Pan\",\"Zhao\",\"Bai\",\"Bai\",\"Di\",\"Ni\",\"Ju\",\"Kuo\",\"Long\",\"Jian\",,\"Yong\",\"Lan\",\"Ning\",\"Bo\",\"Ze\",\"Qian\",\"Hen\",\"Gua\",\"Shi\",\"Jie\",\"Zheng\",\"Nin\",\"Gong\",\"Gong\",\"Quan\",\"Shuan\",\"Cun\",\"Zan\",\"Kao\",\"Chi\",\"Xie\",\"Ce\",\"Hui\",\"Pin\",\"Zhuai\",\"Shi\",\"Na\"],[\"Bo\",\"Chi\",\"Gua\",\"Zhi\",\"Kuo\",\"Duo\",\"Duo\",\"Zhi\",\"Qie\",\"An\",\"Nong\",\"Zhen\",\"Ge\",\"Jiao\",\"Ku\",\"Dong\",\"Ru\",\"Tiao\",\"Lie\",\"Zha\",\"Lu\",\"Die\",\"Wa\",\"Jue\",\"Mushiru\",\"Ju\",\"Zhi\",\"Luan\",\"Ya\",\"Zhua\",\"Ta\",\"Xie\",\"Nao\",\"Dang\",\"Jiao\",\"Zheng\",\"Ji\",\"Hui\",\"Xun\",\"Ku\",\"Ai\",\"Tuo\",\"Nuo\",\"Cuo\",\"Bo\",\"Geng\",\"Ti\",\"Zhen\",\"Cheng\",\"Suo\",\"Suo\",\"Keng\",\"Mei\",\"Long\",\"Ju\",\"Peng\",\"Jian\",\"Yi\",\"Ting\",\"Shan\",\"Nuo\",\"Wan\",\"Xie\",\"Cha\",\"Feng\",\"Jiao\",\"Wu\",\"Jun\",\"Jiu\",\"Tong\",\"Kun\",\"Huo\",\"Tu\",\"Zhuo\",\"Pou\",\"Le\",\"Ba\",\"Han\",\"Shao\",\"Nie\",\"Juan\",\"Ze\",\"Song\",\"Ye\",\"Jue\",\"Bu\",\"Huan\",\"Bu\",\"Zun\",\"Yi\",\"Zhai\",\"Lu\",\"Sou\",\"Tuo\",\"Lao\",\"Sun\",\"Bang\",\"Jian\",\"Huan\",\"Dao\",,\"Wan\",\"Qin\",\"Peng\",\"She\",\"Lie\",\"Min\",\"Men\",\"Fu\",\"Bai\",\"Ju\",\"Dao\",\"Wo\",\"Ai\",\"Juan\",\"Yue\",\"Zong\",\"Chen\",\"Chui\",\"Jie\",\"Tu\",\"Ben\",\"Na\",\"Nian\",\"Nuo\",\"Zu\",\"Wo\",\"Xi\",\"Xian\",\"Cheng\",\"Dian\",\"Sao\",\"Lun\",\"Qing\",\"Gang\",\"Duo\",\"Shou\",\"Diao\",\"Pou\",\"Di\",\"Zhang\",\"Gun\",\"Ji\",\"Tao\",\"Qia\",\"Qi\",\"Pai\",\"Shu\",\"Qian\",\"Ling\",\"Yi\",\"Ya\",\"Jue\",\"Zheng\",\"Liang\",\"Gua\",\"Yi\",\"Huo\",\"Shan\",\"Zheng\",\"Lue\",\"Cai\",\"Tan\",\"Che\",\"Bing\",\"Jie\",\"Ti\",\"Kong\",\"Tui\",\"Yan\",\"Cuo\",\"Zou\",\"Ju\",\"Tian\",\"Qian\",\"Ken\",\"Bai\",\"Shou\",\"Jie\",\"Lu\",\"Guo\",\"Haba\",,\"Zhi\",\"Dan\",\"Mang\",\"Xian\",\"Sao\",\"Guan\",\"Peng\",\"Yuan\",\"Nuo\",\"Jian\",\"Zhen\",\"Jiu\",\"Jian\",\"Yu\",\"Yan\",\"Kui\",\"Nan\",\"Hong\",\"Rou\",\"Pi\",\"Wei\",\"Sai\",\"Zou\",\"Xuan\",\"Miao\",\"Ti\",\"Nie\",\"Cha\",\"Shi\",\"Zong\",\"Zhen\",\"Yi\",\"Shun\",\"Heng\",\"Bian\",\"Yang\",\"Huan\",\"Yan\",\"Zuan\",\"An\",\"Xu\",\"Ya\",\"Wo\",\"Ke\",\"Chuai\",\"Ji\",\"Ti\",\"La\",\"La\",\"Cheng\",\"Kai\",\"Jiu\",\"Jiu\",\"Tu\",\"Jie\",\"Hui\",\"Geng\",\"Chong\",\"Shuo\",\"She\",\"Xie\",\"Yuan\",\"Qian\",\"Ye\",\"Cha\",\"Zha\",\"Bei\",\"Yao\",,,\"Lan\",\"Wen\",\"Qin\"],[\"Chan\",\"Ge\",\"Lou\",\"Zong\",\"Geng\",\"Jiao\",\"Gou\",\"Qin\",\"Yong\",\"Que\",\"Chou\",\"Chi\",\"Zhan\",\"Sun\",\"Sun\",\"Bo\",\"Chu\",\"Rong\",\"Beng\",\"Cuo\",\"Sao\",\"Ke\",\"Yao\",\"Dao\",\"Zhi\",\"Nu\",\"Xie\",\"Jian\",\"Sou\",\"Qiu\",\"Gao\",\"Xian\",\"Shuo\",\"Sang\",\"Jin\",\"Mie\",\"E\",\"Chui\",\"Nuo\",\"Shan\",\"Ta\",\"Jie\",\"Tang\",\"Pan\",\"Ban\",\"Da\",\"Li\",\"Tao\",\"Hu\",\"Zhi\",\"Wa\",\"Xia\",\"Qian\",\"Wen\",\"Qiang\",\"Tian\",\"Zhen\",\"E\",\"Xi\",\"Nuo\",\"Quan\",\"Cha\",\"Zha\",\"Ge\",\"Wu\",\"En\",\"She\",\"Kang\",\"She\",\"Shu\",\"Bai\",\"Yao\",\"Bin\",\"Sou\",\"Tan\",\"Sa\",\"Chan\",\"Suo\",\"Liao\",\"Chong\",\"Chuang\",\"Guo\",\"Bing\",\"Feng\",\"Shuai\",\"Di\",\"Qi\",\"Sou\",\"Zhai\",\"Lian\",\"Tang\",\"Chi\",\"Guan\",\"Lu\",\"Luo\",\"Lou\",\"Zong\",\"Gai\",\"Hu\",\"Zha\",\"Chuang\",\"Tang\",\"Hua\",\"Cui\",\"Nai\",\"Mo\",\"Jiang\",\"Gui\",\"Ying\",\"Zhi\",\"Ao\",\"Zhi\",\"Nie\",\"Man\",\"Shan\",\"Kou\",\"Shu\",\"Suo\",\"Tuan\",\"Jiao\",\"Mo\",\"Mo\",\"Zhe\",\"Xian\",\"Keng\",\"Piao\",\"Jiang\",\"Yin\",\"Gou\",\"Qian\",\"Lue\",\"Ji\",\"Ying\",\"Jue\",\"Pie\",\"Pie\",\"Lao\",\"Dun\",\"Xian\",\"Ruan\",\"Kui\",\"Zan\",\"Yi\",\"Xun\",\"Cheng\",\"Cheng\",\"Sa\",\"Nao\",\"Heng\",\"Si\",\"Qian\",\"Huang\",\"Da\",\"Zun\",\"Nian\",\"Lin\",\"Zheng\",\"Hui\",\"Zhuang\",\"Jiao\",\"Ji\",\"Cao\",\"Dan\",\"Dan\",\"Che\",\"Bo\",\"Che\",\"Jue\",\"Xiao\",\"Liao\",\"Ben\",\"Fu\",\"Qiao\",\"Bo\",\"Cuo\",\"Zhuo\",\"Zhuan\",\"Tuo\",\"Pu\",\"Qin\",\"Dun\",\"Nian\",,\"Xie\",\"Lu\",\"Jiao\",\"Cuan\",\"Ta\",\"Han\",\"Qiao\",\"Zhua\",\"Jian\",\"Gan\",\"Yong\",\"Lei\",\"Kuo\",\"Lu\",\"Shan\",\"Zhuo\",\"Ze\",\"Pu\",\"Chuo\",\"Ji\",\"Dang\",\"Suo\",\"Cao\",\"Qing\",\"Jing\",\"Huan\",\"Jie\",\"Qin\",\"Kuai\",\"Dan\",\"Xi\",\"Ge\",\"Pi\",\"Bo\",\"Ao\",\"Ju\",\"Ye\",,\"Mang\",\"Sou\",\"Mi\",\"Ji\",\"Tai\",\"Zhuo\",\"Dao\",\"Xing\",\"Lan\",\"Ca\",\"Ju\",\"Ye\",\"Ru\",\"Ye\",\"Ye\",\"Ni\",\"Hu\",\"Ji\",\"Bin\",\"Ning\",\"Ge\",\"Zhi\",\"Jie\",\"Kuo\",\"Mo\",\"Jian\",\"Xie\",\"Lie\",\"Tan\",\"Bai\",\"Sou\",\"Lu\",\"Lue\",\"Rao\",\"Zhi\"],[\"Pan\",\"Yang\",\"Lei\",\"Sa\",\"Shu\",\"Zan\",\"Nian\",\"Xian\",\"Jun\",\"Huo\",\"Li\",\"La\",\"Han\",\"Ying\",\"Lu\",\"Long\",\"Qian\",\"Qian\",\"Zan\",\"Qian\",\"Lan\",\"San\",\"Ying\",\"Mei\",\"Rang\",\"Chan\",,\"Cuan\",\"Xi\",\"She\",\"Luo\",\"Jun\",\"Mi\",\"Li\",\"Zan\",\"Luan\",\"Tan\",\"Zuan\",\"Li\",\"Dian\",\"Wa\",\"Dang\",\"Jiao\",\"Jue\",\"Lan\",\"Li\",\"Nang\",\"Zhi\",\"Gui\",\"Gui\",\"Qi\",\"Xin\",\"Pu\",\"Sui\",\"Shou\",\"Kao\",\"You\",\"Gai\",\"Yi\",\"Gong\",\"Gan\",\"Ban\",\"Fang\",\"Zheng\",\"Bo\",\"Dian\",\"Kou\",\"Min\",\"Wu\",\"Gu\",\"He\",\"Ce\",\"Xiao\",\"Mi\",\"Chu\",\"Ge\",\"Di\",\"Xu\",\"Jiao\",\"Min\",\"Chen\",\"Jiu\",\"Zhen\",\"Duo\",\"Yu\",\"Chi\",\"Ao\",\"Bai\",\"Xu\",\"Jiao\",\"Duo\",\"Lian\",\"Nie\",\"Bi\",\"Chang\",\"Dian\",\"Duo\",\"Yi\",\"Gan\",\"San\",\"Ke\",\"Yan\",\"Dun\",\"Qi\",\"Dou\",\"Xiao\",\"Duo\",\"Jiao\",\"Jing\",\"Yang\",\"Xia\",\"Min\",\"Shu\",\"Ai\",\"Qiao\",\"Ai\",\"Zheng\",\"Di\",\"Zhen\",\"Fu\",\"Shu\",\"Liao\",\"Qu\",\"Xiong\",\"Xi\",\"Jiao\",\"Sen\",\"Jiao\",\"Zhuo\",\"Yi\",\"Lian\",\"Bi\",\"Li\",\"Xiao\",\"Xiao\",\"Wen\",\"Xue\",\"Qi\",\"Qi\",\"Zhai\",\"Bin\",\"Jue\",\"Zhai\",,\"Fei\",\"Ban\",\"Ban\",\"Lan\",\"Yu\",\"Lan\",\"Wei\",\"Dou\",\"Sheng\",\"Liao\",\"Jia\",\"Hu\",\"Xie\",\"Jia\",\"Yu\",\"Zhen\",\"Jiao\",\"Wo\",\"Tou\",\"Chu\",\"Jin\",\"Chi\",\"Yin\",\"Fu\",\"Qiang\",\"Zhan\",\"Qu\",\"Zhuo\",\"Zhan\",\"Duan\",\"Zhuo\",\"Si\",\"Xin\",\"Zhuo\",\"Zhuo\",\"Qin\",\"Lin\",\"Zhuo\",\"Chu\",\"Duan\",\"Zhu\",\"Fang\",\"Xie\",\"Hang\",\"Yu\",\"Shi\",\"Pei\",\"You\",\"Mye\",\"Pang\",\"Qi\",\"Zhan\",\"Mao\",\"Lu\",\"Pei\",\"Pi\",\"Liu\",\"Fu\",\"Fang\",\"Xuan\",\"Jing\",\"Jing\",\"Ni\",\"Zu\",\"Zhao\",\"Yi\",\"Liu\",\"Shao\",\"Jian\",\"Es\",\"Yi\",\"Qi\",\"Zhi\",\"Fan\",\"Piao\",\"Fan\",\"Zhan\",\"Guai\",\"Sui\",\"Yu\",\"Wu\",\"Ji\",\"Ji\",\"Ji\",\"Huo\",\"Ri\",\"Dan\",\"Jiu\",\"Zhi\",\"Zao\",\"Xie\",\"Tiao\",\"Xun\",\"Xu\",\"Xu\",\"Xu\",\"Gan\",\"Han\",\"Tai\",\"Di\",\"Xu\",\"Chan\",\"Shi\",\"Kuang\",\"Yang\",\"Shi\",\"Wang\",\"Min\",\"Min\",\"Tun\",\"Chun\",\"Wu\"],[\"Yun\",\"Bei\",\"Ang\",\"Ze\",\"Ban\",\"Jie\",\"Kun\",\"Sheng\",\"Hu\",\"Fang\",\"Hao\",\"Gui\",\"Chang\",\"Xuan\",\"Ming\",\"Hun\",\"Fen\",\"Qin\",\"Hu\",\"Yi\",\"Xi\",\"Xin\",\"Yan\",\"Ze\",\"Fang\",\"Tan\",\"Shen\",\"Ju\",\"Yang\",\"Zan\",\"Bing\",\"Xing\",\"Ying\",\"Xuan\",\"Pei\",\"Zhen\",\"Ling\",\"Chun\",\"Hao\",\"Mei\",\"Zuo\",\"Mo\",\"Bian\",\"Xu\",\"Hun\",\"Zhao\",\"Zong\",\"Shi\",\"Shi\",\"Yu\",\"Fei\",\"Die\",\"Mao\",\"Ni\",\"Chang\",\"Wen\",\"Dong\",\"Ai\",\"Bing\",\"Ang\",\"Zhou\",\"Long\",\"Xian\",\"Kuang\",\"Tiao\",\"Chao\",\"Shi\",\"Huang\",\"Huang\",\"Xuan\",\"Kui\",\"Xu\",\"Jiao\",\"Jin\",\"Zhi\",\"Jin\",\"Shang\",\"Tong\",\"Hong\",\"Yan\",\"Gai\",\"Xiang\",\"Shai\",\"Xiao\",\"Ye\",\"Yun\",\"Hui\",\"Han\",\"Han\",\"Jun\",\"Wan\",\"Xian\",\"Kun\",\"Zhou\",\"Xi\",\"Cheng\",\"Sheng\",\"Bu\",\"Zhe\",\"Zhe\",\"Wu\",\"Han\",\"Hui\",\"Hao\",\"Chen\",\"Wan\",\"Tian\",\"Zhuo\",\"Zui\",\"Zhou\",\"Pu\",\"Jing\",\"Xi\",\"Shan\",\"Yi\",\"Xi\",\"Qing\",\"Qi\",\"Jing\",\"Gui\",\"Zhen\",\"Yi\",\"Zhi\",\"An\",\"Wan\",\"Lin\",\"Liang\",\"Chang\",\"Wang\",\"Xiao\",\"Zan\",\"Hi\",\"Xuan\",\"Xuan\",\"Yi\",\"Xia\",\"Yun\",\"Hui\",\"Fu\",\"Min\",\"Kui\",\"He\",\"Ying\",\"Du\",\"Wei\",\"Shu\",\"Qing\",\"Mao\",\"Nan\",\"Jian\",\"Nuan\",\"An\",\"Yang\",\"Chun\",\"Yao\",\"Suo\",\"Jin\",\"Ming\",\"Jiao\",\"Kai\",\"Gao\",\"Weng\",\"Chang\",\"Qi\",\"Hao\",\"Yan\",\"Li\",\"Ai\",\"Ji\",\"Gui\",\"Men\",\"Zan\",\"Xie\",\"Hao\",\"Mu\",\"Mo\",\"Cong\",\"Ni\",\"Zhang\",\"Hui\",\"Bao\",\"Han\",\"Xuan\",\"Chuan\",\"Liao\",\"Xian\",\"Dan\",\"Jing\",\"Pie\",\"Lin\",\"Tun\",\"Xi\",\"Yi\",\"Ji\",\"Huang\",\"Tai\",\"Ye\",\"Ye\",\"Li\",\"Tan\",\"Tong\",\"Xiao\",\"Fei\",\"Qin\",\"Zhao\",\"Hao\",\"Yi\",\"Xiang\",\"Xing\",\"Sen\",\"Jiao\",\"Bao\",\"Jing\",\"Yian\",\"Ai\",\"Ye\",\"Ru\",\"Shu\",\"Meng\",\"Xun\",\"Yao\",\"Pu\",\"Li\",\"Chen\",\"Kuang\",\"Die\",,\"Yan\",\"Huo\",\"Lu\",\"Xi\",\"Rong\",\"Long\",\"Nang\",\"Luo\",\"Luan\",\"Shai\",\"Tang\",\"Yan\",\"Chu\",\"Yue\",\"Yue\",\"Qu\",\"Yi\",\"Geng\",\"Ye\",\"Hu\",\"He\",\"Shu\",\"Cao\",\"Cao\",\"Noboru\",\"Man\",\"Ceng\",\"Ceng\",\"Ti\"],[\"Zui\",\"Can\",\"Xu\",\"Hui\",\"Yin\",\"Qie\",\"Fen\",\"Pi\",\"Yue\",\"You\",\"Ruan\",\"Peng\",\"Ban\",\"Fu\",\"Ling\",\"Fei\",\"Qu\",,\"Nu\",\"Tiao\",\"Shuo\",\"Zhen\",\"Lang\",\"Lang\",\"Juan\",\"Ming\",\"Huang\",\"Wang\",\"Tun\",\"Zhao\",\"Ji\",\"Qi\",\"Ying\",\"Zong\",\"Wang\",\"Tong\",\"Lang\",,\"Meng\",\"Long\",\"Mu\",\"Deng\",\"Wei\",\"Mo\",\"Ben\",\"Zha\",\"Zhu\",\"Shu\",,\"Zhu\",\"Ren\",\"Ba\",\"Po\",\"Duo\",\"Duo\",\"Dao\",\"Li\",\"Qiu\",\"Ji\",\"Jiu\",\"Bi\",\"Xiu\",\"Ting\",\"Ci\",\"Sha\",\"Eburi\",\"Za\",\"Quan\",\"Qian\",\"Yu\",\"Gan\",\"Wu\",\"Cha\",\"Shan\",\"Xun\",\"Fan\",\"Wu\",\"Zi\",\"Li\",\"Xing\",\"Cai\",\"Cun\",\"Ren\",\"Shao\",\"Tuo\",\"Di\",\"Zhang\",\"Mang\",\"Chi\",\"Yi\",\"Gu\",\"Gong\",\"Du\",\"Yi\",\"Qi\",\"Shu\",\"Gang\",\"Tiao\",\"Moku\",\"Soma\",\"Tochi\",\"Lai\",\"Sugi\",\"Mang\",\"Yang\",\"Ma\",\"Miao\",\"Si\",\"Yuan\",\"Hang\",\"Fei\",\"Bei\",\"Jie\",\"Dong\",\"Gao\",\"Yao\",\"Xian\",\"Chu\",\"Qun\",\"Pa\",\"Shu\",\"Hua\",\"Xin\",\"Chou\",\"Zhu\",\"Chou\",\"Song\",\"Ban\",\"Song\",\"Ji\",\"Yue\",\"Jin\",\"Gou\",\"Ji\",\"Mao\",\"Pi\",\"Bi\",\"Wang\",\"Ang\",\"Fang\",\"Fen\",\"Yi\",\"Fu\",\"Nan\",\"Xi\",\"Hu\",\"Ya\",\"Dou\",\"Xun\",\"Zhen\",\"Yao\",\"Lin\",\"Rui\",\"E\",\"Mei\",\"Zhao\",\"Guo\",\"Zhi\",\"Cong\",\"Yun\",\"Waku\",\"Dou\",\"Shu\",\"Zao\",,\"Li\",\"Haze\",\"Jian\",\"Cheng\",\"Matsu\",\"Qiang\",\"Feng\",\"Nan\",\"Xiao\",\"Xian\",\"Ku\",\"Ping\",\"Yi\",\"Xi\",\"Zhi\",\"Guai\",\"Xiao\",\"Jia\",\"Jia\",\"Gou\",\"Fu\",\"Mo\",\"Yi\",\"Ye\",\"Ye\",\"Shi\",\"Nie\",\"Bi\",\"Duo\",\"Yi\",\"Ling\",\"Bing\",\"Ni\",\"La\",\"He\",\"Pan\",\"Fan\",\"Zhong\",\"Dai\",\"Ci\",\"Yang\",\"Fu\",\"Bo\",\"Mou\",\"Gan\",\"Qi\",\"Ran\",\"Rou\",\"Mao\",\"Zhao\",\"Song\",\"Zhe\",\"Xia\",\"You\",\"Shen\",\"Ju\",\"Tuo\",\"Zuo\",\"Nan\",\"Ning\",\"Yong\",\"Di\",\"Zhi\",\"Zha\",\"Cha\",\"Dan\",\"Gu\",\"Pu\",\"Jiu\",\"Ao\",\"Fu\",\"Jian\",\"Bo\",\"Duo\",\"Ke\",\"Nai\",\"Zhu\",\"Bi\",\"Liu\",\"Chai\",\"Zha\",\"Si\",\"Zhu\",\"Pei\",\"Shi\",\"Guai\",\"Cha\",\"Yao\",\"Jue\",\"Jiu\",\"Shi\"],[\"Zhi\",\"Liu\",\"Mei\",\"Hoy\",\"Rong\",\"Zha\",,\"Biao\",\"Zhan\",\"Jie\",\"Long\",\"Dong\",\"Lu\",\"Sayng\",\"Li\",\"Lan\",\"Yong\",\"Shu\",\"Xun\",\"Shuan\",\"Qi\",\"Zhen\",\"Qi\",\"Li\",\"Yi\",\"Xiang\",\"Zhen\",\"Li\",\"Su\",\"Gua\",\"Kan\",\"Bing\",\"Ren\",\"Xiao\",\"Bo\",\"Ren\",\"Bing\",\"Zi\",\"Chou\",\"Yi\",\"Jie\",\"Xu\",\"Zhu\",\"Jian\",\"Zui\",\"Er\",\"Er\",\"You\",\"Fa\",\"Gong\",\"Kao\",\"Lao\",\"Zhan\",\"Li\",\"Yin\",\"Yang\",\"He\",\"Gen\",\"Zhi\",\"Chi\",\"Ge\",\"Zai\",\"Luan\",\"Fu\",\"Jie\",\"Hang\",\"Gui\",\"Tao\",\"Guang\",\"Wei\",\"Kuang\",\"Ru\",\"An\",\"An\",\"Juan\",\"Yi\",\"Zhuo\",\"Ku\",\"Zhi\",\"Qiong\",\"Tong\",\"Sang\",\"Sang\",\"Huan\",\"Jie\",\"Jiu\",\"Xue\",\"Duo\",\"Zhui\",\"Yu\",\"Zan\",\"Kasei\",\"Ying\",\"Masu\",,\"Zhan\",\"Ya\",\"Nao\",\"Zhen\",\"Dang\",\"Qi\",\"Qiao\",\"Hua\",\"Kuai\",\"Jiang\",\"Zhuang\",\"Xun\",\"Suo\",\"Sha\",\"Zhen\",\"Bei\",\"Ting\",\"Gua\",\"Jing\",\"Bo\",\"Ben\",\"Fu\",\"Rui\",\"Tong\",\"Jue\",\"Xi\",\"Lang\",\"Liu\",\"Feng\",\"Qi\",\"Wen\",\"Jun\",\"Gan\",\"Cu\",\"Liang\",\"Qiu\",\"Ting\",\"You\",\"Mei\",\"Bang\",\"Long\",\"Peng\",\"Zhuang\",\"Di\",\"Xuan\",\"Tu\",\"Zao\",\"Ao\",\"Gu\",\"Bi\",\"Di\",\"Han\",\"Zi\",\"Zhi\",\"Ren\",\"Bei\",\"Geng\",\"Jian\",\"Huan\",\"Wan\",\"Nuo\",\"Jia\",\"Tiao\",\"Ji\",\"Xiao\",\"Lu\",\"Huan\",\"Shao\",\"Cen\",\"Fen\",\"Song\",\"Meng\",\"Wu\",\"Li\",\"Li\",\"Dou\",\"Cen\",\"Ying\",\"Suo\",\"Ju\",\"Ti\",\"Jie\",\"Kun\",\"Zhuo\",\"Shu\",\"Chan\",\"Fan\",\"Wei\",\"Jing\",\"Li\",\"Bing\",\"Fumoto\",\"Shikimi\",\"Tao\",\"Zhi\",\"Lai\",\"Lian\",\"Jian\",\"Zhuo\",\"Ling\",\"Li\",\"Qi\",\"Bing\",\"Zhun\",\"Cong\",\"Qian\",\"Mian\",\"Qi\",\"Qi\",\"Cai\",\"Gun\",\"Chan\",\"Te\",\"Fei\",\"Pai\",\"Bang\",\"Pou\",\"Hun\",\"Zong\",\"Cheng\",\"Zao\",\"Ji\",\"Li\",\"Peng\",\"Yu\",\"Yu\",\"Gu\",\"Hun\",\"Dong\",\"Tang\",\"Gang\",\"Wang\",\"Di\",\"Xi\",\"Fan\",\"Cheng\",\"Zhan\",\"Qi\",\"Yuan\",\"Yan\",\"Yu\",\"Quan\",\"Yi\",\"Sen\",\"Ren\",\"Chui\",\"Leng\",\"Qi\",\"Zhuo\",\"Fu\",\"Ke\",\"Lai\",\"Zou\",\"Zou\",\"Zhuo\",\"Guan\",\"Fen\",\"Fen\",\"Chen\",\"Qiong\",\"Nie\"],[\"Wan\",\"Guo\",\"Lu\",\"Hao\",\"Jie\",\"Yi\",\"Chou\",\"Ju\",\"Ju\",\"Cheng\",\"Zuo\",\"Liang\",\"Qiang\",\"Zhi\",\"Zhui\",\"Ya\",\"Ju\",\"Bei\",\"Jiao\",\"Zhuo\",\"Zi\",\"Bin\",\"Peng\",\"Ding\",\"Chu\",\"Chang\",\"Kunugi\",\"Momiji\",\"Jian\",\"Gui\",\"Xi\",\"Du\",\"Qian\",\"Kunugi\",\"Soko\",\"Shide\",\"Luo\",\"Zhi\",\"Ken\",\"Myeng\",\"Tafu\",,\"Peng\",\"Zhan\",,\"Tuo\",\"Sen\",\"Duo\",\"Ye\",\"Fou\",\"Wei\",\"Wei\",\"Duan\",\"Jia\",\"Zong\",\"Jian\",\"Yi\",\"Shen\",\"Xi\",\"Yan\",\"Yan\",\"Chuan\",\"Zhan\",\"Chun\",\"Yu\",\"He\",\"Zha\",\"Wo\",\"Pian\",\"Bi\",\"Yao\",\"Huo\",\"Xu\",\"Ruo\",\"Yang\",\"La\",\"Yan\",\"Ben\",\"Hun\",\"Kui\",\"Jie\",\"Kui\",\"Si\",\"Feng\",\"Xie\",\"Tuo\",\"Zhi\",\"Jian\",\"Mu\",\"Mao\",\"Chu\",\"Hu\",\"Hu\",\"Lian\",\"Leng\",\"Ting\",\"Nan\",\"Yu\",\"You\",\"Mei\",\"Song\",\"Xuan\",\"Xuan\",\"Ying\",\"Zhen\",\"Pian\",\"Ye\",\"Ji\",\"Jie\",\"Ye\",\"Chu\",\"Shun\",\"Yu\",\"Cou\",\"Wei\",\"Mei\",\"Di\",\"Ji\",\"Jie\",\"Kai\",\"Qiu\",\"Ying\",\"Rou\",\"Heng\",\"Lou\",\"Le\",\"Hazou\",\"Katsura\",\"Pin\",\"Muro\",\"Gai\",\"Tan\",\"Lan\",\"Yun\",\"Yu\",\"Chen\",\"Lu\",\"Ju\",\"Sakaki\",,\"Pi\",\"Xie\",\"Jia\",\"Yi\",\"Zhan\",\"Fu\",\"Nai\",\"Mi\",\"Lang\",\"Rong\",\"Gu\",\"Jian\",\"Ju\",\"Ta\",\"Yao\",\"Zhen\",\"Bang\",\"Sha\",\"Yuan\",\"Zi\",\"Ming\",\"Su\",\"Jia\",\"Yao\",\"Jie\",\"Huang\",\"Gan\",\"Fei\",\"Zha\",\"Qian\",\"Ma\",\"Sun\",\"Yuan\",\"Xie\",\"Rong\",\"Shi\",\"Zhi\",\"Cui\",\"Yun\",\"Ting\",\"Liu\",\"Rong\",\"Tang\",\"Que\",\"Zhai\",\"Si\",\"Sheng\",\"Ta\",\"Ke\",\"Xi\",\"Gu\",\"Qi\",\"Kao\",\"Gao\",\"Sun\",\"Pan\",\"Tao\",\"Ge\",\"Xun\",\"Dian\",\"Nou\",\"Ji\",\"Shuo\",\"Gou\",\"Chui\",\"Qiang\",\"Cha\",\"Qian\",\"Huai\",\"Mei\",\"Xu\",\"Gang\",\"Gao\",\"Zhuo\",\"Tuo\",\"Hashi\",\"Yang\",\"Dian\",\"Jia\",\"Jian\",\"Zui\",\"Kashi\",\"Ori\",\"Bin\",\"Zhu\",,\"Xi\",\"Qi\",\"Lian\",\"Hui\",\"Yong\",\"Qian\",\"Guo\",\"Gai\",\"Gai\",\"Tuan\",\"Hua\",\"Cu\",\"Sen\",\"Cui\",\"Beng\",\"You\",\"Hu\",\"Jiang\",\"Hu\",\"Huan\",\"Kui\",\"Yi\",\"Nie\",\"Gao\",\"Kang\",\"Gui\",\"Gui\",\"Cao\",\"Man\",\"Jin\"],[\"Di\",\"Zhuang\",\"Le\",\"Lang\",\"Chen\",\"Cong\",\"Li\",\"Xiu\",\"Qing\",\"Shuang\",\"Fan\",\"Tong\",\"Guan\",\"Ji\",\"Suo\",\"Lei\",\"Lu\",\"Liang\",\"Mi\",\"Lou\",\"Chao\",\"Su\",\"Ke\",\"Shu\",\"Tang\",\"Biao\",\"Lu\",\"Jiu\",\"Shu\",\"Zha\",\"Shu\",\"Zhang\",\"Men\",\"Mo\",\"Niao\",\"Yang\",\"Tiao\",\"Peng\",\"Zhu\",\"Sha\",\"Xi\",\"Quan\",\"Heng\",\"Jian\",\"Cong\",,\"Hokuso\",\"Qiang\",\"Tara\",\"Ying\",\"Er\",\"Xin\",\"Zhi\",\"Qiao\",\"Zui\",\"Cong\",\"Pu\",\"Shu\",\"Hua\",\"Kui\",\"Zhen\",\"Zun\",\"Yue\",\"Zhan\",\"Xi\",\"Xun\",\"Dian\",\"Fa\",\"Gan\",\"Mo\",\"Wu\",\"Qiao\",\"Nao\",\"Lin\",\"Liu\",\"Qiao\",\"Xian\",\"Run\",\"Fan\",\"Zhan\",\"Tuo\",\"Lao\",\"Yun\",\"Shun\",\"Tui\",\"Cheng\",\"Tang\",\"Meng\",\"Ju\",\"Cheng\",\"Su\",\"Jue\",\"Jue\",\"Tan\",\"Hui\",\"Ji\",\"Nuo\",\"Xiang\",\"Tuo\",\"Ning\",\"Rui\",\"Zhu\",\"Chuang\",\"Zeng\",\"Fen\",\"Qiong\",\"Ran\",\"Heng\",\"Cen\",\"Gu\",\"Liu\",\"Lao\",\"Gao\",\"Chu\",\"Zusa\",\"Nude\",\"Ca\",\"San\",\"Ji\",\"Dou\",\"Shou\",\"Lu\",,,\"Yuan\",\"Ta\",\"Shu\",\"Jiang\",\"Tan\",\"Lin\",\"Nong\",\"Yin\",\"Xi\",\"Sui\",\"Shan\",\"Zui\",\"Xuan\",\"Cheng\",\"Gan\",\"Ju\",\"Zui\",\"Yi\",\"Qin\",\"Pu\",\"Yan\",\"Lei\",\"Feng\",\"Hui\",\"Dang\",\"Ji\",\"Sui\",\"Bo\",\"Bi\",\"Ding\",\"Chu\",\"Zhua\",\"Kuai\",\"Ji\",\"Jie\",\"Jia\",\"Qing\",\"Zhe\",\"Jian\",\"Qiang\",\"Dao\",\"Yi\",\"Biao\",\"Song\",\"She\",\"Lin\",\"Kunugi\",\"Cha\",\"Meng\",\"Yin\",\"Tao\",\"Tai\",\"Mian\",\"Qi\",\"Toan\",\"Bin\",\"Huo\",\"Ji\",\"Qian\",\"Mi\",\"Ning\",\"Yi\",\"Gao\",\"Jian\",\"Yin\",\"Er\",\"Qing\",\"Yan\",\"Qi\",\"Mi\",\"Zhao\",\"Gui\",\"Chun\",\"Ji\",\"Kui\",\"Po\",\"Deng\",\"Chu\",,\"Mian\",\"You\",\"Zhi\",\"Guang\",\"Qian\",\"Lei\",\"Lei\",\"Sa\",\"Lu\",\"Li\",\"Cuan\",\"Lu\",\"Mie\",\"Hui\",\"Ou\",\"Lu\",\"Jie\",\"Gao\",\"Du\",\"Yuan\",\"Li\",\"Fei\",\"Zhuo\",\"Sou\",\"Lian\",\"Tamo\",\"Chu\",,\"Zhu\",\"Lu\",\"Yan\",\"Li\",\"Zhu\",\"Chen\",\"Jie\",\"E\",\"Su\",\"Huai\",\"Nie\",\"Yu\",\"Long\",\"Lai\",,\"Xian\",\"Kwi\",\"Ju\",\"Xiao\",\"Ling\",\"Ying\",\"Jian\",\"Yin\",\"You\",\"Ying\"],[\"Xiang\",\"Nong\",\"Bo\",\"Chan\",\"Lan\",\"Ju\",\"Shuang\",\"She\",\"Wei\",\"Cong\",\"Quan\",\"Qu\",\"Cang\",,\"Yu\",\"Luo\",\"Li\",\"Zan\",\"Luan\",\"Dang\",\"Jue\",\"Em\",\"Lan\",\"Lan\",\"Zhu\",\"Lei\",\"Li\",\"Ba\",\"Nang\",\"Yu\",\"Ling\",\"Tsuki\",\"Qian\",\"Ci\",\"Huan\",\"Xin\",\"Yu\",\"Yu\",\"Qian\",\"Ou\",\"Xu\",\"Chao\",\"Chu\",\"Chi\",\"Kai\",\"Yi\",\"Jue\",\"Xi\",\"Xu\",\"Xia\",\"Yu\",\"Kuai\",\"Lang\",\"Kuan\",\"Shuo\",\"Xi\",\"Ai\",\"Yi\",\"Qi\",\"Hu\",\"Chi\",\"Qin\",\"Kuan\",\"Kan\",\"Kuan\",\"Kan\",\"Chuan\",\"Sha\",\"Gua\",\"Yin\",\"Xin\",\"Xie\",\"Yu\",\"Qian\",\"Xiao\",\"Yi\",\"Ge\",\"Wu\",\"Tan\",\"Jin\",\"Ou\",\"Hu\",\"Ti\",\"Huan\",\"Xu\",\"Pen\",\"Xi\",\"Xiao\",\"Xu\",\"Xi\",\"Sen\",\"Lian\",\"Chu\",\"Yi\",\"Kan\",\"Yu\",\"Chuo\",\"Huan\",\"Zhi\",\"Zheng\",\"Ci\",\"Bu\",\"Wu\",\"Qi\",\"Bu\",\"Bu\",\"Wai\",\"Ju\",\"Qian\",\"Chi\",\"Se\",\"Chi\",\"Se\",\"Zhong\",\"Sui\",\"Sui\",\"Li\",\"Cuo\",\"Yu\",\"Li\",\"Gui\",\"Dai\",\"Dai\",\"Si\",\"Jian\",\"Zhe\",\"Mo\",\"Mo\",\"Yao\",\"Mo\",\"Cu\",\"Yang\",\"Tian\",\"Sheng\",\"Dai\",\"Shang\",\"Xu\",\"Xun\",\"Shu\",\"Can\",\"Jue\",\"Piao\",\"Qia\",\"Qiu\",\"Su\",\"Qing\",\"Yun\",\"Lian\",\"Yi\",\"Fou\",\"Zhi\",\"Ye\",\"Can\",\"Hun\",\"Dan\",\"Ji\",\"Ye\",\"Zhen\",\"Yun\",\"Wen\",\"Chou\",\"Bin\",\"Ti\",\"Jin\",\"Shang\",\"Yin\",\"Diao\",\"Cu\",\"Hui\",\"Cuan\",\"Yi\",\"Dan\",\"Du\",\"Jiang\",\"Lian\",\"Bin\",\"Du\",\"Tsukusu\",\"Jian\",\"Shu\",\"Ou\",\"Duan\",\"Zhu\",\"Yin\",\"Qing\",\"Yi\",\"Sha\",\"Que\",\"Ke\",\"Yao\",\"Jun\",\"Dian\",\"Hui\",\"Hui\",\"Gu\",\"Que\",\"Ji\",\"Yi\",\"Ou\",\"Hui\",\"Duan\",\"Yi\",\"Xiao\",\"Wu\",\"Guan\",\"Mu\",\"Mei\",\"Mei\",\"Ai\",\"Zuo\",\"Du\",\"Yu\",\"Bi\",\"Bi\",\"Bi\",\"Pi\",\"Pi\",\"Bi\",\"Chan\",\"Mao\",,,\"Pu\",\"Mushiru\",\"Jia\",\"Zhan\",\"Sai\",\"Mu\",\"Tuo\",\"Xun\",\"Er\",\"Rong\",\"Xian\",\"Ju\",\"Mu\",\"Hao\",\"Qiu\",\"Dou\",\"Mushiru\",\"Tan\",\"Pei\",\"Ju\",\"Duo\",\"Cui\",\"Bi\",\"San\",,\"Mao\",\"Sui\",\"Yu\",\"Yu\",\"Tuo\",\"He\",\"Jian\",\"Ta\",\"San\"],[\"Lu\",\"Mu\",\"Li\",\"Tong\",\"Rong\",\"Chang\",\"Pu\",\"Luo\",\"Zhan\",\"Sao\",\"Zhan\",\"Meng\",\"Luo\",\"Qu\",\"Die\",\"Shi\",\"Di\",\"Min\",\"Jue\",\"Mang\",\"Qi\",\"Pie\",\"Nai\",\"Qi\",\"Dao\",\"Xian\",\"Chuan\",\"Fen\",\"Ri\",\"Nei\",,\"Fu\",\"Shen\",\"Dong\",\"Qing\",\"Qi\",\"Yin\",\"Xi\",\"Hai\",\"Yang\",\"An\",\"Ya\",\"Ke\",\"Qing\",\"Ya\",\"Dong\",\"Dan\",\"Lu\",\"Qing\",\"Yang\",\"Yun\",\"Yun\",\"Shui\",\"San\",\"Zheng\",\"Bing\",\"Yong\",\"Dang\",\"Shitamizu\",\"Le\",\"Ni\",\"Tun\",\"Fan\",\"Gui\",\"Ting\",\"Zhi\",\"Qiu\",\"Bin\",\"Ze\",\"Mian\",\"Cuan\",\"Hui\",\"Diao\",\"Han\",\"Cha\",\"Zhuo\",\"Chuan\",\"Wan\",\"Fan\",\"Dai\",\"Xi\",\"Tuo\",\"Mang\",\"Qiu\",\"Qi\",\"Shan\",\"Pai\",\"Han\",\"Qian\",\"Wu\",\"Wu\",\"Xun\",\"Si\",\"Ru\",\"Gong\",\"Jiang\",\"Chi\",\"Wu\",\"Tsuchi\",,\"Tang\",\"Zhi\",\"Chi\",\"Qian\",\"Mi\",\"Yu\",\"Wang\",\"Qing\",\"Jing\",\"Rui\",\"Jun\",\"Hong\",\"Tai\",\"Quan\",\"Ji\",\"Bian\",\"Bian\",\"Gan\",\"Wen\",\"Zhong\",\"Fang\",\"Xiong\",\"Jue\",\"Hang\",\"Niou\",\"Qi\",\"Fen\",\"Xu\",\"Xu\",\"Qin\",\"Yi\",\"Wo\",\"Yun\",\"Yuan\",\"Hang\",\"Yan\",\"Shen\",\"Chen\",\"Dan\",\"You\",\"Dun\",\"Hu\",\"Huo\",\"Qie\",\"Mu\",\"Rou\",\"Mei\",\"Ta\",\"Mian\",\"Wu\",\"Chong\",\"Tian\",\"Bi\",\"Sha\",\"Zhi\",\"Pei\",\"Pan\",\"Zhui\",\"Za\",\"Gou\",\"Liu\",\"Mei\",\"Ze\",\"Feng\",\"Ou\",\"Li\",\"Lun\",\"Cang\",\"Feng\",\"Wei\",\"Hu\",\"Mo\",\"Mei\",\"Shu\",\"Ju\",\"Zan\",\"Tuo\",\"Tuo\",\"Tuo\",\"He\",\"Li\",\"Mi\",\"Yi\",\"Fa\",\"Fei\",\"You\",\"Tian\",\"Zhi\",\"Zhao\",\"Gu\",\"Zhan\",\"Yan\",\"Si\",\"Kuang\",\"Jiong\",\"Ju\",\"Xie\",\"Qiu\",\"Yi\",\"Jia\",\"Zhong\",\"Quan\",\"Bo\",\"Hui\",\"Mi\",\"Ben\",\"Zhuo\",\"Chu\",\"Le\",\"You\",\"Gu\",\"Hong\",\"Gan\",\"Fa\",\"Mao\",\"Si\",\"Hu\",\"Ping\",\"Ci\",\"Fan\",\"Chi\",\"Su\",\"Ning\",\"Cheng\",\"Ling\",\"Pao\",\"Bo\",\"Qi\",\"Si\",\"Ni\",\"Ju\",\"Yue\",\"Zhu\",\"Sheng\",\"Lei\",\"Xuan\",\"Xue\",\"Fu\",\"Pan\",\"Min\",\"Tai\",\"Yang\",\"Ji\",\"Yong\",\"Guan\",\"Beng\",\"Xue\",\"Long\",\"Lu\",,\"Bo\",\"Xie\",\"Po\",\"Ze\",\"Jing\",\"Yin\"],[\"Zhou\",\"Ji\",\"Yi\",\"Hui\",\"Hui\",\"Zui\",\"Cheng\",\"Yin\",\"Wei\",\"Hou\",\"Jian\",\"Yang\",\"Lie\",\"Si\",\"Ji\",\"Er\",\"Xing\",\"Fu\",\"Sa\",\"Suo\",\"Zhi\",\"Yin\",\"Wu\",\"Xi\",\"Kao\",\"Zhu\",\"Jiang\",\"Luo\",,\"An\",\"Dong\",\"Yi\",\"Mou\",\"Lei\",\"Yi\",\"Mi\",\"Quan\",\"Jin\",\"Mo\",\"Wei\",\"Xiao\",\"Xie\",\"Hong\",\"Xu\",\"Shuo\",\"Kuang\",\"Tao\",\"Qie\",\"Ju\",\"Er\",\"Zhou\",\"Ru\",\"Ping\",\"Xun\",\"Xiong\",\"Zhi\",\"Guang\",\"Huan\",\"Ming\",\"Huo\",\"Wa\",\"Qia\",\"Pai\",\"Wu\",\"Qu\",\"Liu\",\"Yi\",\"Jia\",\"Jing\",\"Qian\",\"Jiang\",\"Jiao\",\"Cheng\",\"Shi\",\"Zhuo\",\"Ce\",\"Pal\",\"Kuai\",\"Ji\",\"Liu\",\"Chan\",\"Hun\",\"Hu\",\"Nong\",\"Xun\",\"Jin\",\"Lie\",\"Qiu\",\"Wei\",\"Zhe\",\"Jun\",\"Han\",\"Bang\",\"Mang\",\"Zhuo\",\"You\",\"Xi\",\"Bo\",\"Dou\",\"Wan\",\"Hong\",\"Yi\",\"Pu\",\"Ying\",\"Lan\",\"Hao\",\"Lang\",\"Han\",\"Li\",\"Geng\",\"Fu\",\"Wu\",\"Lian\",\"Chun\",\"Feng\",\"Yi\",\"Yu\",\"Tong\",\"Lao\",\"Hai\",\"Jin\",\"Jia\",\"Chong\",\"Weng\",\"Mei\",\"Sui\",\"Cheng\",\"Pei\",\"Xian\",\"Shen\",\"Tu\",\"Kun\",\"Pin\",\"Nie\",\"Han\",\"Jing\",\"Xiao\",\"She\",\"Nian\",\"Tu\",\"Yong\",\"Xiao\",\"Xian\",\"Ting\",\"E\",\"Su\",\"Tun\",\"Juan\",\"Cen\",\"Ti\",\"Li\",\"Shui\",\"Si\",\"Lei\",\"Shui\",\"Tao\",\"Du\",\"Lao\",\"Lai\",\"Lian\",\"Wei\",\"Wo\",\"Yun\",\"Huan\",\"Di\",,\"Run\",\"Jian\",\"Zhang\",\"Se\",\"Fu\",\"Guan\",\"Xing\",\"Shou\",\"Shuan\",\"Ya\",\"Chuo\",\"Zhang\",\"Ye\",\"Kong\",\"Wo\",\"Han\",\"Tuo\",\"Dong\",\"He\",\"Wo\",\"Ju\",\"Gan\",\"Liang\",\"Hun\",\"Ta\",\"Zhuo\",\"Dian\",\"Qie\",\"De\",\"Juan\",\"Zi\",\"Xi\",\"Yao\",\"Qi\",\"Gu\",\"Guo\",\"Han\",\"Lin\",\"Tang\",\"Zhou\",\"Peng\",\"Hao\",\"Chang\",\"Shu\",\"Qi\",\"Fang\",\"Chi\",\"Lu\",\"Nao\",\"Ju\",\"Tao\",\"Cong\",\"Lei\",\"Zhi\",\"Peng\",\"Fei\",\"Song\",\"Tian\",\"Pi\",\"Dan\",\"Yu\",\"Ni\",\"Yu\",\"Lu\",\"Gan\",\"Mi\",\"Jing\",\"Ling\",\"Lun\",\"Yin\",\"Cui\",\"Qu\",\"Huai\",\"Yu\",\"Nian\",\"Shen\",\"Piao\",\"Chun\",\"Wa\",\"Yuan\",\"Lai\",\"Hun\",\"Qing\",\"Yan\",\"Qian\",\"Tian\",\"Miao\",\"Zhi\",\"Yin\",\"Mi\"],[\"Ben\",\"Yuan\",\"Wen\",\"Re\",\"Fei\",\"Qing\",\"Yuan\",\"Ke\",\"Ji\",\"She\",\"Yuan\",\"Shibui\",\"Lu\",\"Zi\",\"Du\",,\"Jian\",\"Min\",\"Pi\",\"Tani\",\"Yu\",\"Yuan\",\"Shen\",\"Shen\",\"Rou\",\"Huan\",\"Zhu\",\"Jian\",\"Nuan\",\"Yu\",\"Qiu\",\"Ting\",\"Qu\",\"Du\",\"Feng\",\"Zha\",\"Bo\",\"Wo\",\"Wo\",\"Di\",\"Wei\",\"Wen\",\"Ru\",\"Xie\",\"Ce\",\"Wei\",\"Ge\",\"Gang\",\"Yan\",\"Hong\",\"Xuan\",\"Mi\",\"Ke\",\"Mao\",\"Ying\",\"Yan\",\"You\",\"Hong\",\"Miao\",\"Xing\",\"Mei\",\"Zai\",\"Hun\",\"Nai\",\"Kui\",\"Shi\",\"E\",\"Pai\",\"Mei\",\"Lian\",\"Qi\",\"Qi\",\"Mei\",\"Tian\",\"Cou\",\"Wei\",\"Can\",\"Tuan\",\"Mian\",\"Hui\",\"Mo\",\"Xu\",\"Ji\",\"Pen\",\"Jian\",\"Jian\",\"Hu\",\"Feng\",\"Xiang\",\"Yi\",\"Yin\",\"Zhan\",\"Shi\",\"Jie\",\"Cheng\",\"Huang\",\"Tan\",\"Yu\",\"Bi\",\"Min\",\"Shi\",\"Tu\",\"Sheng\",\"Yong\",\"Qu\",\"Zhong\",\"Suei\",\"Jiu\",\"Jiao\",\"Qiou\",\"Yin\",\"Tang\",\"Long\",\"Huo\",\"Yuan\",\"Nan\",\"Ban\",\"You\",\"Quan\",\"Chui\",\"Liang\",\"Chan\",\"Yan\",\"Chun\",\"Nie\",\"Zi\",\"Wan\",\"Shi\",\"Man\",\"Ying\",\"Ratsu\",\"Kui\",,\"Jian\",\"Xu\",\"Lu\",\"Gui\",\"Gai\",,,\"Po\",\"Jin\",\"Gui\",\"Tang\",\"Yuan\",\"Suo\",\"Yuan\",\"Lian\",\"Yao\",\"Meng\",\"Zhun\",\"Sheng\",\"Ke\",\"Tai\",\"Da\",\"Wa\",\"Liu\",\"Gou\",\"Sao\",\"Ming\",\"Zha\",\"Shi\",\"Yi\",\"Lun\",\"Ma\",\"Pu\",\"Wei\",\"Li\",\"Cai\",\"Wu\",\"Xi\",\"Wen\",\"Qiang\",\"Ze\",\"Shi\",\"Su\",\"Yi\",\"Zhen\",\"Sou\",\"Yun\",\"Xiu\",\"Yin\",\"Rong\",\"Hun\",\"Su\",\"Su\",\"Ni\",\"Ta\",\"Shi\",\"Ru\",\"Wei\",\"Pan\",\"Chu\",\"Chu\",\"Pang\",\"Weng\",\"Cang\",\"Mie\",\"He\",\"Dian\",\"Hao\",\"Huang\",\"Xi\",\"Zi\",\"Di\",\"Zhi\",\"Ying\",\"Fu\",\"Jie\",\"Hua\",\"Ge\",\"Zi\",\"Tao\",\"Teng\",\"Sui\",\"Bi\",\"Jiao\",\"Hui\",\"Gun\",\"Yin\",\"Gao\",\"Long\",\"Zhi\",\"Yan\",\"She\",\"Man\",\"Ying\",\"Chun\",\"Lu\",\"Lan\",\"Luan\",,\"Bin\",\"Tan\",\"Yu\",\"Sou\",\"Hu\",\"Bi\",\"Biao\",\"Zhi\",\"Jiang\",\"Kou\",\"Shen\",\"Shang\",\"Di\",\"Mi\",\"Ao\",\"Lu\",\"Hu\",\"Hu\",\"You\",\"Chan\",\"Fan\",\"Yong\",\"Gun\",\"Man\"],[\"Qing\",\"Yu\",\"Piao\",\"Ji\",\"Ya\",\"Jiao\",\"Qi\",\"Xi\",\"Ji\",\"Lu\",\"Lu\",\"Long\",\"Jin\",\"Guo\",\"Cong\",\"Lou\",\"Zhi\",\"Gai\",\"Qiang\",\"Li\",\"Yan\",\"Cao\",\"Jiao\",\"Cong\",\"Qun\",\"Tuan\",\"Ou\",\"Teng\",\"Ye\",\"Xi\",\"Mi\",\"Tang\",\"Mo\",\"Shang\",\"Han\",\"Lian\",\"Lan\",\"Wa\",\"Li\",\"Qian\",\"Feng\",\"Xuan\",\"Yi\",\"Man\",\"Zi\",\"Mang\",\"Kang\",\"Lei\",\"Peng\",\"Shu\",\"Zhang\",\"Zhang\",\"Chong\",\"Xu\",\"Huan\",\"Kuo\",\"Jian\",\"Yan\",\"Chuang\",\"Liao\",\"Cui\",\"Ti\",\"Yang\",\"Jiang\",\"Cong\",\"Ying\",\"Hong\",\"Xun\",\"Shu\",\"Guan\",\"Ying\",\"Xiao\",,,\"Xu\",\"Lian\",\"Zhi\",\"Wei\",\"Pi\",\"Jue\",\"Jiao\",\"Po\",\"Dang\",\"Hui\",\"Jie\",\"Wu\",\"Pa\",\"Ji\",\"Pan\",\"Gui\",\"Xiao\",\"Qian\",\"Qian\",\"Xi\",\"Lu\",\"Xi\",\"Xuan\",\"Dun\",\"Huang\",\"Min\",\"Run\",\"Su\",\"Liao\",\"Zhen\",\"Zhong\",\"Yi\",\"Di\",\"Wan\",\"Dan\",\"Tan\",\"Chao\",\"Xun\",\"Kui\",\"Yie\",\"Shao\",\"Tu\",\"Zhu\",\"San\",\"Hei\",\"Bi\",\"Shan\",\"Chan\",\"Chan\",\"Shu\",\"Tong\",\"Pu\",\"Lin\",\"Wei\",\"Se\",\"Se\",\"Cheng\",\"Jiong\",\"Cheng\",\"Hua\",\"Jiao\",\"Lao\",\"Che\",\"Gan\",\"Cun\",\"Heng\",\"Si\",\"Shu\",\"Peng\",\"Han\",\"Yun\",\"Liu\",\"Hong\",\"Fu\",\"Hao\",\"He\",\"Xian\",\"Jian\",\"Shan\",\"Xi\",\"Oki\",,\"Lan\",,\"Yu\",\"Lin\",\"Min\",\"Zao\",\"Dang\",\"Wan\",\"Ze\",\"Xie\",\"Yu\",\"Li\",\"Shi\",\"Xue\",\"Ling\",\"Man\",\"Zi\",\"Yong\",\"Kuai\",\"Can\",\"Lian\",\"Dian\",\"Ye\",\"Ao\",\"Huan\",\"Zhen\",\"Chan\",\"Man\",\"Dan\",\"Dan\",\"Yi\",\"Sui\",\"Pi\",\"Ju\",\"Ta\",\"Qin\",\"Ji\",\"Zhuo\",\"Lian\",\"Nong\",\"Guo\",\"Jin\",\"Fen\",\"Se\",\"Ji\",\"Sui\",\"Hui\",\"Chu\",\"Ta\",\"Song\",\"Ding\",,\"Zhu\",\"Lai\",\"Bin\",\"Lian\",\"Mi\",\"Shi\",\"Shu\",\"Mi\",\"Ning\",\"Ying\",\"Ying\",\"Meng\",\"Jin\",\"Qi\",\"Pi\",\"Ji\",\"Hao\",\"Ru\",\"Zui\",\"Wo\",\"Tao\",\"Yin\",\"Yin\",\"Dui\",\"Ci\",\"Huo\",\"Jing\",\"Lan\",\"Jun\",\"Ai\",\"Pu\",\"Zhuo\",\"Wei\",\"Bin\",\"Gu\",\"Qian\",\"Xing\",\"Hama\",\"Kuo\",\"Fei\",,\"Boku\",\"Jian\",\"Wei\",\"Luo\",\"Zan\",\"Lu\",\"Li\"],[\"You\",\"Yang\",\"Lu\",\"Si\",\"Jie\",\"Ying\",\"Du\",\"Wang\",\"Hui\",\"Xie\",\"Pan\",\"Shen\",\"Biao\",\"Chan\",\"Mo\",\"Liu\",\"Jian\",\"Pu\",\"Se\",\"Cheng\",\"Gu\",\"Bin\",\"Huo\",\"Xian\",\"Lu\",\"Qin\",\"Han\",\"Ying\",\"Yong\",\"Li\",\"Jing\",\"Xiao\",\"Ying\",\"Sui\",\"Wei\",\"Xie\",\"Huai\",\"Hao\",\"Zhu\",\"Long\",\"Lai\",\"Dui\",\"Fan\",\"Hu\",\"Lai\",,,\"Ying\",\"Mi\",\"Ji\",\"Lian\",\"Jian\",\"Ying\",\"Fen\",\"Lin\",\"Yi\",\"Jian\",\"Yue\",\"Chan\",\"Dai\",\"Rang\",\"Jian\",\"Lan\",\"Fan\",\"Shuang\",\"Yuan\",\"Zhuo\",\"Feng\",\"She\",\"Lei\",\"Lan\",\"Cong\",\"Qu\",\"Yong\",\"Qian\",\"Fa\",\"Guan\",\"Que\",\"Yan\",\"Hao\",\"Hyeng\",\"Sa\",\"Zan\",\"Luan\",\"Yan\",\"Li\",\"Mi\",\"Shan\",\"Tan\",\"Dang\",\"Jiao\",\"Chan\",,\"Hao\",\"Ba\",\"Zhu\",\"Lan\",\"Lan\",\"Nang\",\"Wan\",\"Luan\",\"Xun\",\"Xian\",\"Yan\",\"Gan\",\"Yan\",\"Yu\",\"Huo\",\"Si\",\"Mie\",\"Guang\",\"Deng\",\"Hui\",\"Xiao\",\"Xiao\",\"Hu\",\"Hong\",\"Ling\",\"Zao\",\"Zhuan\",\"Jiu\",\"Zha\",\"Xie\",\"Chi\",\"Zhuo\",\"Zai\",\"Zai\",\"Can\",\"Yang\",\"Qi\",\"Zhong\",\"Fen\",\"Niu\",\"Jiong\",\"Wen\",\"Po\",\"Yi\",\"Lu\",\"Chui\",\"Pi\",\"Kai\",\"Pan\",\"Yan\",\"Kai\",\"Pang\",\"Mu\",\"Chao\",\"Liao\",\"Gui\",\"Kang\",\"Tun\",\"Guang\",\"Xin\",\"Zhi\",\"Guang\",\"Guang\",\"Wei\",\"Qiang\",,\"Da\",\"Xia\",\"Zheng\",\"Zhu\",\"Ke\",\"Zhao\",\"Fu\",\"Ba\",\"Duo\",\"Duo\",\"Ling\",\"Zhuo\",\"Xuan\",\"Ju\",\"Tan\",\"Pao\",\"Jiong\",\"Pao\",\"Tai\",\"Tai\",\"Bing\",\"Yang\",\"Tong\",\"Han\",\"Zhu\",\"Zha\",\"Dian\",\"Wei\",\"Shi\",\"Lian\",\"Chi\",\"Huang\",,\"Hu\",\"Shuo\",\"Lan\",\"Jing\",\"Jiao\",\"Xu\",\"Xing\",\"Quan\",\"Lie\",\"Huan\",\"Yang\",\"Xiao\",\"Xiu\",\"Xian\",\"Yin\",\"Wu\",\"Zhou\",\"Yao\",\"Shi\",\"Wei\",\"Tong\",\"Xue\",\"Zai\",\"Kai\",\"Hong\",\"Luo\",\"Xia\",\"Zhu\",\"Xuan\",\"Zheng\",\"Po\",\"Yan\",\"Hui\",\"Guang\",\"Zhe\",\"Hui\",\"Kao\",,\"Fan\",\"Shao\",\"Ye\",\"Hui\",,\"Tang\",\"Jin\",\"Re\",,\"Xi\",\"Fu\",\"Jiong\",\"Che\",\"Pu\",\"Jing\",\"Zhuo\",\"Ting\",\"Wan\",\"Hai\",\"Peng\",\"Lang\",\"Shan\",\"Hu\",\"Feng\",\"Chi\",\"Rong\"],[\"Hu\",\"Xi\",\"Shu\",\"He\",\"Xun\",\"Ku\",\"Jue\",\"Xiao\",\"Xi\",\"Yan\",\"Han\",\"Zhuang\",\"Jun\",\"Di\",\"Xie\",\"Ji\",\"Wu\",,,\"Han\",\"Yan\",\"Huan\",\"Men\",\"Ju\",\"Chou\",\"Bei\",\"Fen\",\"Lin\",\"Kun\",\"Hun\",\"Tun\",\"Xi\",\"Cui\",\"Wu\",\"Hong\",\"Ju\",\"Fu\",\"Wo\",\"Jiao\",\"Cong\",\"Feng\",\"Ping\",\"Qiong\",\"Ruo\",\"Xi\",\"Qiong\",\"Xin\",\"Zhuo\",\"Yan\",\"Yan\",\"Yi\",\"Jue\",\"Yu\",\"Gang\",\"Ran\",\"Pi\",\"Gu\",,\"Sheng\",\"Chang\",\"Shao\",,,,,\"Chen\",\"He\",\"Kui\",\"Zhong\",\"Duan\",\"Xia\",\"Hui\",\"Feng\",\"Lian\",\"Xuan\",\"Xing\",\"Huang\",\"Jiao\",\"Jian\",\"Bi\",\"Ying\",\"Zhu\",\"Wei\",\"Tuan\",\"Tian\",\"Xi\",\"Nuan\",\"Nuan\",\"Chan\",\"Yan\",\"Jiong\",\"Jiong\",\"Yu\",\"Mei\",\"Sha\",\"Wei\",\"Ye\",\"Xin\",\"Qiong\",\"Rou\",\"Mei\",\"Huan\",\"Xu\",\"Zhao\",\"Wei\",\"Fan\",\"Qiu\",\"Sui\",\"Yang\",\"Lie\",\"Zhu\",\"Jie\",\"Gao\",\"Gua\",\"Bao\",\"Hu\",\"Yun\",\"Xia\",,,\"Bian\",\"Gou\",\"Tui\",\"Tang\",\"Chao\",\"Shan\",\"N\",\"Bo\",\"Huang\",\"Xie\",\"Xi\",\"Wu\",\"Xi\",\"Yun\",\"He\",\"He\",\"Xi\",\"Yun\",\"Xiong\",\"Nai\",\"Shan\",\"Qiong\",\"Yao\",\"Xun\",\"Mi\",\"Lian\",\"Ying\",\"Wen\",\"Rong\",\"Oozutsu\",,\"Qiang\",\"Liu\",\"Xi\",\"Bi\",\"Biao\",\"Zong\",\"Lu\",\"Jian\",\"Shou\",\"Yi\",\"Lou\",\"Feng\",\"Sui\",\"Yi\",\"Tong\",\"Jue\",\"Zong\",\"Yun\",\"Hu\",\"Yi\",\"Zhi\",\"Ao\",\"Wei\",\"Liao\",\"Han\",\"Ou\",\"Re\",\"Jiong\",\"Man\",,\"Shang\",\"Cuan\",\"Zeng\",\"Jian\",\"Xi\",\"Xi\",\"Xi\",\"Yi\",\"Xiao\",\"Chi\",\"Huang\",\"Chan\",\"Ye\",\"Qian\",\"Ran\",\"Yan\",\"Xian\",\"Qiao\",\"Zun\",\"Deng\",\"Dun\",\"Shen\",\"Jiao\",\"Fen\",\"Si\",\"Liao\",\"Yu\",\"Lin\",\"Tong\",\"Shao\",\"Fen\",\"Fan\",\"Yan\",\"Xun\",\"Lan\",\"Mei\",\"Tang\",\"Yi\",\"Jing\",\"Men\",,,\"Ying\",\"Yu\",\"Yi\",\"Xue\",\"Lan\",\"Tai\",\"Zao\",\"Can\",\"Sui\",\"Xi\",\"Que\",\"Cong\",\"Lian\",\"Hui\",\"Zhu\",\"Xie\",\"Ling\",\"Wei\",\"Yi\",\"Xie\",\"Zhao\",\"Hui\",\"Tatsu\",\"Nung\",\"Lan\",\"Ru\",\"Xian\",\"Kao\",\"Xun\",\"Jin\",\"Chou\",\"Chou\",\"Yao\"],[\"He\",\"Lan\",\"Biao\",\"Rong\",\"Li\",\"Mo\",\"Bao\",\"Ruo\",\"Lu\",\"La\",\"Ao\",\"Xun\",\"Kuang\",\"Shuo\",,\"Li\",\"Lu\",\"Jue\",\"Liao\",\"Yan\",\"Xi\",\"Xie\",\"Long\",\"Ye\",,\"Rang\",\"Yue\",\"Lan\",\"Cong\",\"Jue\",\"Tong\",\"Guan\",,\"Che\",\"Mi\",\"Tang\",\"Lan\",\"Zhu\",,\"Ling\",\"Cuan\",\"Yu\",\"Zhua\",\"Tsumekanmuri\",\"Pa\",\"Zheng\",\"Pao\",\"Cheng\",\"Yuan\",\"Ai\",\"Wei\",,\"Jue\",\"Jue\",\"Fu\",\"Ye\",\"Ba\",\"Die\",\"Ye\",\"Yao\",\"Zu\",\"Shuang\",\"Er\",\"Qiang\",\"Chuang\",\"Ge\",\"Zang\",\"Die\",\"Qiang\",\"Yong\",\"Qiang\",\"Pian\",\"Ban\",\"Pan\",\"Shao\",\"Jian\",\"Pai\",\"Du\",\"Chuang\",\"Tou\",\"Zha\",\"Bian\",\"Die\",\"Bang\",\"Bo\",\"Chuang\",\"You\",,\"Du\",\"Ya\",\"Cheng\",\"Niu\",\"Ushihen\",\"Pin\",\"Jiu\",\"Mou\",\"Tuo\",\"Mu\",\"Lao\",\"Ren\",\"Mang\",\"Fang\",\"Mao\",\"Mu\",\"Gang\",\"Wu\",\"Yan\",\"Ge\",\"Bei\",\"Si\",\"Jian\",\"Gu\",\"You\",\"Ge\",\"Sheng\",\"Mu\",\"Di\",\"Qian\",\"Quan\",\"Quan\",\"Zi\",\"Te\",\"Xi\",\"Mang\",\"Keng\",\"Qian\",\"Wu\",\"Gu\",\"Xi\",\"Li\",\"Li\",\"Pou\",\"Ji\",\"Gang\",\"Zhi\",\"Ben\",\"Quan\",\"Run\",\"Du\",\"Ju\",\"Jia\",\"Jian\",\"Feng\",\"Pian\",\"Ke\",\"Ju\",\"Kao\",\"Chu\",\"Xi\",\"Bei\",\"Luo\",\"Jie\",\"Ma\",\"San\",\"Wei\",\"Li\",\"Dun\",\"Tong\",,\"Jiang\",\"Ikenie\",\"Li\",\"Du\",\"Lie\",\"Pi\",\"Piao\",\"Bao\",\"Xi\",\"Chou\",\"Wei\",\"Kui\",\"Chou\",\"Quan\",\"Fan\",\"Ba\",\"Fan\",\"Qiu\",\"Ji\",\"Cai\",\"Chuo\",\"An\",\"Jie\",\"Zhuang\",\"Guang\",\"Ma\",\"You\",\"Kang\",\"Bo\",\"Hou\",\"Ya\",\"Yin\",\"Huan\",\"Zhuang\",\"Yun\",\"Kuang\",\"Niu\",\"Di\",\"Qing\",\"Zhong\",\"Mu\",\"Bei\",\"Pi\",\"Ju\",\"Ni\",\"Sheng\",\"Pao\",\"Xia\",\"Tuo\",\"Hu\",\"Ling\",\"Fei\",\"Pi\",\"Ni\",\"Ao\",\"You\",\"Gou\",\"Yue\",\"Ju\",\"Dan\",\"Po\",\"Gu\",\"Xian\",\"Ning\",\"Huan\",\"Hen\",\"Jiao\",\"He\",\"Zhao\",\"Ji\",\"Xun\",\"Shan\",\"Ta\",\"Rong\",\"Shou\",\"Tong\",\"Lao\",\"Du\",\"Xia\",\"Shi\",\"Hua\",\"Zheng\",\"Yu\",\"Sun\",\"Yu\",\"Bi\",\"Mang\",\"Xi\",\"Juan\",\"Li\",\"Xia\",\"Yin\",\"Suan\",\"Lang\",\"Bei\",\"Zhi\",\"Yan\"],[\"Sha\",\"Li\",\"Han\",\"Xian\",\"Jing\",\"Pai\",\"Fei\",\"Yao\",\"Ba\",\"Qi\",\"Ni\",\"Biao\",\"Yin\",\"Lai\",\"Xi\",\"Jian\",\"Qiang\",\"Kun\",\"Yan\",\"Guo\",\"Zong\",\"Mi\",\"Chang\",\"Yi\",\"Zhi\",\"Zheng\",\"Ya\",\"Meng\",\"Cai\",\"Cu\",\"She\",\"Kari\",\"Cen\",\"Luo\",\"Hu\",\"Zong\",\"Ji\",\"Wei\",\"Feng\",\"Wo\",\"Yuan\",\"Xing\",\"Zhu\",\"Mao\",\"Wei\",\"Yuan\",\"Xian\",\"Tuan\",\"Ya\",\"Nao\",\"Xie\",\"Jia\",\"Hou\",\"Bian\",\"You\",\"You\",\"Mei\",\"Zha\",\"Yao\",\"Sun\",\"Bo\",\"Ming\",\"Hua\",\"Yuan\",\"Sou\",\"Ma\",\"Yuan\",\"Dai\",\"Yu\",\"Shi\",\"Hao\",,\"Yi\",\"Zhen\",\"Chuang\",\"Hao\",\"Man\",\"Jing\",\"Jiang\",\"Mu\",\"Zhang\",\"Chan\",\"Ao\",\"Ao\",\"Hao\",\"Cui\",\"Fen\",\"Jue\",\"Bi\",\"Bi\",\"Huang\",\"Pu\",\"Lin\",\"Yu\",\"Tong\",\"Yao\",\"Liao\",\"Shuo\",\"Xiao\",\"Swu\",\"Ton\",\"Xi\",\"Ge\",\"Juan\",\"Du\",\"Hui\",\"Kuai\",\"Xian\",\"Xie\",\"Ta\",\"Xian\",\"Xun\",\"Ning\",\"Pin\",\"Huo\",\"Nou\",\"Meng\",\"Lie\",\"Nao\",\"Guang\",\"Shou\",\"Lu\",\"Ta\",\"Xian\",\"Mi\",\"Rang\",\"Huan\",\"Nao\",\"Luo\",\"Xian\",\"Qi\",\"Jue\",\"Xuan\",\"Miao\",\"Zi\",\"Lu\",\"Lu\",\"Yu\",\"Su\",\"Wang\",\"Qiu\",\"Ga\",\"Ding\",\"Le\",\"Ba\",\"Ji\",\"Hong\",\"Di\",\"Quan\",\"Gan\",\"Jiu\",\"Yu\",\"Ji\",\"Yu\",\"Yang\",\"Ma\",\"Gong\",\"Wu\",\"Fu\",\"Wen\",\"Jie\",\"Ya\",\"Fen\",\"Bian\",\"Beng\",\"Yue\",\"Jue\",\"Yun\",\"Jue\",\"Wan\",\"Jian\",\"Mei\",\"Dan\",\"Pi\",\"Wei\",\"Huan\",\"Xian\",\"Qiang\",\"Ling\",\"Dai\",\"Yi\",\"An\",\"Ping\",\"Dian\",\"Fu\",\"Xuan\",\"Xi\",\"Bo\",\"Ci\",\"Gou\",\"Jia\",\"Shao\",\"Po\",\"Ci\",\"Ke\",\"Ran\",\"Sheng\",\"Shen\",\"Yi\",\"Zu\",\"Jia\",\"Min\",\"Shan\",\"Liu\",\"Bi\",\"Zhen\",\"Zhen\",\"Jue\",\"Fa\",\"Long\",\"Jin\",\"Jiao\",\"Jian\",\"Li\",\"Guang\",\"Xian\",\"Zhou\",\"Gong\",\"Yan\",\"Xiu\",\"Yang\",\"Xu\",\"Luo\",\"Su\",\"Zhu\",\"Qin\",\"Ken\",\"Xun\",\"Bao\",\"Er\",\"Xiang\",\"Yao\",\"Xia\",\"Heng\",\"Gui\",\"Chong\",\"Xu\",\"Ban\",\"Pei\",,\"Dang\",\"Ei\",\"Hun\",\"Wen\",\"E\",\"Cheng\",\"Ti\",\"Wu\",\"Wu\",\"Cheng\",\"Jun\",\"Mei\",\"Bei\",\"Ting\",\"Xian\",\"Chuo\"],[\"Han\",\"Xuan\",\"Yan\",\"Qiu\",\"Quan\",\"Lang\",\"Li\",\"Xiu\",\"Fu\",\"Liu\",\"Ye\",\"Xi\",\"Ling\",\"Li\",\"Jin\",\"Lian\",\"Suo\",\"Chiisai\",,\"Wan\",\"Dian\",\"Pin\",\"Zhan\",\"Cui\",\"Min\",\"Yu\",\"Ju\",\"Chen\",\"Lai\",\"Wen\",\"Sheng\",\"Wei\",\"Dian\",\"Chu\",\"Zhuo\",\"Pei\",\"Cheng\",\"Hu\",\"Qi\",\"E\",\"Kun\",\"Chang\",\"Qi\",\"Beng\",\"Wan\",\"Lu\",\"Cong\",\"Guan\",\"Yan\",\"Diao\",\"Bei\",\"Lin\",\"Qin\",\"Pi\",\"Pa\",\"Que\",\"Zhuo\",\"Qin\",\"Fa\",,\"Qiong\",\"Du\",\"Jie\",\"Hun\",\"Yu\",\"Mao\",\"Mei\",\"Chun\",\"Xuan\",\"Ti\",\"Xing\",\"Dai\",\"Rou\",\"Min\",\"Zhen\",\"Wei\",\"Ruan\",\"Huan\",\"Jie\",\"Chuan\",\"Jian\",\"Zhuan\",\"Yang\",\"Lian\",\"Quan\",\"Xia\",\"Duan\",\"Yuan\",\"Ye\",\"Nao\",\"Hu\",\"Ying\",\"Yu\",\"Huang\",\"Rui\",\"Se\",\"Liu\",\"Shi\",\"Rong\",\"Suo\",\"Yao\",\"Wen\",\"Wu\",\"Jin\",\"Jin\",\"Ying\",\"Ma\",\"Tao\",\"Liu\",\"Tang\",\"Li\",\"Lang\",\"Gui\",\"Zhen\",\"Qiang\",\"Cuo\",\"Jue\",\"Zhao\",\"Yao\",\"Ai\",\"Bin\",\"Tu\",\"Chang\",\"Kun\",\"Zhuan\",\"Cong\",\"Jin\",\"Yi\",\"Cui\",\"Cong\",\"Qi\",\"Li\",\"Ying\",\"Suo\",\"Qiu\",\"Xuan\",\"Ao\",\"Lian\",\"Man\",\"Zhang\",\"Yin\",,\"Ying\",\"Zhi\",\"Lu\",\"Wu\",\"Deng\",\"Xiou\",\"Zeng\",\"Xun\",\"Qu\",\"Dang\",\"Lin\",\"Liao\",\"Qiong\",\"Su\",\"Huang\",\"Gui\",\"Pu\",\"Jing\",\"Fan\",\"Jin\",\"Liu\",\"Ji\",,\"Jing\",\"Ai\",\"Bi\",\"Can\",\"Qu\",\"Zao\",\"Dang\",\"Jiao\",\"Gun\",\"Tan\",\"Hui\",\"Huan\",\"Se\",\"Sui\",\"Tian\",,\"Yu\",\"Jin\",\"Lu\",\"Bin\",\"Shou\",\"Wen\",\"Zui\",\"Lan\",\"Xi\",\"Ji\",\"Xuan\",\"Ruan\",\"Huo\",\"Gai\",\"Lei\",\"Du\",\"Li\",\"Zhi\",\"Rou\",\"Li\",\"Zan\",\"Qiong\",\"Zhe\",\"Gui\",\"Sui\",\"La\",\"Long\",\"Lu\",\"Li\",\"Zan\",\"Lan\",\"Ying\",\"Mi\",\"Xiang\",\"Xi\",\"Guan\",\"Dao\",\"Zan\",\"Huan\",\"Gua\",\"Bo\",\"Die\",\"Bao\",\"Hu\",\"Zhi\",\"Piao\",\"Ban\",\"Rang\",\"Li\",\"Wa\",\"Dekaguramu\",\"Jiang\",\"Qian\",\"Fan\",\"Pen\",\"Fang\",\"Dan\",\"Weng\",\"Ou\",\"Deshiguramu\",\"Miriguramu\",\"Thon\",\"Hu\",\"Ling\",\"Yi\",\"Ping\",\"Ci\",\"Hekutogura\",\"Juan\",\"Chang\",\"Chi\",\"Sarake\",\"Dang\",\"Meng\",\"Pou\"],[\"Zhui\",\"Ping\",\"Bian\",\"Zhou\",\"Zhen\",\"Senchigura\",\"Ci\",\"Ying\",\"Qi\",\"Xian\",\"Lou\",\"Di\",\"Ou\",\"Meng\",\"Zhuan\",\"Peng\",\"Lin\",\"Zeng\",\"Wu\",\"Pi\",\"Dan\",\"Weng\",\"Ying\",\"Yan\",\"Gan\",\"Dai\",\"Shen\",\"Tian\",\"Tian\",\"Han\",\"Chang\",\"Sheng\",\"Qing\",\"Sheng\",\"Chan\",\"Chan\",\"Rui\",\"Sheng\",\"Su\",\"Sen\",\"Yong\",\"Shuai\",\"Lu\",\"Fu\",\"Yong\",\"Beng\",\"Feng\",\"Ning\",\"Tian\",\"You\",\"Jia\",\"Shen\",\"Zha\",\"Dian\",\"Fu\",\"Nan\",\"Dian\",\"Ping\",\"Ting\",\"Hua\",\"Ting\",\"Quan\",\"Zi\",\"Meng\",\"Bi\",\"Qi\",\"Liu\",\"Xun\",\"Liu\",\"Chang\",\"Mu\",\"Yun\",\"Fan\",\"Fu\",\"Geng\",\"Tian\",\"Jie\",\"Jie\",\"Quan\",\"Wei\",\"Fu\",\"Tian\",\"Mu\",\"Tap\",\"Pan\",\"Jiang\",\"Wa\",\"Da\",\"Nan\",\"Liu\",\"Ben\",\"Zhen\",\"Chu\",\"Mu\",\"Mu\",\"Ce\",\"Cen\",\"Gai\",\"Bi\",\"Da\",\"Zhi\",\"Lue\",\"Qi\",\"Lue\",\"Pan\",\"Kesa\",\"Fan\",\"Hua\",\"Yu\",\"Yu\",\"Mu\",\"Jun\",\"Yi\",\"Liu\",\"Yu\",\"Die\",\"Chou\",\"Hua\",\"Dang\",\"Chuo\",\"Ji\",\"Wan\",\"Jiang\",\"Sheng\",\"Chang\",\"Tuan\",\"Lei\",\"Ji\",\"Cha\",\"Liu\",\"Tatamu\",\"Tuan\",\"Lin\",\"Jiang\",\"Jiang\",\"Chou\",\"Bo\",\"Die\",\"Die\",\"Pi\",\"Nie\",\"Dan\",\"Shu\",\"Shu\",\"Zhi\",\"Yi\",\"Chuang\",\"Nai\",\"Ding\",\"Bi\",\"Jie\",\"Liao\",\"Gong\",\"Ge\",\"Jiu\",\"Zhou\",\"Xia\",\"Shan\",\"Xu\",\"Nue\",\"Li\",\"Yang\",\"Chen\",\"You\",\"Ba\",\"Jie\",\"Jue\",\"Zhi\",\"Xia\",\"Cui\",\"Bi\",\"Yi\",\"Li\",\"Zong\",\"Chuang\",\"Feng\",\"Zhu\",\"Pao\",\"Pi\",\"Gan\",\"Ke\",\"Ci\",\"Xie\",\"Qi\",\"Dan\",\"Zhen\",\"Fa\",\"Zhi\",\"Teng\",\"Ju\",\"Ji\",\"Fei\",\"Qu\",\"Dian\",\"Jia\",\"Xian\",\"Cha\",\"Bing\",\"Ni\",\"Zheng\",\"Yong\",\"Jing\",\"Quan\",\"Chong\",\"Tong\",\"Yi\",\"Kai\",\"Wei\",\"Hui\",\"Duo\",\"Yang\",\"Chi\",\"Zhi\",\"Hen\",\"Ya\",\"Mei\",\"Dou\",\"Jing\",\"Xiao\",\"Tong\",\"Tu\",\"Mang\",\"Pi\",\"Xiao\",\"Suan\",\"Pu\",\"Li\",\"Zhi\",\"Cuo\",\"Duo\",\"Wu\",\"Sha\",\"Lao\",\"Shou\",\"Huan\",\"Xian\",\"Yi\",\"Peng\",\"Zhang\",\"Guan\",\"Tan\",\"Fei\",\"Ma\",\"Lin\",\"Chi\",\"Ji\",\"Dian\",\"An\",\"Chi\",\"Bi\",\"Bei\",\"Min\",\"Gu\",\"Dui\",\"E\",\"Wei\"],[\"Yu\",\"Cui\",\"Ya\",\"Zhu\",\"Cu\",\"Dan\",\"Shen\",\"Zhung\",\"Ji\",\"Yu\",\"Hou\",\"Feng\",\"La\",\"Yang\",\"Shen\",\"Tu\",\"Yu\",\"Gua\",\"Wen\",\"Huan\",\"Ku\",\"Jia\",\"Yin\",\"Yi\",\"Lu\",\"Sao\",\"Jue\",\"Chi\",\"Xi\",\"Guan\",\"Yi\",\"Wen\",\"Ji\",\"Chuang\",\"Ban\",\"Lei\",\"Liu\",\"Chai\",\"Shou\",\"Nue\",\"Dian\",\"Da\",\"Pie\",\"Tan\",\"Zhang\",\"Biao\",\"Shen\",\"Cu\",\"Luo\",\"Yi\",\"Zong\",\"Chou\",\"Zhang\",\"Zhai\",\"Sou\",\"Suo\",\"Que\",\"Diao\",\"Lou\",\"Lu\",\"Mo\",\"Jin\",\"Yin\",\"Ying\",\"Huang\",\"Fu\",\"Liao\",\"Long\",\"Qiao\",\"Liu\",\"Lao\",\"Xian\",\"Fei\",\"Dan\",\"Yin\",\"He\",\"Ai\",\"Ban\",\"Xian\",\"Guan\",\"Guai\",\"Nong\",\"Yu\",\"Wei\",\"Yi\",\"Yong\",\"Pi\",\"Lei\",\"Li\",\"Shu\",\"Dan\",\"Lin\",\"Dian\",\"Lin\",\"Lai\",\"Pie\",\"Ji\",\"Chi\",\"Yang\",\"Xian\",\"Jie\",\"Zheng\",,\"Li\",\"Huo\",\"Lai\",\"Shaku\",\"Dian\",\"Xian\",\"Ying\",\"Yin\",\"Qu\",\"Yong\",\"Tan\",\"Dian\",\"Luo\",\"Luan\",\"Luan\",\"Bo\",,\"Gui\",\"Po\",\"Fa\",\"Deng\",\"Fa\",\"Bai\",\"Bai\",\"Qie\",\"Bi\",\"Zao\",\"Zao\",\"Mao\",\"De\",\"Pa\",\"Jie\",\"Huang\",\"Gui\",\"Ci\",\"Ling\",\"Gao\",\"Mo\",\"Ji\",\"Jiao\",\"Peng\",\"Gao\",\"Ai\",\"E\",\"Hao\",\"Han\",\"Bi\",\"Wan\",\"Chou\",\"Qian\",\"Xi\",\"Ai\",\"Jiong\",\"Hao\",\"Huang\",\"Hao\",\"Ze\",\"Cui\",\"Hao\",\"Xiao\",\"Ye\",\"Po\",\"Hao\",\"Jiao\",\"Ai\",\"Xing\",\"Huang\",\"Li\",\"Piao\",\"He\",\"Jiao\",\"Pi\",\"Gan\",\"Pao\",\"Zhou\",\"Jun\",\"Qiu\",\"Cun\",\"Que\",\"Zha\",\"Gu\",\"Jun\",\"Jun\",\"Zhou\",\"Zha\",\"Gu\",\"Zhan\",\"Du\",\"Min\",\"Qi\",\"Ying\",\"Yu\",\"Bei\",\"Zhao\",\"Zhong\",\"Pen\",\"He\",\"Ying\",\"He\",\"Yi\",\"Bo\",\"Wan\",\"He\",\"Ang\",\"Zhan\",\"Yan\",\"Jian\",\"He\",\"Yu\",\"Kui\",\"Fan\",\"Gai\",\"Dao\",\"Pan\",\"Fu\",\"Qiu\",\"Sheng\",\"Dao\",\"Lu\",\"Zhan\",\"Meng\",\"Li\",\"Jin\",\"Xu\",\"Jian\",\"Pan\",\"Guan\",\"An\",\"Lu\",\"Shu\",\"Zhou\",\"Dang\",\"An\",\"Gu\",\"Li\",\"Mu\",\"Cheng\",\"Gan\",\"Xu\",\"Mang\",\"Mang\",\"Zhi\",\"Qi\",\"Ruan\",\"Tian\",\"Xiang\",\"Dun\",\"Xin\",\"Xi\",\"Pan\",\"Feng\",\"Dun\",\"Min\"],[\"Ming\",\"Sheng\",\"Shi\",\"Yun\",\"Mian\",\"Pan\",\"Fang\",\"Miao\",\"Dan\",\"Mei\",\"Mao\",\"Kan\",\"Xian\",\"Ou\",\"Shi\",\"Yang\",\"Zheng\",\"Yao\",\"Shen\",\"Huo\",\"Da\",\"Zhen\",\"Kuang\",\"Ju\",\"Shen\",\"Chi\",\"Sheng\",\"Mei\",\"Mo\",\"Zhu\",\"Zhen\",\"Zhen\",\"Mian\",\"Di\",\"Yuan\",\"Die\",\"Yi\",\"Zi\",\"Zi\",\"Chao\",\"Zha\",\"Xuan\",\"Bing\",\"Mi\",\"Long\",\"Sui\",\"Dong\",\"Mi\",\"Die\",\"Yi\",\"Er\",\"Ming\",\"Xuan\",\"Chi\",\"Kuang\",\"Juan\",\"Mou\",\"Zhen\",\"Tiao\",\"Yang\",\"Yan\",\"Mo\",\"Zhong\",\"Mai\",\"Zhao\",\"Zheng\",\"Mei\",\"Jun\",\"Shao\",\"Han\",\"Huan\",\"Di\",\"Cheng\",\"Cuo\",\"Juan\",\"E\",\"Wan\",\"Xian\",\"Xi\",\"Kun\",\"Lai\",\"Jian\",\"Shan\",\"Tian\",\"Hun\",\"Wan\",\"Ling\",\"Shi\",\"Qiong\",\"Lie\",\"Yai\",\"Jing\",\"Zheng\",\"Li\",\"Lai\",\"Sui\",\"Juan\",\"Shui\",\"Sui\",\"Du\",\"Bi\",\"Bi\",\"Mu\",\"Hun\",\"Ni\",\"Lu\",\"Yi\",\"Jie\",\"Cai\",\"Zhou\",\"Yu\",\"Hun\",\"Ma\",\"Xia\",\"Xing\",\"Xi\",\"Gun\",\"Cai\",\"Chun\",\"Jian\",\"Mei\",\"Du\",\"Hou\",\"Xuan\",\"Ti\",\"Kui\",\"Gao\",\"Rui\",\"Mou\",\"Xu\",\"Fa\",\"Wen\",\"Miao\",\"Chou\",\"Kui\",\"Mi\",\"Weng\",\"Kou\",\"Dang\",\"Chen\",\"Ke\",\"Sou\",\"Xia\",\"Qiong\",\"Mao\",\"Ming\",\"Man\",\"Shui\",\"Ze\",\"Zhang\",\"Yi\",\"Diao\",\"Ou\",\"Mo\",\"Shun\",\"Cong\",\"Lou\",\"Chi\",\"Man\",\"Piao\",\"Cheng\",\"Ji\",\"Meng\",,\"Run\",\"Pie\",\"Xi\",\"Qiao\",\"Pu\",\"Zhu\",\"Deng\",\"Shen\",\"Shun\",\"Liao\",\"Che\",\"Xian\",\"Kan\",\"Ye\",\"Xu\",\"Tong\",\"Mou\",\"Lin\",\"Kui\",\"Xian\",\"Ye\",\"Ai\",\"Hui\",\"Zhan\",\"Jian\",\"Gu\",\"Zhao\",\"Qu\",\"Wei\",\"Chou\",\"Sao\",\"Ning\",\"Xun\",\"Yao\",\"Huo\",\"Meng\",\"Mian\",\"Bin\",\"Mian\",\"Li\",\"Kuang\",\"Jue\",\"Xuan\",\"Mian\",\"Huo\",\"Lu\",\"Meng\",\"Long\",\"Guan\",\"Man\",\"Xi\",\"Chu\",\"Tang\",\"Kan\",\"Zhu\",\"Mao\",\"Jin\",\"Lin\",\"Yu\",\"Shuo\",\"Ce\",\"Jue\",\"Shi\",\"Yi\",\"Shen\",\"Zhi\",\"Hou\",\"Shen\",\"Ying\",\"Ju\",\"Zhou\",\"Jiao\",\"Cuo\",\"Duan\",\"Ai\",\"Jiao\",\"Zeng\",\"Huo\",\"Bai\",\"Shi\",\"Ding\",\"Qi\",\"Ji\",\"Zi\",\"Gan\",\"Wu\",\"Tuo\",\"Ku\",\"Qiang\",\"Xi\",\"Fan\",\"Kuang\"],[\"Dang\",\"Ma\",\"Sha\",\"Dan\",\"Jue\",\"Li\",\"Fu\",\"Min\",\"Nuo\",\"Huo\",\"Kang\",\"Zhi\",\"Qi\",\"Kan\",\"Jie\",\"Fen\",\"E\",\"Ya\",\"Pi\",\"Zhe\",\"Yan\",\"Sui\",\"Zhuan\",\"Che\",\"Dun\",\"Pan\",\"Yan\",,\"Feng\",\"Fa\",\"Mo\",\"Zha\",\"Qu\",\"Yu\",\"Luo\",\"Tuo\",\"Tuo\",\"Di\",\"Zhai\",\"Zhen\",\"Ai\",\"Fei\",\"Mu\",\"Zhu\",\"Li\",\"Bian\",\"Nu\",\"Ping\",\"Peng\",\"Ling\",\"Pao\",\"Le\",\"Po\",\"Bo\",\"Po\",\"Shen\",\"Za\",\"Nuo\",\"Li\",\"Long\",\"Tong\",,\"Li\",\"Aragane\",\"Chu\",\"Keng\",\"Quan\",\"Zhu\",\"Kuang\",\"Huo\",\"E\",\"Nao\",\"Jia\",\"Lu\",\"Wei\",\"Ai\",\"Luo\",\"Ken\",\"Xing\",\"Yan\",\"Tong\",\"Peng\",\"Xi\",,\"Hong\",\"Shuo\",\"Xia\",\"Qiao\",,\"Wei\",\"Qiao\",,\"Keng\",\"Xiao\",\"Que\",\"Chan\",\"Lang\",\"Hong\",\"Yu\",\"Xiao\",\"Xia\",\"Mang\",\"Long\",\"Iong\",\"Che\",\"Che\",\"E\",\"Liu\",\"Ying\",\"Mang\",\"Que\",\"Yan\",\"Sha\",\"Kun\",\"Yu\",,\"Kaki\",\"Lu\",\"Chen\",\"Jian\",\"Nue\",\"Song\",\"Zhuo\",\"Keng\",\"Peng\",\"Yan\",\"Zhui\",\"Kong\",\"Ceng\",\"Qi\",\"Zong\",\"Qing\",\"Lin\",\"Jun\",\"Bo\",\"Ding\",\"Min\",\"Diao\",\"Jian\",\"He\",\"Lu\",\"Ai\",\"Sui\",\"Que\",\"Ling\",\"Bei\",\"Yin\",\"Dui\",\"Wu\",\"Qi\",\"Lun\",\"Wan\",\"Dian\",\"Gang\",\"Pei\",\"Qi\",\"Chen\",\"Ruan\",\"Yan\",\"Die\",\"Ding\",\"Du\",\"Tuo\",\"Jie\",\"Ying\",\"Bian\",\"Ke\",\"Bi\",\"Wei\",\"Shuo\",\"Zhen\",\"Duan\",\"Xia\",\"Dang\",\"Ti\",\"Nao\",\"Peng\",\"Jian\",\"Di\",\"Tan\",\"Cha\",\"Seki\",\"Qi\",,\"Feng\",\"Xuan\",\"Que\",\"Que\",\"Ma\",\"Gong\",\"Nian\",\"Su\",\"E\",\"Ci\",\"Liu\",\"Si\",\"Tang\",\"Bang\",\"Hua\",\"Pi\",\"Wei\",\"Sang\",\"Lei\",\"Cuo\",\"Zhen\",\"Xia\",\"Qi\",\"Lian\",\"Pan\",\"Wei\",\"Yun\",\"Dui\",\"Zhe\",\"Ke\",\"La\",,\"Qing\",\"Gun\",\"Zhuan\",\"Chan\",\"Qi\",\"Ao\",\"Peng\",\"Lu\",\"Lu\",\"Kan\",\"Qiang\",\"Chen\",\"Yin\",\"Lei\",\"Biao\",\"Qi\",\"Mo\",\"Qi\",\"Cui\",\"Zong\",\"Qing\",\"Chuo\",,\"Ji\",\"Shan\",\"Lao\",\"Qu\",\"Zeng\",\"Deng\",\"Jian\",\"Xi\",\"Lin\",\"Ding\",\"Dian\",\"Huang\",\"Pan\",\"Za\",\"Qiao\",\"Di\",\"Li\"],[\"Tani\",\"Jiao\",,\"Zhang\",\"Qiao\",\"Dun\",\"Xian\",\"Yu\",\"Zhui\",\"He\",\"Huo\",\"Zhai\",\"Lei\",\"Ke\",\"Chu\",\"Ji\",\"Que\",\"Dang\",\"Yi\",\"Jiang\",\"Pi\",\"Pi\",\"Yu\",\"Pin\",\"Qi\",\"Ai\",\"Kai\",\"Jian\",\"Yu\",\"Ruan\",\"Meng\",\"Pao\",\"Ci\",,,\"Mie\",\"Ca\",\"Xian\",\"Kuang\",\"Lei\",\"Lei\",\"Zhi\",\"Li\",\"Li\",\"Fan\",\"Que\",\"Pao\",\"Ying\",\"Li\",\"Long\",\"Long\",\"Mo\",\"Bo\",\"Shuang\",\"Guan\",\"Lan\",\"Zan\",\"Yan\",\"Shi\",\"Shi\",\"Li\",\"Reng\",\"She\",\"Yue\",\"Si\",\"Qi\",\"Ta\",\"Ma\",\"Xie\",\"Xian\",\"Xian\",\"Zhi\",\"Qi\",\"Zhi\",\"Beng\",\"Dui\",\"Zhong\",,\"Yi\",\"Shi\",\"You\",\"Zhi\",\"Tiao\",\"Fu\",\"Fu\",\"Mi\",\"Zu\",\"Zhi\",\"Suan\",\"Mei\",\"Zuo\",\"Qu\",\"Hu\",\"Zhu\",\"Shen\",\"Sui\",\"Ci\",\"Chai\",\"Mi\",\"Lu\",\"Yu\",\"Xiang\",\"Wu\",\"Tiao\",\"Piao\",\"Zhu\",\"Gui\",\"Xia\",\"Zhi\",\"Ji\",\"Gao\",\"Zhen\",\"Gao\",\"Shui\",\"Jin\",\"Chen\",\"Gai\",\"Kun\",\"Di\",\"Dao\",\"Huo\",\"Tao\",\"Qi\",\"Gu\",\"Guan\",\"Zui\",\"Ling\",\"Lu\",\"Bing\",\"Jin\",\"Dao\",\"Zhi\",\"Lu\",\"Shan\",\"Bei\",\"Zhe\",\"Hui\",\"You\",\"Xi\",\"Yin\",\"Zi\",\"Huo\",\"Zhen\",\"Fu\",\"Yuan\",\"Wu\",\"Xian\",\"Yang\",\"Ti\",\"Yi\",\"Mei\",\"Si\",\"Di\",,\"Zhuo\",\"Zhen\",\"Yong\",\"Ji\",\"Gao\",\"Tang\",\"Si\",\"Ma\",\"Ta\",,\"Xuan\",\"Qi\",\"Yu\",\"Xi\",\"Ji\",\"Si\",\"Chan\",\"Tan\",\"Kuai\",\"Sui\",\"Li\",\"Nong\",\"Ni\",\"Dao\",\"Li\",\"Rang\",\"Yue\",\"Ti\",\"Zan\",\"Lei\",\"Rou\",\"Yu\",\"Yu\",\"Chi\",\"Xie\",\"Qin\",\"He\",\"Tu\",\"Xiu\",\"Si\",\"Ren\",\"Tu\",\"Zi\",\"Cha\",\"Gan\",\"Yi\",\"Xian\",\"Bing\",\"Nian\",\"Qiu\",\"Qiu\",\"Zhong\",\"Fen\",\"Hao\",\"Yun\",\"Ke\",\"Miao\",\"Zhi\",\"Geng\",\"Bi\",\"Zhi\",\"Yu\",\"Mi\",\"Ku\",\"Ban\",\"Pi\",\"Ni\",\"Li\",\"You\",\"Zu\",\"Pi\",\"Ba\",\"Ling\",\"Mo\",\"Cheng\",\"Nian\",\"Qin\",\"Yang\",\"Zuo\",\"Zhi\",\"Zhi\",\"Shu\",\"Ju\",\"Zi\",\"Huo\",\"Ji\",\"Cheng\",\"Tong\",\"Zhi\",\"Huo\",\"He\",\"Yin\",\"Zi\",\"Zhi\",\"Jie\",\"Ren\",\"Du\",\"Yi\",\"Zhu\",\"Hui\",\"Nong\",\"Fu\"],[\"Xi\",\"Kao\",\"Lang\",\"Fu\",\"Ze\",\"Shui\",\"Lu\",\"Kun\",\"Gan\",\"Geng\",\"Ti\",\"Cheng\",\"Tu\",\"Shao\",\"Shui\",\"Ya\",\"Lun\",\"Lu\",\"Gu\",\"Zuo\",\"Ren\",\"Zhun\",\"Bang\",\"Bai\",\"Ji\",\"Zhi\",\"Zhi\",\"Kun\",\"Leng\",\"Peng\",\"Ke\",\"Bing\",\"Chou\",\"Zu\",\"Yu\",\"Su\",\"Lue\",,\"Yi\",\"Xi\",\"Bian\",\"Ji\",\"Fu\",\"Bi\",\"Nuo\",\"Jie\",\"Zhong\",\"Zong\",\"Xu\",\"Cheng\",\"Dao\",\"Wen\",\"Lian\",\"Zi\",\"Yu\",\"Ji\",\"Xu\",\"Zhen\",\"Zhi\",\"Dao\",\"Jia\",\"Ji\",\"Gao\",\"Gao\",\"Gu\",\"Rong\",\"Sui\",\"You\",\"Ji\",\"Kang\",\"Mu\",\"Shan\",\"Men\",\"Zhi\",\"Ji\",\"Lu\",\"Su\",\"Ji\",\"Ying\",\"Wen\",\"Qiu\",\"Se\",,\"Yi\",\"Huang\",\"Qie\",\"Ji\",\"Sui\",\"Xiao\",\"Pu\",\"Jiao\",\"Zhuo\",\"Tong\",\"Sai\",\"Lu\",\"Sui\",\"Nong\",\"Se\",\"Hui\",\"Rang\",\"Nuo\",\"Yu\",\"Bin\",\"Ji\",\"Tui\",\"Wen\",\"Cheng\",\"Huo\",\"Gong\",\"Lu\",\"Biao\",,\"Rang\",\"Zhuo\",\"Li\",\"Zan\",\"Xue\",\"Wa\",\"Jiu\",\"Qiong\",\"Xi\",\"Qiong\",\"Kong\",\"Yu\",\"Sen\",\"Jing\",\"Yao\",\"Chuan\",\"Zhun\",\"Tu\",\"Lao\",\"Qie\",\"Zhai\",\"Yao\",\"Bian\",\"Bao\",\"Yao\",\"Bing\",\"Wa\",\"Zhu\",\"Jiao\",\"Qiao\",\"Diao\",\"Wu\",\"Gui\",\"Yao\",\"Zhi\",\"Chuang\",\"Yao\",\"Tiao\",\"Jiao\",\"Chuang\",\"Jiong\",\"Xiao\",\"Cheng\",\"Kou\",\"Cuan\",\"Wo\",\"Dan\",\"Ku\",\"Ke\",\"Zhui\",\"Xu\",\"Su\",\"Guan\",\"Kui\",\"Dou\",,\"Yin\",\"Wo\",\"Wa\",\"Ya\",\"Yu\",\"Ju\",\"Qiong\",\"Yao\",\"Yao\",\"Tiao\",\"Chao\",\"Yu\",\"Tian\",\"Diao\",\"Ju\",\"Liao\",\"Xi\",\"Wu\",\"Kui\",\"Chuang\",\"Zhao\",,\"Kuan\",\"Long\",\"Cheng\",\"Cui\",\"Piao\",\"Zao\",\"Cuan\",\"Qiao\",\"Qiong\",\"Dou\",\"Zao\",\"Long\",\"Qie\",\"Li\",\"Chu\",\"Shi\",\"Fou\",\"Qian\",\"Chu\",\"Hong\",\"Qi\",\"Qian\",\"Gong\",\"Shi\",\"Shu\",\"Miao\",\"Ju\",\"Zhan\",\"Zhu\",\"Ling\",\"Long\",\"Bing\",\"Jing\",\"Jing\",\"Zhang\",\"Yi\",\"Si\",\"Jun\",\"Hong\",\"Tong\",\"Song\",\"Jing\",\"Diao\",\"Yi\",\"Shu\",\"Jing\",\"Qu\",\"Jie\",\"Ping\",\"Duan\",\"Shao\",\"Zhuan\",\"Ceng\",\"Deng\",\"Cui\",\"Huai\",\"Jing\",\"Kan\",\"Jing\",\"Zhu\",\"Zhu\",\"Le\",\"Peng\",\"Yu\",\"Chi\",\"Gan\"],[\"Mang\",\"Zhu\",\"Utsubo\",\"Du\",\"Ji\",\"Xiao\",\"Ba\",\"Suan\",\"Ji\",\"Zhen\",\"Zhao\",\"Sun\",\"Ya\",\"Zhui\",\"Yuan\",\"Hu\",\"Gang\",\"Xiao\",\"Cen\",\"Pi\",\"Bi\",\"Jian\",\"Yi\",\"Dong\",\"Shan\",\"Sheng\",\"Xia\",\"Di\",\"Zhu\",\"Na\",\"Chi\",\"Gu\",\"Li\",\"Qie\",\"Min\",\"Bao\",\"Tiao\",\"Si\",\"Fu\",\"Ce\",\"Ben\",\"Pei\",\"Da\",\"Zi\",\"Di\",\"Ling\",\"Ze\",\"Nu\",\"Fu\",\"Gou\",\"Fan\",\"Jia\",\"Ge\",\"Fan\",\"Shi\",\"Mao\",\"Po\",\"Sey\",\"Jian\",\"Qiong\",\"Long\",\"Souke\",\"Bian\",\"Luo\",\"Gui\",\"Qu\",\"Chi\",\"Yin\",\"Yao\",\"Xian\",\"Bi\",\"Qiong\",\"Gua\",\"Deng\",\"Jiao\",\"Jin\",\"Quan\",\"Sun\",\"Ru\",\"Fa\",\"Kuang\",\"Zhu\",\"Tong\",\"Ji\",\"Da\",\"Xing\",\"Ce\",\"Zhong\",\"Kou\",\"Lai\",\"Bi\",\"Shai\",\"Dang\",\"Zheng\",\"Ce\",\"Fu\",\"Yun\",\"Tu\",\"Pa\",\"Li\",\"Lang\",\"Ju\",\"Guan\",\"Jian\",\"Han\",\"Tong\",\"Xia\",\"Zhi\",\"Cheng\",\"Suan\",\"Shi\",\"Zhu\",\"Zuo\",\"Xiao\",\"Shao\",\"Ting\",\"Ce\",\"Yan\",\"Gao\",\"Kuai\",\"Gan\",\"Chou\",\"Kago\",\"Gang\",\"Yun\",\"O\",\"Qian\",\"Xiao\",\"Jian\",\"Pu\",\"Lai\",\"Zou\",\"Bi\",\"Bi\",\"Bi\",\"Ge\",\"Chi\",\"Guai\",\"Yu\",\"Jian\",\"Zhao\",\"Gu\",\"Chi\",\"Zheng\",\"Jing\",\"Sha\",\"Zhou\",\"Lu\",\"Bo\",\"Ji\",\"Lin\",\"Suan\",\"Jun\",\"Fu\",\"Zha\",\"Gu\",\"Kong\",\"Qian\",\"Quan\",\"Jun\",\"Chui\",\"Guan\",\"Yuan\",\"Ce\",\"Ju\",\"Bo\",\"Ze\",\"Qie\",\"Tuo\",\"Luo\",\"Dan\",\"Xiao\",\"Ruo\",\"Jian\",\"Xuan\",\"Bian\",\"Sun\",\"Xiang\",\"Xian\",\"Ping\",\"Zhen\",\"Sheng\",\"Hu\",\"Shi\",\"Zhu\",\"Yue\",\"Chun\",\"Lu\",\"Wu\",\"Dong\",\"Xiao\",\"Ji\",\"Jie\",\"Huang\",\"Xing\",\"Mei\",\"Fan\",\"Chui\",\"Zhuan\",\"Pian\",\"Feng\",\"Zhu\",\"Hong\",\"Qie\",\"Hou\",\"Qiu\",\"Miao\",\"Qian\",,\"Kui\",\"Sik\",\"Lou\",\"Yun\",\"He\",\"Tang\",\"Yue\",\"Chou\",\"Gao\",\"Fei\",\"Ruo\",\"Zheng\",\"Gou\",\"Nie\",\"Qian\",\"Xiao\",\"Cuan\",\"Gong\",\"Pang\",\"Du\",\"Li\",\"Bi\",\"Zhuo\",\"Chu\",\"Shai\",\"Chi\",\"Zhu\",\"Qiang\",\"Long\",\"Lan\",\"Jian\",\"Bu\",\"Li\",\"Hui\",\"Bi\",\"Di\",\"Cong\",\"Yan\",\"Peng\",\"Sen\",\"Zhuan\",\"Pai\",\"Piao\",\"Dou\",\"Yu\",\"Mie\",\"Zhuan\"],[\"Ze\",\"Xi\",\"Guo\",\"Yi\",\"Hu\",\"Chan\",\"Kou\",\"Cu\",\"Ping\",\"Chou\",\"Ji\",\"Gui\",\"Su\",\"Lou\",\"Zha\",\"Lu\",\"Nian\",\"Suo\",\"Cuan\",\"Sasara\",\"Suo\",\"Le\",\"Duan\",\"Yana\",\"Xiao\",\"Bo\",\"Mi\",\"Si\",\"Dang\",\"Liao\",\"Dan\",\"Dian\",\"Fu\",\"Jian\",\"Min\",\"Kui\",\"Dai\",\"Qiao\",\"Deng\",\"Huang\",\"Sun\",\"Lao\",\"Zan\",\"Xiao\",\"Du\",\"Shi\",\"Zan\",,\"Pai\",\"Hata\",\"Pai\",\"Gan\",\"Ju\",\"Du\",\"Lu\",\"Yan\",\"Bo\",\"Dang\",\"Sai\",\"Ke\",\"Long\",\"Qian\",\"Lian\",\"Bo\",\"Zhou\",\"Lai\",,\"Lan\",\"Kui\",\"Yu\",\"Yue\",\"Hao\",\"Zhen\",\"Tai\",\"Ti\",\"Mi\",\"Chou\",\"Ji\",,\"Hata\",\"Teng\",\"Zhuan\",\"Zhou\",\"Fan\",\"Sou\",\"Zhou\",\"Kuji\",\"Zhuo\",\"Teng\",\"Lu\",\"Lu\",\"Jian\",\"Tuo\",\"Ying\",\"Yu\",\"Lai\",\"Long\",\"Shinshi\",\"Lian\",\"Lan\",\"Qian\",\"Yue\",\"Zhong\",\"Qu\",\"Lian\",\"Bian\",\"Duan\",\"Zuan\",\"Li\",\"Si\",\"Luo\",\"Ying\",\"Yue\",\"Zhuo\",\"Xu\",\"Mi\",\"Di\",\"Fan\",\"Shen\",\"Zhe\",\"Shen\",\"Nu\",\"Xie\",\"Lei\",\"Xian\",\"Zi\",\"Ni\",\"Cun\",,\"Qian\",\"Kume\",\"Bi\",\"Ban\",\"Wu\",\"Sha\",\"Kang\",\"Rou\",\"Fen\",\"Bi\",\"Cui\",,\"Li\",\"Chi\",\"Nukamiso\",\"Ro\",\"Ba\",\"Li\",\"Gan\",\"Ju\",\"Po\",\"Mo\",\"Cu\",\"Nian\",\"Zhou\",\"Li\",\"Su\",\"Tiao\",\"Li\",\"Qi\",\"Su\",\"Hong\",\"Tong\",\"Zi\",\"Ce\",\"Yue\",\"Zhou\",\"Lin\",\"Zhuang\",\"Bai\",,\"Fen\",\"Ji\",,\"Sukumo\",\"Liang\",\"Xian\",\"Fu\",\"Liang\",\"Can\",\"Geng\",\"Li\",\"Yue\",\"Lu\",\"Ju\",\"Qi\",\"Cui\",\"Bai\",\"Zhang\",\"Lin\",\"Zong\",\"Jing\",\"Guo\",\"Kouji\",\"San\",\"San\",\"Tang\",\"Bian\",\"Rou\",\"Mian\",\"Hou\",\"Xu\",\"Zong\",\"Hu\",\"Jian\",\"Zan\",\"Ci\",\"Li\",\"Xie\",\"Fu\",\"Ni\",\"Bei\",\"Gu\",\"Xiu\",\"Gao\",\"Tang\",\"Qiu\",\"Sukumo\",\"Cao\",\"Zhuang\",\"Tang\",\"Mi\",\"San\",\"Fen\",\"Zao\",\"Kang\",\"Jiang\",\"Mo\",\"San\",\"San\",\"Nuo\",\"Xi\",\"Liang\",\"Jiang\",\"Kuai\",\"Bo\",\"Huan\",,\"Zong\",\"Xian\",\"Nuo\",\"Tuan\",\"Nie\",\"Li\",\"Zuo\",\"Di\",\"Nie\",\"Tiao\",\"Lan\",\"Mi\",\"Jiao\",\"Jiu\",\"Xi\",\"Gong\",\"Zheng\",\"Jiu\",\"You\"],[\"Ji\",\"Cha\",\"Zhou\",\"Xun\",\"Yue\",\"Hong\",\"Yu\",\"He\",\"Wan\",\"Ren\",\"Wen\",\"Wen\",\"Qiu\",\"Na\",\"Zi\",\"Tou\",\"Niu\",\"Fou\",\"Jie\",\"Shu\",\"Chun\",\"Pi\",\"Yin\",\"Sha\",\"Hong\",\"Zhi\",\"Ji\",\"Fen\",\"Yun\",\"Ren\",\"Dan\",\"Jin\",\"Su\",\"Fang\",\"Suo\",\"Cui\",\"Jiu\",\"Zha\",\"Kinu\",\"Jin\",\"Fu\",\"Zhi\",\"Ci\",\"Zi\",\"Chou\",\"Hong\",\"Zha\",\"Lei\",\"Xi\",\"Fu\",\"Xie\",\"Shen\",\"Bei\",\"Zhu\",\"Qu\",\"Ling\",\"Zhu\",\"Shao\",\"Gan\",\"Yang\",\"Fu\",\"Tuo\",\"Zhen\",\"Dai\",\"Zhuo\",\"Shi\",\"Zhong\",\"Xian\",\"Zu\",\"Jiong\",\"Ban\",\"Ju\",\"Mo\",\"Shu\",\"Zui\",\"Wata\",\"Jing\",\"Ren\",\"Heng\",\"Xie\",\"Jie\",\"Zhu\",\"Chou\",\"Gua\",\"Bai\",\"Jue\",\"Kuang\",\"Hu\",\"Ci\",\"Geng\",\"Geng\",\"Tao\",\"Xie\",\"Ku\",\"Jiao\",\"Quan\",\"Gai\",\"Luo\",\"Xuan\",\"Bing\",\"Xian\",\"Fu\",\"Gei\",\"Tong\",\"Rong\",\"Tiao\",\"Yin\",\"Lei\",\"Xie\",\"Quan\",\"Xu\",\"Lun\",\"Die\",\"Tong\",\"Si\",\"Jiang\",\"Xiang\",\"Hui\",\"Jue\",\"Zhi\",\"Jian\",\"Juan\",\"Chi\",\"Mian\",\"Zhen\",\"Lu\",\"Cheng\",\"Qiu\",\"Shu\",\"Bang\",\"Tong\",\"Xiao\",\"Wan\",\"Qin\",\"Geng\",\"Xiu\",\"Ti\",\"Xiu\",\"Xie\",\"Hong\",\"Xi\",\"Fu\",\"Ting\",\"Sui\",\"Dui\",\"Kun\",\"Fu\",\"Jing\",\"Hu\",\"Zhi\",\"Yan\",\"Jiong\",\"Feng\",\"Ji\",\"Sok\",\"Kase\",\"Zong\",\"Lin\",\"Duo\",\"Li\",\"Lu\",\"Liang\",\"Chou\",\"Quan\",\"Shao\",\"Qi\",\"Qi\",\"Zhun\",\"Qi\",\"Wan\",\"Qian\",\"Xian\",\"Shou\",\"Wei\",\"Qi\",\"Tao\",\"Wan\",\"Gang\",\"Wang\",\"Beng\",\"Zhui\",\"Cai\",\"Guo\",\"Cui\",\"Lun\",\"Liu\",\"Qi\",\"Zhan\",\"Bei\",\"Chuo\",\"Ling\",\"Mian\",\"Qi\",\"Qie\",\"Tan\",\"Zong\",\"Gun\",\"Zou\",\"Yi\",\"Zi\",\"Xing\",\"Liang\",\"Jin\",\"Fei\",\"Rui\",\"Min\",\"Yu\",\"Zong\",\"Fan\",\"Lu\",\"Xu\",\"Yingl\",\"Zhang\",\"Kasuri\",\"Xu\",\"Xiang\",\"Jian\",\"Ke\",\"Xian\",\"Ruan\",\"Mian\",\"Qi\",\"Duan\",\"Zhong\",\"Di\",\"Min\",\"Miao\",\"Yuan\",\"Xie\",\"Bao\",\"Si\",\"Qiu\",\"Bian\",\"Huan\",\"Geng\",\"Cong\",\"Mian\",\"Wei\",\"Fu\",\"Wei\",\"Yu\",\"Gou\",\"Miao\",\"Xie\",\"Lian\",\"Zong\",\"Bian\",\"Yun\",\"Yin\",\"Ti\",\"Gua\",\"Zhi\",\"Yun\",\"Cheng\",\"Chan\",\"Dai\"],[\"Xia\",\"Yuan\",\"Zong\",\"Xu\",\"Nawa\",\"Odoshi\",\"Geng\",\"Sen\",\"Ying\",\"Jin\",\"Yi\",\"Zhui\",\"Ni\",\"Bang\",\"Gu\",\"Pan\",\"Zhou\",\"Jian\",\"Cuo\",\"Quan\",\"Shuang\",\"Yun\",\"Xia\",\"Shuai\",\"Xi\",\"Rong\",\"Tao\",\"Fu\",\"Yun\",\"Zhen\",\"Gao\",\"Ru\",\"Hu\",\"Zai\",\"Teng\",\"Xian\",\"Su\",\"Zhen\",\"Zong\",\"Tao\",\"Horo\",\"Cai\",\"Bi\",\"Feng\",\"Cu\",\"Li\",\"Suo\",\"Yin\",\"Xi\",\"Zong\",\"Lei\",\"Zhuan\",\"Qian\",\"Man\",\"Zhi\",\"Lu\",\"Mo\",\"Piao\",\"Lian\",\"Mi\",\"Xuan\",\"Zong\",\"Ji\",\"Shan\",\"Sui\",\"Fan\",\"Shuai\",\"Beng\",\"Yi\",\"Sao\",\"Mou\",\"Zhou\",\"Qiang\",\"Hun\",\"Sem\",\"Xi\",\"Jung\",\"Xiu\",\"Ran\",\"Xuan\",\"Hui\",\"Qiao\",\"Zeng\",\"Zuo\",\"Zhi\",\"Shan\",\"San\",\"Lin\",\"Yu\",\"Fan\",\"Liao\",\"Chuo\",\"Zun\",\"Jian\",\"Rao\",\"Chan\",\"Rui\",\"Xiu\",\"Hui\",\"Hua\",\"Zuan\",\"Xi\",\"Qiang\",\"Un\",\"Da\",\"Sheng\",\"Hui\",\"Xi\",\"Se\",\"Jian\",\"Jiang\",\"Huan\",\"Zao\",\"Cong\",\"Jie\",\"Jiao\",\"Bo\",\"Chan\",\"Yi\",\"Nao\",\"Sui\",\"Yi\",\"Shai\",\"Xu\",\"Ji\",\"Bin\",\"Qian\",\"Lan\",\"Pu\",\"Xun\",\"Zuan\",\"Qi\",\"Peng\",\"Li\",\"Mo\",\"Lei\",\"Xie\",\"Zuan\",\"Kuang\",\"You\",\"Xu\",\"Lei\",\"Xian\",\"Chan\",\"Kou\",\"Lu\",\"Chan\",\"Ying\",\"Cai\",\"Xiang\",\"Xian\",\"Zui\",\"Zuan\",\"Luo\",\"Xi\",\"Dao\",\"Lan\",\"Lei\",\"Lian\",\"Si\",\"Jiu\",\"Yu\",\"Hong\",\"Zhou\",\"Xian\",\"He\",\"Yue\",\"Ji\",\"Wan\",\"Kuang\",\"Ji\",\"Ren\",\"Wei\",\"Yun\",\"Hong\",\"Chun\",\"Pi\",\"Sha\",\"Gang\",\"Na\",\"Ren\",\"Zong\",\"Lun\",\"Fen\",\"Zhi\",\"Wen\",\"Fang\",\"Zhu\",\"Yin\",\"Niu\",\"Shu\",\"Xian\",\"Gan\",\"Xie\",\"Fu\",\"Lian\",\"Zu\",\"Shen\",\"Xi\",\"Zhi\",\"Zhong\",\"Zhou\",\"Ban\",\"Fu\",\"Zhuo\",\"Shao\",\"Yi\",\"Jing\",\"Dai\",\"Bang\",\"Rong\",\"Jie\",\"Ku\",\"Rao\",\"Die\",\"Heng\",\"Hui\",\"Gei\",\"Xuan\",\"Jiang\",\"Luo\",\"Jue\",\"Jiao\",\"Tong\",\"Geng\",\"Xiao\",\"Juan\",\"Xiu\",\"Xi\",\"Sui\",\"Tao\",\"Ji\",\"Ti\",\"Ji\",\"Xu\",\"Ling\",,\"Xu\",\"Qi\",\"Fei\",\"Chuo\",\"Zhang\",\"Gun\",\"Sheng\",\"Wei\",\"Mian\",\"Shou\",\"Beng\",\"Chou\",\"Tao\",\"Liu\",\"Quan\",\"Zong\",\"Zhan\",\"Wan\",\"Lu\"],[\"Zhui\",\"Zi\",\"Ke\",\"Xiang\",\"Jian\",\"Mian\",\"Lan\",\"Ti\",\"Miao\",\"Qi\",\"Yun\",\"Hui\",\"Si\",\"Duo\",\"Duan\",\"Bian\",\"Xian\",\"Gou\",\"Zhui\",\"Huan\",\"Di\",\"Lu\",\"Bian\",\"Min\",\"Yuan\",\"Jin\",\"Fu\",\"Ru\",\"Zhen\",\"Feng\",\"Shuai\",\"Gao\",\"Chan\",\"Li\",\"Yi\",\"Jian\",\"Bin\",\"Piao\",\"Man\",\"Lei\",\"Ying\",\"Suo\",\"Mou\",\"Sao\",\"Xie\",\"Liao\",\"Shan\",\"Zeng\",\"Jiang\",\"Qian\",\"Zao\",\"Huan\",\"Jiao\",\"Zuan\",\"Fou\",\"Xie\",\"Gang\",\"Fou\",\"Que\",\"Fou\",\"Kaakeru\",\"Bo\",\"Ping\",\"Hou\",,\"Gang\",\"Ying\",\"Ying\",\"Qing\",\"Xia\",\"Guan\",\"Zun\",\"Tan\",\"Chang\",\"Qi\",\"Weng\",\"Ying\",\"Lei\",\"Tan\",\"Lu\",\"Guan\",\"Wang\",\"Wang\",\"Gang\",\"Wang\",\"Han\",,\"Luo\",\"Fu\",\"Mi\",\"Fa\",\"Gu\",\"Zhu\",\"Ju\",\"Mao\",\"Gu\",\"Min\",\"Gang\",\"Ba\",\"Gua\",\"Ti\",\"Juan\",\"Fu\",\"Lin\",\"Yan\",\"Zhao\",\"Zui\",\"Gua\",\"Zhuo\",\"Yu\",\"Zhi\",\"An\",\"Fa\",\"Nan\",\"Shu\",\"Si\",\"Pi\",\"Ma\",\"Liu\",\"Ba\",\"Fa\",\"Li\",\"Chao\",\"Wei\",\"Bi\",\"Ji\",\"Zeng\",\"Tong\",\"Liu\",\"Ji\",\"Juan\",\"Mi\",\"Zhao\",\"Luo\",\"Pi\",\"Ji\",\"Ji\",\"Luan\",\"Yang\",\"Mie\",\"Qiang\",\"Ta\",\"Mei\",\"Yang\",\"You\",\"You\",\"Fen\",\"Ba\",\"Gao\",\"Yang\",\"Gu\",\"Qiang\",\"Zang\",\"Gao\",\"Ling\",\"Yi\",\"Zhu\",\"Di\",\"Xiu\",\"Qian\",\"Yi\",\"Xian\",\"Rong\",\"Qun\",\"Qun\",\"Qian\",\"Huan\",\"Zui\",\"Xian\",\"Yi\",\"Yashinau\",\"Qiang\",\"Xian\",\"Yu\",\"Geng\",\"Jie\",\"Tang\",\"Yuan\",\"Xi\",\"Fan\",\"Shan\",\"Fen\",\"Shan\",\"Lian\",\"Lei\",\"Geng\",\"Nou\",\"Qiang\",\"Chan\",\"Yu\",\"Gong\",\"Yi\",\"Chong\",\"Weng\",\"Fen\",\"Hong\",\"Chi\",\"Chi\",\"Cui\",\"Fu\",\"Xia\",\"Pen\",\"Yi\",\"La\",\"Yi\",\"Pi\",\"Ling\",\"Liu\",\"Zhi\",\"Qu\",\"Xi\",\"Xie\",\"Xiang\",\"Xi\",\"Xi\",\"Qi\",\"Qiao\",\"Hui\",\"Hui\",\"Xiao\",\"Se\",\"Hong\",\"Jiang\",\"Di\",\"Cui\",\"Fei\",\"Tao\",\"Sha\",\"Chi\",\"Zhu\",\"Jian\",\"Xuan\",\"Shi\",\"Pian\",\"Zong\",\"Wan\",\"Hui\",\"Hou\",\"He\",\"He\",\"Han\",\"Ao\",\"Piao\",\"Yi\",\"Lian\",\"Qu\",,\"Lin\",\"Pen\",\"Qiao\",\"Ao\",\"Fan\",\"Yi\",\"Hui\",\"Xuan\",\"Dao\"],[\"Yao\",\"Lao\",,\"Kao\",\"Mao\",\"Zhe\",\"Qi\",\"Gou\",\"Gou\",\"Gou\",\"Die\",\"Die\",\"Er\",\"Shua\",\"Ruan\",\"Er\",\"Nai\",\"Zhuan\",\"Lei\",\"Ting\",\"Zi\",\"Geng\",\"Chao\",\"Hao\",\"Yun\",\"Pa\",\"Pi\",\"Chi\",\"Si\",\"Chu\",\"Jia\",\"Ju\",\"He\",\"Chu\",\"Lao\",\"Lun\",\"Ji\",\"Tang\",\"Ou\",\"Lou\",\"Nou\",\"Gou\",\"Pang\",\"Ze\",\"Lou\",\"Ji\",\"Lao\",\"Huo\",\"You\",\"Mo\",\"Huai\",\"Er\",\"Zhe\",\"Ting\",\"Ye\",\"Da\",\"Song\",\"Qin\",\"Yun\",\"Chi\",\"Dan\",\"Dan\",\"Hong\",\"Geng\",\"Zhi\",,\"Nie\",\"Dan\",\"Zhen\",\"Che\",\"Ling\",\"Zheng\",\"You\",\"Wa\",\"Liao\",\"Long\",\"Zhi\",\"Ning\",\"Tiao\",\"Er\",\"Ya\",\"Die\",\"Gua\",,\"Lian\",\"Hao\",\"Sheng\",\"Lie\",\"Pin\",\"Jing\",\"Ju\",\"Bi\",\"Di\",\"Guo\",\"Wen\",\"Xu\",\"Ping\",\"Cong\",\"Shikato\",,\"Ting\",\"Yu\",\"Cong\",\"Kui\",\"Tsuraneru\",\"Kui\",\"Cong\",\"Lian\",\"Weng\",\"Kui\",\"Lian\",\"Lian\",\"Cong\",\"Ao\",\"Sheng\",\"Song\",\"Ting\",\"Kui\",\"Nie\",\"Zhi\",\"Dan\",\"Ning\",\"Qie\",\"Ji\",\"Ting\",\"Ting\",\"Long\",\"Yu\",\"Yu\",\"Zhao\",\"Si\",\"Su\",\"Yi\",\"Su\",\"Si\",\"Zhao\",\"Zhao\",\"Rou\",\"Yi\",\"Le\",\"Ji\",\"Qiu\",\"Ken\",\"Cao\",\"Ge\",\"Di\",\"Huan\",\"Huang\",\"Yi\",\"Ren\",\"Xiao\",\"Ru\",\"Zhou\",\"Yuan\",\"Du\",\"Gang\",\"Rong\",\"Gan\",\"Cha\",\"Wo\",\"Chang\",\"Gu\",\"Zhi\",\"Han\",\"Fu\",\"Fei\",\"Fen\",\"Pei\",\"Pang\",\"Jian\",\"Fang\",\"Zhun\",\"You\",\"Na\",\"Hang\",\"Ken\",\"Ran\",\"Gong\",\"Yu\",\"Wen\",\"Yao\",\"Jin\",\"Pi\",\"Qian\",\"Xi\",\"Xi\",\"Fei\",\"Ken\",\"Jing\",\"Tai\",\"Shen\",\"Zhong\",\"Zhang\",\"Xie\",\"Shen\",\"Wei\",\"Zhou\",\"Die\",\"Dan\",\"Fei\",\"Ba\",\"Bo\",\"Qu\",\"Tian\",\"Bei\",\"Gua\",\"Tai\",\"Zi\",\"Ku\",\"Zhi\",\"Ni\",\"Ping\",\"Zi\",\"Fu\",\"Pang\",\"Zhen\",\"Xian\",\"Zuo\",\"Pei\",\"Jia\",\"Sheng\",\"Zhi\",\"Bao\",\"Mu\",\"Qu\",\"Hu\",\"Ke\",\"Yi\",\"Yin\",\"Xu\",\"Yang\",\"Long\",\"Dong\",\"Ka\",\"Lu\",\"Jing\",\"Nu\",\"Yan\",\"Pang\",\"Kua\",\"Yi\",\"Guang\",\"Gai\",\"Ge\",\"Dong\",\"Zhi\",\"Xiao\",\"Xiong\",\"Xiong\",\"Er\",\"E\",\"Xing\",\"Pian\",\"Neng\",\"Zi\",\"Gui\"],[\"Cheng\",\"Tiao\",\"Zhi\",\"Cui\",\"Mei\",\"Xie\",\"Cui\",\"Xie\",\"Mo\",\"Mai\",\"Ji\",\"Obiyaakasu\",,\"Kuai\",\"Sa\",\"Zang\",\"Qi\",\"Nao\",\"Mi\",\"Nong\",\"Luan\",\"Wan\",\"Bo\",\"Wen\",\"Guan\",\"Qiu\",\"Jiao\",\"Jing\",\"Rou\",\"Heng\",\"Cuo\",\"Lie\",\"Shan\",\"Ting\",\"Mei\",\"Chun\",\"Shen\",\"Xie\",\"De\",\"Zui\",\"Cu\",\"Xiu\",\"Xin\",\"Tuo\",\"Pao\",\"Cheng\",\"Nei\",\"Fu\",\"Dou\",\"Tuo\",\"Niao\",\"Noy\",\"Pi\",\"Gu\",\"Gua\",\"Li\",\"Lian\",\"Zhang\",\"Cui\",\"Jie\",\"Liang\",\"Zhou\",\"Pi\",\"Biao\",\"Lun\",\"Pian\",\"Guo\",\"Kui\",\"Chui\",\"Dan\",\"Tian\",\"Nei\",\"Jing\",\"Jie\",\"La\",\"Yi\",\"An\",\"Ren\",\"Shen\",\"Chuo\",\"Fu\",\"Fu\",\"Ju\",\"Fei\",\"Qiang\",\"Wan\",\"Dong\",\"Pi\",\"Guo\",\"Zong\",\"Ding\",\"Wu\",\"Mei\",\"Ruan\",\"Zhuan\",\"Zhi\",\"Cou\",\"Gua\",\"Ou\",\"Di\",\"An\",\"Xing\",\"Nao\",\"Yu\",\"Chuan\",\"Nan\",\"Yun\",\"Zhong\",\"Rou\",\"E\",\"Sai\",\"Tu\",\"Yao\",\"Jian\",\"Wei\",\"Jiao\",\"Yu\",\"Jia\",\"Duan\",\"Bi\",\"Chang\",\"Fu\",\"Xian\",\"Ni\",\"Mian\",\"Wa\",\"Teng\",\"Tui\",\"Bang\",\"Qian\",\"Lu\",\"Wa\",\"Sou\",\"Tang\",\"Su\",\"Zhui\",\"Ge\",\"Yi\",\"Bo\",\"Liao\",\"Ji\",\"Pi\",\"Xie\",\"Gao\",\"Lu\",\"Bin\",\"Ou\",\"Chang\",\"Lu\",\"Guo\",\"Pang\",\"Chuai\",\"Piao\",\"Jiang\",\"Fu\",\"Tang\",\"Mo\",\"Xi\",\"Zhuan\",\"Lu\",\"Jiao\",\"Ying\",\"Lu\",\"Zhi\",\"Tara\",\"Chun\",\"Lian\",\"Tong\",\"Peng\",\"Ni\",\"Zha\",\"Liao\",\"Cui\",\"Gui\",\"Xiao\",\"Teng\",\"Fan\",\"Zhi\",\"Jiao\",\"Shan\",\"Wu\",\"Cui\",\"Run\",\"Xiang\",\"Sui\",\"Fen\",\"Ying\",\"Tan\",\"Zhua\",\"Dan\",\"Kuai\",\"Nong\",\"Tun\",\"Lian\",\"Bi\",\"Yong\",\"Jue\",\"Chu\",\"Yi\",\"Juan\",\"La\",\"Lian\",\"Sao\",\"Tun\",\"Gu\",\"Qi\",\"Cui\",\"Bin\",\"Xun\",\"Ru\",\"Huo\",\"Zang\",\"Xian\",\"Biao\",\"Xing\",\"Kuan\",\"La\",\"Yan\",\"Lu\",\"Huo\",\"Zang\",\"Luo\",\"Qu\",\"Zang\",\"Luan\",\"Ni\",\"Zang\",\"Chen\",\"Qian\",\"Wo\",\"Guang\",\"Zang\",\"Lin\",\"Guang\",\"Zi\",\"Jiao\",\"Nie\",\"Chou\",\"Ji\",\"Gao\",\"Chou\",\"Mian\",\"Nie\",\"Zhi\",\"Zhi\",\"Ge\",\"Jian\",\"Die\",\"Zhi\",\"Xiu\",\"Tai\",\"Zhen\",\"Jiu\",\"Xian\",\"Yu\",\"Cha\"],[\"Yao\",\"Yu\",\"Chong\",\"Xi\",\"Xi\",\"Jiu\",\"Yu\",\"Yu\",\"Xing\",\"Ju\",\"Jiu\",\"Xin\",\"She\",\"She\",\"Yadoru\",\"Jiu\",\"Shi\",\"Tan\",\"Shu\",\"Shi\",\"Tian\",\"Dan\",\"Pu\",\"Pu\",\"Guan\",\"Hua\",\"Tan\",\"Chuan\",\"Shun\",\"Xia\",\"Wu\",\"Zhou\",\"Dao\",\"Gang\",\"Shan\",\"Yi\",,\"Pa\",\"Tai\",\"Fan\",\"Ban\",\"Chuan\",\"Hang\",\"Fang\",\"Ban\",\"Que\",\"Hesaki\",\"Zhong\",\"Jian\",\"Cang\",\"Ling\",\"Zhu\",\"Ze\",\"Duo\",\"Bo\",\"Xian\",\"Ge\",\"Chuan\",\"Jia\",\"Lu\",\"Hong\",\"Pang\",\"Xi\",,\"Fu\",\"Zao\",\"Feng\",\"Li\",\"Shao\",\"Yu\",\"Lang\",\"Ting\",,\"Wei\",\"Bo\",\"Meng\",\"Nian\",\"Ju\",\"Huang\",\"Shou\",\"Zong\",\"Bian\",\"Mao\",\"Die\",,\"Bang\",\"Cha\",\"Yi\",\"Sao\",\"Cang\",\"Cao\",\"Lou\",\"Dai\",\"Sori\",\"Yao\",\"Tong\",\"Yofune\",\"Dang\",\"Tan\",\"Lu\",\"Yi\",\"Jie\",\"Jian\",\"Huo\",\"Meng\",\"Qi\",\"Lu\",\"Lu\",\"Chan\",\"Shuang\",\"Gen\",\"Liang\",\"Jian\",\"Jian\",\"Se\",\"Yan\",\"Fu\",\"Ping\",\"Yan\",\"Yan\",\"Cao\",\"Cao\",\"Yi\",\"Le\",\"Ting\",\"Qiu\",\"Ai\",\"Nai\",\"Tiao\",\"Jiao\",\"Jie\",\"Peng\",\"Wan\",\"Yi\",\"Chai\",\"Mian\",\"Mie\",\"Gan\",\"Qian\",\"Yu\",\"Yu\",\"Shuo\",\"Qiong\",\"Tu\",\"Xia\",\"Qi\",\"Mang\",\"Zi\",\"Hui\",\"Sui\",\"Zhi\",\"Xiang\",\"Bi\",\"Fu\",\"Tun\",\"Wei\",\"Wu\",\"Zhi\",\"Qi\",\"Shan\",\"Wen\",\"Qian\",\"Ren\",\"Fou\",\"Kou\",\"Jie\",\"Lu\",\"Xu\",\"Ji\",\"Qin\",\"Qi\",\"Yuan\",\"Fen\",\"Ba\",\"Rui\",\"Xin\",\"Ji\",\"Hua\",\"Hua\",\"Fang\",\"Wu\",\"Jue\",\"Gou\",\"Zhi\",\"Yun\",\"Qin\",\"Ao\",\"Chu\",\"Mao\",\"Ya\",\"Fei\",\"Reng\",\"Hang\",\"Cong\",\"Yin\",\"You\",\"Bian\",\"Yi\",\"Susa\",\"Wei\",\"Li\",\"Pi\",\"E\",\"Xian\",\"Chang\",\"Cang\",\"Meng\",\"Su\",\"Yi\",\"Yuan\",\"Ran\",\"Ling\",\"Tai\",\"Tiao\",\"Di\",\"Miao\",\"Qiong\",\"Li\",\"Yong\",\"Ke\",\"Mu\",\"Pei\",\"Bao\",\"Gou\",\"Min\",\"Yi\",\"Yi\",\"Ju\",\"Pi\",\"Ruo\",\"Ku\",\"Zhu\",\"Ni\",\"Bo\",\"Bing\",\"Shan\",\"Qiu\",\"Yao\",\"Xian\",\"Ben\",\"Hong\",\"Ying\",\"Zha\",\"Dong\",\"Ju\",\"Die\",\"Nie\",\"Gan\",\"Hu\",\"Ping\",\"Mei\",\"Fu\",\"Sheng\",\"Gu\",\"Bi\",\"Wei\"],[\"Fu\",\"Zhuo\",\"Mao\",\"Fan\",\"Qie\",\"Mao\",\"Mao\",\"Ba\",\"Zi\",\"Mo\",\"Zi\",\"Di\",\"Chi\",\"Ji\",\"Jing\",\"Long\",,\"Niao\",,\"Xue\",\"Ying\",\"Qiong\",\"Ge\",\"Ming\",\"Li\",\"Rong\",\"Yin\",\"Gen\",\"Qian\",\"Chai\",\"Chen\",\"Yu\",\"Xiu\",\"Zi\",\"Lie\",\"Wu\",\"Ji\",\"Kui\",\"Ce\",\"Chong\",\"Ci\",\"Gou\",\"Guang\",\"Mang\",\"Chi\",\"Jiao\",\"Jiao\",\"Fu\",\"Yu\",\"Zhu\",\"Zi\",\"Jiang\",\"Hui\",\"Yin\",\"Cha\",\"Fa\",\"Rong\",\"Ru\",\"Chong\",\"Mang\",\"Tong\",\"Zhong\",,\"Zhu\",\"Xun\",\"Huan\",\"Kua\",\"Quan\",\"Gai\",\"Da\",\"Jing\",\"Xing\",\"Quan\",\"Cao\",\"Jing\",\"Er\",\"An\",\"Shou\",\"Chi\",\"Ren\",\"Jian\",\"Ti\",\"Huang\",\"Ping\",\"Li\",\"Jin\",\"Lao\",\"Shu\",\"Zhuang\",\"Da\",\"Jia\",\"Rao\",\"Bi\",\"Ze\",\"Qiao\",\"Hui\",\"Qi\",\"Dang\",,\"Rong\",\"Hun\",\"Ying\",\"Luo\",\"Ying\",\"Xun\",\"Jin\",\"Sun\",\"Yin\",\"Mai\",\"Hong\",\"Zhou\",\"Yao\",\"Du\",\"Wei\",\"Chu\",\"Dou\",\"Fu\",\"Ren\",\"Yin\",\"He\",\"Bi\",\"Bu\",\"Yun\",\"Di\",\"Tu\",\"Sui\",\"Sui\",\"Cheng\",\"Chen\",\"Wu\",\"Bie\",\"Xi\",\"Geng\",\"Li\",\"Fu\",\"Zhu\",\"Mo\",\"Li\",\"Zhuang\",\"Ji\",\"Duo\",\"Qiu\",\"Sha\",\"Suo\",\"Chen\",\"Feng\",\"Ju\",\"Mei\",\"Meng\",\"Xing\",\"Jing\",\"Che\",\"Xin\",\"Jun\",\"Yan\",\"Ting\",\"Diao\",\"Cuo\",\"Wan\",\"Han\",\"You\",\"Cuo\",\"Jia\",\"Wang\",\"You\",\"Niu\",\"Shao\",\"Xian\",\"Lang\",\"Fu\",\"E\",\"Mo\",\"Wen\",\"Jie\",\"Nan\",\"Mu\",\"Kan\",\"Lai\",\"Lian\",\"Shi\",\"Wo\",\"Usagi\",\"Lian\",\"Huo\",\"You\",\"Ying\",\"Ying\",\"Nuc\",\"Chun\",\"Mang\",\"Mang\",\"Ci\",\"Wan\",\"Jing\",\"Di\",\"Qu\",\"Dong\",\"Jian\",\"Zou\",\"Gu\",\"La\",\"Lu\",\"Ju\",\"Wei\",\"Jun\",\"Nie\",\"Kun\",\"He\",\"Pu\",\"Zi\",\"Gao\",\"Guo\",\"Fu\",\"Lun\",\"Chang\",\"Chou\",\"Song\",\"Chui\",\"Zhan\",\"Men\",\"Cai\",\"Ba\",\"Li\",\"Tu\",\"Bo\",\"Han\",\"Bao\",\"Qin\",\"Juan\",\"Xi\",\"Qin\",\"Di\",\"Jie\",\"Pu\",\"Dang\",\"Jin\",\"Zhao\",\"Tai\",\"Geng\",\"Hua\",\"Gu\",\"Ling\",\"Fei\",\"Jin\",\"An\",\"Wang\",\"Beng\",\"Zhou\",\"Yan\",\"Ju\",\"Jian\",\"Lin\",\"Tan\",\"Shu\",\"Tian\",\"Dao\"],[\"Hu\",\"Qi\",\"He\",\"Cui\",\"Tao\",\"Chun\",\"Bei\",\"Chang\",\"Huan\",\"Fei\",\"Lai\",\"Qi\",\"Meng\",\"Ping\",\"Wei\",\"Dan\",\"Sha\",\"Huan\",\"Yan\",\"Yi\",\"Tiao\",\"Qi\",\"Wan\",\"Ce\",\"Nai\",\"Kutabireru\",\"Tuo\",\"Jiu\",\"Tie\",\"Luo\",,,\"Meng\",,\"Yaji\",,\"Ying\",\"Ying\",\"Ying\",\"Xiao\",\"Sa\",\"Qiu\",\"Ke\",\"Xiang\",\"Wan\",\"Yu\",\"Yu\",\"Fu\",\"Lian\",\"Xuan\",\"Yuan\",\"Nan\",\"Ze\",\"Wo\",\"Chun\",\"Xiao\",\"Yu\",\"Pian\",\"Mao\",\"An\",\"E\",\"Luo\",\"Ying\",\"Huo\",\"Gua\",\"Jiang\",\"Mian\",\"Zuo\",\"Zuo\",\"Ju\",\"Bao\",\"Rou\",\"Xi\",\"Xie\",\"An\",\"Qu\",\"Jian\",\"Fu\",\"Lu\",\"Jing\",\"Pen\",\"Feng\",\"Hong\",\"Hong\",\"Hou\",\"Yan\",\"Tu\",\"Zhu\",\"Zi\",\"Xiang\",\"Shen\",\"Ge\",\"Jie\",\"Jing\",\"Mi\",\"Huang\",\"Shen\",\"Pu\",\"Gai\",\"Dong\",\"Zhou\",\"Qian\",\"Wei\",\"Bo\",\"Wei\",\"Pa\",\"Ji\",\"Hu\",\"Zang\",\"Jia\",\"Duan\",\"Yao\",\"Jun\",\"Cong\",\"Quan\",\"Wei\",\"Xian\",\"Kui\",\"Ting\",\"Hun\",\"Xi\",\"Shi\",\"Qi\",\"Lan\",\"Zong\",\"Yao\",\"Yuan\",\"Mei\",\"Yun\",\"Shu\",\"Di\",\"Zhuan\",\"Guan\",\"Sukumo\",\"Xue\",\"Chan\",\"Kai\",\"Kui\",,\"Jiang\",\"Lou\",\"Wei\",\"Pai\",,\"Sou\",\"Yin\",\"Shi\",\"Chun\",\"Shi\",\"Yun\",\"Zhen\",\"Lang\",\"Nu\",\"Meng\",\"He\",\"Que\",\"Suan\",\"Yuan\",\"Li\",\"Ju\",\"Xi\",\"Pang\",\"Chu\",\"Xu\",\"Tu\",\"Liu\",\"Wo\",\"Zhen\",\"Qian\",\"Zu\",\"Po\",\"Cuo\",\"Yuan\",\"Chu\",\"Yu\",\"Kuai\",\"Pan\",\"Pu\",\"Pu\",\"Na\",\"Shuo\",\"Xi\",\"Fen\",\"Yun\",\"Zheng\",\"Jian\",\"Ji\",\"Ruo\",\"Cang\",\"En\",\"Mi\",\"Hao\",\"Sun\",\"Zhen\",\"Ming\",\"Sou\",\"Xu\",\"Liu\",\"Xi\",\"Gu\",\"Lang\",\"Rong\",\"Weng\",\"Gai\",\"Cuo\",\"Shi\",\"Tang\",\"Luo\",\"Ru\",\"Suo\",\"Xian\",\"Bei\",\"Yao\",\"Gui\",\"Bi\",\"Zong\",\"Gun\",\"Za\",\"Xiu\",\"Ce\",\"Hai\",\"Lan\",,\"Ji\",\"Li\",\"Can\",\"Lang\",\"Yu\",,\"Ying\",\"Mo\",\"Diao\",\"Tiao\",\"Mao\",\"Tong\",\"Zhu\",\"Peng\",\"An\",\"Lian\",\"Cong\",\"Xi\",\"Ping\",\"Qiu\",\"Jin\",\"Chun\",\"Jie\",\"Wei\",\"Tui\",\"Cao\",\"Yu\",\"Yi\",\"Ji\",\"Liao\",\"Bi\",\"Lu\",\"Su\"],[\"Bu\",\"Zhang\",\"Luo\",\"Jiang\",\"Man\",\"Yan\",\"Ling\",\"Ji\",\"Piao\",\"Gun\",\"Han\",\"Di\",\"Su\",\"Lu\",\"She\",\"Shang\",\"Di\",\"Mie\",\"Xun\",\"Man\",\"Bo\",\"Di\",\"Cuo\",\"Zhe\",\"Sen\",\"Xuan\",\"Wei\",\"Hu\",\"Ao\",\"Mi\",\"Lou\",\"Cu\",\"Zhong\",\"Cai\",\"Po\",\"Jiang\",\"Mi\",\"Cong\",\"Niao\",\"Hui\",\"Jun\",\"Yin\",\"Jian\",\"Yan\",\"Shu\",\"Yin\",\"Kui\",\"Chen\",\"Hu\",\"Sha\",\"Kou\",\"Qian\",\"Ma\",\"Zang\",\"Sonoko\",\"Qiang\",\"Dou\",\"Lian\",\"Lin\",\"Kou\",\"Ai\",\"Bi\",\"Li\",\"Wei\",\"Ji\",\"Xun\",\"Sheng\",\"Fan\",\"Meng\",\"Ou\",\"Chan\",\"Dian\",\"Xun\",\"Jiao\",\"Rui\",\"Rui\",\"Lei\",\"Yu\",\"Qiao\",\"Chu\",\"Hua\",\"Jian\",\"Mai\",\"Yun\",\"Bao\",\"You\",\"Qu\",\"Lu\",\"Rao\",\"Hui\",\"E\",\"Teng\",\"Fei\",\"Jue\",\"Zui\",\"Fa\",\"Ru\",\"Fen\",\"Kui\",\"Shun\",\"Rui\",\"Ya\",\"Xu\",\"Fu\",\"Jue\",\"Dang\",\"Wu\",\"Tong\",\"Si\",\"Xiao\",\"Xi\",\"Long\",\"Yun\",,\"Qi\",\"Jian\",\"Yun\",\"Sun\",\"Ling\",\"Yu\",\"Xia\",\"Yong\",\"Ji\",\"Hong\",\"Si\",\"Nong\",\"Lei\",\"Xuan\",\"Yun\",\"Yu\",\"Xi\",\"Hao\",\"Bo\",\"Hao\",\"Ai\",\"Wei\",\"Hui\",\"Wei\",\"Ji\",\"Ci\",\"Xiang\",\"Luan\",\"Mie\",\"Yi\",\"Leng\",\"Jiang\",\"Can\",\"Shen\",\"Qiang\",\"Lian\",\"Ke\",\"Yuan\",\"Da\",\"Ti\",\"Tang\",\"Xie\",\"Bi\",\"Zhan\",\"Sun\",\"Lian\",\"Fan\",\"Ding\",\"Jie\",\"Gu\",\"Xie\",\"Shu\",\"Jian\",\"Kao\",\"Hong\",\"Sa\",\"Xin\",\"Xun\",\"Yao\",\"Hie\",\"Sou\",\"Shu\",\"Xun\",\"Dui\",\"Pin\",\"Wei\",\"Neng\",\"Chou\",\"Mai\",\"Ru\",\"Piao\",\"Tai\",\"Qi\",\"Zao\",\"Chen\",\"Zhen\",\"Er\",\"Ni\",\"Ying\",\"Gao\",\"Cong\",\"Xiao\",\"Qi\",\"Fa\",\"Jian\",\"Xu\",\"Kui\",\"Jie\",\"Bian\",\"Diao\",\"Mi\",\"Lan\",\"Jin\",\"Cang\",\"Miao\",\"Qiong\",\"Qie\",\"Xian\",,\"Ou\",\"Xian\",\"Su\",\"Lu\",\"Yi\",\"Xu\",\"Xie\",\"Li\",\"Yi\",\"La\",\"Lei\",\"Xiao\",\"Di\",\"Zhi\",\"Bei\",\"Teng\",\"Yao\",\"Mo\",\"Huan\",\"Piao\",\"Fan\",\"Sou\",\"Tan\",\"Tui\",\"Qiong\",\"Qiao\",\"Wei\",\"Liu\",\"Hui\",,\"Gao\",\"Yun\",,\"Li\",\"Shu\",\"Chu\",\"Ai\",\"Lin\",\"Zao\",\"Xuan\",\"Chen\",\"Lai\",\"Huo\"],[\"Tuo\",\"Wu\",\"Rui\",\"Rui\",\"Qi\",\"Heng\",\"Lu\",\"Su\",\"Tui\",\"Mang\",\"Yun\",\"Pin\",\"Yu\",\"Xun\",\"Ji\",\"Jiong\",\"Xian\",\"Mo\",\"Hagi\",\"Su\",\"Jiong\",,\"Nie\",\"Bo\",\"Rang\",\"Yi\",\"Xian\",\"Yu\",\"Ju\",\"Lian\",\"Lian\",\"Yin\",\"Qiang\",\"Ying\",\"Long\",\"Tong\",\"Wei\",\"Yue\",\"Ling\",\"Qu\",\"Yao\",\"Fan\",\"Mi\",\"Lan\",\"Kui\",\"Lan\",\"Ji\",\"Dang\",\"Katsura\",\"Lei\",\"Lei\",\"Hua\",\"Feng\",\"Zhi\",\"Wei\",\"Kui\",\"Zhan\",\"Huai\",\"Li\",\"Ji\",\"Mi\",\"Lei\",\"Huai\",\"Luo\",\"Ji\",\"Kui\",\"Lu\",\"Jian\",\"San\",,\"Lei\",\"Quan\",\"Xiao\",\"Yi\",\"Luan\",\"Men\",\"Bie\",\"Hu\",\"Hu\",\"Lu\",\"Nue\",\"Lu\",\"Si\",\"Xiao\",\"Qian\",\"Chu\",\"Hu\",\"Xu\",\"Cuo\",\"Fu\",\"Xu\",\"Xu\",\"Lu\",\"Hu\",\"Yu\",\"Hao\",\"Jiao\",\"Ju\",\"Guo\",\"Bao\",\"Yan\",\"Zhan\",\"Zhan\",\"Kui\",\"Ban\",\"Xi\",\"Shu\",\"Chong\",\"Qiu\",\"Diao\",\"Ji\",\"Qiu\",\"Cheng\",\"Shi\",,\"Di\",\"Zhe\",\"She\",\"Yu\",\"Gan\",\"Zi\",\"Hong\",\"Hui\",\"Meng\",\"Ge\",\"Sui\",\"Xia\",\"Chai\",\"Shi\",\"Yi\",\"Ma\",\"Xiang\",\"Fang\",\"E\",\"Pa\",\"Chi\",\"Qian\",\"Wen\",\"Wen\",\"Rui\",\"Bang\",\"Bi\",\"Yue\",\"Yue\",\"Jun\",\"Qi\",\"Ran\",\"Yin\",\"Qi\",\"Tian\",\"Yuan\",\"Jue\",\"Hui\",\"Qin\",\"Qi\",\"Zhong\",\"Ya\",\"Ci\",\"Mu\",\"Wang\",\"Fen\",\"Fen\",\"Hang\",\"Gong\",\"Zao\",\"Fu\",\"Ran\",\"Jie\",\"Fu\",\"Chi\",\"Dou\",\"Piao\",\"Xian\",\"Ni\",\"Te\",\"Qiu\",\"You\",\"Zha\",\"Ping\",\"Chi\",\"You\",\"He\",\"Han\",\"Ju\",\"Li\",\"Fu\",\"Ran\",\"Zha\",\"Gou\",\"Pi\",\"Bo\",\"Xian\",\"Zhu\",\"Diao\",\"Bie\",\"Bing\",\"Gu\",\"Ran\",\"Qu\",\"She\",\"Tie\",\"Ling\",\"Gu\",\"Dan\",\"Gu\",\"Ying\",\"Li\",\"Cheng\",\"Qu\",\"Mou\",\"Ge\",\"Ci\",\"Hui\",\"Hui\",\"Mang\",\"Fu\",\"Yang\",\"Wa\",\"Lie\",\"Zhu\",\"Yi\",\"Xian\",\"Kuo\",\"Jiao\",\"Li\",\"Yi\",\"Ping\",\"Ji\",\"Ha\",\"She\",\"Yi\",\"Wang\",\"Mo\",\"Qiong\",\"Qie\",\"Gui\",\"Gong\",\"Zhi\",\"Man\",\"Ebi\",\"Zhi\",\"Jia\",\"Rao\",\"Si\",\"Qi\",\"Xing\",\"Lie\",\"Qiu\",\"Shao\",\"Yong\",\"Jia\",\"Shui\",\"Che\",\"Bai\",\"E\",\"Han\"],[\"Shu\",\"Xuan\",\"Feng\",\"Shen\",\"Zhen\",\"Fu\",\"Xian\",\"Zhe\",\"Wu\",\"Fu\",\"Li\",\"Lang\",\"Bi\",\"Chu\",\"Yuan\",\"You\",\"Jie\",\"Dan\",\"Yan\",\"Ting\",\"Dian\",\"Shui\",\"Hui\",\"Gua\",\"Zhi\",\"Song\",\"Fei\",\"Ju\",\"Mi\",\"Qi\",\"Qi\",\"Yu\",\"Jun\",\"Zha\",\"Meng\",\"Qiang\",\"Si\",\"Xi\",\"Lun\",\"Li\",\"Die\",\"Tiao\",\"Tao\",\"Kun\",\"Gan\",\"Han\",\"Yu\",\"Bang\",\"Fei\",\"Pi\",\"Wei\",\"Dun\",\"Yi\",\"Yuan\",\"Su\",\"Quan\",\"Qian\",\"Rui\",\"Ni\",\"Qing\",\"Wei\",\"Liang\",\"Guo\",\"Wan\",\"Dong\",\"E\",\"Ban\",\"Di\",\"Wang\",\"Can\",\"Yang\",\"Ying\",\"Guo\",\"Chan\",,\"La\",\"Ke\",\"Ji\",\"He\",\"Ting\",\"Mai\",\"Xu\",\"Mian\",\"Yu\",\"Jie\",\"Shi\",\"Xuan\",\"Huang\",\"Yan\",\"Bian\",\"Rou\",\"Wei\",\"Fu\",\"Yuan\",\"Mei\",\"Wei\",\"Fu\",\"Ruan\",\"Xie\",\"You\",\"Qiu\",\"Mao\",\"Xia\",\"Ying\",\"Shi\",\"Chong\",\"Tang\",\"Zhu\",\"Zong\",\"Ti\",\"Fu\",\"Yuan\",\"Hui\",\"Meng\",\"La\",\"Du\",\"Hu\",\"Qiu\",\"Die\",\"Li\",\"Gua\",\"Yun\",\"Ju\",\"Nan\",\"Lou\",\"Qun\",\"Rong\",\"Ying\",\"Jiang\",,\"Lang\",\"Pang\",\"Si\",\"Xi\",\"Ci\",\"Xi\",\"Yuan\",\"Weng\",\"Lian\",\"Sou\",\"Ban\",\"Rong\",\"Rong\",\"Ji\",\"Wu\",\"Qiu\",\"Han\",\"Qin\",\"Yi\",\"Bi\",\"Hua\",\"Tang\",\"Yi\",\"Du\",\"Nai\",\"He\",\"Hu\",\"Hui\",\"Ma\",\"Ming\",\"Yi\",\"Wen\",\"Ying\",\"Teng\",\"Yu\",\"Cang\",\"So\",\"Ebi\",\"Man\",,\"Shang\",\"Zhe\",\"Cao\",\"Chi\",\"Di\",\"Ao\",\"Lu\",\"Wei\",\"Zhi\",\"Tang\",\"Chen\",\"Piao\",\"Qu\",\"Pi\",\"Yu\",\"Jian\",\"Luo\",\"Lou\",\"Qin\",\"Zhong\",\"Yin\",\"Jiang\",\"Shuai\",\"Wen\",\"Jiao\",\"Wan\",\"Zhi\",\"Zhe\",\"Ma\",\"Ma\",\"Guo\",\"Liu\",\"Mao\",\"Xi\",\"Cong\",\"Li\",\"Man\",\"Xiao\",\"Kamakiri\",\"Zhang\",\"Mang\",\"Xiang\",\"Mo\",\"Zui\",\"Si\",\"Qiu\",\"Te\",\"Zhi\",\"Peng\",\"Peng\",\"Jiao\",\"Qu\",\"Bie\",\"Liao\",\"Pan\",\"Gui\",\"Xi\",\"Ji\",\"Zhuan\",\"Huang\",\"Fei\",\"Lao\",\"Jue\",\"Jue\",\"Hui\",\"Yin\",\"Chan\",\"Jiao\",\"Shan\",\"Rao\",\"Xiao\",\"Mou\",\"Chong\",\"Xun\",\"Si\",,\"Cheng\",\"Dang\",\"Li\",\"Xie\",\"Shan\",\"Yi\",\"Jing\",\"Da\",\"Chan\",\"Qi\"],[\"Ci\",\"Xiang\",\"She\",\"Luo\",\"Qin\",\"Ying\",\"Chai\",\"Li\",\"Ze\",\"Xuan\",\"Lian\",\"Zhu\",\"Ze\",\"Xie\",\"Mang\",\"Xie\",\"Qi\",\"Rong\",\"Jian\",\"Meng\",\"Hao\",\"Ruan\",\"Huo\",\"Zhuo\",\"Jie\",\"Bin\",\"He\",\"Mie\",\"Fan\",\"Lei\",\"Jie\",\"La\",\"Mi\",\"Li\",\"Chun\",\"Li\",\"Qiu\",\"Nie\",\"Lu\",\"Du\",\"Xiao\",\"Zhu\",\"Long\",\"Li\",\"Long\",\"Feng\",\"Ye\",\"Beng\",\"Shang\",\"Gu\",\"Juan\",\"Ying\",,\"Xi\",\"Can\",\"Qu\",\"Quan\",\"Du\",\"Can\",\"Man\",\"Jue\",\"Jie\",\"Zhu\",\"Zha\",\"Xie\",\"Huang\",\"Niu\",\"Pei\",\"Nu\",\"Xin\",\"Zhong\",\"Mo\",\"Er\",\"Ke\",\"Mie\",\"Xi\",\"Xing\",\"Yan\",\"Kan\",\"Yuan\",,\"Ling\",\"Xuan\",\"Shu\",\"Xian\",\"Tong\",\"Long\",\"Jie\",\"Xian\",\"Ya\",\"Hu\",\"Wei\",\"Dao\",\"Chong\",\"Wei\",\"Dao\",\"Zhun\",\"Heng\",\"Qu\",\"Yi\",\"Yi\",\"Bu\",\"Gan\",\"Yu\",\"Biao\",\"Cha\",\"Yi\",\"Shan\",\"Chen\",\"Fu\",\"Gun\",\"Fen\",\"Shuai\",\"Jie\",\"Na\",\"Zhong\",\"Dan\",\"Ri\",\"Zhong\",\"Zhong\",\"Xie\",\"Qi\",\"Xie\",\"Ran\",\"Zhi\",\"Ren\",\"Qin\",\"Jin\",\"Jun\",\"Yuan\",\"Mei\",\"Chai\",\"Ao\",\"Niao\",\"Hui\",\"Ran\",\"Jia\",\"Tuo\",\"Ling\",\"Dai\",\"Bao\",\"Pao\",\"Yao\",\"Zuo\",\"Bi\",\"Shao\",\"Tan\",\"Ju\",\"He\",\"Shu\",\"Xiu\",\"Zhen\",\"Yi\",\"Pa\",\"Bo\",\"Di\",\"Wa\",\"Fu\",\"Gun\",\"Zhi\",\"Zhi\",\"Ran\",\"Pan\",\"Yi\",\"Mao\",\"Tuo\",\"Na\",\"Kou\",\"Xian\",\"Chan\",\"Qu\",\"Bei\",\"Gun\",\"Xi\",\"Ne\",\"Bo\",\"Horo\",\"Fu\",\"Yi\",\"Chi\",\"Ku\",\"Ren\",\"Jiang\",\"Jia\",\"Cun\",\"Mo\",\"Jie\",\"Er\",\"Luo\",\"Ru\",\"Zhu\",\"Gui\",\"Yin\",\"Cai\",\"Lie\",\"Kamishimo\",\"Yuki\",\"Zhuang\",\"Dang\",,\"Kun\",\"Ken\",\"Niao\",\"Shu\",\"Jia\",\"Kun\",\"Cheng\",\"Li\",\"Juan\",\"Shen\",\"Pou\",\"Ge\",\"Yi\",\"Yu\",\"Zhen\",\"Liu\",\"Qiu\",\"Qun\",\"Ji\",\"Yi\",\"Bu\",\"Zhuang\",\"Shui\",\"Sha\",\"Qun\",\"Li\",\"Lian\",\"Lian\",\"Ku\",\"Jian\",\"Fou\",\"Chan\",\"Bi\",\"Gun\",\"Tao\",\"Yuan\",\"Ling\",\"Chi\",\"Chang\",\"Chou\",\"Duo\",\"Biao\",\"Liang\",\"Chang\",\"Pei\",\"Pei\",\"Fei\",\"Yuan\",\"Luo\",\"Guo\",\"Yan\",\"Du\",\"Xi\",\"Zhi\",\"Ju\",\"Qi\"],[\"Ji\",\"Zhi\",\"Gua\",\"Ken\",\"Che\",\"Ti\",\"Ti\",\"Fu\",\"Chong\",\"Xie\",\"Bian\",\"Die\",\"Kun\",\"Duan\",\"Xiu\",\"Xiu\",\"He\",\"Yuan\",\"Bao\",\"Bao\",\"Fu\",\"Yu\",\"Tuan\",\"Yan\",\"Hui\",\"Bei\",\"Chu\",\"Lu\",\"Ena\",\"Hitoe\",\"Yun\",\"Da\",\"Gou\",\"Da\",\"Huai\",\"Rong\",\"Yuan\",\"Ru\",\"Nai\",\"Jiong\",\"Suo\",\"Ban\",\"Tun\",\"Chi\",\"Sang\",\"Niao\",\"Ying\",\"Jie\",\"Qian\",\"Huai\",\"Ku\",\"Lian\",\"Bao\",\"Li\",\"Zhe\",\"Shi\",\"Lu\",\"Yi\",\"Die\",\"Xie\",\"Xian\",\"Wei\",\"Biao\",\"Cao\",\"Ji\",\"Jiang\",\"Sen\",\"Bao\",\"Xiang\",\"Chihaya\",\"Pu\",\"Jian\",\"Zhuan\",\"Jian\",\"Zui\",\"Ji\",\"Dan\",\"Za\",\"Fan\",\"Bo\",\"Xiang\",\"Xin\",\"Bie\",\"Rao\",\"Man\",\"Lan\",\"Ao\",\"Duo\",\"Gui\",\"Cao\",\"Sui\",\"Nong\",\"Chan\",\"Lian\",\"Bi\",\"Jin\",\"Dang\",\"Shu\",\"Tan\",\"Bi\",\"Lan\",\"Pu\",\"Ru\",\"Zhi\",,\"Shu\",\"Wa\",\"Shi\",\"Bai\",\"Xie\",\"Bo\",\"Chen\",\"Lai\",\"Long\",\"Xi\",\"Xian\",\"Lan\",\"Zhe\",\"Dai\",\"Tasuki\",\"Zan\",\"Shi\",\"Jian\",\"Pan\",\"Yi\",\"Ran\",\"Ya\",\"Xi\",\"Xi\",\"Yao\",\"Feng\",\"Tan\",,\"Biao\",\"Fu\",\"Ba\",\"He\",\"Ji\",\"Ji\",\"Jian\",\"Guan\",\"Bian\",\"Yan\",\"Gui\",\"Jue\",\"Pian\",\"Mao\",\"Mi\",\"Mi\",\"Mie\",\"Shi\",\"Si\",\"Zhan\",\"Luo\",\"Jue\",\"Mi\",\"Tiao\",\"Lian\",\"Yao\",\"Zhi\",\"Jun\",\"Xi\",\"Shan\",\"Wei\",\"Xi\",\"Tian\",\"Yu\",\"Lan\",\"E\",\"Du\",\"Qin\",\"Pang\",\"Ji\",\"Ming\",\"Ying\",\"Gou\",\"Qu\",\"Zhan\",\"Jin\",\"Guan\",\"Deng\",\"Jian\",\"Luo\",\"Qu\",\"Jian\",\"Wei\",\"Jue\",\"Qu\",\"Luo\",\"Lan\",\"Shen\",\"Di\",\"Guan\",\"Jian\",\"Guan\",\"Yan\",\"Gui\",\"Mi\",\"Shi\",\"Zhan\",\"Lan\",\"Jue\",\"Ji\",\"Xi\",\"Di\",\"Tian\",\"Yu\",\"Gou\",\"Jin\",\"Qu\",\"Jiao\",\"Jiu\",\"Jin\",\"Cu\",\"Jue\",\"Zhi\",\"Chao\",\"Ji\",\"Gu\",\"Dan\",\"Zui\",\"Di\",\"Shang\",\"Hua\",\"Quan\",\"Ge\",\"Chi\",\"Jie\",\"Gui\",\"Gong\",\"Chu\",\"Jie\",\"Hun\",\"Qiu\",\"Xing\",\"Su\",\"Ni\",\"Ji\",\"Lu\",\"Zhi\",\"Zha\",\"Bi\",\"Xing\",\"Hu\",\"Shang\",\"Gong\",\"Zhi\",\"Xue\",\"Chu\",\"Xi\",\"Yi\",\"Lu\",\"Jue\",\"Xi\",\"Yan\",\"Xi\"],[\"Yan\",\"Yan\",\"Ding\",\"Fu\",\"Qiu\",\"Qiu\",\"Jiao\",\"Hong\",\"Ji\",\"Fan\",\"Xun\",\"Diao\",\"Hong\",\"Cha\",\"Tao\",\"Xu\",\"Jie\",\"Yi\",\"Ren\",\"Xun\",\"Yin\",\"Shan\",\"Qi\",\"Tuo\",\"Ji\",\"Xun\",\"Yin\",\"E\",\"Fen\",\"Ya\",\"Yao\",\"Song\",\"Shen\",\"Yin\",\"Xin\",\"Jue\",\"Xiao\",\"Ne\",\"Chen\",\"You\",\"Zhi\",\"Xiong\",\"Fang\",\"Xin\",\"Chao\",\"She\",\"Xian\",\"Sha\",\"Tun\",\"Xu\",\"Yi\",\"Yi\",\"Su\",\"Chi\",\"He\",\"Shen\",\"He\",\"Xu\",\"Zhen\",\"Zhu\",\"Zheng\",\"Gou\",\"Zi\",\"Zi\",\"Zhan\",\"Gu\",\"Fu\",\"Quan\",\"Die\",\"Ling\",\"Di\",\"Yang\",\"Li\",\"Nao\",\"Pan\",\"Zhou\",\"Gan\",\"Yi\",\"Ju\",\"Ao\",\"Zha\",\"Tuo\",\"Yi\",\"Qu\",\"Zhao\",\"Ping\",\"Bi\",\"Xiong\",\"Qu\",\"Ba\",\"Da\",\"Zu\",\"Tao\",\"Zhu\",\"Ci\",\"Zhe\",\"Yong\",\"Xu\",\"Xun\",\"Yi\",\"Huang\",\"He\",\"Shi\",\"Cha\",\"Jiao\",\"Shi\",\"Hen\",\"Cha\",\"Gou\",\"Gui\",\"Quan\",\"Hui\",\"Jie\",\"Hua\",\"Gai\",\"Xiang\",\"Wei\",\"Shen\",\"Chou\",\"Tong\",\"Mi\",\"Zhan\",\"Ming\",\"E\",\"Hui\",\"Yan\",\"Xiong\",\"Gua\",\"Er\",\"Beng\",\"Tiao\",\"Chi\",\"Lei\",\"Zhu\",\"Kuang\",\"Kua\",\"Wu\",\"Yu\",\"Teng\",\"Ji\",\"Zhi\",\"Ren\",\"Su\",\"Lang\",\"E\",\"Kuang\",\"E\",\"Shi\",\"Ting\",\"Dan\",\"Bo\",\"Chan\",\"You\",\"Heng\",\"Qiao\",\"Qin\",\"Shua\",\"An\",\"Yu\",\"Xiao\",\"Cheng\",\"Jie\",\"Xian\",\"Wu\",\"Wu\",\"Gao\",\"Song\",\"Pu\",\"Hui\",\"Jing\",\"Shuo\",\"Zhen\",\"Shuo\",\"Du\",\"Yasashi\",\"Chang\",\"Shui\",\"Jie\",\"Ke\",\"Qu\",\"Cong\",\"Xiao\",\"Sui\",\"Wang\",\"Xuan\",\"Fei\",\"Chi\",\"Ta\",\"Yi\",\"Na\",\"Yin\",\"Diao\",\"Pi\",\"Chuo\",\"Chan\",\"Chen\",\"Zhun\",\"Ji\",\"Qi\",\"Tan\",\"Zhui\",\"Wei\",\"Ju\",\"Qing\",\"Jian\",\"Zheng\",\"Ze\",\"Zou\",\"Qian\",\"Zhuo\",\"Liang\",\"Jian\",\"Zhu\",\"Hao\",\"Lun\",\"Shen\",\"Biao\",\"Huai\",\"Pian\",\"Yu\",\"Die\",\"Xu\",\"Pian\",\"Shi\",\"Xuan\",\"Shi\",\"Hun\",\"Hua\",\"E\",\"Zhong\",\"Di\",\"Xie\",\"Fu\",\"Pu\",\"Ting\",\"Jian\",\"Qi\",\"Yu\",\"Zi\",\"Chuan\",\"Xi\",\"Hui\",\"Yin\",\"An\",\"Xian\",\"Nan\",\"Chen\",\"Feng\",\"Zhu\",\"Yang\",\"Yan\",\"Heng\",\"Xuan\",\"Ge\",\"Nuo\",\"Qi\"],[\"Mou\",\"Ye\",\"Wei\",,\"Teng\",\"Zou\",\"Shan\",\"Jian\",\"Bo\",\"Ku\",\"Huang\",\"Huo\",\"Ge\",\"Ying\",\"Mi\",\"Xiao\",\"Mi\",\"Xi\",\"Qiang\",\"Chen\",\"Nue\",\"Ti\",\"Su\",\"Bang\",\"Chi\",\"Qian\",\"Shi\",\"Jiang\",\"Yuan\",\"Xie\",\"Xue\",\"Tao\",\"Yao\",\"Yao\",,\"Yu\",\"Biao\",\"Cong\",\"Qing\",\"Li\",\"Mo\",\"Mo\",\"Shang\",\"Zhe\",\"Miu\",\"Jian\",\"Ze\",\"Jie\",\"Lian\",\"Lou\",\"Can\",\"Ou\",\"Guan\",\"Xi\",\"Zhuo\",\"Ao\",\"Ao\",\"Jin\",\"Zhe\",\"Yi\",\"Hu\",\"Jiang\",\"Man\",\"Chao\",\"Han\",\"Hua\",\"Chan\",\"Xu\",\"Zeng\",\"Se\",\"Xi\",\"She\",\"Dui\",\"Zheng\",\"Nao\",\"Lan\",\"E\",\"Ying\",\"Jue\",\"Ji\",\"Zun\",\"Jiao\",\"Bo\",\"Hui\",\"Zhuan\",\"Mu\",\"Zen\",\"Zha\",\"Shi\",\"Qiao\",\"Tan\",\"Zen\",\"Pu\",\"Sheng\",\"Xuan\",\"Zao\",\"Tan\",\"Dang\",\"Sui\",\"Qian\",\"Ji\",\"Jiao\",\"Jing\",\"Lian\",\"Nou\",\"Yi\",\"Ai\",\"Zhan\",\"Pi\",\"Hui\",\"Hua\",\"Yi\",\"Yi\",\"Shan\",\"Rang\",\"Nou\",\"Qian\",\"Zhui\",\"Ta\",\"Hu\",\"Zhou\",\"Hao\",\"Ye\",\"Ying\",\"Jian\",\"Yu\",\"Jian\",\"Hui\",\"Du\",\"Zhe\",\"Xuan\",\"Zan\",\"Lei\",\"Shen\",\"Wei\",\"Chan\",\"Li\",\"Yi\",\"Bian\",\"Zhe\",\"Yan\",\"E\",\"Chou\",\"Wei\",\"Chou\",\"Yao\",\"Chan\",\"Rang\",\"Yin\",\"Lan\",\"Chen\",\"Huo\",\"Zhe\",\"Huan\",\"Zan\",\"Yi\",\"Dang\",\"Zhan\",\"Yan\",\"Du\",\"Yan\",\"Ji\",\"Ding\",\"Fu\",\"Ren\",\"Ji\",\"Jie\",\"Hong\",\"Tao\",\"Rang\",\"Shan\",\"Qi\",\"Tuo\",\"Xun\",\"Yi\",\"Xun\",\"Ji\",\"Ren\",\"Jiang\",\"Hui\",\"Ou\",\"Ju\",\"Ya\",\"Ne\",\"Xu\",\"E\",\"Lun\",\"Xiong\",\"Song\",\"Feng\",\"She\",\"Fang\",\"Jue\",\"Zheng\",\"Gu\",\"He\",\"Ping\",\"Zu\",\"Shi\",\"Xiong\",\"Zha\",\"Su\",\"Zhen\",\"Di\",\"Zou\",\"Ci\",\"Qu\",\"Zhao\",\"Bi\",\"Yi\",\"Yi\",\"Kuang\",\"Lei\",\"Shi\",\"Gua\",\"Shi\",\"Jie\",\"Hui\",\"Cheng\",\"Zhu\",\"Shen\",\"Hua\",\"Dan\",\"Gou\",\"Quan\",\"Gui\",\"Xun\",\"Yi\",\"Zheng\",\"Gai\",\"Xiang\",\"Cha\",\"Hun\",\"Xu\",\"Zhou\",\"Jie\",\"Wu\",\"Yu\",\"Qiao\",\"Wu\",\"Gao\",\"You\",\"Hui\",\"Kuang\",\"Shuo\",\"Song\",\"Ai\",\"Qing\",\"Zhu\",\"Zou\",\"Nuo\",\"Du\",\"Zhuo\",\"Fei\",\"Ke\",\"Wei\"],[\"Yu\",\"Shui\",\"Shen\",\"Diao\",\"Chan\",\"Liang\",\"Zhun\",\"Sui\",\"Tan\",\"Shen\",\"Yi\",\"Mou\",\"Chen\",\"Die\",\"Huang\",\"Jian\",\"Xie\",\"Nue\",\"Ye\",\"Wei\",\"E\",\"Yu\",\"Xuan\",\"Chan\",\"Zi\",\"An\",\"Yan\",\"Di\",\"Mi\",\"Pian\",\"Xu\",\"Mo\",\"Dang\",\"Su\",\"Xie\",\"Yao\",\"Bang\",\"Shi\",\"Qian\",\"Mi\",\"Jin\",\"Man\",\"Zhe\",\"Jian\",\"Miu\",\"Tan\",\"Zen\",\"Qiao\",\"Lan\",\"Pu\",\"Jue\",\"Yan\",\"Qian\",\"Zhan\",\"Chen\",\"Gu\",\"Qian\",\"Hong\",\"Xia\",\"Jue\",\"Hong\",\"Han\",\"Hong\",\"Xi\",\"Xi\",\"Huo\",\"Liao\",\"Han\",\"Du\",\"Long\",\"Dou\",\"Jiang\",\"Qi\",\"Shi\",\"Li\",\"Deng\",\"Wan\",\"Bi\",\"Shu\",\"Xian\",\"Feng\",\"Zhi\",\"Zhi\",\"Yan\",\"Yan\",\"Shi\",\"Chu\",\"Hui\",\"Tun\",\"Yi\",\"Tun\",\"Yi\",\"Jian\",\"Ba\",\"Hou\",\"E\",\"Cu\",\"Xiang\",\"Huan\",\"Jian\",\"Ken\",\"Gai\",\"Qu\",\"Fu\",\"Xi\",\"Bin\",\"Hao\",\"Yu\",\"Zhu\",\"Jia\",,\"Xi\",\"Bo\",\"Wen\",\"Huan\",\"Bin\",\"Di\",\"Zong\",\"Fen\",\"Yi\",\"Zhi\",\"Bao\",\"Chai\",\"Han\",\"Pi\",\"Na\",\"Pi\",\"Gou\",\"Na\",\"You\",\"Diao\",\"Mo\",\"Si\",\"Xiu\",\"Huan\",\"Kun\",\"He\",\"He\",\"Mo\",\"Han\",\"Mao\",\"Li\",\"Ni\",\"Bi\",\"Yu\",\"Jia\",\"Tuan\",\"Mao\",\"Pi\",\"Xi\",\"E\",\"Ju\",\"Mo\",\"Chu\",\"Tan\",\"Huan\",\"Jue\",\"Bei\",\"Zhen\",\"Yuan\",\"Fu\",\"Cai\",\"Gong\",\"Te\",\"Yi\",\"Hang\",\"Wan\",\"Pin\",\"Huo\",\"Fan\",\"Tan\",\"Guan\",\"Ze\",\"Zhi\",\"Er\",\"Zhu\",\"Shi\",\"Bi\",\"Zi\",\"Er\",\"Gui\",\"Pian\",\"Bian\",\"Mai\",\"Dai\",\"Sheng\",\"Kuang\",\"Fei\",\"Tie\",\"Yi\",\"Chi\",\"Mao\",\"He\",\"Bi\",\"Lu\",\"Ren\",\"Hui\",\"Gai\",\"Pian\",\"Zi\",\"Jia\",\"Xu\",\"Zei\",\"Jiao\",\"Gai\",\"Zang\",\"Jian\",\"Ying\",\"Xun\",\"Zhen\",\"She\",\"Bin\",\"Bin\",\"Qiu\",\"She\",\"Chuan\",\"Zang\",\"Zhou\",\"Lai\",\"Zan\",\"Si\",\"Chen\",\"Shang\",\"Tian\",\"Pei\",\"Geng\",\"Xian\",\"Mai\",\"Jian\",\"Sui\",\"Fu\",\"Tan\",\"Cong\",\"Cong\",\"Zhi\",\"Ji\",\"Zhang\",\"Du\",\"Jin\",\"Xiong\",\"Shun\",\"Yun\",\"Bao\",\"Zai\",\"Lai\",\"Feng\",\"Cang\",\"Ji\",\"Sheng\",\"Ai\",\"Zhuan\",\"Fu\",\"Gou\",\"Sai\",\"Ze\",\"Liao\"],[\"Wei\",\"Bai\",\"Chen\",\"Zhuan\",\"Zhi\",\"Zhui\",\"Biao\",\"Yun\",\"Zeng\",\"Tan\",\"Zan\",\"Yan\",,\"Shan\",\"Wan\",\"Ying\",\"Jin\",\"Gan\",\"Xian\",\"Zang\",\"Bi\",\"Du\",\"Shu\",\"Yan\",,\"Xuan\",\"Long\",\"Gan\",\"Zang\",\"Bei\",\"Zhen\",\"Fu\",\"Yuan\",\"Gong\",\"Cai\",\"Ze\",\"Xian\",\"Bai\",\"Zhang\",\"Huo\",\"Zhi\",\"Fan\",\"Tan\",\"Pin\",\"Bian\",\"Gou\",\"Zhu\",\"Guan\",\"Er\",\"Jian\",\"Bi\",\"Shi\",\"Tie\",\"Gui\",\"Kuang\",\"Dai\",\"Mao\",\"Fei\",\"He\",\"Yi\",\"Zei\",\"Zhi\",\"Jia\",\"Hui\",\"Zi\",\"Ren\",\"Lu\",\"Zang\",\"Zi\",\"Gai\",\"Jin\",\"Qiu\",\"Zhen\",\"Lai\",\"She\",\"Fu\",\"Du\",\"Ji\",\"Shu\",\"Shang\",\"Si\",\"Bi\",\"Zhou\",\"Geng\",\"Pei\",\"Tan\",\"Lai\",\"Feng\",\"Zhui\",\"Fu\",\"Zhuan\",\"Sai\",\"Ze\",\"Yan\",\"Zan\",\"Yun\",\"Zeng\",\"Shan\",\"Ying\",\"Gan\",\"Chi\",\"Xi\",\"She\",\"Nan\",\"Xiong\",\"Xi\",\"Cheng\",\"He\",\"Cheng\",\"Zhe\",\"Xia\",\"Tang\",\"Zou\",\"Zou\",\"Li\",\"Jiu\",\"Fu\",\"Zhao\",\"Gan\",\"Qi\",\"Shan\",\"Qiong\",\"Qin\",\"Xian\",\"Ci\",\"Jue\",\"Qin\",\"Chi\",\"Ci\",\"Chen\",\"Chen\",\"Die\",\"Ju\",\"Chao\",\"Di\",\"Se\",\"Zhan\",\"Zhu\",\"Yue\",\"Qu\",\"Jie\",\"Chi\",\"Chu\",\"Gua\",\"Xue\",\"Ci\",\"Tiao\",\"Duo\",\"Lie\",\"Gan\",\"Suo\",\"Cu\",\"Xi\",\"Zhao\",\"Su\",\"Yin\",\"Ju\",\"Jian\",\"Que\",\"Tang\",\"Chuo\",\"Cui\",\"Lu\",\"Qu\",\"Dang\",\"Qiu\",\"Zi\",\"Ti\",\"Qu\",\"Chi\",\"Huang\",\"Qiao\",\"Qiao\",\"Yao\",\"Zao\",\"Ti\",,\"Zan\",\"Zan\",\"Zu\",\"Pa\",\"Bao\",\"Ku\",\"Ke\",\"Dun\",\"Jue\",\"Fu\",\"Chen\",\"Jian\",\"Fang\",\"Zhi\",\"Sa\",\"Yue\",\"Pa\",\"Qi\",\"Yue\",\"Qiang\",\"Tuo\",\"Tai\",\"Yi\",\"Nian\",\"Ling\",\"Mei\",\"Ba\",\"Die\",\"Ku\",\"Tuo\",\"Jia\",\"Ci\",\"Pao\",\"Qia\",\"Zhu\",\"Ju\",\"Die\",\"Zhi\",\"Fu\",\"Pan\",\"Ju\",\"Shan\",\"Bo\",\"Ni\",\"Ju\",\"Li\",\"Gen\",\"Yi\",\"Ji\",\"Dai\",\"Xian\",\"Jiao\",\"Duo\",\"Zhu\",\"Zhuan\",\"Kua\",\"Zhuai\",\"Gui\",\"Qiong\",\"Kui\",\"Xiang\",\"Chi\",\"Lu\",\"Beng\",\"Zhi\",\"Jia\",\"Tiao\",\"Cai\",\"Jian\",\"Ta\",\"Qiao\",\"Bi\",\"Xian\",\"Duo\",\"Ji\",\"Ju\",\"Ji\",\"Shu\",\"Tu\"],[\"Chu\",\"Jing\",\"Nie\",\"Xiao\",\"Bo\",\"Chi\",\"Qun\",\"Mou\",\"Shu\",\"Lang\",\"Yong\",\"Jiao\",\"Chou\",\"Qiao\",,\"Ta\",\"Jian\",\"Qi\",\"Wo\",\"Wei\",\"Zhuo\",\"Jie\",\"Ji\",\"Nie\",\"Ju\",\"Ju\",\"Lun\",\"Lu\",\"Leng\",\"Huai\",\"Ju\",\"Chi\",\"Wan\",\"Quan\",\"Ti\",\"Bo\",\"Zu\",\"Qie\",\"Ji\",\"Cu\",\"Zong\",\"Cai\",\"Zong\",\"Peng\",\"Zhi\",\"Zheng\",\"Dian\",\"Zhi\",\"Yu\",\"Duo\",\"Dun\",\"Chun\",\"Yong\",\"Zhong\",\"Di\",\"Zhe\",\"Chen\",\"Chuai\",\"Jian\",\"Gua\",\"Tang\",\"Ju\",\"Fu\",\"Zu\",\"Die\",\"Pian\",\"Rou\",\"Nuo\",\"Ti\",\"Cha\",\"Tui\",\"Jian\",\"Dao\",\"Cuo\",\"Xi\",\"Ta\",\"Qiang\",\"Zhan\",\"Dian\",\"Ti\",\"Ji\",\"Nie\",\"Man\",\"Liu\",\"Zhan\",\"Bi\",\"Chong\",\"Lu\",\"Liao\",\"Cu\",\"Tang\",\"Dai\",\"Suo\",\"Xi\",\"Kui\",\"Ji\",\"Zhi\",\"Qiang\",\"Di\",\"Man\",\"Zong\",\"Lian\",\"Beng\",\"Zao\",\"Nian\",\"Bie\",\"Tui\",\"Ju\",\"Deng\",\"Ceng\",\"Xian\",\"Fan\",\"Chu\",\"Zhong\",\"Dun\",\"Bo\",\"Cu\",\"Zu\",\"Jue\",\"Jue\",\"Lin\",\"Ta\",\"Qiao\",\"Qiao\",\"Pu\",\"Liao\",\"Dun\",\"Cuan\",\"Kuang\",\"Zao\",\"Ta\",\"Bi\",\"Bi\",\"Zhu\",\"Ju\",\"Chu\",\"Qiao\",\"Dun\",\"Chou\",\"Ji\",\"Wu\",\"Yue\",\"Nian\",\"Lin\",\"Lie\",\"Zhi\",\"Li\",\"Zhi\",\"Chan\",\"Chu\",\"Duan\",\"Wei\",\"Long\",\"Lin\",\"Xian\",\"Wei\",\"Zuan\",\"Lan\",\"Xie\",\"Rang\",\"Xie\",\"Nie\",\"Ta\",\"Qu\",\"Jie\",\"Cuan\",\"Zuan\",\"Xi\",\"Kui\",\"Jue\",\"Lin\",\"Shen\",\"Gong\",\"Dan\",\"Segare\",\"Qu\",\"Ti\",\"Duo\",\"Duo\",\"Gong\",\"Lang\",\"Nerau\",\"Luo\",\"Ai\",\"Ji\",\"Ju\",\"Tang\",\"Utsuke\",,\"Yan\",\"Shitsuke\",\"Kang\",\"Qu\",\"Lou\",\"Lao\",\"Tuo\",\"Zhi\",\"Yagate\",\"Ti\",\"Dao\",\"Yagate\",\"Yu\",\"Che\",\"Ya\",\"Gui\",\"Jun\",\"Wei\",\"Yue\",\"Xin\",\"Di\",\"Xuan\",\"Fan\",\"Ren\",\"Shan\",\"Qiang\",\"Shu\",\"Tun\",\"Chen\",\"Dai\",\"E\",\"Na\",\"Qi\",\"Mao\",\"Ruan\",\"Ren\",\"Fan\",\"Zhuan\",\"Hong\",\"Hu\",\"Qu\",\"Huang\",\"Di\",\"Ling\",\"Dai\",\"Ao\",\"Zhen\",\"Fan\",\"Kuang\",\"Ang\",\"Peng\",\"Bei\",\"Gu\",\"Ku\",\"Pao\",\"Zhu\",\"Rong\",\"E\",\"Ba\",\"Zhou\",\"Zhi\",\"Yao\",\"Ke\",\"Yi\",\"Qing\",\"Shi\",\"Ping\"],[\"Er\",\"Qiong\",\"Ju\",\"Jiao\",\"Guang\",\"Lu\",\"Kai\",\"Quan\",\"Zhou\",\"Zai\",\"Zhi\",\"She\",\"Liang\",\"Yu\",\"Shao\",\"You\",\"Huan\",\"Yun\",\"Zhe\",\"Wan\",\"Fu\",\"Qing\",\"Zhou\",\"Ni\",\"Ling\",\"Zhe\",\"Zhan\",\"Liang\",\"Zi\",\"Hui\",\"Wang\",\"Chuo\",\"Guo\",\"Kan\",\"Yi\",\"Peng\",\"Qian\",\"Gun\",\"Nian\",\"Pian\",\"Guan\",\"Bei\",\"Lun\",\"Pai\",\"Liang\",\"Ruan\",\"Rou\",\"Ji\",\"Yang\",\"Xian\",\"Chuan\",\"Cou\",\"Qun\",\"Ge\",\"You\",\"Hong\",\"Shu\",\"Fu\",\"Zi\",\"Fu\",\"Wen\",\"Ben\",\"Zhan\",\"Yu\",\"Wen\",\"Tao\",\"Gu\",\"Zhen\",\"Xia\",\"Yuan\",\"Lu\",\"Jiu\",\"Chao\",\"Zhuan\",\"Wei\",\"Hun\",\"Sori\",\"Che\",\"Jiao\",\"Zhan\",\"Pu\",\"Lao\",\"Fen\",\"Fan\",\"Lin\",\"Ge\",\"Se\",\"Kan\",\"Huan\",\"Yi\",\"Ji\",\"Dui\",\"Er\",\"Yu\",\"Xian\",\"Hong\",\"Lei\",\"Pei\",\"Li\",\"Li\",\"Lu\",\"Lin\",\"Che\",\"Ya\",\"Gui\",\"Xuan\",\"Di\",\"Ren\",\"Zhuan\",\"E\",\"Lun\",\"Ruan\",\"Hong\",\"Ku\",\"Ke\",\"Lu\",\"Zhou\",\"Zhi\",\"Yi\",\"Hu\",\"Zhen\",\"Li\",\"Yao\",\"Qing\",\"Shi\",\"Zai\",\"Zhi\",\"Jiao\",\"Zhou\",\"Quan\",\"Lu\",\"Jiao\",\"Zhe\",\"Fu\",\"Liang\",\"Nian\",\"Bei\",\"Hui\",\"Gun\",\"Wang\",\"Liang\",\"Chuo\",\"Zi\",\"Cou\",\"Fu\",\"Ji\",\"Wen\",\"Shu\",\"Pei\",\"Yuan\",\"Xia\",\"Zhan\",\"Lu\",\"Che\",\"Lin\",\"Xin\",\"Gu\",\"Ci\",\"Ci\",\"Pi\",\"Zui\",\"Bian\",\"La\",\"La\",\"Ci\",\"Xue\",\"Ban\",\"Bian\",\"Bian\",\"Bian\",,\"Bian\",\"Ban\",\"Ci\",\"Bian\",\"Bian\",\"Chen\",\"Ru\",\"Nong\",\"Nong\",\"Zhen\",\"Chuo\",\"Chuo\",\"Suberu\",\"Reng\",\"Bian\",\"Bian\",\"Sip\",\"Ip\",\"Liao\",\"Da\",\"Chan\",\"Gan\",\"Qian\",\"Yu\",\"Yu\",\"Qi\",\"Xun\",\"Yi\",\"Guo\",\"Mai\",\"Qi\",\"Za\",\"Wang\",\"Jia\",\"Zhun\",\"Ying\",\"Ti\",\"Yun\",\"Jin\",\"Hang\",\"Ya\",\"Fan\",\"Wu\",\"Da\",\"E\",\"Huan\",\"Zhe\",\"Totemo\",\"Jin\",\"Yuan\",\"Wei\",\"Lian\",\"Chi\",\"Che\",\"Ni\",\"Tiao\",\"Zhi\",\"Yi\",\"Jiong\",\"Jia\",\"Chen\",\"Dai\",\"Er\",\"Di\",\"Po\",\"Wang\",\"Die\",\"Ze\",\"Tao\",\"Shu\",\"Tuo\",\"Kep\",\"Jing\",\"Hui\",\"Tong\",\"You\",\"Mi\",\"Beng\",\"Ji\",\"Nai\",\"Yi\",\"Jie\",\"Zhui\",\"Lie\",\"Xun\"],[\"Tui\",\"Song\",\"Gua\",\"Tao\",\"Pang\",\"Hou\",\"Ni\",\"Dun\",\"Jiong\",\"Xuan\",\"Xun\",\"Bu\",\"You\",\"Xiao\",\"Qiu\",\"Tou\",\"Zhu\",\"Qiu\",\"Di\",\"Di\",\"Tu\",\"Jing\",\"Ti\",\"Dou\",\"Yi\",\"Zhe\",\"Tong\",\"Guang\",\"Wu\",\"Shi\",\"Cheng\",\"Su\",\"Zao\",\"Qun\",\"Feng\",\"Lian\",\"Suo\",\"Hui\",\"Li\",\"Sako\",\"Lai\",\"Ben\",\"Cuo\",\"Jue\",\"Beng\",\"Huan\",\"Dai\",\"Lu\",\"You\",\"Zhou\",\"Jin\",\"Yu\",\"Chuo\",\"Kui\",\"Wei\",\"Ti\",\"Yi\",\"Da\",\"Yuan\",\"Luo\",\"Bi\",\"Nuo\",\"Yu\",\"Dang\",\"Sui\",\"Dun\",\"Sui\",\"Yan\",\"Chuan\",\"Chi\",\"Ti\",\"Yu\",\"Shi\",\"Zhen\",\"You\",\"Yun\",\"E\",\"Bian\",\"Guo\",\"E\",\"Xia\",\"Huang\",\"Qiu\",\"Dao\",\"Da\",\"Wei\",\"Appare\",\"Yi\",\"Gou\",\"Yao\",\"Chu\",\"Liu\",\"Xun\",\"Ta\",\"Di\",\"Chi\",\"Yuan\",\"Su\",\"Ta\",\"Qian\",,\"Yao\",\"Guan\",\"Zhang\",\"Ao\",\"Shi\",\"Ce\",\"Chi\",\"Su\",\"Zao\",\"Zhe\",\"Dun\",\"Di\",\"Lou\",\"Chi\",\"Cuo\",\"Lin\",\"Zun\",\"Rao\",\"Qian\",\"Xuan\",\"Yu\",\"Yi\",\"Wu\",\"Liao\",\"Ju\",\"Shi\",\"Bi\",\"Yao\",\"Mai\",\"Xie\",\"Sui\",\"Huan\",\"Zhan\",\"Teng\",\"Er\",\"Miao\",\"Bian\",\"Bian\",\"La\",\"Li\",\"Yuan\",\"Yao\",\"Luo\",\"Li\",\"Yi\",\"Ting\",\"Deng\",\"Qi\",\"Yong\",\"Shan\",\"Han\",\"Yu\",\"Mang\",\"Ru\",\"Qiong\",,\"Kuang\",\"Fu\",\"Kang\",\"Bin\",\"Fang\",\"Xing\",\"Na\",\"Xin\",\"Shen\",\"Bang\",\"Yuan\",\"Cun\",\"Huo\",\"Xie\",\"Bang\",\"Wu\",\"Ju\",\"You\",\"Han\",\"Tai\",\"Qiu\",\"Bi\",\"Pei\",\"Bing\",\"Shao\",\"Bei\",\"Wa\",\"Di\",\"Zou\",\"Ye\",\"Lin\",\"Kuang\",\"Gui\",\"Zhu\",\"Shi\",\"Ku\",\"Yu\",\"Gai\",\"Ge\",\"Xi\",\"Zhi\",\"Ji\",\"Xun\",\"Hou\",\"Xing\",\"Jiao\",\"Xi\",\"Gui\",\"Nuo\",\"Lang\",\"Jia\",\"Kuai\",\"Zheng\",\"Otoko\",\"Yun\",\"Yan\",\"Cheng\",\"Dou\",\"Chi\",\"Lu\",\"Fu\",\"Wu\",\"Fu\",\"Gao\",\"Hao\",\"Lang\",\"Jia\",\"Geng\",\"Jun\",\"Ying\",\"Bo\",\"Xi\",\"Bei\",\"Li\",\"Yun\",\"Bu\",\"Xiao\",\"Qi\",\"Pi\",\"Qing\",\"Guo\",\"Zhou\",\"Tan\",\"Zou\",\"Ping\",\"Lai\",\"Ni\",\"Chen\",\"You\",\"Bu\",\"Xiang\",\"Dan\",\"Ju\",\"Yong\",\"Qiao\",\"Yi\",\"Du\",\"Yan\",\"Mei\"],[\"Ruo\",\"Bei\",\"E\",\"Yu\",\"Juan\",\"Yu\",\"Yun\",\"Hou\",\"Kui\",\"Xiang\",\"Xiang\",\"Sou\",\"Tang\",\"Ming\",\"Xi\",\"Ru\",\"Chu\",\"Zi\",\"Zou\",\"Ju\",\"Wu\",\"Xiang\",\"Yun\",\"Hao\",\"Yong\",\"Bi\",\"Mo\",\"Chao\",\"Fu\",\"Liao\",\"Yin\",\"Zhuan\",\"Hu\",\"Qiao\",\"Yan\",\"Zhang\",\"Fan\",\"Qiao\",\"Xu\",\"Deng\",\"Bi\",\"Xin\",\"Bi\",\"Ceng\",\"Wei\",\"Zheng\",\"Mao\",\"Shan\",\"Lin\",\"Po\",\"Dan\",\"Meng\",\"Ye\",\"Cao\",\"Kuai\",\"Feng\",\"Meng\",\"Zou\",\"Kuang\",\"Lian\",\"Zan\",\"Chan\",\"You\",\"Qi\",\"Yan\",\"Chan\",\"Zan\",\"Ling\",\"Huan\",\"Xi\",\"Feng\",\"Zan\",\"Li\",\"You\",\"Ding\",\"Qiu\",\"Zhuo\",\"Pei\",\"Zhou\",\"Yi\",\"Hang\",\"Yu\",\"Jiu\",\"Yan\",\"Zui\",\"Mao\",\"Dan\",\"Xu\",\"Tou\",\"Zhen\",\"Fen\",\"Sakenomoto\",,\"Yun\",\"Tai\",\"Tian\",\"Qia\",\"Tuo\",\"Zuo\",\"Han\",\"Gu\",\"Su\",\"Po\",\"Chou\",\"Zai\",\"Ming\",\"Luo\",\"Chuo\",\"Chou\",\"You\",\"Tong\",\"Zhi\",\"Xian\",\"Jiang\",\"Cheng\",\"Yin\",\"Tu\",\"Xiao\",\"Mei\",\"Ku\",\"Suan\",\"Lei\",\"Pu\",\"Zui\",\"Hai\",\"Yan\",\"Xi\",\"Niang\",\"Wei\",\"Lu\",\"Lan\",\"Yan\",\"Tao\",\"Pei\",\"Zhan\",\"Chun\",\"Tan\",\"Zui\",\"Chuo\",\"Cu\",\"Kun\",\"Ti\",\"Mian\",\"Du\",\"Hu\",\"Xu\",\"Xing\",\"Tan\",\"Jiu\",\"Chun\",\"Yun\",\"Po\",\"Ke\",\"Sou\",\"Mi\",\"Quan\",\"Chou\",\"Cuo\",\"Yun\",\"Yong\",\"Ang\",\"Zha\",\"Hai\",\"Tang\",\"Jiang\",\"Piao\",\"Shan\",\"Yu\",\"Li\",\"Zao\",\"Lao\",\"Yi\",\"Jiang\",\"Pu\",\"Jiao\",\"Xi\",\"Tan\",\"Po\",\"Nong\",\"Yi\",\"Li\",\"Ju\",\"Jiao\",\"Yi\",\"Niang\",\"Ru\",\"Xun\",\"Chou\",\"Yan\",\"Ling\",\"Mi\",\"Mi\",\"Niang\",\"Xin\",\"Jiao\",\"Xi\",\"Mi\",\"Yan\",\"Bian\",\"Cai\",\"Shi\",\"You\",\"Shi\",\"Shi\",\"Li\",\"Chong\",\"Ye\",\"Liang\",\"Li\",\"Jin\",\"Jin\",\"Qiu\",\"Yi\",\"Diao\",\"Dao\",\"Zhao\",\"Ding\",\"Po\",\"Qiu\",\"He\",\"Fu\",\"Zhen\",\"Zhi\",\"Ba\",\"Luan\",\"Fu\",\"Nai\",\"Diao\",\"Shan\",\"Qiao\",\"Kou\",\"Chuan\",\"Zi\",\"Fan\",\"Yu\",\"Hua\",\"Han\",\"Gong\",\"Qi\",\"Mang\",\"Ri\",\"Di\",\"Si\",\"Xi\",\"Yi\",\"Chai\",\"Shi\",\"Tu\",\"Xi\",\"Nu\",\"Qian\",\"Ishiyumi\",\"Jian\",\"Pi\",\"Ye\",\"Yin\"],[\"Ba\",\"Fang\",\"Chen\",\"Xing\",\"Tou\",\"Yue\",\"Yan\",\"Fu\",\"Pi\",\"Na\",\"Xin\",\"E\",\"Jue\",\"Dun\",\"Gou\",\"Yin\",\"Qian\",\"Ban\",\"Ji\",\"Ren\",\"Chao\",\"Niu\",\"Fen\",\"Yun\",\"Ji\",\"Qin\",\"Pi\",\"Guo\",\"Hong\",\"Yin\",\"Jun\",\"Shi\",\"Yi\",\"Zhong\",\"Nie\",\"Gai\",\"Ri\",\"Huo\",\"Tai\",\"Kang\",\"Habaki\",\"Irori\",\"Ngaak\",,\"Duo\",\"Zi\",\"Ni\",\"Tu\",\"Shi\",\"Min\",\"Gu\",\"E\",\"Ling\",\"Bing\",\"Yi\",\"Gu\",\"Ba\",\"Pi\",\"Yu\",\"Si\",\"Zuo\",\"Bu\",\"You\",\"Dian\",\"Jia\",\"Zhen\",\"Shi\",\"Shi\",\"Tie\",\"Ju\",\"Zhan\",\"Shi\",\"She\",\"Xuan\",\"Zhao\",\"Bao\",\"He\",\"Bi\",\"Sheng\",\"Chu\",\"Shi\",\"Bo\",\"Zhu\",\"Chi\",\"Za\",\"Po\",\"Tong\",\"Qian\",\"Fu\",\"Zhai\",\"Liu\",\"Qian\",\"Fu\",\"Li\",\"Yue\",\"Pi\",\"Yang\",\"Ban\",\"Bo\",\"Jie\",\"Gou\",\"Shu\",\"Zheng\",\"Mu\",\"Ni\",\"Nie\",\"Di\",\"Jia\",\"Mu\",\"Dan\",\"Shen\",\"Yi\",\"Si\",\"Kuang\",\"Ka\",\"Bei\",\"Jian\",\"Tong\",\"Xing\",\"Hong\",\"Jiao\",\"Chi\",\"Er\",\"Ge\",\"Bing\",\"Shi\",\"Mou\",\"Jia\",\"Yin\",\"Jun\",\"Zhou\",\"Chong\",\"Shang\",\"Tong\",\"Mo\",\"Lei\",\"Ji\",\"Yu\",\"Xu\",\"Ren\",\"Zun\",\"Zhi\",\"Qiong\",\"Shan\",\"Chi\",\"Xian\",\"Xing\",\"Quan\",\"Pi\",\"Tie\",\"Zhu\",\"Hou\",\"Ming\",\"Kua\",\"Yao\",\"Xian\",\"Xian\",\"Xiu\",\"Jun\",\"Cha\",\"Lao\",\"Ji\",\"Pi\",\"Ru\",\"Mi\",\"Yi\",\"Yin\",\"Guang\",\"An\",\"Diou\",\"You\",\"Se\",\"Kao\",\"Qian\",\"Luan\",\"Kasugai\",\"Ai\",\"Diao\",\"Han\",\"Rui\",\"Shi\",\"Keng\",\"Qiu\",\"Xiao\",\"Zhe\",\"Xiu\",\"Zang\",\"Ti\",\"Cuo\",\"Gua\",\"Gong\",\"Zhong\",\"Dou\",\"Lu\",\"Mei\",\"Lang\",\"Wan\",\"Xin\",\"Yun\",\"Bei\",\"Wu\",\"Su\",\"Yu\",\"Chan\",\"Ting\",\"Bo\",\"Han\",\"Jia\",\"Hong\",\"Cuan\",\"Feng\",\"Chan\",\"Wan\",\"Zhi\",\"Si\",\"Xuan\",\"Wu\",\"Wu\",\"Tiao\",\"Gong\",\"Zhuo\",\"Lue\",\"Xing\",\"Qian\",\"Shen\",\"Han\",\"Lue\",\"Xie\",\"Chu\",\"Zheng\",\"Ju\",\"Xian\",\"Tie\",\"Mang\",\"Pu\",\"Li\",\"Pan\",\"Rui\",\"Cheng\",\"Gao\",\"Li\",\"Te\",\"Pyeng\",\"Zhu\",,\"Tu\",\"Liu\",\"Zui\",\"Ju\",\"Chang\",\"Yuan\",\"Jian\",\"Gang\",\"Diao\",\"Tao\",\"Chang\"],[\"Lun\",\"Kua\",\"Ling\",\"Bei\",\"Lu\",\"Li\",\"Qiang\",\"Pou\",\"Juan\",\"Min\",\"Zui\",\"Peng\",\"An\",\"Pi\",\"Xian\",\"Ya\",\"Zhui\",\"Lei\",\"A\",\"Kong\",\"Ta\",\"Kun\",\"Du\",\"Wei\",\"Chui\",\"Zi\",\"Zheng\",\"Ben\",\"Nie\",\"Cong\",\"Qun\",\"Tan\",\"Ding\",\"Qi\",\"Qian\",\"Zhuo\",\"Qi\",\"Yu\",\"Jin\",\"Guan\",\"Mao\",\"Chang\",\"Tian\",\"Xi\",\"Lian\",\"Tao\",\"Gu\",\"Cuo\",\"Shu\",\"Zhen\",\"Lu\",\"Meng\",\"Lu\",\"Hua\",\"Biao\",\"Ga\",\"Lai\",\"Ken\",\"Kazari\",\"Bu\",\"Nai\",\"Wan\",\"Zan\",,\"De\",\"Xian\",,\"Huo\",\"Liang\",,\"Men\",\"Kai\",\"Ying\",\"Di\",\"Lian\",\"Guo\",\"Xian\",\"Du\",\"Tu\",\"Wei\",\"Cong\",\"Fu\",\"Rou\",\"Ji\",\"E\",\"Rou\",\"Chen\",\"Ti\",\"Zha\",\"Hong\",\"Yang\",\"Duan\",\"Xia\",\"Yu\",\"Keng\",\"Xing\",\"Huang\",\"Wei\",\"Fu\",\"Zhao\",\"Cha\",\"Qie\",\"She\",\"Hong\",\"Kui\",\"Tian\",\"Mou\",\"Qiao\",\"Qiao\",\"Hou\",\"Tou\",\"Cong\",\"Huan\",\"Ye\",\"Min\",\"Jian\",\"Duan\",\"Jian\",\"Song\",\"Kui\",\"Hu\",\"Xuan\",\"Duo\",\"Jie\",\"Zhen\",\"Bian\",\"Zhong\",\"Zi\",\"Xiu\",\"Ye\",\"Mei\",\"Pai\",\"Ai\",\"Jie\",,\"Mei\",\"Chuo\",\"Ta\",\"Bang\",\"Xia\",\"Lian\",\"Suo\",\"Xi\",\"Liu\",\"Zu\",\"Ye\",\"Nou\",\"Weng\",\"Rong\",\"Tang\",\"Suo\",\"Qiang\",\"Ge\",\"Shuo\",\"Chui\",\"Bo\",\"Pan\",\"Sa\",\"Bi\",\"Sang\",\"Gang\",\"Zi\",\"Wu\",\"Ying\",\"Huang\",\"Tiao\",\"Liu\",\"Kai\",\"Sun\",\"Sha\",\"Sou\",\"Wan\",\"Hao\",\"Zhen\",\"Zhen\",\"Luo\",\"Yi\",\"Yuan\",\"Tang\",\"Nie\",\"Xi\",\"Jia\",\"Ge\",\"Ma\",\"Juan\",\"Kasugai\",\"Habaki\",\"Suo\",,,,\"Na\",\"Lu\",\"Suo\",\"Ou\",\"Zu\",\"Tuan\",\"Xiu\",\"Guan\",\"Xuan\",\"Lian\",\"Shou\",\"Ao\",\"Man\",\"Mo\",\"Luo\",\"Bi\",\"Wei\",\"Liu\",\"Di\",\"Qiao\",\"Cong\",\"Yi\",\"Lu\",\"Ao\",\"Keng\",\"Qiang\",\"Cui\",\"Qi\",\"Chang\",\"Tang\",\"Man\",\"Yong\",\"Chan\",\"Feng\",\"Jing\",\"Biao\",\"Shu\",\"Lou\",\"Xiu\",\"Cong\",\"Long\",\"Zan\",\"Jian\",\"Cao\",\"Li\",\"Xia\",\"Xi\",\"Kang\",,\"Beng\",,,\"Zheng\",\"Lu\",\"Hua\",\"Ji\",\"Pu\",\"Hui\",\"Qiang\",\"Po\",\"Lin\",\"Suo\",\"Xiu\",\"San\",\"Cheng\"],[\"Kui\",\"Si\",\"Liu\",\"Nao\",\"Heng\",\"Pie\",\"Sui\",\"Fan\",\"Qiao\",\"Quan\",\"Yang\",\"Tang\",\"Xiang\",\"Jue\",\"Jiao\",\"Zun\",\"Liao\",\"Jie\",\"Lao\",\"Dui\",\"Tan\",\"Zan\",\"Ji\",\"Jian\",\"Zhong\",\"Deng\",\"Ya\",\"Ying\",\"Dui\",\"Jue\",\"Nou\",\"Ti\",\"Pu\",\"Tie\",,,\"Ding\",\"Shan\",\"Kai\",\"Jian\",\"Fei\",\"Sui\",\"Lu\",\"Juan\",\"Hui\",\"Yu\",\"Lian\",\"Zhuo\",\"Qiao\",\"Qian\",\"Zhuo\",\"Lei\",\"Bi\",\"Tie\",\"Huan\",\"Ye\",\"Duo\",\"Guo\",\"Dang\",\"Ju\",\"Fen\",\"Da\",\"Bei\",\"Yi\",\"Ai\",\"Zong\",\"Xun\",\"Diao\",\"Zhu\",\"Heng\",\"Zhui\",\"Ji\",\"Nie\",\"Ta\",\"Huo\",\"Qing\",\"Bin\",\"Ying\",\"Kui\",\"Ning\",\"Xu\",\"Jian\",\"Jian\",\"Yari\",\"Cha\",\"Zhi\",\"Mie\",\"Li\",\"Lei\",\"Ji\",\"Zuan\",\"Kuang\",\"Shang\",\"Peng\",\"La\",\"Du\",\"Shuo\",\"Chuo\",\"Lu\",\"Biao\",\"Bao\",\"Lu\",,,\"Long\",\"E\",\"Lu\",\"Xin\",\"Jian\",\"Lan\",\"Bo\",\"Jian\",\"Yao\",\"Chan\",\"Xiang\",\"Jian\",\"Xi\",\"Guan\",\"Cang\",\"Nie\",\"Lei\",\"Cuan\",\"Qu\",\"Pan\",\"Luo\",\"Zuan\",\"Luan\",\"Zao\",\"Nie\",\"Jue\",\"Tang\",\"Shu\",\"Lan\",\"Jin\",\"Qiu\",\"Yi\",\"Zhen\",\"Ding\",\"Zhao\",\"Po\",\"Diao\",\"Tu\",\"Qian\",\"Chuan\",\"Shan\",\"Ji\",\"Fan\",\"Diao\",\"Men\",\"Nu\",\"Xi\",\"Chai\",\"Xing\",\"Gai\",\"Bu\",\"Tai\",\"Ju\",\"Dun\",\"Chao\",\"Zhong\",\"Na\",\"Bei\",\"Gang\",\"Ban\",\"Qian\",\"Yao\",\"Qin\",\"Jun\",\"Wu\",\"Gou\",\"Kang\",\"Fang\",\"Huo\",\"Tou\",\"Niu\",\"Ba\",\"Yu\",\"Qian\",\"Zheng\",\"Qian\",\"Gu\",\"Bo\",\"E\",\"Po\",\"Bu\",\"Ba\",\"Yue\",\"Zuan\",\"Mu\",\"Dan\",\"Jia\",\"Dian\",\"You\",\"Tie\",\"Bo\",\"Ling\",\"Shuo\",\"Qian\",\"Liu\",\"Bao\",\"Shi\",\"Xuan\",\"She\",\"Bi\",\"Ni\",\"Pi\",\"Duo\",\"Xing\",\"Kao\",\"Lao\",\"Er\",\"Mang\",\"Ya\",\"You\",\"Cheng\",\"Jia\",\"Ye\",\"Nao\",\"Zhi\",\"Dang\",\"Tong\",\"Lu\",\"Diao\",\"Yin\",\"Kai\",\"Zha\",\"Zhu\",\"Xian\",\"Ting\",\"Diu\",\"Xian\",\"Hua\",\"Quan\",\"Sha\",\"Jia\",\"Yao\",\"Ge\",\"Ming\",\"Zheng\",\"Se\",\"Jiao\",\"Yi\",\"Chan\",\"Chong\",\"Tang\",\"An\",\"Yin\",\"Ru\",\"Zhu\",\"Lao\",\"Pu\",\"Wu\",\"Lai\",\"Te\",\"Lian\",\"Keng\"],[\"Xiao\",\"Suo\",\"Li\",\"Zheng\",\"Chu\",\"Guo\",\"Gao\",\"Tie\",\"Xiu\",\"Cuo\",\"Lue\",\"Feng\",\"Xin\",\"Liu\",\"Kai\",\"Jian\",\"Rui\",\"Ti\",\"Lang\",\"Qian\",\"Ju\",\"A\",\"Qiang\",\"Duo\",\"Tian\",\"Cuo\",\"Mao\",\"Ben\",\"Qi\",\"De\",\"Kua\",\"Kun\",\"Chang\",\"Xi\",\"Gu\",\"Luo\",\"Chui\",\"Zhui\",\"Jin\",\"Zhi\",\"Xian\",\"Juan\",\"Huo\",\"Pou\",\"Tan\",\"Ding\",\"Jian\",\"Ju\",\"Meng\",\"Zi\",\"Qie\",\"Ying\",\"Kai\",\"Qiang\",\"Song\",\"E\",\"Cha\",\"Qiao\",\"Zhong\",\"Duan\",\"Sou\",\"Huang\",\"Huan\",\"Ai\",\"Du\",\"Mei\",\"Lou\",\"Zi\",\"Fei\",\"Mei\",\"Mo\",\"Zhen\",\"Bo\",\"Ge\",\"Nie\",\"Tang\",\"Juan\",\"Nie\",\"Na\",\"Liu\",\"Hao\",\"Bang\",\"Yi\",\"Jia\",\"Bin\",\"Rong\",\"Biao\",\"Tang\",\"Man\",\"Luo\",\"Beng\",\"Yong\",\"Jing\",\"Di\",\"Zu\",\"Xuan\",\"Liu\",\"Tan\",\"Jue\",\"Liao\",\"Pu\",\"Lu\",\"Dui\",\"Lan\",\"Pu\",\"Cuan\",\"Qiang\",\"Deng\",\"Huo\",\"Lei\",\"Huan\",\"Zhuo\",\"Lian\",\"Yi\",\"Cha\",\"Biao\",\"La\",\"Chan\",\"Xiang\",\"Chang\",\"Chang\",\"Jiu\",\"Ao\",\"Die\",\"Qu\",\"Liao\",\"Mi\",\"Chang\",\"Men\",\"Ma\",\"Shuan\",\"Shan\",\"Huo\",\"Men\",\"Yan\",\"Bi\",\"Han\",\"Bi\",\"San\",\"Kai\",\"Kang\",\"Beng\",\"Hong\",\"Run\",\"San\",\"Xian\",\"Xian\",\"Jian\",\"Min\",\"Xia\",\"Yuru\",\"Dou\",\"Zha\",\"Nao\",\"Jian\",\"Peng\",\"Xia\",\"Ling\",\"Bian\",\"Bi\",\"Run\",\"He\",\"Guan\",\"Ge\",\"Ge\",\"Fa\",\"Chu\",\"Hong\",\"Gui\",\"Min\",\"Se\",\"Kun\",\"Lang\",\"Lu\",\"Ting\",\"Sha\",\"Ju\",\"Yue\",\"Yue\",\"Chan\",\"Qu\",\"Lin\",\"Chang\",\"Shai\",\"Kun\",\"Yan\",\"Min\",\"Yan\",\"E\",\"Hun\",\"Yu\",\"Wen\",\"Xiang\",\"Bao\",\"Xiang\",\"Qu\",\"Yao\",\"Wen\",\"Ban\",\"An\",\"Wei\",\"Yin\",\"Kuo\",\"Que\",\"Lan\",\"Du\",,\"Phwung\",\"Tian\",\"Nie\",\"Ta\",\"Kai\",\"He\",\"Que\",\"Chuang\",\"Guan\",\"Dou\",\"Qi\",\"Kui\",\"Tang\",\"Guan\",\"Piao\",\"Kan\",\"Xi\",\"Hui\",\"Chan\",\"Pi\",\"Dang\",\"Huan\",\"Ta\",\"Wen\",,\"Men\",\"Shuan\",\"Shan\",\"Yan\",\"Han\",\"Bi\",\"Wen\",\"Chuang\",\"Run\",\"Wei\",\"Xian\",\"Hong\",\"Jian\",\"Min\",\"Kang\",\"Men\",\"Zha\",\"Nao\",\"Gui\",\"Wen\",\"Ta\",\"Min\",\"Lu\",\"Kai\"],[\"Fa\",\"Ge\",\"He\",\"Kun\",\"Jiu\",\"Yue\",\"Lang\",\"Du\",\"Yu\",\"Yan\",\"Chang\",\"Xi\",\"Wen\",\"Hun\",\"Yan\",\"E\",\"Chan\",\"Lan\",\"Qu\",\"Hui\",\"Kuo\",\"Que\",\"Ge\",\"Tian\",\"Ta\",\"Que\",\"Kan\",\"Huan\",\"Fu\",\"Fu\",\"Le\",\"Dui\",\"Xin\",\"Qian\",\"Wu\",\"Yi\",\"Tuo\",\"Yin\",\"Yang\",\"Dou\",\"E\",\"Sheng\",\"Ban\",\"Pei\",\"Keng\",\"Yun\",\"Ruan\",\"Zhi\",\"Pi\",\"Jing\",\"Fang\",\"Yang\",\"Yin\",\"Zhen\",\"Jie\",\"Cheng\",\"E\",\"Qu\",\"Di\",\"Zu\",\"Zuo\",\"Dian\",\"Ling\",\"A\",\"Tuo\",\"Tuo\",\"Po\",\"Bing\",\"Fu\",\"Ji\",\"Lu\",\"Long\",\"Chen\",\"Xing\",\"Duo\",\"Lou\",\"Mo\",\"Jiang\",\"Shu\",\"Duo\",\"Xian\",\"Er\",\"Gui\",\"Yu\",\"Gai\",\"Shan\",\"Xun\",\"Qiao\",\"Xing\",\"Chun\",\"Fu\",\"Bi\",\"Xia\",\"Shan\",\"Sheng\",\"Zhi\",\"Pu\",\"Dou\",\"Yuan\",\"Zhen\",\"Chu\",\"Xian\",\"Tou\",\"Nie\",\"Yun\",\"Xian\",\"Pei\",\"Pei\",\"Zou\",\"Yi\",\"Dui\",\"Lun\",\"Yin\",\"Ju\",\"Chui\",\"Chen\",\"Pi\",\"Ling\",\"Tao\",\"Xian\",\"Lu\",\"Sheng\",\"Xian\",\"Yin\",\"Zhu\",\"Yang\",\"Reng\",\"Shan\",\"Chong\",\"Yan\",\"Yin\",\"Yu\",\"Ti\",\"Yu\",\"Long\",\"Wei\",\"Wei\",\"Nie\",\"Dui\",\"Sui\",\"An\",\"Huang\",\"Jie\",\"Sui\",\"Yin\",\"Gai\",\"Yan\",\"Hui\",\"Ge\",\"Yun\",\"Wu\",\"Wei\",\"Ai\",\"Xi\",\"Tang\",\"Ji\",\"Zhang\",\"Dao\",\"Ao\",\"Xi\",\"Yin\",,\"Rao\",\"Lin\",\"Tui\",\"Deng\",\"Pi\",\"Sui\",\"Sui\",\"Yu\",\"Xian\",\"Fen\",\"Ni\",\"Er\",\"Ji\",\"Dao\",\"Xi\",\"Yin\",\"E\",\"Hui\",\"Long\",\"Xi\",\"Li\",\"Li\",\"Li\",\"Zhui\",\"He\",\"Zhi\",\"Zhun\",\"Jun\",\"Nan\",\"Yi\",\"Que\",\"Yan\",\"Qian\",\"Ya\",\"Xiong\",\"Ya\",\"Ji\",\"Gu\",\"Huan\",\"Zhi\",\"Gou\",\"Jun\",\"Ci\",\"Yong\",\"Ju\",\"Chu\",\"Hu\",\"Za\",\"Luo\",\"Yu\",\"Chou\",\"Diao\",\"Sui\",\"Han\",\"Huo\",\"Shuang\",\"Guan\",\"Chu\",\"Za\",\"Yong\",\"Ji\",\"Xi\",\"Chou\",\"Liu\",\"Li\",\"Nan\",\"Xue\",\"Za\",\"Ji\",\"Ji\",\"Yu\",\"Yu\",\"Xue\",\"Na\",\"Fou\",\"Se\",\"Mu\",\"Wen\",\"Fen\",\"Pang\",\"Yun\",\"Li\",\"Li\",\"Ang\",\"Ling\",\"Lei\",\"An\",\"Bao\",\"Meng\",\"Dian\",\"Dang\",\"Xing\",\"Wu\",\"Zhao\"],[\"Xu\",\"Ji\",\"Mu\",\"Chen\",\"Xiao\",\"Zha\",\"Ting\",\"Zhen\",\"Pei\",\"Mei\",\"Ling\",\"Qi\",\"Chou\",\"Huo\",\"Sha\",\"Fei\",\"Weng\",\"Zhan\",\"Yin\",\"Ni\",\"Chou\",\"Tun\",\"Lin\",,\"Dong\",\"Ying\",\"Wu\",\"Ling\",\"Shuang\",\"Ling\",\"Xia\",\"Hong\",\"Yin\",\"Mo\",\"Mai\",\"Yun\",\"Liu\",\"Meng\",\"Bin\",\"Wu\",\"Wei\",\"Huo\",\"Yin\",\"Xi\",\"Yi\",\"Ai\",\"Dan\",\"Deng\",\"Xian\",\"Yu\",\"Lu\",\"Long\",\"Dai\",\"Ji\",\"Pang\",\"Yang\",\"Ba\",\"Pi\",\"Wei\",,\"Xi\",\"Ji\",\"Mai\",\"Meng\",\"Meng\",\"Lei\",\"Li\",\"Huo\",\"Ai\",\"Fei\",\"Dai\",\"Long\",\"Ling\",\"Ai\",\"Feng\",\"Li\",\"Bao\",,\"He\",\"He\",\"Bing\",\"Qing\",\"Qing\",\"Jing\",\"Tian\",\"Zhen\",\"Jing\",\"Cheng\",\"Qing\",\"Jing\",\"Jing\",\"Dian\",\"Jing\",\"Tian\",\"Fei\",\"Fei\",\"Kao\",\"Mi\",\"Mian\",\"Mian\",\"Pao\",\"Ye\",\"Tian\",\"Hui\",\"Ye\",\"Ge\",\"Ding\",\"Cha\",\"Jian\",\"Ren\",\"Di\",\"Du\",\"Wu\",\"Ren\",\"Qin\",\"Jin\",\"Xue\",\"Niu\",\"Ba\",\"Yin\",\"Sa\",\"Na\",\"Mo\",\"Zu\",\"Da\",\"Ban\",\"Yi\",\"Yao\",\"Tao\",\"Tuo\",\"Jia\",\"Hong\",\"Pao\",\"Yang\",\"Tomo\",\"Yin\",\"Jia\",\"Tao\",\"Ji\",\"Xie\",\"An\",\"An\",\"Hen\",\"Gong\",\"Kohaze\",\"Da\",\"Qiao\",\"Ting\",\"Wan\",\"Ying\",\"Sui\",\"Tiao\",\"Qiao\",\"Xuan\",\"Kong\",\"Beng\",\"Ta\",\"Zhang\",\"Bing\",\"Kuo\",\"Ju\",\"La\",\"Xie\",\"Rou\",\"Bang\",\"Yi\",\"Qiu\",\"Qiu\",\"He\",\"Xiao\",\"Mu\",\"Ju\",\"Jian\",\"Bian\",\"Di\",\"Jian\",\"On\",\"Tao\",\"Gou\",\"Ta\",\"Bei\",\"Xie\",\"Pan\",\"Ge\",\"Bi\",\"Kuo\",\"Tang\",\"Lou\",\"Gui\",\"Qiao\",\"Xue\",\"Ji\",\"Jian\",\"Jiang\",\"Chan\",\"Da\",\"Huo\",\"Xian\",\"Qian\",\"Du\",\"Wa\",\"Jian\",\"Lan\",\"Wei\",\"Ren\",\"Fu\",\"Mei\",\"Juan\",\"Ge\",\"Wei\",\"Qiao\",\"Han\",\"Chang\",,\"Rou\",\"Xun\",\"She\",\"Wei\",\"Ge\",\"Bei\",\"Tao\",\"Gou\",\"Yun\",,\"Bi\",\"Wei\",\"Hui\",\"Du\",\"Wa\",\"Du\",\"Wei\",\"Ren\",\"Fu\",\"Han\",\"Wei\",\"Yun\",\"Tao\",\"Jiu\",\"Jiu\",\"Xian\",\"Xie\",\"Xian\",\"Ji\",\"Yin\",\"Za\",\"Yun\",\"Shao\",\"Le\",\"Peng\",\"Heng\",\"Ying\",\"Yun\",\"Peng\",\"Yin\",\"Yin\",\"Xiang\"],[\"Hu\",\"Ye\",\"Ding\",\"Qing\",\"Pan\",\"Xiang\",\"Shun\",\"Han\",\"Xu\",\"Yi\",\"Xu\",\"Gu\",\"Song\",\"Kui\",\"Qi\",\"Hang\",\"Yu\",\"Wan\",\"Ban\",\"Dun\",\"Di\",\"Dan\",\"Pan\",\"Po\",\"Ling\",\"Ce\",\"Jing\",\"Lei\",\"He\",\"Qiao\",\"E\",\"E\",\"Wei\",\"Jie\",\"Gua\",\"Shen\",\"Yi\",\"Shen\",\"Hai\",\"Dui\",\"Pian\",\"Ping\",\"Lei\",\"Fu\",\"Jia\",\"Tou\",\"Hui\",\"Kui\",\"Jia\",\"Le\",\"Tian\",\"Cheng\",\"Ying\",\"Jun\",\"Hu\",\"Han\",\"Jing\",\"Tui\",\"Tui\",\"Pin\",\"Lai\",\"Tui\",\"Zi\",\"Zi\",\"Chui\",\"Ding\",\"Lai\",\"Yan\",\"Han\",\"Jian\",\"Ke\",\"Cui\",\"Jiong\",\"Qin\",\"Yi\",\"Sai\",\"Ti\",\"E\",\"E\",\"Yan\",\"Hun\",\"Kan\",\"Yong\",\"Zhuan\",\"Yan\",\"Xian\",\"Xin\",\"Yi\",\"Yuan\",\"Sang\",\"Dian\",\"Dian\",\"Jiang\",\"Ku\",\"Lei\",\"Liao\",\"Piao\",\"Yi\",\"Man\",\"Qi\",\"Rao\",\"Hao\",\"Qiao\",\"Gu\",\"Xun\",\"Qian\",\"Hui\",\"Zhan\",\"Ru\",\"Hong\",\"Bin\",\"Xian\",\"Pin\",\"Lu\",\"Lan\",\"Nie\",\"Quan\",\"Ye\",\"Ding\",\"Qing\",\"Han\",\"Xiang\",\"Shun\",\"Xu\",\"Xu\",\"Wan\",\"Gu\",\"Dun\",\"Qi\",\"Ban\",\"Song\",\"Hang\",\"Yu\",\"Lu\",\"Ling\",\"Po\",\"Jing\",\"Jie\",\"Jia\",\"Tian\",\"Han\",\"Ying\",\"Jiong\",\"Hai\",\"Yi\",\"Pin\",\"Hui\",\"Tui\",\"Han\",\"Ying\",\"Ying\",\"Ke\",\"Ti\",\"Yong\",\"E\",\"Zhuan\",\"Yan\",\"E\",\"Nie\",\"Man\",\"Dian\",\"Sang\",\"Hao\",\"Lei\",\"Zhan\",\"Ru\",\"Pin\",\"Quan\",\"Feng\",\"Biao\",\"Oroshi\",\"Fu\",\"Xia\",\"Zhan\",\"Biao\",\"Sa\",\"Ba\",\"Tai\",\"Lie\",\"Gua\",\"Xuan\",\"Shao\",\"Ju\",\"Bi\",\"Si\",\"Wei\",\"Yang\",\"Yao\",\"Sou\",\"Kai\",\"Sao\",\"Fan\",\"Liu\",\"Xi\",\"Liao\",\"Piao\",\"Piao\",\"Liu\",\"Biao\",\"Biao\",\"Biao\",\"Liao\",,\"Se\",\"Feng\",\"Biao\",\"Feng\",\"Yang\",\"Zhan\",\"Biao\",\"Sa\",\"Ju\",\"Si\",\"Sou\",\"Yao\",\"Liu\",\"Piao\",\"Biao\",\"Biao\",\"Fei\",\"Fan\",\"Fei\",\"Fei\",\"Shi\",\"Shi\",\"Can\",\"Ji\",\"Ding\",\"Si\",\"Tuo\",\"Zhan\",\"Sun\",\"Xiang\",\"Tun\",\"Ren\",\"Yu\",\"Juan\",\"Chi\",\"Yin\",\"Fan\",\"Fan\",\"Sun\",\"Yin\",\"Zhu\",\"Yi\",\"Zhai\",\"Bi\",\"Jie\",\"Tao\",\"Liu\",\"Ci\",\"Tie\",\"Si\",\"Bao\",\"Shi\",\"Duo\"],[\"Hai\",\"Ren\",\"Tian\",\"Jiao\",\"Jia\",\"Bing\",\"Yao\",\"Tong\",\"Ci\",\"Xiang\",\"Yang\",\"Yang\",\"Er\",\"Yan\",\"Le\",\"Yi\",\"Can\",\"Bo\",\"Nei\",\"E\",\"Bu\",\"Jun\",\"Dou\",\"Su\",\"Yu\",\"Shi\",\"Yao\",\"Hun\",\"Guo\",\"Shi\",\"Jian\",\"Zhui\",\"Bing\",\"Xian\",\"Bu\",\"Ye\",\"Tan\",\"Fei\",\"Zhang\",\"Wei\",\"Guan\",\"E\",\"Nuan\",\"Hun\",\"Hu\",\"Huang\",\"Tie\",\"Hui\",\"Jian\",\"Hou\",\"He\",\"Xing\",\"Fen\",\"Wei\",\"Gu\",\"Cha\",\"Song\",\"Tang\",\"Bo\",\"Gao\",\"Xi\",\"Kui\",\"Liu\",\"Sou\",\"Tao\",\"Ye\",\"Yun\",\"Mo\",\"Tang\",\"Man\",\"Bi\",\"Yu\",\"Xiu\",\"Jin\",\"San\",\"Kui\",\"Zhuan\",\"Shan\",\"Chi\",\"Dan\",\"Yi\",\"Ji\",\"Rao\",\"Cheng\",\"Yong\",\"Tao\",\"Hui\",\"Xiang\",\"Zhan\",\"Fen\",\"Hai\",\"Meng\",\"Yan\",\"Mo\",\"Chan\",\"Xiang\",\"Luo\",\"Zuan\",\"Nang\",\"Shi\",\"Ding\",\"Ji\",\"Tuo\",\"Xing\",\"Tun\",\"Xi\",\"Ren\",\"Yu\",\"Chi\",\"Fan\",\"Yin\",\"Jian\",\"Shi\",\"Bao\",\"Si\",\"Duo\",\"Yi\",\"Er\",\"Rao\",\"Xiang\",\"Jia\",\"Le\",\"Jiao\",\"Yi\",\"Bing\",\"Bo\",\"Dou\",\"E\",\"Yu\",\"Nei\",\"Jun\",\"Guo\",\"Hun\",\"Xian\",\"Guan\",\"Cha\",\"Kui\",\"Gu\",\"Sou\",\"Chan\",\"Ye\",\"Mo\",\"Bo\",\"Liu\",\"Xiu\",\"Jin\",\"Man\",\"San\",\"Zhuan\",\"Nang\",\"Shou\",\"Kui\",\"Guo\",\"Xiang\",\"Fen\",\"Ba\",\"Ni\",\"Bi\",\"Bo\",\"Tu\",\"Han\",\"Fei\",\"Jian\",\"An\",\"Ai\",\"Fu\",\"Xian\",\"Wen\",\"Xin\",\"Fen\",\"Bin\",\"Xing\",\"Ma\",\"Yu\",\"Feng\",\"Han\",\"Di\",\"Tuo\",\"Tuo\",\"Chi\",\"Xun\",\"Zhu\",\"Zhi\",\"Pei\",\"Xin\",\"Ri\",\"Sa\",\"Yin\",\"Wen\",\"Zhi\",\"Dan\",\"Lu\",\"You\",\"Bo\",\"Bao\",\"Kuai\",\"Tuo\",\"Yi\",\"Qu\",,\"Qu\",\"Jiong\",\"Bo\",\"Zhao\",\"Yuan\",\"Peng\",\"Zhou\",\"Ju\",\"Zhu\",\"Nu\",\"Ju\",\"Pi\",\"Zang\",\"Jia\",\"Ling\",\"Zhen\",\"Tai\",\"Fu\",\"Yang\",\"Shi\",\"Bi\",\"Tuo\",\"Tuo\",\"Si\",\"Liu\",\"Ma\",\"Pian\",\"Tao\",\"Zhi\",\"Rong\",\"Teng\",\"Dong\",\"Xun\",\"Quan\",\"Shen\",\"Jiong\",\"Er\",\"Hai\",\"Bo\",\"Zhu\",\"Yin\",\"Luo\",\"Shuu\",\"Dan\",\"Xie\",\"Liu\",\"Ju\",\"Song\",\"Qin\",\"Mang\",\"Liang\",\"Han\",\"Tu\",\"Xuan\",\"Tui\",\"Jun\"],[\"E\",\"Cheng\",\"Xin\",\"Ai\",\"Lu\",\"Zhui\",\"Zhou\",\"She\",\"Pian\",\"Kun\",\"Tao\",\"Lai\",\"Zong\",\"Ke\",\"Qi\",\"Qi\",\"Yan\",\"Fei\",\"Sao\",\"Yan\",\"Jie\",\"Yao\",\"Wu\",\"Pian\",\"Cong\",\"Pian\",\"Qian\",\"Fei\",\"Huang\",\"Jian\",\"Huo\",\"Yu\",\"Ti\",\"Quan\",\"Xia\",\"Zong\",\"Kui\",\"Rou\",\"Si\",\"Gua\",\"Tuo\",\"Kui\",\"Sou\",\"Qian\",\"Cheng\",\"Zhi\",\"Liu\",\"Pang\",\"Teng\",\"Xi\",\"Cao\",\"Du\",\"Yan\",\"Yuan\",\"Zou\",\"Sao\",\"Shan\",\"Li\",\"Zhi\",\"Shuang\",\"Lu\",\"Xi\",\"Luo\",\"Zhang\",\"Mo\",\"Ao\",\"Can\",\"Piao\",\"Cong\",\"Qu\",\"Bi\",\"Zhi\",\"Yu\",\"Xu\",\"Hua\",\"Bo\",\"Su\",\"Xiao\",\"Lin\",\"Chan\",\"Dun\",\"Liu\",\"Tuo\",\"Zeng\",\"Tan\",\"Jiao\",\"Tie\",\"Yan\",\"Luo\",\"Zhan\",\"Jing\",\"Yi\",\"Ye\",\"Tuo\",\"Bin\",\"Zou\",\"Yan\",\"Peng\",\"Lu\",\"Teng\",\"Xiang\",\"Ji\",\"Shuang\",\"Ju\",\"Xi\",\"Huan\",\"Li\",\"Biao\",\"Ma\",\"Yu\",\"Tuo\",\"Xun\",\"Chi\",\"Qu\",\"Ri\",\"Bo\",\"Lu\",\"Zang\",\"Shi\",\"Si\",\"Fu\",\"Ju\",\"Zou\",\"Zhu\",\"Tuo\",\"Nu\",\"Jia\",\"Yi\",\"Tai\",\"Xiao\",\"Ma\",\"Yin\",\"Jiao\",\"Hua\",\"Luo\",\"Hai\",\"Pian\",\"Biao\",\"Li\",\"Cheng\",\"Yan\",\"Xin\",\"Qin\",\"Jun\",\"Qi\",\"Qi\",\"Ke\",\"Zhui\",\"Zong\",\"Su\",\"Can\",\"Pian\",\"Zhi\",\"Kui\",\"Sao\",\"Wu\",\"Ao\",\"Liu\",\"Qian\",\"Shan\",\"Piao\",\"Luo\",\"Cong\",\"Chan\",\"Zou\",\"Ji\",\"Shuang\",\"Xiang\",\"Gu\",\"Wei\",\"Wei\",\"Wei\",\"Yu\",\"Gan\",\"Yi\",\"Ang\",\"Tou\",\"Xie\",\"Bao\",\"Bi\",\"Chi\",\"Ti\",\"Di\",\"Ku\",\"Hai\",\"Qiao\",\"Gou\",\"Kua\",\"Ge\",\"Tui\",\"Geng\",\"Pian\",\"Bi\",\"Ke\",\"Ka\",\"Yu\",\"Sui\",\"Lou\",\"Bo\",\"Xiao\",\"Pang\",\"Bo\",\"Ci\",\"Kuan\",\"Bin\",\"Mo\",\"Liao\",\"Lou\",\"Nao\",\"Du\",\"Zang\",\"Sui\",\"Ti\",\"Bin\",\"Kuan\",\"Lu\",\"Gao\",\"Gao\",\"Qiao\",\"Kao\",\"Qiao\",\"Lao\",\"Zao\",\"Biao\",\"Kun\",\"Kun\",\"Ti\",\"Fang\",\"Xiu\",\"Ran\",\"Mao\",\"Dan\",\"Kun\",\"Bin\",\"Fa\",\"Tiao\",\"Peng\",\"Zi\",\"Fa\",\"Ran\",\"Ti\",\"Pao\",\"Pi\",\"Mao\",\"Fu\",\"Er\",\"Rong\",\"Qu\",\"Gong\",\"Xiu\",\"Gua\",\"Ji\",\"Peng\",\"Zhua\",\"Shao\",\"Sha\"],[\"Ti\",\"Li\",\"Bin\",\"Zong\",\"Ti\",\"Peng\",\"Song\",\"Zheng\",\"Quan\",\"Zong\",\"Shun\",\"Jian\",\"Duo\",\"Hu\",\"La\",\"Jiu\",\"Qi\",\"Lian\",\"Zhen\",\"Bin\",\"Peng\",\"Mo\",\"San\",\"Man\",\"Man\",\"Seng\",\"Xu\",\"Lie\",\"Qian\",\"Qian\",\"Nong\",\"Huan\",\"Kuai\",\"Ning\",\"Bin\",\"Lie\",\"Rang\",\"Dou\",\"Dou\",\"Nao\",\"Hong\",\"Xi\",\"Dou\",\"Han\",\"Dou\",\"Dou\",\"Jiu\",\"Chang\",\"Yu\",\"Yu\",\"Li\",\"Juan\",\"Fu\",\"Qian\",\"Gui\",\"Zong\",\"Liu\",\"Gui\",\"Shang\",\"Yu\",\"Gui\",\"Mei\",\"Ji\",\"Qi\",\"Jie\",\"Kui\",\"Hun\",\"Ba\",\"Po\",\"Mei\",\"Xu\",\"Yan\",\"Xiao\",\"Liang\",\"Yu\",\"Tui\",\"Qi\",\"Wang\",\"Liang\",\"Wei\",\"Jian\",\"Chi\",\"Piao\",\"Bi\",\"Mo\",\"Ji\",\"Xu\",\"Chou\",\"Yan\",\"Zhan\",\"Yu\",\"Dao\",\"Ren\",\"Ji\",\"Eri\",\"Gong\",\"Tuo\",\"Diao\",\"Ji\",\"Xu\",\"E\",\"E\",\"Sha\",\"Hang\",\"Tun\",\"Mo\",\"Jie\",\"Shen\",\"Fan\",\"Yuan\",\"Bi\",\"Lu\",\"Wen\",\"Hu\",\"Lu\",\"Za\",\"Fang\",\"Fen\",\"Na\",\"You\",\"Namazu\",\"Todo\",\"He\",\"Xia\",\"Qu\",\"Han\",\"Pi\",\"Ling\",\"Tuo\",\"Bo\",\"Qiu\",\"Ping\",\"Fu\",\"Bi\",\"Ji\",\"Wei\",\"Ju\",\"Diao\",\"Bo\",\"You\",\"Gun\",\"Pi\",\"Nian\",\"Xing\",\"Tai\",\"Bao\",\"Fu\",\"Zha\",\"Ju\",\"Gu\",\"Kajika\",\"Tong\",,\"Ta\",\"Jie\",\"Shu\",\"Hou\",\"Xiang\",\"Er\",\"An\",\"Wei\",\"Tiao\",\"Zhu\",\"Yin\",\"Lie\",\"Luo\",\"Tong\",\"Yi\",\"Qi\",\"Bing\",\"Wei\",\"Jiao\",\"Bu\",\"Gui\",\"Xian\",\"Ge\",\"Hui\",\"Bora\",\"Mate\",\"Kao\",\"Gori\",\"Duo\",\"Jun\",\"Ti\",\"Man\",\"Xiao\",\"Za\",\"Sha\",\"Qin\",\"Yu\",\"Nei\",\"Zhe\",\"Gun\",\"Geng\",\"Su\",\"Wu\",\"Qiu\",\"Ting\",\"Fu\",\"Wan\",\"You\",\"Li\",\"Sha\",\"Sha\",\"Gao\",\"Meng\",\"Ugui\",\"Asari\",\"Subashiri\",\"Kazunoko\",\"Yong\",\"Ni\",\"Zi\",\"Qi\",\"Qing\",\"Xiang\",\"Nei\",\"Chun\",\"Ji\",\"Diao\",\"Qie\",\"Gu\",\"Zhou\",\"Dong\",\"Lai\",\"Fei\",\"Ni\",\"Yi\",\"Kun\",\"Lu\",\"Jiu\",\"Chang\",\"Jing\",\"Lun\",\"Ling\",\"Zou\",\"Li\",\"Meng\",\"Zong\",\"Zhi\",\"Nian\",\"Shachi\",\"Dojou\",\"Sukesou\",\"Shi\",\"Shen\",\"Hun\",\"Shi\",\"Hou\",\"Xing\",\"Zhu\",\"La\",\"Zong\",\"Ji\",\"Bian\",\"Bian\"],[\"Huan\",\"Quan\",\"Ze\",\"Wei\",\"Wei\",\"Yu\",\"Qun\",\"Rou\",\"Die\",\"Huang\",\"Lian\",\"Yan\",\"Qiu\",\"Qiu\",\"Jian\",\"Bi\",\"E\",\"Yang\",\"Fu\",\"Sai\",\"Jian\",\"Xia\",\"Tuo\",\"Hu\",\"Muroaji\",\"Ruo\",\"Haraka\",\"Wen\",\"Jian\",\"Hao\",\"Wu\",\"Fang\",\"Sao\",\"Liu\",\"Ma\",\"Shi\",\"Shi\",\"Yin\",\"Z\",\"Teng\",\"Ta\",\"Yao\",\"Ge\",\"Rong\",\"Qian\",\"Qi\",\"Wen\",\"Ruo\",\"Hatahata\",\"Lian\",\"Ao\",\"Le\",\"Hui\",\"Min\",\"Ji\",\"Tiao\",\"Qu\",\"Jian\",\"Sao\",\"Man\",\"Xi\",\"Qiu\",\"Biao\",\"Ji\",\"Ji\",\"Zhu\",\"Jiang\",\"Qiu\",\"Zhuan\",\"Yong\",\"Zhang\",\"Kang\",\"Xue\",\"Bie\",\"Jue\",\"Qu\",\"Xiang\",\"Bo\",\"Jiao\",\"Xun\",\"Su\",\"Huang\",\"Zun\",\"Shan\",\"Shan\",\"Fan\",\"Jue\",\"Lin\",\"Xun\",\"Miao\",\"Xi\",\"Eso\",\"Kyou\",\"Fen\",\"Guan\",\"Hou\",\"Kuai\",\"Zei\",\"Sao\",\"Zhan\",\"Gan\",\"Gui\",\"Sheng\",\"Li\",\"Chang\",\"Hatahata\",\"Shiira\",\"Mutsu\",\"Ru\",\"Ji\",\"Xu\",\"Huo\",\"Shiira\",\"Li\",\"Lie\",\"Li\",\"Mie\",\"Zhen\",\"Xiang\",\"E\",\"Lu\",\"Guan\",\"Li\",\"Xian\",\"Yu\",\"Dao\",\"Ji\",\"You\",\"Tun\",\"Lu\",\"Fang\",\"Ba\",\"He\",\"Bo\",\"Ping\",\"Nian\",\"Lu\",\"You\",\"Zha\",\"Fu\",\"Bo\",\"Bao\",\"Hou\",\"Pi\",\"Tai\",\"Gui\",\"Jie\",\"Kao\",\"Wei\",\"Er\",\"Tong\",\"Ze\",\"Hou\",\"Kuai\",\"Ji\",\"Jiao\",\"Xian\",\"Za\",\"Xiang\",\"Xun\",\"Geng\",\"Li\",\"Lian\",\"Jian\",\"Li\",\"Shi\",\"Tiao\",\"Gun\",\"Sha\",\"Wan\",\"Jun\",\"Ji\",\"Yong\",\"Qing\",\"Ling\",\"Qi\",\"Zou\",\"Fei\",\"Kun\",\"Chang\",\"Gu\",\"Ni\",\"Nian\",\"Diao\",\"Jing\",\"Shen\",\"Shi\",\"Zi\",\"Fen\",\"Die\",\"Bi\",\"Chang\",\"Shi\",\"Wen\",\"Wei\",\"Sai\",\"E\",\"Qiu\",\"Fu\",\"Huang\",\"Quan\",\"Jiang\",\"Bian\",\"Sao\",\"Ao\",\"Qi\",\"Ta\",\"Yin\",\"Yao\",\"Fang\",\"Jian\",\"Le\",\"Biao\",\"Xue\",\"Bie\",\"Man\",\"Min\",\"Yong\",\"Wei\",\"Xi\",\"Jue\",\"Shan\",\"Lin\",\"Zun\",\"Huo\",\"Gan\",\"Li\",\"Zhan\",\"Guan\",\"Niao\",\"Yi\",\"Fu\",\"Li\",\"Jiu\",\"Bu\",\"Yan\",\"Fu\",\"Diao\",\"Ji\",\"Feng\",\"Nio\",\"Gan\",\"Shi\",\"Feng\",\"Ming\",\"Bao\",\"Yuan\",\"Zhi\",\"Hu\",\"Qin\",\"Fu\",\"Fen\",\"Wen\",\"Jian\",\"Shi\",\"Yu\"],[\"Fou\",\"Yiao\",\"Jue\",\"Jue\",\"Pi\",\"Huan\",\"Zhen\",\"Bao\",\"Yan\",\"Ya\",\"Zheng\",\"Fang\",\"Feng\",\"Wen\",\"Ou\",\"Te\",\"Jia\",\"Nu\",\"Ling\",\"Mie\",\"Fu\",\"Tuo\",\"Wen\",\"Li\",\"Bian\",\"Zhi\",\"Ge\",\"Yuan\",\"Zi\",\"Qu\",\"Xiao\",\"Zhi\",\"Dan\",\"Ju\",\"You\",\"Gu\",\"Zhong\",\"Yu\",\"Yang\",\"Rong\",\"Ya\",\"Tie\",\"Yu\",\"Shigi\",\"Ying\",\"Zhui\",\"Wu\",\"Er\",\"Gua\",\"Ai\",\"Zhi\",\"Yan\",\"Heng\",\"Jiao\",\"Ji\",\"Lie\",\"Zhu\",\"Ren\",\"Yi\",\"Hong\",\"Luo\",\"Ru\",\"Mou\",\"Ge\",\"Ren\",\"Jiao\",\"Xiu\",\"Zhou\",\"Zhi\",\"Luo\",\"Chidori\",\"Toki\",\"Ten\",\"Luan\",\"Jia\",\"Ji\",\"Yu\",\"Huan\",\"Tuo\",\"Bu\",\"Wu\",\"Juan\",\"Yu\",\"Bo\",\"Xun\",\"Xun\",\"Bi\",\"Xi\",\"Jun\",\"Ju\",\"Tu\",\"Jing\",\"Ti\",\"E\",\"E\",\"Kuang\",\"Hu\",\"Wu\",\"Shen\",\"Lai\",\"Ikaruga\",\"Kakesu\",\"Lu\",\"Ping\",\"Shu\",\"Fu\",\"An\",\"Zhao\",\"Peng\",\"Qin\",\"Qian\",\"Bei\",\"Diao\",\"Lu\",\"Que\",\"Jian\",\"Ju\",\"Tu\",\"Ya\",\"Yuan\",\"Qi\",\"Li\",\"Ye\",\"Zhui\",\"Kong\",\"Zhui\",\"Kun\",\"Sheng\",\"Qi\",\"Jing\",\"Yi\",\"Yi\",\"Jing\",\"Zi\",\"Lai\",\"Dong\",\"Qi\",\"Chun\",\"Geng\",\"Ju\",\"Qu\",\"Isuka\",\"Kikuitadaki\",\"Ji\",\"Shu\",,\"Chi\",\"Miao\",\"Rou\",\"An\",\"Qiu\",\"Ti\",\"Hu\",\"Ti\",\"E\",\"Jie\",\"Mao\",\"Fu\",\"Chun\",\"Tu\",\"Yan\",\"He\",\"Yuan\",\"Pian\",\"Yun\",\"Mei\",\"Hu\",\"Ying\",\"Dun\",\"Mu\",\"Ju\",\"Tsugumi\",\"Cang\",\"Fang\",\"Gu\",\"Ying\",\"Yuan\",\"Xuan\",\"Weng\",\"Shi\",\"He\",\"Chu\",\"Tang\",\"Xia\",\"Ruo\",\"Liu\",\"Ji\",\"Gu\",\"Jian\",\"Zhun\",\"Han\",\"Zi\",\"Zi\",\"Ni\",\"Yao\",\"Yan\",\"Ji\",\"Li\",\"Tian\",\"Kou\",\"Ti\",\"Ti\",\"Ni\",\"Tu\",\"Ma\",\"Jiao\",\"Gao\",\"Tian\",\"Chen\",\"Li\",\"Zhuan\",\"Zhe\",\"Ao\",\"Yao\",\"Yi\",\"Ou\",\"Chi\",\"Zhi\",\"Liao\",\"Rong\",\"Lou\",\"Bi\",\"Shuang\",\"Zhuo\",\"Yu\",\"Wu\",\"Jue\",\"Yin\",\"Quan\",\"Si\",\"Jiao\",\"Yi\",\"Hua\",\"Bi\",\"Ying\",\"Su\",\"Huang\",\"Fan\",\"Jiao\",\"Liao\",\"Yan\",\"Kao\",\"Jiu\",\"Xian\",\"Xian\",\"Tu\",\"Mai\",\"Zun\",\"Yu\",\"Ying\",\"Lu\",\"Tuan\",\"Xian\",\"Xue\",\"Yi\",\"Pi\"],[\"Shu\",\"Luo\",\"Qi\",\"Yi\",\"Ji\",\"Zhe\",\"Yu\",\"Zhan\",\"Ye\",\"Yang\",\"Pi\",\"Ning\",\"Huo\",\"Mi\",\"Ying\",\"Meng\",\"Di\",\"Yue\",\"Yu\",\"Lei\",\"Bao\",\"Lu\",\"He\",\"Long\",\"Shuang\",\"Yue\",\"Ying\",\"Guan\",\"Qu\",\"Li\",\"Luan\",\"Niao\",\"Jiu\",\"Ji\",\"Yuan\",\"Ming\",\"Shi\",\"Ou\",\"Ya\",\"Cang\",\"Bao\",\"Zhen\",\"Gu\",\"Dong\",\"Lu\",\"Ya\",\"Xiao\",\"Yang\",\"Ling\",\"Zhi\",\"Qu\",\"Yuan\",\"Xue\",\"Tuo\",\"Si\",\"Zhi\",\"Er\",\"Gua\",\"Xiu\",\"Heng\",\"Zhou\",\"Ge\",\"Luan\",\"Hong\",\"Wu\",\"Bo\",\"Li\",\"Juan\",\"Hu\",\"E\",\"Yu\",\"Xian\",\"Ti\",\"Wu\",\"Que\",\"Miao\",\"An\",\"Kun\",\"Bei\",\"Peng\",\"Qian\",\"Chun\",\"Geng\",\"Yuan\",\"Su\",\"Hu\",\"He\",\"E\",\"Gu\",\"Qiu\",\"Zi\",\"Mei\",\"Mu\",\"Ni\",\"Yao\",\"Weng\",\"Liu\",\"Ji\",\"Ni\",\"Jian\",\"He\",\"Yi\",\"Ying\",\"Zhe\",\"Liao\",\"Liao\",\"Jiao\",\"Jiu\",\"Yu\",\"Lu\",\"Xuan\",\"Zhan\",\"Ying\",\"Huo\",\"Meng\",\"Guan\",\"Shuang\",\"Lu\",\"Jin\",\"Ling\",\"Jian\",\"Xian\",\"Cuo\",\"Jian\",\"Jian\",\"Yan\",\"Cuo\",\"Lu\",\"You\",\"Cu\",\"Ji\",\"Biao\",\"Cu\",\"Biao\",\"Zhu\",\"Jun\",\"Zhu\",\"Jian\",\"Mi\",\"Mi\",\"Wu\",\"Liu\",\"Chen\",\"Jun\",\"Lin\",\"Ni\",\"Qi\",\"Lu\",\"Jiu\",\"Jun\",\"Jing\",\"Li\",\"Xiang\",\"Yan\",\"Jia\",\"Mi\",\"Li\",\"She\",\"Zhang\",\"Lin\",\"Jing\",\"Ji\",\"Ling\",\"Yan\",\"Cu\",\"Mai\",\"Mai\",\"Ge\",\"Chao\",\"Fu\",\"Mian\",\"Mian\",\"Fu\",\"Pao\",\"Qu\",\"Qu\",\"Mou\",\"Fu\",\"Xian\",\"Lai\",\"Qu\",\"Mian\",,\"Feng\",\"Fu\",\"Qu\",\"Mian\",\"Ma\",\"Mo\",\"Mo\",\"Hui\",\"Ma\",\"Zou\",\"Nen\",\"Fen\",\"Huang\",\"Huang\",\"Jin\",\"Guang\",\"Tian\",\"Tou\",\"Heng\",\"Xi\",\"Kuang\",\"Heng\",\"Shu\",\"Li\",\"Nian\",\"Chi\",\"Hei\",\"Hei\",\"Yi\",\"Qian\",\"Dan\",\"Xi\",\"Tuan\",\"Mo\",\"Mo\",\"Qian\",\"Dai\",\"Chu\",\"You\",\"Dian\",\"Yi\",\"Xia\",\"Yan\",\"Qu\",\"Mei\",\"Yan\",\"Jing\",\"Yu\",\"Li\",\"Dang\",\"Du\",\"Can\",\"Yin\",\"An\",\"Yan\",\"Tan\",\"An\",\"Zhen\",\"Dai\",\"Can\",\"Yi\",\"Mei\",\"Dan\",\"Yan\",\"Du\",\"Lu\",\"Zhi\",\"Fen\",\"Fu\",\"Fu\",\"Min\",\"Min\",\"Yuan\"],[\"Cu\",\"Qu\",\"Chao\",\"Wa\",\"Zhu\",\"Zhi\",\"Mang\",\"Ao\",\"Bie\",\"Tuo\",\"Bi\",\"Yuan\",\"Chao\",\"Tuo\",\"Ding\",\"Mi\",\"Nai\",\"Ding\",\"Zi\",\"Gu\",\"Gu\",\"Dong\",\"Fen\",\"Tao\",\"Yuan\",\"Pi\",\"Chang\",\"Gao\",\"Qi\",\"Yuan\",\"Tang\",\"Teng\",\"Shu\",\"Shu\",\"Fen\",\"Fei\",\"Wen\",\"Ba\",\"Diao\",\"Tuo\",\"Tong\",\"Qu\",\"Sheng\",\"Shi\",\"You\",\"Shi\",\"Ting\",\"Wu\",\"Nian\",\"Jing\",\"Hun\",\"Ju\",\"Yan\",\"Tu\",\"Ti\",\"Xi\",\"Xian\",\"Yan\",\"Lei\",\"Bi\",\"Yao\",\"Qiu\",\"Han\",\"Wu\",\"Wu\",\"Hou\",\"Xi\",\"Ge\",\"Zha\",\"Xiu\",\"Weng\",\"Zha\",\"Nong\",\"Nang\",\"Qi\",\"Zhai\",\"Ji\",\"Zi\",\"Ji\",\"Ji\",\"Qi\",\"Ji\",\"Chi\",\"Chen\",\"Chen\",\"He\",\"Ya\",\"Ken\",\"Xie\",\"Pao\",\"Cuo\",\"Shi\",\"Zi\",\"Chi\",\"Nian\",\"Ju\",\"Tiao\",\"Ling\",\"Ling\",\"Chu\",\"Quan\",\"Xie\",\"Ken\",\"Nie\",\"Jiu\",\"Yao\",\"Chuo\",\"Kun\",\"Yu\",\"Chu\",\"Yi\",\"Ni\",\"Cuo\",\"Zou\",\"Qu\",\"Nen\",\"Xian\",\"Ou\",\"E\",\"Wo\",\"Yi\",\"Chuo\",\"Zou\",\"Dian\",\"Chu\",\"Jin\",\"Ya\",\"Chi\",\"Chen\",\"He\",\"Ken\",\"Ju\",\"Ling\",\"Pao\",\"Tiao\",\"Zi\",\"Ken\",\"Yu\",\"Chuo\",\"Qu\",\"Wo\",\"Long\",\"Pang\",\"Gong\",\"Pang\",\"Yan\",\"Long\",\"Long\",\"Gong\",\"Kan\",\"Ta\",\"Ling\",\"Ta\",\"Long\",\"Gong\",\"Kan\",\"Gui\",\"Qiu\",\"Bie\",\"Gui\",\"Yue\",\"Chui\",\"He\",\"Jue\",\"Xie\",\"Yu\"],[\"it\",\"ix\",\"i\",\"ip\",\"iet\",\"iex\",\"ie\",\"iep\",\"at\",\"ax\",\"a\",\"ap\",\"uox\",\"uo\",\"uop\",\"ot\",\"ox\",\"o\",\"op\",\"ex\",\"e\",\"wu\",\"bit\",\"bix\",\"bi\",\"bip\",\"biet\",\"biex\",\"bie\",\"biep\",\"bat\",\"bax\",\"ba\",\"bap\",\"buox\",\"buo\",\"buop\",\"bot\",\"box\",\"bo\",\"bop\",\"bex\",\"be\",\"bep\",\"but\",\"bux\",\"bu\",\"bup\",\"burx\",\"bur\",\"byt\",\"byx\",\"by\",\"byp\",\"byrx\",\"byr\",\"pit\",\"pix\",\"pi\",\"pip\",\"piex\",\"pie\",\"piep\",\"pat\",\"pax\",\"pa\",\"pap\",\"puox\",\"puo\",\"puop\",\"pot\",\"pox\",\"po\",\"pop\",\"put\",\"pux\",\"pu\",\"pup\",\"purx\",\"pur\",\"pyt\",\"pyx\",\"py\",\"pyp\",\"pyrx\",\"pyr\",\"bbit\",\"bbix\",\"bbi\",\"bbip\",\"bbiet\",\"bbiex\",\"bbie\",\"bbiep\",\"bbat\",\"bbax\",\"bba\",\"bbap\",\"bbuox\",\"bbuo\",\"bbuop\",\"bbot\",\"bbox\",\"bbo\",\"bbop\",\"bbex\",\"bbe\",\"bbep\",\"bbut\",\"bbux\",\"bbu\",\"bbup\",\"bburx\",\"bbur\",\"bbyt\",\"bbyx\",\"bby\",\"bbyp\",\"nbit\",\"nbix\",\"nbi\",\"nbip\",\"nbiex\",\"nbie\",\"nbiep\",\"nbat\",\"nbax\",\"nba\",\"nbap\",\"nbot\",\"nbox\",\"nbo\",\"nbop\",\"nbut\",\"nbux\",\"nbu\",\"nbup\",\"nburx\",\"nbur\",\"nbyt\",\"nbyx\",\"nby\",\"nbyp\",\"nbyrx\",\"nbyr\",\"hmit\",\"hmix\",\"hmi\",\"hmip\",\"hmiex\",\"hmie\",\"hmiep\",\"hmat\",\"hmax\",\"hma\",\"hmap\",\"hmuox\",\"hmuo\",\"hmuop\",\"hmot\",\"hmox\",\"hmo\",\"hmop\",\"hmut\",\"hmux\",\"hmu\",\"hmup\",\"hmurx\",\"hmur\",\"hmyx\",\"hmy\",\"hmyp\",\"hmyrx\",\"hmyr\",\"mit\",\"mix\",\"mi\",\"mip\",\"miex\",\"mie\",\"miep\",\"mat\",\"max\",\"ma\",\"map\",\"muot\",\"muox\",\"muo\",\"muop\",\"mot\",\"mox\",\"mo\",\"mop\",\"mex\",\"me\",\"mut\",\"mux\",\"mu\",\"mup\",\"murx\",\"mur\",\"myt\",\"myx\",\"my\",\"myp\",\"fit\",\"fix\",\"fi\",\"fip\",\"fat\",\"fax\",\"fa\",\"fap\",\"fox\",\"fo\",\"fop\",\"fut\",\"fux\",\"fu\",\"fup\",\"furx\",\"fur\",\"fyt\",\"fyx\",\"fy\",\"fyp\",\"vit\",\"vix\",\"vi\",\"vip\",\"viet\",\"viex\",\"vie\",\"viep\",\"vat\",\"vax\",\"va\",\"vap\",\"vot\",\"vox\",\"vo\",\"vop\",\"vex\",\"vep\",\"vut\",\"vux\",\"vu\",\"vup\",\"vurx\",\"vur\",\"vyt\",\"vyx\",\"vy\",\"vyp\",\"vyrx\",\"vyr\"],[\"dit\",\"dix\",\"di\",\"dip\",\"diex\",\"die\",\"diep\",\"dat\",\"dax\",\"da\",\"dap\",\"duox\",\"duo\",\"dot\",\"dox\",\"do\",\"dop\",\"dex\",\"de\",\"dep\",\"dut\",\"dux\",\"du\",\"dup\",\"durx\",\"dur\",\"tit\",\"tix\",\"ti\",\"tip\",\"tiex\",\"tie\",\"tiep\",\"tat\",\"tax\",\"ta\",\"tap\",\"tuot\",\"tuox\",\"tuo\",\"tuop\",\"tot\",\"tox\",\"to\",\"top\",\"tex\",\"te\",\"tep\",\"tut\",\"tux\",\"tu\",\"tup\",\"turx\",\"tur\",\"ddit\",\"ddix\",\"ddi\",\"ddip\",\"ddiex\",\"ddie\",\"ddiep\",\"ddat\",\"ddax\",\"dda\",\"ddap\",\"dduox\",\"dduo\",\"dduop\",\"ddot\",\"ddox\",\"ddo\",\"ddop\",\"ddex\",\"dde\",\"ddep\",\"ddut\",\"ddux\",\"ddu\",\"ddup\",\"ddurx\",\"ddur\",\"ndit\",\"ndix\",\"ndi\",\"ndip\",\"ndiex\",\"ndie\",\"ndat\",\"ndax\",\"nda\",\"ndap\",\"ndot\",\"ndox\",\"ndo\",\"ndop\",\"ndex\",\"nde\",\"ndep\",\"ndut\",\"ndux\",\"ndu\",\"ndup\",\"ndurx\",\"ndur\",\"hnit\",\"hnix\",\"hni\",\"hnip\",\"hniet\",\"hniex\",\"hnie\",\"hniep\",\"hnat\",\"hnax\",\"hna\",\"hnap\",\"hnuox\",\"hnuo\",\"hnot\",\"hnox\",\"hnop\",\"hnex\",\"hne\",\"hnep\",\"hnut\",\"nit\",\"nix\",\"ni\",\"nip\",\"niex\",\"nie\",\"niep\",\"nax\",\"na\",\"nap\",\"nuox\",\"nuo\",\"nuop\",\"not\",\"nox\",\"no\",\"nop\",\"nex\",\"ne\",\"nep\",\"nut\",\"nux\",\"nu\",\"nup\",\"nurx\",\"nur\",\"hlit\",\"hlix\",\"hli\",\"hlip\",\"hliex\",\"hlie\",\"hliep\",\"hlat\",\"hlax\",\"hla\",\"hlap\",\"hluox\",\"hluo\",\"hluop\",\"hlox\",\"hlo\",\"hlop\",\"hlex\",\"hle\",\"hlep\",\"hlut\",\"hlux\",\"hlu\",\"hlup\",\"hlurx\",\"hlur\",\"hlyt\",\"hlyx\",\"hly\",\"hlyp\",\"hlyrx\",\"hlyr\",\"lit\",\"lix\",\"li\",\"lip\",\"liet\",\"liex\",\"lie\",\"liep\",\"lat\",\"lax\",\"la\",\"lap\",\"luot\",\"luox\",\"luo\",\"luop\",\"lot\",\"lox\",\"lo\",\"lop\",\"lex\",\"le\",\"lep\",\"lut\",\"lux\",\"lu\",\"lup\",\"lurx\",\"lur\",\"lyt\",\"lyx\",\"ly\",\"lyp\",\"lyrx\",\"lyr\",\"git\",\"gix\",\"gi\",\"gip\",\"giet\",\"giex\",\"gie\",\"giep\",\"gat\",\"gax\",\"ga\",\"gap\",\"guot\",\"guox\",\"guo\",\"guop\",\"got\",\"gox\",\"go\",\"gop\",\"get\",\"gex\",\"ge\",\"gep\",\"gut\",\"gux\",\"gu\",\"gup\",\"gurx\",\"gur\",\"kit\",\"kix\",\"ki\",\"kip\",\"kiex\",\"kie\",\"kiep\",\"kat\"],[\"kax\",\"ka\",\"kap\",\"kuox\",\"kuo\",\"kuop\",\"kot\",\"kox\",\"ko\",\"kop\",\"ket\",\"kex\",\"ke\",\"kep\",\"kut\",\"kux\",\"ku\",\"kup\",\"kurx\",\"kur\",\"ggit\",\"ggix\",\"ggi\",\"ggiex\",\"ggie\",\"ggiep\",\"ggat\",\"ggax\",\"gga\",\"ggap\",\"gguot\",\"gguox\",\"gguo\",\"gguop\",\"ggot\",\"ggox\",\"ggo\",\"ggop\",\"gget\",\"ggex\",\"gge\",\"ggep\",\"ggut\",\"ggux\",\"ggu\",\"ggup\",\"ggurx\",\"ggur\",\"mgiex\",\"mgie\",\"mgat\",\"mgax\",\"mga\",\"mgap\",\"mguox\",\"mguo\",\"mguop\",\"mgot\",\"mgox\",\"mgo\",\"mgop\",\"mgex\",\"mge\",\"mgep\",\"mgut\",\"mgux\",\"mgu\",\"mgup\",\"mgurx\",\"mgur\",\"hxit\",\"hxix\",\"hxi\",\"hxip\",\"hxiet\",\"hxiex\",\"hxie\",\"hxiep\",\"hxat\",\"hxax\",\"hxa\",\"hxap\",\"hxuot\",\"hxuox\",\"hxuo\",\"hxuop\",\"hxot\",\"hxox\",\"hxo\",\"hxop\",\"hxex\",\"hxe\",\"hxep\",\"ngiex\",\"ngie\",\"ngiep\",\"ngat\",\"ngax\",\"nga\",\"ngap\",\"nguot\",\"nguox\",\"nguo\",\"ngot\",\"ngox\",\"ngo\",\"ngop\",\"ngex\",\"nge\",\"ngep\",\"hit\",\"hiex\",\"hie\",\"hat\",\"hax\",\"ha\",\"hap\",\"huot\",\"huox\",\"huo\",\"huop\",\"hot\",\"hox\",\"ho\",\"hop\",\"hex\",\"he\",\"hep\",\"wat\",\"wax\",\"wa\",\"wap\",\"wuox\",\"wuo\",\"wuop\",\"wox\",\"wo\",\"wop\",\"wex\",\"we\",\"wep\",\"zit\",\"zix\",\"zi\",\"zip\",\"ziex\",\"zie\",\"ziep\",\"zat\",\"zax\",\"za\",\"zap\",\"zuox\",\"zuo\",\"zuop\",\"zot\",\"zox\",\"zo\",\"zop\",\"zex\",\"ze\",\"zep\",\"zut\",\"zux\",\"zu\",\"zup\",\"zurx\",\"zur\",\"zyt\",\"zyx\",\"zy\",\"zyp\",\"zyrx\",\"zyr\",\"cit\",\"cix\",\"ci\",\"cip\",\"ciet\",\"ciex\",\"cie\",\"ciep\",\"cat\",\"cax\",\"ca\",\"cap\",\"cuox\",\"cuo\",\"cuop\",\"cot\",\"cox\",\"co\",\"cop\",\"cex\",\"ce\",\"cep\",\"cut\",\"cux\",\"cu\",\"cup\",\"curx\",\"cur\",\"cyt\",\"cyx\",\"cy\",\"cyp\",\"cyrx\",\"cyr\",\"zzit\",\"zzix\",\"zzi\",\"zzip\",\"zziet\",\"zziex\",\"zzie\",\"zziep\",\"zzat\",\"zzax\",\"zza\",\"zzap\",\"zzox\",\"zzo\",\"zzop\",\"zzex\",\"zze\",\"zzep\",\"zzux\",\"zzu\",\"zzup\",\"zzurx\",\"zzur\",\"zzyt\",\"zzyx\",\"zzy\",\"zzyp\",\"zzyrx\",\"zzyr\",\"nzit\",\"nzix\",\"nzi\",\"nzip\",\"nziex\",\"nzie\",\"nziep\",\"nzat\",\"nzax\",\"nza\",\"nzap\",\"nzuox\",\"nzuo\",\"nzox\",\"nzop\",\"nzex\",\"nze\",\"nzux\",\"nzu\"],[\"nzup\",\"nzurx\",\"nzur\",\"nzyt\",\"nzyx\",\"nzy\",\"nzyp\",\"nzyrx\",\"nzyr\",\"sit\",\"six\",\"si\",\"sip\",\"siex\",\"sie\",\"siep\",\"sat\",\"sax\",\"sa\",\"sap\",\"suox\",\"suo\",\"suop\",\"sot\",\"sox\",\"so\",\"sop\",\"sex\",\"se\",\"sep\",\"sut\",\"sux\",\"su\",\"sup\",\"surx\",\"sur\",\"syt\",\"syx\",\"sy\",\"syp\",\"syrx\",\"syr\",\"ssit\",\"ssix\",\"ssi\",\"ssip\",\"ssiex\",\"ssie\",\"ssiep\",\"ssat\",\"ssax\",\"ssa\",\"ssap\",\"ssot\",\"ssox\",\"sso\",\"ssop\",\"ssex\",\"sse\",\"ssep\",\"ssut\",\"ssux\",\"ssu\",\"ssup\",\"ssyt\",\"ssyx\",\"ssy\",\"ssyp\",\"ssyrx\",\"ssyr\",\"zhat\",\"zhax\",\"zha\",\"zhap\",\"zhuox\",\"zhuo\",\"zhuop\",\"zhot\",\"zhox\",\"zho\",\"zhop\",\"zhet\",\"zhex\",\"zhe\",\"zhep\",\"zhut\",\"zhux\",\"zhu\",\"zhup\",\"zhurx\",\"zhur\",\"zhyt\",\"zhyx\",\"zhy\",\"zhyp\",\"zhyrx\",\"zhyr\",\"chat\",\"chax\",\"cha\",\"chap\",\"chuot\",\"chuox\",\"chuo\",\"chuop\",\"chot\",\"chox\",\"cho\",\"chop\",\"chet\",\"chex\",\"che\",\"chep\",\"chux\",\"chu\",\"chup\",\"churx\",\"chur\",\"chyt\",\"chyx\",\"chy\",\"chyp\",\"chyrx\",\"chyr\",\"rrax\",\"rra\",\"rruox\",\"rruo\",\"rrot\",\"rrox\",\"rro\",\"rrop\",\"rret\",\"rrex\",\"rre\",\"rrep\",\"rrut\",\"rrux\",\"rru\",\"rrup\",\"rrurx\",\"rrur\",\"rryt\",\"rryx\",\"rry\",\"rryp\",\"rryrx\",\"rryr\",\"nrat\",\"nrax\",\"nra\",\"nrap\",\"nrox\",\"nro\",\"nrop\",\"nret\",\"nrex\",\"nre\",\"nrep\",\"nrut\",\"nrux\",\"nru\",\"nrup\",\"nrurx\",\"nrur\",\"nryt\",\"nryx\",\"nry\",\"nryp\",\"nryrx\",\"nryr\",\"shat\",\"shax\",\"sha\",\"shap\",\"shuox\",\"shuo\",\"shuop\",\"shot\",\"shox\",\"sho\",\"shop\",\"shet\",\"shex\",\"she\",\"shep\",\"shut\",\"shux\",\"shu\",\"shup\",\"shurx\",\"shur\",\"shyt\",\"shyx\",\"shy\",\"shyp\",\"shyrx\",\"shyr\",\"rat\",\"rax\",\"ra\",\"rap\",\"ruox\",\"ruo\",\"ruop\",\"rot\",\"rox\",\"ro\",\"rop\",\"rex\",\"re\",\"rep\",\"rut\",\"rux\",\"ru\",\"rup\",\"rurx\",\"rur\",\"ryt\",\"ryx\",\"ry\",\"ryp\",\"ryrx\",\"ryr\",\"jit\",\"jix\",\"ji\",\"jip\",\"jiet\",\"jiex\",\"jie\",\"jiep\",\"juot\",\"juox\",\"juo\",\"juop\",\"jot\",\"jox\",\"jo\",\"jop\",\"jut\",\"jux\",\"ju\",\"jup\",\"jurx\",\"jur\",\"jyt\",\"jyx\",\"jy\",\"jyp\",\"jyrx\",\"jyr\",\"qit\",\"qix\",\"qi\",\"qip\"],[\"qiet\",\"qiex\",\"qie\",\"qiep\",\"quot\",\"quox\",\"quo\",\"quop\",\"qot\",\"qox\",\"qo\",\"qop\",\"qut\",\"qux\",\"qu\",\"qup\",\"qurx\",\"qur\",\"qyt\",\"qyx\",\"qy\",\"qyp\",\"qyrx\",\"qyr\",\"jjit\",\"jjix\",\"jji\",\"jjip\",\"jjiet\",\"jjiex\",\"jjie\",\"jjiep\",\"jjuox\",\"jjuo\",\"jjuop\",\"jjot\",\"jjox\",\"jjo\",\"jjop\",\"jjut\",\"jjux\",\"jju\",\"jjup\",\"jjurx\",\"jjur\",\"jjyt\",\"jjyx\",\"jjy\",\"jjyp\",\"njit\",\"njix\",\"nji\",\"njip\",\"njiet\",\"njiex\",\"njie\",\"njiep\",\"njuox\",\"njuo\",\"njot\",\"njox\",\"njo\",\"njop\",\"njux\",\"nju\",\"njup\",\"njurx\",\"njur\",\"njyt\",\"njyx\",\"njy\",\"njyp\",\"njyrx\",\"njyr\",\"nyit\",\"nyix\",\"nyi\",\"nyip\",\"nyiet\",\"nyiex\",\"nyie\",\"nyiep\",\"nyuox\",\"nyuo\",\"nyuop\",\"nyot\",\"nyox\",\"nyo\",\"nyop\",\"nyut\",\"nyux\",\"nyu\",\"nyup\",\"xit\",\"xix\",\"xi\",\"xip\",\"xiet\",\"xiex\",\"xie\",\"xiep\",\"xuox\",\"xuo\",\"xot\",\"xox\",\"xo\",\"xop\",\"xyt\",\"xyx\",\"xy\",\"xyp\",\"xyrx\",\"xyr\",\"yit\",\"yix\",\"yi\",\"yip\",\"yiet\",\"yiex\",\"yie\",\"yiep\",\"yuot\",\"yuox\",\"yuo\",\"yuop\",\"yot\",\"yox\",\"yo\",\"yop\",\"yut\",\"yux\",\"yu\",\"yup\",\"yurx\",\"yur\",\"yyt\",\"yyx\",\"yy\",\"yyp\",\"yyrx\",\"yyr\",,,,\"Qot\",\"Li\",\"Kit\",\"Nyip\",\"Cyp\",\"Ssi\",\"Ggop\",\"Gep\",\"Mi\",\"Hxit\",\"Lyr\",\"Bbut\",\"Mop\",\"Yo\",\"Put\",\"Hxuo\",\"Tat\",\"Ga\",,,\"Ddur\",\"Bur\",\"Gguo\",\"Nyop\",\"Tu\",\"Op\",\"Jjut\",\"Zot\",\"Pyt\",\"Hmo\",\"Yit\",\"Vur\",\"Shy\",\"Vep\",\"Za\",\"Jo\",,\"Jjy\",\"Got\",\"Jjie\",\"Wo\",\"Du\",\"Shur\",\"Lie\",\"Cy\",\"Cuop\",\"Cip\",\"Hxop\",\"Shat\",,\"Shop\",\"Che\",\"Zziet\",,\"Ke\"],[],[],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"A\",\"a\",\"A\",\"a\",\"HENG\",\"heng\",\"TZ\",\"tz\",\"3\",\"3\",\"4\",\"4\",\"4\",\"4\",\"F\",\"S\",\"AA\",\"aa\",\"AO\",\"ao\",\"AU\",\"au\",\"AV\",\"av\",\"AV-\",\"av-\",\"AY\",\"ay\",\"C\",\"c\",\"K\",\"k\",\"K\",\"k\",\"K\",\"k\",\"L\",\"l\",\"L\",\"l\",\"O\",\"o\",\"O\",\"o\",\"OO\",\"oo\",\"P\",\"p\",\"P\",\"p\",\"P\",\"p\",\"Q\",\"q\",\"Q\",\"q\",\"R\",\"r\",\"R\",\"r\",\"V\",\"v\",\"VY\",\"vy\",\"Z\",\"z\",\"TH\",\"th\",\"TH\",\"th\",\"Y\",\"y\",\"ET\",\"et\",\"IS\",\"is\",\"CON\",\"con\",\"US\",\"us\",\"dum\",\"lum\",\"num\",\"rum\",\"RUM\",\"tum\",\"um\",\"D\",\"d\",\"F\",\"f\",\"G\",\"G\",\"g\",\"L\",\"l\",\"R\",\"r\",\"S\",\"s\",\"T\",\"t\",\"^\",\":\",\"=\",\"'\",\"'\",\"H\",\"l\",\".\",\"N\",\"n\",\"C\",\"c\",\"c\",\"h\",\"B\",\"b\",\"F\",\"f\",\"AE\",\"ae\",\"OE\",\"oe\",\"UE\",\"ue\",\"G\",\"g\",\"K\",\"k\",\"N\",\"n\",\"R\",\"r\",\"S\",\"s\",\"H\",\"E\",\"G\",\"L\",\"I\",\"Q\",\"K\",\"T\",\"J\",\"CHI\",\"B\",\"b\",\"O\",\"o\",\"U\",\"u\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"I\",\"H\",\"oe\",\"M\",\"F\",\"P\",\"M\",\"I\",\"M1\"],[],[],[],[],[\"ga\",\"gag\",\"gagg\",\"gags\",\"gan\",\"ganj\",\"ganh\",\"gad\",\"gal\",\"galg\",\"galm\",\"galb\",\"gals\",\"galt\",\"galp\",\"galh\",\"gam\",\"gab\",\"gabs\",\"gas\",\"gass\",\"gang\",\"gaj\",\"gac\",\"gak\",\"gat\",\"gap\",\"gah\",\"gae\",\"gaeg\",\"gaegg\",\"gaegs\",\"gaen\",\"gaenj\",\"gaenh\",\"gaed\",\"gael\",\"gaelg\",\"gaelm\",\"gaelb\",\"gaels\",\"gaelt\",\"gaelp\",\"gaelh\",\"gaem\",\"gaeb\",\"gaebs\",\"gaes\",\"gaess\",\"gaeng\",\"gaej\",\"gaec\",\"gaek\",\"gaet\",\"gaep\",\"gaeh\",\"gya\",\"gyag\",\"gyagg\",\"gyags\",\"gyan\",\"gyanj\",\"gyanh\",\"gyad\",\"gyal\",\"gyalg\",\"gyalm\",\"gyalb\",\"gyals\",\"gyalt\",\"gyalp\",\"gyalh\",\"gyam\",\"gyab\",\"gyabs\",\"gyas\",\"gyass\",\"gyang\",\"gyaj\",\"gyac\",\"gyak\",\"gyat\",\"gyap\",\"gyah\",\"gyae\",\"gyaeg\",\"gyaegg\",\"gyaegs\",\"gyaen\",\"gyaenj\",\"gyaenh\",\"gyaed\",\"gyael\",\"gyaelg\",\"gyaelm\",\"gyaelb\",\"gyaels\",\"gyaelt\",\"gyaelp\",\"gyaelh\",\"gyaem\",\"gyaeb\",\"gyaebs\",\"gyaes\",\"gyaess\",\"gyaeng\",\"gyaej\",\"gyaec\",\"gyaek\",\"gyaet\",\"gyaep\",\"gyaeh\",\"geo\",\"geog\",\"geogg\",\"geogs\",\"geon\",\"geonj\",\"geonh\",\"geod\",\"geol\",\"geolg\",\"geolm\",\"geolb\",\"geols\",\"geolt\",\"geolp\",\"geolh\",\"geom\",\"geob\",\"geobs\",\"geos\",\"geoss\",\"geong\",\"geoj\",\"geoc\",\"geok\",\"geot\",\"geop\",\"geoh\",\"ge\",\"geg\",\"gegg\",\"gegs\",\"gen\",\"genj\",\"genh\",\"ged\",\"gel\",\"gelg\",\"gelm\",\"gelb\",\"gels\",\"gelt\",\"gelp\",\"gelh\",\"gem\",\"geb\",\"gebs\",\"ges\",\"gess\",\"geng\",\"gej\",\"gec\",\"gek\",\"get\",\"gep\",\"geh\",\"gyeo\",\"gyeog\",\"gyeogg\",\"gyeogs\",\"gyeon\",\"gyeonj\",\"gyeonh\",\"gyeod\",\"gyeol\",\"gyeolg\",\"gyeolm\",\"gyeolb\",\"gyeols\",\"gyeolt\",\"gyeolp\",\"gyeolh\",\"gyeom\",\"gyeob\",\"gyeobs\",\"gyeos\",\"gyeoss\",\"gyeong\",\"gyeoj\",\"gyeoc\",\"gyeok\",\"gyeot\",\"gyeop\",\"gyeoh\",\"gye\",\"gyeg\",\"gyegg\",\"gyegs\",\"gyen\",\"gyenj\",\"gyenh\",\"gyed\",\"gyel\",\"gyelg\",\"gyelm\",\"gyelb\",\"gyels\",\"gyelt\",\"gyelp\",\"gyelh\",\"gyem\",\"gyeb\",\"gyebs\",\"gyes\",\"gyess\",\"gyeng\",\"gyej\",\"gyec\",\"gyek\",\"gyet\",\"gyep\",\"gyeh\",\"go\",\"gog\",\"gogg\",\"gogs\",\"gon\",\"gonj\",\"gonh\",\"god\",\"gol\",\"golg\",\"golm\",\"golb\",\"gols\",\"golt\",\"golp\",\"golh\",\"gom\",\"gob\",\"gobs\",\"gos\",\"goss\",\"gong\",\"goj\",\"goc\",\"gok\",\"got\",\"gop\",\"goh\",\"gwa\",\"gwag\",\"gwagg\",\"gwags\"],[\"gwan\",\"gwanj\",\"gwanh\",\"gwad\",\"gwal\",\"gwalg\",\"gwalm\",\"gwalb\",\"gwals\",\"gwalt\",\"gwalp\",\"gwalh\",\"gwam\",\"gwab\",\"gwabs\",\"gwas\",\"gwass\",\"gwang\",\"gwaj\",\"gwac\",\"gwak\",\"gwat\",\"gwap\",\"gwah\",\"gwae\",\"gwaeg\",\"gwaegg\",\"gwaegs\",\"gwaen\",\"gwaenj\",\"gwaenh\",\"gwaed\",\"gwael\",\"gwaelg\",\"gwaelm\",\"gwaelb\",\"gwaels\",\"gwaelt\",\"gwaelp\",\"gwaelh\",\"gwaem\",\"gwaeb\",\"gwaebs\",\"gwaes\",\"gwaess\",\"gwaeng\",\"gwaej\",\"gwaec\",\"gwaek\",\"gwaet\",\"gwaep\",\"gwaeh\",\"goe\",\"goeg\",\"goegg\",\"goegs\",\"goen\",\"goenj\",\"goenh\",\"goed\",\"goel\",\"goelg\",\"goelm\",\"goelb\",\"goels\",\"goelt\",\"goelp\",\"goelh\",\"goem\",\"goeb\",\"goebs\",\"goes\",\"goess\",\"goeng\",\"goej\",\"goec\",\"goek\",\"goet\",\"goep\",\"goeh\",\"gyo\",\"gyog\",\"gyogg\",\"gyogs\",\"gyon\",\"gyonj\",\"gyonh\",\"gyod\",\"gyol\",\"gyolg\",\"gyolm\",\"gyolb\",\"gyols\",\"gyolt\",\"gyolp\",\"gyolh\",\"gyom\",\"gyob\",\"gyobs\",\"gyos\",\"gyoss\",\"gyong\",\"gyoj\",\"gyoc\",\"gyok\",\"gyot\",\"gyop\",\"gyoh\",\"gu\",\"gug\",\"gugg\",\"gugs\",\"gun\",\"gunj\",\"gunh\",\"gud\",\"gul\",\"gulg\",\"gulm\",\"gulb\",\"guls\",\"gult\",\"gulp\",\"gulh\",\"gum\",\"gub\",\"gubs\",\"gus\",\"guss\",\"gung\",\"guj\",\"guc\",\"guk\",\"gut\",\"gup\",\"guh\",\"gweo\",\"gweog\",\"gweogg\",\"gweogs\",\"gweon\",\"gweonj\",\"gweonh\",\"gweod\",\"gweol\",\"gweolg\",\"gweolm\",\"gweolb\",\"gweols\",\"gweolt\",\"gweolp\",\"gweolh\",\"gweom\",\"gweob\",\"gweobs\",\"gweos\",\"gweoss\",\"gweong\",\"gweoj\",\"gweoc\",\"gweok\",\"gweot\",\"gweop\",\"gweoh\",\"gwe\",\"gweg\",\"gwegg\",\"gwegs\",\"gwen\",\"gwenj\",\"gwenh\",\"gwed\",\"gwel\",\"gwelg\",\"gwelm\",\"gwelb\",\"gwels\",\"gwelt\",\"gwelp\",\"gwelh\",\"gwem\",\"gweb\",\"gwebs\",\"gwes\",\"gwess\",\"gweng\",\"gwej\",\"gwec\",\"gwek\",\"gwet\",\"gwep\",\"gweh\",\"gwi\",\"gwig\",\"gwigg\",\"gwigs\",\"gwin\",\"gwinj\",\"gwinh\",\"gwid\",\"gwil\",\"gwilg\",\"gwilm\",\"gwilb\",\"gwils\",\"gwilt\",\"gwilp\",\"gwilh\",\"gwim\",\"gwib\",\"gwibs\",\"gwis\",\"gwiss\",\"gwing\",\"gwij\",\"gwic\",\"gwik\",\"gwit\",\"gwip\",\"gwih\",\"gyu\",\"gyug\",\"gyugg\",\"gyugs\",\"gyun\",\"gyunj\",\"gyunh\",\"gyud\",\"gyul\",\"gyulg\",\"gyulm\",\"gyulb\",\"gyuls\",\"gyult\",\"gyulp\",\"gyulh\",\"gyum\",\"gyub\",\"gyubs\",\"gyus\",\"gyuss\",\"gyung\",\"gyuj\",\"gyuc\",\"gyuk\",\"gyut\",\"gyup\",\"gyuh\",\"geu\",\"geug\",\"geugg\",\"geugs\",\"geun\",\"geunj\",\"geunh\",\"geud\"],[\"geul\",\"geulg\",\"geulm\",\"geulb\",\"geuls\",\"geult\",\"geulp\",\"geulh\",\"geum\",\"geub\",\"geubs\",\"geus\",\"geuss\",\"geung\",\"geuj\",\"geuc\",\"geuk\",\"geut\",\"geup\",\"geuh\",\"gyi\",\"gyig\",\"gyigg\",\"gyigs\",\"gyin\",\"gyinj\",\"gyinh\",\"gyid\",\"gyil\",\"gyilg\",\"gyilm\",\"gyilb\",\"gyils\",\"gyilt\",\"gyilp\",\"gyilh\",\"gyim\",\"gyib\",\"gyibs\",\"gyis\",\"gyiss\",\"gying\",\"gyij\",\"gyic\",\"gyik\",\"gyit\",\"gyip\",\"gyih\",\"gi\",\"gig\",\"gigg\",\"gigs\",\"gin\",\"ginj\",\"ginh\",\"gid\",\"gil\",\"gilg\",\"gilm\",\"gilb\",\"gils\",\"gilt\",\"gilp\",\"gilh\",\"gim\",\"gib\",\"gibs\",\"gis\",\"giss\",\"ging\",\"gij\",\"gic\",\"gik\",\"git\",\"gip\",\"gih\",\"gga\",\"ggag\",\"ggagg\",\"ggags\",\"ggan\",\"gganj\",\"gganh\",\"ggad\",\"ggal\",\"ggalg\",\"ggalm\",\"ggalb\",\"ggals\",\"ggalt\",\"ggalp\",\"ggalh\",\"ggam\",\"ggab\",\"ggabs\",\"ggas\",\"ggass\",\"ggang\",\"ggaj\",\"ggac\",\"ggak\",\"ggat\",\"ggap\",\"ggah\",\"ggae\",\"ggaeg\",\"ggaegg\",\"ggaegs\",\"ggaen\",\"ggaenj\",\"ggaenh\",\"ggaed\",\"ggael\",\"ggaelg\",\"ggaelm\",\"ggaelb\",\"ggaels\",\"ggaelt\",\"ggaelp\",\"ggaelh\",\"ggaem\",\"ggaeb\",\"ggaebs\",\"ggaes\",\"ggaess\",\"ggaeng\",\"ggaej\",\"ggaec\",\"ggaek\",\"ggaet\",\"ggaep\",\"ggaeh\",\"ggya\",\"ggyag\",\"ggyagg\",\"ggyags\",\"ggyan\",\"ggyanj\",\"ggyanh\",\"ggyad\",\"ggyal\",\"ggyalg\",\"ggyalm\",\"ggyalb\",\"ggyals\",\"ggyalt\",\"ggyalp\",\"ggyalh\",\"ggyam\",\"ggyab\",\"ggyabs\",\"ggyas\",\"ggyass\",\"ggyang\",\"ggyaj\",\"ggyac\",\"ggyak\",\"ggyat\",\"ggyap\",\"ggyah\",\"ggyae\",\"ggyaeg\",\"ggyaegg\",\"ggyaegs\",\"ggyaen\",\"ggyaenj\",\"ggyaenh\",\"ggyaed\",\"ggyael\",\"ggyaelg\",\"ggyaelm\",\"ggyaelb\",\"ggyaels\",\"ggyaelt\",\"ggyaelp\",\"ggyaelh\",\"ggyaem\",\"ggyaeb\",\"ggyaebs\",\"ggyaes\",\"ggyaess\",\"ggyaeng\",\"ggyaej\",\"ggyaec\",\"ggyaek\",\"ggyaet\",\"ggyaep\",\"ggyaeh\",\"ggeo\",\"ggeog\",\"ggeogg\",\"ggeogs\",\"ggeon\",\"ggeonj\",\"ggeonh\",\"ggeod\",\"ggeol\",\"ggeolg\",\"ggeolm\",\"ggeolb\",\"ggeols\",\"ggeolt\",\"ggeolp\",\"ggeolh\",\"ggeom\",\"ggeob\",\"ggeobs\",\"ggeos\",\"ggeoss\",\"ggeong\",\"ggeoj\",\"ggeoc\",\"ggeok\",\"ggeot\",\"ggeop\",\"ggeoh\",\"gge\",\"ggeg\",\"ggegg\",\"ggegs\",\"ggen\",\"ggenj\",\"ggenh\",\"gged\",\"ggel\",\"ggelg\",\"ggelm\",\"ggelb\",\"ggels\",\"ggelt\",\"ggelp\",\"ggelh\",\"ggem\",\"ggeb\",\"ggebs\",\"gges\",\"ggess\",\"ggeng\",\"ggej\",\"ggec\",\"ggek\",\"gget\",\"ggep\",\"ggeh\",\"ggyeo\",\"ggyeog\",\"ggyeogg\",\"ggyeogs\",\"ggyeon\",\"ggyeonj\",\"ggyeonh\",\"ggyeod\",\"ggyeol\",\"ggyeolg\",\"ggyeolm\",\"ggyeolb\"],[\"ggyeols\",\"ggyeolt\",\"ggyeolp\",\"ggyeolh\",\"ggyeom\",\"ggyeob\",\"ggyeobs\",\"ggyeos\",\"ggyeoss\",\"ggyeong\",\"ggyeoj\",\"ggyeoc\",\"ggyeok\",\"ggyeot\",\"ggyeop\",\"ggyeoh\",\"ggye\",\"ggyeg\",\"ggyegg\",\"ggyegs\",\"ggyen\",\"ggyenj\",\"ggyenh\",\"ggyed\",\"ggyel\",\"ggyelg\",\"ggyelm\",\"ggyelb\",\"ggyels\",\"ggyelt\",\"ggyelp\",\"ggyelh\",\"ggyem\",\"ggyeb\",\"ggyebs\",\"ggyes\",\"ggyess\",\"ggyeng\",\"ggyej\",\"ggyec\",\"ggyek\",\"ggyet\",\"ggyep\",\"ggyeh\",\"ggo\",\"ggog\",\"ggogg\",\"ggogs\",\"ggon\",\"ggonj\",\"ggonh\",\"ggod\",\"ggol\",\"ggolg\",\"ggolm\",\"ggolb\",\"ggols\",\"ggolt\",\"ggolp\",\"ggolh\",\"ggom\",\"ggob\",\"ggobs\",\"ggos\",\"ggoss\",\"ggong\",\"ggoj\",\"ggoc\",\"ggok\",\"ggot\",\"ggop\",\"ggoh\",\"ggwa\",\"ggwag\",\"ggwagg\",\"ggwags\",\"ggwan\",\"ggwanj\",\"ggwanh\",\"ggwad\",\"ggwal\",\"ggwalg\",\"ggwalm\",\"ggwalb\",\"ggwals\",\"ggwalt\",\"ggwalp\",\"ggwalh\",\"ggwam\",\"ggwab\",\"ggwabs\",\"ggwas\",\"ggwass\",\"ggwang\",\"ggwaj\",\"ggwac\",\"ggwak\",\"ggwat\",\"ggwap\",\"ggwah\",\"ggwae\",\"ggwaeg\",\"ggwaegg\",\"ggwaegs\",\"ggwaen\",\"ggwaenj\",\"ggwaenh\",\"ggwaed\",\"ggwael\",\"ggwaelg\",\"ggwaelm\",\"ggwaelb\",\"ggwaels\",\"ggwaelt\",\"ggwaelp\",\"ggwaelh\",\"ggwaem\",\"ggwaeb\",\"ggwaebs\",\"ggwaes\",\"ggwaess\",\"ggwaeng\",\"ggwaej\",\"ggwaec\",\"ggwaek\",\"ggwaet\",\"ggwaep\",\"ggwaeh\",\"ggoe\",\"ggoeg\",\"ggoegg\",\"ggoegs\",\"ggoen\",\"ggoenj\",\"ggoenh\",\"ggoed\",\"ggoel\",\"ggoelg\",\"ggoelm\",\"ggoelb\",\"ggoels\",\"ggoelt\",\"ggoelp\",\"ggoelh\",\"ggoem\",\"ggoeb\",\"ggoebs\",\"ggoes\",\"ggoess\",\"ggoeng\",\"ggoej\",\"ggoec\",\"ggoek\",\"ggoet\",\"ggoep\",\"ggoeh\",\"ggyo\",\"ggyog\",\"ggyogg\",\"ggyogs\",\"ggyon\",\"ggyonj\",\"ggyonh\",\"ggyod\",\"ggyol\",\"ggyolg\",\"ggyolm\",\"ggyolb\",\"ggyols\",\"ggyolt\",\"ggyolp\",\"ggyolh\",\"ggyom\",\"ggyob\",\"ggyobs\",\"ggyos\",\"ggyoss\",\"ggyong\",\"ggyoj\",\"ggyoc\",\"ggyok\",\"ggyot\",\"ggyop\",\"ggyoh\",\"ggu\",\"ggug\",\"ggugg\",\"ggugs\",\"ggun\",\"ggunj\",\"ggunh\",\"ggud\",\"ggul\",\"ggulg\",\"ggulm\",\"ggulb\",\"gguls\",\"ggult\",\"ggulp\",\"ggulh\",\"ggum\",\"ggub\",\"ggubs\",\"ggus\",\"gguss\",\"ggung\",\"gguj\",\"gguc\",\"gguk\",\"ggut\",\"ggup\",\"gguh\",\"ggweo\",\"ggweog\",\"ggweogg\",\"ggweogs\",\"ggweon\",\"ggweonj\",\"ggweonh\",\"ggweod\",\"ggweol\",\"ggweolg\",\"ggweolm\",\"ggweolb\",\"ggweols\",\"ggweolt\",\"ggweolp\",\"ggweolh\",\"ggweom\",\"ggweob\",\"ggweobs\",\"ggweos\",\"ggweoss\",\"ggweong\",\"ggweoj\",\"ggweoc\",\"ggweok\",\"ggweot\",\"ggweop\",\"ggweoh\",\"ggwe\",\"ggweg\",\"ggwegg\",\"ggwegs\",\"ggwen\",\"ggwenj\",\"ggwenh\",\"ggwed\",\"ggwel\",\"ggwelg\",\"ggwelm\",\"ggwelb\",\"ggwels\",\"ggwelt\",\"ggwelp\",\"ggwelh\"],[\"ggwem\",\"ggweb\",\"ggwebs\",\"ggwes\",\"ggwess\",\"ggweng\",\"ggwej\",\"ggwec\",\"ggwek\",\"ggwet\",\"ggwep\",\"ggweh\",\"ggwi\",\"ggwig\",\"ggwigg\",\"ggwigs\",\"ggwin\",\"ggwinj\",\"ggwinh\",\"ggwid\",\"ggwil\",\"ggwilg\",\"ggwilm\",\"ggwilb\",\"ggwils\",\"ggwilt\",\"ggwilp\",\"ggwilh\",\"ggwim\",\"ggwib\",\"ggwibs\",\"ggwis\",\"ggwiss\",\"ggwing\",\"ggwij\",\"ggwic\",\"ggwik\",\"ggwit\",\"ggwip\",\"ggwih\",\"ggyu\",\"ggyug\",\"ggyugg\",\"ggyugs\",\"ggyun\",\"ggyunj\",\"ggyunh\",\"ggyud\",\"ggyul\",\"ggyulg\",\"ggyulm\",\"ggyulb\",\"ggyuls\",\"ggyult\",\"ggyulp\",\"ggyulh\",\"ggyum\",\"ggyub\",\"ggyubs\",\"ggyus\",\"ggyuss\",\"ggyung\",\"ggyuj\",\"ggyuc\",\"ggyuk\",\"ggyut\",\"ggyup\",\"ggyuh\",\"ggeu\",\"ggeug\",\"ggeugg\",\"ggeugs\",\"ggeun\",\"ggeunj\",\"ggeunh\",\"ggeud\",\"ggeul\",\"ggeulg\",\"ggeulm\",\"ggeulb\",\"ggeuls\",\"ggeult\",\"ggeulp\",\"ggeulh\",\"ggeum\",\"ggeub\",\"ggeubs\",\"ggeus\",\"ggeuss\",\"ggeung\",\"ggeuj\",\"ggeuc\",\"ggeuk\",\"ggeut\",\"ggeup\",\"ggeuh\",\"ggyi\",\"ggyig\",\"ggyigg\",\"ggyigs\",\"ggyin\",\"ggyinj\",\"ggyinh\",\"ggyid\",\"ggyil\",\"ggyilg\",\"ggyilm\",\"ggyilb\",\"ggyils\",\"ggyilt\",\"ggyilp\",\"ggyilh\",\"ggyim\",\"ggyib\",\"ggyibs\",\"ggyis\",\"ggyiss\",\"ggying\",\"ggyij\",\"ggyic\",\"ggyik\",\"ggyit\",\"ggyip\",\"ggyih\",\"ggi\",\"ggig\",\"ggigg\",\"ggigs\",\"ggin\",\"gginj\",\"gginh\",\"ggid\",\"ggil\",\"ggilg\",\"ggilm\",\"ggilb\",\"ggils\",\"ggilt\",\"ggilp\",\"ggilh\",\"ggim\",\"ggib\",\"ggibs\",\"ggis\",\"ggiss\",\"gging\",\"ggij\",\"ggic\",\"ggik\",\"ggit\",\"ggip\",\"ggih\",\"na\",\"nag\",\"nagg\",\"nags\",\"nan\",\"nanj\",\"nanh\",\"nad\",\"nal\",\"nalg\",\"nalm\",\"nalb\",\"nals\",\"nalt\",\"nalp\",\"nalh\",\"nam\",\"nab\",\"nabs\",\"nas\",\"nass\",\"nang\",\"naj\",\"nac\",\"nak\",\"nat\",\"nap\",\"nah\",\"nae\",\"naeg\",\"naegg\",\"naegs\",\"naen\",\"naenj\",\"naenh\",\"naed\",\"nael\",\"naelg\",\"naelm\",\"naelb\",\"naels\",\"naelt\",\"naelp\",\"naelh\",\"naem\",\"naeb\",\"naebs\",\"naes\",\"naess\",\"naeng\",\"naej\",\"naec\",\"naek\",\"naet\",\"naep\",\"naeh\",\"nya\",\"nyag\",\"nyagg\",\"nyags\",\"nyan\",\"nyanj\",\"nyanh\",\"nyad\",\"nyal\",\"nyalg\",\"nyalm\",\"nyalb\",\"nyals\",\"nyalt\",\"nyalp\",\"nyalh\",\"nyam\",\"nyab\",\"nyabs\",\"nyas\",\"nyass\",\"nyang\",\"nyaj\",\"nyac\",\"nyak\",\"nyat\",\"nyap\",\"nyah\",\"nyae\",\"nyaeg\",\"nyaegg\",\"nyaegs\",\"nyaen\",\"nyaenj\",\"nyaenh\",\"nyaed\",\"nyael\",\"nyaelg\",\"nyaelm\",\"nyaelb\",\"nyaels\",\"nyaelt\",\"nyaelp\",\"nyaelh\",\"nyaem\",\"nyaeb\",\"nyaebs\",\"nyaes\"],[\"nyaess\",\"nyaeng\",\"nyaej\",\"nyaec\",\"nyaek\",\"nyaet\",\"nyaep\",\"nyaeh\",\"neo\",\"neog\",\"neogg\",\"neogs\",\"neon\",\"neonj\",\"neonh\",\"neod\",\"neol\",\"neolg\",\"neolm\",\"neolb\",\"neols\",\"neolt\",\"neolp\",\"neolh\",\"neom\",\"neob\",\"neobs\",\"neos\",\"neoss\",\"neong\",\"neoj\",\"neoc\",\"neok\",\"neot\",\"neop\",\"neoh\",\"ne\",\"neg\",\"negg\",\"negs\",\"nen\",\"nenj\",\"nenh\",\"ned\",\"nel\",\"nelg\",\"nelm\",\"nelb\",\"nels\",\"nelt\",\"nelp\",\"nelh\",\"nem\",\"neb\",\"nebs\",\"nes\",\"ness\",\"neng\",\"nej\",\"nec\",\"nek\",\"net\",\"nep\",\"neh\",\"nyeo\",\"nyeog\",\"nyeogg\",\"nyeogs\",\"nyeon\",\"nyeonj\",\"nyeonh\",\"nyeod\",\"nyeol\",\"nyeolg\",\"nyeolm\",\"nyeolb\",\"nyeols\",\"nyeolt\",\"nyeolp\",\"nyeolh\",\"nyeom\",\"nyeob\",\"nyeobs\",\"nyeos\",\"nyeoss\",\"nyeong\",\"nyeoj\",\"nyeoc\",\"nyeok\",\"nyeot\",\"nyeop\",\"nyeoh\",\"nye\",\"nyeg\",\"nyegg\",\"nyegs\",\"nyen\",\"nyenj\",\"nyenh\",\"nyed\",\"nyel\",\"nyelg\",\"nyelm\",\"nyelb\",\"nyels\",\"nyelt\",\"nyelp\",\"nyelh\",\"nyem\",\"nyeb\",\"nyebs\",\"nyes\",\"nyess\",\"nyeng\",\"nyej\",\"nyec\",\"nyek\",\"nyet\",\"nyep\",\"nyeh\",\"no\",\"nog\",\"nogg\",\"nogs\",\"non\",\"nonj\",\"nonh\",\"nod\",\"nol\",\"nolg\",\"nolm\",\"nolb\",\"nols\",\"nolt\",\"nolp\",\"nolh\",\"nom\",\"nob\",\"nobs\",\"nos\",\"noss\",\"nong\",\"noj\",\"noc\",\"nok\",\"not\",\"nop\",\"noh\",\"nwa\",\"nwag\",\"nwagg\",\"nwags\",\"nwan\",\"nwanj\",\"nwanh\",\"nwad\",\"nwal\",\"nwalg\",\"nwalm\",\"nwalb\",\"nwals\",\"nwalt\",\"nwalp\",\"nwalh\",\"nwam\",\"nwab\",\"nwabs\",\"nwas\",\"nwass\",\"nwang\",\"nwaj\",\"nwac\",\"nwak\",\"nwat\",\"nwap\",\"nwah\",\"nwae\",\"nwaeg\",\"nwaegg\",\"nwaegs\",\"nwaen\",\"nwaenj\",\"nwaenh\",\"nwaed\",\"nwael\",\"nwaelg\",\"nwaelm\",\"nwaelb\",\"nwaels\",\"nwaelt\",\"nwaelp\",\"nwaelh\",\"nwaem\",\"nwaeb\",\"nwaebs\",\"nwaes\",\"nwaess\",\"nwaeng\",\"nwaej\",\"nwaec\",\"nwaek\",\"nwaet\",\"nwaep\",\"nwaeh\",\"noe\",\"noeg\",\"noegg\",\"noegs\",\"noen\",\"noenj\",\"noenh\",\"noed\",\"noel\",\"noelg\",\"noelm\",\"noelb\",\"noels\",\"noelt\",\"noelp\",\"noelh\",\"noem\",\"noeb\",\"noebs\",\"noes\",\"noess\",\"noeng\",\"noej\",\"noec\",\"noek\",\"noet\",\"noep\",\"noeh\",\"nyo\",\"nyog\",\"nyogg\",\"nyogs\",\"nyon\",\"nyonj\",\"nyonh\",\"nyod\",\"nyol\",\"nyolg\",\"nyolm\",\"nyolb\",\"nyols\",\"nyolt\",\"nyolp\",\"nyolh\",\"nyom\",\"nyob\",\"nyobs\",\"nyos\",\"nyoss\",\"nyong\",\"nyoj\",\"nyoc\"],[\"nyok\",\"nyot\",\"nyop\",\"nyoh\",\"nu\",\"nug\",\"nugg\",\"nugs\",\"nun\",\"nunj\",\"nunh\",\"nud\",\"nul\",\"nulg\",\"nulm\",\"nulb\",\"nuls\",\"nult\",\"nulp\",\"nulh\",\"num\",\"nub\",\"nubs\",\"nus\",\"nuss\",\"nung\",\"nuj\",\"nuc\",\"nuk\",\"nut\",\"nup\",\"nuh\",\"nweo\",\"nweog\",\"nweogg\",\"nweogs\",\"nweon\",\"nweonj\",\"nweonh\",\"nweod\",\"nweol\",\"nweolg\",\"nweolm\",\"nweolb\",\"nweols\",\"nweolt\",\"nweolp\",\"nweolh\",\"nweom\",\"nweob\",\"nweobs\",\"nweos\",\"nweoss\",\"nweong\",\"nweoj\",\"nweoc\",\"nweok\",\"nweot\",\"nweop\",\"nweoh\",\"nwe\",\"nweg\",\"nwegg\",\"nwegs\",\"nwen\",\"nwenj\",\"nwenh\",\"nwed\",\"nwel\",\"nwelg\",\"nwelm\",\"nwelb\",\"nwels\",\"nwelt\",\"nwelp\",\"nwelh\",\"nwem\",\"nweb\",\"nwebs\",\"nwes\",\"nwess\",\"nweng\",\"nwej\",\"nwec\",\"nwek\",\"nwet\",\"nwep\",\"nweh\",\"nwi\",\"nwig\",\"nwigg\",\"nwigs\",\"nwin\",\"nwinj\",\"nwinh\",\"nwid\",\"nwil\",\"nwilg\",\"nwilm\",\"nwilb\",\"nwils\",\"nwilt\",\"nwilp\",\"nwilh\",\"nwim\",\"nwib\",\"nwibs\",\"nwis\",\"nwiss\",\"nwing\",\"nwij\",\"nwic\",\"nwik\",\"nwit\",\"nwip\",\"nwih\",\"nyu\",\"nyug\",\"nyugg\",\"nyugs\",\"nyun\",\"nyunj\",\"nyunh\",\"nyud\",\"nyul\",\"nyulg\",\"nyulm\",\"nyulb\",\"nyuls\",\"nyult\",\"nyulp\",\"nyulh\",\"nyum\",\"nyub\",\"nyubs\",\"nyus\",\"nyuss\",\"nyung\",\"nyuj\",\"nyuc\",\"nyuk\",\"nyut\",\"nyup\",\"nyuh\",\"neu\",\"neug\",\"neugg\",\"neugs\",\"neun\",\"neunj\",\"neunh\",\"neud\",\"neul\",\"neulg\",\"neulm\",\"neulb\",\"neuls\",\"neult\",\"neulp\",\"neulh\",\"neum\",\"neub\",\"neubs\",\"neus\",\"neuss\",\"neung\",\"neuj\",\"neuc\",\"neuk\",\"neut\",\"neup\",\"neuh\",\"nyi\",\"nyig\",\"nyigg\",\"nyigs\",\"nyin\",\"nyinj\",\"nyinh\",\"nyid\",\"nyil\",\"nyilg\",\"nyilm\",\"nyilb\",\"nyils\",\"nyilt\",\"nyilp\",\"nyilh\",\"nyim\",\"nyib\",\"nyibs\",\"nyis\",\"nyiss\",\"nying\",\"nyij\",\"nyic\",\"nyik\",\"nyit\",\"nyip\",\"nyih\",\"ni\",\"nig\",\"nigg\",\"nigs\",\"nin\",\"ninj\",\"ninh\",\"nid\",\"nil\",\"nilg\",\"nilm\",\"nilb\",\"nils\",\"nilt\",\"nilp\",\"nilh\",\"nim\",\"nib\",\"nibs\",\"nis\",\"niss\",\"ning\",\"nij\",\"nic\",\"nik\",\"nit\",\"nip\",\"nih\",\"da\",\"dag\",\"dagg\",\"dags\",\"dan\",\"danj\",\"danh\",\"dad\",\"dal\",\"dalg\",\"dalm\",\"dalb\",\"dals\",\"dalt\",\"dalp\",\"dalh\",\"dam\",\"dab\",\"dabs\",\"das\",\"dass\",\"dang\",\"daj\",\"dac\",\"dak\",\"dat\",\"dap\",\"dah\"],[\"dae\",\"daeg\",\"daegg\",\"daegs\",\"daen\",\"daenj\",\"daenh\",\"daed\",\"dael\",\"daelg\",\"daelm\",\"daelb\",\"daels\",\"daelt\",\"daelp\",\"daelh\",\"daem\",\"daeb\",\"daebs\",\"daes\",\"daess\",\"daeng\",\"daej\",\"daec\",\"daek\",\"daet\",\"daep\",\"daeh\",\"dya\",\"dyag\",\"dyagg\",\"dyags\",\"dyan\",\"dyanj\",\"dyanh\",\"dyad\",\"dyal\",\"dyalg\",\"dyalm\",\"dyalb\",\"dyals\",\"dyalt\",\"dyalp\",\"dyalh\",\"dyam\",\"dyab\",\"dyabs\",\"dyas\",\"dyass\",\"dyang\",\"dyaj\",\"dyac\",\"dyak\",\"dyat\",\"dyap\",\"dyah\",\"dyae\",\"dyaeg\",\"dyaegg\",\"dyaegs\",\"dyaen\",\"dyaenj\",\"dyaenh\",\"dyaed\",\"dyael\",\"dyaelg\",\"dyaelm\",\"dyaelb\",\"dyaels\",\"dyaelt\",\"dyaelp\",\"dyaelh\",\"dyaem\",\"dyaeb\",\"dyaebs\",\"dyaes\",\"dyaess\",\"dyaeng\",\"dyaej\",\"dyaec\",\"dyaek\",\"dyaet\",\"dyaep\",\"dyaeh\",\"deo\",\"deog\",\"deogg\",\"deogs\",\"deon\",\"deonj\",\"deonh\",\"deod\",\"deol\",\"deolg\",\"deolm\",\"deolb\",\"deols\",\"deolt\",\"deolp\",\"deolh\",\"deom\",\"deob\",\"deobs\",\"deos\",\"deoss\",\"deong\",\"deoj\",\"deoc\",\"deok\",\"deot\",\"deop\",\"deoh\",\"de\",\"deg\",\"degg\",\"degs\",\"den\",\"denj\",\"denh\",\"ded\",\"del\",\"delg\",\"delm\",\"delb\",\"dels\",\"delt\",\"delp\",\"delh\",\"dem\",\"deb\",\"debs\",\"des\",\"dess\",\"deng\",\"dej\",\"dec\",\"dek\",\"det\",\"dep\",\"deh\",\"dyeo\",\"dyeog\",\"dyeogg\",\"dyeogs\",\"dyeon\",\"dyeonj\",\"dyeonh\",\"dyeod\",\"dyeol\",\"dyeolg\",\"dyeolm\",\"dyeolb\",\"dyeols\",\"dyeolt\",\"dyeolp\",\"dyeolh\",\"dyeom\",\"dyeob\",\"dyeobs\",\"dyeos\",\"dyeoss\",\"dyeong\",\"dyeoj\",\"dyeoc\",\"dyeok\",\"dyeot\",\"dyeop\",\"dyeoh\",\"dye\",\"dyeg\",\"dyegg\",\"dyegs\",\"dyen\",\"dyenj\",\"dyenh\",\"dyed\",\"dyel\",\"dyelg\",\"dyelm\",\"dyelb\",\"dyels\",\"dyelt\",\"dyelp\",\"dyelh\",\"dyem\",\"dyeb\",\"dyebs\",\"dyes\",\"dyess\",\"dyeng\",\"dyej\",\"dyec\",\"dyek\",\"dyet\",\"dyep\",\"dyeh\",\"do\",\"dog\",\"dogg\",\"dogs\",\"don\",\"donj\",\"donh\",\"dod\",\"dol\",\"dolg\",\"dolm\",\"dolb\",\"dols\",\"dolt\",\"dolp\",\"dolh\",\"dom\",\"dob\",\"dobs\",\"dos\",\"doss\",\"dong\",\"doj\",\"doc\",\"dok\",\"dot\",\"dop\",\"doh\",\"dwa\",\"dwag\",\"dwagg\",\"dwags\",\"dwan\",\"dwanj\",\"dwanh\",\"dwad\",\"dwal\",\"dwalg\",\"dwalm\",\"dwalb\",\"dwals\",\"dwalt\",\"dwalp\",\"dwalh\",\"dwam\",\"dwab\",\"dwabs\",\"dwas\",\"dwass\",\"dwang\",\"dwaj\",\"dwac\",\"dwak\",\"dwat\",\"dwap\",\"dwah\",\"dwae\",\"dwaeg\",\"dwaegg\",\"dwaegs\"],[\"dwaen\",\"dwaenj\",\"dwaenh\",\"dwaed\",\"dwael\",\"dwaelg\",\"dwaelm\",\"dwaelb\",\"dwaels\",\"dwaelt\",\"dwaelp\",\"dwaelh\",\"dwaem\",\"dwaeb\",\"dwaebs\",\"dwaes\",\"dwaess\",\"dwaeng\",\"dwaej\",\"dwaec\",\"dwaek\",\"dwaet\",\"dwaep\",\"dwaeh\",\"doe\",\"doeg\",\"doegg\",\"doegs\",\"doen\",\"doenj\",\"doenh\",\"doed\",\"doel\",\"doelg\",\"doelm\",\"doelb\",\"doels\",\"doelt\",\"doelp\",\"doelh\",\"doem\",\"doeb\",\"doebs\",\"does\",\"doess\",\"doeng\",\"doej\",\"doec\",\"doek\",\"doet\",\"doep\",\"doeh\",\"dyo\",\"dyog\",\"dyogg\",\"dyogs\",\"dyon\",\"dyonj\",\"dyonh\",\"dyod\",\"dyol\",\"dyolg\",\"dyolm\",\"dyolb\",\"dyols\",\"dyolt\",\"dyolp\",\"dyolh\",\"dyom\",\"dyob\",\"dyobs\",\"dyos\",\"dyoss\",\"dyong\",\"dyoj\",\"dyoc\",\"dyok\",\"dyot\",\"dyop\",\"dyoh\",\"du\",\"dug\",\"dugg\",\"dugs\",\"dun\",\"dunj\",\"dunh\",\"dud\",\"dul\",\"dulg\",\"dulm\",\"dulb\",\"duls\",\"dult\",\"dulp\",\"dulh\",\"dum\",\"dub\",\"dubs\",\"dus\",\"duss\",\"dung\",\"duj\",\"duc\",\"duk\",\"dut\",\"dup\",\"duh\",\"dweo\",\"dweog\",\"dweogg\",\"dweogs\",\"dweon\",\"dweonj\",\"dweonh\",\"dweod\",\"dweol\",\"dweolg\",\"dweolm\",\"dweolb\",\"dweols\",\"dweolt\",\"dweolp\",\"dweolh\",\"dweom\",\"dweob\",\"dweobs\",\"dweos\",\"dweoss\",\"dweong\",\"dweoj\",\"dweoc\",\"dweok\",\"dweot\",\"dweop\",\"dweoh\",\"dwe\",\"dweg\",\"dwegg\",\"dwegs\",\"dwen\",\"dwenj\",\"dwenh\",\"dwed\",\"dwel\",\"dwelg\",\"dwelm\",\"dwelb\",\"dwels\",\"dwelt\",\"dwelp\",\"dwelh\",\"dwem\",\"dweb\",\"dwebs\",\"dwes\",\"dwess\",\"dweng\",\"dwej\",\"dwec\",\"dwek\",\"dwet\",\"dwep\",\"dweh\",\"dwi\",\"dwig\",\"dwigg\",\"dwigs\",\"dwin\",\"dwinj\",\"dwinh\",\"dwid\",\"dwil\",\"dwilg\",\"dwilm\",\"dwilb\",\"dwils\",\"dwilt\",\"dwilp\",\"dwilh\",\"dwim\",\"dwib\",\"dwibs\",\"dwis\",\"dwiss\",\"dwing\",\"dwij\",\"dwic\",\"dwik\",\"dwit\",\"dwip\",\"dwih\",\"dyu\",\"dyug\",\"dyugg\",\"dyugs\",\"dyun\",\"dyunj\",\"dyunh\",\"dyud\",\"dyul\",\"dyulg\",\"dyulm\",\"dyulb\",\"dyuls\",\"dyult\",\"dyulp\",\"dyulh\",\"dyum\",\"dyub\",\"dyubs\",\"dyus\",\"dyuss\",\"dyung\",\"dyuj\",\"dyuc\",\"dyuk\",\"dyut\",\"dyup\",\"dyuh\",\"deu\",\"deug\",\"deugg\",\"deugs\",\"deun\",\"deunj\",\"deunh\",\"deud\",\"deul\",\"deulg\",\"deulm\",\"deulb\",\"deuls\",\"deult\",\"deulp\",\"deulh\",\"deum\",\"deub\",\"deubs\",\"deus\",\"deuss\",\"deung\",\"deuj\",\"deuc\",\"deuk\",\"deut\",\"deup\",\"deuh\",\"dyi\",\"dyig\",\"dyigg\",\"dyigs\",\"dyin\",\"dyinj\",\"dyinh\",\"dyid\"],[\"dyil\",\"dyilg\",\"dyilm\",\"dyilb\",\"dyils\",\"dyilt\",\"dyilp\",\"dyilh\",\"dyim\",\"dyib\",\"dyibs\",\"dyis\",\"dyiss\",\"dying\",\"dyij\",\"dyic\",\"dyik\",\"dyit\",\"dyip\",\"dyih\",\"di\",\"dig\",\"digg\",\"digs\",\"din\",\"dinj\",\"dinh\",\"did\",\"dil\",\"dilg\",\"dilm\",\"dilb\",\"dils\",\"dilt\",\"dilp\",\"dilh\",\"dim\",\"dib\",\"dibs\",\"dis\",\"diss\",\"ding\",\"dij\",\"dic\",\"dik\",\"dit\",\"dip\",\"dih\",\"dda\",\"ddag\",\"ddagg\",\"ddags\",\"ddan\",\"ddanj\",\"ddanh\",\"ddad\",\"ddal\",\"ddalg\",\"ddalm\",\"ddalb\",\"ddals\",\"ddalt\",\"ddalp\",\"ddalh\",\"ddam\",\"ddab\",\"ddabs\",\"ddas\",\"ddass\",\"ddang\",\"ddaj\",\"ddac\",\"ddak\",\"ddat\",\"ddap\",\"ddah\",\"ddae\",\"ddaeg\",\"ddaegg\",\"ddaegs\",\"ddaen\",\"ddaenj\",\"ddaenh\",\"ddaed\",\"ddael\",\"ddaelg\",\"ddaelm\",\"ddaelb\",\"ddaels\",\"ddaelt\",\"ddaelp\",\"ddaelh\",\"ddaem\",\"ddaeb\",\"ddaebs\",\"ddaes\",\"ddaess\",\"ddaeng\",\"ddaej\",\"ddaec\",\"ddaek\",\"ddaet\",\"ddaep\",\"ddaeh\",\"ddya\",\"ddyag\",\"ddyagg\",\"ddyags\",\"ddyan\",\"ddyanj\",\"ddyanh\",\"ddyad\",\"ddyal\",\"ddyalg\",\"ddyalm\",\"ddyalb\",\"ddyals\",\"ddyalt\",\"ddyalp\",\"ddyalh\",\"ddyam\",\"ddyab\",\"ddyabs\",\"ddyas\",\"ddyass\",\"ddyang\",\"ddyaj\",\"ddyac\",\"ddyak\",\"ddyat\",\"ddyap\",\"ddyah\",\"ddyae\",\"ddyaeg\",\"ddyaegg\",\"ddyaegs\",\"ddyaen\",\"ddyaenj\",\"ddyaenh\",\"ddyaed\",\"ddyael\",\"ddyaelg\",\"ddyaelm\",\"ddyaelb\",\"ddyaels\",\"ddyaelt\",\"ddyaelp\",\"ddyaelh\",\"ddyaem\",\"ddyaeb\",\"ddyaebs\",\"ddyaes\",\"ddyaess\",\"ddyaeng\",\"ddyaej\",\"ddyaec\",\"ddyaek\",\"ddyaet\",\"ddyaep\",\"ddyaeh\",\"ddeo\",\"ddeog\",\"ddeogg\",\"ddeogs\",\"ddeon\",\"ddeonj\",\"ddeonh\",\"ddeod\",\"ddeol\",\"ddeolg\",\"ddeolm\",\"ddeolb\",\"ddeols\",\"ddeolt\",\"ddeolp\",\"ddeolh\",\"ddeom\",\"ddeob\",\"ddeobs\",\"ddeos\",\"ddeoss\",\"ddeong\",\"ddeoj\",\"ddeoc\",\"ddeok\",\"ddeot\",\"ddeop\",\"ddeoh\",\"dde\",\"ddeg\",\"ddegg\",\"ddegs\",\"dden\",\"ddenj\",\"ddenh\",\"dded\",\"ddel\",\"ddelg\",\"ddelm\",\"ddelb\",\"ddels\",\"ddelt\",\"ddelp\",\"ddelh\",\"ddem\",\"ddeb\",\"ddebs\",\"ddes\",\"ddess\",\"ddeng\",\"ddej\",\"ddec\",\"ddek\",\"ddet\",\"ddep\",\"ddeh\",\"ddyeo\",\"ddyeog\",\"ddyeogg\",\"ddyeogs\",\"ddyeon\",\"ddyeonj\",\"ddyeonh\",\"ddyeod\",\"ddyeol\",\"ddyeolg\",\"ddyeolm\",\"ddyeolb\",\"ddyeols\",\"ddyeolt\",\"ddyeolp\",\"ddyeolh\",\"ddyeom\",\"ddyeob\",\"ddyeobs\",\"ddyeos\",\"ddyeoss\",\"ddyeong\",\"ddyeoj\",\"ddyeoc\",\"ddyeok\",\"ddyeot\",\"ddyeop\",\"ddyeoh\",\"ddye\",\"ddyeg\",\"ddyegg\",\"ddyegs\",\"ddyen\",\"ddyenj\",\"ddyenh\",\"ddyed\",\"ddyel\",\"ddyelg\",\"ddyelm\",\"ddyelb\"],[\"ddyels\",\"ddyelt\",\"ddyelp\",\"ddyelh\",\"ddyem\",\"ddyeb\",\"ddyebs\",\"ddyes\",\"ddyess\",\"ddyeng\",\"ddyej\",\"ddyec\",\"ddyek\",\"ddyet\",\"ddyep\",\"ddyeh\",\"ddo\",\"ddog\",\"ddogg\",\"ddogs\",\"ddon\",\"ddonj\",\"ddonh\",\"ddod\",\"ddol\",\"ddolg\",\"ddolm\",\"ddolb\",\"ddols\",\"ddolt\",\"ddolp\",\"ddolh\",\"ddom\",\"ddob\",\"ddobs\",\"ddos\",\"ddoss\",\"ddong\",\"ddoj\",\"ddoc\",\"ddok\",\"ddot\",\"ddop\",\"ddoh\",\"ddwa\",\"ddwag\",\"ddwagg\",\"ddwags\",\"ddwan\",\"ddwanj\",\"ddwanh\",\"ddwad\",\"ddwal\",\"ddwalg\",\"ddwalm\",\"ddwalb\",\"ddwals\",\"ddwalt\",\"ddwalp\",\"ddwalh\",\"ddwam\",\"ddwab\",\"ddwabs\",\"ddwas\",\"ddwass\",\"ddwang\",\"ddwaj\",\"ddwac\",\"ddwak\",\"ddwat\",\"ddwap\",\"ddwah\",\"ddwae\",\"ddwaeg\",\"ddwaegg\",\"ddwaegs\",\"ddwaen\",\"ddwaenj\",\"ddwaenh\",\"ddwaed\",\"ddwael\",\"ddwaelg\",\"ddwaelm\",\"ddwaelb\",\"ddwaels\",\"ddwaelt\",\"ddwaelp\",\"ddwaelh\",\"ddwaem\",\"ddwaeb\",\"ddwaebs\",\"ddwaes\",\"ddwaess\",\"ddwaeng\",\"ddwaej\",\"ddwaec\",\"ddwaek\",\"ddwaet\",\"ddwaep\",\"ddwaeh\",\"ddoe\",\"ddoeg\",\"ddoegg\",\"ddoegs\",\"ddoen\",\"ddoenj\",\"ddoenh\",\"ddoed\",\"ddoel\",\"ddoelg\",\"ddoelm\",\"ddoelb\",\"ddoels\",\"ddoelt\",\"ddoelp\",\"ddoelh\",\"ddoem\",\"ddoeb\",\"ddoebs\",\"ddoes\",\"ddoess\",\"ddoeng\",\"ddoej\",\"ddoec\",\"ddoek\",\"ddoet\",\"ddoep\",\"ddoeh\",\"ddyo\",\"ddyog\",\"ddyogg\",\"ddyogs\",\"ddyon\",\"ddyonj\",\"ddyonh\",\"ddyod\",\"ddyol\",\"ddyolg\",\"ddyolm\",\"ddyolb\",\"ddyols\",\"ddyolt\",\"ddyolp\",\"ddyolh\",\"ddyom\",\"ddyob\",\"ddyobs\",\"ddyos\",\"ddyoss\",\"ddyong\",\"ddyoj\",\"ddyoc\",\"ddyok\",\"ddyot\",\"ddyop\",\"ddyoh\",\"ddu\",\"ddug\",\"ddugg\",\"ddugs\",\"ddun\",\"ddunj\",\"ddunh\",\"ddud\",\"ddul\",\"ddulg\",\"ddulm\",\"ddulb\",\"dduls\",\"ddult\",\"ddulp\",\"ddulh\",\"ddum\",\"ddub\",\"ddubs\",\"ddus\",\"dduss\",\"ddung\",\"dduj\",\"dduc\",\"dduk\",\"ddut\",\"ddup\",\"dduh\",\"ddweo\",\"ddweog\",\"ddweogg\",\"ddweogs\",\"ddweon\",\"ddweonj\",\"ddweonh\",\"ddweod\",\"ddweol\",\"ddweolg\",\"ddweolm\",\"ddweolb\",\"ddweols\",\"ddweolt\",\"ddweolp\",\"ddweolh\",\"ddweom\",\"ddweob\",\"ddweobs\",\"ddweos\",\"ddweoss\",\"ddweong\",\"ddweoj\",\"ddweoc\",\"ddweok\",\"ddweot\",\"ddweop\",\"ddweoh\",\"ddwe\",\"ddweg\",\"ddwegg\",\"ddwegs\",\"ddwen\",\"ddwenj\",\"ddwenh\",\"ddwed\",\"ddwel\",\"ddwelg\",\"ddwelm\",\"ddwelb\",\"ddwels\",\"ddwelt\",\"ddwelp\",\"ddwelh\",\"ddwem\",\"ddweb\",\"ddwebs\",\"ddwes\",\"ddwess\",\"ddweng\",\"ddwej\",\"ddwec\",\"ddwek\",\"ddwet\",\"ddwep\",\"ddweh\",\"ddwi\",\"ddwig\",\"ddwigg\",\"ddwigs\",\"ddwin\",\"ddwinj\",\"ddwinh\",\"ddwid\",\"ddwil\",\"ddwilg\",\"ddwilm\",\"ddwilb\",\"ddwils\",\"ddwilt\",\"ddwilp\",\"ddwilh\"],[\"ddwim\",\"ddwib\",\"ddwibs\",\"ddwis\",\"ddwiss\",\"ddwing\",\"ddwij\",\"ddwic\",\"ddwik\",\"ddwit\",\"ddwip\",\"ddwih\",\"ddyu\",\"ddyug\",\"ddyugg\",\"ddyugs\",\"ddyun\",\"ddyunj\",\"ddyunh\",\"ddyud\",\"ddyul\",\"ddyulg\",\"ddyulm\",\"ddyulb\",\"ddyuls\",\"ddyult\",\"ddyulp\",\"ddyulh\",\"ddyum\",\"ddyub\",\"ddyubs\",\"ddyus\",\"ddyuss\",\"ddyung\",\"ddyuj\",\"ddyuc\",\"ddyuk\",\"ddyut\",\"ddyup\",\"ddyuh\",\"ddeu\",\"ddeug\",\"ddeugg\",\"ddeugs\",\"ddeun\",\"ddeunj\",\"ddeunh\",\"ddeud\",\"ddeul\",\"ddeulg\",\"ddeulm\",\"ddeulb\",\"ddeuls\",\"ddeult\",\"ddeulp\",\"ddeulh\",\"ddeum\",\"ddeub\",\"ddeubs\",\"ddeus\",\"ddeuss\",\"ddeung\",\"ddeuj\",\"ddeuc\",\"ddeuk\",\"ddeut\",\"ddeup\",\"ddeuh\",\"ddyi\",\"ddyig\",\"ddyigg\",\"ddyigs\",\"ddyin\",\"ddyinj\",\"ddyinh\",\"ddyid\",\"ddyil\",\"ddyilg\",\"ddyilm\",\"ddyilb\",\"ddyils\",\"ddyilt\",\"ddyilp\",\"ddyilh\",\"ddyim\",\"ddyib\",\"ddyibs\",\"ddyis\",\"ddyiss\",\"ddying\",\"ddyij\",\"ddyic\",\"ddyik\",\"ddyit\",\"ddyip\",\"ddyih\",\"ddi\",\"ddig\",\"ddigg\",\"ddigs\",\"ddin\",\"ddinj\",\"ddinh\",\"ddid\",\"ddil\",\"ddilg\",\"ddilm\",\"ddilb\",\"ddils\",\"ddilt\",\"ddilp\",\"ddilh\",\"ddim\",\"ddib\",\"ddibs\",\"ddis\",\"ddiss\",\"dding\",\"ddij\",\"ddic\",\"ddik\",\"ddit\",\"ddip\",\"ddih\",\"ra\",\"rag\",\"ragg\",\"rags\",\"ran\",\"ranj\",\"ranh\",\"rad\",\"ral\",\"ralg\",\"ralm\",\"ralb\",\"rals\",\"ralt\",\"ralp\",\"ralh\",\"ram\",\"rab\",\"rabs\",\"ras\",\"rass\",\"rang\",\"raj\",\"rac\",\"rak\",\"rat\",\"rap\",\"rah\",\"rae\",\"raeg\",\"raegg\",\"raegs\",\"raen\",\"raenj\",\"raenh\",\"raed\",\"rael\",\"raelg\",\"raelm\",\"raelb\",\"raels\",\"raelt\",\"raelp\",\"raelh\",\"raem\",\"raeb\",\"raebs\",\"raes\",\"raess\",\"raeng\",\"raej\",\"raec\",\"raek\",\"raet\",\"raep\",\"raeh\",\"rya\",\"ryag\",\"ryagg\",\"ryags\",\"ryan\",\"ryanj\",\"ryanh\",\"ryad\",\"ryal\",\"ryalg\",\"ryalm\",\"ryalb\",\"ryals\",\"ryalt\",\"ryalp\",\"ryalh\",\"ryam\",\"ryab\",\"ryabs\",\"ryas\",\"ryass\",\"ryang\",\"ryaj\",\"ryac\",\"ryak\",\"ryat\",\"ryap\",\"ryah\",\"ryae\",\"ryaeg\",\"ryaegg\",\"ryaegs\",\"ryaen\",\"ryaenj\",\"ryaenh\",\"ryaed\",\"ryael\",\"ryaelg\",\"ryaelm\",\"ryaelb\",\"ryaels\",\"ryaelt\",\"ryaelp\",\"ryaelh\",\"ryaem\",\"ryaeb\",\"ryaebs\",\"ryaes\",\"ryaess\",\"ryaeng\",\"ryaej\",\"ryaec\",\"ryaek\",\"ryaet\",\"ryaep\",\"ryaeh\",\"reo\",\"reog\",\"reogg\",\"reogs\",\"reon\",\"reonj\",\"reonh\",\"reod\",\"reol\",\"reolg\",\"reolm\",\"reolb\",\"reols\",\"reolt\",\"reolp\",\"reolh\",\"reom\",\"reob\",\"reobs\",\"reos\"],[\"reoss\",\"reong\",\"reoj\",\"reoc\",\"reok\",\"reot\",\"reop\",\"reoh\",\"re\",\"reg\",\"regg\",\"regs\",\"ren\",\"renj\",\"renh\",\"red\",\"rel\",\"relg\",\"relm\",\"relb\",\"rels\",\"relt\",\"relp\",\"relh\",\"rem\",\"reb\",\"rebs\",\"res\",\"ress\",\"reng\",\"rej\",\"rec\",\"rek\",\"ret\",\"rep\",\"reh\",\"ryeo\",\"ryeog\",\"ryeogg\",\"ryeogs\",\"ryeon\",\"ryeonj\",\"ryeonh\",\"ryeod\",\"ryeol\",\"ryeolg\",\"ryeolm\",\"ryeolb\",\"ryeols\",\"ryeolt\",\"ryeolp\",\"ryeolh\",\"ryeom\",\"ryeob\",\"ryeobs\",\"ryeos\",\"ryeoss\",\"ryeong\",\"ryeoj\",\"ryeoc\",\"ryeok\",\"ryeot\",\"ryeop\",\"ryeoh\",\"rye\",\"ryeg\",\"ryegg\",\"ryegs\",\"ryen\",\"ryenj\",\"ryenh\",\"ryed\",\"ryel\",\"ryelg\",\"ryelm\",\"ryelb\",\"ryels\",\"ryelt\",\"ryelp\",\"ryelh\",\"ryem\",\"ryeb\",\"ryebs\",\"ryes\",\"ryess\",\"ryeng\",\"ryej\",\"ryec\",\"ryek\",\"ryet\",\"ryep\",\"ryeh\",\"ro\",\"rog\",\"rogg\",\"rogs\",\"ron\",\"ronj\",\"ronh\",\"rod\",\"rol\",\"rolg\",\"rolm\",\"rolb\",\"rols\",\"rolt\",\"rolp\",\"rolh\",\"rom\",\"rob\",\"robs\",\"ros\",\"ross\",\"rong\",\"roj\",\"roc\",\"rok\",\"rot\",\"rop\",\"roh\",\"rwa\",\"rwag\",\"rwagg\",\"rwags\",\"rwan\",\"rwanj\",\"rwanh\",\"rwad\",\"rwal\",\"rwalg\",\"rwalm\",\"rwalb\",\"rwals\",\"rwalt\",\"rwalp\",\"rwalh\",\"rwam\",\"rwab\",\"rwabs\",\"rwas\",\"rwass\",\"rwang\",\"rwaj\",\"rwac\",\"rwak\",\"rwat\",\"rwap\",\"rwah\",\"rwae\",\"rwaeg\",\"rwaegg\",\"rwaegs\",\"rwaen\",\"rwaenj\",\"rwaenh\",\"rwaed\",\"rwael\",\"rwaelg\",\"rwaelm\",\"rwaelb\",\"rwaels\",\"rwaelt\",\"rwaelp\",\"rwaelh\",\"rwaem\",\"rwaeb\",\"rwaebs\",\"rwaes\",\"rwaess\",\"rwaeng\",\"rwaej\",\"rwaec\",\"rwaek\",\"rwaet\",\"rwaep\",\"rwaeh\",\"roe\",\"roeg\",\"roegg\",\"roegs\",\"roen\",\"roenj\",\"roenh\",\"roed\",\"roel\",\"roelg\",\"roelm\",\"roelb\",\"roels\",\"roelt\",\"roelp\",\"roelh\",\"roem\",\"roeb\",\"roebs\",\"roes\",\"roess\",\"roeng\",\"roej\",\"roec\",\"roek\",\"roet\",\"roep\",\"roeh\",\"ryo\",\"ryog\",\"ryogg\",\"ryogs\",\"ryon\",\"ryonj\",\"ryonh\",\"ryod\",\"ryol\",\"ryolg\",\"ryolm\",\"ryolb\",\"ryols\",\"ryolt\",\"ryolp\",\"ryolh\",\"ryom\",\"ryob\",\"ryobs\",\"ryos\",\"ryoss\",\"ryong\",\"ryoj\",\"ryoc\",\"ryok\",\"ryot\",\"ryop\",\"ryoh\",\"ru\",\"rug\",\"rugg\",\"rugs\",\"run\",\"runj\",\"runh\",\"rud\",\"rul\",\"rulg\",\"rulm\",\"rulb\",\"ruls\",\"rult\",\"rulp\",\"rulh\",\"rum\",\"rub\",\"rubs\",\"rus\",\"russ\",\"rung\",\"ruj\",\"ruc\"],[\"ruk\",\"rut\",\"rup\",\"ruh\",\"rweo\",\"rweog\",\"rweogg\",\"rweogs\",\"rweon\",\"rweonj\",\"rweonh\",\"rweod\",\"rweol\",\"rweolg\",\"rweolm\",\"rweolb\",\"rweols\",\"rweolt\",\"rweolp\",\"rweolh\",\"rweom\",\"rweob\",\"rweobs\",\"rweos\",\"rweoss\",\"rweong\",\"rweoj\",\"rweoc\",\"rweok\",\"rweot\",\"rweop\",\"rweoh\",\"rwe\",\"rweg\",\"rwegg\",\"rwegs\",\"rwen\",\"rwenj\",\"rwenh\",\"rwed\",\"rwel\",\"rwelg\",\"rwelm\",\"rwelb\",\"rwels\",\"rwelt\",\"rwelp\",\"rwelh\",\"rwem\",\"rweb\",\"rwebs\",\"rwes\",\"rwess\",\"rweng\",\"rwej\",\"rwec\",\"rwek\",\"rwet\",\"rwep\",\"rweh\",\"rwi\",\"rwig\",\"rwigg\",\"rwigs\",\"rwin\",\"rwinj\",\"rwinh\",\"rwid\",\"rwil\",\"rwilg\",\"rwilm\",\"rwilb\",\"rwils\",\"rwilt\",\"rwilp\",\"rwilh\",\"rwim\",\"rwib\",\"rwibs\",\"rwis\",\"rwiss\",\"rwing\",\"rwij\",\"rwic\",\"rwik\",\"rwit\",\"rwip\",\"rwih\",\"ryu\",\"ryug\",\"ryugg\",\"ryugs\",\"ryun\",\"ryunj\",\"ryunh\",\"ryud\",\"ryul\",\"ryulg\",\"ryulm\",\"ryulb\",\"ryuls\",\"ryult\",\"ryulp\",\"ryulh\",\"ryum\",\"ryub\",\"ryubs\",\"ryus\",\"ryuss\",\"ryung\",\"ryuj\",\"ryuc\",\"ryuk\",\"ryut\",\"ryup\",\"ryuh\",\"reu\",\"reug\",\"reugg\",\"reugs\",\"reun\",\"reunj\",\"reunh\",\"reud\",\"reul\",\"reulg\",\"reulm\",\"reulb\",\"reuls\",\"reult\",\"reulp\",\"reulh\",\"reum\",\"reub\",\"reubs\",\"reus\",\"reuss\",\"reung\",\"reuj\",\"reuc\",\"reuk\",\"reut\",\"reup\",\"reuh\",\"ryi\",\"ryig\",\"ryigg\",\"ryigs\",\"ryin\",\"ryinj\",\"ryinh\",\"ryid\",\"ryil\",\"ryilg\",\"ryilm\",\"ryilb\",\"ryils\",\"ryilt\",\"ryilp\",\"ryilh\",\"ryim\",\"ryib\",\"ryibs\",\"ryis\",\"ryiss\",\"rying\",\"ryij\",\"ryic\",\"ryik\",\"ryit\",\"ryip\",\"ryih\",\"ri\",\"rig\",\"rigg\",\"rigs\",\"rin\",\"rinj\",\"rinh\",\"rid\",\"ril\",\"rilg\",\"rilm\",\"rilb\",\"rils\",\"rilt\",\"rilp\",\"rilh\",\"rim\",\"rib\",\"ribs\",\"ris\",\"riss\",\"ring\",\"rij\",\"ric\",\"rik\",\"rit\",\"rip\",\"rih\",\"ma\",\"mag\",\"magg\",\"mags\",\"man\",\"manj\",\"manh\",\"mad\",\"mal\",\"malg\",\"malm\",\"malb\",\"mals\",\"malt\",\"malp\",\"malh\",\"mam\",\"mab\",\"mabs\",\"mas\",\"mass\",\"mang\",\"maj\",\"mac\",\"mak\",\"mat\",\"map\",\"mah\",\"mae\",\"maeg\",\"maegg\",\"maegs\",\"maen\",\"maenj\",\"maenh\",\"maed\",\"mael\",\"maelg\",\"maelm\",\"maelb\",\"maels\",\"maelt\",\"maelp\",\"maelh\",\"maem\",\"maeb\",\"maebs\",\"maes\",\"maess\",\"maeng\",\"maej\",\"maec\",\"maek\",\"maet\",\"maep\",\"maeh\"],[\"mya\",\"myag\",\"myagg\",\"myags\",\"myan\",\"myanj\",\"myanh\",\"myad\",\"myal\",\"myalg\",\"myalm\",\"myalb\",\"myals\",\"myalt\",\"myalp\",\"myalh\",\"myam\",\"myab\",\"myabs\",\"myas\",\"myass\",\"myang\",\"myaj\",\"myac\",\"myak\",\"myat\",\"myap\",\"myah\",\"myae\",\"myaeg\",\"myaegg\",\"myaegs\",\"myaen\",\"myaenj\",\"myaenh\",\"myaed\",\"myael\",\"myaelg\",\"myaelm\",\"myaelb\",\"myaels\",\"myaelt\",\"myaelp\",\"myaelh\",\"myaem\",\"myaeb\",\"myaebs\",\"myaes\",\"myaess\",\"myaeng\",\"myaej\",\"myaec\",\"myaek\",\"myaet\",\"myaep\",\"myaeh\",\"meo\",\"meog\",\"meogg\",\"meogs\",\"meon\",\"meonj\",\"meonh\",\"meod\",\"meol\",\"meolg\",\"meolm\",\"meolb\",\"meols\",\"meolt\",\"meolp\",\"meolh\",\"meom\",\"meob\",\"meobs\",\"meos\",\"meoss\",\"meong\",\"meoj\",\"meoc\",\"meok\",\"meot\",\"meop\",\"meoh\",\"me\",\"meg\",\"megg\",\"megs\",\"men\",\"menj\",\"menh\",\"med\",\"mel\",\"melg\",\"melm\",\"melb\",\"mels\",\"melt\",\"melp\",\"melh\",\"mem\",\"meb\",\"mebs\",\"mes\",\"mess\",\"meng\",\"mej\",\"mec\",\"mek\",\"met\",\"mep\",\"meh\",\"myeo\",\"myeog\",\"myeogg\",\"myeogs\",\"myeon\",\"myeonj\",\"myeonh\",\"myeod\",\"myeol\",\"myeolg\",\"myeolm\",\"myeolb\",\"myeols\",\"myeolt\",\"myeolp\",\"myeolh\",\"myeom\",\"myeob\",\"myeobs\",\"myeos\",\"myeoss\",\"myeong\",\"myeoj\",\"myeoc\",\"myeok\",\"myeot\",\"myeop\",\"myeoh\",\"mye\",\"myeg\",\"myegg\",\"myegs\",\"myen\",\"myenj\",\"myenh\",\"myed\",\"myel\",\"myelg\",\"myelm\",\"myelb\",\"myels\",\"myelt\",\"myelp\",\"myelh\",\"myem\",\"myeb\",\"myebs\",\"myes\",\"myess\",\"myeng\",\"myej\",\"myec\",\"myek\",\"myet\",\"myep\",\"myeh\",\"mo\",\"mog\",\"mogg\",\"mogs\",\"mon\",\"monj\",\"monh\",\"mod\",\"mol\",\"molg\",\"molm\",\"molb\",\"mols\",\"molt\",\"molp\",\"molh\",\"mom\",\"mob\",\"mobs\",\"mos\",\"moss\",\"mong\",\"moj\",\"moc\",\"mok\",\"mot\",\"mop\",\"moh\",\"mwa\",\"mwag\",\"mwagg\",\"mwags\",\"mwan\",\"mwanj\",\"mwanh\",\"mwad\",\"mwal\",\"mwalg\",\"mwalm\",\"mwalb\",\"mwals\",\"mwalt\",\"mwalp\",\"mwalh\",\"mwam\",\"mwab\",\"mwabs\",\"mwas\",\"mwass\",\"mwang\",\"mwaj\",\"mwac\",\"mwak\",\"mwat\",\"mwap\",\"mwah\",\"mwae\",\"mwaeg\",\"mwaegg\",\"mwaegs\",\"mwaen\",\"mwaenj\",\"mwaenh\",\"mwaed\",\"mwael\",\"mwaelg\",\"mwaelm\",\"mwaelb\",\"mwaels\",\"mwaelt\",\"mwaelp\",\"mwaelh\",\"mwaem\",\"mwaeb\",\"mwaebs\",\"mwaes\",\"mwaess\",\"mwaeng\",\"mwaej\",\"mwaec\",\"mwaek\",\"mwaet\",\"mwaep\",\"mwaeh\",\"moe\",\"moeg\",\"moegg\",\"moegs\"],[\"moen\",\"moenj\",\"moenh\",\"moed\",\"moel\",\"moelg\",\"moelm\",\"moelb\",\"moels\",\"moelt\",\"moelp\",\"moelh\",\"moem\",\"moeb\",\"moebs\",\"moes\",\"moess\",\"moeng\",\"moej\",\"moec\",\"moek\",\"moet\",\"moep\",\"moeh\",\"myo\",\"myog\",\"myogg\",\"myogs\",\"myon\",\"myonj\",\"myonh\",\"myod\",\"myol\",\"myolg\",\"myolm\",\"myolb\",\"myols\",\"myolt\",\"myolp\",\"myolh\",\"myom\",\"myob\",\"myobs\",\"myos\",\"myoss\",\"myong\",\"myoj\",\"myoc\",\"myok\",\"myot\",\"myop\",\"myoh\",\"mu\",\"mug\",\"mugg\",\"mugs\",\"mun\",\"munj\",\"munh\",\"mud\",\"mul\",\"mulg\",\"mulm\",\"mulb\",\"muls\",\"mult\",\"mulp\",\"mulh\",\"mum\",\"mub\",\"mubs\",\"mus\",\"muss\",\"mung\",\"muj\",\"muc\",\"muk\",\"mut\",\"mup\",\"muh\",\"mweo\",\"mweog\",\"mweogg\",\"mweogs\",\"mweon\",\"mweonj\",\"mweonh\",\"mweod\",\"mweol\",\"mweolg\",\"mweolm\",\"mweolb\",\"mweols\",\"mweolt\",\"mweolp\",\"mweolh\",\"mweom\",\"mweob\",\"mweobs\",\"mweos\",\"mweoss\",\"mweong\",\"mweoj\",\"mweoc\",\"mweok\",\"mweot\",\"mweop\",\"mweoh\",\"mwe\",\"mweg\",\"mwegg\",\"mwegs\",\"mwen\",\"mwenj\",\"mwenh\",\"mwed\",\"mwel\",\"mwelg\",\"mwelm\",\"mwelb\",\"mwels\",\"mwelt\",\"mwelp\",\"mwelh\",\"mwem\",\"mweb\",\"mwebs\",\"mwes\",\"mwess\",\"mweng\",\"mwej\",\"mwec\",\"mwek\",\"mwet\",\"mwep\",\"mweh\",\"mwi\",\"mwig\",\"mwigg\",\"mwigs\",\"mwin\",\"mwinj\",\"mwinh\",\"mwid\",\"mwil\",\"mwilg\",\"mwilm\",\"mwilb\",\"mwils\",\"mwilt\",\"mwilp\",\"mwilh\",\"mwim\",\"mwib\",\"mwibs\",\"mwis\",\"mwiss\",\"mwing\",\"mwij\",\"mwic\",\"mwik\",\"mwit\",\"mwip\",\"mwih\",\"myu\",\"myug\",\"myugg\",\"myugs\",\"myun\",\"myunj\",\"myunh\",\"myud\",\"myul\",\"myulg\",\"myulm\",\"myulb\",\"myuls\",\"myult\",\"myulp\",\"myulh\",\"myum\",\"myub\",\"myubs\",\"myus\",\"myuss\",\"myung\",\"myuj\",\"myuc\",\"myuk\",\"myut\",\"myup\",\"myuh\",\"meu\",\"meug\",\"meugg\",\"meugs\",\"meun\",\"meunj\",\"meunh\",\"meud\",\"meul\",\"meulg\",\"meulm\",\"meulb\",\"meuls\",\"meult\",\"meulp\",\"meulh\",\"meum\",\"meub\",\"meubs\",\"meus\",\"meuss\",\"meung\",\"meuj\",\"meuc\",\"meuk\",\"meut\",\"meup\",\"meuh\",\"myi\",\"myig\",\"myigg\",\"myigs\",\"myin\",\"myinj\",\"myinh\",\"myid\",\"myil\",\"myilg\",\"myilm\",\"myilb\",\"myils\",\"myilt\",\"myilp\",\"myilh\",\"myim\",\"myib\",\"myibs\",\"myis\",\"myiss\",\"mying\",\"myij\",\"myic\",\"myik\",\"myit\",\"myip\",\"myih\",\"mi\",\"mig\",\"migg\",\"migs\",\"min\",\"minj\",\"minh\",\"mid\"],[\"mil\",\"milg\",\"milm\",\"milb\",\"mils\",\"milt\",\"milp\",\"milh\",\"mim\",\"mib\",\"mibs\",\"mis\",\"miss\",\"ming\",\"mij\",\"mic\",\"mik\",\"mit\",\"mip\",\"mih\",\"ba\",\"bag\",\"bagg\",\"bags\",\"ban\",\"banj\",\"banh\",\"bad\",\"bal\",\"balg\",\"balm\",\"balb\",\"bals\",\"balt\",\"balp\",\"balh\",\"bam\",\"bab\",\"babs\",\"bas\",\"bass\",\"bang\",\"baj\",\"bac\",\"bak\",\"bat\",\"bap\",\"bah\",\"bae\",\"baeg\",\"baegg\",\"baegs\",\"baen\",\"baenj\",\"baenh\",\"baed\",\"bael\",\"baelg\",\"baelm\",\"baelb\",\"baels\",\"baelt\",\"baelp\",\"baelh\",\"baem\",\"baeb\",\"baebs\",\"baes\",\"baess\",\"baeng\",\"baej\",\"baec\",\"baek\",\"baet\",\"baep\",\"baeh\",\"bya\",\"byag\",\"byagg\",\"byags\",\"byan\",\"byanj\",\"byanh\",\"byad\",\"byal\",\"byalg\",\"byalm\",\"byalb\",\"byals\",\"byalt\",\"byalp\",\"byalh\",\"byam\",\"byab\",\"byabs\",\"byas\",\"byass\",\"byang\",\"byaj\",\"byac\",\"byak\",\"byat\",\"byap\",\"byah\",\"byae\",\"byaeg\",\"byaegg\",\"byaegs\",\"byaen\",\"byaenj\",\"byaenh\",\"byaed\",\"byael\",\"byaelg\",\"byaelm\",\"byaelb\",\"byaels\",\"byaelt\",\"byaelp\",\"byaelh\",\"byaem\",\"byaeb\",\"byaebs\",\"byaes\",\"byaess\",\"byaeng\",\"byaej\",\"byaec\",\"byaek\",\"byaet\",\"byaep\",\"byaeh\",\"beo\",\"beog\",\"beogg\",\"beogs\",\"beon\",\"beonj\",\"beonh\",\"beod\",\"beol\",\"beolg\",\"beolm\",\"beolb\",\"beols\",\"beolt\",\"beolp\",\"beolh\",\"beom\",\"beob\",\"beobs\",\"beos\",\"beoss\",\"beong\",\"beoj\",\"beoc\",\"beok\",\"beot\",\"beop\",\"beoh\",\"be\",\"beg\",\"begg\",\"begs\",\"ben\",\"benj\",\"benh\",\"bed\",\"bel\",\"belg\",\"belm\",\"belb\",\"bels\",\"belt\",\"belp\",\"belh\",\"bem\",\"beb\",\"bebs\",\"bes\",\"bess\",\"beng\",\"bej\",\"bec\",\"bek\",\"bet\",\"bep\",\"beh\",\"byeo\",\"byeog\",\"byeogg\",\"byeogs\",\"byeon\",\"byeonj\",\"byeonh\",\"byeod\",\"byeol\",\"byeolg\",\"byeolm\",\"byeolb\",\"byeols\",\"byeolt\",\"byeolp\",\"byeolh\",\"byeom\",\"byeob\",\"byeobs\",\"byeos\",\"byeoss\",\"byeong\",\"byeoj\",\"byeoc\",\"byeok\",\"byeot\",\"byeop\",\"byeoh\",\"bye\",\"byeg\",\"byegg\",\"byegs\",\"byen\",\"byenj\",\"byenh\",\"byed\",\"byel\",\"byelg\",\"byelm\",\"byelb\",\"byels\",\"byelt\",\"byelp\",\"byelh\",\"byem\",\"byeb\",\"byebs\",\"byes\",\"byess\",\"byeng\",\"byej\",\"byec\",\"byek\",\"byet\",\"byep\",\"byeh\",\"bo\",\"bog\",\"bogg\",\"bogs\",\"bon\",\"bonj\",\"bonh\",\"bod\",\"bol\",\"bolg\",\"bolm\",\"bolb\"],[\"bols\",\"bolt\",\"bolp\",\"bolh\",\"bom\",\"bob\",\"bobs\",\"bos\",\"boss\",\"bong\",\"boj\",\"boc\",\"bok\",\"bot\",\"bop\",\"boh\",\"bwa\",\"bwag\",\"bwagg\",\"bwags\",\"bwan\",\"bwanj\",\"bwanh\",\"bwad\",\"bwal\",\"bwalg\",\"bwalm\",\"bwalb\",\"bwals\",\"bwalt\",\"bwalp\",\"bwalh\",\"bwam\",\"bwab\",\"bwabs\",\"bwas\",\"bwass\",\"bwang\",\"bwaj\",\"bwac\",\"bwak\",\"bwat\",\"bwap\",\"bwah\",\"bwae\",\"bwaeg\",\"bwaegg\",\"bwaegs\",\"bwaen\",\"bwaenj\",\"bwaenh\",\"bwaed\",\"bwael\",\"bwaelg\",\"bwaelm\",\"bwaelb\",\"bwaels\",\"bwaelt\",\"bwaelp\",\"bwaelh\",\"bwaem\",\"bwaeb\",\"bwaebs\",\"bwaes\",\"bwaess\",\"bwaeng\",\"bwaej\",\"bwaec\",\"bwaek\",\"bwaet\",\"bwaep\",\"bwaeh\",\"boe\",\"boeg\",\"boegg\",\"boegs\",\"boen\",\"boenj\",\"boenh\",\"boed\",\"boel\",\"boelg\",\"boelm\",\"boelb\",\"boels\",\"boelt\",\"boelp\",\"boelh\",\"boem\",\"boeb\",\"boebs\",\"boes\",\"boess\",\"boeng\",\"boej\",\"boec\",\"boek\",\"boet\",\"boep\",\"boeh\",\"byo\",\"byog\",\"byogg\",\"byogs\",\"byon\",\"byonj\",\"byonh\",\"byod\",\"byol\",\"byolg\",\"byolm\",\"byolb\",\"byols\",\"byolt\",\"byolp\",\"byolh\",\"byom\",\"byob\",\"byobs\",\"byos\",\"byoss\",\"byong\",\"byoj\",\"byoc\",\"byok\",\"byot\",\"byop\",\"byoh\",\"bu\",\"bug\",\"bugg\",\"bugs\",\"bun\",\"bunj\",\"bunh\",\"bud\",\"bul\",\"bulg\",\"bulm\",\"bulb\",\"buls\",\"bult\",\"bulp\",\"bulh\",\"bum\",\"bub\",\"bubs\",\"bus\",\"buss\",\"bung\",\"buj\",\"buc\",\"buk\",\"but\",\"bup\",\"buh\",\"bweo\",\"bweog\",\"bweogg\",\"bweogs\",\"bweon\",\"bweonj\",\"bweonh\",\"bweod\",\"bweol\",\"bweolg\",\"bweolm\",\"bweolb\",\"bweols\",\"bweolt\",\"bweolp\",\"bweolh\",\"bweom\",\"bweob\",\"bweobs\",\"bweos\",\"bweoss\",\"bweong\",\"bweoj\",\"bweoc\",\"bweok\",\"bweot\",\"bweop\",\"bweoh\",\"bwe\",\"bweg\",\"bwegg\",\"bwegs\",\"bwen\",\"bwenj\",\"bwenh\",\"bwed\",\"bwel\",\"bwelg\",\"bwelm\",\"bwelb\",\"bwels\",\"bwelt\",\"bwelp\",\"bwelh\",\"bwem\",\"bweb\",\"bwebs\",\"bwes\",\"bwess\",\"bweng\",\"bwej\",\"bwec\",\"bwek\",\"bwet\",\"bwep\",\"bweh\",\"bwi\",\"bwig\",\"bwigg\",\"bwigs\",\"bwin\",\"bwinj\",\"bwinh\",\"bwid\",\"bwil\",\"bwilg\",\"bwilm\",\"bwilb\",\"bwils\",\"bwilt\",\"bwilp\",\"bwilh\",\"bwim\",\"bwib\",\"bwibs\",\"bwis\",\"bwiss\",\"bwing\",\"bwij\",\"bwic\",\"bwik\",\"bwit\",\"bwip\",\"bwih\",\"byu\",\"byug\",\"byugg\",\"byugs\",\"byun\",\"byunj\",\"byunh\",\"byud\",\"byul\",\"byulg\",\"byulm\",\"byulb\",\"byuls\",\"byult\",\"byulp\",\"byulh\"],[\"byum\",\"byub\",\"byubs\",\"byus\",\"byuss\",\"byung\",\"byuj\",\"byuc\",\"byuk\",\"byut\",\"byup\",\"byuh\",\"beu\",\"beug\",\"beugg\",\"beugs\",\"beun\",\"beunj\",\"beunh\",\"beud\",\"beul\",\"beulg\",\"beulm\",\"beulb\",\"beuls\",\"beult\",\"beulp\",\"beulh\",\"beum\",\"beub\",\"beubs\",\"beus\",\"beuss\",\"beung\",\"beuj\",\"beuc\",\"beuk\",\"beut\",\"beup\",\"beuh\",\"byi\",\"byig\",\"byigg\",\"byigs\",\"byin\",\"byinj\",\"byinh\",\"byid\",\"byil\",\"byilg\",\"byilm\",\"byilb\",\"byils\",\"byilt\",\"byilp\",\"byilh\",\"byim\",\"byib\",\"byibs\",\"byis\",\"byiss\",\"bying\",\"byij\",\"byic\",\"byik\",\"byit\",\"byip\",\"byih\",\"bi\",\"big\",\"bigg\",\"bigs\",\"bin\",\"binj\",\"binh\",\"bid\",\"bil\",\"bilg\",\"bilm\",\"bilb\",\"bils\",\"bilt\",\"bilp\",\"bilh\",\"bim\",\"bib\",\"bibs\",\"bis\",\"biss\",\"bing\",\"bij\",\"bic\",\"bik\",\"bit\",\"bip\",\"bih\",\"bba\",\"bbag\",\"bbagg\",\"bbags\",\"bban\",\"bbanj\",\"bbanh\",\"bbad\",\"bbal\",\"bbalg\",\"bbalm\",\"bbalb\",\"bbals\",\"bbalt\",\"bbalp\",\"bbalh\",\"bbam\",\"bbab\",\"bbabs\",\"bbas\",\"bbass\",\"bbang\",\"bbaj\",\"bbac\",\"bbak\",\"bbat\",\"bbap\",\"bbah\",\"bbae\",\"bbaeg\",\"bbaegg\",\"bbaegs\",\"bbaen\",\"bbaenj\",\"bbaenh\",\"bbaed\",\"bbael\",\"bbaelg\",\"bbaelm\",\"bbaelb\",\"bbaels\",\"bbaelt\",\"bbaelp\",\"bbaelh\",\"bbaem\",\"bbaeb\",\"bbaebs\",\"bbaes\",\"bbaess\",\"bbaeng\",\"bbaej\",\"bbaec\",\"bbaek\",\"bbaet\",\"bbaep\",\"bbaeh\",\"bbya\",\"bbyag\",\"bbyagg\",\"bbyags\",\"bbyan\",\"bbyanj\",\"bbyanh\",\"bbyad\",\"bbyal\",\"bbyalg\",\"bbyalm\",\"bbyalb\",\"bbyals\",\"bbyalt\",\"bbyalp\",\"bbyalh\",\"bbyam\",\"bbyab\",\"bbyabs\",\"bbyas\",\"bbyass\",\"bbyang\",\"bbyaj\",\"bbyac\",\"bbyak\",\"bbyat\",\"bbyap\",\"bbyah\",\"bbyae\",\"bbyaeg\",\"bbyaegg\",\"bbyaegs\",\"bbyaen\",\"bbyaenj\",\"bbyaenh\",\"bbyaed\",\"bbyael\",\"bbyaelg\",\"bbyaelm\",\"bbyaelb\",\"bbyaels\",\"bbyaelt\",\"bbyaelp\",\"bbyaelh\",\"bbyaem\",\"bbyaeb\",\"bbyaebs\",\"bbyaes\",\"bbyaess\",\"bbyaeng\",\"bbyaej\",\"bbyaec\",\"bbyaek\",\"bbyaet\",\"bbyaep\",\"bbyaeh\",\"bbeo\",\"bbeog\",\"bbeogg\",\"bbeogs\",\"bbeon\",\"bbeonj\",\"bbeonh\",\"bbeod\",\"bbeol\",\"bbeolg\",\"bbeolm\",\"bbeolb\",\"bbeols\",\"bbeolt\",\"bbeolp\",\"bbeolh\",\"bbeom\",\"bbeob\",\"bbeobs\",\"bbeos\",\"bbeoss\",\"bbeong\",\"bbeoj\",\"bbeoc\",\"bbeok\",\"bbeot\",\"bbeop\",\"bbeoh\",\"bbe\",\"bbeg\",\"bbegg\",\"bbegs\",\"bben\",\"bbenj\",\"bbenh\",\"bbed\",\"bbel\",\"bbelg\",\"bbelm\",\"bbelb\",\"bbels\",\"bbelt\",\"bbelp\",\"bbelh\",\"bbem\",\"bbeb\",\"bbebs\",\"bbes\"],[\"bbess\",\"bbeng\",\"bbej\",\"bbec\",\"bbek\",\"bbet\",\"bbep\",\"bbeh\",\"bbyeo\",\"bbyeog\",\"bbyeogg\",\"bbyeogs\",\"bbyeon\",\"bbyeonj\",\"bbyeonh\",\"bbyeod\",\"bbyeol\",\"bbyeolg\",\"bbyeolm\",\"bbyeolb\",\"bbyeols\",\"bbyeolt\",\"bbyeolp\",\"bbyeolh\",\"bbyeom\",\"bbyeob\",\"bbyeobs\",\"bbyeos\",\"bbyeoss\",\"bbyeong\",\"bbyeoj\",\"bbyeoc\",\"bbyeok\",\"bbyeot\",\"bbyeop\",\"bbyeoh\",\"bbye\",\"bbyeg\",\"bbyegg\",\"bbyegs\",\"bbyen\",\"bbyenj\",\"bbyenh\",\"bbyed\",\"bbyel\",\"bbyelg\",\"bbyelm\",\"bbyelb\",\"bbyels\",\"bbyelt\",\"bbyelp\",\"bbyelh\",\"bbyem\",\"bbyeb\",\"bbyebs\",\"bbyes\",\"bbyess\",\"bbyeng\",\"bbyej\",\"bbyec\",\"bbyek\",\"bbyet\",\"bbyep\",\"bbyeh\",\"bbo\",\"bbog\",\"bbogg\",\"bbogs\",\"bbon\",\"bbonj\",\"bbonh\",\"bbod\",\"bbol\",\"bbolg\",\"bbolm\",\"bbolb\",\"bbols\",\"bbolt\",\"bbolp\",\"bbolh\",\"bbom\",\"bbob\",\"bbobs\",\"bbos\",\"bboss\",\"bbong\",\"bboj\",\"bboc\",\"bbok\",\"bbot\",\"bbop\",\"bboh\",\"bbwa\",\"bbwag\",\"bbwagg\",\"bbwags\",\"bbwan\",\"bbwanj\",\"bbwanh\",\"bbwad\",\"bbwal\",\"bbwalg\",\"bbwalm\",\"bbwalb\",\"bbwals\",\"bbwalt\",\"bbwalp\",\"bbwalh\",\"bbwam\",\"bbwab\",\"bbwabs\",\"bbwas\",\"bbwass\",\"bbwang\",\"bbwaj\",\"bbwac\",\"bbwak\",\"bbwat\",\"bbwap\",\"bbwah\",\"bbwae\",\"bbwaeg\",\"bbwaegg\",\"bbwaegs\",\"bbwaen\",\"bbwaenj\",\"bbwaenh\",\"bbwaed\",\"bbwael\",\"bbwaelg\",\"bbwaelm\",\"bbwaelb\",\"bbwaels\",\"bbwaelt\",\"bbwaelp\",\"bbwaelh\",\"bbwaem\",\"bbwaeb\",\"bbwaebs\",\"bbwaes\",\"bbwaess\",\"bbwaeng\",\"bbwaej\",\"bbwaec\",\"bbwaek\",\"bbwaet\",\"bbwaep\",\"bbwaeh\",\"bboe\",\"bboeg\",\"bboegg\",\"bboegs\",\"bboen\",\"bboenj\",\"bboenh\",\"bboed\",\"bboel\",\"bboelg\",\"bboelm\",\"bboelb\",\"bboels\",\"bboelt\",\"bboelp\",\"bboelh\",\"bboem\",\"bboeb\",\"bboebs\",\"bboes\",\"bboess\",\"bboeng\",\"bboej\",\"bboec\",\"bboek\",\"bboet\",\"bboep\",\"bboeh\",\"bbyo\",\"bbyog\",\"bbyogg\",\"bbyogs\",\"bbyon\",\"bbyonj\",\"bbyonh\",\"bbyod\",\"bbyol\",\"bbyolg\",\"bbyolm\",\"bbyolb\",\"bbyols\",\"bbyolt\",\"bbyolp\",\"bbyolh\",\"bbyom\",\"bbyob\",\"bbyobs\",\"bbyos\",\"bbyoss\",\"bbyong\",\"bbyoj\",\"bbyoc\",\"bbyok\",\"bbyot\",\"bbyop\",\"bbyoh\",\"bbu\",\"bbug\",\"bbugg\",\"bbugs\",\"bbun\",\"bbunj\",\"bbunh\",\"bbud\",\"bbul\",\"bbulg\",\"bbulm\",\"bbulb\",\"bbuls\",\"bbult\",\"bbulp\",\"bbulh\",\"bbum\",\"bbub\",\"bbubs\",\"bbus\",\"bbuss\",\"bbung\",\"bbuj\",\"bbuc\",\"bbuk\",\"bbut\",\"bbup\",\"bbuh\",\"bbweo\",\"bbweog\",\"bbweogg\",\"bbweogs\",\"bbweon\",\"bbweonj\",\"bbweonh\",\"bbweod\",\"bbweol\",\"bbweolg\",\"bbweolm\",\"bbweolb\",\"bbweols\",\"bbweolt\",\"bbweolp\",\"bbweolh\",\"bbweom\",\"bbweob\",\"bbweobs\",\"bbweos\",\"bbweoss\",\"bbweong\",\"bbweoj\",\"bbweoc\"],[\"bbweok\",\"bbweot\",\"bbweop\",\"bbweoh\",\"bbwe\",\"bbweg\",\"bbwegg\",\"bbwegs\",\"bbwen\",\"bbwenj\",\"bbwenh\",\"bbwed\",\"bbwel\",\"bbwelg\",\"bbwelm\",\"bbwelb\",\"bbwels\",\"bbwelt\",\"bbwelp\",\"bbwelh\",\"bbwem\",\"bbweb\",\"bbwebs\",\"bbwes\",\"bbwess\",\"bbweng\",\"bbwej\",\"bbwec\",\"bbwek\",\"bbwet\",\"bbwep\",\"bbweh\",\"bbwi\",\"bbwig\",\"bbwigg\",\"bbwigs\",\"bbwin\",\"bbwinj\",\"bbwinh\",\"bbwid\",\"bbwil\",\"bbwilg\",\"bbwilm\",\"bbwilb\",\"bbwils\",\"bbwilt\",\"bbwilp\",\"bbwilh\",\"bbwim\",\"bbwib\",\"bbwibs\",\"bbwis\",\"bbwiss\",\"bbwing\",\"bbwij\",\"bbwic\",\"bbwik\",\"bbwit\",\"bbwip\",\"bbwih\",\"bbyu\",\"bbyug\",\"bbyugg\",\"bbyugs\",\"bbyun\",\"bbyunj\",\"bbyunh\",\"bbyud\",\"bbyul\",\"bbyulg\",\"bbyulm\",\"bbyulb\",\"bbyuls\",\"bbyult\",\"bbyulp\",\"bbyulh\",\"bbyum\",\"bbyub\",\"bbyubs\",\"bbyus\",\"bbyuss\",\"bbyung\",\"bbyuj\",\"bbyuc\",\"bbyuk\",\"bbyut\",\"bbyup\",\"bbyuh\",\"bbeu\",\"bbeug\",\"bbeugg\",\"bbeugs\",\"bbeun\",\"bbeunj\",\"bbeunh\",\"bbeud\",\"bbeul\",\"bbeulg\",\"bbeulm\",\"bbeulb\",\"bbeuls\",\"bbeult\",\"bbeulp\",\"bbeulh\",\"bbeum\",\"bbeub\",\"bbeubs\",\"bbeus\",\"bbeuss\",\"bbeung\",\"bbeuj\",\"bbeuc\",\"bbeuk\",\"bbeut\",\"bbeup\",\"bbeuh\",\"bbyi\",\"bbyig\",\"bbyigg\",\"bbyigs\",\"bbyin\",\"bbyinj\",\"bbyinh\",\"bbyid\",\"bbyil\",\"bbyilg\",\"bbyilm\",\"bbyilb\",\"bbyils\",\"bbyilt\",\"bbyilp\",\"bbyilh\",\"bbyim\",\"bbyib\",\"bbyibs\",\"bbyis\",\"bbyiss\",\"bbying\",\"bbyij\",\"bbyic\",\"bbyik\",\"bbyit\",\"bbyip\",\"bbyih\",\"bbi\",\"bbig\",\"bbigg\",\"bbigs\",\"bbin\",\"bbinj\",\"bbinh\",\"bbid\",\"bbil\",\"bbilg\",\"bbilm\",\"bbilb\",\"bbils\",\"bbilt\",\"bbilp\",\"bbilh\",\"bbim\",\"bbib\",\"bbibs\",\"bbis\",\"bbiss\",\"bbing\",\"bbij\",\"bbic\",\"bbik\",\"bbit\",\"bbip\",\"bbih\",\"sa\",\"sag\",\"sagg\",\"sags\",\"san\",\"sanj\",\"sanh\",\"sad\",\"sal\",\"salg\",\"salm\",\"salb\",\"sals\",\"salt\",\"salp\",\"salh\",\"sam\",\"sab\",\"sabs\",\"sas\",\"sass\",\"sang\",\"saj\",\"sac\",\"sak\",\"sat\",\"sap\",\"sah\",\"sae\",\"saeg\",\"saegg\",\"saegs\",\"saen\",\"saenj\",\"saenh\",\"saed\",\"sael\",\"saelg\",\"saelm\",\"saelb\",\"saels\",\"saelt\",\"saelp\",\"saelh\",\"saem\",\"saeb\",\"saebs\",\"saes\",\"saess\",\"saeng\",\"saej\",\"saec\",\"saek\",\"saet\",\"saep\",\"saeh\",\"sya\",\"syag\",\"syagg\",\"syags\",\"syan\",\"syanj\",\"syanh\",\"syad\",\"syal\",\"syalg\",\"syalm\",\"syalb\",\"syals\",\"syalt\",\"syalp\",\"syalh\",\"syam\",\"syab\",\"syabs\",\"syas\",\"syass\",\"syang\",\"syaj\",\"syac\",\"syak\",\"syat\",\"syap\",\"syah\"],[\"syae\",\"syaeg\",\"syaegg\",\"syaegs\",\"syaen\",\"syaenj\",\"syaenh\",\"syaed\",\"syael\",\"syaelg\",\"syaelm\",\"syaelb\",\"syaels\",\"syaelt\",\"syaelp\",\"syaelh\",\"syaem\",\"syaeb\",\"syaebs\",\"syaes\",\"syaess\",\"syaeng\",\"syaej\",\"syaec\",\"syaek\",\"syaet\",\"syaep\",\"syaeh\",\"seo\",\"seog\",\"seogg\",\"seogs\",\"seon\",\"seonj\",\"seonh\",\"seod\",\"seol\",\"seolg\",\"seolm\",\"seolb\",\"seols\",\"seolt\",\"seolp\",\"seolh\",\"seom\",\"seob\",\"seobs\",\"seos\",\"seoss\",\"seong\",\"seoj\",\"seoc\",\"seok\",\"seot\",\"seop\",\"seoh\",\"se\",\"seg\",\"segg\",\"segs\",\"sen\",\"senj\",\"senh\",\"sed\",\"sel\",\"selg\",\"selm\",\"selb\",\"sels\",\"selt\",\"selp\",\"selh\",\"sem\",\"seb\",\"sebs\",\"ses\",\"sess\",\"seng\",\"sej\",\"sec\",\"sek\",\"set\",\"sep\",\"seh\",\"syeo\",\"syeog\",\"syeogg\",\"syeogs\",\"syeon\",\"syeonj\",\"syeonh\",\"syeod\",\"syeol\",\"syeolg\",\"syeolm\",\"syeolb\",\"syeols\",\"syeolt\",\"syeolp\",\"syeolh\",\"syeom\",\"syeob\",\"syeobs\",\"syeos\",\"syeoss\",\"syeong\",\"syeoj\",\"syeoc\",\"syeok\",\"syeot\",\"syeop\",\"syeoh\",\"sye\",\"syeg\",\"syegg\",\"syegs\",\"syen\",\"syenj\",\"syenh\",\"syed\",\"syel\",\"syelg\",\"syelm\",\"syelb\",\"syels\",\"syelt\",\"syelp\",\"syelh\",\"syem\",\"syeb\",\"syebs\",\"syes\",\"syess\",\"syeng\",\"syej\",\"syec\",\"syek\",\"syet\",\"syep\",\"syeh\",\"so\",\"sog\",\"sogg\",\"sogs\",\"son\",\"sonj\",\"sonh\",\"sod\",\"sol\",\"solg\",\"solm\",\"solb\",\"sols\",\"solt\",\"solp\",\"solh\",\"som\",\"sob\",\"sobs\",\"sos\",\"soss\",\"song\",\"soj\",\"soc\",\"sok\",\"sot\",\"sop\",\"soh\",\"swa\",\"swag\",\"swagg\",\"swags\",\"swan\",\"swanj\",\"swanh\",\"swad\",\"swal\",\"swalg\",\"swalm\",\"swalb\",\"swals\",\"swalt\",\"swalp\",\"swalh\",\"swam\",\"swab\",\"swabs\",\"swas\",\"swass\",\"swang\",\"swaj\",\"swac\",\"swak\",\"swat\",\"swap\",\"swah\",\"swae\",\"swaeg\",\"swaegg\",\"swaegs\",\"swaen\",\"swaenj\",\"swaenh\",\"swaed\",\"swael\",\"swaelg\",\"swaelm\",\"swaelb\",\"swaels\",\"swaelt\",\"swaelp\",\"swaelh\",\"swaem\",\"swaeb\",\"swaebs\",\"swaes\",\"swaess\",\"swaeng\",\"swaej\",\"swaec\",\"swaek\",\"swaet\",\"swaep\",\"swaeh\",\"soe\",\"soeg\",\"soegg\",\"soegs\",\"soen\",\"soenj\",\"soenh\",\"soed\",\"soel\",\"soelg\",\"soelm\",\"soelb\",\"soels\",\"soelt\",\"soelp\",\"soelh\",\"soem\",\"soeb\",\"soebs\",\"soes\",\"soess\",\"soeng\",\"soej\",\"soec\",\"soek\",\"soet\",\"soep\",\"soeh\",\"syo\",\"syog\",\"syogg\",\"syogs\"],[\"syon\",\"syonj\",\"syonh\",\"syod\",\"syol\",\"syolg\",\"syolm\",\"syolb\",\"syols\",\"syolt\",\"syolp\",\"syolh\",\"syom\",\"syob\",\"syobs\",\"syos\",\"syoss\",\"syong\",\"syoj\",\"syoc\",\"syok\",\"syot\",\"syop\",\"syoh\",\"su\",\"sug\",\"sugg\",\"sugs\",\"sun\",\"sunj\",\"sunh\",\"sud\",\"sul\",\"sulg\",\"sulm\",\"sulb\",\"suls\",\"sult\",\"sulp\",\"sulh\",\"sum\",\"sub\",\"subs\",\"sus\",\"suss\",\"sung\",\"suj\",\"suc\",\"suk\",\"sut\",\"sup\",\"suh\",\"sweo\",\"sweog\",\"sweogg\",\"sweogs\",\"sweon\",\"sweonj\",\"sweonh\",\"sweod\",\"sweol\",\"sweolg\",\"sweolm\",\"sweolb\",\"sweols\",\"sweolt\",\"sweolp\",\"sweolh\",\"sweom\",\"sweob\",\"sweobs\",\"sweos\",\"sweoss\",\"sweong\",\"sweoj\",\"sweoc\",\"sweok\",\"sweot\",\"sweop\",\"sweoh\",\"swe\",\"sweg\",\"swegg\",\"swegs\",\"swen\",\"swenj\",\"swenh\",\"swed\",\"swel\",\"swelg\",\"swelm\",\"swelb\",\"swels\",\"swelt\",\"swelp\",\"swelh\",\"swem\",\"sweb\",\"swebs\",\"swes\",\"swess\",\"sweng\",\"swej\",\"swec\",\"swek\",\"swet\",\"swep\",\"sweh\",\"swi\",\"swig\",\"swigg\",\"swigs\",\"swin\",\"swinj\",\"swinh\",\"swid\",\"swil\",\"swilg\",\"swilm\",\"swilb\",\"swils\",\"swilt\",\"swilp\",\"swilh\",\"swim\",\"swib\",\"swibs\",\"swis\",\"swiss\",\"swing\",\"swij\",\"swic\",\"swik\",\"swit\",\"swip\",\"swih\",\"syu\",\"syug\",\"syugg\",\"syugs\",\"syun\",\"syunj\",\"syunh\",\"syud\",\"syul\",\"syulg\",\"syulm\",\"syulb\",\"syuls\",\"syult\",\"syulp\",\"syulh\",\"syum\",\"syub\",\"syubs\",\"syus\",\"syuss\",\"syung\",\"syuj\",\"syuc\",\"syuk\",\"syut\",\"syup\",\"syuh\",\"seu\",\"seug\",\"seugg\",\"seugs\",\"seun\",\"seunj\",\"seunh\",\"seud\",\"seul\",\"seulg\",\"seulm\",\"seulb\",\"seuls\",\"seult\",\"seulp\",\"seulh\",\"seum\",\"seub\",\"seubs\",\"seus\",\"seuss\",\"seung\",\"seuj\",\"seuc\",\"seuk\",\"seut\",\"seup\",\"seuh\",\"syi\",\"syig\",\"syigg\",\"syigs\",\"syin\",\"syinj\",\"syinh\",\"syid\",\"syil\",\"syilg\",\"syilm\",\"syilb\",\"syils\",\"syilt\",\"syilp\",\"syilh\",\"syim\",\"syib\",\"syibs\",\"syis\",\"syiss\",\"sying\",\"syij\",\"syic\",\"syik\",\"syit\",\"syip\",\"syih\",\"si\",\"sig\",\"sigg\",\"sigs\",\"sin\",\"sinj\",\"sinh\",\"sid\",\"sil\",\"silg\",\"silm\",\"silb\",\"sils\",\"silt\",\"silp\",\"silh\",\"sim\",\"sib\",\"sibs\",\"sis\",\"siss\",\"sing\",\"sij\",\"sic\",\"sik\",\"sit\",\"sip\",\"sih\",\"ssa\",\"ssag\",\"ssagg\",\"ssags\",\"ssan\",\"ssanj\",\"ssanh\",\"ssad\"],[\"ssal\",\"ssalg\",\"ssalm\",\"ssalb\",\"ssals\",\"ssalt\",\"ssalp\",\"ssalh\",\"ssam\",\"ssab\",\"ssabs\",\"ssas\",\"ssass\",\"ssang\",\"ssaj\",\"ssac\",\"ssak\",\"ssat\",\"ssap\",\"ssah\",\"ssae\",\"ssaeg\",\"ssaegg\",\"ssaegs\",\"ssaen\",\"ssaenj\",\"ssaenh\",\"ssaed\",\"ssael\",\"ssaelg\",\"ssaelm\",\"ssaelb\",\"ssaels\",\"ssaelt\",\"ssaelp\",\"ssaelh\",\"ssaem\",\"ssaeb\",\"ssaebs\",\"ssaes\",\"ssaess\",\"ssaeng\",\"ssaej\",\"ssaec\",\"ssaek\",\"ssaet\",\"ssaep\",\"ssaeh\",\"ssya\",\"ssyag\",\"ssyagg\",\"ssyags\",\"ssyan\",\"ssyanj\",\"ssyanh\",\"ssyad\",\"ssyal\",\"ssyalg\",\"ssyalm\",\"ssyalb\",\"ssyals\",\"ssyalt\",\"ssyalp\",\"ssyalh\",\"ssyam\",\"ssyab\",\"ssyabs\",\"ssyas\",\"ssyass\",\"ssyang\",\"ssyaj\",\"ssyac\",\"ssyak\",\"ssyat\",\"ssyap\",\"ssyah\",\"ssyae\",\"ssyaeg\",\"ssyaegg\",\"ssyaegs\",\"ssyaen\",\"ssyaenj\",\"ssyaenh\",\"ssyaed\",\"ssyael\",\"ssyaelg\",\"ssyaelm\",\"ssyaelb\",\"ssyaels\",\"ssyaelt\",\"ssyaelp\",\"ssyaelh\",\"ssyaem\",\"ssyaeb\",\"ssyaebs\",\"ssyaes\",\"ssyaess\",\"ssyaeng\",\"ssyaej\",\"ssyaec\",\"ssyaek\",\"ssyaet\",\"ssyaep\",\"ssyaeh\",\"sseo\",\"sseog\",\"sseogg\",\"sseogs\",\"sseon\",\"sseonj\",\"sseonh\",\"sseod\",\"sseol\",\"sseolg\",\"sseolm\",\"sseolb\",\"sseols\",\"sseolt\",\"sseolp\",\"sseolh\",\"sseom\",\"sseob\",\"sseobs\",\"sseos\",\"sseoss\",\"sseong\",\"sseoj\",\"sseoc\",\"sseok\",\"sseot\",\"sseop\",\"sseoh\",\"sse\",\"sseg\",\"ssegg\",\"ssegs\",\"ssen\",\"ssenj\",\"ssenh\",\"ssed\",\"ssel\",\"sselg\",\"sselm\",\"sselb\",\"ssels\",\"sselt\",\"sselp\",\"sselh\",\"ssem\",\"sseb\",\"ssebs\",\"sses\",\"ssess\",\"sseng\",\"ssej\",\"ssec\",\"ssek\",\"sset\",\"ssep\",\"sseh\",\"ssyeo\",\"ssyeog\",\"ssyeogg\",\"ssyeogs\",\"ssyeon\",\"ssyeonj\",\"ssyeonh\",\"ssyeod\",\"ssyeol\",\"ssyeolg\",\"ssyeolm\",\"ssyeolb\",\"ssyeols\",\"ssyeolt\",\"ssyeolp\",\"ssyeolh\",\"ssyeom\",\"ssyeob\",\"ssyeobs\",\"ssyeos\",\"ssyeoss\",\"ssyeong\",\"ssyeoj\",\"ssyeoc\",\"ssyeok\",\"ssyeot\",\"ssyeop\",\"ssyeoh\",\"ssye\",\"ssyeg\",\"ssyegg\",\"ssyegs\",\"ssyen\",\"ssyenj\",\"ssyenh\",\"ssyed\",\"ssyel\",\"ssyelg\",\"ssyelm\",\"ssyelb\",\"ssyels\",\"ssyelt\",\"ssyelp\",\"ssyelh\",\"ssyem\",\"ssyeb\",\"ssyebs\",\"ssyes\",\"ssyess\",\"ssyeng\",\"ssyej\",\"ssyec\",\"ssyek\",\"ssyet\",\"ssyep\",\"ssyeh\",\"sso\",\"ssog\",\"ssogg\",\"ssogs\",\"sson\",\"ssonj\",\"ssonh\",\"ssod\",\"ssol\",\"ssolg\",\"ssolm\",\"ssolb\",\"ssols\",\"ssolt\",\"ssolp\",\"ssolh\",\"ssom\",\"ssob\",\"ssobs\",\"ssos\",\"ssoss\",\"ssong\",\"ssoj\",\"ssoc\",\"ssok\",\"ssot\",\"ssop\",\"ssoh\",\"sswa\",\"sswag\",\"sswagg\",\"sswags\",\"sswan\",\"sswanj\",\"sswanh\",\"sswad\",\"sswal\",\"sswalg\",\"sswalm\",\"sswalb\"],[\"sswals\",\"sswalt\",\"sswalp\",\"sswalh\",\"sswam\",\"sswab\",\"sswabs\",\"sswas\",\"sswass\",\"sswang\",\"sswaj\",\"sswac\",\"sswak\",\"sswat\",\"sswap\",\"sswah\",\"sswae\",\"sswaeg\",\"sswaegg\",\"sswaegs\",\"sswaen\",\"sswaenj\",\"sswaenh\",\"sswaed\",\"sswael\",\"sswaelg\",\"sswaelm\",\"sswaelb\",\"sswaels\",\"sswaelt\",\"sswaelp\",\"sswaelh\",\"sswaem\",\"sswaeb\",\"sswaebs\",\"sswaes\",\"sswaess\",\"sswaeng\",\"sswaej\",\"sswaec\",\"sswaek\",\"sswaet\",\"sswaep\",\"sswaeh\",\"ssoe\",\"ssoeg\",\"ssoegg\",\"ssoegs\",\"ssoen\",\"ssoenj\",\"ssoenh\",\"ssoed\",\"ssoel\",\"ssoelg\",\"ssoelm\",\"ssoelb\",\"ssoels\",\"ssoelt\",\"ssoelp\",\"ssoelh\",\"ssoem\",\"ssoeb\",\"ssoebs\",\"ssoes\",\"ssoess\",\"ssoeng\",\"ssoej\",\"ssoec\",\"ssoek\",\"ssoet\",\"ssoep\",\"ssoeh\",\"ssyo\",\"ssyog\",\"ssyogg\",\"ssyogs\",\"ssyon\",\"ssyonj\",\"ssyonh\",\"ssyod\",\"ssyol\",\"ssyolg\",\"ssyolm\",\"ssyolb\",\"ssyols\",\"ssyolt\",\"ssyolp\",\"ssyolh\",\"ssyom\",\"ssyob\",\"ssyobs\",\"ssyos\",\"ssyoss\",\"ssyong\",\"ssyoj\",\"ssyoc\",\"ssyok\",\"ssyot\",\"ssyop\",\"ssyoh\",\"ssu\",\"ssug\",\"ssugg\",\"ssugs\",\"ssun\",\"ssunj\",\"ssunh\",\"ssud\",\"ssul\",\"ssulg\",\"ssulm\",\"ssulb\",\"ssuls\",\"ssult\",\"ssulp\",\"ssulh\",\"ssum\",\"ssub\",\"ssubs\",\"ssus\",\"ssuss\",\"ssung\",\"ssuj\",\"ssuc\",\"ssuk\",\"ssut\",\"ssup\",\"ssuh\",\"ssweo\",\"ssweog\",\"ssweogg\",\"ssweogs\",\"ssweon\",\"ssweonj\",\"ssweonh\",\"ssweod\",\"ssweol\",\"ssweolg\",\"ssweolm\",\"ssweolb\",\"ssweols\",\"ssweolt\",\"ssweolp\",\"ssweolh\",\"ssweom\",\"ssweob\",\"ssweobs\",\"ssweos\",\"ssweoss\",\"ssweong\",\"ssweoj\",\"ssweoc\",\"ssweok\",\"ssweot\",\"ssweop\",\"ssweoh\",\"sswe\",\"ssweg\",\"sswegg\",\"sswegs\",\"sswen\",\"sswenj\",\"sswenh\",\"sswed\",\"sswel\",\"sswelg\",\"sswelm\",\"sswelb\",\"sswels\",\"sswelt\",\"sswelp\",\"sswelh\",\"sswem\",\"ssweb\",\"sswebs\",\"sswes\",\"sswess\",\"ssweng\",\"sswej\",\"sswec\",\"sswek\",\"sswet\",\"sswep\",\"ssweh\",\"sswi\",\"sswig\",\"sswigg\",\"sswigs\",\"sswin\",\"sswinj\",\"sswinh\",\"sswid\",\"sswil\",\"sswilg\",\"sswilm\",\"sswilb\",\"sswils\",\"sswilt\",\"sswilp\",\"sswilh\",\"sswim\",\"sswib\",\"sswibs\",\"sswis\",\"sswiss\",\"sswing\",\"sswij\",\"sswic\",\"sswik\",\"sswit\",\"sswip\",\"sswih\",\"ssyu\",\"ssyug\",\"ssyugg\",\"ssyugs\",\"ssyun\",\"ssyunj\",\"ssyunh\",\"ssyud\",\"ssyul\",\"ssyulg\",\"ssyulm\",\"ssyulb\",\"ssyuls\",\"ssyult\",\"ssyulp\",\"ssyulh\",\"ssyum\",\"ssyub\",\"ssyubs\",\"ssyus\",\"ssyuss\",\"ssyung\",\"ssyuj\",\"ssyuc\",\"ssyuk\",\"ssyut\",\"ssyup\",\"ssyuh\",\"sseu\",\"sseug\",\"sseugg\",\"sseugs\",\"sseun\",\"sseunj\",\"sseunh\",\"sseud\",\"sseul\",\"sseulg\",\"sseulm\",\"sseulb\",\"sseuls\",\"sseult\",\"sseulp\",\"sseulh\"],[\"sseum\",\"sseub\",\"sseubs\",\"sseus\",\"sseuss\",\"sseung\",\"sseuj\",\"sseuc\",\"sseuk\",\"sseut\",\"sseup\",\"sseuh\",\"ssyi\",\"ssyig\",\"ssyigg\",\"ssyigs\",\"ssyin\",\"ssyinj\",\"ssyinh\",\"ssyid\",\"ssyil\",\"ssyilg\",\"ssyilm\",\"ssyilb\",\"ssyils\",\"ssyilt\",\"ssyilp\",\"ssyilh\",\"ssyim\",\"ssyib\",\"ssyibs\",\"ssyis\",\"ssyiss\",\"ssying\",\"ssyij\",\"ssyic\",\"ssyik\",\"ssyit\",\"ssyip\",\"ssyih\",\"ssi\",\"ssig\",\"ssigg\",\"ssigs\",\"ssin\",\"ssinj\",\"ssinh\",\"ssid\",\"ssil\",\"ssilg\",\"ssilm\",\"ssilb\",\"ssils\",\"ssilt\",\"ssilp\",\"ssilh\",\"ssim\",\"ssib\",\"ssibs\",\"ssis\",\"ssiss\",\"ssing\",\"ssij\",\"ssic\",\"ssik\",\"ssit\",\"ssip\",\"ssih\",\"a\",\"ag\",\"agg\",\"ags\",\"an\",\"anj\",\"anh\",\"ad\",\"al\",\"alg\",\"alm\",\"alb\",\"als\",\"alt\",\"alp\",\"alh\",\"am\",\"ab\",\"abs\",\"as\",\"ass\",\"ang\",\"aj\",\"ac\",\"ak\",\"at\",\"ap\",\"ah\",\"ae\",\"aeg\",\"aegg\",\"aegs\",\"aen\",\"aenj\",\"aenh\",\"aed\",\"ael\",\"aelg\",\"aelm\",\"aelb\",\"aels\",\"aelt\",\"aelp\",\"aelh\",\"aem\",\"aeb\",\"aebs\",\"aes\",\"aess\",\"aeng\",\"aej\",\"aec\",\"aek\",\"aet\",\"aep\",\"aeh\",\"ya\",\"yag\",\"yagg\",\"yags\",\"yan\",\"yanj\",\"yanh\",\"yad\",\"yal\",\"yalg\",\"yalm\",\"yalb\",\"yals\",\"yalt\",\"yalp\",\"yalh\",\"yam\",\"yab\",\"yabs\",\"yas\",\"yass\",\"yang\",\"yaj\",\"yac\",\"yak\",\"yat\",\"yap\",\"yah\",\"yae\",\"yaeg\",\"yaegg\",\"yaegs\",\"yaen\",\"yaenj\",\"yaenh\",\"yaed\",\"yael\",\"yaelg\",\"yaelm\",\"yaelb\",\"yaels\",\"yaelt\",\"yaelp\",\"yaelh\",\"yaem\",\"yaeb\",\"yaebs\",\"yaes\",\"yaess\",\"yaeng\",\"yaej\",\"yaec\",\"yaek\",\"yaet\",\"yaep\",\"yaeh\",\"eo\",\"eog\",\"eogg\",\"eogs\",\"eon\",\"eonj\",\"eonh\",\"eod\",\"eol\",\"eolg\",\"eolm\",\"eolb\",\"eols\",\"eolt\",\"eolp\",\"eolh\",\"eom\",\"eob\",\"eobs\",\"eos\",\"eoss\",\"eong\",\"eoj\",\"eoc\",\"eok\",\"eot\",\"eop\",\"eoh\",\"e\",\"eg\",\"egg\",\"egs\",\"en\",\"enj\",\"enh\",\"ed\",\"el\",\"elg\",\"elm\",\"elb\",\"els\",\"elt\",\"elp\",\"elh\",\"em\",\"eb\",\"ebs\",\"es\",\"ess\",\"eng\",\"ej\",\"ec\",\"ek\",\"et\",\"ep\",\"eh\",\"yeo\",\"yeog\",\"yeogg\",\"yeogs\",\"yeon\",\"yeonj\",\"yeonh\",\"yeod\",\"yeol\",\"yeolg\",\"yeolm\",\"yeolb\",\"yeols\",\"yeolt\",\"yeolp\",\"yeolh\",\"yeom\",\"yeob\",\"yeobs\",\"yeos\"],[\"yeoss\",\"yeong\",\"yeoj\",\"yeoc\",\"yeok\",\"yeot\",\"yeop\",\"yeoh\",\"ye\",\"yeg\",\"yegg\",\"yegs\",\"yen\",\"yenj\",\"yenh\",\"yed\",\"yel\",\"yelg\",\"yelm\",\"yelb\",\"yels\",\"yelt\",\"yelp\",\"yelh\",\"yem\",\"yeb\",\"yebs\",\"yes\",\"yess\",\"yeng\",\"yej\",\"yec\",\"yek\",\"yet\",\"yep\",\"yeh\",\"o\",\"og\",\"ogg\",\"ogs\",\"on\",\"onj\",\"onh\",\"od\",\"ol\",\"olg\",\"olm\",\"olb\",\"ols\",\"olt\",\"olp\",\"olh\",\"om\",\"ob\",\"obs\",\"os\",\"oss\",\"ong\",\"oj\",\"oc\",\"ok\",\"ot\",\"op\",\"oh\",\"wa\",\"wag\",\"wagg\",\"wags\",\"wan\",\"wanj\",\"wanh\",\"wad\",\"wal\",\"walg\",\"walm\",\"walb\",\"wals\",\"walt\",\"walp\",\"walh\",\"wam\",\"wab\",\"wabs\",\"was\",\"wass\",\"wang\",\"waj\",\"wac\",\"wak\",\"wat\",\"wap\",\"wah\",\"wae\",\"waeg\",\"waegg\",\"waegs\",\"waen\",\"waenj\",\"waenh\",\"waed\",\"wael\",\"waelg\",\"waelm\",\"waelb\",\"waels\",\"waelt\",\"waelp\",\"waelh\",\"waem\",\"waeb\",\"waebs\",\"waes\",\"waess\",\"waeng\",\"waej\",\"waec\",\"waek\",\"waet\",\"waep\",\"waeh\",\"oe\",\"oeg\",\"oegg\",\"oegs\",\"oen\",\"oenj\",\"oenh\",\"oed\",\"oel\",\"oelg\",\"oelm\",\"oelb\",\"oels\",\"oelt\",\"oelp\",\"oelh\",\"oem\",\"oeb\",\"oebs\",\"oes\",\"oess\",\"oeng\",\"oej\",\"oec\",\"oek\",\"oet\",\"oep\",\"oeh\",\"yo\",\"yog\",\"yogg\",\"yogs\",\"yon\",\"yonj\",\"yonh\",\"yod\",\"yol\",\"yolg\",\"yolm\",\"yolb\",\"yols\",\"yolt\",\"yolp\",\"yolh\",\"yom\",\"yob\",\"yobs\",\"yos\",\"yoss\",\"yong\",\"yoj\",\"yoc\",\"yok\",\"yot\",\"yop\",\"yoh\",\"u\",\"ug\",\"ugg\",\"ugs\",\"un\",\"unj\",\"unh\",\"ud\",\"ul\",\"ulg\",\"ulm\",\"ulb\",\"uls\",\"ult\",\"ulp\",\"ulh\",\"um\",\"ub\",\"ubs\",\"us\",\"uss\",\"ung\",\"uj\",\"uc\",\"uk\",\"ut\",\"up\",\"uh\",\"weo\",\"weog\",\"weogg\",\"weogs\",\"weon\",\"weonj\",\"weonh\",\"weod\",\"weol\",\"weolg\",\"weolm\",\"weolb\",\"weols\",\"weolt\",\"weolp\",\"weolh\",\"weom\",\"weob\",\"weobs\",\"weos\",\"weoss\",\"weong\",\"weoj\",\"weoc\",\"weok\",\"weot\",\"weop\",\"weoh\",\"we\",\"weg\",\"wegg\",\"wegs\",\"wen\",\"wenj\",\"wenh\",\"wed\",\"wel\",\"welg\",\"welm\",\"welb\",\"wels\",\"welt\",\"welp\",\"welh\",\"wem\",\"web\",\"webs\",\"wes\",\"wess\",\"weng\",\"wej\",\"wec\"],[\"wek\",\"wet\",\"wep\",\"weh\",\"wi\",\"wig\",\"wigg\",\"wigs\",\"win\",\"winj\",\"winh\",\"wid\",\"wil\",\"wilg\",\"wilm\",\"wilb\",\"wils\",\"wilt\",\"wilp\",\"wilh\",\"wim\",\"wib\",\"wibs\",\"wis\",\"wiss\",\"wing\",\"wij\",\"wic\",\"wik\",\"wit\",\"wip\",\"wih\",\"yu\",\"yug\",\"yugg\",\"yugs\",\"yun\",\"yunj\",\"yunh\",\"yud\",\"yul\",\"yulg\",\"yulm\",\"yulb\",\"yuls\",\"yult\",\"yulp\",\"yulh\",\"yum\",\"yub\",\"yubs\",\"yus\",\"yuss\",\"yung\",\"yuj\",\"yuc\",\"yuk\",\"yut\",\"yup\",\"yuh\",\"eu\",\"eug\",\"eugg\",\"eugs\",\"eun\",\"eunj\",\"eunh\",\"eud\",\"eul\",\"eulg\",\"eulm\",\"eulb\",\"euls\",\"eult\",\"eulp\",\"eulh\",\"eum\",\"eub\",\"eubs\",\"eus\",\"euss\",\"eung\",\"euj\",\"euc\",\"euk\",\"eut\",\"eup\",\"euh\",\"yi\",\"yig\",\"yigg\",\"yigs\",\"yin\",\"yinj\",\"yinh\",\"yid\",\"yil\",\"yilg\",\"yilm\",\"yilb\",\"yils\",\"yilt\",\"yilp\",\"yilh\",\"yim\",\"yib\",\"yibs\",\"yis\",\"yiss\",\"ying\",\"yij\",\"yic\",\"yik\",\"yit\",\"yip\",\"yih\",\"i\",\"ig\",\"igg\",\"igs\",\"in\",\"inj\",\"inh\",\"id\",\"il\",\"ilg\",\"ilm\",\"ilb\",\"ils\",\"ilt\",\"ilp\",\"ilh\",\"im\",\"ib\",\"ibs\",\"is\",\"iss\",\"ing\",\"ij\",\"ic\",\"ik\",\"it\",\"ip\",\"ih\",\"ja\",\"jag\",\"jagg\",\"jags\",\"jan\",\"janj\",\"janh\",\"jad\",\"jal\",\"jalg\",\"jalm\",\"jalb\",\"jals\",\"jalt\",\"jalp\",\"jalh\",\"jam\",\"jab\",\"jabs\",\"jas\",\"jass\",\"jang\",\"jaj\",\"jac\",\"jak\",\"jat\",\"jap\",\"jah\",\"jae\",\"jaeg\",\"jaegg\",\"jaegs\",\"jaen\",\"jaenj\",\"jaenh\",\"jaed\",\"jael\",\"jaelg\",\"jaelm\",\"jaelb\",\"jaels\",\"jaelt\",\"jaelp\",\"jaelh\",\"jaem\",\"jaeb\",\"jaebs\",\"jaes\",\"jaess\",\"jaeng\",\"jaej\",\"jaec\",\"jaek\",\"jaet\",\"jaep\",\"jaeh\",\"jya\",\"jyag\",\"jyagg\",\"jyags\",\"jyan\",\"jyanj\",\"jyanh\",\"jyad\",\"jyal\",\"jyalg\",\"jyalm\",\"jyalb\",\"jyals\",\"jyalt\",\"jyalp\",\"jyalh\",\"jyam\",\"jyab\",\"jyabs\",\"jyas\",\"jyass\",\"jyang\",\"jyaj\",\"jyac\",\"jyak\",\"jyat\",\"jyap\",\"jyah\",\"jyae\",\"jyaeg\",\"jyaegg\",\"jyaegs\",\"jyaen\",\"jyaenj\",\"jyaenh\",\"jyaed\",\"jyael\",\"jyaelg\",\"jyaelm\",\"jyaelb\",\"jyaels\",\"jyaelt\",\"jyaelp\",\"jyaelh\",\"jyaem\",\"jyaeb\",\"jyaebs\",\"jyaes\",\"jyaess\",\"jyaeng\",\"jyaej\",\"jyaec\",\"jyaek\",\"jyaet\",\"jyaep\",\"jyaeh\"],[\"jeo\",\"jeog\",\"jeogg\",\"jeogs\",\"jeon\",\"jeonj\",\"jeonh\",\"jeod\",\"jeol\",\"jeolg\",\"jeolm\",\"jeolb\",\"jeols\",\"jeolt\",\"jeolp\",\"jeolh\",\"jeom\",\"jeob\",\"jeobs\",\"jeos\",\"jeoss\",\"jeong\",\"jeoj\",\"jeoc\",\"jeok\",\"jeot\",\"jeop\",\"jeoh\",\"je\",\"jeg\",\"jegg\",\"jegs\",\"jen\",\"jenj\",\"jenh\",\"jed\",\"jel\",\"jelg\",\"jelm\",\"jelb\",\"jels\",\"jelt\",\"jelp\",\"jelh\",\"jem\",\"jeb\",\"jebs\",\"jes\",\"jess\",\"jeng\",\"jej\",\"jec\",\"jek\",\"jet\",\"jep\",\"jeh\",\"jyeo\",\"jyeog\",\"jyeogg\",\"jyeogs\",\"jyeon\",\"jyeonj\",\"jyeonh\",\"jyeod\",\"jyeol\",\"jyeolg\",\"jyeolm\",\"jyeolb\",\"jyeols\",\"jyeolt\",\"jyeolp\",\"jyeolh\",\"jyeom\",\"jyeob\",\"jyeobs\",\"jyeos\",\"jyeoss\",\"jyeong\",\"jyeoj\",\"jyeoc\",\"jyeok\",\"jyeot\",\"jyeop\",\"jyeoh\",\"jye\",\"jyeg\",\"jyegg\",\"jyegs\",\"jyen\",\"jyenj\",\"jyenh\",\"jyed\",\"jyel\",\"jyelg\",\"jyelm\",\"jyelb\",\"jyels\",\"jyelt\",\"jyelp\",\"jyelh\",\"jyem\",\"jyeb\",\"jyebs\",\"jyes\",\"jyess\",\"jyeng\",\"jyej\",\"jyec\",\"jyek\",\"jyet\",\"jyep\",\"jyeh\",\"jo\",\"jog\",\"jogg\",\"jogs\",\"jon\",\"jonj\",\"jonh\",\"jod\",\"jol\",\"jolg\",\"jolm\",\"jolb\",\"jols\",\"jolt\",\"jolp\",\"jolh\",\"jom\",\"job\",\"jobs\",\"jos\",\"joss\",\"jong\",\"joj\",\"joc\",\"jok\",\"jot\",\"jop\",\"joh\",\"jwa\",\"jwag\",\"jwagg\",\"jwags\",\"jwan\",\"jwanj\",\"jwanh\",\"jwad\",\"jwal\",\"jwalg\",\"jwalm\",\"jwalb\",\"jwals\",\"jwalt\",\"jwalp\",\"jwalh\",\"jwam\",\"jwab\",\"jwabs\",\"jwas\",\"jwass\",\"jwang\",\"jwaj\",\"jwac\",\"jwak\",\"jwat\",\"jwap\",\"jwah\",\"jwae\",\"jwaeg\",\"jwaegg\",\"jwaegs\",\"jwaen\",\"jwaenj\",\"jwaenh\",\"jwaed\",\"jwael\",\"jwaelg\",\"jwaelm\",\"jwaelb\",\"jwaels\",\"jwaelt\",\"jwaelp\",\"jwaelh\",\"jwaem\",\"jwaeb\",\"jwaebs\",\"jwaes\",\"jwaess\",\"jwaeng\",\"jwaej\",\"jwaec\",\"jwaek\",\"jwaet\",\"jwaep\",\"jwaeh\",\"joe\",\"joeg\",\"joegg\",\"joegs\",\"joen\",\"joenj\",\"joenh\",\"joed\",\"joel\",\"joelg\",\"joelm\",\"joelb\",\"joels\",\"joelt\",\"joelp\",\"joelh\",\"joem\",\"joeb\",\"joebs\",\"joes\",\"joess\",\"joeng\",\"joej\",\"joec\",\"joek\",\"joet\",\"joep\",\"joeh\",\"jyo\",\"jyog\",\"jyogg\",\"jyogs\",\"jyon\",\"jyonj\",\"jyonh\",\"jyod\",\"jyol\",\"jyolg\",\"jyolm\",\"jyolb\",\"jyols\",\"jyolt\",\"jyolp\",\"jyolh\",\"jyom\",\"jyob\",\"jyobs\",\"jyos\",\"jyoss\",\"jyong\",\"jyoj\",\"jyoc\",\"jyok\",\"jyot\",\"jyop\",\"jyoh\",\"ju\",\"jug\",\"jugg\",\"jugs\"],[\"jun\",\"junj\",\"junh\",\"jud\",\"jul\",\"julg\",\"julm\",\"julb\",\"juls\",\"jult\",\"julp\",\"julh\",\"jum\",\"jub\",\"jubs\",\"jus\",\"juss\",\"jung\",\"juj\",\"juc\",\"juk\",\"jut\",\"jup\",\"juh\",\"jweo\",\"jweog\",\"jweogg\",\"jweogs\",\"jweon\",\"jweonj\",\"jweonh\",\"jweod\",\"jweol\",\"jweolg\",\"jweolm\",\"jweolb\",\"jweols\",\"jweolt\",\"jweolp\",\"jweolh\",\"jweom\",\"jweob\",\"jweobs\",\"jweos\",\"jweoss\",\"jweong\",\"jweoj\",\"jweoc\",\"jweok\",\"jweot\",\"jweop\",\"jweoh\",\"jwe\",\"jweg\",\"jwegg\",\"jwegs\",\"jwen\",\"jwenj\",\"jwenh\",\"jwed\",\"jwel\",\"jwelg\",\"jwelm\",\"jwelb\",\"jwels\",\"jwelt\",\"jwelp\",\"jwelh\",\"jwem\",\"jweb\",\"jwebs\",\"jwes\",\"jwess\",\"jweng\",\"jwej\",\"jwec\",\"jwek\",\"jwet\",\"jwep\",\"jweh\",\"jwi\",\"jwig\",\"jwigg\",\"jwigs\",\"jwin\",\"jwinj\",\"jwinh\",\"jwid\",\"jwil\",\"jwilg\",\"jwilm\",\"jwilb\",\"jwils\",\"jwilt\",\"jwilp\",\"jwilh\",\"jwim\",\"jwib\",\"jwibs\",\"jwis\",\"jwiss\",\"jwing\",\"jwij\",\"jwic\",\"jwik\",\"jwit\",\"jwip\",\"jwih\",\"jyu\",\"jyug\",\"jyugg\",\"jyugs\",\"jyun\",\"jyunj\",\"jyunh\",\"jyud\",\"jyul\",\"jyulg\",\"jyulm\",\"jyulb\",\"jyuls\",\"jyult\",\"jyulp\",\"jyulh\",\"jyum\",\"jyub\",\"jyubs\",\"jyus\",\"jyuss\",\"jyung\",\"jyuj\",\"jyuc\",\"jyuk\",\"jyut\",\"jyup\",\"jyuh\",\"jeu\",\"jeug\",\"jeugg\",\"jeugs\",\"jeun\",\"jeunj\",\"jeunh\",\"jeud\",\"jeul\",\"jeulg\",\"jeulm\",\"jeulb\",\"jeuls\",\"jeult\",\"jeulp\",\"jeulh\",\"jeum\",\"jeub\",\"jeubs\",\"jeus\",\"jeuss\",\"jeung\",\"jeuj\",\"jeuc\",\"jeuk\",\"jeut\",\"jeup\",\"jeuh\",\"jyi\",\"jyig\",\"jyigg\",\"jyigs\",\"jyin\",\"jyinj\",\"jyinh\",\"jyid\",\"jyil\",\"jyilg\",\"jyilm\",\"jyilb\",\"jyils\",\"jyilt\",\"jyilp\",\"jyilh\",\"jyim\",\"jyib\",\"jyibs\",\"jyis\",\"jyiss\",\"jying\",\"jyij\",\"jyic\",\"jyik\",\"jyit\",\"jyip\",\"jyih\",\"ji\",\"jig\",\"jigg\",\"jigs\",\"jin\",\"jinj\",\"jinh\",\"jid\",\"jil\",\"jilg\",\"jilm\",\"jilb\",\"jils\",\"jilt\",\"jilp\",\"jilh\",\"jim\",\"jib\",\"jibs\",\"jis\",\"jiss\",\"jing\",\"jij\",\"jic\",\"jik\",\"jit\",\"jip\",\"jih\",\"jja\",\"jjag\",\"jjagg\",\"jjags\",\"jjan\",\"jjanj\",\"jjanh\",\"jjad\",\"jjal\",\"jjalg\",\"jjalm\",\"jjalb\",\"jjals\",\"jjalt\",\"jjalp\",\"jjalh\",\"jjam\",\"jjab\",\"jjabs\",\"jjas\",\"jjass\",\"jjang\",\"jjaj\",\"jjac\",\"jjak\",\"jjat\",\"jjap\",\"jjah\",\"jjae\",\"jjaeg\",\"jjaegg\",\"jjaegs\",\"jjaen\",\"jjaenj\",\"jjaenh\",\"jjaed\"],[\"jjael\",\"jjaelg\",\"jjaelm\",\"jjaelb\",\"jjaels\",\"jjaelt\",\"jjaelp\",\"jjaelh\",\"jjaem\",\"jjaeb\",\"jjaebs\",\"jjaes\",\"jjaess\",\"jjaeng\",\"jjaej\",\"jjaec\",\"jjaek\",\"jjaet\",\"jjaep\",\"jjaeh\",\"jjya\",\"jjyag\",\"jjyagg\",\"jjyags\",\"jjyan\",\"jjyanj\",\"jjyanh\",\"jjyad\",\"jjyal\",\"jjyalg\",\"jjyalm\",\"jjyalb\",\"jjyals\",\"jjyalt\",\"jjyalp\",\"jjyalh\",\"jjyam\",\"jjyab\",\"jjyabs\",\"jjyas\",\"jjyass\",\"jjyang\",\"jjyaj\",\"jjyac\",\"jjyak\",\"jjyat\",\"jjyap\",\"jjyah\",\"jjyae\",\"jjyaeg\",\"jjyaegg\",\"jjyaegs\",\"jjyaen\",\"jjyaenj\",\"jjyaenh\",\"jjyaed\",\"jjyael\",\"jjyaelg\",\"jjyaelm\",\"jjyaelb\",\"jjyaels\",\"jjyaelt\",\"jjyaelp\",\"jjyaelh\",\"jjyaem\",\"jjyaeb\",\"jjyaebs\",\"jjyaes\",\"jjyaess\",\"jjyaeng\",\"jjyaej\",\"jjyaec\",\"jjyaek\",\"jjyaet\",\"jjyaep\",\"jjyaeh\",\"jjeo\",\"jjeog\",\"jjeogg\",\"jjeogs\",\"jjeon\",\"jjeonj\",\"jjeonh\",\"jjeod\",\"jjeol\",\"jjeolg\",\"jjeolm\",\"jjeolb\",\"jjeols\",\"jjeolt\",\"jjeolp\",\"jjeolh\",\"jjeom\",\"jjeob\",\"jjeobs\",\"jjeos\",\"jjeoss\",\"jjeong\",\"jjeoj\",\"jjeoc\",\"jjeok\",\"jjeot\",\"jjeop\",\"jjeoh\",\"jje\",\"jjeg\",\"jjegg\",\"jjegs\",\"jjen\",\"jjenj\",\"jjenh\",\"jjed\",\"jjel\",\"jjelg\",\"jjelm\",\"jjelb\",\"jjels\",\"jjelt\",\"jjelp\",\"jjelh\",\"jjem\",\"jjeb\",\"jjebs\",\"jjes\",\"jjess\",\"jjeng\",\"jjej\",\"jjec\",\"jjek\",\"jjet\",\"jjep\",\"jjeh\",\"jjyeo\",\"jjyeog\",\"jjyeogg\",\"jjyeogs\",\"jjyeon\",\"jjyeonj\",\"jjyeonh\",\"jjyeod\",\"jjyeol\",\"jjyeolg\",\"jjyeolm\",\"jjyeolb\",\"jjyeols\",\"jjyeolt\",\"jjyeolp\",\"jjyeolh\",\"jjyeom\",\"jjyeob\",\"jjyeobs\",\"jjyeos\",\"jjyeoss\",\"jjyeong\",\"jjyeoj\",\"jjyeoc\",\"jjyeok\",\"jjyeot\",\"jjyeop\",\"jjyeoh\",\"jjye\",\"jjyeg\",\"jjyegg\",\"jjyegs\",\"jjyen\",\"jjyenj\",\"jjyenh\",\"jjyed\",\"jjyel\",\"jjyelg\",\"jjyelm\",\"jjyelb\",\"jjyels\",\"jjyelt\",\"jjyelp\",\"jjyelh\",\"jjyem\",\"jjyeb\",\"jjyebs\",\"jjyes\",\"jjyess\",\"jjyeng\",\"jjyej\",\"jjyec\",\"jjyek\",\"jjyet\",\"jjyep\",\"jjyeh\",\"jjo\",\"jjog\",\"jjogg\",\"jjogs\",\"jjon\",\"jjonj\",\"jjonh\",\"jjod\",\"jjol\",\"jjolg\",\"jjolm\",\"jjolb\",\"jjols\",\"jjolt\",\"jjolp\",\"jjolh\",\"jjom\",\"jjob\",\"jjobs\",\"jjos\",\"jjoss\",\"jjong\",\"jjoj\",\"jjoc\",\"jjok\",\"jjot\",\"jjop\",\"jjoh\",\"jjwa\",\"jjwag\",\"jjwagg\",\"jjwags\",\"jjwan\",\"jjwanj\",\"jjwanh\",\"jjwad\",\"jjwal\",\"jjwalg\",\"jjwalm\",\"jjwalb\",\"jjwals\",\"jjwalt\",\"jjwalp\",\"jjwalh\",\"jjwam\",\"jjwab\",\"jjwabs\",\"jjwas\",\"jjwass\",\"jjwang\",\"jjwaj\",\"jjwac\",\"jjwak\",\"jjwat\",\"jjwap\",\"jjwah\",\"jjwae\",\"jjwaeg\",\"jjwaegg\",\"jjwaegs\",\"jjwaen\",\"jjwaenj\",\"jjwaenh\",\"jjwaed\",\"jjwael\",\"jjwaelg\",\"jjwaelm\",\"jjwaelb\"],[\"jjwaels\",\"jjwaelt\",\"jjwaelp\",\"jjwaelh\",\"jjwaem\",\"jjwaeb\",\"jjwaebs\",\"jjwaes\",\"jjwaess\",\"jjwaeng\",\"jjwaej\",\"jjwaec\",\"jjwaek\",\"jjwaet\",\"jjwaep\",\"jjwaeh\",\"jjoe\",\"jjoeg\",\"jjoegg\",\"jjoegs\",\"jjoen\",\"jjoenj\",\"jjoenh\",\"jjoed\",\"jjoel\",\"jjoelg\",\"jjoelm\",\"jjoelb\",\"jjoels\",\"jjoelt\",\"jjoelp\",\"jjoelh\",\"jjoem\",\"jjoeb\",\"jjoebs\",\"jjoes\",\"jjoess\",\"jjoeng\",\"jjoej\",\"jjoec\",\"jjoek\",\"jjoet\",\"jjoep\",\"jjoeh\",\"jjyo\",\"jjyog\",\"jjyogg\",\"jjyogs\",\"jjyon\",\"jjyonj\",\"jjyonh\",\"jjyod\",\"jjyol\",\"jjyolg\",\"jjyolm\",\"jjyolb\",\"jjyols\",\"jjyolt\",\"jjyolp\",\"jjyolh\",\"jjyom\",\"jjyob\",\"jjyobs\",\"jjyos\",\"jjyoss\",\"jjyong\",\"jjyoj\",\"jjyoc\",\"jjyok\",\"jjyot\",\"jjyop\",\"jjyoh\",\"jju\",\"jjug\",\"jjugg\",\"jjugs\",\"jjun\",\"jjunj\",\"jjunh\",\"jjud\",\"jjul\",\"jjulg\",\"jjulm\",\"jjulb\",\"jjuls\",\"jjult\",\"jjulp\",\"jjulh\",\"jjum\",\"jjub\",\"jjubs\",\"jjus\",\"jjuss\",\"jjung\",\"jjuj\",\"jjuc\",\"jjuk\",\"jjut\",\"jjup\",\"jjuh\",\"jjweo\",\"jjweog\",\"jjweogg\",\"jjweogs\",\"jjweon\",\"jjweonj\",\"jjweonh\",\"jjweod\",\"jjweol\",\"jjweolg\",\"jjweolm\",\"jjweolb\",\"jjweols\",\"jjweolt\",\"jjweolp\",\"jjweolh\",\"jjweom\",\"jjweob\",\"jjweobs\",\"jjweos\",\"jjweoss\",\"jjweong\",\"jjweoj\",\"jjweoc\",\"jjweok\",\"jjweot\",\"jjweop\",\"jjweoh\",\"jjwe\",\"jjweg\",\"jjwegg\",\"jjwegs\",\"jjwen\",\"jjwenj\",\"jjwenh\",\"jjwed\",\"jjwel\",\"jjwelg\",\"jjwelm\",\"jjwelb\",\"jjwels\",\"jjwelt\",\"jjwelp\",\"jjwelh\",\"jjwem\",\"jjweb\",\"jjwebs\",\"jjwes\",\"jjwess\",\"jjweng\",\"jjwej\",\"jjwec\",\"jjwek\",\"jjwet\",\"jjwep\",\"jjweh\",\"jjwi\",\"jjwig\",\"jjwigg\",\"jjwigs\",\"jjwin\",\"jjwinj\",\"jjwinh\",\"jjwid\",\"jjwil\",\"jjwilg\",\"jjwilm\",\"jjwilb\",\"jjwils\",\"jjwilt\",\"jjwilp\",\"jjwilh\",\"jjwim\",\"jjwib\",\"jjwibs\",\"jjwis\",\"jjwiss\",\"jjwing\",\"jjwij\",\"jjwic\",\"jjwik\",\"jjwit\",\"jjwip\",\"jjwih\",\"jjyu\",\"jjyug\",\"jjyugg\",\"jjyugs\",\"jjyun\",\"jjyunj\",\"jjyunh\",\"jjyud\",\"jjyul\",\"jjyulg\",\"jjyulm\",\"jjyulb\",\"jjyuls\",\"jjyult\",\"jjyulp\",\"jjyulh\",\"jjyum\",\"jjyub\",\"jjyubs\",\"jjyus\",\"jjyuss\",\"jjyung\",\"jjyuj\",\"jjyuc\",\"jjyuk\",\"jjyut\",\"jjyup\",\"jjyuh\",\"jjeu\",\"jjeug\",\"jjeugg\",\"jjeugs\",\"jjeun\",\"jjeunj\",\"jjeunh\",\"jjeud\",\"jjeul\",\"jjeulg\",\"jjeulm\",\"jjeulb\",\"jjeuls\",\"jjeult\",\"jjeulp\",\"jjeulh\",\"jjeum\",\"jjeub\",\"jjeubs\",\"jjeus\",\"jjeuss\",\"jjeung\",\"jjeuj\",\"jjeuc\",\"jjeuk\",\"jjeut\",\"jjeup\",\"jjeuh\",\"jjyi\",\"jjyig\",\"jjyigg\",\"jjyigs\",\"jjyin\",\"jjyinj\",\"jjyinh\",\"jjyid\",\"jjyil\",\"jjyilg\",\"jjyilm\",\"jjyilb\",\"jjyils\",\"jjyilt\",\"jjyilp\",\"jjyilh\"],[\"jjyim\",\"jjyib\",\"jjyibs\",\"jjyis\",\"jjyiss\",\"jjying\",\"jjyij\",\"jjyic\",\"jjyik\",\"jjyit\",\"jjyip\",\"jjyih\",\"jji\",\"jjig\",\"jjigg\",\"jjigs\",\"jjin\",\"jjinj\",\"jjinh\",\"jjid\",\"jjil\",\"jjilg\",\"jjilm\",\"jjilb\",\"jjils\",\"jjilt\",\"jjilp\",\"jjilh\",\"jjim\",\"jjib\",\"jjibs\",\"jjis\",\"jjiss\",\"jjing\",\"jjij\",\"jjic\",\"jjik\",\"jjit\",\"jjip\",\"jjih\",\"ca\",\"cag\",\"cagg\",\"cags\",\"can\",\"canj\",\"canh\",\"cad\",\"cal\",\"calg\",\"calm\",\"calb\",\"cals\",\"calt\",\"calp\",\"calh\",\"cam\",\"cab\",\"cabs\",\"cas\",\"cass\",\"cang\",\"caj\",\"cac\",\"cak\",\"cat\",\"cap\",\"cah\",\"cae\",\"caeg\",\"caegg\",\"caegs\",\"caen\",\"caenj\",\"caenh\",\"caed\",\"cael\",\"caelg\",\"caelm\",\"caelb\",\"caels\",\"caelt\",\"caelp\",\"caelh\",\"caem\",\"caeb\",\"caebs\",\"caes\",\"caess\",\"caeng\",\"caej\",\"caec\",\"caek\",\"caet\",\"caep\",\"caeh\",\"cya\",\"cyag\",\"cyagg\",\"cyags\",\"cyan\",\"cyanj\",\"cyanh\",\"cyad\",\"cyal\",\"cyalg\",\"cyalm\",\"cyalb\",\"cyals\",\"cyalt\",\"cyalp\",\"cyalh\",\"cyam\",\"cyab\",\"cyabs\",\"cyas\",\"cyass\",\"cyang\",\"cyaj\",\"cyac\",\"cyak\",\"cyat\",\"cyap\",\"cyah\",\"cyae\",\"cyaeg\",\"cyaegg\",\"cyaegs\",\"cyaen\",\"cyaenj\",\"cyaenh\",\"cyaed\",\"cyael\",\"cyaelg\",\"cyaelm\",\"cyaelb\",\"cyaels\",\"cyaelt\",\"cyaelp\",\"cyaelh\",\"cyaem\",\"cyaeb\",\"cyaebs\",\"cyaes\",\"cyaess\",\"cyaeng\",\"cyaej\",\"cyaec\",\"cyaek\",\"cyaet\",\"cyaep\",\"cyaeh\",\"ceo\",\"ceog\",\"ceogg\",\"ceogs\",\"ceon\",\"ceonj\",\"ceonh\",\"ceod\",\"ceol\",\"ceolg\",\"ceolm\",\"ceolb\",\"ceols\",\"ceolt\",\"ceolp\",\"ceolh\",\"ceom\",\"ceob\",\"ceobs\",\"ceos\",\"ceoss\",\"ceong\",\"ceoj\",\"ceoc\",\"ceok\",\"ceot\",\"ceop\",\"ceoh\",\"ce\",\"ceg\",\"cegg\",\"cegs\",\"cen\",\"cenj\",\"cenh\",\"ced\",\"cel\",\"celg\",\"celm\",\"celb\",\"cels\",\"celt\",\"celp\",\"celh\",\"cem\",\"ceb\",\"cebs\",\"ces\",\"cess\",\"ceng\",\"cej\",\"cec\",\"cek\",\"cet\",\"cep\",\"ceh\",\"cyeo\",\"cyeog\",\"cyeogg\",\"cyeogs\",\"cyeon\",\"cyeonj\",\"cyeonh\",\"cyeod\",\"cyeol\",\"cyeolg\",\"cyeolm\",\"cyeolb\",\"cyeols\",\"cyeolt\",\"cyeolp\",\"cyeolh\",\"cyeom\",\"cyeob\",\"cyeobs\",\"cyeos\",\"cyeoss\",\"cyeong\",\"cyeoj\",\"cyeoc\",\"cyeok\",\"cyeot\",\"cyeop\",\"cyeoh\",\"cye\",\"cyeg\",\"cyegg\",\"cyegs\",\"cyen\",\"cyenj\",\"cyenh\",\"cyed\",\"cyel\",\"cyelg\",\"cyelm\",\"cyelb\",\"cyels\",\"cyelt\",\"cyelp\",\"cyelh\",\"cyem\",\"cyeb\",\"cyebs\",\"cyes\"],[\"cyess\",\"cyeng\",\"cyej\",\"cyec\",\"cyek\",\"cyet\",\"cyep\",\"cyeh\",\"co\",\"cog\",\"cogg\",\"cogs\",\"con\",\"conj\",\"conh\",\"cod\",\"col\",\"colg\",\"colm\",\"colb\",\"cols\",\"colt\",\"colp\",\"colh\",\"com\",\"cob\",\"cobs\",\"cos\",\"coss\",\"cong\",\"coj\",\"coc\",\"cok\",\"cot\",\"cop\",\"coh\",\"cwa\",\"cwag\",\"cwagg\",\"cwags\",\"cwan\",\"cwanj\",\"cwanh\",\"cwad\",\"cwal\",\"cwalg\",\"cwalm\",\"cwalb\",\"cwals\",\"cwalt\",\"cwalp\",\"cwalh\",\"cwam\",\"cwab\",\"cwabs\",\"cwas\",\"cwass\",\"cwang\",\"cwaj\",\"cwac\",\"cwak\",\"cwat\",\"cwap\",\"cwah\",\"cwae\",\"cwaeg\",\"cwaegg\",\"cwaegs\",\"cwaen\",\"cwaenj\",\"cwaenh\",\"cwaed\",\"cwael\",\"cwaelg\",\"cwaelm\",\"cwaelb\",\"cwaels\",\"cwaelt\",\"cwaelp\",\"cwaelh\",\"cwaem\",\"cwaeb\",\"cwaebs\",\"cwaes\",\"cwaess\",\"cwaeng\",\"cwaej\",\"cwaec\",\"cwaek\",\"cwaet\",\"cwaep\",\"cwaeh\",\"coe\",\"coeg\",\"coegg\",\"coegs\",\"coen\",\"coenj\",\"coenh\",\"coed\",\"coel\",\"coelg\",\"coelm\",\"coelb\",\"coels\",\"coelt\",\"coelp\",\"coelh\",\"coem\",\"coeb\",\"coebs\",\"coes\",\"coess\",\"coeng\",\"coej\",\"coec\",\"coek\",\"coet\",\"coep\",\"coeh\",\"cyo\",\"cyog\",\"cyogg\",\"cyogs\",\"cyon\",\"cyonj\",\"cyonh\",\"cyod\",\"cyol\",\"cyolg\",\"cyolm\",\"cyolb\",\"cyols\",\"cyolt\",\"cyolp\",\"cyolh\",\"cyom\",\"cyob\",\"cyobs\",\"cyos\",\"cyoss\",\"cyong\",\"cyoj\",\"cyoc\",\"cyok\",\"cyot\",\"cyop\",\"cyoh\",\"cu\",\"cug\",\"cugg\",\"cugs\",\"cun\",\"cunj\",\"cunh\",\"cud\",\"cul\",\"culg\",\"culm\",\"culb\",\"culs\",\"cult\",\"culp\",\"culh\",\"cum\",\"cub\",\"cubs\",\"cus\",\"cuss\",\"cung\",\"cuj\",\"cuc\",\"cuk\",\"cut\",\"cup\",\"cuh\",\"cweo\",\"cweog\",\"cweogg\",\"cweogs\",\"cweon\",\"cweonj\",\"cweonh\",\"cweod\",\"cweol\",\"cweolg\",\"cweolm\",\"cweolb\",\"cweols\",\"cweolt\",\"cweolp\",\"cweolh\",\"cweom\",\"cweob\",\"cweobs\",\"cweos\",\"cweoss\",\"cweong\",\"cweoj\",\"cweoc\",\"cweok\",\"cweot\",\"cweop\",\"cweoh\",\"cwe\",\"cweg\",\"cwegg\",\"cwegs\",\"cwen\",\"cwenj\",\"cwenh\",\"cwed\",\"cwel\",\"cwelg\",\"cwelm\",\"cwelb\",\"cwels\",\"cwelt\",\"cwelp\",\"cwelh\",\"cwem\",\"cweb\",\"cwebs\",\"cwes\",\"cwess\",\"cweng\",\"cwej\",\"cwec\",\"cwek\",\"cwet\",\"cwep\",\"cweh\",\"cwi\",\"cwig\",\"cwigg\",\"cwigs\",\"cwin\",\"cwinj\",\"cwinh\",\"cwid\",\"cwil\",\"cwilg\",\"cwilm\",\"cwilb\",\"cwils\",\"cwilt\",\"cwilp\",\"cwilh\",\"cwim\",\"cwib\",\"cwibs\",\"cwis\",\"cwiss\",\"cwing\",\"cwij\",\"cwic\"],[\"cwik\",\"cwit\",\"cwip\",\"cwih\",\"cyu\",\"cyug\",\"cyugg\",\"cyugs\",\"cyun\",\"cyunj\",\"cyunh\",\"cyud\",\"cyul\",\"cyulg\",\"cyulm\",\"cyulb\",\"cyuls\",\"cyult\",\"cyulp\",\"cyulh\",\"cyum\",\"cyub\",\"cyubs\",\"cyus\",\"cyuss\",\"cyung\",\"cyuj\",\"cyuc\",\"cyuk\",\"cyut\",\"cyup\",\"cyuh\",\"ceu\",\"ceug\",\"ceugg\",\"ceugs\",\"ceun\",\"ceunj\",\"ceunh\",\"ceud\",\"ceul\",\"ceulg\",\"ceulm\",\"ceulb\",\"ceuls\",\"ceult\",\"ceulp\",\"ceulh\",\"ceum\",\"ceub\",\"ceubs\",\"ceus\",\"ceuss\",\"ceung\",\"ceuj\",\"ceuc\",\"ceuk\",\"ceut\",\"ceup\",\"ceuh\",\"cyi\",\"cyig\",\"cyigg\",\"cyigs\",\"cyin\",\"cyinj\",\"cyinh\",\"cyid\",\"cyil\",\"cyilg\",\"cyilm\",\"cyilb\",\"cyils\",\"cyilt\",\"cyilp\",\"cyilh\",\"cyim\",\"cyib\",\"cyibs\",\"cyis\",\"cyiss\",\"cying\",\"cyij\",\"cyic\",\"cyik\",\"cyit\",\"cyip\",\"cyih\",\"ci\",\"cig\",\"cigg\",\"cigs\",\"cin\",\"cinj\",\"cinh\",\"cid\",\"cil\",\"cilg\",\"cilm\",\"cilb\",\"cils\",\"cilt\",\"cilp\",\"cilh\",\"cim\",\"cib\",\"cibs\",\"cis\",\"ciss\",\"cing\",\"cij\",\"cic\",\"cik\",\"cit\",\"cip\",\"cih\",\"ka\",\"kag\",\"kagg\",\"kags\",\"kan\",\"kanj\",\"kanh\",\"kad\",\"kal\",\"kalg\",\"kalm\",\"kalb\",\"kals\",\"kalt\",\"kalp\",\"kalh\",\"kam\",\"kab\",\"kabs\",\"kas\",\"kass\",\"kang\",\"kaj\",\"kac\",\"kak\",\"kat\",\"kap\",\"kah\",\"kae\",\"kaeg\",\"kaegg\",\"kaegs\",\"kaen\",\"kaenj\",\"kaenh\",\"kaed\",\"kael\",\"kaelg\",\"kaelm\",\"kaelb\",\"kaels\",\"kaelt\",\"kaelp\",\"kaelh\",\"kaem\",\"kaeb\",\"kaebs\",\"kaes\",\"kaess\",\"kaeng\",\"kaej\",\"kaec\",\"kaek\",\"kaet\",\"kaep\",\"kaeh\",\"kya\",\"kyag\",\"kyagg\",\"kyags\",\"kyan\",\"kyanj\",\"kyanh\",\"kyad\",\"kyal\",\"kyalg\",\"kyalm\",\"kyalb\",\"kyals\",\"kyalt\",\"kyalp\",\"kyalh\",\"kyam\",\"kyab\",\"kyabs\",\"kyas\",\"kyass\",\"kyang\",\"kyaj\",\"kyac\",\"kyak\",\"kyat\",\"kyap\",\"kyah\",\"kyae\",\"kyaeg\",\"kyaegg\",\"kyaegs\",\"kyaen\",\"kyaenj\",\"kyaenh\",\"kyaed\",\"kyael\",\"kyaelg\",\"kyaelm\",\"kyaelb\",\"kyaels\",\"kyaelt\",\"kyaelp\",\"kyaelh\",\"kyaem\",\"kyaeb\",\"kyaebs\",\"kyaes\",\"kyaess\",\"kyaeng\",\"kyaej\",\"kyaec\",\"kyaek\",\"kyaet\",\"kyaep\",\"kyaeh\",\"keo\",\"keog\",\"keogg\",\"keogs\",\"keon\",\"keonj\",\"keonh\",\"keod\",\"keol\",\"keolg\",\"keolm\",\"keolb\",\"keols\",\"keolt\",\"keolp\",\"keolh\",\"keom\",\"keob\",\"keobs\",\"keos\",\"keoss\",\"keong\",\"keoj\",\"keoc\",\"keok\",\"keot\",\"keop\",\"keoh\"],[\"ke\",\"keg\",\"kegg\",\"kegs\",\"ken\",\"kenj\",\"kenh\",\"ked\",\"kel\",\"kelg\",\"kelm\",\"kelb\",\"kels\",\"kelt\",\"kelp\",\"kelh\",\"kem\",\"keb\",\"kebs\",\"kes\",\"kess\",\"keng\",\"kej\",\"kec\",\"kek\",\"ket\",\"kep\",\"keh\",\"kyeo\",\"kyeog\",\"kyeogg\",\"kyeogs\",\"kyeon\",\"kyeonj\",\"kyeonh\",\"kyeod\",\"kyeol\",\"kyeolg\",\"kyeolm\",\"kyeolb\",\"kyeols\",\"kyeolt\",\"kyeolp\",\"kyeolh\",\"kyeom\",\"kyeob\",\"kyeobs\",\"kyeos\",\"kyeoss\",\"kyeong\",\"kyeoj\",\"kyeoc\",\"kyeok\",\"kyeot\",\"kyeop\",\"kyeoh\",\"kye\",\"kyeg\",\"kyegg\",\"kyegs\",\"kyen\",\"kyenj\",\"kyenh\",\"kyed\",\"kyel\",\"kyelg\",\"kyelm\",\"kyelb\",\"kyels\",\"kyelt\",\"kyelp\",\"kyelh\",\"kyem\",\"kyeb\",\"kyebs\",\"kyes\",\"kyess\",\"kyeng\",\"kyej\",\"kyec\",\"kyek\",\"kyet\",\"kyep\",\"kyeh\",\"ko\",\"kog\",\"kogg\",\"kogs\",\"kon\",\"konj\",\"konh\",\"kod\",\"kol\",\"kolg\",\"kolm\",\"kolb\",\"kols\",\"kolt\",\"kolp\",\"kolh\",\"kom\",\"kob\",\"kobs\",\"kos\",\"koss\",\"kong\",\"koj\",\"koc\",\"kok\",\"kot\",\"kop\",\"koh\",\"kwa\",\"kwag\",\"kwagg\",\"kwags\",\"kwan\",\"kwanj\",\"kwanh\",\"kwad\",\"kwal\",\"kwalg\",\"kwalm\",\"kwalb\",\"kwals\",\"kwalt\",\"kwalp\",\"kwalh\",\"kwam\",\"kwab\",\"kwabs\",\"kwas\",\"kwass\",\"kwang\",\"kwaj\",\"kwac\",\"kwak\",\"kwat\",\"kwap\",\"kwah\",\"kwae\",\"kwaeg\",\"kwaegg\",\"kwaegs\",\"kwaen\",\"kwaenj\",\"kwaenh\",\"kwaed\",\"kwael\",\"kwaelg\",\"kwaelm\",\"kwaelb\",\"kwaels\",\"kwaelt\",\"kwaelp\",\"kwaelh\",\"kwaem\",\"kwaeb\",\"kwaebs\",\"kwaes\",\"kwaess\",\"kwaeng\",\"kwaej\",\"kwaec\",\"kwaek\",\"kwaet\",\"kwaep\",\"kwaeh\",\"koe\",\"koeg\",\"koegg\",\"koegs\",\"koen\",\"koenj\",\"koenh\",\"koed\",\"koel\",\"koelg\",\"koelm\",\"koelb\",\"koels\",\"koelt\",\"koelp\",\"koelh\",\"koem\",\"koeb\",\"koebs\",\"koes\",\"koess\",\"koeng\",\"koej\",\"koec\",\"koek\",\"koet\",\"koep\",\"koeh\",\"kyo\",\"kyog\",\"kyogg\",\"kyogs\",\"kyon\",\"kyonj\",\"kyonh\",\"kyod\",\"kyol\",\"kyolg\",\"kyolm\",\"kyolb\",\"kyols\",\"kyolt\",\"kyolp\",\"kyolh\",\"kyom\",\"kyob\",\"kyobs\",\"kyos\",\"kyoss\",\"kyong\",\"kyoj\",\"kyoc\",\"kyok\",\"kyot\",\"kyop\",\"kyoh\",\"ku\",\"kug\",\"kugg\",\"kugs\",\"kun\",\"kunj\",\"kunh\",\"kud\",\"kul\",\"kulg\",\"kulm\",\"kulb\",\"kuls\",\"kult\",\"kulp\",\"kulh\",\"kum\",\"kub\",\"kubs\",\"kus\",\"kuss\",\"kung\",\"kuj\",\"kuc\",\"kuk\",\"kut\",\"kup\",\"kuh\",\"kweo\",\"kweog\",\"kweogg\",\"kweogs\"],[\"kweon\",\"kweonj\",\"kweonh\",\"kweod\",\"kweol\",\"kweolg\",\"kweolm\",\"kweolb\",\"kweols\",\"kweolt\",\"kweolp\",\"kweolh\",\"kweom\",\"kweob\",\"kweobs\",\"kweos\",\"kweoss\",\"kweong\",\"kweoj\",\"kweoc\",\"kweok\",\"kweot\",\"kweop\",\"kweoh\",\"kwe\",\"kweg\",\"kwegg\",\"kwegs\",\"kwen\",\"kwenj\",\"kwenh\",\"kwed\",\"kwel\",\"kwelg\",\"kwelm\",\"kwelb\",\"kwels\",\"kwelt\",\"kwelp\",\"kwelh\",\"kwem\",\"kweb\",\"kwebs\",\"kwes\",\"kwess\",\"kweng\",\"kwej\",\"kwec\",\"kwek\",\"kwet\",\"kwep\",\"kweh\",\"kwi\",\"kwig\",\"kwigg\",\"kwigs\",\"kwin\",\"kwinj\",\"kwinh\",\"kwid\",\"kwil\",\"kwilg\",\"kwilm\",\"kwilb\",\"kwils\",\"kwilt\",\"kwilp\",\"kwilh\",\"kwim\",\"kwib\",\"kwibs\",\"kwis\",\"kwiss\",\"kwing\",\"kwij\",\"kwic\",\"kwik\",\"kwit\",\"kwip\",\"kwih\",\"kyu\",\"kyug\",\"kyugg\",\"kyugs\",\"kyun\",\"kyunj\",\"kyunh\",\"kyud\",\"kyul\",\"kyulg\",\"kyulm\",\"kyulb\",\"kyuls\",\"kyult\",\"kyulp\",\"kyulh\",\"kyum\",\"kyub\",\"kyubs\",\"kyus\",\"kyuss\",\"kyung\",\"kyuj\",\"kyuc\",\"kyuk\",\"kyut\",\"kyup\",\"kyuh\",\"keu\",\"keug\",\"keugg\",\"keugs\",\"keun\",\"keunj\",\"keunh\",\"keud\",\"keul\",\"keulg\",\"keulm\",\"keulb\",\"keuls\",\"keult\",\"keulp\",\"keulh\",\"keum\",\"keub\",\"keubs\",\"keus\",\"keuss\",\"keung\",\"keuj\",\"keuc\",\"keuk\",\"keut\",\"keup\",\"keuh\",\"kyi\",\"kyig\",\"kyigg\",\"kyigs\",\"kyin\",\"kyinj\",\"kyinh\",\"kyid\",\"kyil\",\"kyilg\",\"kyilm\",\"kyilb\",\"kyils\",\"kyilt\",\"kyilp\",\"kyilh\",\"kyim\",\"kyib\",\"kyibs\",\"kyis\",\"kyiss\",\"kying\",\"kyij\",\"kyic\",\"kyik\",\"kyit\",\"kyip\",\"kyih\",\"ki\",\"kig\",\"kigg\",\"kigs\",\"kin\",\"kinj\",\"kinh\",\"kid\",\"kil\",\"kilg\",\"kilm\",\"kilb\",\"kils\",\"kilt\",\"kilp\",\"kilh\",\"kim\",\"kib\",\"kibs\",\"kis\",\"kiss\",\"king\",\"kij\",\"kic\",\"kik\",\"kit\",\"kip\",\"kih\",\"ta\",\"tag\",\"tagg\",\"tags\",\"tan\",\"tanj\",\"tanh\",\"tad\",\"tal\",\"talg\",\"talm\",\"talb\",\"tals\",\"talt\",\"talp\",\"talh\",\"tam\",\"tab\",\"tabs\",\"tas\",\"tass\",\"tang\",\"taj\",\"tac\",\"tak\",\"tat\",\"tap\",\"tah\",\"tae\",\"taeg\",\"taegg\",\"taegs\",\"taen\",\"taenj\",\"taenh\",\"taed\",\"tael\",\"taelg\",\"taelm\",\"taelb\",\"taels\",\"taelt\",\"taelp\",\"taelh\",\"taem\",\"taeb\",\"taebs\",\"taes\",\"taess\",\"taeng\",\"taej\",\"taec\",\"taek\",\"taet\",\"taep\",\"taeh\",\"tya\",\"tyag\",\"tyagg\",\"tyags\",\"tyan\",\"tyanj\",\"tyanh\",\"tyad\"],[\"tyal\",\"tyalg\",\"tyalm\",\"tyalb\",\"tyals\",\"tyalt\",\"tyalp\",\"tyalh\",\"tyam\",\"tyab\",\"tyabs\",\"tyas\",\"tyass\",\"tyang\",\"tyaj\",\"tyac\",\"tyak\",\"tyat\",\"tyap\",\"tyah\",\"tyae\",\"tyaeg\",\"tyaegg\",\"tyaegs\",\"tyaen\",\"tyaenj\",\"tyaenh\",\"tyaed\",\"tyael\",\"tyaelg\",\"tyaelm\",\"tyaelb\",\"tyaels\",\"tyaelt\",\"tyaelp\",\"tyaelh\",\"tyaem\",\"tyaeb\",\"tyaebs\",\"tyaes\",\"tyaess\",\"tyaeng\",\"tyaej\",\"tyaec\",\"tyaek\",\"tyaet\",\"tyaep\",\"tyaeh\",\"teo\",\"teog\",\"teogg\",\"teogs\",\"teon\",\"teonj\",\"teonh\",\"teod\",\"teol\",\"teolg\",\"teolm\",\"teolb\",\"teols\",\"teolt\",\"teolp\",\"teolh\",\"teom\",\"teob\",\"teobs\",\"teos\",\"teoss\",\"teong\",\"teoj\",\"teoc\",\"teok\",\"teot\",\"teop\",\"teoh\",\"te\",\"teg\",\"tegg\",\"tegs\",\"ten\",\"tenj\",\"tenh\",\"ted\",\"tel\",\"telg\",\"telm\",\"telb\",\"tels\",\"telt\",\"telp\",\"telh\",\"tem\",\"teb\",\"tebs\",\"tes\",\"tess\",\"teng\",\"tej\",\"tec\",\"tek\",\"tet\",\"tep\",\"teh\",\"tyeo\",\"tyeog\",\"tyeogg\",\"tyeogs\",\"tyeon\",\"tyeonj\",\"tyeonh\",\"tyeod\",\"tyeol\",\"tyeolg\",\"tyeolm\",\"tyeolb\",\"tyeols\",\"tyeolt\",\"tyeolp\",\"tyeolh\",\"tyeom\",\"tyeob\",\"tyeobs\",\"tyeos\",\"tyeoss\",\"tyeong\",\"tyeoj\",\"tyeoc\",\"tyeok\",\"tyeot\",\"tyeop\",\"tyeoh\",\"tye\",\"tyeg\",\"tyegg\",\"tyegs\",\"tyen\",\"tyenj\",\"tyenh\",\"tyed\",\"tyel\",\"tyelg\",\"tyelm\",\"tyelb\",\"tyels\",\"tyelt\",\"tyelp\",\"tyelh\",\"tyem\",\"tyeb\",\"tyebs\",\"tyes\",\"tyess\",\"tyeng\",\"tyej\",\"tyec\",\"tyek\",\"tyet\",\"tyep\",\"tyeh\",\"to\",\"tog\",\"togg\",\"togs\",\"ton\",\"tonj\",\"tonh\",\"tod\",\"tol\",\"tolg\",\"tolm\",\"tolb\",\"tols\",\"tolt\",\"tolp\",\"tolh\",\"tom\",\"tob\",\"tobs\",\"tos\",\"toss\",\"tong\",\"toj\",\"toc\",\"tok\",\"tot\",\"top\",\"toh\",\"twa\",\"twag\",\"twagg\",\"twags\",\"twan\",\"twanj\",\"twanh\",\"twad\",\"twal\",\"twalg\",\"twalm\",\"twalb\",\"twals\",\"twalt\",\"twalp\",\"twalh\",\"twam\",\"twab\",\"twabs\",\"twas\",\"twass\",\"twang\",\"twaj\",\"twac\",\"twak\",\"twat\",\"twap\",\"twah\",\"twae\",\"twaeg\",\"twaegg\",\"twaegs\",\"twaen\",\"twaenj\",\"twaenh\",\"twaed\",\"twael\",\"twaelg\",\"twaelm\",\"twaelb\",\"twaels\",\"twaelt\",\"twaelp\",\"twaelh\",\"twaem\",\"twaeb\",\"twaebs\",\"twaes\",\"twaess\",\"twaeng\",\"twaej\",\"twaec\",\"twaek\",\"twaet\",\"twaep\",\"twaeh\",\"toe\",\"toeg\",\"toegg\",\"toegs\",\"toen\",\"toenj\",\"toenh\",\"toed\",\"toel\",\"toelg\",\"toelm\",\"toelb\"],[\"toels\",\"toelt\",\"toelp\",\"toelh\",\"toem\",\"toeb\",\"toebs\",\"toes\",\"toess\",\"toeng\",\"toej\",\"toec\",\"toek\",\"toet\",\"toep\",\"toeh\",\"tyo\",\"tyog\",\"tyogg\",\"tyogs\",\"tyon\",\"tyonj\",\"tyonh\",\"tyod\",\"tyol\",\"tyolg\",\"tyolm\",\"tyolb\",\"tyols\",\"tyolt\",\"tyolp\",\"tyolh\",\"tyom\",\"tyob\",\"tyobs\",\"tyos\",\"tyoss\",\"tyong\",\"tyoj\",\"tyoc\",\"tyok\",\"tyot\",\"tyop\",\"tyoh\",\"tu\",\"tug\",\"tugg\",\"tugs\",\"tun\",\"tunj\",\"tunh\",\"tud\",\"tul\",\"tulg\",\"tulm\",\"tulb\",\"tuls\",\"tult\",\"tulp\",\"tulh\",\"tum\",\"tub\",\"tubs\",\"tus\",\"tuss\",\"tung\",\"tuj\",\"tuc\",\"tuk\",\"tut\",\"tup\",\"tuh\",\"tweo\",\"tweog\",\"tweogg\",\"tweogs\",\"tweon\",\"tweonj\",\"tweonh\",\"tweod\",\"tweol\",\"tweolg\",\"tweolm\",\"tweolb\",\"tweols\",\"tweolt\",\"tweolp\",\"tweolh\",\"tweom\",\"tweob\",\"tweobs\",\"tweos\",\"tweoss\",\"tweong\",\"tweoj\",\"tweoc\",\"tweok\",\"tweot\",\"tweop\",\"tweoh\",\"twe\",\"tweg\",\"twegg\",\"twegs\",\"twen\",\"twenj\",\"twenh\",\"twed\",\"twel\",\"twelg\",\"twelm\",\"twelb\",\"twels\",\"twelt\",\"twelp\",\"twelh\",\"twem\",\"tweb\",\"twebs\",\"twes\",\"twess\",\"tweng\",\"twej\",\"twec\",\"twek\",\"twet\",\"twep\",\"tweh\",\"twi\",\"twig\",\"twigg\",\"twigs\",\"twin\",\"twinj\",\"twinh\",\"twid\",\"twil\",\"twilg\",\"twilm\",\"twilb\",\"twils\",\"twilt\",\"twilp\",\"twilh\",\"twim\",\"twib\",\"twibs\",\"twis\",\"twiss\",\"twing\",\"twij\",\"twic\",\"twik\",\"twit\",\"twip\",\"twih\",\"tyu\",\"tyug\",\"tyugg\",\"tyugs\",\"tyun\",\"tyunj\",\"tyunh\",\"tyud\",\"tyul\",\"tyulg\",\"tyulm\",\"tyulb\",\"tyuls\",\"tyult\",\"tyulp\",\"tyulh\",\"tyum\",\"tyub\",\"tyubs\",\"tyus\",\"tyuss\",\"tyung\",\"tyuj\",\"tyuc\",\"tyuk\",\"tyut\",\"tyup\",\"tyuh\",\"teu\",\"teug\",\"teugg\",\"teugs\",\"teun\",\"teunj\",\"teunh\",\"teud\",\"teul\",\"teulg\",\"teulm\",\"teulb\",\"teuls\",\"teult\",\"teulp\",\"teulh\",\"teum\",\"teub\",\"teubs\",\"teus\",\"teuss\",\"teung\",\"teuj\",\"teuc\",\"teuk\",\"teut\",\"teup\",\"teuh\",\"tyi\",\"tyig\",\"tyigg\",\"tyigs\",\"tyin\",\"tyinj\",\"tyinh\",\"tyid\",\"tyil\",\"tyilg\",\"tyilm\",\"tyilb\",\"tyils\",\"tyilt\",\"tyilp\",\"tyilh\",\"tyim\",\"tyib\",\"tyibs\",\"tyis\",\"tyiss\",\"tying\",\"tyij\",\"tyic\",\"tyik\",\"tyit\",\"tyip\",\"tyih\",\"ti\",\"tig\",\"tigg\",\"tigs\",\"tin\",\"tinj\",\"tinh\",\"tid\",\"til\",\"tilg\",\"tilm\",\"tilb\",\"tils\",\"tilt\",\"tilp\",\"tilh\"],[\"tim\",\"tib\",\"tibs\",\"tis\",\"tiss\",\"ting\",\"tij\",\"tic\",\"tik\",\"tit\",\"tip\",\"tih\",\"pa\",\"pag\",\"pagg\",\"pags\",\"pan\",\"panj\",\"panh\",\"pad\",\"pal\",\"palg\",\"palm\",\"palb\",\"pals\",\"palt\",\"palp\",\"palh\",\"pam\",\"pab\",\"pabs\",\"pas\",\"pass\",\"pang\",\"paj\",\"pac\",\"pak\",\"pat\",\"pap\",\"pah\",\"pae\",\"paeg\",\"paegg\",\"paegs\",\"paen\",\"paenj\",\"paenh\",\"paed\",\"pael\",\"paelg\",\"paelm\",\"paelb\",\"paels\",\"paelt\",\"paelp\",\"paelh\",\"paem\",\"paeb\",\"paebs\",\"paes\",\"paess\",\"paeng\",\"paej\",\"paec\",\"paek\",\"paet\",\"paep\",\"paeh\",\"pya\",\"pyag\",\"pyagg\",\"pyags\",\"pyan\",\"pyanj\",\"pyanh\",\"pyad\",\"pyal\",\"pyalg\",\"pyalm\",\"pyalb\",\"pyals\",\"pyalt\",\"pyalp\",\"pyalh\",\"pyam\",\"pyab\",\"pyabs\",\"pyas\",\"pyass\",\"pyang\",\"pyaj\",\"pyac\",\"pyak\",\"pyat\",\"pyap\",\"pyah\",\"pyae\",\"pyaeg\",\"pyaegg\",\"pyaegs\",\"pyaen\",\"pyaenj\",\"pyaenh\",\"pyaed\",\"pyael\",\"pyaelg\",\"pyaelm\",\"pyaelb\",\"pyaels\",\"pyaelt\",\"pyaelp\",\"pyaelh\",\"pyaem\",\"pyaeb\",\"pyaebs\",\"pyaes\",\"pyaess\",\"pyaeng\",\"pyaej\",\"pyaec\",\"pyaek\",\"pyaet\",\"pyaep\",\"pyaeh\",\"peo\",\"peog\",\"peogg\",\"peogs\",\"peon\",\"peonj\",\"peonh\",\"peod\",\"peol\",\"peolg\",\"peolm\",\"peolb\",\"peols\",\"peolt\",\"peolp\",\"peolh\",\"peom\",\"peob\",\"peobs\",\"peos\",\"peoss\",\"peong\",\"peoj\",\"peoc\",\"peok\",\"peot\",\"peop\",\"peoh\",\"pe\",\"peg\",\"pegg\",\"pegs\",\"pen\",\"penj\",\"penh\",\"ped\",\"pel\",\"pelg\",\"pelm\",\"pelb\",\"pels\",\"pelt\",\"pelp\",\"pelh\",\"pem\",\"peb\",\"pebs\",\"pes\",\"pess\",\"peng\",\"pej\",\"pec\",\"pek\",\"pet\",\"pep\",\"peh\",\"pyeo\",\"pyeog\",\"pyeogg\",\"pyeogs\",\"pyeon\",\"pyeonj\",\"pyeonh\",\"pyeod\",\"pyeol\",\"pyeolg\",\"pyeolm\",\"pyeolb\",\"pyeols\",\"pyeolt\",\"pyeolp\",\"pyeolh\",\"pyeom\",\"pyeob\",\"pyeobs\",\"pyeos\",\"pyeoss\",\"pyeong\",\"pyeoj\",\"pyeoc\",\"pyeok\",\"pyeot\",\"pyeop\",\"pyeoh\",\"pye\",\"pyeg\",\"pyegg\",\"pyegs\",\"pyen\",\"pyenj\",\"pyenh\",\"pyed\",\"pyel\",\"pyelg\",\"pyelm\",\"pyelb\",\"pyels\",\"pyelt\",\"pyelp\",\"pyelh\",\"pyem\",\"pyeb\",\"pyebs\",\"pyes\",\"pyess\",\"pyeng\",\"pyej\",\"pyec\",\"pyek\",\"pyet\",\"pyep\",\"pyeh\",\"po\",\"pog\",\"pogg\",\"pogs\",\"pon\",\"ponj\",\"ponh\",\"pod\",\"pol\",\"polg\",\"polm\",\"polb\",\"pols\",\"polt\",\"polp\",\"polh\",\"pom\",\"pob\",\"pobs\",\"pos\"],[\"poss\",\"pong\",\"poj\",\"poc\",\"pok\",\"pot\",\"pop\",\"poh\",\"pwa\",\"pwag\",\"pwagg\",\"pwags\",\"pwan\",\"pwanj\",\"pwanh\",\"pwad\",\"pwal\",\"pwalg\",\"pwalm\",\"pwalb\",\"pwals\",\"pwalt\",\"pwalp\",\"pwalh\",\"pwam\",\"pwab\",\"pwabs\",\"pwas\",\"pwass\",\"pwang\",\"pwaj\",\"pwac\",\"pwak\",\"pwat\",\"pwap\",\"pwah\",\"pwae\",\"pwaeg\",\"pwaegg\",\"pwaegs\",\"pwaen\",\"pwaenj\",\"pwaenh\",\"pwaed\",\"pwael\",\"pwaelg\",\"pwaelm\",\"pwaelb\",\"pwaels\",\"pwaelt\",\"pwaelp\",\"pwaelh\",\"pwaem\",\"pwaeb\",\"pwaebs\",\"pwaes\",\"pwaess\",\"pwaeng\",\"pwaej\",\"pwaec\",\"pwaek\",\"pwaet\",\"pwaep\",\"pwaeh\",\"poe\",\"poeg\",\"poegg\",\"poegs\",\"poen\",\"poenj\",\"poenh\",\"poed\",\"poel\",\"poelg\",\"poelm\",\"poelb\",\"poels\",\"poelt\",\"poelp\",\"poelh\",\"poem\",\"poeb\",\"poebs\",\"poes\",\"poess\",\"poeng\",\"poej\",\"poec\",\"poek\",\"poet\",\"poep\",\"poeh\",\"pyo\",\"pyog\",\"pyogg\",\"pyogs\",\"pyon\",\"pyonj\",\"pyonh\",\"pyod\",\"pyol\",\"pyolg\",\"pyolm\",\"pyolb\",\"pyols\",\"pyolt\",\"pyolp\",\"pyolh\",\"pyom\",\"pyob\",\"pyobs\",\"pyos\",\"pyoss\",\"pyong\",\"pyoj\",\"pyoc\",\"pyok\",\"pyot\",\"pyop\",\"pyoh\",\"pu\",\"pug\",\"pugg\",\"pugs\",\"pun\",\"punj\",\"punh\",\"pud\",\"pul\",\"pulg\",\"pulm\",\"pulb\",\"puls\",\"pult\",\"pulp\",\"pulh\",\"pum\",\"pub\",\"pubs\",\"pus\",\"puss\",\"pung\",\"puj\",\"puc\",\"puk\",\"put\",\"pup\",\"puh\",\"pweo\",\"pweog\",\"pweogg\",\"pweogs\",\"pweon\",\"pweonj\",\"pweonh\",\"pweod\",\"pweol\",\"pweolg\",\"pweolm\",\"pweolb\",\"pweols\",\"pweolt\",\"pweolp\",\"pweolh\",\"pweom\",\"pweob\",\"pweobs\",\"pweos\",\"pweoss\",\"pweong\",\"pweoj\",\"pweoc\",\"pweok\",\"pweot\",\"pweop\",\"pweoh\",\"pwe\",\"pweg\",\"pwegg\",\"pwegs\",\"pwen\",\"pwenj\",\"pwenh\",\"pwed\",\"pwel\",\"pwelg\",\"pwelm\",\"pwelb\",\"pwels\",\"pwelt\",\"pwelp\",\"pwelh\",\"pwem\",\"pweb\",\"pwebs\",\"pwes\",\"pwess\",\"pweng\",\"pwej\",\"pwec\",\"pwek\",\"pwet\",\"pwep\",\"pweh\",\"pwi\",\"pwig\",\"pwigg\",\"pwigs\",\"pwin\",\"pwinj\",\"pwinh\",\"pwid\",\"pwil\",\"pwilg\",\"pwilm\",\"pwilb\",\"pwils\",\"pwilt\",\"pwilp\",\"pwilh\",\"pwim\",\"pwib\",\"pwibs\",\"pwis\",\"pwiss\",\"pwing\",\"pwij\",\"pwic\",\"pwik\",\"pwit\",\"pwip\",\"pwih\",\"pyu\",\"pyug\",\"pyugg\",\"pyugs\",\"pyun\",\"pyunj\",\"pyunh\",\"pyud\",\"pyul\",\"pyulg\",\"pyulm\",\"pyulb\",\"pyuls\",\"pyult\",\"pyulp\",\"pyulh\",\"pyum\",\"pyub\",\"pyubs\",\"pyus\",\"pyuss\",\"pyung\",\"pyuj\",\"pyuc\"],[\"pyuk\",\"pyut\",\"pyup\",\"pyuh\",\"peu\",\"peug\",\"peugg\",\"peugs\",\"peun\",\"peunj\",\"peunh\",\"peud\",\"peul\",\"peulg\",\"peulm\",\"peulb\",\"peuls\",\"peult\",\"peulp\",\"peulh\",\"peum\",\"peub\",\"peubs\",\"peus\",\"peuss\",\"peung\",\"peuj\",\"peuc\",\"peuk\",\"peut\",\"peup\",\"peuh\",\"pyi\",\"pyig\",\"pyigg\",\"pyigs\",\"pyin\",\"pyinj\",\"pyinh\",\"pyid\",\"pyil\",\"pyilg\",\"pyilm\",\"pyilb\",\"pyils\",\"pyilt\",\"pyilp\",\"pyilh\",\"pyim\",\"pyib\",\"pyibs\",\"pyis\",\"pyiss\",\"pying\",\"pyij\",\"pyic\",\"pyik\",\"pyit\",\"pyip\",\"pyih\",\"pi\",\"pig\",\"pigg\",\"pigs\",\"pin\",\"pinj\",\"pinh\",\"pid\",\"pil\",\"pilg\",\"pilm\",\"pilb\",\"pils\",\"pilt\",\"pilp\",\"pilh\",\"pim\",\"pib\",\"pibs\",\"pis\",\"piss\",\"ping\",\"pij\",\"pic\",\"pik\",\"pit\",\"pip\",\"pih\",\"ha\",\"hag\",\"hagg\",\"hags\",\"han\",\"hanj\",\"hanh\",\"had\",\"hal\",\"halg\",\"halm\",\"halb\",\"hals\",\"halt\",\"halp\",\"halh\",\"ham\",\"hab\",\"habs\",\"has\",\"hass\",\"hang\",\"haj\",\"hac\",\"hak\",\"hat\",\"hap\",\"hah\",\"hae\",\"haeg\",\"haegg\",\"haegs\",\"haen\",\"haenj\",\"haenh\",\"haed\",\"hael\",\"haelg\",\"haelm\",\"haelb\",\"haels\",\"haelt\",\"haelp\",\"haelh\",\"haem\",\"haeb\",\"haebs\",\"haes\",\"haess\",\"haeng\",\"haej\",\"haec\",\"haek\",\"haet\",\"haep\",\"haeh\",\"hya\",\"hyag\",\"hyagg\",\"hyags\",\"hyan\",\"hyanj\",\"hyanh\",\"hyad\",\"hyal\",\"hyalg\",\"hyalm\",\"hyalb\",\"hyals\",\"hyalt\",\"hyalp\",\"hyalh\",\"hyam\",\"hyab\",\"hyabs\",\"hyas\",\"hyass\",\"hyang\",\"hyaj\",\"hyac\",\"hyak\",\"hyat\",\"hyap\",\"hyah\",\"hyae\",\"hyaeg\",\"hyaegg\",\"hyaegs\",\"hyaen\",\"hyaenj\",\"hyaenh\",\"hyaed\",\"hyael\",\"hyaelg\",\"hyaelm\",\"hyaelb\",\"hyaels\",\"hyaelt\",\"hyaelp\",\"hyaelh\",\"hyaem\",\"hyaeb\",\"hyaebs\",\"hyaes\",\"hyaess\",\"hyaeng\",\"hyaej\",\"hyaec\",\"hyaek\",\"hyaet\",\"hyaep\",\"hyaeh\",\"heo\",\"heog\",\"heogg\",\"heogs\",\"heon\",\"heonj\",\"heonh\",\"heod\",\"heol\",\"heolg\",\"heolm\",\"heolb\",\"heols\",\"heolt\",\"heolp\",\"heolh\",\"heom\",\"heob\",\"heobs\",\"heos\",\"heoss\",\"heong\",\"heoj\",\"heoc\",\"heok\",\"heot\",\"heop\",\"heoh\",\"he\",\"heg\",\"hegg\",\"hegs\",\"hen\",\"henj\",\"henh\",\"hed\",\"hel\",\"helg\",\"helm\",\"helb\",\"hels\",\"helt\",\"help\",\"helh\",\"hem\",\"heb\",\"hebs\",\"hes\",\"hess\",\"heng\",\"hej\",\"hec\",\"hek\",\"het\",\"hep\",\"heh\"],[\"hyeo\",\"hyeog\",\"hyeogg\",\"hyeogs\",\"hyeon\",\"hyeonj\",\"hyeonh\",\"hyeod\",\"hyeol\",\"hyeolg\",\"hyeolm\",\"hyeolb\",\"hyeols\",\"hyeolt\",\"hyeolp\",\"hyeolh\",\"hyeom\",\"hyeob\",\"hyeobs\",\"hyeos\",\"hyeoss\",\"hyeong\",\"hyeoj\",\"hyeoc\",\"hyeok\",\"hyeot\",\"hyeop\",\"hyeoh\",\"hye\",\"hyeg\",\"hyegg\",\"hyegs\",\"hyen\",\"hyenj\",\"hyenh\",\"hyed\",\"hyel\",\"hyelg\",\"hyelm\",\"hyelb\",\"hyels\",\"hyelt\",\"hyelp\",\"hyelh\",\"hyem\",\"hyeb\",\"hyebs\",\"hyes\",\"hyess\",\"hyeng\",\"hyej\",\"hyec\",\"hyek\",\"hyet\",\"hyep\",\"hyeh\",\"ho\",\"hog\",\"hogg\",\"hogs\",\"hon\",\"honj\",\"honh\",\"hod\",\"hol\",\"holg\",\"holm\",\"holb\",\"hols\",\"holt\",\"holp\",\"holh\",\"hom\",\"hob\",\"hobs\",\"hos\",\"hoss\",\"hong\",\"hoj\",\"hoc\",\"hok\",\"hot\",\"hop\",\"hoh\",\"hwa\",\"hwag\",\"hwagg\",\"hwags\",\"hwan\",\"hwanj\",\"hwanh\",\"hwad\",\"hwal\",\"hwalg\",\"hwalm\",\"hwalb\",\"hwals\",\"hwalt\",\"hwalp\",\"hwalh\",\"hwam\",\"hwab\",\"hwabs\",\"hwas\",\"hwass\",\"hwang\",\"hwaj\",\"hwac\",\"hwak\",\"hwat\",\"hwap\",\"hwah\",\"hwae\",\"hwaeg\",\"hwaegg\",\"hwaegs\",\"hwaen\",\"hwaenj\",\"hwaenh\",\"hwaed\",\"hwael\",\"hwaelg\",\"hwaelm\",\"hwaelb\",\"hwaels\",\"hwaelt\",\"hwaelp\",\"hwaelh\",\"hwaem\",\"hwaeb\",\"hwaebs\",\"hwaes\",\"hwaess\",\"hwaeng\",\"hwaej\",\"hwaec\",\"hwaek\",\"hwaet\",\"hwaep\",\"hwaeh\",\"hoe\",\"hoeg\",\"hoegg\",\"hoegs\",\"hoen\",\"hoenj\",\"hoenh\",\"hoed\",\"hoel\",\"hoelg\",\"hoelm\",\"hoelb\",\"hoels\",\"hoelt\",\"hoelp\",\"hoelh\",\"hoem\",\"hoeb\",\"hoebs\",\"hoes\",\"hoess\",\"hoeng\",\"hoej\",\"hoec\",\"hoek\",\"hoet\",\"hoep\",\"hoeh\",\"hyo\",\"hyog\",\"hyogg\",\"hyogs\",\"hyon\",\"hyonj\",\"hyonh\",\"hyod\",\"hyol\",\"hyolg\",\"hyolm\",\"hyolb\",\"hyols\",\"hyolt\",\"hyolp\",\"hyolh\",\"hyom\",\"hyob\",\"hyobs\",\"hyos\",\"hyoss\",\"hyong\",\"hyoj\",\"hyoc\",\"hyok\",\"hyot\",\"hyop\",\"hyoh\",\"hu\",\"hug\",\"hugg\",\"hugs\",\"hun\",\"hunj\",\"hunh\",\"hud\",\"hul\",\"hulg\",\"hulm\",\"hulb\",\"huls\",\"hult\",\"hulp\",\"hulh\",\"hum\",\"hub\",\"hubs\",\"hus\",\"huss\",\"hung\",\"huj\",\"huc\",\"huk\",\"hut\",\"hup\",\"huh\",\"hweo\",\"hweog\",\"hweogg\",\"hweogs\",\"hweon\",\"hweonj\",\"hweonh\",\"hweod\",\"hweol\",\"hweolg\",\"hweolm\",\"hweolb\",\"hweols\",\"hweolt\",\"hweolp\",\"hweolh\",\"hweom\",\"hweob\",\"hweobs\",\"hweos\",\"hweoss\",\"hweong\",\"hweoj\",\"hweoc\",\"hweok\",\"hweot\",\"hweop\",\"hweoh\",\"hwe\",\"hweg\",\"hwegg\",\"hwegs\"],[\"hwen\",\"hwenj\",\"hwenh\",\"hwed\",\"hwel\",\"hwelg\",\"hwelm\",\"hwelb\",\"hwels\",\"hwelt\",\"hwelp\",\"hwelh\",\"hwem\",\"hweb\",\"hwebs\",\"hwes\",\"hwess\",\"hweng\",\"hwej\",\"hwec\",\"hwek\",\"hwet\",\"hwep\",\"hweh\",\"hwi\",\"hwig\",\"hwigg\",\"hwigs\",\"hwin\",\"hwinj\",\"hwinh\",\"hwid\",\"hwil\",\"hwilg\",\"hwilm\",\"hwilb\",\"hwils\",\"hwilt\",\"hwilp\",\"hwilh\",\"hwim\",\"hwib\",\"hwibs\",\"hwis\",\"hwiss\",\"hwing\",\"hwij\",\"hwic\",\"hwik\",\"hwit\",\"hwip\",\"hwih\",\"hyu\",\"hyug\",\"hyugg\",\"hyugs\",\"hyun\",\"hyunj\",\"hyunh\",\"hyud\",\"hyul\",\"hyulg\",\"hyulm\",\"hyulb\",\"hyuls\",\"hyult\",\"hyulp\",\"hyulh\",\"hyum\",\"hyub\",\"hyubs\",\"hyus\",\"hyuss\",\"hyung\",\"hyuj\",\"hyuc\",\"hyuk\",\"hyut\",\"hyup\",\"hyuh\",\"heu\",\"heug\",\"heugg\",\"heugs\",\"heun\",\"heunj\",\"heunh\",\"heud\",\"heul\",\"heulg\",\"heulm\",\"heulb\",\"heuls\",\"heult\",\"heulp\",\"heulh\",\"heum\",\"heub\",\"heubs\",\"heus\",\"heuss\",\"heung\",\"heuj\",\"heuc\",\"heuk\",\"heut\",\"heup\",\"heuh\",\"hyi\",\"hyig\",\"hyigg\",\"hyigs\",\"hyin\",\"hyinj\",\"hyinh\",\"hyid\",\"hyil\",\"hyilg\",\"hyilm\",\"hyilb\",\"hyils\",\"hyilt\",\"hyilp\",\"hyilh\",\"hyim\",\"hyib\",\"hyibs\",\"hyis\",\"hyiss\",\"hying\",\"hyij\",\"hyic\",\"hyik\",\"hyit\",\"hyip\",\"hyih\",\"hi\",\"hig\",\"higg\",\"higs\",\"hin\",\"hinj\",\"hinh\",\"hid\",\"hil\",\"hilg\",\"hilm\",\"hilb\",\"hils\",\"hilt\",\"hilp\",\"hilh\",\"him\",\"hib\",\"hibs\",\"his\",\"hiss\",\"hing\",\"hij\",\"hic\",\"hik\",\"hit\",\"hip\",\"hih\"],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[\"Kay\",\"Kayng\",\"Ke\",\"Ko\",\"Kol\",\"Koc\",\"Kwi\",\"Kwi\",\"Kyun\",\"Kul\",\"Kum\",\"Na\",\"Na\",\"Na\",\"La\",\"Na\",\"Na\",\"Na\",\"Na\",\"Na\",\"Nak\",\"Nak\",\"Nak\",\"Nak\",\"Nak\",\"Nak\",\"Nak\",\"Nan\",\"Nan\",\"Nan\",\"Nan\",\"Nan\",\"Nan\",\"Nam\",\"Nam\",\"Nam\",\"Nam\",\"Nap\",\"Nap\",\"Nap\",\"Nang\",\"Nang\",\"Nang\",\"Nang\",\"Nang\",\"Nay\",\"Nayng\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"No\",\"Nok\",\"Nok\",\"Nok\",\"Nok\",\"Nok\",\"Nok\",\"Non\",\"Nong\",\"Nong\",\"Nong\",\"Nong\",\"Noy\",\"Noy\",\"Noy\",\"Noy\",\"Nwu\",\"Nwu\",\"Nwu\",\"Nwu\",\"Nwu\",\"Nwu\",\"Nwu\",\"Nwu\",\"Nuk\",\"Nuk\",\"Num\",\"Nung\",\"Nung\",\"Nung\",\"Nung\",\"Nung\",\"Twu\",\"La\",\"Lak\",\"Lak\",\"Lan\",\"Lyeng\",\"Lo\",\"Lyul\",\"Li\",\"Pey\",\"Pen\",\"Pyen\",\"Pwu\",\"Pwul\",\"Pi\",\"Sak\",\"Sak\",\"Sam\",\"Sayk\",\"Sayng\",\"Sep\",\"Sey\",\"Sway\",\"Sin\",\"Sim\",\"Sip\",\"Ya\",\"Yak\",\"Yak\",\"Yang\",\"Yang\",\"Yang\",\"Yang\",\"Yang\",\"Yang\",\"Yang\",\"Yang\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Ye\",\"Yek\",\"Yek\",\"Yek\",\"Yek\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yen\",\"Yel\",\"Yel\",\"Yel\",\"Yel\",\"Yel\",\"Yel\",\"Yem\",\"Yem\",\"Yem\",\"Yem\",\"Yem\",\"Yep\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yeng\",\"Yey\",\"Yey\",\"Yey\",\"Yey\",\"O\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yo\",\"Yong\",\"Wun\",\"Wen\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yu\",\"Yuk\",\"Yuk\",\"Yuk\",\"Yun\",\"Yun\",\"Yun\",\"Yun\",\"Yul\",\"Yul\",\"Yul\",\"Yul\",\"Yung\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"I\",\"Ik\",\"Ik\",\"In\",\"In\",\"In\",\"In\",\"In\",\"In\",\"In\",\"Im\",\"Im\",\"Im\",\"Ip\",\"Ip\",\"Ip\",\"Cang\",\"Cek\",\"Ci\",\"Cip\",\"Cha\",\"Chek\"],[\"Chey\",\"Thak\",\"Thak\",\"Thang\",\"Thayk\",\"Thong\",\"Pho\",\"Phok\",\"Hang\",\"Hang\",\"Hyen\",\"Hwak\",\"Wu\",\"Huo\",,,\"Zhong\",,\"Qing\",,,\"Xi\",\"Zhu\",\"Yi\",\"Li\",\"Shen\",\"Xiang\",\"Fu\",\"Jing\",\"Jing\",\"Yu\",,\"Hagi\",,\"Zhu\",,,\"Yi\",\"Du\",,,,\"Fan\",\"Si\",\"Guan\"],[\"ff\",\"fi\",\"fl\",\"ffi\",\"ffl\",\"st\",\"st\",,,,,,,,,,,,,\"mn\",\"me\",\"mi\",\"vn\",\"mkh\",,,,,,\"yi\",,\"ay\",\"`\",,\"d\",\"h\",\"k\",\"l\",\"m\",\"m\",\"t\",\"+\",\"sh\",\"s\",\"sh\",\"s\",\"a\",\"a\",,\"b\",\"g\",\"d\",\"h\",\"v\",\"z\",,\"t\",\"y\",\"k\",\"k\",\"l\",,\"l\",,\"n\",\"n\",,\"p\",\"p\",,\"ts\",\"ts\",\"r\",\"sh\",\"t\",\"vo\",\"b\",\"k\",\"p\",\"l\"],[],[],[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\"~\",,,,,,,,,,,,,\"..\",\"--\",\"-\",\"_\",\"_\",\"(\",\") \",\"{\",\"} \",\"[\",\"] \",\"[(\",\")] \",\"<<\",\">> \",\"<\",\"> \",\"[\",\"] \",\"{\",\"}\",,,,,,,,,,,,\",\",\",\",\".\",,\";\",\":\",\"?\",\"!\",\"-\",\"(\",\")\",\"{\",\"}\",\"{\",\"}\",\"#\",\"&\",\"*\",\"+\",\"-\",\"<\",\">\",\"=\",,\"\\\\\",\"$\",\"%\",\"@\"],[,\"!\",'\"',\"#\",\"$\",\"%\",\"&\",\"'\",\"(\",\")\",\"*\",\"+\",\",\",\"-\",\".\",\"/\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\":\",\";\",\"<\",\"=\",\">\",\"?\",\"@\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"[\",\"\\\\\",\"]\",\"^\",\"_\",\"`\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"{\",\"|\",\"}\",\"~\",,,\".\",\"[\",\"]\",\",\",\"*\",\"wo\",\"a\",\"i\",\"u\",\"e\",\"o\",\"ya\",\"yu\",\"yo\",\"tu\",\"+\",\"a\",\"i\",\"u\",\"e\",\"o\",\"ka\",\"ki\",\"ku\",\"ke\",\"ko\",\"sa\",\"si\",\"su\",\"se\",\"so\",\"ta\",\"ti\",\"tu\",\"te\",\"to\",\"na\",\"ni\",\"nu\",\"ne\",\"no\",\"ha\",\"hi\",\"hu\",\"he\",\"ho\",\"ma\",\"mi\",\"mu\",\"me\",\"mo\",\"ya\",\"yu\",\"yo\",\"ra\",\"ri\",\"ru\",\"re\",\"ro\",\"wa\",\"n\",\":\",\";\",,\"g\",\"gg\",\"gs\",\"n\",\"nj\",\"nh\",\"d\",\"dd\",\"r\",\"lg\",\"lm\",\"lb\",\"ls\",\"lt\",\"lp\",\"rh\",\"m\",\"b\",\"bb\",\"bs\",\"s\",\"ss\",,\"j\",\"jj\",\"c\",\"k\",\"t\",\"p\",\"h\",,,,\"a\",\"ae\",\"ya\",\"yae\",\"eo\",\"e\",,,\"yeo\",\"ye\",\"o\",\"wa\",\"wae\",\"oe\",,,\"yo\",\"u\",\"weo\",\"we\",\"wi\",\"yu\",,,\"eu\",\"yi\",\"i\",,,,\"/C\",\"PS\",\"!\",\"-\",\"|\",\"Y=\",\"W=\",,\"|\",\"-\",\"|\",\"-\",\"|\",\"#\",\"O\",,,,,,,,,,,\"{\",\"|\",\"}\"]];const i={};for(let n=0;n<a.length;n++)for(let e=0;e<a[n].length;e++){const u=a[n][e];if(\"string\"==typeof u&&u.length){const a=String.fromCharCode((n<<8)+e);i[a]=u}}function n(a){return(a||\"\").replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\")}function e(a){return/[\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u3005\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uF900-\\uFA6D\\uFA70-\\uFAD9]|\\uD81B[\\uDFF0\\uDFF1]|[\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]/.test(a)}function u(a){return/[\\s!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/.test(a)}function o(a){switch(!0){case a instanceof Array:const i=[];for(let n=0;n<a.length;n++)i[n]=o(a[n]);return i;case a instanceof Date:return new Date(a.valueOf());case a instanceof RegExp:return new RegExp(a.source,a.flags);case a instanceof Object:const n={};for(const i in a)Object.prototype.hasOwnProperty.call(a,i)&&(n[i]=o(a[i]));return n;default:return a}}function g(a,i){if(0===i.length)return!1;const n=Math.floor(i.length/2);switch(function(a,i){switch(!0){case a<i[0]:return-1;case a>i[1]:return 1}return 0}(a,i[n])){case-1:return g(a,i.slice(0,n));case 1:return g(a,i.slice(n+1))}return!0}function h(a,i,e,u=[]){const o=u.length?RegExp(u.map(n).join(\"|\"),\"g\"):null,g=RegExp(i.source,i.flags.replace(\"g\",\"\")+\"g\");let h=\"\",s=0;for(;;){const i=g.exec(a);let n=\"\",u=0;if(!i){h+=a.substring(s,a.length);break}for(;;){const a=o?o.exec(i[0]):null;if(!a){n+=i[0].length>u?e:\"\";break}n+=a.index>u?e:\"\",n+=a[0],u=o.lastIndex}h+=a.substring(s,i.index)+n,s=g.lastIndex}return h}a=void 0;const s={ignore:[],replace:[],replaceAfter:[],trim:!1,unknown:\"\",fixChineseSpacing:!0};class y{constructor(a=o(s),n=i){this.confOptions=a,this.map=n}get options(){return o(Object.assign(Object.assign({},s),this.confOptions))}config(a,i=!1){return i&&(this.confOptions={}),a&&\"object\"==typeof a&&(this.confOptions=o(a)),this.confOptions}codeMapReplace(a,i=[],n){let o=0,h=\"\";const s=n.fixChineseSpacing&&e(a);let y=!1;for(let l=0;l<a.length;l++){const b=/[\\uD800-\\uDBFF]/.test(a[l])&&/[\\uDC00-\\uDFFF]/.test(a[l+1])?a[l]+a[l+1]:a[l];let w,j=!1;switch(!0){case g(o,i):case 2===b.length&&g(o+1,i):w=b,i.find(a=>a[1]>=o&&a[0]===o)||(j=!0);break;default:w=this.map[b]||n.unknown||\"\"}s&&(!y||j||u(w)||(w=\" \"+w),y=!!w&&e(b)),h+=w,o+=b.length,l+=b.length-1}return h}formatReplaceOption(a){if(a instanceof Array)return o(a);const i=[];for(const n in a)Object.prototype.hasOwnProperty.call(a,n)&&i.push([n,a[n]]);return i}replaceString(a,i,e=[]){const u=o(i);let g=a;for(let a=0;a<u.length;a++){const i=u[a];switch(!0){case i[0]instanceof RegExp:i[0]=RegExp(i[0].source,i[0].flags.replace(\"g\",\"\")+\"g\");break;case\"string\"==typeof i[0]&&i[0].length>0:i[0]=RegExp(n(i[0]),\"g\");break;default:i[0]=/[^\\s\\S]/}g=h(g,i[0],i[1],e)}return g}setData(a,n=!1){if(n&&(this.map=o(i)),a&&\"object\"==typeof a&&Object.keys(a).length){this.map=o(this.map);for(const i in a)Object.prototype.hasOwnProperty.call(a,i)&&i.length<3&&i<=\"\"&&(this.map[i]=a[i])}return this.map}transliterate(a,i){i=\"object\"==typeof i?i:{};const n=o(Object.assign(Object.assign({},this.options),i));let e=\"string\"==typeof a?a:String(a);const u=this.formatReplaceOption(n.replace);u.length&&(e=this.replaceString(e,u,n.ignore));const g=n.ignore&&n.ignore.length>0?function(a,i){let n=[];for(let e=0;e<i.length;e++){const u=i[e];let o=-1;for(;(o=a.indexOf(u,o+1))>-1;)n.push([o,o+u.length-1])}const e=n.sort((a,i)=>a[0]-i[0]||a[1]-i[1]);let u;return n=[],e.forEach(a=>!u||a[0]>u[1]+1?n.push(u=a):a[1]>u[1]&&(u[1]=a[1])),n}(e,n.ignore):[];e=this.codeMapReplace(e,g,n),n.trim&&(e=e.trim());const h=this.formatReplaceOption(n.replaceAfter);return h.length&&(e=this.replaceString(e,h)),e}}const l=Object.assign(Object.assign({},o(s)),{allowedChars:\"a-zA-Z0-9-_.~\",lowercase:!0,separator:\"-\",uppercase:!1,fixChineseSpacing:!0});const b=new y,w=b.transliterate.bind(b);w.config=b.config.bind(b),w.setData=b.setData.bind(b);const j=new class extends y{get options(){return o(Object.assign(Object.assign({},l),this.confOptions))}config(a,i=!1){return i&&(this.confOptions={}),a&&\"object\"==typeof a&&(this.confOptions=o(a)),this.confOptions}slugify(a,i){i=\"object\"==typeof i?i:{};const e=o(Object.assign(Object.assign({},this.options),i)),u=e.separator?n(e.separator):\"\";let g=this.transliterate(a,e);return g=h(g,RegExp(`[^${e.allowedChars}]+`,\"g\"),e.separator,e.ignore),u&&(g=g.replace(RegExp(`^${u}+|${u}$`,\"g\"),\"\")),e.lowercase&&(g=g.toLowerCase()),e.uppercase&&(g=g.toUpperCase()),g}},d=j.slugify.bind(j);d.config=j.config.bind(j),d.setData=j.setData.bind(j);export{d as slugify,w as transl,w as transliterate};\n//# sourceMappingURL=bundle.esm.min.js.map\n","/*\r\n * cite.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { CiteField } from 'editor-types';\r\n\r\nimport { CSLName, CSLDate, CSL } from './csl';\r\nimport { InsertCiteProps, InsertCiteUI } from 'editor-types';\r\nimport { urlForDOI } from './doi';\r\n\r\nimport pinyin from 'pinyin';\r\nimport { transliterate } from 'transliteration';\r\n\r\nexport type { CiteField };\r\n\r\nexport const kInvalidCiteKeyChars = /[\\][\\s@',\\\\#}{~%&$^_]/g;\r\nconst kCiteIdLeadingLength = 8;\r\n\r\nexport function createUniqueCiteId(existingIds: string[], baseId: string): string {\r\n let count = 0;\r\n\r\n // Remove any non-8bit ascii characters, if possible\r\n // convert Hanzi characters to ascii\r\n let asciiOnlyBaseId = '';\r\n\r\n const isHanzi = (char: number) => {\r\n return char >= 13312 && char <= 40895;\r\n };\r\n\r\n for (let i = 0; i < baseId.length; i++) {\r\n const char = baseId.charCodeAt(i);\r\n if (char <= 255) {\r\n asciiOnlyBaseId = asciiOnlyBaseId + String.fromCharCode(char);\r\n } else if (isHanzi(char)) {\r\n asciiOnlyBaseId = asciiOnlyBaseId + pinyin(String.fromCharCode(char));\r\n } else {\r\n // Transliterate other non ascii characters to the citekey\r\n asciiOnlyBaseId = asciiOnlyBaseId + transliterate(String.fromCharCode(char));\r\n }\r\n }\r\n\r\n // If there are no characters left, just used a placeholder\r\n if (asciiOnlyBaseId.length === 0) {\r\n asciiOnlyBaseId = 'cite';\r\n }\r\n\r\n // The base ID but with invalid characters replaced\r\n let safeBaseId = asciiOnlyBaseId.replace(kInvalidCiteKeyChars, '');\r\n\r\n // Ensure that this is a valid citation, stripping any invalid characters\r\n let proposedId = safeBaseId;\r\n\r\n // If there is a conflict with an existing id, we will append\r\n // the following character and try again. If the conflict continues with\r\n // the postfix character added, we'll increment and keep going through the\r\n // alphabet\r\n const disambiguationStartCharacter = 97; // a\r\n\r\n while (existingIds.includes(proposedId)) {\r\n // If we've wrapped around to a and we haven't found a unique entry\r\n // Add an 'a' to the end and try again. Will ultimately create an entry like\r\n // Teague2012aaaf\r\n if (count !== 0 && count % 26 === 0) {\r\n safeBaseId = safeBaseId + String.fromCharCode(disambiguationStartCharacter);\r\n }\r\n\r\n const postfix = String.fromCharCode(disambiguationStartCharacter + (count % 26));\r\n proposedId = safeBaseId + postfix;\r\n count++;\r\n }\r\n return proposedId;\r\n}\r\n\r\n// Suggests a bibliographic identifier based upon the source\r\nexport function suggestCiteId(existingIds: string[], csl: CSL) {\r\n const author = csl.author;\r\n const issued = csl.issued;\r\n\r\n // Try to get the last name\r\n let citeIdLeading = '';\r\n if (author && author.length > 0) {\r\n if (author[0].family) {\r\n citeIdLeading = author[0].family;\r\n } else if (author[0].literal) {\r\n citeIdLeading = author[0].literal;\r\n }\r\n }\r\n\r\n // If we can't use author information, try using short title,\r\n // the title, or perhaps the type to construct a leading part of the\r\n // citeId.\r\n if (citeIdLeading.length === 0) {\r\n const shortTitle = csl['short-title'];\r\n if (shortTitle && shortTitle?.length > 0) {\r\n citeIdLeading = shortTitle.substr(0, Math.min(kCiteIdLeadingLength, shortTitle.length));\r\n } else if (csl.title) {\r\n citeIdLeading = csl.title.substr(0, Math.min(kCiteIdLeadingLength, csl.title.length));\r\n } else {\r\n citeIdLeading = csl.type;\r\n }\r\n }\r\n\r\n // Try to get the publication year\r\n let datePart = '';\r\n if (issued && issued['date-parts'] && issued['date-parts'].length > 0) {\r\n const yearIssued = issued['date-parts'][0][0];\r\n // Sometimes, data arrives with a null value, ignore null\r\n if (yearIssued) {\r\n datePart = yearIssued + '';\r\n }\r\n }\r\n\r\n // Create a deduplicated string against the existing entries\r\n let baseId = `${citeIdLeading.toLowerCase()}${datePart}`;\r\n if (baseId.length === 0) {\r\n baseId = 'untitled';\r\n }\r\n\r\n return createUniqueCiteId(existingIds, baseId);\r\n}\r\n\r\nexport function urlForCitation(csl: CSL): string | undefined {\r\n if (csl.URL) {\r\n return csl.URL;\r\n } else if (csl.DOI) {\r\n return urlForDOI(csl.DOI);\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function formatForPreview(csl: CSL): CiteField[] {\r\n const pairs = new Array<CiteField>();\r\n if (csl.title) {\r\n pairs.push({ name: 'Title', value: csl.title });\r\n }\r\n pairs.push({ name: 'Authors', value: formatAuthors(csl.author, 255) });\r\n if (csl.issued && isValidDate(csl.issued)) {\r\n pairs.push({ name: 'Issue Date', value: formatIssuedDate(csl.issued) });\r\n }\r\n\r\n const containerTitle = csl['container-title'];\r\n if (containerTitle) {\r\n pairs.push({ name: 'Publication', value: containerTitle });\r\n }\r\n\r\n const volume = csl.volume;\r\n if (volume) {\r\n pairs.push({ name: 'Volume', value: volume });\r\n }\r\n\r\n const page = csl.page;\r\n if (page) {\r\n pairs.push({ name: 'Page(s)', value: page });\r\n }\r\n\r\n const cslAny = csl as { [key: string]: string | unknown };\r\n Object.keys(csl).forEach(key => {\r\n if (!kFilteredFields.includes(key)) {\r\n const value = cslAny[key];\r\n // Don't display complex fields or fields that aren't strings\r\n if (typeof value === 'string') {\r\n // Capitalize preview names\r\n const name = key.charAt(0).toUpperCase() + key.slice(1);\r\n pairs.push({ name, value });\r\n }\r\n }\r\n });\r\n\r\n return pairs;\r\n}\r\n\r\nconst kFilteredFields = [\r\n 'id',\r\n 'title',\r\n 'author',\r\n 'issued',\r\n 'container-title',\r\n 'volume',\r\n 'page',\r\n 'abstract',\r\n 'provider',\r\n];\r\n\r\n// Sometimes, data arrives with a null value\r\n// This function will validate that the year (required) doesn't\r\n// contain null\r\nfunction isValidDate(date: CSLDate): boolean {\r\n const dateParts = date['date-parts'];\r\n if (dateParts) {\r\n const invalidElement = dateParts.find(datePart => datePart[0] === null);\r\n return invalidElement === undefined;\r\n }\r\n return true;\r\n}\r\n\r\n// TODO: Needs to support localization of the templated strings\r\nconst kEtAl = 'et al.';\r\nexport function formatAuthors(authors?: CSLName[], maxLength?: number): string {\r\n // No author(s) specified\r\n if (!authors || authors.length === 0) {\r\n return '';\r\n }\r\n\r\n return authors\r\n .map(author => {\r\n if (author.literal?.length) {\r\n return author.literal;\r\n } else if (author.given?.length && author.family?.length) {\r\n // Family and Given name\r\n return `${author.family}, ${author.given.substring(0, 1)}`;\r\n } else if (author.family?.length) {\r\n // Family name only\r\n return `${author.family}`;\r\n } else {\r\n return '';\r\n }\r\n })\r\n .reduce((previous, current, index, array) => {\r\n // Ignore any additional authors if the string\r\n // exceeds the maximum length\r\n if ((maxLength && previous.length >= maxLength) || previous.endsWith(kEtAl)) {\r\n return previous;\r\n }\r\n\r\n if (index === 0) {\r\n // Too long, truncate\r\n if (maxLength && current.length > maxLength) {\r\n return `${current.substring(0, maxLength - 1)}…`;\r\n }\r\n // The first author\r\n return current;\r\n } else if (index > 0 && index === array.length - 1) {\r\n // The last author\r\n return addAuthorOrEtAl(previous, `${previous}, and ${current}`, maxLength);\r\n } else {\r\n // Middle authors\r\n return addAuthorOrEtAl(previous, `${previous}, ${current}`, maxLength);\r\n }\r\n });\r\n}\r\n\r\nfunction addAuthorOrEtAl(previousAuthorStr: string, newAuthorStr: string, maxLength?: number) {\r\n // if adding the string would make it too long, truncate\r\n if (maxLength && newAuthorStr.length > maxLength) {\r\n return etAl(previousAuthorStr, maxLength);\r\n }\r\n return newAuthorStr;\r\n}\r\n\r\nfunction etAl(authorStr: string, maxLength: number) {\r\n // First try just using et al., then shorten existing\r\n // author to accomodate\r\n const etAlStr = `${authorStr} ${kEtAl}`;\r\n if (maxLength && etAlStr.length > maxLength) {\r\n // First try to truncate to a space\r\n const lastSpace = authorStr.lastIndexOf(' ');\r\n if (lastSpace) {\r\n return `${authorStr.substr(0, lastSpace)} ${kEtAl}`;\r\n } else {\r\n // As a last resort, truncate with ellipsis\r\n const excessLength = etAlStr.length - maxLength - 1;\r\n return `${authorStr.substr(0, authorStr.length - excessLength)}… ${kEtAl}`;\r\n }\r\n }\r\n return etAlStr;\r\n}\r\n\r\n// TODO: Needs to support localization of the templated strings\r\nexport function formatIssuedDate(date: CSLDate | undefined): string {\r\n // No issue date for this\r\n if (!date) {\r\n return '';\r\n }\r\n\r\n const dateParts = date['date-parts'];\r\n if (dateParts) {\r\n switch (dateParts.length) {\r\n // There is a date range\r\n case 2:\r\n return `${dateParts[0][0]}-${dateParts[1][0]}`;\r\n // Only a single date\r\n case 1: {\r\n // Note that it is possible to receive an entry with a single null entry\r\n // For examples:\r\n // 10.1163/1874-6772_seg_a44_588\r\n const singleDatePart = dateParts[0][0];\r\n return `${singleDatePart ? singleDatePart : ''}`;\r\n }\r\n\r\n // Seems like a malformed date :(\r\n case 0:\r\n default:\r\n return '';\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nexport function citeUI(citeProps: InsertCiteProps): InsertCiteUI {\r\n if (citeProps.csl) {\r\n const suggestedId = suggestCiteId(citeProps.existingIds, citeProps.csl);\r\n const previewFields = formatForPreview(citeProps.csl);\r\n return {\r\n suggestedId,\r\n previewFields,\r\n };\r\n } else {\r\n // This should never happen - this function should always be called with a work\r\n return {\r\n suggestedId: '',\r\n previewFields: [],\r\n };\r\n }\r\n}\r\n","/*\r\n * ui-tools.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { attrPartitionKeyvalue, kStyleAttrib, pandocAttrKeyvalueFromText } from \"./pandoc_attr\";\r\nimport { AttrEditInput, AttrProps } from \"editor-types\";\r\n\r\n\r\nexport function attrInputToProps(attr: AttrEditInput): AttrProps {\r\n const classes = attr.classes ? attr.classes.split(/\\s+/) : [];\r\n let keyvalue: Array<[string, string]> | undefined;\r\n if (attr.keyvalue || attr.style) {\r\n let text = attr.keyvalue || '';\r\n if (attr.style) {\r\n text += `\\nstyle=${attr.style}\\n`;\r\n }\r\n keyvalue = pandocAttrKeyvalueFromText(text, '\\n');\r\n }\r\n return {\r\n id: asPandocId(attr.id || ''),\r\n classes: classes.map(asPandocClass),\r\n keyvalue: keyvalue || [],\r\n };\r\n}\r\n\r\nexport function asHtmlId(id: string | undefined) {\r\n if (id) {\r\n if (id.startsWith('#')) {\r\n return id;\r\n } else {\r\n return '#' + id;\r\n }\r\n } else {\r\n return id;\r\n }\r\n}\r\n\r\n\r\nexport function asPandocId(id: string) {\r\n return id.replace(/^#/, '');\r\n}\r\n\r\nfunction asPandocClass(clz: string) {\r\n return clz.replace(/^\\./, '');\r\n}\r\n\r\nexport function attrPropsToInput(attr: AttrProps): AttrEditInput {\r\n let style = \"\"\r\n let keyvalue = \"\"\r\n if (attr.keyvalue) {\r\n const partitionedKeyvalue = attrPartitionKeyvalue([kStyleAttrib], attr.keyvalue);\r\n if (partitionedKeyvalue.partitioned.length > 0) {\r\n style = partitionedKeyvalue.partitioned[0][1];\r\n }\r\n keyvalue = attrTextFromKeyvalue(partitionedKeyvalue.base);\r\n }\r\n\r\n return {\r\n id: asHtmlId(attr.id) || \"\",\r\n classes: attr.classes ? attr.classes.map(asHtmlClass).join(' ') : \"\",\r\n style,\r\n keyvalue,\r\n };\r\n}\r\n\r\nfunction attrTextFromKeyvalue(keyvalue: Array<[string, string]>) {\r\n return keyvalue.map(kv => `${kv[0]}=${kv[1]}`).join('\\n');\r\n}\r\n\r\nfunction asHtmlClass(clz: string | undefined) {\r\n if (clz) {\r\n if (clz.startsWith('.')) {\r\n return clz;\r\n } else {\r\n return '.' + clz;\r\n }\r\n } else {\r\n return clz;\r\n }\r\n}\r\n\r\n","/*\r\n * quote.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport const kQuoteType = 0;\r\nexport const kQuoteChildren = 1;\r\n\r\nexport enum QuoteType {\r\n SingleQuote = 'SingleQuote',\r\n DoubleQuote = 'DoubleQuote',\r\n}\r\n\r\nexport function quotesForType(type: QuoteType) {\r\n const dblQuote = type === QuoteType.DoubleQuote;\r\n return {\r\n begin: dblQuote ? '“' : '‘',\r\n end: dblQuote ? '”' : '’',\r\n };\r\n}\r\n\r\n// create regexs for removing quotes\r\nconst kSingleQuotes = quotesForType(QuoteType.SingleQuote);\r\nconst kSingleQuoteRegEx = new RegExp(`[${kSingleQuotes.begin}${kSingleQuotes.end}]`, 'g');\r\nconst kDoubleQuotes = quotesForType(QuoteType.DoubleQuote);\r\nconst kDoubleQuoteRegEx = new RegExp(`[${kDoubleQuotes.begin}${kDoubleQuotes.end}]`, 'g');\r\n\r\nexport function fancyQuotesToSimple(text: string) {\r\n return text.replace(kSingleQuoteRegEx, \"'\").replace(kDoubleQuoteRegEx, '\"');\r\n}\r\n","/*\r\n * math.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { EditorMath, EditorUIMath } from './ui-types';\r\nimport { PandocToken } from './pandoc';\r\nimport { markIsActive, getMarkAttrs } from './mark';\r\n\r\nexport const kMathType = 0;\r\nexport const kMathContent = 1;\r\n\r\n// additional field we stick into the AST for quarto crossref ids\r\nexport const kMathId = 2;\r\n\r\nexport enum MathType {\r\n Inline = 'InlineMath',\r\n Display = 'DisplayMath',\r\n}\r\n\r\nexport function editorMath(uiMath: EditorUIMath): EditorMath {\r\n // return a promise that will typeset this node's math (including retrying as long as is\r\n // required if the element is not yet connected to the DOM)\r\n return {\r\n typeset: (el: HTMLElement, math: string, priority: boolean): Promise<boolean> => {\r\n return new Promise(resolve => {\r\n // regular typeset if we are already connected\r\n if (el.isConnected) {\r\n uiMath.typeset(el, math, priority).then(resolve);\r\n } else {\r\n // otherwise wait 100ms then retry\r\n const timerId = window.setInterval(() => {\r\n if (el.isConnected) {\r\n clearInterval(timerId);\r\n uiMath.typeset(el, math, priority).then(resolve);\r\n }\r\n }, 100);\r\n }\r\n });\r\n },\r\n };\r\n}\r\n\r\nexport function delimiterForType(type: string) {\r\n if (type === MathType.Inline) {\r\n return '$';\r\n } else {\r\n return '$$';\r\n }\r\n}\r\n\r\nexport function stringifyMath(tok: PandocToken) {\r\n const delimter = delimiterForType(tok.c[kMathType].t);\r\n return delimter + tok.c[kMathContent] + delimter;\r\n}\r\n\r\nexport function mathTypeIsActive(state: EditorState, type: MathType) {\r\n const schema = state.schema;\r\n return (\r\n markIsActive(state, schema.marks.math) &&\r\n getMarkAttrs(state.doc, state.selection, schema.marks.math).type === type\r\n );\r\n}\r\n\r\n","/*\r\n * code.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey } from 'prosemirror-state';\r\n\r\nimport { canInsertNodeAtPos } from './node';\r\nimport { ResolvedPos, Slice, Fragment } from 'prosemirror-model';\r\nimport { CodeViewOptions } from './codeview'\r\n\r\nexport const kCodeAttr = 0;\r\nexport const kCodeText = 1;\r\n\r\nexport function codeNodeSpec() {\r\n return {\r\n content: 'text*',\r\n group: 'block',\r\n marks: '',\r\n code: true,\r\n defining: true,\r\n isolating: true,\r\n };\r\n}\r\n\r\nexport function codeViewClipboardPlugin(codeViews: { [key: string]: CodeViewOptions }) {\r\n return new Plugin({\r\n key: new PluginKey('code-view-clipboard'),\r\n props: {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n clipboardTextParser: (text: string, $context: ResolvedPos) : any => {\r\n // see if any of the code views want to handle this text\r\n for (const codeViewType of Object.keys(codeViews)) {\r\n const codeView = codeViews[codeViewType];\r\n if (codeView.createFromPastePattern && codeView.createFromPastePattern.test(text)) {\r\n const schema = $context.node().type.schema;\r\n const nodeType = schema.nodes[codeViewType];\r\n if (canInsertNodeAtPos($context, nodeType)) {\r\n const textNode = schema.text(text);\r\n const codeNode = nodeType.createAndFill({}, textNode);\r\n return new Slice(Fragment.from(codeNode), 0, 0);\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n },\r\n });\r\n}\r\n","/*\r\n * clipboard.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Slice, Fragment, MarkType, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { kPasteTransaction } from './transaction';\r\n\r\nexport function pasteTransaction(state: EditorState) {\r\n const tr = state.tr;\r\n tr.setMeta(kPasteTransaction, true);\r\n tr.setMeta('uiEvent', 'paste');\r\n return tr;\r\n}\r\n\r\n// add marks to plain text pasted into the editor (e.g. urls become links)\r\n// https://github.com/ProseMirror/prosemirror/issues/90\r\nexport function markPasteHandler(regexp: RegExp, type: MarkType, getAttrs: (s: string) => Record<string,unknown>) {\r\n const handler = (fragment: Fragment) => {\r\n regexp.lastIndex = 0;\r\n\r\n const nodes: ProsemirrorNode[] = [];\r\n\r\n fragment.forEach((child: ProsemirrorNode) => {\r\n if (child.isText) {\r\n const { text } = child;\r\n let pos = 0;\r\n let match;\r\n\r\n do {\r\n match = regexp.exec(text!);\r\n if (match) {\r\n const start = match.index;\r\n const end = start + match[0].length;\r\n const matchText = match.length > 1 ? match[1] : match[0];\r\n const attrs = getAttrs instanceof Function ? getAttrs(matchText) : getAttrs;\r\n if (start > 0) {\r\n nodes.push(child.cut(pos, start));\r\n }\r\n nodes.push(type.schema.text(matchText).mark(type.create(attrs).addToSet(child.marks)));\r\n pos = end;\r\n }\r\n } while (match);\r\n\r\n if (pos < text!.length) {\r\n nodes.push(child.cut(pos));\r\n }\r\n } else {\r\n nodes.push(child.copy(handler(child.content)));\r\n }\r\n });\r\n\r\n regexp.lastIndex = 0;\r\n\r\n return Fragment.fromArray(nodes);\r\n };\r\n\r\n return (slice: Slice) => new Slice(handler(slice.content), slice.openStart, slice.openEnd);\r\n}\r\n","/*\r\n * link.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { findChildren, findChildrenByType } from 'prosemirror-utils';\r\n\r\nimport { LinkType, LinkCapabilities, LinkTargets, LinkHeadingTarget } from 'editor-types'\r\nimport { markPasteHandler } from './clipboard';\r\n\r\nexport const kLinkTargetUrl = 0;\r\nexport const kLinkTargetTitle = 1;\r\n\r\nexport const kLinkAttr = 0;\r\nexport const kLinkChildren = 1;\r\nexport const kLinkTarget = 2;\r\n\r\nexport { LinkType };\r\n\r\nexport type { LinkCapabilities, LinkTargets, LinkHeadingTarget };\r\n\r\nexport const kLinkRegex = /(?:<)?([a-z]+:\\/\\/[^\\s>]+)(?:>)?/;\r\n\r\nexport function isLink(text: string) {\r\n return kLinkRegex.test(text);\r\n}\r\n\r\nexport async function linkTargets(doc: ProsemirrorNode) {\r\n const ids = findChildren(doc, node => !!node.attrs.id).map(value => value.node.attrs.id);\r\n\r\n const headings = findChildrenByType(doc, doc.type.schema.nodes.heading).map(heading => ({\r\n level: heading.node.attrs.level,\r\n text: heading.node.textContent,\r\n }));\r\n\r\n return {\r\n ids,\r\n headings,\r\n };\r\n}\r\n\r\nexport function linkPasteHandler(schema: Schema) {\r\n return markPasteHandler(\r\n new RegExp(kLinkRegex.source, 'g'),\r\n schema.marks.link, \r\n url => ({ href: url })\r\n )\r\n}\r\n\r\n\r\n","/*\r\n * pandoc.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Fragment, Mark, Node as ProsemirrorNode, Schema, NodeType, Attrs } from 'prosemirror-model';\r\n\r\nimport { PandocAttr, pandocAttrReadAST, kSpanChildren, kSpanAttr } from './pandoc_attr';\r\nimport { kQuoteType, kQuoteChildren, QuoteType } from './quote';\r\n\r\nimport { stringifyMath } from './math';\r\nimport { kCodeText } from './code';\r\nimport { kLinkChildren } from './link';\r\n\r\nimport { BibliographyResult, PandocServer, PandocApiVersion, PandocAst, PandocToken } from 'editor-types';\r\nimport { PandocExtensions } from './pandoc-types';\r\nexport type { BibliographyResult, PandocServer,PandocApiVersion, PandocAst, PandocToken, PandocExtensions };\r\n\r\n\r\nexport function imageAttributesAvailable(pandocExtensions: PandocExtensions) {\r\n return pandocExtensions.link_attributes || pandocExtensions.raw_html;\r\n}\r\n\r\nexport function parsePandocListOutput(output: string) {\r\n return output.split(/\\r?\\n/).filter(entry => entry.length);\r\n}\r\n\r\n\r\n// https://github.com/jgm/pandoc-types/blob/master/Text/Pandoc/Definition.hs\r\nexport enum PandocTokenType {\r\n Str = 'Str',\r\n Space = 'Space',\r\n Strong = 'Strong',\r\n Emph = 'Emph',\r\n Code = 'Code',\r\n Superscript = 'Superscript',\r\n Subscript = 'Subscript',\r\n Strikeout = 'Strikeout',\r\n SmallCaps = 'SmallCaps',\r\n Underline = 'Underline',\r\n Quoted = 'Quoted',\r\n RawInline = 'RawInline',\r\n RawBlock = 'RawBlock',\r\n LineBlock = 'LineBlock',\r\n Para = 'Para',\r\n Plain = 'Plain',\r\n Header = 'Header',\r\n CodeBlock = 'CodeBlock',\r\n BlockQuote = 'BlockQuote',\r\n BulletList = 'BulletList',\r\n OrderedList = 'OrderedList',\r\n DefinitionList = 'DefinitionList',\r\n Image = 'Image',\r\n Figure = 'Figure',\r\n Link = 'Link',\r\n Note = 'Note',\r\n Cite = 'Cite',\r\n Table = 'Table',\r\n AlignRight = 'AlignRight',\r\n AlignLeft = 'AlignLeft',\r\n AlignDefault = 'AlignDefault',\r\n AlignCenter = 'AlignCenter',\r\n ColWidth = 'ColWidth',\r\n ColWidthDefault = 'ColWidthDefault',\r\n HorizontalRule = 'HorizontalRule',\r\n LineBreak = 'LineBreak',\r\n SoftBreak = 'SoftBreak',\r\n Math = 'Math',\r\n InlineMath = 'InlineMath',\r\n DisplayMath = 'DisplayMath',\r\n Div = 'Div',\r\n Span = 'Span',\r\n Null = 'Null',\r\n}\r\n\r\nexport interface PandocTokenReader {\r\n // pandoc token name (e.g. \"Str\", \"Emph\", etc.)\r\n readonly token: PandocTokenType;\r\n\r\n // If present, gives a chance for the reader to decide whether it actually\r\n // wants to handle the token, based on factors other than the PandocTokenType\r\n readonly match?: (tok: PandocToken) => boolean;\r\n\r\n // one and only one of these values must also be set\r\n readonly text?: boolean;\r\n readonly node?: string;\r\n readonly block?: string;\r\n readonly mark?: string;\r\n readonly code_block?: boolean;\r\n\r\n // functions for getting attributes and children\r\n getAttrs?: (tok: PandocToken) => Attrs;\r\n getChildren?: (tok: PandocToken) => unknown[];\r\n getText?: (tok: PandocToken) => string;\r\n\r\n // lower-level handler function that overrides the above handler attributes\r\n // (they are ignored when handler is specified)\r\n handler?: (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => void;\r\n\r\n // post-processor for performing fixups that rely on seeing the entire\r\n // document (e.g. recognizing implicit header references)\r\n postprocessor?: PandocPostprocessorFn;\r\n}\r\n\r\n// constants used to read the contents of raw blocks\r\nexport const kRawBlockFormat = 0;\r\nexport const kRawBlockContent = 1;\r\n\r\n// filter sequences of tokens (e.g. for reducing some adjacent tokens to a single token)\r\nexport type PandocTokensFilterFn = (tokens: PandocToken[], writer: ProsemirrorWriter) => PandocToken[];\r\n\r\n// special reader that gets a first shot at blocks (i.e. to convert a para w/ a single image into a figure)\r\nexport type PandocBlockReaderFn = (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => boolean;\r\n\r\n// reader that gets a first shot at inline html (e.g. image node parsing an <img> tag)\r\nexport type PandocInlineHTMLReaderFn = (schema: Schema, html: string, writer?: ProsemirrorWriter) => boolean;\r\n\r\nexport interface ProsemirrorWriter {\r\n // open (then close) a node container\r\n openNode(type: NodeType, attrs: Attrs): void;\r\n closeNode(): ProsemirrorNode;\r\n\r\n // special open call for note node containers\r\n openNoteNode(ref: string): void;\r\n\r\n // add a node to the current container\r\n addNode(type: NodeType, attrs: Attrs, content: ProsemirrorNode[]): ProsemirrorNode | null;\r\n\r\n // open and close marks\r\n openMark(mark: Mark): void;\r\n closeMark(mark: Mark): void;\r\n\r\n // add text to the current node using the current mark set\r\n writeText(text: string): void;\r\n\r\n // write tokens into the current node\r\n writeTokens(tokens: PandocToken[]): void;\r\n\r\n // see if any inline HTML readers want to handle this html\r\n hasInlineHTMLWriter(html: string): boolean;\r\n writeInlineHTML(html: string): void;\r\n\r\n // log an unrecoginzed token type\r\n logUnrecognized(token: string): void;\r\n\r\n // log the presence of example lists\r\n logExampleList(): void;\r\n\r\n // query whether a given node type is open\r\n // (useful for e.g. conditional behavior when in a list or table)\r\n isNodeOpen(type: NodeType): boolean;\r\n}\r\n\r\nexport interface PandocNodeWriter {\r\n readonly name: string;\r\n readonly write: PandocNodeWriterFn;\r\n}\r\n\r\nexport type PandocNodeWriterFn = (output: PandocOutput, node: ProsemirrorNode) => void;\r\n\r\nexport type PandocPreprocessorFn = (markdown: string) => string;\r\n\r\nexport type PandocPostprocessorFn = (doc: ProsemirrorNode) => ProsemirrorNode;\r\n\r\nexport type PandocMarkdownPostProcessorFn = (markdown: string) => string;\r\n\r\nexport interface PandocMarkWriter {\r\n // pandoc mark name\r\n readonly name: string;\r\n\r\n // The 'priority' property allows us to dicate the order of nesting\r\n // for marks (this is required b/c Prosemirror uses a flat structure\r\n // whereby multiple marks are attached to text nodes). This allows us\r\n // to e.g. ensure that strong and em always occur outside code.\r\n readonly priority: number;\r\n\r\n // writer function\r\n readonly write: PandocMarkWriterFn;\r\n}\r\n\r\nexport type PandocMarkWriterFn = (output: PandocOutput, mark: Mark, parent: Fragment) => void;\r\n\r\nexport const kWriteSpaces = 'writeSpaces';\r\nexport const kPreventBracketEscape = 'preventBracketEscape';\r\n\r\nexport type PandocOutputOption = typeof kWriteSpaces | typeof kPreventBracketEscape;\r\n\r\n\r\n\r\nexport interface PandocOutput {\r\n extensions: PandocExtensions;\r\n write(value: unknown): void;\r\n writeToken(type: PandocTokenType, content?: (() => void) | unknown): void;\r\n writeMark(type: PandocTokenType, parent: Fragment, expelEnclosingWhitespace?: boolean): void;\r\n writeArray(content: () => void): void;\r\n writeAttr(id?: string, classes?: string[], keyvalue?: [[string, string]]): void;\r\n writeText(text: string | null): void;\r\n writeLink(href: string, title: string, attr: PandocAttr | null, f: () => void): void;\r\n writeNode(node: ProsemirrorNode): void;\r\n writeNodes(parent: ProsemirrorNode): void;\r\n writeNote(note: ProsemirrorNode): void;\r\n writeInlines(fragment: Fragment): void;\r\n writeRawMarkdown(markdown: Fragment | string, escapeSymbols?: boolean): void;\r\n withOption(option: PandocOutputOption, value: boolean, f: () => void): void;\r\n}\r\n\r\n// collect the text from a collection of pandoc ast\r\n// elements (ignores marks, useful for ast elements\r\n// that support marks but whose prosemirror equivalent\r\n// does not, e.g. image alt text)\r\n// https://github.com/jgm/pandoc/blob/83880b0dbc318703babfbb6905b1046fa48f1216/src/Text/Pandoc/Shared.hs#L439\r\nexport function stringifyTokens(c: PandocToken[], unemoji = false): string {\r\n return c\r\n .map(elem => {\r\n if (elem.t === PandocTokenType.Str) {\r\n return elem.c;\r\n } else if (\r\n elem.t === PandocTokenType.Space ||\r\n elem.t === PandocTokenType.SoftBreak ||\r\n elem.t === PandocTokenType.LineBreak\r\n ) {\r\n return ' ';\r\n } else if (elem.t === PandocTokenType.Link) {\r\n return stringifyTokens(elem.c[kLinkChildren]);\r\n } else if (elem.t === PandocTokenType.Span) {\r\n const attr = pandocAttrReadAST(elem, kSpanAttr);\r\n if (unemoji && attr.classes && attr.classes[0] === 'emoji') {\r\n return attr.keyvalue[0][1];\r\n } else {\r\n return stringifyTokens(elem.c[kSpanChildren]);\r\n }\r\n } else if (elem.t === PandocTokenType.Quoted) {\r\n const type = elem.c[kQuoteType].t;\r\n const quote = type === QuoteType.SingleQuote ? \"'\" : '\"';\r\n return quote + stringifyTokens(elem.c[kQuoteChildren]) + quote;\r\n } else if (elem.t === PandocTokenType.Math) {\r\n return stringifyMath(elem);\r\n } else if (elem.t === PandocTokenType.Code) {\r\n return elem.c[kCodeText];\r\n } else if (elem.c) {\r\n return stringifyTokens(elem.c);\r\n } else {\r\n return '';\r\n }\r\n })\r\n .join('');\r\n}\r\n\r\nexport function forEachToken(tokens: PandocToken[], f: (tok: PandocToken) => void) {\r\n mapTokens(tokens, (tok: PandocToken) => {\r\n f(tok);\r\n return tok;\r\n });\r\n}\r\n\r\nexport function mapTokens(tokens: PandocToken[], f: (tok: PandocToken) => PandocToken) {\r\n function isToken(val: unknown) {\r\n if (val !== null && typeof val === 'object') {\r\n return Object.prototype.hasOwnProperty.call(val, 't');\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n function tokenHasChildren(tok: PandocToken) {\r\n return tok !== null && typeof tok === 'object' && Array.isArray(tok.c);\r\n }\r\n\r\n function mapValue(val: unknown): unknown {\r\n if (isToken(val)) {\r\n return mapToken(val as PandocToken);\r\n } else if (Array.isArray(val)) {\r\n return val.map(mapValue);\r\n } else {\r\n return val;\r\n }\r\n }\r\n\r\n function mapToken(tok: PandocToken): PandocToken {\r\n const mappedTok = f(tok);\r\n if (tokenHasChildren(mappedTok)) {\r\n mappedTok.c = mappedTok.c.map(mapValue);\r\n }\r\n return mappedTok;\r\n }\r\n\r\n return tokens.map(mapToken);\r\n}\r\n\r\nexport function tokenTextEscaped(t: PandocToken) {\r\n return t.c.replace(/\\\\/g, `\\\\\\\\`);\r\n}\r\n\r\n// sort marks by priority (in descending order)\r\nexport function marksByPriority(marks: readonly Mark[], markWriters: { [key: string]: PandocMarkWriter }) {\r\n return Array.prototype.sort.call(marks, (a: Mark, b: Mark) => {\r\n const aPriority = markWriters[a.type.name].priority;\r\n const bPriority = markWriters[b.type.name].priority;\r\n if (aPriority < bPriority) {\r\n return 1;\r\n } else if (bPriority < aPriority) {\r\n return -1;\r\n } else {\r\n return 0;\r\n }\r\n }) as readonly Mark[];\r\n}\r\n","/*\r\n * pandoc_capabilities.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PandocServer, parsePandocListOutput, PandocApiVersion } from './pandoc';\r\n\r\nexport interface PandocCapabilities {\r\n version: string;\r\n api_version: PandocApiVersion;\r\n output_formats: string[];\r\n highlight_languages: string[];\r\n}\r\n\r\nexport async function getPandocCapabilities(server: PandocServer) {\r\n const result = await server.getCapabilities();\r\n return {\r\n version: result.version,\r\n api_version: result.api_version,\r\n output_formats: parsePandocListOutput(result.output_formats),\r\n highlight_languages: parsePandocListOutput(result.highlight_languages),\r\n };\r\n}\r\n","/*\r\n * html.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, DOMSerializer, Fragment } from 'prosemirror-model';\r\n\r\nexport const kHTMLCommentRegEx = /(?:^|[^`])(<!--([\\s\\S]*?)-->)/;\r\n\r\nexport function isHTMLComment(html: string) {\r\n return !!html.match(kHTMLCommentRegEx);\r\n}\r\n\r\nexport function isSingleLineHTML(html: string) {\r\n return html.trimRight().split('\\n').length === 1;\r\n}\r\n\r\nexport function asHTMLTag(\r\n tag: string,\r\n attribs: { [key: string]: unknown },\r\n selfClosing = false,\r\n noEmptyAttribs = false,\r\n) {\r\n const attribsHTML = Object.keys(attribs)\r\n .filter(name => !noEmptyAttribs || attribs[name])\r\n .map(name => `${name}=\"${escapeHTMLAttribute(String(attribs[name]))}\"`)\r\n .join(' ');\r\n return `<${tag} ${attribsHTML}${selfClosing ? '/' : ''}>`;\r\n}\r\n\r\nexport function escapeHTMLAttribute(value: string) {\r\n return value\r\n .replace(/&/g, '&') // must be first replacement\r\n .replace(/'/g, ''')\r\n .replace(/\"/g, '"')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n}\r\n\r\nexport function nodeToHTML(schema: Schema, node: ProsemirrorNode) {\r\n return generateHTML(() => DOMSerializer.fromSchema(schema).serializeNode(node));\r\n}\r\n\r\nexport function fragmentToHTML(schema: Schema, fragment: Fragment) {\r\n return generateHTML(() => DOMSerializer.fromSchema(schema).serializeFragment(fragment));\r\n}\r\n\r\nfunction generateHTML(generator: () => Node | DocumentFragment) {\r\n const div = document.createElement('div');\r\n const output = generator();\r\n div.appendChild(output);\r\n return div.innerHTML;\r\n}\r\n","/*\r\n * object.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function findValue(key: string, object?: { [key: string]: any }) {\r\n if (!object) {\r\n return undefined;\r\n }\r\n\r\n let value;\r\n\r\n Object.keys(object).some(k => {\r\n if (k === key) {\r\n value = object[k];\r\n return true;\r\n }\r\n if (object[k] && typeof object[k] === 'object') {\r\n value = findValue(key, object[k]);\r\n return value !== undefined;\r\n }\r\n return false;\r\n });\r\n\r\n return value;\r\n}\r\n","/*\r\n * pandoc_format.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { PandocServer, PandocExtensions } from './pandoc';\r\nimport { EditorFormat, kHugoDocType } from './format';\r\nimport { firstYamlBlock, yamlMetadataNodes } from './yaml';\r\nimport { findValue } from './object';\r\nimport { PandocFormat, PandocFormatConfig, PandocFormatWarnings } from './pandoc-types';\r\n\r\nexport const kMarkdownFormat = 'markdown';\r\nexport const kMarkdownPhpextraFormat = 'markdown_phpextra';\r\nexport const kMarkdownGithubFormat = 'markdown_github';\r\nexport const kMarkdownMmdFormat = 'markdown_mmd';\r\nexport const kMarkdownStrictFormat = 'markdown_strict';\r\nexport const kGfmFormat = 'gfm';\r\nexport const kCommonmarkFormat = 'commonmark';\r\nexport const kCommonmarkXFormat = 'commonmark_x';\r\n\r\nexport function matchPandocFormatComment(code: string) {\r\n const magicCommentRegEx = /^<!--\\s+-\\*-([\\s\\S]*?)-\\*-\\s+-->\\s*$/m;\r\n return code.match(magicCommentRegEx);\r\n}\r\n\r\nexport function pandocFormatConfigFromDoc(doc: ProsemirrorNode, isRmd: boolean) {\r\n return pandocFormatConfigFromYamlInDoc(doc, isRmd) || pandocFormatConfigFromCommentInDoc(doc) || {};\r\n}\r\n\r\nexport function pandocFormatConfigFromCode(code: string, isRmd: boolean): PandocFormatConfig {\r\n return pandocFormatConfigFromYamlInCode(code, isRmd) || pandocFormatConfigFromCommentInCode(code) || {};\r\n}\r\n\r\nfunction pandocFormatConfigFromYamlInCode(code: string, isRmd: boolean): PandocFormatConfig | null {\r\n // get the first yaml block in the file\r\n const yaml = firstYamlBlock(code);\r\n\r\n // did we find yaml?\r\n if (yaml) {\r\n // see if we have any md_extensions defined\r\n let mdExtensions : string | undefined = isRmd ? findValue('md_extensions', yaml?.output as Record<string,unknown>) : undefined;\r\n if (!mdExtensions) {\r\n // look for quarto 'from'\r\n const from = findValue('from', yaml);\r\n if (from) {\r\n const fromStr = String(from);\r\n const extensions = fromStr.match(/^\\w+([+-][\\w+-]+)$/);\r\n if (extensions) {\r\n mdExtensions = extensions[1];\r\n }\r\n }\r\n }\r\n\r\n // see if we have any markdown options defined\r\n let yamlFormatConfig: PandocFormatConfig | undefined;\r\n\r\n // first check 'editor' then check 'editor_options'\r\n const yamlEditor = yaml?.editor;\r\n\r\n if (yamlEditor && (yamlEditor instanceof Object) && \r\n yamlEditor.markdown && (yamlEditor.markdown instanceof Object)) {\r\n yamlFormatConfig = readPandocFormatConfig(yamlEditor.markdown);\r\n } else {\r\n const yamlMarkdownOptions = yaml?.editor_options?.markdown;\r\n if (yamlMarkdownOptions instanceof Object) {\r\n yamlFormatConfig = readPandocFormatConfig(yamlMarkdownOptions);\r\n }\r\n }\r\n\r\n // combine and return\r\n if (mdExtensions || yamlFormatConfig) {\r\n const formatConfig: PandocFormatConfig = yamlFormatConfig ? yamlFormatConfig : {};\r\n if (mdExtensions) {\r\n formatConfig.extensions = mdExtensions + (formatConfig.extensions || '');\r\n }\r\n return formatConfig;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction pandocFormatConfigFromYamlInDoc(doc: ProsemirrorNode, isRmd: boolean): PandocFormatConfig | null {\r\n const yamlNodes = yamlMetadataNodes(doc);\r\n if (yamlNodes.length > 0) {\r\n return pandocFormatConfigFromYamlInCode(yamlNodes[0].node.textContent, isRmd);\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction pandocFormatConfigFromCommentInCode(code: string): PandocFormatConfig | null {\r\n const keyValueRegEx = /^([^:]+):\\s*(.*)$/;\r\n const match = matchPandocFormatComment(code);\r\n if (match) {\r\n const comment = match[1];\r\n // split into semicolons\r\n const fields = comment.split(/\\s*;\\s/).map(field => field.trim());\r\n const variables: { [key: string]: string } = {};\r\n fields.forEach(field => {\r\n const keyValueMatch = field.match(keyValueRegEx);\r\n if (keyValueMatch) {\r\n variables[keyValueMatch[1].trim()] = keyValueMatch[2].trim();\r\n }\r\n });\r\n return readPandocFormatConfig(variables);\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction pandocFormatConfigFromCommentInDoc(doc: ProsemirrorNode): PandocFormatConfig | null {\r\n let config: PandocFormatConfig | null = null;\r\n let foundFirstRawInline = false;\r\n doc.descendants((node) => {\r\n // don't search once we've found our target\r\n if (foundFirstRawInline) {\r\n return false;\r\n }\r\n\r\n // if it's a text node with a raw-html then scan it for the format comment\r\n const schema = doc.type.schema;\r\n if (\r\n node.isText &&\r\n schema.marks.raw_html_comment &&\r\n schema.marks.raw_html_comment.isInSet(node.marks) &&\r\n node.attrs.format\r\n ) {\r\n foundFirstRawInline = true;\r\n config = pandocFormatConfigFromCommentInCode(node.textContent);\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n });\r\n return config;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction readPandocFormatConfig(source: Record<string,any>) {\r\n const asString = (obj: unknown): string => {\r\n if (typeof obj === 'string') {\r\n return obj;\r\n } else if (obj) {\r\n return obj.toString();\r\n } else {\r\n return '';\r\n }\r\n };\r\n\r\n const asBoolean = (obj: unknown) => {\r\n if (typeof obj === 'boolean') {\r\n return obj;\r\n } else {\r\n const str = asString(obj).toLowerCase();\r\n return str === 'true' || str === '1';\r\n }\r\n };\r\n\r\n const readWrap = () => {\r\n const wrap = source.wrap || source.wrap_column || source['fill-column'];\r\n if (wrap) {\r\n return asString(wrap);\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n const formatConfig: PandocFormatConfig = {};\r\n if (source.mode) {\r\n formatConfig.mode = asString(source.mode);\r\n }\r\n if (source.extensions) {\r\n formatConfig.extensions = asString(source.extensions);\r\n }\r\n if (source.rmd_extensions) {\r\n formatConfig.rmdExtensions = asString(source.rmd_extensions);\r\n }\r\n formatConfig.wrap = readWrap();\r\n if (source.doctype) {\r\n formatConfig.doctypes = asString(source.doctype)\r\n .split(',')\r\n .map(str => str.trim());\r\n }\r\n if (source.references) {\r\n if (typeof source.references === 'string') {\r\n formatConfig.references_location = source.references;\r\n } else {\r\n formatConfig.references_location = source.references.location;\r\n formatConfig.references_prefix = source.references.prefix;\r\n formatConfig.references_links = asBoolean(source.references.links);\r\n }\r\n }\r\n if (source.canonical) {\r\n formatConfig.canonical = asBoolean(source.canonical);\r\n }\r\n return formatConfig;\r\n}\r\n\r\nexport async function resolvePandocFormat(pandoc: PandocServer, format: EditorFormat): Promise<PandocFormat> {\r\n // additional markdown variants we support\r\n const kMarkdownVariants: { [key: string]: string[] } = {\r\n [kCommonmarkFormat]: commonmarkExtensions(),\r\n [kCommonmarkXFormat]: commonmarkXExtensions(),\r\n [kGfmFormat]: gfmExtensions(),\r\n goldmark: goldmarkExtensions(format),\r\n blackfriday: blackfridayExtensions(format),\r\n };\r\n\r\n // setup warnings\r\n const warnings: PandocFormatWarnings = { invalidFormat: '', invalidOptions: [] };\r\n\r\n // alias options and basename\r\n let options = format.pandocExtensions;\r\n let baseName = format.pandocMode;\r\n\r\n // validate the base format (fall back to markdown if it's not known)\r\n if (\r\n ![\r\n kMarkdownFormat,\r\n kMarkdownPhpextraFormat,\r\n kMarkdownGithubFormat,\r\n kMarkdownMmdFormat,\r\n kMarkdownStrictFormat,\r\n kGfmFormat,\r\n kCommonmarkFormat,\r\n kCommonmarkXFormat\r\n ]\r\n .concat(Object.keys(kMarkdownVariants))\r\n .includes(baseName)\r\n ) {\r\n warnings.invalidFormat = baseName;\r\n baseName = 'markdown';\r\n }\r\n\r\n // if we are using a variant then get it's base options and merge with user options\r\n if (kMarkdownVariants[baseName]) {\r\n const variant = kMarkdownVariants[baseName];\r\n options = variant.map(option => `${option}`).join('') + options;\r\n baseName = 'markdown_strict';\r\n }\r\n\r\n // query for format options\r\n const formatOptions = await pandoc.listExtensions(baseName);\r\n\r\n // active pandoc extensions\r\n const pandocExtensions: { [key: string]: boolean } = {};\r\n\r\n // first parse extensions for format\r\n parseExtensions(formatOptions).forEach(option => {\r\n pandocExtensions[option.name] = option.enabled;\r\n });\r\n\r\n // now parse extensions for user options (validate and build format name)\r\n const validOptionNames = parseExtensions(formatOptions).map(option => option.name);\r\n\r\n let fullName = baseName;\r\n parseExtensions(options).forEach(option => {\r\n // validate that the option is valid\r\n if (validOptionNames.includes(option.name)) {\r\n // add option\r\n fullName += (option.enabled ? '+' : '-') + option.name;\r\n pandocExtensions[option.name] = option.enabled;\r\n } else {\r\n warnings.invalidOptions.push(option.name);\r\n }\r\n });\r\n\r\n // return format name, enabled extensiosn, and warnings\r\n return {\r\n mode: format.pandocMode,\r\n baseName,\r\n fullName,\r\n extensions: (pandocExtensions as unknown) as PandocExtensions,\r\n warnings,\r\n };\r\n}\r\n\r\nfunction parseExtensions(options: string) {\r\n // remove any linebreaks\r\n options = options.split('\\n').join();\r\n\r\n // parse into separate entries\r\n const extensions: Array<{ name: string; enabled: boolean }> = [];\r\n const re = /([+-])([a-z_]+)/g;\r\n let match = re.exec(options);\r\n while (match) {\r\n extensions.push({ name: match[2], enabled: match[1] === '+' });\r\n match = re.exec(options);\r\n }\r\n\r\n return extensions;\r\n}\r\n\r\nexport function pandocFormatWith(format: string, prepend: string, append: string) {\r\n const split = splitPandocFormatString(format);\r\n return `${split.format}${prepend}${split.options}${append}`;\r\n}\r\n\r\nexport function splitPandocFormatString(format: string) {\r\n // split out base format from options\r\n let optionsPos = format.indexOf('-');\r\n if (optionsPos === -1) {\r\n optionsPos = format.indexOf('+');\r\n }\r\n const base = optionsPos === -1 ? format : format.substr(0, optionsPos);\r\n const options = optionsPos === -1 ? '' : format.substr(optionsPos);\r\n return {\r\n format: base,\r\n options,\r\n };\r\n}\r\n\r\nexport function hasFencedCodeBlocks(pandocExtensions: PandocExtensions) {\r\n return pandocExtensions.backtick_code_blocks || pandocExtensions.fenced_code_blocks;\r\n}\r\n\r\n// e.g. [My Heading] to link to ## My Heading\r\nexport function hasShortcutHeadingLinks(pandocExtensions: PandocExtensions) {\r\n return pandocExtensions.implicit_header_references && pandocExtensions.shortcut_reference_links;\r\n}\r\n\r\nfunction commonmarkExtensions(rawHTML = true) {\r\n const extensions = [\r\n rawHTML ? '+raw_html' : '-raw_html',\r\n '+all_symbols_escapable',\r\n '+backtick_code_blocks',\r\n '+fenced_code_blocks',\r\n '+space_in_atx_header',\r\n '+intraword_underscores',\r\n '+lists_without_preceding_blankline',\r\n '+shortcut_reference_links',\r\n ];\r\n return extensions;\r\n}\r\n\r\n// https://github.com/jgm/pandoc/commit/0aed9dd589189a9bbe5cae99e0e024e2d4a92c36\r\nfunction commonmarkXExtensions() {\r\n const extensions = [\r\n '+pipe_tables',\r\n '+raw_html',\r\n '+auto_identifiers',\r\n '+strikeout',\r\n '+task_lists',\r\n '+emoji',\r\n '+raw_tex',\r\n '+smart',\r\n '+tex_math_dollars',\r\n '+superscript',\r\n '+subscript',\r\n '+definition_lists',\r\n '+footnotes',\r\n '+fancy_lists',\r\n '+fenced_divs',\r\n '+bracketed_spans',\r\n '+raw_attribute',\r\n '+implicit_header_references',\r\n // '+attributes' (not yet)\r\n ];\r\n return extensions;\r\n}\r\n\r\nfunction gfmExtensions() {\r\n const extensions = [\r\n ...commonmarkExtensions(),\r\n '+auto_identifiers',\r\n '+autolink_bare_uris',\r\n '+emoji',\r\n '+gfm_auto_identifiers',\r\n '+pipe_tables',\r\n '+strikeout',\r\n '+task_lists',\r\n '+tex_math_dollars',\r\n '+footnotes'\r\n ];\r\n return extensions;\r\n}\r\n\r\n// https://gohugo.io/getting-started/configuration-markup/#goldmark\r\n// https://github.com/yuin/goldmark/#html-renderer-options\r\nfunction goldmarkExtensions(format: EditorFormat) {\r\n const extensions = [\r\n // start with commonmark\r\n ...commonmarkExtensions(false),\r\n\r\n // adds most of gfm\r\n '+pipe_tables',\r\n '+strikeout',\r\n '+autolink_bare_uris',\r\n '+task_lists',\r\n '+backtick_code_blocks',\r\n\r\n // plus some extras\r\n '+definition_lists',\r\n '+footnotes',\r\n '+smart',\r\n\r\n // hugo preprocessor supports yaml metadata\r\n '+yaml_metadata_block',\r\n ];\r\n\r\n if (includeTexMathDollars(format)) {\r\n extensions.push('+tex_math_dollars');\r\n }\r\n\r\n return extensions;\r\n}\r\n\r\n// https://github.com/russross/blackfriday/tree/v2#extensions\r\nfunction blackfridayExtensions(format: EditorFormat) {\r\n const extensions = [\r\n '+intraword_underscores',\r\n '+pipe_tables',\r\n '+backtick_code_blocks',\r\n '+definition_lists',\r\n '+footnotes',\r\n '+autolink_bare_uris',\r\n '+strikeout',\r\n '+smart',\r\n '+yaml_metadata_block',\r\n ];\r\n\r\n if (includeTexMathDollars(format)) {\r\n extensions.push('+tex_math_dollars');\r\n }\r\n\r\n return extensions;\r\n}\r\n\r\nfunction includeTexMathDollars(format: EditorFormat) {\r\n // hugo users often sort out some way to include math so we enable it for hugo\r\n return format.docTypes.includes(kHugoDocType) || format.rmdExtensions.blogdownMathInCode;\r\n}\r\n","/*\r\n * platform.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport const kPlatformMac = typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false;\r\n","/*\r\n * basekeys.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport {\r\n splitBlock,\r\n liftEmptyBlock,\r\n createParagraphNear,\r\n selectNodeBackward,\r\n joinBackward,\r\n deleteSelection,\r\n selectNodeForward,\r\n joinForward,\r\n chainCommands,\r\n} from 'prosemirror-commands';\r\nimport { undoInputRule } from 'prosemirror-inputrules';\r\nimport { keymap } from 'prosemirror-keymap';\r\nimport { EditorState, Transaction, Plugin, Selection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { CommandFn } from './command';\r\nimport { editingRootNodeClosestToPos, editingRootNode } from './node';\r\nimport { selectionIsBodyTopLevel } from './selection';\r\nimport { kPlatformMac } from './platform';\r\n\r\nimport { BaseKey, BaseKeyBinding } from './basekeys-types';\r\n\r\nexport { BaseKey} ;\r\nexport type { BaseKeyBinding }\r\n\r\n\r\nexport function baseKeysPlugin(keys: readonly BaseKeyBinding[]): Plugin {\r\n // collect all keys\r\n const pluginKeys = [\r\n // base enter key behaviors\r\n { key: BaseKey.Enter, command: splitBlock },\r\n { key: BaseKey.Enter, command: liftEmptyBlock },\r\n { key: BaseKey.Enter, command: createParagraphNear },\r\n\r\n // base backspace key behaviors\r\n { key: BaseKey.Backspace, command: selectNodeBackward },\r\n { key: BaseKey.Backspace, command: joinBackward },\r\n { key: BaseKey.Backspace, command: deleteSelection },\r\n { key: BaseKey.Backspace, command: clearBlockFormatting() },\r\n\r\n // base tab key behavior (ignore)\r\n { key: BaseKey.Tab, command: ignoreKey },\r\n { key: BaseKey.ShiftTab, command: ignoreKey },\r\n\r\n // base delete key behaviors\r\n { key: BaseKey.Delete, command: selectNodeForward },\r\n { key: BaseKey.Delete, command: joinForward },\r\n { key: BaseKey.Delete, command: deleteSelection },\r\n\r\n // base home/end key behaviors (Mac desktop default behavior advances to beginning/end of\r\n // document, so we provide our own implementation rather than relying on contentEditable)\r\n kPlatformMac ? { key: BaseKey.Home, command: homeKey } : null,\r\n kPlatformMac ? { key: BaseKey.End, command: endKey } : null,\r\n\r\n // base arrow key behavior (prevent traversing top-level body notes)\r\n { key: BaseKey.ArrowLeft, command: arrowBodyNodeBoundary('left') },\r\n { key: BaseKey.ArrowUp, command: arrowBodyNodeBoundary('up') },\r\n { key: BaseKey.ArrowRight, command: arrowBodyNodeBoundary('right') },\r\n { key: BaseKey.ArrowDown, command: arrowBodyNodeBoundary('down') },\r\n { key: BaseKey.ModArrowDown, command: endTopLevelBodyNodeBoundary() },\r\n { key: BaseKey.CtrlEnd, command: endTopLevelBodyNodeBoundary() },\r\n\r\n // merge keys provided by extensions\r\n ...keys,\r\n\r\n // undoInputRule is always the highest priority backspace key\r\n { key: BaseKey.Backspace, command: undoInputRule },\r\n ].filter(x => !!x);\r\n\r\n // build arrays for each BaseKey type\r\n const commandMap: { [key: string]: CommandFn[] } = {};\r\n for (const baseKey of Object.values(BaseKey)) {\r\n commandMap[baseKey] = [];\r\n }\r\n pluginKeys.forEach(key => {\r\n if (key) {\r\n commandMap[key.key].unshift(key.command);\r\n }\r\n });\r\n\r\n const bindings: { [key: string]: CommandFn } = {};\r\n for (const baseKey of Object.values(BaseKey)) {\r\n const commands = commandMap[baseKey];\r\n // baseKey may contain multiple keys, separated by |\r\n for (const subkey of baseKey.split(/\\|/)) {\r\n bindings[subkey] = chainCommands(...commands);\r\n }\r\n }\r\n\r\n // return keymap\r\n return keymap(bindings);\r\n}\r\n\r\n\r\ninterface Coords {\r\n left: number;\r\n right: number;\r\n top: number;\r\n bottom: number;\r\n}\r\n\r\nfunction ignoreKey() {\r\n return true;\r\n}\r\n\r\nfunction homeKey(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\r\n const selection = state.selection;\r\n const editingNode = editingRootNode(selection);\r\n if (editingNode && dispatch && view) {\r\n const head = view.coordsAtPos(selection.head);\r\n const beginDocPos = editingNode.start;\r\n for (let pos = selection.from - 1; pos >= beginDocPos; pos--) {\r\n const coords = view.coordsAtPos(pos);\r\n if (isOnPreviousLine(head, coords) || pos === beginDocPos) {\r\n const tr = state.tr;\r\n setTextSelection(pos + 1)(tr);\r\n dispatch(tr);\r\n break;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nfunction endKey(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\r\n const selection = state.selection;\r\n const editingNode = editingRootNode(selection);\r\n if (editingNode && dispatch && view) {\r\n const head = view.coordsAtPos(selection.head);\r\n const endDocPos = editingNode.start + editingNode.node.nodeSize;\r\n for (let pos = selection.from + 1; pos < endDocPos; pos++) {\r\n const coords = view.coordsAtPos(pos);\r\n if (isOnNextLine(head, coords) || pos === endDocPos) {\r\n const tr = state.tr;\r\n setTextSelection(pos - 1)(tr);\r\n dispatch(tr);\r\n break;\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n// helpers to check for a y coordinate on a diffent line that the selection\r\n\r\n// y coorinates are sometimes off by 1 or 2 due to margin/padding (e.g. for\r\n// inline code spans or spelling marks) so the comparision only succeeds if\r\n// the vertical extents of the two coords don't overlap. If this proves to\r\n// still have false positives, we could lookahead to the next a few dozen\r\n// positions to check if we ever \"return to\" the head's baseline--only a\r\n// permanent change would indicate that the line has truly changed.\r\n\r\nfunction isOnNextLine(head: Coords, pos: Coords) {\r\n return head.bottom < pos.top;\r\n}\r\n\r\nfunction isOnPreviousLine(head: Coords, pos: Coords) {\r\n return head.top > pos.bottom;\r\n}\r\n\r\nfunction arrowBodyNodeBoundary(dir: 'up' | 'down' | 'left' | 'right') {\r\n return (state: EditorState, _dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n if (view && view.endOfTextblock(dir) && selectionIsBodyTopLevel(state.selection)) {\r\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\r\n const $head = state.selection.$head;\r\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\r\n const currentRootNode = editingRootNodeClosestToPos($head);\r\n const nextRootNode = editingRootNodeClosestToPos(nextPos.$head);\r\n return currentRootNode?.node?.type !== nextRootNode?.node?.type;\r\n } else {\r\n return false;\r\n }\r\n };\r\n}\r\n\r\nfunction endTopLevelBodyNodeBoundary() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const editingNode = editingRootNode(state.selection);\r\n if (editingNode && selectionIsBodyTopLevel(state.selection)) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n setTextSelection(editingNode.pos + editingNode.node.nodeSize - 2)(tr).scrollIntoView();\r\n dispatch(tr);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n}\r\n\r\n// backspace in an empty block should reset to a paragraph\r\nfunction clearBlockFormatting() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (state.selection.empty) {\r\n const nodeTypes = [\r\n state.schema.nodes.blockquote,\r\n state.schema.nodes.ordered_list,\r\n state.schema.nodes.bullet_list,\r\n state.schema.nodes.div,\r\n state.schema.nodes.line_block\r\n ].filter(x => !!x);\r\n const parentNode = findParentNodeOfType(nodeTypes)(state.selection);\r\n if (parentNode && parentNode.node.textContent.length === 0) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.replaceRangeWith(\r\n parentNode.pos, \r\n parentNode.pos + parentNode.node.nodeSize, \r\n state.schema.nodes.paragraph.create()\r\n );\r\n setTextSelection(parentNode.pos)(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n }\r\n return false; \r\n };\r\n}\r\n","/*\r\n * outline.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { NodeWithPos, findChildrenByType, findChildren } from 'prosemirror-utils';\r\n\r\nimport { \r\n EditingOutlineLocation, \r\n EditingOutlineLocationItem, \r\n kHeadingOutlineItemType, \r\n kRmdchunkOutlineItemType, \r\n kYamlMetadataOutlineItemType \r\n} from 'editor-types';\r\n\r\nimport { findTopLevelBodyNodes } from './node';\r\nimport { titleFromYamlMetadataNode } from './yaml';\r\nimport { rmdChunkEngineAndLabel } from './rmd';\r\n\r\n\r\n\r\nexport function getEditingOutlineLocation(state: EditorState): EditingOutlineLocation {\r\n // traverse document outline to get base location info\r\n const itemsWithPos = getDocumentOutline(state).map(nodeWithPos => {\r\n const schema = state.schema;\r\n const node = nodeWithPos.node;\r\n const item: EditingOutlineLocationItem = {\r\n type: kYamlMetadataOutlineItemType,\r\n level: 0,\r\n title: '',\r\n active: false,\r\n position: nodeWithPos.pos,\r\n };\r\n if (node.type === schema.nodes.yaml_metadata) {\r\n item.type = kYamlMetadataOutlineItemType;\r\n item.title = titleFromYamlMetadataNode(node) || '';\r\n } else if (node.type === schema.nodes.rmd_chunk) {\r\n item.type = kRmdchunkOutlineItemType;\r\n const chunk = rmdChunkEngineAndLabel(node.textContent);\r\n if (chunk) {\r\n item.title = chunk.label;\r\n }\r\n } else if (node.type === schema.nodes.heading) {\r\n item.type = kHeadingOutlineItemType;\r\n item.level = node.attrs.level;\r\n item.title = node.textContent;\r\n }\r\n return {\r\n item,\r\n pos: nodeWithPos.pos,\r\n };\r\n });\r\n\r\n // return the location, set the active item by scanning backwards until\r\n // we find an item with a position before the cursor\r\n let foundActive = false;\r\n const items: EditingOutlineLocationItem[] = [];\r\n for (let i = itemsWithPos.length - 1; i >= 0; i--) {\r\n const item = itemsWithPos[i].item;\r\n if (!foundActive && itemsWithPos[i].pos < state.selection.from) {\r\n item.active = true;\r\n foundActive = true;\r\n }\r\n items.unshift(item);\r\n }\r\n\r\n // return the outline\r\n return { items };\r\n}\r\n\r\n// get a document outline that matches the scheme provided in EditingOutlineLocation:\r\n// - yaml metadata blocks\r\n// - top-level headings\r\n// - rmd chunks at the top level or within a top-level list or div,\r\nexport function getDocumentOutline(state: EditorState): NodeWithPos[] {\r\n // get top level body nodes\r\n const schema = state.schema;\r\n const bodyNodes = findTopLevelBodyNodes(state.doc, node => {\r\n return [\r\n schema.nodes.yaml_metadata,\r\n schema.nodes.rmd_chunk,\r\n schema.nodes.heading,\r\n schema.nodes.bullet_list,\r\n schema.nodes.ordered_list,\r\n schema.nodes.div\r\n ].includes(node.type);\r\n });\r\n\r\n // reduce (explode lists into contained rmd chunks)\r\n const outlineNodes: NodeWithPos[] = [];\r\n bodyNodes.forEach(bodyNode => {\r\n // explode lists\r\n if ([schema.nodes.bullet_list, schema.nodes.ordered_list].includes(bodyNode.node.type)) {\r\n // look for rmd chunks within list items (non-recursive, only want top level)\r\n findChildrenByType(bodyNode.node, schema.nodes.list_item, false).forEach(listItemNode => {\r\n findChildrenByType(listItemNode.node, schema.nodes.rmd_chunk, false).forEach(rmdChunkNode => {\r\n outlineNodes.push({\r\n node: rmdChunkNode.node,\r\n pos: bodyNode.pos + 1 + listItemNode.pos + 1 + rmdChunkNode.pos,\r\n });\r\n });\r\n });\r\n\r\n // find headings and rmd chunks within divs\r\n } else if (schema.nodes.div === bodyNode.node.type) {\r\n findChildren(bodyNode.node, \r\n node => [schema.nodes.rmd_chunk, schema.nodes.heading].includes(node.type),\r\n true)\r\n .forEach(childNode => {\r\n outlineNodes.push({\r\n node: childNode.node,\r\n pos: bodyNode.pos + 1 + childNode.pos\r\n });\r\n }\r\n );\r\n \r\n // other nodes go straight through\r\n } else {\r\n outlineNodes.push(bodyNode);\r\n }\r\n });\r\n\r\n // return outline nodes\r\n return outlineNodes;\r\n}\r\n\r\nexport function getOutlineNodes(doc: ProsemirrorNode) {\r\n return findTopLevelBodyNodes(doc, isOutlineNode);\r\n}\r\n\r\nexport function isOutlineNode(node: ProsemirrorNode) {\r\n if (node.type.spec.attrs) {\r\n return Object.prototype.hasOwnProperty.call(node.type.spec.attrs,'navigation_id');\r\n } else {\r\n return false;\r\n }\r\n}\r\n","/*\r\n * dom.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nexport function bodyElement(view: EditorView): HTMLElement {\r\n return view.dom.firstChild as HTMLElement;\r\n}\r\n\r\nexport function isElementVisible(el: HTMLElement) {\r\n return !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length);\r\n}\r\n\r\nexport function elementInnerDimensions(el: HTMLElement) {\r\n const cs = getComputedStyle(el);\r\n\r\n const asNumber = (x: string | null) => (x ? parseFloat(x) : 0);\r\n const paddingX = asNumber(cs.paddingLeft) + asNumber(cs.paddingRight);\r\n const paddingY = asNumber(cs.paddingTop) + asNumber(cs.paddingBottom);\r\n const borderX = asNumber(cs.borderLeftWidth) + asNumber(cs.borderRightWidth);\r\n const borderY = asNumber(cs.borderTopWidth) + asNumber(cs.borderBottomWidth);\r\n\r\n return {\r\n width: el.offsetWidth - paddingX - borderX,\r\n height: el.offsetHeight - paddingY - borderY,\r\n };\r\n}\r\n\r\nexport function onElementRemoved(container: Node, el: HTMLElement, onRemoved: VoidFunction) {\r\n const observer = new MutationObserver(mutationsList => {\r\n mutationsList.forEach(mutation => {\r\n mutation.removedNodes.forEach(node => {\r\n if (node === el) {\r\n onRemoved();\r\n }\r\n });\r\n });\r\n });\r\n observer.observe(container, { attributes: false, childList: true, subtree: true });\r\n}\r\n\r\n\r\n\r\n// Receive a callback when the given node is attached to the given document.\r\nexport function onNodeAttached(node: Node, doc: Document,\r\n callback: (node: Node, parentNode: Node) => void) {\r\n\r\n const obs = new MutationObserver(mutations => {\r\n for (const mut of mutations) {\r\n mut.addedNodes.forEach(x => {\r\n if (x === node) {\r\n obs.disconnect();\r\n callback(node, mut.target);\r\n return;\r\n }\r\n });\r\n }\r\n });\r\n\r\n obs.observe(doc, {\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n return obs;\r\n}\r\n","import { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { NodeWithPos } from 'prosemirror-utils';\r\n\r\nimport { \r\n EditingOutlineLocation, \r\n EditingOutlineLocationItem, \r\n kHeadingOutlineItemType, \r\n kRmdchunkOutlineItemType, \r\n kYamlMetadataOutlineItemType \r\n} from 'editor-types';\r\n\r\n\r\nimport { bodyElement } from './dom';\r\nimport {\r\n getDocumentOutline,\r\n} from './outline';\r\nimport { restoreSelection } from './selection';\r\nimport { scrollToPos } from './scroll';\r\n\r\nexport interface EditingLocation {\r\n pos: number;\r\n scrollTop: number;\r\n}\r\n\r\nexport function getEditingLocation(view: EditorView): EditingLocation {\r\n const pos = view.state.selection.from;\r\n const bodyEl = bodyElement(view);\r\n const scrollTop = bodyEl.scrollTop;\r\n return { pos, scrollTop };\r\n}\r\n\r\nexport function setEditingLocation(\r\n view: EditorView,\r\n outlineLocation?: EditingOutlineLocation,\r\n previousLocation?: EditingLocation,\r\n) {\r\n // get the current document outline\r\n const documentOutline = getDocumentOutline(view.state);\r\n\r\n // if all of the types and levels match up to the active outline item,\r\n // then we have a candidate match\r\n let docOutlineLocationNode: NodeWithPos | undefined;\r\n\r\n if (outlineLocation) {\r\n for (let i = 0; i < outlineLocation.items.length && i < documentOutline.length; i++) {\r\n // get the item and it's peer\r\n const item = outlineLocation.items[i];\r\n const docOutlineNode = documentOutline[i];\r\n\r\n // if they don't match then bail (can't resolve different interpretations of the outline)\r\n if (!outlineItemSimillarToNode(item, docOutlineNode.node)) {\r\n break;\r\n }\r\n\r\n // if this is the active item\r\n if (item.active) {\r\n // see if the previous location is actually a better target (because it's between this location and\r\n // the next outline node). in that case we don't set the target node and we leave the restorePos\r\n // at the previous location\r\n if (!locationIsBetweenDocOutlineNodes(docOutlineNode, documentOutline[i + 1], previousLocation)) {\r\n // set the target\r\n docOutlineLocationNode = docOutlineNode;\r\n\r\n // if this is an rmd chunk then advance to the second line\r\n if (docOutlineNode.node.type === view.state.schema.nodes.rmd_chunk) {\r\n const chunkText = docOutlineNode.node.textContent;\r\n const newlineIdx = chunkText.indexOf('\\n');\r\n if (newlineIdx !== -1) {\r\n docOutlineLocationNode.pos += newlineIdx + 2;\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // do the restore\r\n if (docOutlineLocationNode) {\r\n restoreSelection(view, docOutlineLocationNode.pos);\r\n scrollToPos(view, docOutlineLocationNode.pos);\r\n } else if (previousLocation) {\r\n restoreSelection(view, previousLocation.pos);\r\n bodyElement(view).scrollTop = previousLocation.scrollTop;\r\n }\r\n}\r\n\r\nfunction outlineItemSimillarToNode(outlineItem: EditingOutlineLocationItem, docOutlneNode: ProsemirrorNode) {\r\n const schema = docOutlneNode.type.schema;\r\n if (outlineItem.type === kYamlMetadataOutlineItemType) {\r\n return docOutlneNode.type === schema.nodes.yaml_metadata;\r\n } else if (outlineItem.type === kRmdchunkOutlineItemType) {\r\n return docOutlneNode.type === schema.nodes.rmd_chunk;\r\n } else if (outlineItem.type === kHeadingOutlineItemType) {\r\n return docOutlneNode.type === schema.nodes.heading && docOutlneNode.attrs.level === outlineItem.level;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction locationIsBetweenDocOutlineNodes(nodeA: NodeWithPos, nodeB?: NodeWithPos, location?: EditingLocation) {\r\n // bail if we don't have all the arguments\r\n if (!nodeB || !location) {\r\n return false;\r\n }\r\n return nodeA.pos < location.pos && nodeB.pos > location.pos;\r\n}\r\n","/*\r\n * extension.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction } from 'prosemirror-state';\r\n\r\nexport enum FixupContext {\r\n Load,\r\n Save,\r\n Resize,\r\n}\r\n\r\nexport type FixupFn = (tr: Transaction, fixupContext: FixupContext) => Transaction;\r\n","/*\r\n * css.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { kWidthAttrib, kHeightAttrib, kStyleAttrib } from './pandoc_attr';\r\n\r\nexport const kPercentUnit = '%';\r\nexport const kPixelUnit = 'px';\r\nexport function removeStyleAttrib(style: string, attrib: string, handler?: (attrib: string, value: string) => void) {\r\n const pattern = '(' + attrib + ')\\\\:\\\\s*([^;]+);?';\r\n const regex = new RegExp(pattern, 'g');\r\n return style.replace(regex, (_match, p1, p2) => {\r\n if (handler) {\r\n handler(p1, p2);\r\n }\r\n return '';\r\n });\r\n}\r\n\r\nexport function extractSizeStyles(keyvalues: Array<[string, string]> | undefined) {\r\n if (!keyvalues) {\r\n return keyvalues;\r\n }\r\n\r\n let newKeyvalues = keyvalues;\r\n\r\n const getValue = (key: string) => {\r\n const pair = newKeyvalues.find(keyvalue => keyvalue[0] === key);\r\n return pair ? pair[1] : null;\r\n };\r\n\r\n const setValue = (key: string, value: string | null) => {\r\n newKeyvalues = newKeyvalues.filter(keyvalue => keyvalue[0] !== key);\r\n if (value) {\r\n newKeyvalues.push([key, value]);\r\n }\r\n };\r\n\r\n let width = getValue(kWidthAttrib);\r\n let height = getValue(kHeightAttrib);\r\n let style = getValue(kStyleAttrib);\r\n\r\n if (style) {\r\n style = removeStyleAttrib(style, kWidthAttrib, (_attrib, value) => {\r\n if (!width) {\r\n width = value;\r\n }\r\n });\r\n style = removeStyleAttrib(style, kHeightAttrib, (_attrib, value) => {\r\n if (!height) {\r\n height = value;\r\n }\r\n });\r\n\r\n // remove leading ; from style\r\n style = style.replace(/^\\s*;+\\s*/, '').trimLeft();\r\n }\r\n\r\n setValue(kWidthAttrib, width);\r\n setValue(kHeightAttrib, height);\r\n setValue(kStyleAttrib, style);\r\n\r\n return newKeyvalues;\r\n}\r\n\r\nexport function applyStyles(el: HTMLElement, classes?: string[], style?: { [key: string]: string }) {\r\n if (classes) {\r\n if (classes) {\r\n classes.forEach(clz => el.classList.add(clz));\r\n }\r\n }\r\n if (style) {\r\n Object.keys(style).forEach(name => {\r\n el.style.setProperty(name, style[name]);\r\n });\r\n }\r\n}\r\n\r\nexport function replaceClassWithStyle(el: HTMLElement, className: string, style: { [key: string]: string }) {\r\n if (el.classList.contains(className)) {\r\n el.classList.remove(className);\r\n if (el.classList.length === 0) {\r\n el.removeAttribute('class');\r\n }\r\n\r\n Object.keys(style).forEach(name => {\r\n el.style.setProperty(name, style[name]);\r\n });\r\n }\r\n const children = el.children;\r\n for (let i = 0; i<children.length; i++) {\r\n const child = children.item(i);\r\n if (child instanceof HTMLElement) {\r\n replaceClassWithStyle(child, className, style);\r\n }\r\n \r\n }\r\n}\r\n","/*\r\n * image.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { kPixelUnit, kPercentUnit } from './css';\r\n\r\nconst kDpi = 96;\r\n\r\n// https://github.com/jgm/pandoc/blob/master/src/Text/Pandoc/ImageSize.hs\r\nexport const kValidUnits = [kPixelUnit, 'in', 'cm', 'mm', kPercentUnit];\r\n\r\nexport enum ImageType {\r\n Image,\r\n Figure,\r\n}\r\n\r\nimport { ImageDimensions } from 'editor-types';\r\n\r\nexport type { ImageDimensions };\r\n\r\nexport function isValidImageSizeUnit(unit: string) {\r\n return kValidUnits.includes(unit);\r\n}\r\n\r\nexport function imageSizePropWithUnit(prop: string | null) {\r\n if (prop) {\r\n const match = prop.match(/(^\\d*\\.?\\d*)(.*)$/);\r\n if (match) {\r\n return {\r\n size: parseFloat(match[1]),\r\n unit: match[2],\r\n };\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function isNaturalAspectRatio(width: number, height: number, dims: ImageDimensions, defaultValue: boolean) {\r\n if (dims.naturalWidth && dims.naturalHeight) {\r\n const diff = Math.abs(width / height - dims.naturalWidth / dims.naturalHeight);\r\n return diff <= 0.01 * (width / height);\r\n } else {\r\n // no naturalWidth or naturalHeight, return default\r\n return defaultValue;\r\n }\r\n}\r\n\r\nexport function unitToPixels(value: number, unit: string, containerWidth: number) {\r\n let pixels;\r\n switch (unit) {\r\n case 'in':\r\n pixels = value * kDpi;\r\n break;\r\n case 'mm':\r\n pixels = value * (kDpi / 25.4);\r\n break;\r\n case 'cm':\r\n pixels = value * (kDpi / 2.54);\r\n break;\r\n case kPercentUnit:\r\n pixels = (value / 100) * ensureContainerWidth(containerWidth);\r\n break;\r\n case kPixelUnit:\r\n default:\r\n pixels = value;\r\n break;\r\n }\r\n return Math.round(pixels);\r\n}\r\n\r\nexport function pixelsToUnit(pixels: number, unit: string, containerWidth: number) {\r\n switch (unit) {\r\n case 'in':\r\n return pixels / kDpi;\r\n case 'mm':\r\n return (pixels / kDpi) * 25.4;\r\n case 'cm':\r\n return (pixels / kDpi) * 2.54;\r\n case kPercentUnit:\r\n return (pixels / ensureContainerWidth(containerWidth)) * 100;\r\n case kPixelUnit:\r\n default:\r\n return pixels;\r\n }\r\n}\r\n\r\nexport function roundUnit(value: number, unit: string) {\r\n switch (unit) {\r\n case 'in':\r\n return value.toFixed(2);\r\n case 'cm':\r\n return value.toFixed(1);\r\n default:\r\n return Math.round(value).toString();\r\n }\r\n}\r\n\r\n// sometime when we are called before the DOM renders the containerWidth\r\n// is 0, in this case provide a default of 1000\r\nexport function ensureContainerWidth(containerWidth: number) {\r\n return containerWidth || 1000;\r\n}\r\n","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author fraser@google.com (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nvar diff_match_patch = function() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close do\n // the contents have to be to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n // The number of bits in an int.\n this.Match_MaxBits = 32;\n};\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * ~Attempts to look like a two-element array (which is what this used to be).~\n * Constructor returns an actual two-element array, to allow destructing @JackuB\n * See https://github.com/JackuB/diff-match-patch/issues/14 for details\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function(op, text) {\n return [op, text];\n};\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n * by. Used internally for recursive calls. Users should set DiffTimeout\n * instead.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines,\n opt_deadline) {\n // Set a deadline by which time the diff must be complete.\n if (typeof opt_deadline == 'undefined') {\n if (this.Diff_Timeout <= 0) {\n opt_deadline = Number.MAX_VALUE;\n } else {\n opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000;\n }\n }\n var deadline = opt_deadline;\n\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n }\n return [];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n }\n if (commonsuffix) {\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines,\n deadline) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n new diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n new diff_match_patch.Diff(DIFF_INSERT,\n longtext.substring(i + shorttext.length))];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n // Merge the results.\n return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)],\n diffs_b);\n }\n\n if (checklines && text1.length > 100 && text2.length > 100) {\n return this.diff_lineMode_(text1, text2, deadline);\n }\n\n return this.diff_bisect_(text1, text2, deadline);\n};\n\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars_(text1, text2);\n text1 = a.chars1;\n text2 = a.chars2;\n var linearray = a.lineArray;\n\n var diffs = this.diff_main(text1, text2, false, deadline);\n\n // Convert the diff back to original text.\n this.diff_charsToLines_(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n var subDiff =\n this.diff_main(text_delete, text_insert, false, deadline);\n for (var j = subDiff.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, subDiff[j]);\n }\n pointer = pointer + subDiff.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n\n return diffs;\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Bail out if deadline is reached.\n if ((new Date()).getTime() > deadline) {\n break;\n }\n\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y,\n deadline) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = this.diff_main(text1a, text2a, false, deadline);\n var diffsb = this.diff_main(text1b, text2b, false, deadline);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n * An object containing the encoded text1, the encoded text2 and\n * the array of unique strings.\n * The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge_(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n if (lineArrayLength == maxLines) {\n // Bail out at 65535 because\n // String.fromCharCode(65536) == String.fromCharCode(0)\n line = text.substring(lineStart);\n lineEnd = text.length;\n }\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n lineStart = lineEnd + 1;\n }\n return chars;\n }\n // Allocate 2/3rds of the space for text1, the rest for text2.\n var maxLines = 40000;\n var chars1 = diff_linesToCharsMunge_(text1);\n maxLines = 65535;\n var chars2 = diff_linesToCharsMunge_(text2);\n return {chars1: chars1, chars2: chars2, lineArray: lineArray};\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {!Array.<string>} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n for (var i = 0; i < diffs.length; i++) {\n var chars = diffs[i][1];\n var text = [];\n for (var j = 0; j < chars.length; j++) {\n text[j] = lineArray[chars.charCodeAt(j)];\n }\n diffs[i][1] = text.join('');\n }\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (found == 0 || text1.substring(text_length - length) ==\n text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n if (this.Diff_Timeout <= 0) {\n // Don't risk returning a non-optimal diff if we have unlimited time.\n return null;\n }\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (lastEquality && (lastEquality.length <=\n Math.max(length_insertions1, length_deletions1)) &&\n (lastEquality.length <= Math.max(length_insertions2,\n length_deletions2))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: <del>abcxxx</del><ins>xxxdef</ins>\n // -> <del>abc</del>xxx<ins>def</ins>\n // e.g: <del>xxxabc</del><ins>defxxx</ins>\n // -> <ins>def</ins>xxx<del>abc</del>\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n insertion.substring(0, overlap_length1)));\n diffs[pointer - 1][1] =\n deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n deletion.substring(0, overlap_length2)));\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] =\n insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] =\n deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 &&\n char1.match(diff_match_patch.whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 &&\n char2.match(diff_match_patch.whitespaceRegex_);\n var lineBreak1 = whitespace1 &&\n char1.match(diff_match_patch.linebreakRegex_);\n var lineBreak2 = whitespace2 &&\n char2.match(diff_match_patch.linebreakRegex_);\n var blankLine1 = lineBreak1 &&\n one.match(diff_match_patch.blanklineEndRegex_);\n var blankLine2 = lineBreak2 &&\n two.match(diff_match_patch.blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastEquality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastEquality = null;\n }\n post_ins = post_del = false;\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>\n * <ins>A</ins>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<ins>C</ins>\n * <ins>A</del>X<ins>C</ins><del>D</del>\n * <ins>A</ins><del>B</del>X<del>C</del>\n */\n if (lastEquality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastEquality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastEquality = null;\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality.\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n text_insert.substring(0, commonlength)));\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var pattern_amp = /&/g;\n var pattern_lt = /</g;\n var pattern_gt = />/g;\n var pattern_para = /\\n/g;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<')\n .replace(pattern_gt, '>').replace(pattern_para, '¶<br>');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '<ins style=\"background:#e6ffe6;\">' + text + '</ins>';\n break;\n case DIFF_DELETE:\n html[x] = '<del style=\"background:#ffe6e6;\">' + text + '</del>';\n break;\n case DIFF_EQUAL:\n html[x] = '<span>' + text + '</span>';\n break;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n return text.join('\\t').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] =\n new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n } else {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap_(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet_(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n if (patch.start2 === null) {\n throw Error('patch not initialized');\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.<!diff_match_patch.Diff>=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = /** @type {string} */(a);\n diffs = this.diff_main(text1, /** @type {string} */(opt_b), true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(a);\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_b);\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.<!diff_match_patch.Diff>} */(opt_c);\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new diff_match_patch.patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n patch = new diff_match_patch.patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // https://github.com/google/diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new diff_match_patch.patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] =\n new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n var patch_size = this.Match_MaxBits;\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patch_size) {\n continue;\n }\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new diff_match_patch.patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0,\n patch_size - patch.length1 - this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n var text = textline.split('\\n');\n var textPointer = 0;\n var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n while (textPointer < text.length) {\n var m = text[textPointer].match(patchHeader);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new diff_match_patch.patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function() {\n /** @type {!Array.<!diff_match_patch.Diff>} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n};\n\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n return text.join('').replace(/%20/g, ' ');\n};\n\n\n// The following export code was added by @ForbesLindesay\nmodule.exports = diff_match_patch;\nmodule.exports['diff_match_patch'] = diff_match_patch;\nmodule.exports['DIFF_DELETE'] = DIFF_DELETE;\nmodule.exports['DIFF_INSERT'] = DIFF_INSERT;\nmodule.exports['DIFF_EQUAL'] = DIFF_EQUAL;","/*\r\n * diff.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { diff_match_patch, DIFF_DELETE, DIFF_EQUAL, DIFF_INSERT } from 'diff-match-patch';\r\n\r\nexport enum EditorChangeType {\r\n Insert = 1,\r\n Equal = 0,\r\n Delete = -1,\r\n}\r\n\r\nexport interface EditorChange {\r\n type: EditorChangeType;\r\n value: string;\r\n}\r\n\r\nexport function diffChars(from: string, to: string, timeout: number): EditorChange[] {\r\n const dmp = new diff_match_patch();\r\n dmp.Diff_Timeout = timeout;\r\n const diff = dmp.diff_main(from, to);\r\n dmp.diff_cleanupSemantic(diff);\r\n return diff.map(d => {\r\n let type: EditorChangeType;\r\n switch (d[0]) {\r\n case DIFF_INSERT:\r\n type = EditorChangeType.Insert;\r\n break;\r\n case DIFF_EQUAL:\r\n type = EditorChangeType.Equal;\r\n break;\r\n case DIFF_DELETE:\r\n type = EditorChangeType.Delete;\r\n break;\r\n default:\r\n throw new Error('Unexpected diff type: ' + d[0]);\r\n }\r\n return {\r\n type,\r\n value: d[1],\r\n };\r\n });\r\n}\r\n","/*\r\n * input_rule.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Schema, MarkType, NodeType, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { InputRule, wrappingInputRule } from 'prosemirror-inputrules';\r\n\r\nimport { PandocMark, markIsActive } from './mark';\r\n\r\nexport function markInputRule(\r\n regexp: RegExp,\r\n markType: MarkType,\r\n filter: MarkInputRuleFilter,\r\n getAttrs?: ((match: string[]) => object) | object,\r\n) {\r\n return new InputRule(regexp, (state: EditorState, match: string[], start: number, end: number) => {\r\n if (!filter(state, start, end)) {\r\n return null;\r\n }\r\n\r\n // remove any leading delimter (modulo spaces)\r\n const textIndex = match[0].indexOf(match[1]);\r\n const prefix = match[0].substring(0, textIndex).replace(/^\\s/, \"\");\r\n const delimStart = start + textIndex - prefix.length;\r\n const tr = state.tr;\r\n tr.delete(delimStart, delimStart + prefix.length);\r\n\r\n // create mark\r\n const attrs = getAttrs instanceof Function ? getAttrs(match) : getAttrs;\r\n const mark = markType.create(attrs);\r\n\r\n // apply it to the matching core text\r\n const markStart = start + textIndex - prefix.length;\r\n tr.addMark(markStart, markStart + match[1].length, mark);\r\n tr.removeStoredMark(mark); // Do not continue with mark.\r\n return tr;\r\n });\r\n}\r\n\r\nexport function delimiterMarkInputRule(\r\n delim: string,\r\n markType: MarkType,\r\n filter: MarkInputRuleFilter,\r\n prefixMask?: string,\r\n noEnclosingWhitespace?: boolean,\r\n) {\r\n // create distinct patterns depending on whether we allow enclosing whitespace\r\n const contentPattern = noEnclosingWhitespace\r\n ? `[^\\\\s${delim}][^${delim}]+[^\\\\s${delim}]|[^\\\\s${delim}]{1,2}`\r\n : `[^${delim}]+`;\r\n\r\n // if there is no prefix mask then this is simple regex we can pass to markInputRule\r\n if (!prefixMask) {\r\n const regexp = `(?:${delim})(${contentPattern})(?:${delim})$`;\r\n return markInputRule(new RegExp(regexp), markType, filter);\r\n\r\n // otherwise we need custom logic to get mark placement/eliding right\r\n } else {\r\n // build regex\r\n const regexp = `(^|[^${prefixMask}])(?:${delim})(${contentPattern})(?:${delim})$`;\r\n\r\n // return rule\r\n return new InputRule(new RegExp(regexp), (state: EditorState, match: string[], start: number, end: number) => {\r\n if (!filter(state, start, end)) {\r\n return null;\r\n }\r\n\r\n // init transaction\r\n const tr = state.tr;\r\n\r\n // compute offset for mask (should be zero if this was the beginning of a line,\r\n // in all other cases it would be the length of the any mask found).\r\n const maskOffset = match[1].length;\r\n\r\n // position of text to be formatted\r\n const textStart = start + match[0].indexOf(match[2]);\r\n const textEnd = textStart + match[2].length;\r\n\r\n // remove trailing markdown\r\n tr.delete(textEnd, end);\r\n\r\n // update start/end to reflect the leading mask which we want to leave alone\r\n start = start + maskOffset;\r\n end = start + match[2].length;\r\n\r\n // remove leading markdown\r\n tr.delete(start, textStart);\r\n\r\n // add mark\r\n const mark = markType.create();\r\n tr.addMark(start, end, mark);\r\n\r\n // remove stored mark so typing continues w/o the mark\r\n tr.removeStoredMark(mark);\r\n\r\n // return transaction\r\n return tr;\r\n });\r\n }\r\n}\r\n\r\nexport type MarkInputRuleFilter = (context: EditorState | Transaction, from?: number, to?: number) => boolean;\r\n\r\nexport function markInputRuleFilter(schema: Schema, marks: readonly PandocMark[]): MarkInputRuleFilter {\r\n const maskedMarkTypes = marksWithNoInputRules(schema, marks);\r\n\r\n return (context: EditorState | Transaction, from?: number, to?: number) => {\r\n if (from !== undefined && to !== undefined && from !== to) {\r\n const marksInRange: MarkType[] = [];\r\n context.doc.nodesBetween(from, to, node => {\r\n node.marks.forEach(mark => marksInRange.push(mark.type));\r\n });\r\n return !marksInRange.some(markType => maskedMarkTypes.includes(markType));\r\n }\r\n if (from === undefined) {\r\n for (const markType of maskedMarkTypes) {\r\n if (markIsActive(context, markType)) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport function conditionalWrappingInputRule(\r\n regexp: RegExp,\r\n nodeType: NodeType,\r\n predicate: (state: EditorState) => boolean,\r\n getAttrs?: { [key: string]: unknown } | ((p: string[]) => { [key: string]: unknown } | null | undefined),\r\n joinPredicate?: (p1: string[], p2: ProsemirrorNode) => boolean,\r\n): InputRule {\r\n const wrappingRule = wrappingInputRule(regexp, nodeType, getAttrs, joinPredicate);\r\n return new InputRule(regexp, (state: EditorState, match: string[], start: number, end: number) => {\r\n if (!predicate(state)) {\r\n return null;\r\n }\r\n // we know that the input rule has a handler even though the interface doesn't declare it\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return (wrappingRule as any).handler(state, match, start, end);\r\n });\r\n}\r\n\r\nfunction marksWithNoInputRules(schema: Schema, marks: readonly PandocMark[]): MarkType[] {\r\n const disabledMarks: MarkType[] = [];\r\n marks.forEach((mark: PandocMark) => {\r\n if (mark.noInputRules) {\r\n disabledMarks.push(schema.marks[mark.name]);\r\n }\r\n });\r\n return disabledMarks;\r\n}\r\n","// MIT © 2017 azu\n\"use strict\";\nexport var ASTNodeTypes;\n(function (ASTNodeTypes) {\n ASTNodeTypes[\"Document\"] = \"Document\";\n ASTNodeTypes[\"DocumentExit\"] = \"Document:exit\";\n ASTNodeTypes[\"Paragraph\"] = \"Paragraph\";\n ASTNodeTypes[\"ParagraphExit\"] = \"Paragraph:exit\";\n ASTNodeTypes[\"BlockQuote\"] = \"BlockQuote\";\n ASTNodeTypes[\"BlockQuoteExit\"] = \"BlockQuote:exit\";\n ASTNodeTypes[\"ListItem\"] = \"ListItem\";\n ASTNodeTypes[\"ListItemExit\"] = \"ListItem:exit\";\n ASTNodeTypes[\"List\"] = \"List\";\n ASTNodeTypes[\"ListExit\"] = \"List:exit\";\n ASTNodeTypes[\"Header\"] = \"Header\";\n ASTNodeTypes[\"HeaderExit\"] = \"Header:exit\";\n ASTNodeTypes[\"CodeBlock\"] = \"CodeBlock\";\n ASTNodeTypes[\"CodeBlockExit\"] = \"CodeBlock:exit\";\n ASTNodeTypes[\"HtmlBlock\"] = \"HtmlBlock\";\n ASTNodeTypes[\"HtmlBlockExit\"] = \"HtmlBlock:exit\";\n ASTNodeTypes[\"HorizontalRule\"] = \"HorizontalRule\";\n ASTNodeTypes[\"HorizontalRuleExit\"] = \"HorizontalRule:exit\";\n ASTNodeTypes[\"Comment\"] = \"Comment\";\n ASTNodeTypes[\"CommentExit\"] = \"Comment:exit\";\n /**\n * @deprecated\n */\n ASTNodeTypes[\"ReferenceDef\"] = \"ReferenceDef\";\n /**\n * @deprecated\n */\n ASTNodeTypes[\"ReferenceDefExit\"] = \"ReferenceDef:exit\";\n // inline\n ASTNodeTypes[\"Str\"] = \"Str\";\n ASTNodeTypes[\"StrExit\"] = \"Str:exit\";\n ASTNodeTypes[\"Break\"] = \"Break\";\n ASTNodeTypes[\"BreakExit\"] = \"Break:exit\";\n ASTNodeTypes[\"Emphasis\"] = \"Emphasis\";\n ASTNodeTypes[\"EmphasisExit\"] = \"Emphasis:exit\";\n ASTNodeTypes[\"Strong\"] = \"Strong\";\n ASTNodeTypes[\"StrongExit\"] = \"Strong:exit\";\n ASTNodeTypes[\"Html\"] = \"Html\";\n ASTNodeTypes[\"HtmlExit\"] = \"Html:exit\";\n ASTNodeTypes[\"Link\"] = \"Link\";\n ASTNodeTypes[\"LinkExit\"] = \"Link:exit\";\n ASTNodeTypes[\"Image\"] = \"Image\";\n ASTNodeTypes[\"ImageExit\"] = \"Image:exit\";\n ASTNodeTypes[\"Code\"] = \"Code\";\n ASTNodeTypes[\"CodeExit\"] = \"Code:exit\";\n ASTNodeTypes[\"Delete\"] = \"Delete\";\n ASTNodeTypes[\"DeleteExit\"] = \"Delete:exit\";\n})(ASTNodeTypes || (ASTNodeTypes = {}));\n//# sourceMappingURL=index.js.map","\"use strict\";\n\n/*\n Copyright (C) 2014 Yusuke Suzuki <utatane.tea@gmail.com>\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\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\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY\n 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\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nfunction compare(v1, v2) {\n return v1 < v2;\n}\n\nfunction upperBound(array, value, comp) {\n if (comp === undefined) comp = compare;\n return (function () {\n var len = array.length;\n var i = 0;\n\n while (len) {\n var diff = len >>> 1;\n var cursor = i + diff;\n if (comp(value, array[cursor])) {\n len = diff;\n } else {\n i = cursor + 1;\n len -= diff + 1;\n }\n }\n return i;\n })();\n}\n\nfunction lowerBound(array, value, comp) {\n if (comp === undefined) comp = compare;\n return (function () {\n var len = array.length;\n var i = 0;\n\n while (len) {\n var diff = len >>> 1;\n var cursor = i + diff;\n if (comp(array[cursor], value)) {\n i = cursor + 1;\n len -= diff + 1;\n } else {\n len = diff;\n }\n }\n return i;\n })();\n}\n\nfunction binarySearch(array, value, comp) {\n if (comp === undefined) comp = compare;\n return (function () {\n var cursor = lowerBound(array, value, comp);\n return cursor !== array.length && !comp(value, array[cursor]);\n })();\n}\n\nexports.compare = compare;\nexports.lowerBound = lowerBound;\nexports.upperBound = upperBound;\nexports.binarySearch = binarySearch;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLFNBQVMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDckIsU0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQ2xCOztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtNQUFKLElBQUksZ0JBQUosSUFBSSxHQUFHLE9BQU87c0JBQUU7QUFDOUMsUUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN2QixRQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRVYsV0FBTyxHQUFHLEVBQUU7QUFDUixVQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLFVBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsVUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzVCLFdBQUcsR0FBRyxJQUFJLENBQUM7T0FDZCxNQUFNO0FBQ0gsU0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDZixXQUFHLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztPQUNuQjtLQUNKO0FBQ0QsV0FBTyxDQUFDLENBQUM7R0FDWjtDQUFBOztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtNQUFKLElBQUksZ0JBQUosSUFBSSxHQUFHLE9BQU87c0JBQUU7QUFDOUMsUUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN2QixRQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRVYsV0FBTyxHQUFHLEVBQUU7QUFDUixVQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JCLFVBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEIsVUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQzVCLFNBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsV0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7T0FDbkIsTUFBTTtBQUNILFdBQUcsR0FBRyxJQUFJLENBQUM7T0FDZDtLQUNKO0FBQ0QsV0FBTyxDQUFDLENBQUM7R0FDWjtDQUFBOztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSTtNQUFKLElBQUksZ0JBQUosSUFBSSxHQUFHLE9BQU87c0JBQUU7QUFDaEQsUUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsV0FBTyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7R0FDakU7Q0FBQTs7UUFHRyxPQUFPLEdBQVAsT0FBTztRQUNQLFVBQVUsR0FBVixVQUFVO1FBQ1YsVUFBVSxHQUFWLFVBQVU7UUFDVixZQUFZLEdBQVosWUFBWSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuZnVuY3Rpb24gY29tcGFyZSh2MSwgdjIpIHtcbiAgICByZXR1cm4gdjEgPCB2Mjtcbn1cblxuZnVuY3Rpb24gdXBwZXJCb3VuZChhcnJheSwgdmFsdWUsIGNvbXAgPSBjb21wYXJlKSB7XG4gICAgbGV0IGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICB3aGlsZSAobGVuKSB7XG4gICAgICAgIGxldCBkaWZmID0gbGVuID4+PiAxO1xuICAgICAgICBsZXQgY3Vyc29yID0gaSArIGRpZmY7XG4gICAgICAgIGlmIChjb21wKHZhbHVlLCBhcnJheVtjdXJzb3JdKSkge1xuICAgICAgICAgICAgbGVuID0gZGlmZjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSBjdXJzb3IgKyAxO1xuICAgICAgICAgICAgbGVuIC09IGRpZmYgKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpO1xufVxuXG5mdW5jdGlvbiBsb3dlckJvdW5kKGFycmF5LCB2YWx1ZSwgY29tcCA9IGNvbXBhcmUpIHtcbiAgICBsZXQgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlIChsZW4pIHtcbiAgICAgICAgbGV0IGRpZmYgPSBsZW4gPj4+IDE7XG4gICAgICAgIGxldCBjdXJzb3IgPSBpICsgZGlmZjtcbiAgICAgICAgaWYgKGNvbXAoYXJyYXlbY3Vyc29yXSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBpID0gY3Vyc29yICsgMTtcbiAgICAgICAgICAgIGxlbiAtPSBkaWZmICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxlbiA9IGRpZmY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGk7XG59XG5cbmZ1bmN0aW9uIGJpbmFyeVNlYXJjaChhcnJheSwgdmFsdWUsIGNvbXAgPSBjb21wYXJlKSB7XG4gICAgbGV0IGN1cnNvciA9IGxvd2VyQm91bmQoYXJyYXksIHZhbHVlLCBjb21wKTtcbiAgICByZXR1cm4gY3Vyc29yICE9PSBhcnJheS5sZW5ndGggJiYgIWNvbXAodmFsdWUsIGFycmF5W2N1cnNvcl0pO1xufVxuXG5leHBvcnQge1xuICAgIGNvbXBhcmUsXG4gICAgbG93ZXJCb3VuZCxcbiAgICB1cHBlckJvdW5kLFxuICAgIGJpbmFyeVNlYXJjaCxcbn1cblxuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==","\"use strict\";\n\nvar _classProps = function (child, staticProps, instanceProps) {\n if (staticProps) Object.defineProperties(child, staticProps);\n if (instanceProps) Object.defineProperties(child.prototype, instanceProps);\n};\n\nvar upperBound = require('boundary').upperBound;\nvar Position = function Position(line, column) {\n this.line = line;\n this.column = column;\n};\n\nexports.Position = Position;\nvar SourceLocation = function SourceLocation(start, end) {\n this.start = start;\n this.end = end;\n};\n\nexports.SourceLocation = SourceLocation;\nvar StructuredSource = (function () {\n var StructuredSource =\n /**\n * @constructs StructuredSource\n * @param {string} source - source code text.\n */\n function StructuredSource(source) {\n this.indice = [0];\n var regexp = /[\\r\\n\\u2028\\u2029]/g;\n var length = source.length;\n regexp.lastIndex = 0;\n while (true) {\n var result = regexp.exec(source);\n if (!result) {\n break;\n }\n var index = result.index;\n if (source.charCodeAt(index) === 13 /* '\\r' */ && source.charCodeAt(index + 1) === 10 /* '\\n' */) {\n index += 1;\n }\n var nextIndex = index + 1;\n // If there's a last line terminator, we push it to the indice.\n // So use < instead of <=.\n if (length < nextIndex) {\n break;\n }\n this.indice.push(nextIndex);\n regexp.lastIndex = nextIndex;\n }\n };\n\n StructuredSource.prototype.locationToRange = function (loc) {\n return [this.positionToIndex(loc.start), this.positionToIndex(loc.end)];\n };\n\n StructuredSource.prototype.rangeToLocation = function (range) {\n return new SourceLocation(this.indexToPosition(range[0]), this.indexToPosition(range[1]));\n };\n\n StructuredSource.prototype.positionToIndex = function (pos) {\n // Line number starts with 1.\n // Column number starts with 0.\n var start = this.indice[pos.line - 1];\n return start + pos.column;\n };\n\n StructuredSource.prototype.indexToPosition = function (index) {\n var startLine = upperBound(this.indice, index);\n return new Position(startLine, index - this.indice[startLine - 1]);\n };\n\n _classProps(StructuredSource, null, {\n line: {\n get: function () {\n return this.indice.length;\n }\n }\n });\n\n return StructuredSource;\n})();\n\nexports[\"default\"] = StructuredSource;\n//# sourceMappingURL=data:application/json;base64,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QyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDdEU7O2NBckVnQixnQkFBZ0I7QUErQjdCLFFBQUk7V0FBQSxZQUFHO0FBQ1AsZUFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztPQUM3Qjs7OztTQWpDZ0IsZ0JBQWdCOzs7cUJBQWhCLGdCQUFnQiIsImZpbGUiOiJzdHJ1Y3R1cmVkLXNvdXJjZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIENvcHlyaWdodCAoQykgMjAxNCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+XG5cbiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuXG4gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG5cbiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCJcbiAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRVxuICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgPENPUFlSSUdIVCBIT0xERVI+IEJFIExJQUJMRSBGT1IgQU5ZXG4gIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTXG4gIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cblxuaW1wb3J0IHsgdXBwZXJCb3VuZCB9IGZyb20gJ2JvdW5kYXJ5JztcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihsaW5lLCBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU291cmNlTG9jYXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB9XG59XG5cbi8qKlxuICogU3RydWN0dXJlZFNvdXJjZVxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cnVjdHVyZWRTb3VyY2Uge1xuICAgIC8qKlxuICAgICAqIEBjb25zdHJ1Y3RzIFN0cnVjdHVyZWRTb3VyY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gc291cmNlIGNvZGUgdGV4dC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5pbmRpY2UgPSBbIDAgXTtcbiAgICAgICAgbGV0IHJlZ2V4cCA9IC9bXFxyXFxuXFx1MjAyOFxcdTIwMjldL2c7XG4gICAgICAgIGxldCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICByZWdleHAubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSByZWdleHAuZXhlYyhzb3VyY2UpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpbmRleCA9IHJlc3VsdC5pbmRleDtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4MEQgIC8qICdcXHInICovICYmXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEgIC8qICdcXG4nICovKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXh0SW5kZXggPSBpbmRleCArIDE7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgbGFzdCBsaW5lIHRlcm1pbmF0b3IsIHdlIHB1c2ggaXQgdG8gdGhlIGluZGljZS5cbiAgICAgICAgICAgIC8vIFNvIHVzZSA8IGluc3RlYWQgb2YgPD0uXG4gICAgICAgICAgICBpZiAobGVuZ3RoIDwgbmV4dEluZGV4KSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmluZGljZS5wdXNoKG5leHRJbmRleCk7XG4gICAgICAgICAgICByZWdleHAubGFzdEluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGljZS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtTb3VyY2VMb2NhdGlvbn0gbG9jIC0gbG9jYXRpb24gaW5kaWNhdG9yLlxuICAgICAqIEByZXR1cm4ge1sgbnVtYmVyLCBudW1iZXIgXX0gcmFuZ2UuXG4gICAgICovXG4gICAgbG9jYXRpb25Ub1JhbmdlKGxvYykge1xuICAgICAgICByZXR1cm4gWyB0aGlzLnBvc2l0aW9uVG9JbmRleChsb2Muc3RhcnQpLCB0aGlzLnBvc2l0aW9uVG9JbmRleChsb2MuZW5kKSBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7WyBudW1iZXIsIG51bWJlciBdfSByYW5nZSAtIHBhaXIgb2YgaW5kaWNlLlxuICAgICAqIEByZXR1cm4ge1NvdXJjZUxvY2F0aW9ufSBsb2NhdGlvbi5cbiAgICAgKi9cbiAgICByYW5nZVRvTG9jYXRpb24ocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLmluZGV4VG9Qb3NpdGlvbihyYW5nZVswXSksIHRoaXMuaW5kZXhUb1Bvc2l0aW9uKHJhbmdlWzFdKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtQb3NpdGlvbn0gcG9zIC0gcG9zaXRpb24gaW5kaWNhdG9yLlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gaW5kZXguXG4gICAgICovXG4gICAgcG9zaXRpb25Ub0luZGV4KHBvcykge1xuICAgICAgICAvLyBMaW5lIG51bWJlciBzdGFydHMgd2l0aCAxLlxuICAgICAgICAvLyBDb2x1bW4gbnVtYmVyIHN0YXJ0cyB3aXRoIDAuXG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMuaW5kaWNlW3Bvcy5saW5lIC0gMV07XG4gICAgICAgIHJldHVybiBzdGFydCArIHBvcy5jb2x1bW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gaW5kZXggdG8gdGhlIHNvdXJjZSBjb2RlLlxuICAgICAqIEByZXR1cm4ge1Bvc2l0aW9ufSBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBpbmRleFRvUG9zaXRpb24oaW5kZXgpIHtcbiAgICAgICAgbGV0IHN0YXJ0TGluZSA9IHVwcGVyQm91bmQodGhpcy5pbmRpY2UsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbihzdGFydExpbmUsIGluZGV4IC0gdGhpcy5pbmRpY2Vbc3RhcnRMaW5lIC0gMV0pO1xuICAgIH1cbn07XG5cbi8qIHZpbTogc2V0IHN3PTQgdHM9NCBldCB0dz04MCA6ICovXG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=","\"use strict\";\n\nvar StructuredSource = require('./structured-source.js')[\"default\"];\n\n\nmodule.exports = StructuredSource;\n\n/* vim: set sw=4 ts=4 et tw=80 : */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0lBd0JPLGdCQUFnQjs7O0FBRXZCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICBDb3B5cmlnaHQgKEMpIDIwMTQgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPlxuXG4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0VcbiAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIDxDT1BZUklHSFQgSE9MREVSPiBCRSBMSUFCTEUgRk9SIEFOWVxuICBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORFxuICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0ZcbiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiovXG5cbmltcG9ydCBTdHJ1Y3R1cmVkU291cmNlIGZyb20gJy4vc3RydWN0dXJlZC1zb3VyY2UuanMnXG5cbm1vZHVsZS5leHBvcnRzID0gU3RydWN0dXJlZFNvdXJjZTtcblxuLyogdmltOiBzZXQgc3c9NCB0cz00IGV0IHR3PTgwIDogKi9cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SourceCode = void 0;\nvar structured_source_1 = __importDefault(require(\"structured-source\"));\nvar SourceCode = /** @class */ (function () {\n function SourceCode(input) {\n this.index = 0;\n this.contexts = [];\n this.contextRanges = [];\n if (typeof input === \"string\") {\n this.textCharacters = input.split(\"\");\n this.source = new structured_source_1.default(input);\n this.startOffset = 0;\n this.firstChildPadding = 0;\n }\n else {\n this.sourceNode = input;\n // When pass AST, fist node may be >=\n // Preserve it as `startOffset`\n this.startOffset = this.sourceNode.range[0];\n // start index is startOffset\n this.index = this.startOffset;\n // before line count of Paragraph node\n var lineBreaks = Array.from(new Array(this.sourceNode.loc.start.line - 1)).fill(\"\\n\");\n // filled with dummy text\n var offset = Array.from(new Array(this.startOffset - lineBreaks.length)).fill(\"∯\");\n this.textCharacters = offset.concat(lineBreaks, input.raw.split(\"\"));\n this.source = new structured_source_1.default(this.textCharacters.join(\"\"));\n if (this.sourceNode.children[0]) {\n // Header Node's children does not start with index 0\n // Example: # Header\n // It firstChildPadding is `2`\n this.firstChildPadding = this.sourceNode.children[0].range[0] - this.startOffset;\n }\n else {\n this.firstChildPadding = 0;\n }\n }\n }\n SourceCode.prototype.markContextRange = function (range) {\n this.contextRanges.push(range);\n };\n SourceCode.prototype.isInContextRange = function () {\n var offset = this.offset;\n return this.contextRanges.some(function (range) {\n return range[0] <= offset && offset < range[1];\n });\n };\n SourceCode.prototype.enterContext = function (context) {\n this.contexts.push(context);\n };\n SourceCode.prototype.isInContext = function (context) {\n if (!context) {\n return this.contexts.length > 0;\n }\n return this.contexts.some(function (targetContext) { return targetContext === context; });\n };\n SourceCode.prototype.leaveContext = function (context) {\n var index = this.contexts.lastIndexOf(context);\n if (index !== -1) {\n this.contexts.splice(index, 1);\n }\n };\n Object.defineProperty(SourceCode.prototype, \"offset\", {\n /**\n * Return current offset value\n * @returns {number}\n */\n get: function () {\n return this.index + this.firstChildPadding;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Return current position object.\n * It includes line, column, offset.\n */\n SourceCode.prototype.now = function () {\n var indexWithChildrenOffset = this.offset;\n var position = this.source.indexToPosition(indexWithChildrenOffset);\n return {\n line: position.line,\n column: position.column,\n offset: indexWithChildrenOffset\n };\n };\n Object.defineProperty(SourceCode.prototype, \"hasEnd\", {\n /**\n * Return true, no more read char\n */\n get: function () {\n return this.read() === false;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * read char\n * if can not read, return empty string\n * @returns {string}\n */\n SourceCode.prototype.read = function (over) {\n if (over === void 0) { over = 0; }\n var index = this.offset + over;\n if (index < this.startOffset) {\n return false;\n }\n if (0 <= index && index < this.textCharacters.length) {\n return this.textCharacters[index];\n }\n return false;\n };\n /**\n * read node\n * if can not read, return empty string\n * @returns {node}\n */\n SourceCode.prototype.readNode = function (over) {\n if (over === void 0) { over = 0; }\n if (!this.sourceNode) {\n return false;\n }\n var index = this.offset + over;\n if (index < this.startOffset) {\n return false;\n }\n var matchNodeList = this.sourceNode.children.filter(function (node) {\n // <p>[node]</p>\n // ^\n // range[1]\n // `< range[1]` prevent infinity loop\n // https://github.com/azu/sentence-splitter/issues/9\n return node.range[0] <= index && index < node.range[1];\n });\n if (matchNodeList.length > 0) {\n // last match\n // because, range is overlap two nodes\n return matchNodeList[matchNodeList.length - 1];\n }\n return false;\n };\n /**\n * Increment current index\n */\n SourceCode.prototype.peek = function () {\n this.index += 1;\n };\n /**\n * Increment node range\n */\n SourceCode.prototype.peekNode = function (node) {\n this.index += node.range[1] - node.range[0];\n };\n /**\n * Seek and Peek\n */\n SourceCode.prototype.seekNext = function (parser) {\n var startPosition = this.now();\n parser.seek(this);\n var endPosition = this.now();\n var value = this.sliceRange(startPosition.offset, endPosition.offset);\n return {\n value: value,\n startPosition: startPosition,\n endPosition: endPosition\n };\n };\n /**\n * Slice text form the range.\n * @param {number} start\n * @param {number} end\n * @returns {string}\n */\n SourceCode.prototype.sliceRange = function (start, end) {\n return this.textCharacters.slice(start, end).join(\"\");\n };\n return SourceCode;\n}());\nexports.SourceCode = SourceCode;\n//# sourceMappingURL=SourceCode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NewLineParser = void 0;\n/**\n * New Line Parser\n */\nvar NewLineParser = /** @class */ (function () {\n function NewLineParser() {\n }\n NewLineParser.prototype.test = function (sourceCode) {\n var string = sourceCode.read();\n if (!string) {\n return false;\n }\n return /[\\r\\n]/.test(string);\n };\n NewLineParser.prototype.seek = function (sourceCode) {\n while (this.test(sourceCode)) {\n sourceCode.peek();\n }\n };\n return NewLineParser;\n}());\nexports.NewLineParser = NewLineParser;\n//# sourceMappingURL=NewLineParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SpaceParser = void 0;\n/**\n * Space parser\n */\nvar SpaceParser = /** @class */ (function () {\n function SpaceParser() {\n }\n SpaceParser.prototype.test = function (sourceCode) {\n var string = sourceCode.read();\n if (!string) {\n return false;\n }\n return /\\s/.test(string);\n };\n SpaceParser.prototype.seek = function (sourceCode) {\n while (this.test(sourceCode)) {\n sourceCode.peek();\n }\n };\n return SpaceParser;\n}());\nexports.SpaceParser = SpaceParser;\n//# sourceMappingURL=SpaceParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SeparatorParser = exports.DefaultOptions = void 0;\nexports.DefaultOptions = {\n separatorCharacters: [\n \".\",\n \".\",\n \"。\",\n \"?\",\n \"!\",\n \"?\",\n \"!\" // (ja) zenkaku exclamation mark\n ]\n};\n/**\n * Separator parser\n */\nvar SeparatorParser = /** @class */ (function () {\n function SeparatorParser(options) {\n this.options = options;\n this.separatorCharacters =\n options && options.separatorCharacters ? options.separatorCharacters : exports.DefaultOptions.separatorCharacters;\n }\n SeparatorParser.prototype.test = function (sourceCode) {\n if (sourceCode.isInContext()) {\n return false;\n }\n if (sourceCode.isInContextRange()) {\n return false;\n }\n var firstChar = sourceCode.read();\n var nextChar = sourceCode.read(1);\n if (!firstChar) {\n return false;\n }\n if (!this.separatorCharacters.includes(firstChar)) {\n return false;\n }\n // Need space after period\n // Example: \"This is a pen. This is not a pen.\"\n // It will avoid false-position like `1.23`\n if (firstChar === \".\") {\n if (nextChar) {\n return /[\\s\\t\\r\\n]/.test(nextChar);\n }\n else {\n return true;\n }\n }\n return true;\n };\n SeparatorParser.prototype.seek = function (sourceCode) {\n while (this.test(sourceCode)) {\n sourceCode.peek();\n }\n };\n return SeparatorParser;\n}());\nexports.SeparatorParser = SeparatorParser;\n//# sourceMappingURL=SeparatorParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnyValueParser = void 0;\n/**\n * Any value without `parsers`\n */\nvar AnyValueParser = /** @class */ (function () {\n /**\n * Eat any value without `parsers.test`\n */\n function AnyValueParser(options) {\n this.parsers = options.parsers;\n this.markers = options.markers;\n }\n AnyValueParser.prototype.test = function (sourceCode) {\n if (sourceCode.hasEnd) {\n return false;\n }\n return this.parsers.every(function (parser) { return !parser.test(sourceCode); });\n };\n AnyValueParser.prototype.seek = function (sourceCode) {\n var currentNode = sourceCode.readNode();\n if (!currentNode) {\n // Text mode\n while (this.test(sourceCode)) {\n this.markers.forEach(function (marker) { return marker.mark(sourceCode); });\n sourceCode.peek();\n }\n return;\n }\n // node - should not over next node\n var isInCurrentNode = function () {\n var currentOffset = sourceCode.offset;\n return currentNode.range[0] <= currentOffset && currentOffset < currentNode.range[1];\n };\n while (isInCurrentNode() && this.test(sourceCode)) {\n this.markers.forEach(function (marker) { return marker.mark(sourceCode); });\n sourceCode.peek();\n }\n };\n return AnyValueParser;\n}());\nexports.AnyValueParser = AnyValueParser;\n//# sourceMappingURL=AnyValueParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.English = void 0;\nexports.English = {\n ABBREVIATIONS: [\n \"Adj.\",\n \"Adm.\",\n \"Adv.\",\n \"Al.\",\n \"Ala.\",\n \"Alta.\",\n \"Apr.\",\n \"Arc.\",\n \"Ariz.\",\n \"Ark.\",\n \"Art.\",\n \"Assn.\",\n \"Asst.\",\n \"Attys.\",\n \"Aug.\",\n \"Ave.\",\n \"Bart.\",\n \"Bld.\",\n \"Bldg.\",\n \"Blvd.\",\n \"Brig.\",\n \"Bros.\",\n \"Btw.\",\n \"Cal.\",\n \"Calif.\",\n \"Capt.\",\n \"Cl.\",\n \"Cmdr.\",\n \"Co.\",\n \"Col.\",\n \"Colo.\",\n \"Comdr.\",\n \"Con.\",\n \"Conn.\",\n \"Corp.\",\n \"Cpl.\",\n \"Cres.\",\n \"Ct.\",\n \"D.phil.\",\n \"Dak.\",\n \"Dec.\",\n \"Del.\",\n \"Dept.\",\n \"Det.\",\n \"Dist.\",\n \"Dr.\",\n \"Dr.phil.\",\n \"Dr.philos.\",\n \"Drs.\",\n \"E.g.\",\n \"Ens.\",\n \"Esp.\",\n \"Esq.\",\n \"Etc.\",\n \"Exp.\",\n \"Expy.\",\n \"Ext.\",\n \"Feb.\",\n \"Fed.\",\n \"Fla.\",\n \"Ft.\",\n \"Fwy.\",\n \"Fy.\",\n \"Ga.\",\n \"Gen.\",\n \"Gov.\",\n \"Hon.\",\n \"Hosp.\",\n \"Hr.\",\n \"Hway.\",\n \"Hwy.\",\n \"I.e.\",\n \"Ia.\",\n \"Id.\",\n \"Ida.\",\n \"Ill.\",\n \"Inc.\",\n \"Ind.\",\n \"Ing.\",\n \"Insp.\",\n \"Is.\",\n \"Jan.\",\n \"Jr.\",\n \"Jul.\",\n \"Jun.\",\n \"Kan.\",\n \"Kans.\",\n \"Ken.\",\n \"Ky.\",\n \"La.\",\n \"Lt.\",\n \"Ltd.\",\n \"Maj.\",\n \"Man.\",\n \"Mar.\",\n \"Mass.\",\n \"May.\",\n \"Md.\",\n \"Me.\",\n \"Med.\",\n \"Messrs.\",\n \"Mex.\",\n \"Mfg.\",\n \"Mich.\",\n \"Min.\",\n \"Minn.\",\n \"Miss.\",\n \"Mlle.\",\n \"Mm.\",\n \"Mme.\",\n \"Mo.\",\n \"Mont.\",\n \"Mr.\",\n \"Mrs.\",\n \"Ms.\",\n \"Msgr.\",\n \"Mssrs.\",\n \"Mt.\",\n \"Mtn.\",\n \"Neb.\",\n \"Nebr.\",\n \"Nev.\",\n \"No.\",\n \"Nos.\",\n \"Nov.\",\n \"Nr.\",\n \"Oct.\",\n \"Ok.\",\n \"Okla.\",\n \"Ont.\",\n \"Op.\",\n \"Ord.\",\n \"Ore.\",\n \"P.\",\n \"Pa.\",\n \"Pd.\",\n \"Pde.\",\n \"Penn.\",\n \"Penna.\",\n \"Pfc.\",\n \"Ph.\",\n \"Ph.d.\",\n \"Pl.\",\n \"Plz.\",\n \"Pp.\",\n \"Prof.\",\n \"Pvt.\",\n \"Que.\",\n \"Rd.\",\n \"Rs.\",\n \"Ref.\",\n \"Rep.\",\n \"Reps.\",\n \"Res.\",\n \"Rev.\",\n \"Rt.\",\n \"Sask.\",\n \"Sec.\",\n \"Sen.\",\n \"Sens.\",\n \"Sep.\",\n \"Sept.\",\n \"Sfc.\",\n \"Sgt.\",\n \"Sr.\",\n \"St.\",\n \"Supt.\",\n \"Surg.\",\n \"Tce.\",\n \"Tenn.\",\n \"Tex.\",\n \"Univ.\",\n \"Usafa.\",\n \"U.S.\",\n \"Ut.\",\n \"Va.\",\n \"V.\",\n \"Ver.\",\n \"Vs.\",\n \"Vt.\",\n \"Wash.\",\n \"Wis.\",\n \"Wisc.\",\n \"Wy.\",\n \"Wyo.\",\n \"Yuk.\"\n ],\n PREPOSITIVE_ABBREVIATIONS: [\n \"Adm.\",\n \"Attys.\",\n \"Brig.\",\n \"Capt.\",\n \"Cmdr.\",\n \"Col.\",\n \"Cpl.\",\n \"Det.\",\n \"Dr.\",\n \"Gen.\",\n \"Gov.\",\n \"Ing.\",\n \"Lt.\",\n \"Maj.\",\n \"Mr.\",\n \"Mrs.\",\n \"Ms.\",\n \"Mt.\",\n \"Messrs.\",\n \"Mssrs.\",\n \"Prof.\",\n \"Ph.\",\n \"Rep.\",\n \"Reps.\",\n \"Rev.\",\n \"Sen.\",\n \"Sens.\",\n \"Sgt.\",\n \"St.\",\n \"Supt.\",\n \"V.\",\n \"Vs.\"\n ],\n EXCALAMATION_WORDS: [\n \"!Xũ\",\n \"!Kung\",\n \"ǃʼOǃKung\",\n \"!Xuun\",\n \"!Kung-Ekoka\",\n \"ǃHu\",\n \"ǃKhung\",\n \"ǃKu\",\n \"ǃung\",\n \"ǃXo\",\n \"ǃXû\",\n \"ǃXung\",\n \"ǃXũ\",\n \"!Xun\",\n \"Yahoo!\",\n \"Y!J\",\n \"Yum!\"\n ]\n};\n//# sourceMappingURL=English.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AbbrMarker = void 0;\nvar English_1 = require(\"./lang/English\");\nvar isCapitalized = function (text) {\n if (!text || text.length === 0) {\n return false;\n }\n return /^[A-Z]/.test(text);\n};\nvar compareNoCaseSensitive = function (a, b) {\n return a.toLowerCase() === b.toLowerCase();\n};\n/**\n * abbreviation marker\n */\nvar AbbrMarker = /** @class */ (function () {\n function AbbrMarker(lang) {\n if (lang === void 0) { lang = English_1.English; }\n this.lang = lang;\n }\n /**\n * Get Word\n * word should have left space and right space,\n * @param {SourceCode} sourceCode\n * @param {number} startIndex\n * @returns {string}\n */\n AbbrMarker.prototype.getWord = function (sourceCode, startIndex) {\n if (startIndex === void 0) { startIndex = 0; }\n var whiteSpace = /\\s/;\n var prevChar = sourceCode.read(-1);\n if (prevChar && !whiteSpace.test(prevChar)) {\n return \"\";\n }\n var word = \"\";\n var count = startIndex;\n var char = \"\";\n while ((char = sourceCode.read(count))) {\n if (whiteSpace.test(char)) {\n break;\n }\n word += char;\n count++;\n }\n return word;\n };\n AbbrMarker.prototype.getPrevWord = function (sourceCode) {\n var whiteSpace = /\\s/;\n var count = -1;\n var char = \"\";\n while ((char = sourceCode.read(count))) {\n if (!whiteSpace.test(char)) {\n break;\n }\n count--;\n }\n while ((char = sourceCode.read(count))) {\n if (whiteSpace.test(char)) {\n break;\n }\n count--;\n }\n return this.getWord(sourceCode, count + 1);\n };\n AbbrMarker.prototype.mark = function (sourceCode) {\n if (sourceCode.isInContextRange()) {\n return;\n }\n var currentWord = this.getWord(sourceCode);\n if (currentWord.length === 0) {\n return;\n }\n // Allow: Multi-period abbr\n // Example: U.S.A\n if (/^([a-zA-Z]\\.){3,}$/.test(currentWord)) {\n return sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]);\n }\n // EXCALAMATION_WORDS\n // Example: Yahoo!\n var isMatchedEXCALAMATION_WORDS = this.lang.EXCALAMATION_WORDS.some(function (abbr) {\n return compareNoCaseSensitive(abbr, currentWord);\n });\n if (isMatchedEXCALAMATION_WORDS) {\n return sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]);\n }\n // PREPOSITIVE_ABBREVIATIONS\n // Example: Mr. Fuji\n var isMatchedPREPOSITIVE_ABBREVIATIONS = this.lang.PREPOSITIVE_ABBREVIATIONS.some(function (abbr) {\n return compareNoCaseSensitive(abbr, currentWord);\n });\n if (isMatchedPREPOSITIVE_ABBREVIATIONS) {\n return sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]);\n }\n // ABBREVIATIONS\n var isMatched = this.lang.ABBREVIATIONS.some(function (abbr) {\n return compareNoCaseSensitive(abbr, currentWord);\n });\n var prevWord = this.getPrevWord(sourceCode);\n var nextWord = this.getWord(sourceCode, currentWord.length + 1);\n // console.log(\"prevWord\", prevWord);\n // console.log(\"currentWord\", currentWord);\n // console.log(\"nextWord\", nextWord);\n // Special case: Capital <ABBR>. Capital\n // Example: `I` as a sentence boundary and `I` as an abbreviation\n // > We make a good team, you and I. Did you see Albert I. Jones yesterday?\n if (isCapitalized(prevWord) && /[A-Z]\\./.test(currentWord) && isCapitalized(nextWord)) {\n sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]);\n }\n else if (isMatched && !isCapitalized(nextWord)) {\n // Exception. This allow to write Capitalized word at next word\n // A.M. is store.\n sourceCode.markContextRange([sourceCode.offset, sourceCode.offset + currentWord.length]);\n }\n };\n return AbbrMarker;\n}());\nexports.AbbrMarker = AbbrMarker;\n//# sourceMappingURL=AbbrMarker.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.debugLog = void 0;\nfunction debugLog() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (process.env.DEBUG !== \"sentence-splitter\") {\n return;\n }\n console.log.apply(console, __spreadArray([\"sentence-splitter: \"], args));\n}\nexports.debugLog = debugLog;\n//# sourceMappingURL=logger.js.map","Object.values = Object.values ? Object.values : function(obj) {\n\tvar allowedTypes = [\"[object String]\", \"[object Object]\", \"[object Array]\", \"[object Function]\"];\n\tvar objType = Object.prototype.toString.call(obj);\n\n\tif(obj === null || typeof obj === \"undefined\") {\n\t\tthrow new TypeError(\"Cannot convert undefined or null to object\");\n\t} else if(!~allowedTypes.indexOf(objType)) {\n\t\treturn [];\n\t} else {\n\t\t// if ES6 is supported\n\t\tif (Object.keys) {\n\t\t\treturn Object.keys(obj).map(function (key) {\n\t\t\t\treturn obj[key];\n\t\t\t});\n\t\t}\n\t\t\n\t\tvar result = [];\n\t\tfor (var prop in obj) {\n\t\t\tif (obj.hasOwnProperty(prop)) {\n\t\t\t\tresult.push(obj[prop]);\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = Object.values;\n}","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PairMaker = void 0;\nvar logger_1 = require(\"../logger\");\n// @ts-ignore\nvar object_values_1 = __importDefault(require(\"object_values\"));\n/**\n * Mark pair character\n * PairMarker aim to mark pair string as a single sentence.\n *\n * For example, Following sentence has two period(。). but it should treat a single sentence\n *\n * > I hear \"I'm back to home.\" from radio.\n *\n */\nvar PairMaker = /** @class */ (function () {\n function PairMaker() {\n var _a;\n this.pairs = (_a = {},\n _a[\"\\\"\"] = \"\\\"\",\n _a[\"\\u300C\"] = \"\\u300D\",\n _a[\"\\uFF08\"] = \"\\uFF09\",\n _a[\"(\"] = \")\",\n _a[\"\\u300E\"] = \"\\u300F\",\n _a[\"\\u3010\"] = \"\\u3011\",\n _a[\"\\u300A\"] = \"\\u300B\",\n _a);\n this.pairKeys = Object.keys(this.pairs);\n this.pairValues = object_values_1.default(this.pairs);\n }\n PairMaker.prototype.mark = function (sourceCode) {\n var string = sourceCode.read();\n if (!string) {\n return;\n }\n // if current is in a context, should not start other context.\n // PairMaker does not support nest context by design.\n if (!sourceCode.isInContext()) {\n var keyIndex = this.pairKeys.indexOf(string);\n if (keyIndex !== -1) {\n var key = this.pairKeys[keyIndex];\n logger_1.debugLog(\"PairMaker -> enterContext: \" + key);\n sourceCode.enterContext(key);\n }\n }\n else {\n // check that string is end mark?\n var valueIndex = this.pairValues.indexOf(string);\n if (valueIndex !== -1) {\n var key = this.pairKeys[valueIndex];\n logger_1.debugLog(\"PairMaker -> leaveContext: \" + this.pairValues[valueIndex]);\n sourceCode.leaveContext(key);\n }\n }\n };\n return PairMaker;\n}());\nexports.PairMaker = PairMaker;\n//# sourceMappingURL=PairMaker.js.map","// LICENSE : MIT\n\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createNode = exports.createEmptySentenceNode = exports.createTextNode = exports.createPunctuationNode = exports.createWhiteSpaceNode = exports.splitAST = exports.split = exports.SplitParser = exports.Syntax = void 0;\nvar ast_node_types_1 = require(\"@textlint/ast-node-types\");\nvar SourceCode_1 = require(\"./parser/SourceCode\");\nvar NewLineParser_1 = require(\"./parser/NewLineParser\");\nvar SpaceParser_1 = require(\"./parser/SpaceParser\");\nvar SeparatorParser_1 = require(\"./parser/SeparatorParser\");\nvar AnyValueParser_1 = require(\"./parser/AnyValueParser\");\nvar AbbrMarker_1 = require(\"./parser/AbbrMarker\");\nvar PairMaker_1 = require(\"./parser/PairMaker\");\nvar logger_1 = require(\"./logger\");\nexports.Syntax = {\n WhiteSpace: \"WhiteSpace\",\n Punctuation: \"Punctuation\",\n Sentence: \"Sentence\",\n Str: \"Str\"\n};\nvar SplitParser = /** @class */ (function () {\n function SplitParser(text) {\n this.nodeList = [];\n this.results = [];\n this.source = new SourceCode_1.SourceCode(text);\n }\n Object.defineProperty(SplitParser.prototype, \"current\", {\n get: function () {\n return this.nodeList[this.nodeList.length - 1];\n },\n enumerable: false,\n configurable: true\n });\n SplitParser.prototype.pushNodeToCurrent = function (node) {\n var current = this.current;\n if (current) {\n current.children.push(node);\n }\n else {\n // Under the root\n this.results.push(node);\n }\n };\n // open with ParentNode\n SplitParser.prototype.open = function (parentNode) {\n this.nodeList.push(parentNode);\n };\n SplitParser.prototype.isOpened = function () {\n return this.nodeList.length > 0;\n };\n SplitParser.prototype.nextLine = function (parser) {\n var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition;\n this.pushNodeToCurrent(createWhiteSpaceNode(value, startPosition, endPosition));\n return endPosition;\n };\n SplitParser.prototype.nextSpace = function (parser) {\n var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition;\n this.pushNodeToCurrent(createNode(\"WhiteSpace\", value, startPosition, endPosition));\n };\n SplitParser.prototype.nextValue = function (parser) {\n var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition;\n this.pushNodeToCurrent(createTextNode(value, startPosition, endPosition));\n };\n // close current Node and remove it from list\n SplitParser.prototype.close = function (parser) {\n var _a = this.source.seekNext(parser), value = _a.value, startPosition = _a.startPosition, endPosition = _a.endPosition;\n if (startPosition.offset !== endPosition.offset) {\n this.pushNodeToCurrent(createPunctuationNode(value, startPosition, endPosition));\n }\n var currentNode = this.nodeList.pop();\n if (!currentNode) {\n return;\n }\n if (currentNode.children.length === 0) {\n return;\n }\n var firstChildNode = currentNode.children[0];\n var endNow = this.source.now();\n currentNode.loc = {\n start: firstChildNode.loc.start,\n end: nowToLoc(endNow)\n };\n var rawValue = this.source.sliceRange(firstChildNode.range[0], endNow.offset);\n currentNode.range = [firstChildNode.range[0], endNow.offset];\n currentNode.raw = rawValue;\n this.results.push(currentNode);\n };\n SplitParser.prototype.toList = function () {\n return this.results;\n };\n return SplitParser;\n}());\nexports.SplitParser = SplitParser;\nvar createParsers = function (options) {\n if (options === void 0) { options = {}; }\n var newLine = new NewLineParser_1.NewLineParser();\n var space = new SpaceParser_1.SpaceParser();\n var separator = new SeparatorParser_1.SeparatorParser(options.SeparatorParser);\n var abbrMarker = new AbbrMarker_1.AbbrMarker();\n var pairMaker = new PairMaker_1.PairMaker();\n // anyValueParser has multiple parser and markers.\n // anyValueParse eat any value if it reach to other value.\n var anyValueParser = new AnyValueParser_1.AnyValueParser({\n parsers: [newLine, separator],\n markers: [abbrMarker, pairMaker]\n });\n return {\n newLine: newLine,\n space: space,\n separator: separator,\n abbrMarker: abbrMarker,\n anyValueParser: anyValueParser\n };\n};\n/**\n * split `text` into Sentence nodes\n */\nfunction split(text, options) {\n var _a = createParsers(options), newLine = _a.newLine, space = _a.space, separator = _a.separator, anyValueParser = _a.anyValueParser;\n var splitParser = new SplitParser(text);\n var sourceCode = splitParser.source;\n while (!sourceCode.hasEnd) {\n if (newLine.test(sourceCode)) {\n splitParser.nextLine(newLine);\n }\n else if (space.test(sourceCode)) {\n // Add WhiteSpace\n splitParser.nextSpace(space);\n }\n else if (separator.test(sourceCode)) {\n splitParser.close(separator);\n }\n else {\n if (!splitParser.isOpened()) {\n splitParser.open(createEmptySentenceNode());\n }\n splitParser.nextValue(anyValueParser);\n }\n }\n splitParser.close(space);\n return splitParser.toList();\n}\nexports.split = split;\n/**\n * Convert Paragraph Node to Paragraph node that convert children to Sentence node\n * This Node is based on TxtAST.\n * See https://github.com/textlint/textlint/blob/master/docs/txtnode.md\n */\nfunction splitAST(paragraphNode, options) {\n var _a = createParsers(options), newLine = _a.newLine, space = _a.space, separator = _a.separator, anyValueParser = _a.anyValueParser;\n var splitParser = new SplitParser(paragraphNode);\n var sourceCode = splitParser.source;\n while (!sourceCode.hasEnd) {\n var currentNode = sourceCode.readNode();\n if (!currentNode) {\n break;\n }\n if (currentNode.type === ast_node_types_1.ASTNodeTypes.Str) {\n if (space.test(sourceCode)) {\n logger_1.debugLog(\"space\");\n splitParser.nextSpace(space);\n }\n else if (separator.test(sourceCode)) {\n logger_1.debugLog(\"separator\");\n splitParser.close(separator);\n }\n else if (newLine.test(sourceCode)) {\n logger_1.debugLog(\"newline\");\n splitParser.nextLine(newLine);\n }\n else {\n if (!splitParser.isOpened()) {\n logger_1.debugLog(\"open -> createEmptySentenceNode()\");\n splitParser.open(createEmptySentenceNode());\n }\n splitParser.nextValue(anyValueParser);\n }\n }\n else if (currentNode.type === ast_node_types_1.ASTNodeTypes.Break) {\n // Break\n // https://github.com/azu/sentence-splitter/issues/23\n splitParser.pushNodeToCurrent(currentNode);\n sourceCode.peekNode(currentNode);\n }\n else {\n if (!splitParser.isOpened()) {\n splitParser.open(createEmptySentenceNode());\n }\n splitParser.pushNodeToCurrent(currentNode);\n sourceCode.peekNode(currentNode);\n }\n }\n // It follow some text that is not ended with period.\n // TODO: space is correct?\n splitParser.close(space);\n return __assign(__assign({}, paragraphNode), { children: splitParser.toList() });\n}\nexports.splitAST = splitAST;\n/**\n * WhiteSpace is space or linebreak\n */\nfunction createWhiteSpaceNode(text, startPosition, endPosition) {\n return createNode(\"WhiteSpace\", text, startPosition, endPosition);\n}\nexports.createWhiteSpaceNode = createWhiteSpaceNode;\nfunction createPunctuationNode(text, startPosition, endPosition) {\n return createNode(\"Punctuation\", text, startPosition, endPosition);\n}\nexports.createPunctuationNode = createPunctuationNode;\nfunction createTextNode(text, startPosition, endPosition) {\n return createNode(\"Str\", text, startPosition, endPosition);\n}\nexports.createTextNode = createTextNode;\nfunction createEmptySentenceNode() {\n return {\n type: \"Sentence\",\n raw: \"\",\n loc: {\n start: { column: NaN, line: NaN },\n end: { column: NaN, line: NaN }\n },\n range: [NaN, NaN],\n children: []\n };\n}\nexports.createEmptySentenceNode = createEmptySentenceNode;\nfunction createNode(type, text, startPosition, endPosition) {\n return {\n type: type,\n raw: text,\n value: text,\n loc: {\n start: nowToLoc(startPosition),\n end: nowToLoc(endPosition)\n },\n range: [startPosition.offset, endPosition.offset]\n };\n}\nexports.createNode = createNode;\nfunction nowToLoc(now) {\n return {\n line: now.line,\n column: now.column\n };\n}\n//# sourceMappingURL=sentence-splitter.js.map","/*\r\n * wrap.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { Transform } from 'prosemirror-transform';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\n\r\nimport { split } from 'sentence-splitter';\r\n\r\nimport { trTransform } from './transaction';\r\nimport { findChildrenByType, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\r\n\r\nexport function wrapSentences(tr: Transaction) {\r\n trTransform(tr, wrapSentencesTransform);\r\n}\r\n\r\nfunction wrapSentencesTransform(tr: Transform) {\r\n // find all paragraphs in doc\r\n const schema = tr.doc.type.schema;\r\n const paragraphs = findChildrenByType(tr.doc, schema.nodes.paragraph);\r\n\r\n // insert linebreaks in paragraphs (go backwards to preserve positions)\r\n paragraphs.reverse().forEach(paragraph => {\r\n // don't break sentences inside tight list items\r\n const $pos = tr.doc.resolve(paragraph.pos);\r\n const parent = $pos.node($pos.depth);\r\n if (parent.type === schema.nodes.list_item && $pos.node($pos.depth - 1).attrs.tight) {\r\n return;\r\n }\r\n\r\n // don't break sentences inside tables\r\n if (schema.nodes.table && findParentNodeOfTypeClosestToPos($pos, schema.nodes.table)) {\r\n return;\r\n }\r\n\r\n // extract text (use \\n for hard_break)\r\n // based on https://github.com/ProseMirror/prosemirror-model/blob/eef20c8c6dbf841b1d70859df5d59c21b5108a4f/src/fragment.js#L46\r\n // (but do no handling for leafs b/c we don't have any in our schema and nothing for blocks\r\n // b/c this is a paragraph so won't have nested blocks. We use our own implementation so that\r\n // we can correctly count node types that imply text but don't actually have any text\r\n // (e.g. hard_break)\r\n \r\n let textContent = \"\";\r\n const paraContent = paragraph.node.content;\r\n const from = 0;\r\n const to = paraContent.size;\r\n paraContent.nodesBetween(from, to, (node: ProsemirrorNode, pos: number) => {\r\n if (node.isText) {\r\n textContent += node.text!.slice(Math.max(from, pos) - pos, to - pos);\r\n } else if (node.type.name === \"hard_break\") {\r\n textContent += \"\\n\";\r\n }\r\n }, 0);\r\n\r\n // don't break bookdown text references\r\n if (/^\\(ref:[^\\s]+\\)\\s+[^\\s]/.test(textContent)) {\r\n return;\r\n }\r\n\r\n // split into parts\r\n const parts = split(textContent);\r\n\r\n // only consider sentences that aren't already followed by a hard break\r\n const sentences: typeof parts = [];\r\n for (let i = 0; i < parts.length; i++) {\r\n if (parts[i].type === 'Sentence') {\r\n if (i === parts.length - 1 || \r\n parts[i + 1].type !== 'WhiteSpace' || \r\n parts[i + 1].value !== '\\n') {\r\n sentences.push(parts[i]);\r\n }\r\n }\r\n }\r\n\r\n // reverse so we can insert line breaks without messing up positions\r\n sentences\r\n .reverse()\r\n .forEach(sentence => {\r\n // don't break sentence if at least one mark is active\r\n if (tr.doc.resolve(paragraph.pos + sentence.range[1] + 1).marks().length === 0) {\r\n const hardBreak = schema.text('\\n');\r\n const hardBreakPos = paragraph.pos + sentence.range[1] + 2;\r\n tr.insert(hardBreakPos, hardBreak);\r\n }\r\n });\r\n });\r\n}\r\n","/*\r\n * yaml_metadata-title.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\r\n\r\nimport { transactionsAreTypingChange, transactionsHaveChange } from '../../api/transaction';\r\nimport {\r\n isYamlMetadataNode,\r\n yamlMetadataNodes,\r\n kYamlMetadataTitleRegex,\r\n titleFromState,\r\n} from '../../api/yaml';\r\n\r\nconst plugin = new PluginKey<string>('yaml-metadata-title');\r\n\r\nexport function yamlMetadataTitlePlugin() {\r\n return new Plugin<string>({\r\n key: plugin,\r\n state: {\r\n init(_config, state: EditorState) {\r\n return titleFromState(state);\r\n },\r\n\r\n apply(tr: Transaction, title: string, oldState: EditorState, newState: EditorState) {\r\n const transactions = [tr];\r\n\r\n // doc didn't change, return existing title\r\n if (!tr.docChanged) {\r\n return title;\r\n\r\n // non-typing change, do a full rescan\r\n } else if (!transactionsAreTypingChange(transactions)) {\r\n return titleFromState(newState);\r\n\r\n // change that affects a yaml metadata block, do a full rescan\r\n } else if (transactionsHaveChange(transactions, oldState, newState, isYamlMetadataNode)) {\r\n return titleFromState(newState);\r\n }\r\n\r\n // otherwise return the existing title\r\n else {\r\n return title;\r\n }\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport function getTitle(state: EditorState) {\r\n return plugin.getState(state);\r\n}\r\n\r\nexport function setTitle(state: EditorState, title: string) {\r\n // alias schema\r\n const schema = state.schema;\r\n\r\n // no-op if yaml_metadata isn't available\r\n if (!schema.nodes.yaml_metadata) {\r\n return;\r\n }\r\n\r\n // create transaction\r\n const tr = state.tr;\r\n\r\n // escape quotes in title then build the title line\r\n const escapedTitle = title.replace(/\"/g, `\\\\\"`);\r\n const titleLine = `\\ntitle: \"${escapedTitle}\"\\n`;\r\n\r\n // attempt to update existing title\r\n const yamlNodes = yamlMetadataNodes(tr.doc);\r\n let foundTitle = false;\r\n for (const yaml of yamlNodes) {\r\n const titleMatch = yaml.node.textContent.match(kYamlMetadataTitleRegex);\r\n if (titleMatch) {\r\n const updatedMetadata = yaml.node.textContent.replace(kYamlMetadataTitleRegex, titleLine);\r\n const updatedNode = schema.nodes.yaml_metadata.createAndFill({}, schema.text(updatedMetadata));\r\n if (updatedNode) {\r\n tr.replaceRangeWith(yaml.pos, yaml.pos + yaml.node.nodeSize, updatedNode);\r\n foundTitle = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // if we didn't find a title then inject one at the top\r\n if (!foundTitle) {\r\n const yamlText = schema.text(`---${titleLine}---`);\r\n const yamlNode = schema.nodes.yaml_metadata.create({}, yamlText);\r\n tr.insert(1, yamlNode);\r\n }\r\n\r\n // return transaction\r\n return tr;\r\n}\r\n\r\n","/*\r\n * oultine.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { NodeWithPos } from 'prosemirror-utils';\r\n\r\nimport { EditorOutline, EditorOutlineItem, EditorOutlineItemType } from 'editor-types';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { transactionsHaveChange, kSetMarkdownTransaction } from '../api/transaction';\r\nimport { findTopLevelBodyNodes } from '../api/node';\r\nimport { uuidv4 } from '../api/util';\r\nimport { \r\n isOutlineNode,\r\n getDocumentOutline,\r\n} from '../api/outline';\r\nimport { navigateToPos } from '../api/navigation';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\nimport { rmdChunkEngineAndLabel } from '../api/rmd';\r\n\r\nconst kOutlineIdsTransaction = 'OutlineIds';\r\n\r\nconst plugin = new PluginKey<EditorOutline>('outline');\r\n\r\nconst extension: Extension = {\r\n appendTransaction: () => {\r\n return [\r\n {\r\n name: 'outline',\r\n filter: hasOutlineIdsTransaction,\r\n nodeFilter: isOutlineNode,\r\n append: (tr: Transaction) => {\r\n const usedIds = new Set<string>();\r\n const needsOutlineId = (node: ProsemirrorNode) => {\r\n if (isOutlineNode(node)) {\r\n if (node.attrs.navigation_id === null) {\r\n return true;\r\n } else if (usedIds.has(node.attrs.navigation_id)) {\r\n return true;\r\n } else {\r\n usedIds.add(node.attrs.navigation_id);\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n };\r\n const needsOutlineIdNodes = findTopLevelBodyNodes(tr.doc, needsOutlineId);\r\n needsOutlineIdNodes.forEach(outlineId => {\r\n tr.setNodeMarkup(outlineId.pos, outlineId.node.type, {\r\n ...outlineId.node.attrs,\r\n navigation_id: uuidv4(),\r\n });\r\n tr.setMeta(kOutlineIdsTransaction, true);\r\n });\r\n },\r\n },\r\n ];\r\n },\r\n\r\n commands: () => {\r\n return [\r\n new ProsemirrorCommand(EditorCommandId.GoToNextSection, ['Mod-PageDown'], goToOutlineCommand('next', 'section')),\r\n new ProsemirrorCommand(EditorCommandId.GoToPreviousSection, ['Mod-PageUp'], goToOutlineCommand('previous', 'section')),\r\n new ProsemirrorCommand(EditorCommandId.GoToNextChunk, [], goToOutlineCommand('next', 'chunk')),\r\n new ProsemirrorCommand(EditorCommandId.GoToPreviousChunk, [], goToOutlineCommand('previous', 'chunk')),\r\n ];\r\n },\r\n\r\n plugins: () => {\r\n return [\r\n new Plugin<EditorOutline>({\r\n key: plugin,\r\n\r\n // track editor outline as state changes\r\n state: {\r\n init: (_config, state: EditorState) => {\r\n return editorOutline(state);\r\n },\r\n apply: (tr: Transaction, value: EditorOutline, oldState: EditorState, newState: EditorState) => {\r\n if (transactionsAffectOutline([tr], oldState, newState)) {\r\n return editorOutline(newState);\r\n } else {\r\n return value; // don't need to map b/c there are no positions in the data structure\r\n }\r\n },\r\n },\r\n }),\r\n ];\r\n },\r\n};\r\n\r\nexport function goToOutlineCommand(dir: 'next' | 'previous', targetType: 'chunk' | 'section') {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n if (dispatch && view) {\r\n let outline = getDocumentOutline(state);\r\n if (dir === 'previous') {\r\n outline = outline.reverse();\r\n }\r\n const target = outline.find(nodeWithPos => {\r\n // if we are only targeting chunks, do not navigate to other types, and vice versa\r\n const isChunk = nodeWithPos.node.type === state.schema.nodes.rmd_chunk;\r\n if (isChunk !== (targetType === 'chunk')) {\r\n return false;\r\n }\r\n\r\n if (dir === 'next') {\r\n return nodeWithPos.pos > state.selection.head;\r\n } else {\r\n return nodeWithPos.pos < state.selection.head - 1;\r\n }\r\n });\r\n if (target) {\r\n navigateToPos(view, target.pos, false);\r\n }\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nfunction editorOutline(state: EditorState): EditorOutline {\r\n // get all of the headings (bail if there are none)\r\n const doc = state.doc;\r\n const outlineNodes = findTopLevelBodyNodes(doc, isOutlineNode);\r\n if (!outlineNodes.length) {\r\n return [];\r\n }\r\n\r\n // create mapping of node type names to their current sequence\r\n const sequence = new Map<string, number>();\r\n\r\n // function to create an outline item from a node\r\n const editorOutlineItem = (nodeWithPos: NodeWithPos, defaultLevel: number) => {\r\n const typename = nodeWithPos.node.type.name;\r\n\r\n // build sequence (ordinal of entry within node type)\r\n let sequenceLast = sequence.get(typename);\r\n if (sequenceLast === undefined) {\r\n sequenceLast = 0;\r\n }\r\n const sequenceNext = sequenceLast + 1;\r\n sequence.set(typename, sequenceNext);\r\n\r\n const item = {\r\n navigation_id: nodeWithPos.node.attrs.navigation_id,\r\n type: nodeWithPos.node.type.name as EditorOutlineItemType,\r\n level: nodeWithPos.node.attrs.level || defaultLevel,\r\n title: nodeWithPos.node.type.spec.code ? nodeWithPos.node.type.name : nodeWithPos.node.textContent,\r\n sequence: sequenceNext,\r\n children: [],\r\n };\r\n \r\n // if this is an R Markdown chunk, extract the title from the chunk\r\n if (nodeWithPos.node.type.name === 'rmd_chunk') {\r\n const chunk = rmdChunkEngineAndLabel(nodeWithPos.node.textContent);\r\n if (chunk) {\r\n item.title = chunk.label;\r\n }\r\n }\r\n return item; \r\n };\r\n\r\n // extract the outline\r\n const rootOutlineItem: EditorOutlineItem = {\r\n navigation_id: '',\r\n type: '' as EditorOutlineItemType,\r\n level: 0,\r\n sequence: 0,\r\n title: '',\r\n children: [],\r\n };\r\n const containers: EditorOutlineItem[] = [];\r\n containers.push(rootOutlineItem);\r\n const top = () => containers[containers.length - 1];\r\n outlineNodes.forEach(nodeWithPos => {\r\n // get outline item from document node\r\n const outlineItem = editorOutlineItem(nodeWithPos, top().level + 1);\r\n\r\n // pop containers until we reach <= our level\r\n while (outlineItem.level <= top().level) {\r\n containers.pop();\r\n }\r\n\r\n // add the outline node\r\n top().children.push(outlineItem);\r\n\r\n // make it the the active container if it's a heading\r\n if (outlineItem.type === 'heading') {\r\n containers.push(outlineItem);\r\n }\r\n });\r\n\r\n // return children of root\r\n return rootOutlineItem.children;\r\n}\r\n\r\nfunction hasOutlineIdsTransaction(transactions: readonly Transaction[]) {\r\n return transactions.some(tr => tr.getMeta(kOutlineIdsTransaction));\r\n}\r\n\r\nfunction transactionsAffectOutline(transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) {\r\n return (\r\n transactions.some(tr => tr.getMeta(kSetMarkdownTransaction)) ||\r\n hasOutlineIdsTransaction(transactions) ||\r\n transactionsHaveChange(transactions, oldState, newState, isOutlineNode)\r\n );\r\n}\r\n\r\nexport function getOutline(state: EditorState): EditorOutline {\r\n return plugin.getState(state)!;\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * find.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\r\n\r\nimport { mergedTextNodes } from '../api/text';\r\nimport { isEffectTransaction, kAddToHistoryTransaction } from '../api/transaction';\r\nimport { editingRootNode } from '../api/node';\r\nimport zenscroll from 'zenscroll';\r\nimport { editorScrollContainer } from '../api/scroll';\r\n\r\nconst key = new PluginKey<DecorationSet>('find-plugin');\r\n\r\nclass FindPlugin extends Plugin<DecorationSet> {\r\n private term = '';\r\n private options: FindOptions = {};\r\n private updating = false;\r\n\r\n // The HTML element containing the last known selected search result\r\n private resultElement: HTMLElement|null = null;\r\n\r\n // A DOM mutation observer that watches for search results to be rendered\r\n private resultObserver: MutationObserver|null = null;\r\n\r\n // The ID for a timer that ensures the resultObserver completes quickly\r\n private resultObserverTimer = 0;\r\n\r\n constructor() {\r\n super({\r\n key,\r\n state: {\r\n init: () => {\r\n return DecorationSet.empty;\r\n },\r\n apply: (tr: Transaction) => {\r\n if (this.updating || isEffectTransaction(tr)) {\r\n return this.resultDecorations(tr);\r\n } else {\r\n return DecorationSet.empty;\r\n }\r\n },\r\n },\r\n view: () => ({\r\n update: (view: EditorView) => {\r\n // Clear any previous search result observer\r\n this.clearResultObserver();\r\n\r\n // If there is a search result selected, navigate to it\r\n if (this.isResultSelected(view.state)) {\r\n this.scrollToSelectedResult(view, null);\r\n }\r\n },\r\n }),\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return key.getState(state);\r\n },\r\n },\r\n });\r\n }\r\n\r\n public find(term: string, options: FindOptions) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (dispatch) {\r\n this.term = !options.regex ? term.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, (escape: string) => {\r\n return '\\\\u' + ('0000' + escape.charCodeAt(0).toString(16)).slice(-4);\r\n }) : term;\r\n this.options = options;\r\n this.updateResults(state, dispatch);\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n public matchCount(state: EditorState) {\r\n return key.getState(state)!.find().length;\r\n }\r\n\r\n public selectFirst() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const decorations: Decoration[] = key.getState(state)!.find(0);\r\n if (decorations.length === 0) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n this.selectResult(tr, decorations[0]);\r\n this.withResultUpdates(() => {\r\n dispatch(tr);\r\n });\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n public selectCurrent() {\r\n return this.selectNext(false);\r\n }\r\n\r\n public selectNext(afterSelection = true) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\r\n const searchFrom = afterSelection\r\n ? this.matchesTerm(selectedText)\r\n ? state.selection.to + 1\r\n : state.selection.to\r\n : state.selection.from;\r\n\r\n const decorationSet = key.getState(state)!;\r\n let decorations: Decoration[] = decorationSet.find(searchFrom);\r\n if (decorations.length === 0) {\r\n // check for wrapping\r\n if (this.options.wrap) {\r\n const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from;\r\n decorations = decorationSet.find(0, searchTo);\r\n if (decorations.length === 0) {\r\n return false;\r\n }\r\n // no wrapping\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n this.selectResult(tr, decorations[0]);\r\n this.withResultUpdates(() => {\r\n dispatch(tr);\r\n });\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n public selectPrevious() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // sort out where we are searching up to\r\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\r\n const searchTo = this.matchesTerm(selectedText) ? state.selection.from - 1 : state.selection.from;\r\n\r\n // get all decorations up to the current selection\r\n const decorationSet = key.getState(state)!;\r\n let decorations: Decoration[] = decorationSet.find(0, searchTo);\r\n if (decorations.length === 0) {\r\n // handle wrapping\r\n if (this.options.wrap) {\r\n const searchFrom = this.matchesTerm(selectedText) ? state.selection.to + 1 : state.selection.to;\r\n decorations = decorationSet.find(searchFrom);\r\n if (decorations.length === 0) {\r\n return false;\r\n }\r\n // no wrapping\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // find the one closest to the beginning of the current selection\r\n if (dispatch) {\r\n // now we need to find the decoration with the largest from value\r\n const decoration = decorations.reduce((lastDecoration, nextDecoration) => {\r\n if (nextDecoration.from > lastDecoration.from) {\r\n return nextDecoration;\r\n } else {\r\n return lastDecoration;\r\n }\r\n });\r\n\r\n const tr = state.tr;\r\n this.selectResult(tr, decoration);\r\n this.withResultUpdates(() => {\r\n dispatch(tr);\r\n });\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n public replace(text: string) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!this.isResultSelected(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const selectionMarks = tr.selection.$from.marksAcross(tr.selection.$to);\r\n if (text.length > 0) {\r\n tr.replaceSelectionWith(state.schema.text(text, selectionMarks), false);\r\n } else {\r\n tr.deleteSelection();\r\n }\r\n \r\n this.withResultUpdates(() => {\r\n dispatch(tr);\r\n });\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n public replaceAll(text: string) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n \r\n let replaced = 0;\r\n\r\n if (!this.hasTerm()) {\r\n return replaced;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n\r\n const decorationSet = key.getState(state)!;\r\n\r\n const decorations: Decoration[] = decorationSet.find(0);\r\n decorations.forEach(decoration => {\r\n const from = tr.mapping.map(decoration.from);\r\n const to = tr.mapping.map(decoration.to);\r\n tr.insertText(text, from, to);\r\n replaced += 1;\r\n });\r\n this.withResultUpdates(() => {\r\n dispatch(tr);\r\n });\r\n }\r\n\r\n return replaced;\r\n };\r\n }\r\n\r\n public clear() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (dispatch) {\r\n this.term = '';\r\n this.options = {};\r\n this.updateResults(state, dispatch);\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n private updateResults(state: EditorState, dispatch: (tr: Transaction) => void) {\r\n this.withResultUpdates(() => {\r\n const tr = state.tr;\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n dispatch(tr);\r\n });\r\n }\r\n\r\n private resultDecorations(tr: Transaction): DecorationSet {\r\n // bail if no search term\r\n if (!this.hasTerm()) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // decorations to return\r\n const decorations: Decoration[] = [];\r\n\r\n // merge text nodes\r\n const textNodes = mergedTextNodes(tr.doc);\r\n\r\n textNodes.forEach(textNode => {\r\n const search = this.findRegEx();\r\n if (!search) {\r\n return;\r\n }\r\n\r\n let m;\r\n // tslint:disable-next-line no-conditional-assignment\r\n while ((m = search.exec(textNode.text))) {\r\n if (m[0] === '') {\r\n break;\r\n }\r\n const from = textNode.pos + m.index;\r\n const to = textNode.pos + m.index + m[0].length;\r\n const classes = ['pm-find-text'];\r\n if (from === tr.selection.from && to === tr.selection.to) {\r\n classes.push('pm-selected-text');\r\n }\r\n decorations.push(Decoration.inline(from, to, { class: classes.join(' ') }));\r\n }\r\n });\r\n\r\n // return as decoration set\r\n return decorations.length ? DecorationSet.create(tr.doc, decorations) : DecorationSet.empty;\r\n }\r\n\r\n private withResultUpdates(f: () => void) {\r\n this.updating = true;\r\n f();\r\n this.updating = false;\r\n }\r\n\r\n private selectResult(tr: Transaction, decoration: Decoration) {\r\n const selection = new TextSelection(tr.doc.resolve(decoration.from), tr.doc.resolve(decoration.to));\r\n return tr.setSelection(selection).scrollIntoView();\r\n }\r\n\r\n private isResultSelected(state: EditorState) {\r\n if (this.hasTerm()) {\r\n const selectedText = state.doc.textBetween(state.selection.from, state.selection.to);\r\n return this.matchesTerm(selectedText);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Watch for a search result to appear in the DOM. When it does, scroll it\r\n * into view.\r\n * \r\n * @param view The current EditorView \r\n */\r\n private watchForSelectedResult(view: EditorView) {\r\n // Clear any previous result observer\r\n this.clearResultObserver();\r\n\r\n // Create a new result observer to watch for results to be rendered\r\n this.resultObserver = new MutationObserver((records: MutationRecord[]) => {\r\n let resultElement:HTMLElement|null = null;\r\n\r\n // Predicate for testing a node to see if it looks like the active search result\r\n const isResultNode = (node: Node): boolean => {\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n return false;\r\n }\r\n const ele = node as HTMLElement;\r\n return ele.classList.contains('pm-find-text') && \r\n ele.classList.contains('pm-selected-text');\r\n };\r\n\r\n // Examine each mutation record to see if it's the one we're looking for\r\n records.forEach((mutation) => {\r\n switch(mutation.type) {\r\n case 'childList':\r\n // Case 1: a new search result node was added to the DOM\r\n mutation.addedNodes.forEach((node) => {\r\n if (isResultNode(node)) {\r\n resultElement = node as HTMLElement;\r\n }\r\n });\r\n break;\r\n case 'attributes':\r\n // Case 2: an existing node gained a \"class\" attribute and is now an\r\n // active search result\r\n if (isResultNode(mutation.target)) {\r\n resultElement = mutation.target as HTMLElement;\r\n }\r\n break;\r\n }\r\n });\r\n\r\n // If we found a result element, scroll it into view and turn off the DOM\r\n // observer. (If we didn't find one, it may be an irrelevant DOM mutation,\r\n // so ignore it.)\r\n if (resultElement) {\r\n this.scrollToSelectedResult(view, resultElement);\r\n this.clearResultObserver();\r\n }\r\n });\r\n\r\n const editingRoot = editingRootNode(view.state.selection);\r\n if (editingRoot) {\r\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n\r\n // Begin observing the editing surface for DOM mutations\r\n this.resultObserver.observe(container, {\r\n subtree: true,\r\n childList: true,\r\n attributeFilter: ['class'] // Only interested in changes to the \"class\" attribute\r\n });\r\n\r\n // The search results should appear quickly (we're really just waiting for\r\n // a render loop). If the observer runs for longer than 1s, just cancel\r\n // it, as it consumes resources and anything observed is likely to be\r\n // spurious.\r\n this.resultObserverTimer = window.setTimeout(() => {\r\n this.clearResultObserver();\r\n }, 1000);\r\n }\r\n }\r\n\r\n /**\r\n * Cleans all state related to the search result DOM observer\r\n */\r\n private clearResultObserver() {\r\n // Disconnect the result observer if running\r\n if (this.resultObserver !== null) {\r\n this.resultObserver.disconnect();\r\n this.resultObserver = null;\r\n }\r\n\r\n // Remove the result observer timer if running\r\n if (this.resultObserverTimer !== 0) {\r\n window.clearTimeout(this.resultObserverTimer);\r\n this.resultObserverTimer = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls the selected search result into view.\r\n * \r\n * @param view The EditorView on which to act\r\n * @param resultElement The HTML element containing the search result, if known\r\n */\r\n private scrollToSelectedResult(view: EditorView, resultElement: HTMLElement|null) {\r\n const editingRoot = editingRootNode(view.state.selection);\r\n if (editingRoot) {\r\n const container = view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n\r\n if (resultElement === null) {\r\n // Attempt to find a result element to scroll to if we weren't given one\r\n resultElement = container.querySelector(\".pm-find-text.pm-selected-text\");\r\n }\r\n\r\n if (resultElement === null || resultElement === this.resultElement) {\r\n // If we didn't find a result element, or if we found a stale one\r\n // (hasn't changed), defer scrolling until it has been rendered. This is\r\n // most common when the search result is inside an Ace editor chunk,\r\n // which puts the result in the DOM on a deferred render loop.\r\n this.watchForSelectedResult(view);\r\n return;\r\n } \r\n\r\n this.resultElement = resultElement;\r\n\r\n // Starting offset for scroll position \r\n let offset = 100;\r\n\r\n // Zenscroll can only scroll to a direct child element of the scroll\r\n // container, but the element containing the search result may be deeply\r\n // nested in the container. Walk up the DOM tree, summing the offsets,\r\n // until we get to an element that's actually a child of the scroll\r\n // container. \r\n let scrollElement = resultElement;\r\n while (scrollElement.offsetParent?.parentElement !== container) {\r\n offset += scrollElement.offsetTop;\r\n const nextParent = scrollElement.offsetParent;\r\n if (nextParent === null) {\r\n break;\r\n } \r\n scrollElement = nextParent as HTMLElement;\r\n }\r\n\r\n // Perform the scroll to the element's container plus its offset inside\r\n // the container.\r\n const scroller = zenscroll.createScroller(editorScrollContainer(container));\r\n scroller.center(scrollElement, 350, offset);\r\n }\r\n }\r\n\r\n private hasTerm() {\r\n return this.term.length > 0;\r\n }\r\n\r\n private matchesTerm(text: string) {\r\n if (this.hasTerm()) {\r\n const regex = this.findRegEx();\r\n if (regex) {\r\n return regex.test(text);\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private findRegEx() {\r\n try {\r\n return new RegExp(this.term, !this.options.caseSensitive ? 'gui' : 'gu');\r\n } catch {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nconst extension: Extension = {\r\n plugins: () => {\r\n return [new FindPlugin()];\r\n },\r\n};\r\n\r\nexport interface FindOptions {\r\n regex?: boolean;\r\n caseSensitive?: boolean;\r\n wrap?: boolean;\r\n}\r\n\r\nexport function find(view: EditorView, term: string, options: FindOptions): boolean {\r\n return findPlugin(view).find(term, options)(view.state, view.dispatch);\r\n}\r\n\r\nexport function matchCount(view: EditorView): number {\r\n return findPlugin(view).matchCount(view.state);\r\n}\r\n\r\nexport function selectFirst(view: EditorView): boolean {\r\n return findPlugin(view).selectFirst()(view.state, view.dispatch);\r\n}\r\n\r\nexport function selectCurrent(view: EditorView): boolean {\r\n return findPlugin(view).selectCurrent()(view.state, view.dispatch);\r\n}\r\n\r\nexport function selectNext(view: EditorView): boolean {\r\n return findPlugin(view).selectNext()(view.state, view.dispatch);\r\n}\r\n\r\nexport function selectPrevious(view: EditorView): boolean {\r\n return findPlugin(view).selectPrevious()(view.state, view.dispatch);\r\n}\r\n\r\nexport function replace(view: EditorView, text: string): boolean {\r\n return findPlugin(view).replace(text)(view.state, view.dispatch);\r\n}\r\n\r\nexport function replaceAll(view: EditorView, text: string) {\r\n return findPlugin(view).replaceAll(text)(view.state, view.dispatch);\r\n}\r\n\r\nexport function clear(view: EditorView): boolean {\r\n return findPlugin(view).clear()(view.state, view.dispatch);\r\n}\r\n\r\nexport function findPluginState(state: EditorState): DecorationSet | null | undefined {\r\n return key.getState(state);\r\n}\r\n\r\nfunction findPlugin(view: EditorView): FindPlugin {\r\n return key.get(view.state) as FindPlugin;\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * completion.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Selection, EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { EditorView, DecorationSet } from 'prosemirror-view';\r\n\r\nimport { canInsertNode } from './node';\r\nimport { EditorUI } from './ui-types';\r\nimport { kInsertCompletionTransaction } from './transaction';\r\n\r\nexport const kCompletionDefaultItemHeight = 22;\r\nexport const kCompletionDefaultMaxVisible = 10;\r\nexport const kCompletionDefaultWidth = 180;\r\n\r\nexport interface CompletionContext {\r\n isPaste: boolean;\r\n}\r\n\r\nexport interface CompletionsStream<T = unknown> {\r\n items: T[];\r\n stream: () => T[] | null;\r\n}\r\n\r\nexport type Completions<T> = T[] | CompletionsStream<T>;\r\n\r\nexport interface CompletionResult<T = unknown> {\r\n pos: number;\r\n offset?: number;\r\n token: string;\r\n completions: (state: EditorState, context: CompletionContext) => Promise<Completions<T>>;\r\n decorations?: DecorationSet;\r\n}\r\n\r\nexport interface CompletionHeaderProps {\r\n ui: EditorUI;\r\n message?: string;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport interface CompletionHandler<T = any> {\r\n // unique id\r\n id: string;\r\n\r\n // An optional scope for this completion handler. Completions\r\n // triggered by a transaction will filter completion handlers\r\n // that share a scope with the completion handler that originated\r\n // a transaction.\r\n scope?: string;\r\n\r\n // filter for determing whether we can call this handler from a given context (default is to\r\n // never offer completions if a mark with noInputRules is active). set to null to\r\n // allow completion anywhere\r\n enabled?: ((context: EditorState | Transaction) => boolean) | null;\r\n\r\n // return a set of completions for the given context. text is the text before\r\n // before the cursor in the current node (but no more than 500 characters)\r\n completions(text: string, context: EditorState | Transaction): CompletionResult<T> | null;\r\n\r\n // filter a previously returned set of completions\r\n filter?: (completions: T[], state: EditorState, token: string, prevToken?: string) => T[] | null;\r\n\r\n // provide a completion replacement as a string or node (can be passed null if the popup was dismissed)\r\n replacement?(schema: Schema, completion: T | null): string | ProsemirrorNode | null;\r\n\r\n // lower level replacement handler (can be passed null if the popup was dismissed)\r\n replace?(view: EditorView, pos: number, completion: T | null): Promise<unknown>;\r\n\r\n // prevent focus after insertion (good for e.g. omni-insert)\r\n noFocus?: (completion: T) => boolean ;\r\n\r\n // completion view\r\n view: {\r\n // optional header component (will go inside a <th>)\r\n header?: () =>\r\n | {\r\n component: React.FC<CompletionHeaderProps> | React.ComponentClass<CompletionHeaderProps>;\r\n height: number;\r\n message?: string;\r\n }\r\n | undefined;\r\n\r\n // react compontent type for viewing the item\r\n component: React.FC<T> | React.ComponentClass<T>;\r\n\r\n key: (completion: T) => unknown;\r\n\r\n // width of completion item (defaults to 180).\r\n width?: number;\r\n\r\n // height of completion item (defaults to 22px)\r\n height?: number;\r\n\r\n // use horizontal orientation (defaults to false)\r\n // (optionally provide a set of item widths)\r\n horizontal?: boolean;\r\n horizontalItemWidths?: number[];\r\n\r\n // maximum number of visible items (defaults to 10). note that\r\n // this only applies to completion poupups w/ vertical orientation\r\n // (scrolling is not supported for horizontal orientation)\r\n maxVisible?: number;\r\n\r\n // hide 'no results' (default false)\r\n hideNoResults?: boolean;\r\n };\r\n}\r\n\r\nexport function selectionAllowsCompletions(selection: Selection) {\r\n const schema = selection.$head.parent.type.schema;\r\n\r\n // non empty selections don't have completions\r\n if (!selection.empty) {\r\n return false;\r\n }\r\n\r\n // must be able to insert text\r\n if (!canInsertNode(selection, schema.nodes.text)) {\r\n return false;\r\n }\r\n\r\n // must not be in a code mark\r\n if (schema.marks.code && !!schema.marks.code.isInSet(selection.$from.marks())) {\r\n return false;\r\n }\r\n\r\n // must not be in a code node\r\n if (selection.$head.parent.type.spec.code) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n\r\n// Determine whether two completionHandlers share the same scope. By default\r\n// completion handlers will share scope only if they share an id, but handlers\r\n// can provide a scope if they'd like to coordinate.\r\nexport function completionsShareScope(handler: CompletionHandler, prevHandler?: CompletionHandler) {\r\n // There is no previous handler, not shared\r\n if (!prevHandler) {\r\n return false;\r\n }\r\n\r\n // Previous handler with the same scope as the current handler\r\n if (prevHandler.scope && prevHandler.scope === handler.scope) {\r\n return true;\r\n } else {\r\n // Previous handler has the same id as the current handler\r\n return prevHandler.id === handler.id;\r\n }\r\n}\r\n\r\nexport function performCompletionReplacement(tr: Transaction, pos: number, replacement: ProsemirrorNode | string) {\r\n // set selection to area we will be replacing\r\n tr.setSelection(new TextSelection(tr.doc.resolve(pos), tr.selection.$head));\r\n\r\n // ensure we have a node\r\n if (replacement instanceof ProsemirrorNode) {\r\n // combine it's marks w/ whatever is active at the selection\r\n const marks = tr.selection.$head.marks();\r\n\r\n // set selection and replace it\r\n tr.replaceSelectionWith(replacement, false);\r\n\r\n // propapate marks\r\n marks.forEach(mark => tr.addMark(pos, tr.selection.to, mark));\r\n } else {\r\n tr.insertText(replacement);\r\n }\r\n\r\n // mark the transaction as an completion insertion\r\n tr.setMeta(kInsertCompletionTransaction, true);\r\n}\r\n","/***\n Copyright 2013 Teun Duynstee\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\nmodule.exports = (function() {\n\n function identity(v){return v;}\n\n function ignoreCase(v){return typeof(v)===\"string\" ? v.toLowerCase() : v;}\n\n function makeCompareFunction(f, opt){\n opt = typeof(opt)===\"object\" ? opt : {direction:opt};\n \n if(typeof(f)!=\"function\"){\n var prop = f;\n // make unary function\n f = function(v1){return !!v1[prop] ? v1[prop] : \"\";}\n }\n if(f.length === 1) {\n // f is a unary function mapping a single item to its sort score\n var uf = f;\n var preprocess = opt.ignoreCase?ignoreCase:identity;\n var cmp = opt.cmp || function(v1,v2) {return v1 < v2 ? -1 : v1 > v2 ? 1 : 0;}\n f = function(v1,v2) {return cmp(preprocess(uf(v1)), preprocess(uf(v2)));}\n }\n const descTokens = {\"-1\":'', desc:''};\n if(opt.direction in descTokens) return function(v1,v2){return -f(v1,v2)};\n return f;\n }\n\n /* adds a secondary compare function to the target function (`this` context)\n which is applied in case the first one returns 0 (equal)\n returns a new compare function, which has a `thenBy` method as well */\n function tb(func, opt) {\n /* should get value false for the first call. This can be done by calling the \n exported function, or the firstBy property on it (for es6 module compatibility)\n */\n var x = (typeof(this) == \"function\" && !this.firstBy) ? this : false;\n var y = makeCompareFunction(func, opt);\n var f = x ? function(a, b) {\n return x(a,b) || y(a,b);\n }\n : y;\n f.thenBy = tb;\n return f;\n }\n tb.firstBy = tb;\n return tb;\n})();\n","/*\r\n * omni_insert.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { CommandFn } from './command';\r\n\r\n// descriptive info for omni insert\r\nexport interface OmniInsert {\r\n name: string;\r\n keywords?: string[];\r\n description: string;\r\n group: OmniInsertGroup;\r\n priority?: number;\r\n selectionOffset?: number;\r\n noFocus?: boolean;\r\n image: () => string;\r\n}\r\n\r\n// descriptive info + ability to identify/execute\r\nexport interface OmniInserter extends OmniInsert {\r\n id: string;\r\n command: CommandFn;\r\n}\r\n\r\nexport enum OmniInsertGroup {\r\n Common = 'Common',\r\n Headings = 'Headings',\r\n Lists = 'Lists',\r\n Math = 'Math',\r\n References = 'References',\r\n Content = 'Content',\r\n Blocks = 'Blocks',\r\n Chunks = 'Chunks',\r\n}\r\n\r\nconst omniInsertGroupOrder = new Map<string, number>(Object.keys(OmniInsertGroup).map((key, index) => [key, index]));\r\n\r\nexport function omniInsertGroupCompare(a: OmniInsert, b: OmniInsert) {\r\n return omniInsertGroupOrder.get(a.group)! - omniInsertGroupOrder.get(b.group)!;\r\n}\r\n\r\nexport function omniInsertPriorityCompare(a: OmniInsert, b: OmniInsert) {\r\n return (a.priority || 0) - (b.priority || 0);\r\n}\r\n","/*\r\n * placeholder.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, NodeType } from 'prosemirror-model';\r\nimport { EditorState, Transaction, Plugin, PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration } from 'prosemirror-view';\r\n\r\nimport { findParentNode } from 'prosemirror-utils';\r\n\r\nimport { EditorUI } from './ui-types';\r\n\r\nexport function emptyNodePlaceholderPlugin(nodeType: NodeType, placeholder: (node: ProsemirrorNode) => string, filter?: (tr: Transaction) => boolean) {\r\n const pluginKey = new PluginKey(nodeType.name + '-empty-placeholder');\r\n\r\n return new Plugin<DecorationSet>({\r\n key: pluginKey,\r\n state: {\r\n init() {\r\n return DecorationSet.empty;\r\n },\r\n apply(tr: Transaction) {\r\n // check for empty parent of our type\r\n const emptyNode = findParentNode(node => node.type === nodeType && node.childCount === 0)(tr.selection);\r\n if (emptyNode && (!filter || filter(tr))) {\r\n const decoration = placeholderDecoration(emptyNode.pos + 1, placeholder(emptyNode.node));\r\n return DecorationSet.create(tr.doc, [decoration]);\r\n } else {\r\n return DecorationSet.empty;\r\n }\r\n },\r\n },\r\n props: {\r\n decorations(state: EditorState) {\r\n return pluginKey.getState(state);\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport function placeholderDecoration(pos: number, text: string) {\r\n return Decoration.widget(pos, () => {\r\n const placeholder = window.document.createElement('span');\r\n placeholder.classList.add('pm-placeholder-text-color');\r\n placeholder.innerText = text;\r\n return placeholder;\r\n });\r\n}\r\n\r\nexport function iconAndTextPlaceholderDecoration(pos: number, icon: string, text: string) {\r\n return Decoration.widget(pos, () => {\r\n const container = window.document.createElement('span');\r\n\r\n const iconImg = window.document.createElement('img');\r\n iconImg.classList.add('pm-placeholder-icon');\r\n iconImg.setAttribute('src', icon);\r\n iconImg.setAttribute('draggable', 'false');\r\n\r\n const message = window.document.createElement('span');\r\n message.classList.add('pm-placeholder-text-color');\r\n message.classList.add('pm-placeholder-text');\r\n message.innerText = text;\r\n\r\n container.appendChild(iconImg);\r\n container.appendChild(message);\r\n return container;\r\n });\r\n}\r\n\r\nexport function searchPlaceholderDecoration(pos: number, ui: EditorUI, text?: string) {\r\n return iconAndTextPlaceholderDecoration(pos, ui.images.search!, text || '');\r\n}\r\n","/*\r\n * omni_insert.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Selection, Transaction } from 'prosemirror-state';\r\nimport { EditorView, DecorationSet } from 'prosemirror-view';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport React from 'react';\r\nimport { firstBy } from 'thenby';\r\n\r\nimport { OmniInserter, omniInsertGroupCompare, omniInsertPriorityCompare } from '../../api/omni_insert';\r\nimport { CompletionHandler, CompletionResult } from '../../api/completion';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { placeholderDecoration } from '../../api/placeholder';\r\nimport { kAddToHistoryTransaction } from '../../api/transaction';\r\n\r\nimport './omni_insert-completion.css';\r\n\r\nexport function omniInsertCompletionHandler(\r\n omniInserters: OmniInserter[],\r\n ui: EditorUI,\r\n): CompletionHandler<OmniInserter> {\r\n return {\r\n id: 'E305158D-20D6-474D-84E6-06607CA58578',\r\n\r\n completions: omniInsertCompletions(omniInserters, ui),\r\n\r\n noFocus: (completion: OmniInserter) => {\r\n return completion.noFocus === true;\r\n },\r\n\r\n filter: (completions: OmniInserter[], state: EditorState, token: string) => {\r\n // match contents of name or keywords (and verify the command is enabled)\r\n return completions\r\n .filter(inserter => {\r\n return (\r\n token.length === 0 ||\r\n inserter.name.toLowerCase().indexOf(token) !== -1 ||\r\n inserter.keywords?.some(keyword => keyword.indexOf(token) !== -1)\r\n );\r\n })\r\n .filter(inserter => {\r\n return inserter.command(state);\r\n })\r\n .sort(\r\n firstBy(omniInsertGroupCompare)\r\n .thenBy(omniInsertPriorityCompare, { direction: 'desc' })\r\n .thenBy('name'),\r\n );\r\n },\r\n\r\n replace(view: EditorView, pos: number, completion: OmniInserter | null) {\r\n // helper to remove command text\r\n const removeCommandText = () => {\r\n const tr = view.state.tr;\r\n tr.deleteRange(pos, view.state.selection.head);\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n view.dispatch(tr);\r\n };\r\n\r\n // execute command if provided\r\n if (completion) {\r\n // remove existing text\r\n removeCommandText();\r\n\r\n // execute the command\r\n completion.command(view.state, view.dispatch, view);\r\n\r\n // perform any requested selection offset\r\n if (completion.selectionOffset) {\r\n const tr = view.state.tr;\r\n setTextSelection(tr.selection.from + completion.selectionOffset)(tr);\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n view.dispatch(tr);\r\n }\r\n\r\n // the activation of omni_insert wasn't part of 'natural' typing\r\n // in the document so remove it\r\n } else {\r\n removeCommandText();\r\n }\r\n return Promise.resolve();\r\n },\r\n\r\n view: {\r\n component: OmniInserterView,\r\n key: command => command.id,\r\n width: 320,\r\n height: 46,\r\n maxVisible: 6,\r\n },\r\n };\r\n}\r\n\r\nconst kOmniInsertRegex = /\\/([\\w]*)$/;\r\n\r\nfunction omniInsertCompletions(omniInserters: OmniInserter[], ui: EditorUI) {\r\n return (text: string, context: EditorState | Transaction): CompletionResult<OmniInserter> | null => {\r\n const match = text.match(kOmniInsertRegex);\r\n if (match) {\r\n // we need to either be at the beginning of our parent, OR the omni_insert mark needs\r\n // to be active (that indicates that we entered omni insert mode via a user command)\r\n if (match.index !== 0 && !isOmniInsertCommandActive(context.selection)) {\r\n return null;\r\n }\r\n\r\n // capture query (note that no query returns all).\r\n const query = match[1].toLowerCase();\r\n\r\n // include a decoration if the query is empty\r\n const decorations =\r\n query.length === 0\r\n ? DecorationSet.create(context.doc, [\r\n placeholderDecoration(context.selection.head, ui.context.translateText(' type to search...')),\r\n ])\r\n : undefined;\r\n\r\n // return the completion result\r\n return {\r\n // match at the /\r\n pos: context.selection.head - match[0].length,\r\n\r\n // unique identifier for this request\r\n token: query,\r\n\r\n // return all omniInserters (will refine via filter)\r\n completions: () => {\r\n return Promise.resolve(omniInserters);\r\n },\r\n\r\n // search placehodler decorator if there is no query\r\n decorations,\r\n };\r\n } else {\r\n return null;\r\n }\r\n };\r\n}\r\n\r\nconst OmniInserterView: React.FC<OmniInserter> = inserter => {\r\n return (\r\n <table className={'pm-omni-insert-completion'}>\r\n <tbody>\r\n <tr>\r\n <td className={'pm-omni-insert-icon'}>\r\n <img className={'pm-block-border-color'} src={inserter.image()} alt=\"\" draggable=\"false\"/>\r\n </td>\r\n <td>\r\n <div className={'pm-omni-insert-name pm-completion-list-item-text'}>{inserter.name}</div>\r\n <div className={'pm-omni-insert-description pm-completion-list-item-text'}>{inserter.description}</div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n );\r\n};\r\n\r\nfunction isOmniInsertCommandActive(selection: Selection) {\r\n const schema = selection.$head.parent.type.schema;\r\n return schema.marks.omni_insert.isInSet(selection.$head.marks());\r\n}\r\n","/*\r\n * omni_insert.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { Mark, Fragment, DOMOutputSpec } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { PandocOutput } from '../../api/pandoc';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { CompletionHandler, selectionAllowsCompletions } from '../../api/completion';\r\nimport { OmniInserter } from '../../api/omni_insert';\r\nimport { MarkInputRuleFilter } from '../../api/input_rule';\r\nimport { EditorUI } from '../../api/ui-types';\r\n\r\nimport { omniInsertCompletionHandler } from './omni_insert-completion';\r\nimport { Extension } from '../../api/extension';\r\nimport { markIsActive } from '../../api/mark';\r\n\r\nexport function markOmniInsert() {\r\n return {\r\n marks: [\r\n {\r\n name: 'omni_insert',\r\n spec: {\r\n inclusive: true,\r\n noInputRules: true,\r\n parseDOM: [{ tag: \"span[class*='omni_insert']\" }],\r\n toDOM() : DOMOutputSpec {\r\n return ['span', { class: 'omni_insert' }];\r\n },\r\n },\r\n pandoc: {\r\n readers: [],\r\n writer: {\r\n priority: 30,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeInlines(parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n}\r\n\r\nexport function omniInsertExtension(\r\n omniInserters: OmniInserter[],\r\n inputRuleFilter: MarkInputRuleFilter,\r\n ui: EditorUI,\r\n): Extension {\r\n return {\r\n commands: () => [new OmniInsertCommand(inputRuleFilter)],\r\n completionHandlers: () : CompletionHandler<OmniInserter>[] => [omniInsertCompletionHandler(omniInserters, ui)],\r\n };\r\n}\r\n\r\nclass OmniInsertCommand extends ProsemirrorCommand {\r\n constructor(markFilter: MarkInputRuleFilter) {\r\n super(\r\n EditorCommandId.OmniInsert,\r\n ['Mod-/'],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // check whether selection allows completions\r\n if (!selectionAllowsCompletions(state.selection)) {\r\n return false;\r\n }\r\n\r\n // if the marks is already active then bail\r\n if (markIsActive(state, state.schema.marks.omni_insert)) {\r\n return false;\r\n }\r\n\r\n // check the mark filter\r\n if (!markFilter(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const mark = state.schema.marks.omni_insert.create();\r\n const node = state.schema.text('/', [mark]);\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(node, false);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n },\r\n );\r\n }\r\n}\r\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","/*\r\n * popup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nexport type PopupProps = WidgetProps;\r\n\r\nexport const Popup: React.FC<PopupProps> = props => {\r\n const className = ['pm-popup', 'pm-text-color', 'pm-proportional-font', 'pm-pane-border-color', 'pm-background-color']\r\n .concat(props.classes || [])\r\n .join(' ');\r\n\r\n const style: React.CSSProperties = {\r\n ...props.style,\r\n position: 'absolute',\r\n zIndex: 10,\r\n };\r\n\r\n return (\r\n <div className={className} style={style} contentEditable={false} suppressContentEditableWarning={true}>\r\n {props.children}\r\n </div>\r\n );\r\n};\r\n","/*\r\n * completion-popup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport React, { useEffect } from 'react';\r\nimport { createRoot, Root } from 'react-dom/client';\r\n\r\nimport zenscroll from 'zenscroll';\r\n\r\nimport { applyStyles } from '../../api/css';\r\nimport {\r\n CompletionHandler,\r\n kCompletionDefaultItemHeight,\r\n kCompletionDefaultMaxVisible,\r\n kCompletionDefaultWidth,\r\n} from '../../api/completion';\r\nimport { Popup } from '../../api/widgets/popup';\r\n\r\nimport './completion-popup.css';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { editorScrollContainer } from '../../api/scroll';\r\n\r\nconst kNoResultsHeight = 22;\r\n\r\nexport interface CompletionListProps<T = unknown>{\r\n handler: CompletionHandler<T>;\r\n pos: number;\r\n completions: T[];\r\n selectedIndex: number;\r\n noResults: string;\r\n onHover: (index: number) => void;\r\n onClick: (index: number) => void;\r\n ui: EditorUI;\r\n}\r\n\r\nexport interface CompletionPopup {\r\n el: HTMLElement;\r\n root: Root;\r\n}\r\n\r\nexport function createCompletionPopup(): CompletionPopup {\r\n const popup = window.document.createElement('div');\r\n popup.style.position = 'absolute';\r\n popup.style.zIndex = '900';\r\n window.document.body.appendChild(popup);\r\n return {\r\n el: popup,\r\n root: createRoot(popup)\r\n }\r\n}\r\n\r\nexport function renderCompletionPopup(view: EditorView, props: CompletionListProps<unknown>, popup: CompletionPopup) {\r\n // position popup\r\n const size = completionPopupSize(props);\r\n const positionStyles = completionPopupPositionStyles(view, props.pos, size.width, size.height);\r\n applyStyles(popup.el, [], positionStyles);\r\n\r\n // render popup\r\n popup.root.render(<CompletionPopup {...props} />);\r\n}\r\n\r\nexport function destroyCompletionPopup(popup: CompletionPopup) {\r\n popup.root.unmount();\r\n popup.el.remove();\r\n}\r\n\r\nconst CompletionPopup: React.FC<CompletionListProps<unknown>> = props => {\r\n // main completion popup + class + dark mode if appropriate\r\n const classes = ['pm-completion-popup'].concat(props.ui.prefs.darkMode() ? ['pm-dark-mode'] : []);\r\n return (\r\n <Popup classes={classes}>\r\n <CompletionList {...props} />\r\n </Popup>\r\n );\r\n};\r\n\r\nconst CompletionList: React.FC<CompletionListProps<unknown>> = props => {\r\n const size = completionPopupSize(props);\r\n const itemHeight = props.handler.view.height || kCompletionDefaultItemHeight;\r\n\r\n // keep selected index in view\r\n const containerRef = React.useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n const containerEl = containerRef.current;\r\n if (containerEl) {\r\n const rows = containerEl.getElementsByClassName('pm-completion-list-item-row');\r\n const scrollToRow = rows.item(props.selectedIndex);\r\n if (scrollToRow) {\r\n const scroller = zenscroll.createScroller(editorScrollContainer(containerEl));\r\n scroller.intoView(scrollToRow as HTMLElement);\r\n }\r\n }\r\n }, [props.selectedIndex]);\r\n\r\n // item event handler\r\n const itemEventHandler = (index: number, handler: (index: number) => void) => {\r\n return (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n handler(index);\r\n };\r\n };\r\n\r\n // completion source based on orientation\r\n const completions = props.handler.view.horizontal ? horizontalCompletions : verticalCompletions;\r\n\r\n const classes = ['pm-completion-list'].concat(props.handler.view.horizontal ? ['pm-completion-list-horizontal'] : []);\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={classes.join(' ')}\r\n style={{ width: size.width + 'px', height: size.height + 'px' }}\r\n >\r\n <table>\r\n {completionsHeader(props.handler, props.completions.length, props)}\r\n <tbody>\r\n {completions(props, itemHeight, itemEventHandler)}\r\n {props.completions.length === 0 ? completionsNoResults(props) : null}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n};\r\n\r\nfunction completionsHeader(handler: CompletionHandler, completionCount: number, props: CompletionListProps) {\r\n if (handler.view.header) {\r\n const completionHeader = handler.view.header ? handler.view.header() : undefined;\r\n const headerProps = { message: completionHeader?.message, ...props };\r\n\r\n if (completionHeader) {\r\n const header = React.createElement(completionHeader.component, headerProps);\r\n return (\r\n <thead>\r\n <tr>\r\n <th\r\n style={{ lineHeight: completionHeader.height + 'px' }}\r\n colSpan={props.handler.view.horizontal ? completionCount : undefined}\r\n >\r\n {header}\r\n </th>\r\n </tr>\r\n </thead>\r\n );\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\ntype ItemEventHandler = (index: number, handler: (index: number) => void) => (event: React.MouseEvent) => void;\r\n\r\nfunction verticalCompletions(props: CompletionListProps, itemHeight: number, itemEventHandler: ItemEventHandler) {\r\n return props.completions.map((completion, index) => {\r\n const { key, cell } = completionItemCell(props, completion, index);\r\n return (\r\n <tr\r\n key={key}\r\n style={{ lineHeight: itemHeight + 'px' }}\r\n className={'pm-completion-list-item-row'}\r\n onClick={itemEventHandler(index, props.onClick)}\r\n onMouseMove={itemEventHandler(index, props.onHover)}\r\n >\r\n {cell}\r\n </tr>\r\n );\r\n });\r\n}\r\n\r\nfunction horizontalCompletions(props: CompletionListProps, itemHeight: number, itemEventHandler: ItemEventHandler) {\r\n const cellWidths = horizontalCellWidths(props);\r\n return (\r\n <tr style={{ lineHeight: itemHeight + 'px' }}>\r\n {props.completions.map((completion, index) => {\r\n const { cell } = completionItemCell(props, completion, index, cellWidths[index], itemEventHandler);\r\n return cell;\r\n })}\r\n </tr>\r\n );\r\n}\r\n\r\nfunction completionItemCell(\r\n props: CompletionListProps,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n completion: any,\r\n index: number,\r\n width?: number,\r\n itemEventHandler?: ItemEventHandler,\r\n) {\r\n // need to provide key for both wrapper and item\r\n // https://stackoverflow.com/questions/28329382/understanding-unique-keys-for-array-children-in-react-js#answer-28329550\r\n const key = props.handler.view.key(completion) as React.Key;\r\n const itemProps = typeof(completion) === \"object\" ? completion : {};\r\n const item = React.createElement(props.handler.view.component, { ...itemProps, key });\r\n const className = 'pm-completion-list-item' + (index === props.selectedIndex ? ' pm-selected-list-item' : '');\r\n const cell = (\r\n <td\r\n key={key}\r\n style={width ? { width: width + 'px' } : undefined}\r\n className={className}\r\n onClick={itemEventHandler ? itemEventHandler(index, props.onClick) : undefined}\r\n onMouseMove={itemEventHandler ? itemEventHandler(index, props.onHover) : undefined}\r\n >\r\n {item}\r\n </td>\r\n );\r\n return { key, cell };\r\n}\r\n\r\nfunction completionsNoResults(props: CompletionListProps) {\r\n return (\r\n <tr\r\n className={'pm-completion-no-results pm-placeholder-text-color'}\r\n style={{ lineHeight: kNoResultsHeight + 'px' }}\r\n >\r\n <td>{props.noResults}</td>\r\n </tr>\r\n );\r\n}\r\n\r\nfunction completionPopupSize(props: CompletionListProps) {\r\n // kicker for list margins/border/etc\r\n const kCompletionsChrome = 8;\r\n\r\n // get view props (apply defaults)\r\n let { height: itemHeight = kCompletionDefaultItemHeight } = props.handler.view;\r\n const { maxVisible = kCompletionDefaultMaxVisible, width = kCompletionDefaultWidth } = props.handler.view;\r\n\r\n // add 2px for the border to item heights\r\n const kBorderPad = 2;\r\n itemHeight += kBorderPad;\r\n\r\n // compute header height\r\n let headerHeight = 0;\r\n if (props.handler.view.header) {\r\n const completionHeader = props.handler.view.header();\r\n if (completionHeader) {\r\n headerHeight = completionHeader.height + kBorderPad;\r\n }\r\n }\r\n\r\n // complete based on horizontal vs. vertical\r\n if (props.handler.view.horizontal) {\r\n // horizontal mode can provide explicit item widths\r\n const kTablePadding = 8;\r\n const kCellPadding = 8;\r\n const kCellBorders = 2;\r\n const totalWidth =\r\n horizontalCellWidths(props).reduce((total, current) => {\r\n return total + (current + kCellPadding + kCellBorders);\r\n }, 0) + kTablePadding;\r\n\r\n return {\r\n width: totalWidth,\r\n height: headerHeight + itemHeight + kCompletionsChrome,\r\n };\r\n } else {\r\n // compute height (subject it to a minimum require to display 'no results')\r\n const height =\r\n headerHeight +\r\n kCompletionsChrome +\r\n Math.max(itemHeight * Math.min(maxVisible, props.completions.length), kNoResultsHeight);\r\n\r\n // return\r\n return { width, height };\r\n }\r\n}\r\n\r\nfunction horizontalCellWidths(props: CompletionListProps) {\r\n const { width = kCompletionDefaultWidth } = props.handler.view;\r\n return props.completions.map((_completion, index) => {\r\n if (props.handler.view.horizontalItemWidths) {\r\n return props.handler.view.horizontalItemWidths[index] || width;\r\n } else {\r\n return width;\r\n }\r\n });\r\n}\r\n\r\nfunction completionPopupPositionStyles(view: EditorView, pos: number, width: number, height: number) {\r\n // some constants\r\n const kMinimumPaddingToEdge = 5;\r\n const kCompletionsVerticalPadding = 5;\r\n\r\n // default position\r\n const selectionCoords = view.coordsAtPos(pos);\r\n\r\n let top = selectionCoords.bottom + kCompletionsVerticalPadding;\r\n let left = selectionCoords.left;\r\n\r\n // see if we need to be above\r\n if (top + height + kMinimumPaddingToEdge >= window.innerHeight) {\r\n top = Math.max(selectionCoords.top - height - kCompletionsVerticalPadding, kCompletionsVerticalPadding);\r\n }\r\n\r\n // see if we need to be to the left (use cursor as pos in this case)\r\n if (left + width + kMinimumPaddingToEdge >= window.innerWidth) {\r\n const cursorCoords = view.coordsAtPos(view.state.selection.head);\r\n left = cursorCoords.right - width;\r\n }\r\n\r\n return {\r\n left: left + 'px',\r\n top: top + 'px',\r\n };\r\n}\r\n","/*\r\n * completion.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// TODO: it may be that we need to not do full re-requests from the filter\r\n// when we have streamed results (as they can cause reset of the allCompletions)\r\n\r\nimport { Plugin, PluginKey, Transaction, Selection, EditorState } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { PromiseQueue } from 'core';\r\n\r\nimport {\r\n CompletionHandler,\r\n selectionAllowsCompletions,\r\n kCompletionDefaultMaxVisible,\r\n completionsShareScope,\r\n performCompletionReplacement,\r\n CompletionResult,\r\n CompletionsStream,\r\n} from '../../api/completion';\r\nimport { EditorEvents, ScrollEvent } from '../../api/event-types';\r\n\r\nimport { createCompletionPopup, renderCompletionPopup, destroyCompletionPopup, CompletionPopup } from './completion-popup';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { MarkInputRuleFilter } from '../../api/input_rule';\r\nimport { kInsertCompletionTransaction, kPasteTransaction } from '../../api/transaction';\r\n\r\ninterface CompletionState {\r\n handler?: CompletionHandler;\r\n result?: CompletionResult;\r\n prevToken?: string;\r\n isPaste?: boolean;\r\n}\r\n\r\nexport function completionExtension(\r\n handlers: readonly CompletionHandler[],\r\n inputRuleFilter: MarkInputRuleFilter,\r\n ui: EditorUI,\r\n events: EditorEvents,\r\n) {\r\n return {\r\n plugins: () => [new CompletionPlugin(handlers, inputRuleFilter, ui, events)],\r\n };\r\n}\r\n\r\nconst key = new PluginKey<CompletionState>('completion');\r\n\r\nclass CompletionPlugin extends Plugin<CompletionState> {\r\n // editor ui\r\n private readonly ui: EditorUI;\r\n\r\n // editor view\r\n private view: EditorView | null = null;\r\n\r\n // popup elemeent\r\n private completionPopup: CompletionPopup | null = null;\r\n\r\n // currently selected index and last set of completions are held as transient\r\n // state because they can't be derived from the document state (selectedIndex\r\n // is derived from out of band user keyboard gestures and completions may\r\n // have required fulfilling an external promise). also use a version counter\r\n // used to invalidate async completion requests that are fulfilled after\r\n // an update has occurred\r\n private version = 0;\r\n private allCompletions: unknown[] = [];\r\n private completions: unknown[] = [];\r\n private horizontal = false;\r\n private selectedIndex = 0;\r\n\r\n // serialize async completion requests\r\n private completionQueue = new PromiseQueue();\r\n\r\n // events we need to unsubscribe from\r\n private readonly scrollUnsubscribe: VoidFunction;\r\n\r\n constructor(\r\n handlers: readonly CompletionHandler[],\r\n inputRuleFilter: MarkInputRuleFilter,\r\n ui: EditorUI,\r\n events: EditorEvents,\r\n ) {\r\n super({\r\n key,\r\n state: {\r\n init: () => ({}),\r\n apply: (tr: Transaction, prevState: CompletionState) => {\r\n // if we don't have a view then bail\r\n if (!this.view) {\r\n return {};\r\n }\r\n\r\n // selection only changes dismiss any active completion\r\n if (!tr.docChanged && !tr.storedMarksSet && tr.selectionSet) {\r\n return {};\r\n }\r\n\r\n // check whether completions are valid here\r\n if (!selectionAllowsCompletions(tr.selection)) {\r\n return {};\r\n }\r\n\r\n // calculate text before cursor\r\n const textBefore = completionTextBeforeCursor(tr.selection);\r\n\r\n // if there is no text then don't handle it\r\n if (textBefore.length === 0) {\r\n return {};\r\n }\r\n\r\n const isPaste = tr.getMeta(kPasteTransaction) === true;\r\n\r\n // check for a handler that can provide completions at the current selection\r\n for (const handler of handlers) {\r\n // first check if the handler is enabled (null means use inputRuleFilter)\r\n if (handler.enabled === null || (handler.enabled ? handler.enabled(tr) : inputRuleFilter(tr))) {\r\n const result = handler.completions(textBefore, tr);\r\n if (result) {\r\n // check if the previous state had a completion from the same handler\r\n let prevToken: string | undefined;\r\n\r\n // if we are using the same handler at the same position, and it has\r\n // a completions filter, then forward the token\r\n if (handler.id === prevState.handler?.id &&\r\n result.pos === prevState.result?.pos &&\r\n handler.filter) {\r\n prevToken = prevState.result.token;\r\n \r\n // bypass if this was an insert with the same scope\r\n } else if (tr.getMeta(kInsertCompletionTransaction) && \r\n completionsShareScope(handler, prevState.handler)) {\r\n continue;\r\n }\r\n\r\n // return state\r\n return { handler, result, prevToken, isPaste };\r\n }\r\n }\r\n }\r\n\r\n // no handler found\r\n return {};\r\n },\r\n },\r\n\r\n view: () => ({\r\n update: (view: EditorView) => {\r\n // increment version\r\n this.version++;\r\n\r\n // set view\r\n this.view = view;\r\n\r\n // update completions\r\n this.updateCompletions(view, true);\r\n },\r\n\r\n destroy: () => {\r\n // unsubscribe from events\r\n this.scrollUnsubscribe();\r\n window.document.removeEventListener('focusin', this.clearCompletions);\r\n\r\n // tear down the popup\r\n this.clearCompletions();\r\n },\r\n }),\r\n\r\n props: {\r\n decorations: (state: EditorState) => {\r\n const pluginState = key.getState(state);\r\n return pluginState?.result?.decorations;\r\n },\r\n\r\n handleDOMEvents: {\r\n keydown: (view: EditorView, event: Event) => {\r\n const kbEvent = event as KeyboardEvent;\r\n\r\n let handled = false;\r\n\r\n // determine meaning of keys based on orientation\r\n const forwardKey = this.horizontal ? 'ArrowRight' : 'ArrowDown';\r\n const backwardKey = this.horizontal ? 'ArrowLeft' : 'ArrowUp';\r\n\r\n if (this.completionsActive()) {\r\n switch (kbEvent.key) {\r\n case 'Escape':\r\n this.dismissCompletions();\r\n handled = true;\r\n break;\r\n case 'Enter':\r\n case 'Tab':\r\n this.insertCompletion(view, this.selectedIndex);\r\n handled = true;\r\n break;\r\n case backwardKey:\r\n this.selectedIndex = Math.max(this.selectedIndex - 1, 0);\r\n this.renderCompletions(view);\r\n handled = true;\r\n break;\r\n case forwardKey:\r\n this.selectedIndex = Math.min(this.selectedIndex + 1, this.completions.length - 1);\r\n this.renderCompletions(view);\r\n handled = true;\r\n break;\r\n case 'PageUp':\r\n this.selectedIndex = Math.max(this.selectedIndex - this.completionPageSize(), 0);\r\n this.renderCompletions(view);\r\n handled = true;\r\n break;\r\n case 'PageDown':\r\n this.selectedIndex = Math.min(\r\n this.selectedIndex + this.completionPageSize(),\r\n this.completions.length - 1,\r\n );\r\n this.renderCompletions(view);\r\n handled = true;\r\n break;\r\n case 'End':\r\n this.selectedIndex = this.completions.length - 1;\r\n this.renderCompletions(view);\r\n handled = true;\r\n break;\r\n case 'Home':\r\n this.selectedIndex = 0;\r\n this.renderCompletions(view);\r\n handled = true;\r\n break;\r\n }\r\n }\r\n\r\n // suppress event if we handled it\r\n if (handled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n // return status\r\n return handled;\r\n },\r\n },\r\n },\r\n });\r\n\r\n // capture reference to ui\r\n this.ui = ui;\r\n\r\n // hide completions when we scroll or the focus changes\r\n this.clearCompletions = this.clearCompletions.bind(this);\r\n this.scrollUnsubscribe = events.subscribe(ScrollEvent, this.clearCompletions);\r\n window.document.addEventListener('focusin', this.clearCompletions);\r\n }\r\n\r\n private updateCompletions(view: EditorView, resetSelection: boolean) {\r\n const state = key.getState(view.state);\r\n\r\n if (state?.handler && state?.result) {\r\n // track the request version to invalidate the result if an\r\n // update happens after it goes into flight\r\n const requestVersion = this.version;\r\n\r\n // make an async request for the completions, update allCompletions,\r\n // and then apply any filter we have (allows the completer to just return\r\n // everything from the aysnc query and fall back to the filter for refinement)\r\n const requestAllCompletions = async () => {\r\n // fetch completions\r\n const completions = await state.result!.completions(view.state, { isPaste: state.isPaste === true });\r\n\r\n // if we don't have a handler or result then return\r\n if (!state.handler || !state.result) {\r\n return;\r\n }\r\n\r\n // function to update completions\r\n const updateCompletions = (updatedCompletions: unknown[]) => {\r\n // save completions\r\n this.setAllCompletions(updatedCompletions, !!state.handler?.view.horizontal, resetSelection);\r\n\r\n // display if the request still maps to the current state\r\n if (state.handler && state.result && this.version === requestVersion) {\r\n // if there is a filter then call it and update displayed completions\r\n const displayedCompletions = state.handler.filter\r\n ? state.handler.filter(this.allCompletions, view.state, state.result.token)\r\n : null;\r\n if (displayedCompletions) {\r\n this.setDisplayedCompletions(displayedCompletions, !!state.handler.view.horizontal, resetSelection);\r\n }\r\n\r\n this.renderCompletions(view);\r\n }\r\n };\r\n\r\n // if we got an array, just set it. if we got a stream then poll it for it's update\r\n if (Array.isArray(completions)) {\r\n updateCompletions(completions);\r\n } else {\r\n const completionStream = completions as CompletionsStream;\r\n updateCompletions(completionStream.items);\r\n const pollingInterval = window.setInterval(() => {\r\n // if the document has been updated then invalidate\r\n if (this.version !== requestVersion) {\r\n clearInterval(pollingInterval);\r\n } else {\r\n // otherwise check the stream\r\n const result = completionStream.stream();\r\n if (result) {\r\n clearInterval(pollingInterval);\r\n updateCompletions(result);\r\n }\r\n }\r\n }, 300);\r\n }\r\n };\r\n\r\n // first see if we can do this exclusively via filter\r\n if (state.prevToken && state.handler.filter) {\r\n this.completionQueue.enqueue(async () => {\r\n // display if the request still maps to the current state\r\n if (state.handler && state.result && this.version === requestVersion) {\r\n const filteredCompletions = state.handler.filter!(\r\n this.allCompletions,\r\n view.state,\r\n state.result.token,\r\n state.prevToken,\r\n );\r\n\r\n // got a hit from the filter!\r\n if (filteredCompletions) {\r\n this.setDisplayedCompletions(filteredCompletions, !!state.handler.view.horizontal, resetSelection);\r\n this.renderCompletions(view);\r\n\r\n // couldn't use the filter, do a full request for all completions (so long as we aren't\r\n // already waiting on a strea,)\r\n } else {\r\n await requestAllCompletions();\r\n }\r\n }\r\n });\r\n } else {\r\n // no prevToken or no filter for this handler, request everything\r\n this.completionQueue.enqueue(requestAllCompletions);\r\n }\r\n } else {\r\n // no handler/result for this document state\r\n this.clearCompletions();\r\n }\r\n }\r\n\r\n private renderCompletions(view: EditorView) {\r\n const state = key.getState(view.state);\r\n\r\n if (state && state.handler && (this.completions.length > 0 || !state.handler.view.hideNoResults)) {\r\n const props = {\r\n handler: state.handler!,\r\n pos: state.result!.pos + (state.result!.offset || 0),\r\n completions: this.completions,\r\n selectedIndex: this.selectedIndex,\r\n noResults: this.ui.context.translateText('No Results'),\r\n onClick: (index: number) => {\r\n this.insertCompletion(view, index);\r\n },\r\n onHover: (index: number) => {\r\n this.selectedIndex = index;\r\n this.renderCompletions(view);\r\n },\r\n ui: this.ui,\r\n };\r\n\r\n // create the completion popup if we need to\r\n if (this.completionPopup === null) {\r\n this.completionPopup = createCompletionPopup();\r\n }\r\n\r\n // render\r\n renderCompletionPopup(view, props, this.completionPopup);\r\n } else {\r\n // hide\r\n this.hideCompletionPopup();\r\n }\r\n }\r\n\r\n private async insertCompletion(view: EditorView, index: number) {\r\n // default index if not specified\r\n index = index || this.selectedIndex;\r\n const completion = this.completions[index];\r\n\r\n const state = key.getState(view.state);\r\n if (state && state.handler) {\r\n // perform replacement\r\n const result = state.result!;\r\n\r\n // check low level handler first\r\n if (state.handler.replace) {\r\n // execute replace\r\n await state.handler.replace(view, result.pos, this.completions[index]);\r\n\r\n // use higher level handler\r\n } else if (state.handler.replacement) {\r\n // get replacement from handler\r\n const replacement = state.handler.replacement(view.state.schema, this.completions[index]);\r\n if (replacement) {\r\n const tr = view.state.tr;\r\n performCompletionReplacement(tr, result.pos, replacement);\r\n view.dispatch(tr);\r\n }\r\n }\r\n // set focus\r\n if (!state.handler.noFocus || !state.handler.noFocus(completion)) {\r\n view.focus()\r\n }\r\n }\r\n this.clearCompletions();\r\n }\r\n\r\n // explicit user dismiss of completion (e.g. Esc key)\r\n private async dismissCompletions() {\r\n // call lower-level replace on any active handler (w/ null). this gives\r\n // them a chance to dismiss any artifacts that were explicitly inserted\r\n // to trigger the handler (e.g. a cmd+/ for omni-insert)\r\n if (this.view) {\r\n const state = key.getState(this.view.state);\r\n if (state?.result && state.handler) {\r\n if (state.handler.replace) {\r\n await state.handler.replace(this.view, state.result.pos, null);\r\n } else if (state.handler.replacement) {\r\n state.handler.replacement(this.view.state.schema, null);\r\n }\r\n }\r\n }\r\n\r\n this.clearCompletions();\r\n }\r\n\r\n private clearCompletions() {\r\n this.setAllCompletions([], false, true);\r\n this.hideCompletionPopup();\r\n }\r\n\r\n private hideCompletionPopup() {\r\n if (this.completionPopup) {\r\n destroyCompletionPopup(this.completionPopup);\r\n this.completionPopup = null;\r\n }\r\n }\r\n\r\n private completionsActive() {\r\n return !!this.completionPopup;\r\n }\r\n\r\n private setAllCompletions(completions: unknown[], horizontal: boolean, resetSelection: boolean) {\r\n this.allCompletions = completions;\r\n this.setDisplayedCompletions(completions, horizontal, resetSelection);\r\n }\r\n\r\n private setDisplayedCompletions(completions: unknown[], horizontal: boolean, resetSelection: boolean) {\r\n this.completions = completions;\r\n this.horizontal = !!horizontal;\r\n\r\n // reset selection if requested or if the current index exceeds the # of completions\r\n if (resetSelection || this.selectedIndex > this.completions.length - 1) {\r\n this.selectedIndex = 0;\r\n }\r\n }\r\n\r\n private completionPageSize() {\r\n if (this.view) {\r\n const state = key.getState(this.view.state);\r\n return state?.handler?.view.maxVisible || kCompletionDefaultMaxVisible;\r\n } else {\r\n return kCompletionDefaultMaxVisible;\r\n }\r\n }\r\n}\r\n\r\n// extract the text before the cursor, dealing with block separators and\r\n// non-text leaf characters (this is based on code in prosemirror-inputrules)\r\nfunction completionTextBeforeCursor(selection: Selection, maxLength = 500) {\r\n const { $head } = selection;\r\n return $head.parent.textBetween(\r\n Math.max(0, $head.parentOffset - maxLength), // start\r\n $head.parentOffset, // end\r\n undefined, // block separator\r\n '\\ufffc', // leaf char\r\n );\r\n}\r\n","/*\r\n * spelling.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { MarkType, Schema, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { kCharClassNonWord, WordBreaker } from 'core';\r\n\r\nimport { EditorWordSource, EditorWordRange } from '../../api/spelling';\r\nimport { PandocMark, getMarkRange } from '../../api/mark';\r\n\r\nexport const beginDocPos = () => 1;\r\nexport const endDocPos = (doc: ProsemirrorNode) => doc.nodeSize - 2;\r\n\r\nexport function getWords(\r\n state: EditorState,\r\n start: number,\r\n end: number,\r\n wb: WordBreaker,\r\n excluded: MarkType[],\r\n): EditorWordSource {\r\n // provide defaults\r\n if (start === -1) {\r\n start = beginDocPos();\r\n }\r\n if (end === -1) {\r\n end = endDocPos(state.doc);\r\n }\r\n\r\n // enlarge range to begin/end\r\n const beginPos = findBeginWord(state, start, wb.classifyCharacter);\r\n const endPos = findEndWord(state, end, wb.classifyCharacter);\r\n\r\n const words: EditorWordRange[] = [];\r\n let currentPos = beginPos;\r\n while (currentPos <= endPos) {\r\n // advance until we find a word\r\n currentPos = advanceToWord(state, currentPos, wb.classifyCharacter);\r\n if (currentPos >= endPos) {\r\n break;\r\n }\r\n\r\n // find end of word\r\n const endWordPos = findEndWord(state, currentPos, wb.classifyCharacter);\r\n if (endWordPos === currentPos) {\r\n break;\r\n }\r\n\r\n // add word if it doesn't have an excluded type\r\n if (!excludeWord(state.doc, currentPos, endWordPos, excluded)) {\r\n const wordText = state.doc.textBetween(currentPos, endWordPos);\r\n words.push(\r\n ...wb.breakWords(wordText).map(wordRange => {\r\n return {\r\n start: currentPos + wordRange.start,\r\n end: currentPos + wordRange.end,\r\n };\r\n }),\r\n );\r\n }\r\n\r\n // next word\r\n currentPos = endWordPos;\r\n }\r\n\r\n // return iterator over word range\r\n return {\r\n hasNext: () => {\r\n return words.length > 0;\r\n },\r\n next: () => {\r\n if (words.length > 0) {\r\n return words.shift()!;\r\n } else {\r\n return null;\r\n }\r\n },\r\n };\r\n}\r\n\r\nfunction excludeWord(doc: ProsemirrorNode, from: number, to: number, excluded: MarkType[]) {\r\n // does it have one of our excluded mark types?\r\n if (excluded.some(markType => doc.rangeHasMark(from, to, markType))) {\r\n return true;\r\n }\r\n\r\n // is it in a code block\r\n const $from = doc.resolve(from);\r\n if ($from.parent.isBlock && $from.parent.type.spec.code) {\r\n return true;\r\n }\r\n\r\n // it is in a link mark where the link text is a url?\r\n const schema = doc.type.schema;\r\n if (schema.marks.link && doc.rangeHasMark(from, to, schema.marks.link)) {\r\n const range = getMarkRange(doc.resolve(from), schema.marks.link);\r\n if (range && /^[a-z]+:\\/\\/.*$/.test(doc.textBetween(range.from, range.to))) {\r\n return true;\r\n }\r\n }\r\n\r\n // don't exclude\r\n return false;\r\n}\r\n\r\nexport function advanceToWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\r\n while (pos < endDocPos(state.doc)) {\r\n const nextChar = charAt(state.doc, pos);\r\n if (classifier(nextChar) !== kCharClassNonWord) {\r\n break;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n return pos;\r\n}\r\n\r\nexport function findBeginWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\r\n // scan backwards until a non-word character is encountered\r\n while (pos >= beginDocPos()) {\r\n const prevChar = charAt(state.doc, pos - 1);\r\n if (classifier(prevChar) === kCharClassNonWord) {\r\n break;\r\n } else {\r\n pos--;\r\n }\r\n }\r\n // return the position\r\n return pos;\r\n}\r\n\r\nexport function findEndWord(state: EditorState, pos: number, classifier: (ch: number) => number) {\r\n // scan forwards until a non-word character is encountered\r\n while (pos < endDocPos(state.doc)) {\r\n const nextChar = charAt(state.doc, pos);\r\n if (classifier(nextChar) === kCharClassNonWord) {\r\n break;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n\r\n // return the position\r\n return pos;\r\n}\r\n\r\n// get the chracter code at the specified position, returning character code 32 (a space)\r\n// for begin/end of document, block boundaries, and non-text leaf nodes\r\nexport function charAt(doc: ProsemirrorNode, pos: number) {\r\n if (pos < beginDocPos() || pos >= endDocPos(doc)) {\r\n return 32; // space for doc boundary\r\n } else {\r\n return (doc.textBetween(pos, pos + 1, ' ', ' ') || ' ').charCodeAt(0);\r\n }\r\n}\r\n\r\nexport function excludedMarks(schema: Schema, marks: readonly PandocMark[]): MarkType[] {\r\n return marks.filter(mark => mark.noSpelling).map(mark => schema.marks[mark.name]);\r\n}\r\n\r\nexport function spellcheckerWord(word: string) {\r\n return word.replace(/’/g, \"'\");\r\n}\r\n","/*\r\n * spelling-doc.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView, DecorationSet, Decoration } from 'prosemirror-view';\r\nimport { TextSelection, Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { wordBreaker } from 'core';\r\n\r\nimport { PandocMark } from '../../api/mark';\r\nimport {\r\n EditorWordRange,\r\n EditorSpellingDoc,\r\n EditorWordSource,\r\n EditorAnchor,\r\n EditorRect,\r\n} from '../../api/spelling';\r\nimport { scrollIntoView } from '../../api/scroll';\r\n\r\nimport { excludedMarks, getWords, spellcheckerWord } from './spelling';\r\n\r\n// get the document interface required by interactive spellchecking\r\n\r\nexport function getSpellingDoc(\r\n view: EditorView,\r\n marks: readonly PandocMark[]\r\n): EditorSpellingDoc {\r\n // alias schema\r\n const schema = view.state.schema;\r\n\r\n // initialize marks we don't want to check\r\n const excluded = excludedMarks(schema, marks);\r\n\r\n // create word breaker\r\n const wb = wordBreaker();\r\n\r\n // check begin\r\n spellingDocPlugin(view.state).onCheckBegin();\r\n\r\n return {\r\n getWords: (start: number, end: number): EditorWordSource => {\r\n return getWords(view.state, start, end, wb, excluded);\r\n },\r\n\r\n createAnchor: (pos: number): EditorAnchor => {\r\n return spellingDocPlugin(view.state).createAnchor(pos);\r\n },\r\n\r\n shouldCheck: (): boolean => {\r\n return true;\r\n },\r\n\r\n setSelection: (wordRange: EditorWordRange) => {\r\n const tr = view.state.tr;\r\n tr.setSelection(TextSelection.create(tr.doc, wordRange.start, wordRange.end));\r\n view.dispatch(tr);\r\n },\r\n\r\n getText: (wordRange: EditorWordRange): string => {\r\n const word = view.state.doc.textBetween(wordRange.start, wordRange.end);\r\n return spellcheckerWord(word);\r\n },\r\n\r\n replaceSelection: (text: string) => {\r\n const tr = view.state.tr;\r\n const selectionMarks = tr.selection.$from.marks();\r\n tr.replaceSelectionWith(view.state.schema.text(text, selectionMarks), false);\r\n view.dispatch(tr);\r\n },\r\n\r\n getCursorPosition: (): number => {\r\n return view.state.selection.to;\r\n },\r\n\r\n getSelectionStart: (): number => {\r\n return view.state.selection.from;\r\n },\r\n\r\n getSelectionEnd: (): number => {\r\n return view.state.selection.to;\r\n },\r\n\r\n getCursorBounds: (): EditorRect => {\r\n const fromCoords = view.coordsAtPos(view.state.selection.from);\r\n const toCoords = view.coordsAtPos(view.state.selection.to);\r\n\r\n return {\r\n x: Math.min(fromCoords.left, toCoords.left),\r\n y: fromCoords.top,\r\n width: Math.abs(fromCoords.left - toCoords.left),\r\n height: toCoords.bottom - fromCoords.top,\r\n };\r\n },\r\n\r\n moveCursorNearTop: () => {\r\n scrollIntoView(view, view.state.selection.from, false, undefined, 100);\r\n },\r\n\r\n dispose: () => {\r\n spellingDocPlugin(view.state).onCheckEnd(view);\r\n },\r\n };\r\n}\r\n\r\n// companion plugin for SpellingDoc provided above (shows 'fake' selection during\r\n// interactive spell check dialog and maintains anchor position(s) across\r\n// transactions that occur while the dialog/doc is active)\r\n\r\nconst spellingDocKey = new PluginKey<DecorationSet>('spelling-doc-plugin');\r\n\r\nfunction spellingDocPlugin(state: EditorState) {\r\n return spellingDocKey.get(state) as SpellingDocPlugin;\r\n}\r\n\r\nexport class SpellingDocPlugin extends Plugin<DecorationSet> {\r\n private checking = false;\r\n private anchors: SpellingAnchor[] = [];\r\n\r\n constructor() {\r\n super({\r\n key: spellingDocKey,\r\n state: {\r\n init: () => {\r\n return DecorationSet.empty;\r\n },\r\n apply: (tr: Transaction) => {\r\n if (this.checking) {\r\n // map anchors\r\n this.anchors.forEach(anchor => {\r\n anchor.setPosition(tr.mapping.map(anchor.getPosition()));\r\n });\r\n\r\n // show selection\r\n if (!tr.selection.empty) {\r\n return DecorationSet.create(tr.doc, [\r\n Decoration.inline(tr.selection.from, tr.selection.to, { class: 'pm-selected-text' }),\r\n ]);\r\n }\r\n }\r\n\r\n return DecorationSet.empty;\r\n },\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return spellingDocKey.getState(state);\r\n },\r\n },\r\n });\r\n }\r\n\r\n public createAnchor(pos: number) {\r\n const anchor = new SpellingAnchor(pos);\r\n this.anchors.push(anchor);\r\n return anchor;\r\n }\r\n\r\n public onCheckBegin() {\r\n this.checking = true;\r\n }\r\n\r\n public onCheckEnd(view: EditorView) {\r\n this.checking = false;\r\n this.anchors = [];\r\n\r\n if (!view.state.selection.empty) {\r\n const tr = view.state.tr;\r\n setTextSelection(tr.selection.to)(tr);\r\n view.dispatch(tr);\r\n }\r\n }\r\n}\r\n\r\nclass SpellingAnchor implements EditorAnchor {\r\n private pos = 0;\r\n constructor(pos: number) {\r\n this.pos = pos;\r\n }\r\n public getPosition() {\r\n return this.pos;\r\n }\r\n public setPosition(pos: number) {\r\n this.pos = pos;\r\n }\r\n}\r\n\r\nconst extension = () => {\r\n return {\r\n plugins: () => {\r\n return [new SpellingDocPlugin()];\r\n },\r\n };\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * spelling-realtime.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, MarkType, ResolvedPos } from 'prosemirror-model';\r\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { DecorationSet, EditorView, Decoration, DecorationAttrs } from 'prosemirror-view';\r\nimport { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';\r\nimport { ChangeSet } from 'prosemirror-changeset';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { EditorMenuItem, EditorUISpelling } from 'editor-types';\r\n\r\nimport { FocusEvent } from '../../api/event-types';\r\nimport { PandocMark } from '../../api/mark';\r\nimport {\r\n EditorWordRange,\r\n} from '../../api/spelling';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { kAddToHistoryTransaction } from '../../api/transaction';\r\nimport { EditorUIPrefs } from '../../api/ui-types';\r\n\r\nimport { excludedMarks, getWords, spellcheckerWord, findBeginWord, findEndWord, charAt } from './spelling';\r\nimport { WordBreaker, kCharClassWord, wordBreaker } from 'core';\r\nimport { ContextMenuSource } from '../../api/menu';\r\n\r\nconst kUpdateSpellingTransaction = 'updateSpelling';\r\nconst kInvalidateSpellingWordTransaction = 'invalidateSpellingWord';\r\nconst kSpellingErrorClass = 'pm-spelling-error';\r\n\r\nconst realtimeSpellingKey = new PluginKey<DecorationSet>('spelling-realtime-plugin');\r\n\r\nexport function realtimeSpellingPlugin(\r\n schema: Schema,\r\n marks: readonly PandocMark[],\r\n spelling: EditorUISpelling,\r\n prefs: EditorUIPrefs,\r\n events: EditorEvents,\r\n) {\r\n return new RealtimeSpellingPlugin(excludedMarks(schema, marks), spelling, prefs, events);\r\n}\r\n\r\nexport function invalidateAllWords(view: EditorView) {\r\n updateSpelling(view);\r\n}\r\n\r\nexport function invalidateWord(view: EditorView, word: string) {\r\n const tr = view.state.tr;\r\n tr.setMeta(kInvalidateSpellingWordTransaction, word);\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n view.dispatch(tr);\r\n}\r\n\r\nclass RealtimeSpellingPlugin extends Plugin<DecorationSet> {\r\n // track whether we've ever had the focus (don't do any spelling operations until then)\r\n private hasBeenFocused = true;\r\n\r\n private view: EditorView | null = null;\r\n private readonly prefs: EditorUIPrefs;\r\n public static readonly wb = wordBreaker();\r\n\r\n constructor(excluded: MarkType[], spelling: EditorUISpelling, prefs: EditorUIPrefs, events: EditorEvents) { \r\n super({\r\n key: realtimeSpellingKey,\r\n view: (view: EditorView) => {\r\n this.view = view;\r\n return {};\r\n },\r\n state: {\r\n init: () => {\r\n return DecorationSet.empty;\r\n },\r\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\r\n // if we somehow manage to get focus w/o our FocusEvent (below) being called then also\r\n // flip the hasBeenFocused bit here\r\n if (this.view?.hasFocus()) {\r\n this.hasBeenFocused = true;\r\n }\r\n\r\n // don't continue if either realtime spelling is disabled or we have never been focused\r\n if (!this.prefs.realtimeSpelling() || !this.hasBeenFocused) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // alias wordbreaker\r\n const wb = RealtimeSpellingPlugin.wb;\r\n\r\n if (tr.getMeta(kUpdateSpellingTransaction)) {\r\n // explicit update request invalidates any existing decorations (this can happen when\r\n // we get focus for the very first time or when the main or secondary dictionaries change)\r\n return DecorationSet.create(newState.doc, spellingDecorations(newState, wb, spelling, excluded));\r\n } else if (tr.getMeta(kInvalidateSpellingWordTransaction)) {\r\n // for word invalidations we search through the decorations and remove words that match\r\n const word = tr.getMeta(kInvalidateSpellingWordTransaction) as string;\r\n\r\n // find decorations that have this word and remove them\r\n const wordDecos = old.find(undefined, undefined, spec => spec.word === word);\r\n\r\n // return decorators w/ those words removed\r\n return old.remove(wordDecos);\r\n } else if (tr.docChanged) {\r\n // perform an incremental update of spelling decorations (invalidate and re-scan\r\n // for decorations in changed ranges)\r\n\r\n // start w/ previous state\r\n let decos = old;\r\n\r\n // create change set from transaction\r\n let changeSet = ChangeSet.create(oldState.doc);\r\n changeSet = changeSet.addSteps(newState.doc, tr.mapping.maps, {});\r\n\r\n // collect ranges that had mark changes\r\n const markRanges: Array<{ from: number; to: number }> = [];\r\n for (const step of tr.steps) {\r\n if (step instanceof AddMarkStep || step instanceof RemoveMarkStep) {\r\n markRanges.push({ from: step.from, to: step.to });\r\n }\r\n }\r\n\r\n // remove ranges = mark ranges + deleted ranges\r\n const removeRanges = markRanges.concat(\r\n changeSet.changes.map(change => ({ from: change.fromA, to: change.toA })),\r\n );\r\n\r\n // remove decorations from deleted ranges (expanding ranges to word boundaries)\r\n for (const range of removeRanges) {\r\n const fromPos = findBeginWord(oldState, range.from, wb.classifyCharacter);\r\n const toPos = findEndWord(oldState, range.to, wb.classifyCharacter);\r\n decos = decos.remove(decos.find(fromPos, toPos));\r\n }\r\n\r\n // map decoration positions to new document\r\n decos = decos.map(tr.mapping, tr.doc);\r\n\r\n // add ranges = mark ranges + inserted ranges\r\n const addRanges = markRanges.concat(\r\n changeSet.changes.map(change => ({ from: change.fromB, to: change.toB })),\r\n );\r\n\r\n // scan inserted ranges for spelling decorations (don't need to find word boundaries\r\n // b/c spellingDecorations already does that)\r\n for (const range of addRanges) {\r\n decos = decos.add(\r\n tr.doc,\r\n // As part of rstudio moving away from typo this line of code was changed to the following:\r\n //\r\n // spellingDecorations(newState, wb, ui.spelling, excluded, false, range.from - 1, range.to)\r\n //\r\n // Relevant commits are here:\r\n // - https://github.com/rstudio/rstudio/commit/cee6c3e8181d3020b5a2eed8d1e1562caad9e8c5\r\n // - https://github.com/rstudio/rstudio/pull/9161\r\n // \r\n // I am not sure why the range.from - 1 was changed, and the flipping of true -> false\r\n // for excludeCursor makes truly realtime implementations show the currently edited\r\n // word as misspelled (rstudio evades this by doing async checks). I had to revert to the\r\n // previous behavior in order to get the library running against Typo in the browser\r\n // to work correctly.\r\n // \r\n spellingDecorations(newState, wb, spelling, excluded, true, range.from, range.to)\r\n );\r\n }\r\n\r\n // return decorators\r\n return decos;\r\n } else if (tr.selectionSet) {\r\n // if we had previously suppressed a decoration due to typing at the cursor, restore it\r\n // whenever the selection changes w/o the doc changing\r\n\r\n // start with previous state\r\n let decos = old;\r\n\r\n // find any special 'at cursor' errors\r\n const cursorDecos = decos.find(undefined, undefined, spec => !!spec.cursor);\r\n if (cursorDecos.length) {\r\n // there will only be one cursor, capture it's position then remove it\r\n const word = cursorDecos[0].spec.word as string;\r\n const { from, to } = cursorDecos[0];\r\n decos = decos.remove(cursorDecos);\r\n\r\n // add it back in as a real spelling error\r\n decos = decos.add(tr.doc, [Decoration.inline(from, to, { class: kSpellingErrorClass }, { word })]);\r\n }\r\n\r\n // return decorators\r\n return decos;\r\n } else {\r\n // no content or selection change, return old w/o mapping\r\n return old;\r\n }\r\n },\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return realtimeSpellingKey.getState(state);\r\n }\r\n },\r\n });\r\n\r\n // save reference to prefs\r\n this.prefs = prefs;\r\n\r\n // trigger update on first focus\r\n const focusUnsubscribe = events.subscribe(FocusEvent, () => {\r\n if (this.view) {\r\n focusUnsubscribe();\r\n this.hasBeenFocused = true;\r\n\r\n // delayed update callback (checks for still connected)\r\n const v = this.view;\r\n const doUpdate = () => {\r\n if (v.dom?.isConnected) {\r\n updateSpelling(v);\r\n }\r\n };\r\n\r\n // update (bounced out of focus event tick so that it doesn't\r\n // interfere with normal editor focus management)\r\n setTimeout(doUpdate, 100);\r\n\r\n // call a second time as no words will be cached initially, this simplifies the\r\n // need for threading a callback through the entire plugin system\r\n setTimeout(doUpdate, 5000);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction spellingDecorations(\r\n state: EditorState,\r\n wb: WordBreaker,\r\n spelling: EditorUISpelling,\r\n excluded: MarkType[],\r\n excludeCursor = false,\r\n from = -1,\r\n to = -1,\r\n): Decoration[] {\r\n\r\n // a map of wordText -> [wordRange...]\r\n const rangeMap = new Map<string, EditorWordRange[]>();\r\n\r\n // break words\r\n const words = getWords(state, from, to, wb, excluded);\r\n\r\n // spell check and return decorations for misspellings\r\n const decorations: Decoration[] = [];\r\n\r\n // words to pass to the spellchecker\r\n const wordsToCheck: string[] = [];\r\n\r\n while (words.hasNext()) {\r\n const word = words.next()!;\r\n const wordText = state.doc.textBetween(word.start, word.end);\r\n\r\n const ranges = rangeMap.get(wordText) || [];\r\n ranges.push(word);\r\n rangeMap.set(wordText, ranges);\r\n\r\n wordsToCheck.push(spellcheckerWord(wordText));\r\n }\r\n\r\n const incorrectWords: string[] = spelling.checkWords(wordsToCheck);\r\n\r\n for (const incorrectWord of incorrectWords) {\r\n const ranges: EditorWordRange[] | undefined = rangeMap.get(incorrectWord);\r\n\r\n if (ranges) {\r\n for (const range of ranges) {\r\n const attrs: DecorationAttrs = {};\r\n const spec: Record<string,unknown> = {\r\n word: incorrectWord,\r\n };\r\n if (excludeCursor && state.selection.head > range.start && state.selection.head <= range.end) {\r\n spec.cursor = true;\r\n } else {\r\n attrs.class = kSpellingErrorClass;\r\n }\r\n decorations.push(Decoration.inline(range.start, range.end, attrs, spec));\r\n }\r\n }\r\n }\r\n\r\n return decorations;\r\n}\r\n\r\n\r\nexport function spellingContextMenuHandler(spelling: EditorUISpelling, t: (text: string) => string) {\r\n \r\n return (view: EditorView, $pos: ResolvedPos) : (ContextMenuSource | null) => {\r\n\r\n // word breaker\r\n const wb = RealtimeSpellingPlugin.wb;\r\n\r\n // helper to create a menu action\r\n const menuAction = (text: string, action: VoidFunction) => {\r\n return {\r\n text,\r\n exec: () => {\r\n action();\r\n view.focus();\r\n },\r\n };\r\n };\r\n\r\n // alias schema\r\n const schema = view.state.schema;\r\n\r\n // find the spelling decoration at this position (if any)\r\n const deco = realtimeSpellingKey.getState(view.state)!.find($pos.pos, $pos.pos);\r\n if (deco.length) {\r\n return { items: () => new Promise<EditorMenuItem[]>(resolve => {\r\n\r\n const { from, to } = deco[0];\r\n const word = spellcheckerWord(view.state.doc.textBetween(from, to));\r\n const kMaxSuggetions = 5;\r\n const menuItems: EditorMenuItem[] = [];\r\n spelling.suggestionList(word, (suggestions: string[]): void => {\r\n // create menu w/ suggestions\r\n menuItems.push(...suggestions.slice(0, kMaxSuggetions).map(suggestion => {\r\n return {\r\n text: suggestion,\r\n exec: () => {\r\n const tr = view.state.tr;\r\n tr.setSelection(TextSelection.create(tr.doc, from, to));\r\n const marks = tr.selection.$from.marks();\r\n tr.replaceSelectionWith(schema.text(suggestion, marks), false);\r\n setTextSelection(from + suggestion.length)(tr);\r\n view.dispatch(tr);\r\n view.focus();\r\n },\r\n };\r\n }));\r\n if (menuItems.length) {\r\n menuItems.push({ separator: true });\r\n }\r\n \r\n menuItems.push(menuAction(t('Ignore All'), () => spelling.ignoreWord(word)));\r\n menuItems.push({ separator: true });\r\n menuItems.push(\r\n menuAction(t('Add to Dictionary'), () => spelling.addToDictionary(word)),\r\n );\r\n\r\n resolve(menuItems);\r\n });\r\n })};\r\n } \r\n\r\n // find the word at this position and see if it's ignored. if so provide an unignore context menu\r\n const classify = wb.classifyCharacter;\r\n const ch = charAt(view.state.doc, $pos.pos);\r\n if (classify(ch) === kCharClassWord) {\r\n const from = findBeginWord(view.state, $pos.pos, classify);\r\n const to = findEndWord(view.state, $pos.pos, classify);\r\n const word = spellcheckerWord(view.state.doc.textBetween(from, to));\r\n if (spelling.isWordIgnored(word)) {\r\n return { items: async () => [\r\n menuAction(`${t('Unignore')} '${word}'`, () => spelling.unignoreWord(word)),\r\n ]};\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n\r\n\r\nfunction updateSpelling(view: EditorView) {\r\n const tr = view.state.tr;\r\n tr.setMeta(kUpdateSpellingTransaction, true);\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n view.dispatch(tr);\r\n}\r\n","// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\nmodule.exports = {\n SEMVER_SPEC_VERSION,\n MAX_LENGTH,\n MAX_SAFE_INTEGER,\n MAX_SAFE_COMPONENT_LENGTH,\n}\n","const debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst src = exports.src = []\nconst t = exports.t = {}\nlet R = 0\n\nconst createToken = (name, value, isGlobal) => {\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*')\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]\n}|${src[t.NONNUMERICIDENTIFIER]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCE', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","// parse out just the options we care about so we always get a consistent\n// obj with keys in a consistent order.\nconst opts = ['includePrerelease', 'loose', 'rtl']\nconst parseOptions = options =>\n !options ? {}\n : typeof options !== 'object' ? { loose: true }\n : opts.filter(k => options[k]).reduce((o, k) => {\n o[k] = true\n return o\n }, {})\nmodule.exports = parseOptions\n","const numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","const debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.format()\n this.raw = this.version\n return this\n }\n}\n\nmodule.exports = SemVer\n","const { MAX_LENGTH } = require('../internal/constants')\nconst { re, t } = require('../internal/re')\nconst SemVer = require('../classes/semver')\n\nconst parseOptions = require('../internal/parse-options')\nconst parse = (version, options) => {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n const r = options.loose ? re[t.LOOSE] : re[t.FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nmodule.exports = parse\n","const parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","const parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","const SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier) => {\n if (typeof (options) === 'string') {\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","const SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","const compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","const parse = require('./parse')\nconst eq = require('./eq')\n\nconst diff = (version1, version2) => {\n if (eq(version1, version2)) {\n return null\n } else {\n const v1 = parse(version1)\n const v2 = parse(version2)\n const hasPre = v1.prerelease.length || v2.prerelease.length\n const prefix = hasPre ? 'pre' : ''\n const defaultResult = hasPre ? 'prerelease' : ''\n for (const key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\nmodule.exports = diff\n","const SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","const SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","const SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","const parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","const compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","const compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","const SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","const compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","const compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","const compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","const compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","const compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","const compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","const compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","const eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","const SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n let next\n while ((next = re[t.COERCERTL].exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n re[t.COERCERTL].lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)\n}\nmodule.exports = coerce\n","'use strict'\nmodule.exports = function (Yallist) {\n Yallist.prototype[Symbol.iterator] = function* () {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value\n }\n }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n var self = this\n if (!(self instanceof Yallist)) {\n self = new Yallist()\n }\n\n self.tail = null\n self.head = null\n self.length = 0\n\n if (list && typeof list.forEach === 'function') {\n list.forEach(function (item) {\n self.push(item)\n })\n } else if (arguments.length > 0) {\n for (var i = 0, l = arguments.length; i < l; i++) {\n self.push(arguments[i])\n }\n }\n\n return self\n}\n\nYallist.prototype.removeNode = function (node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list')\n }\n\n var next = node.next\n var prev = node.prev\n\n if (next) {\n next.prev = prev\n }\n\n if (prev) {\n prev.next = next\n }\n\n if (node === this.head) {\n this.head = next\n }\n if (node === this.tail) {\n this.tail = prev\n }\n\n node.list.length--\n node.next = null\n node.prev = null\n node.list = null\n\n return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n if (node === this.head) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var head = this.head\n node.list = this\n node.next = head\n if (head) {\n head.prev = node\n }\n\n this.head = node\n if (!this.tail) {\n this.tail = node\n }\n this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n if (node === this.tail) {\n return\n }\n\n if (node.list) {\n node.list.removeNode(node)\n }\n\n var tail = this.tail\n node.list = this\n node.prev = tail\n if (tail) {\n tail.next = node\n }\n\n this.tail = node\n if (!this.head) {\n this.head = node\n }\n this.length++\n}\n\nYallist.prototype.push = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n push(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.unshift = function () {\n for (var i = 0, l = arguments.length; i < l; i++) {\n unshift(this, arguments[i])\n }\n return this.length\n}\n\nYallist.prototype.pop = function () {\n if (!this.tail) {\n return undefined\n }\n\n var res = this.tail.value\n this.tail = this.tail.prev\n if (this.tail) {\n this.tail.next = null\n } else {\n this.head = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.shift = function () {\n if (!this.head) {\n return undefined\n }\n\n var res = this.head.value\n this.head = this.head.next\n if (this.head) {\n this.head.prev = null\n } else {\n this.tail = null\n }\n this.length--\n return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.head, i = 0; walker !== null; i++) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.next\n }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n thisp = thisp || this\n for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n fn.call(thisp, walker.value, i, this)\n walker = walker.prev\n }\n}\n\nYallist.prototype.get = function (n) {\n for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.next\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.getReverse = function (n) {\n for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev\n }\n if (i === n && walker !== null) {\n return walker.value\n }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.head; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.next\n }\n return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n thisp = thisp || this\n var res = new Yallist()\n for (var walker = this.tail; walker !== null;) {\n res.push(fn.call(thisp, walker.value, this))\n walker = walker.prev\n }\n return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n var acc\n var walker = this.head\n if (arguments.length > 1) {\n acc = initial\n } else if (this.head) {\n walker = this.head.next\n acc = this.head.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = 0; walker !== null; i++) {\n acc = fn(acc, walker.value, i)\n walker = walker.next\n }\n\n return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n var acc\n var walker = this.tail\n if (arguments.length > 1) {\n acc = initial\n } else if (this.tail) {\n walker = this.tail.prev\n acc = this.tail.value\n } else {\n throw new TypeError('Reduce of empty list with no initial value')\n }\n\n for (var i = this.length - 1; walker !== null; i--) {\n acc = fn(acc, walker.value, i)\n walker = walker.prev\n }\n\n return acc\n}\n\nYallist.prototype.toArray = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.head; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.next\n }\n return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n var arr = new Array(this.length)\n for (var i = 0, walker = this.tail; walker !== null; i++) {\n arr[i] = walker.value\n walker = walker.prev\n }\n return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n walker = walker.next\n }\n for (; walker !== null && i < to; i++, walker = walker.next) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n to = to || this.length\n if (to < 0) {\n to += this.length\n }\n from = from || 0\n if (from < 0) {\n from += this.length\n }\n var ret = new Yallist()\n if (to < from || to < 0) {\n return ret\n }\n if (from < 0) {\n from = 0\n }\n if (to > this.length) {\n to = this.length\n }\n for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n walker = walker.prev\n }\n for (; walker !== null && i > from; i--, walker = walker.prev) {\n ret.push(walker.value)\n }\n return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount, ...nodes) {\n if (start > this.length) {\n start = this.length - 1\n }\n if (start < 0) {\n start = this.length + start;\n }\n\n for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n walker = walker.next\n }\n\n var ret = []\n for (var i = 0; walker && i < deleteCount; i++) {\n ret.push(walker.value)\n walker = this.removeNode(walker)\n }\n if (walker === null) {\n walker = this.tail\n }\n\n if (walker !== this.head && walker !== this.tail) {\n walker = walker.prev\n }\n\n for (var i = 0; i < nodes.length; i++) {\n walker = insert(this, walker, nodes[i])\n }\n return ret;\n}\n\nYallist.prototype.reverse = function () {\n var head = this.head\n var tail = this.tail\n for (var walker = head; walker !== null; walker = walker.prev) {\n var p = walker.prev\n walker.prev = walker.next\n walker.next = p\n }\n this.head = tail\n this.tail = head\n return this\n}\n\nfunction insert (self, node, value) {\n var inserted = node === self.head ?\n new Node(value, null, node, self) :\n new Node(value, node, node.next, self)\n\n if (inserted.next === null) {\n self.tail = inserted\n }\n if (inserted.prev === null) {\n self.head = inserted\n }\n\n self.length++\n\n return inserted\n}\n\nfunction push (self, item) {\n self.tail = new Node(item, self.tail, null, self)\n if (!self.head) {\n self.head = self.tail\n }\n self.length++\n}\n\nfunction unshift (self, item) {\n self.head = new Node(item, null, self.head, self)\n if (!self.tail) {\n self.tail = self.head\n }\n self.length++\n}\n\nfunction Node (value, prev, next, list) {\n if (!(this instanceof Node)) {\n return new Node(value, prev, next, list)\n }\n\n this.list = list\n this.value = value\n\n if (prev) {\n prev.next = this\n this.prev = prev\n } else {\n this.prev = null\n }\n\n if (next) {\n next.prev = this\n this.next = next\n } else {\n this.next = null\n }\n}\n\ntry {\n // add if support for Symbol.iterator is present\n require('./iterator.js')(Yallist)\n} catch (er) {}\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest. the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node. This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n constructor (options) {\n if (typeof options === 'number')\n options = { max: options }\n\n if (!options)\n options = {}\n\n if (options.max && (typeof options.max !== 'number' || options.max < 0))\n throw new TypeError('max must be a non-negative number')\n // Kind of weird to have a default max of Infinity, but oh well.\n const max = this[MAX] = options.max || Infinity\n\n const lc = options.length || naiveLength\n this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n this[ALLOW_STALE] = options.stale || false\n if (options.maxAge && typeof options.maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n this[MAX_AGE] = options.maxAge || 0\n this[DISPOSE] = options.dispose\n this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n this.reset()\n }\n\n // resize the cache when the max changes.\n set max (mL) {\n if (typeof mL !== 'number' || mL < 0)\n throw new TypeError('max must be a non-negative number')\n\n this[MAX] = mL || Infinity\n trim(this)\n }\n get max () {\n return this[MAX]\n }\n\n set allowStale (allowStale) {\n this[ALLOW_STALE] = !!allowStale\n }\n get allowStale () {\n return this[ALLOW_STALE]\n }\n\n set maxAge (mA) {\n if (typeof mA !== 'number')\n throw new TypeError('maxAge must be a non-negative number')\n\n this[MAX_AGE] = mA\n trim(this)\n }\n get maxAge () {\n return this[MAX_AGE]\n }\n\n // resize the cache when the lengthCalculator changes.\n set lengthCalculator (lC) {\n if (typeof lC !== 'function')\n lC = naiveLength\n\n if (lC !== this[LENGTH_CALCULATOR]) {\n this[LENGTH_CALCULATOR] = lC\n this[LENGTH] = 0\n this[LRU_LIST].forEach(hit => {\n hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n this[LENGTH] += hit.length\n })\n }\n trim(this)\n }\n get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n get length () { return this[LENGTH] }\n get itemCount () { return this[LRU_LIST].length }\n\n rforEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].tail; walker !== null;) {\n const prev = walker.prev\n forEachStep(this, fn, walker, thisp)\n walker = prev\n }\n }\n\n forEach (fn, thisp) {\n thisp = thisp || this\n for (let walker = this[LRU_LIST].head; walker !== null;) {\n const next = walker.next\n forEachStep(this, fn, walker, thisp)\n walker = next\n }\n }\n\n keys () {\n return this[LRU_LIST].toArray().map(k => k.key)\n }\n\n values () {\n return this[LRU_LIST].toArray().map(k => k.value)\n }\n\n reset () {\n if (this[DISPOSE] &&\n this[LRU_LIST] &&\n this[LRU_LIST].length) {\n this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n }\n\n this[CACHE] = new Map() // hash of items by key\n this[LRU_LIST] = new Yallist() // list of items in order of use recency\n this[LENGTH] = 0 // length of items in the list\n }\n\n dump () {\n return this[LRU_LIST].map(hit =>\n isStale(this, hit) ? false : {\n k: hit.key,\n v: hit.value,\n e: hit.now + (hit.maxAge || 0)\n }).toArray().filter(h => h)\n }\n\n dumpLru () {\n return this[LRU_LIST]\n }\n\n set (key, value, maxAge) {\n maxAge = maxAge || this[MAX_AGE]\n\n if (maxAge && typeof maxAge !== 'number')\n throw new TypeError('maxAge must be a number')\n\n const now = maxAge ? Date.now() : 0\n const len = this[LENGTH_CALCULATOR](value, key)\n\n if (this[CACHE].has(key)) {\n if (len > this[MAX]) {\n del(this, this[CACHE].get(key))\n return false\n }\n\n const node = this[CACHE].get(key)\n const item = node.value\n\n // dispose of the old one before overwriting\n // split out into 2 ifs for better coverage tracking\n if (this[DISPOSE]) {\n if (!this[NO_DISPOSE_ON_SET])\n this[DISPOSE](key, item.value)\n }\n\n item.now = now\n item.maxAge = maxAge\n item.value = value\n this[LENGTH] += len - item.length\n item.length = len\n this.get(key)\n trim(this)\n return true\n }\n\n const hit = new Entry(key, value, len, now, maxAge)\n\n // oversized objects fall out of cache automatically.\n if (hit.length > this[MAX]) {\n if (this[DISPOSE])\n this[DISPOSE](key, value)\n\n return false\n }\n\n this[LENGTH] += hit.length\n this[LRU_LIST].unshift(hit)\n this[CACHE].set(key, this[LRU_LIST].head)\n trim(this)\n return true\n }\n\n has (key) {\n if (!this[CACHE].has(key)) return false\n const hit = this[CACHE].get(key).value\n return !isStale(this, hit)\n }\n\n get (key) {\n return get(this, key, true)\n }\n\n peek (key) {\n return get(this, key, false)\n }\n\n pop () {\n const node = this[LRU_LIST].tail\n if (!node)\n return null\n\n del(this, node)\n return node.value\n }\n\n del (key) {\n del(this, this[CACHE].get(key))\n }\n\n load (arr) {\n // reset the cache\n this.reset()\n\n const now = Date.now()\n // A previous serialized cache has the most recent items first\n for (let l = arr.length - 1; l >= 0; l--) {\n const hit = arr[l]\n const expiresAt = hit.e || 0\n if (expiresAt === 0)\n // the item was created without expiration in a non aged cache\n this.set(hit.k, hit.v)\n else {\n const maxAge = expiresAt - now\n // dont add already expired items\n if (maxAge > 0) {\n this.set(hit.k, hit.v, maxAge)\n }\n }\n }\n }\n\n prune () {\n this[CACHE].forEach((value, key) => get(this, key, false))\n }\n}\n\nconst get = (self, key, doUse) => {\n const node = self[CACHE].get(key)\n if (node) {\n const hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n return undefined\n } else {\n if (doUse) {\n if (self[UPDATE_AGE_ON_GET])\n node.value.now = Date.now()\n self[LRU_LIST].unshiftNode(node)\n }\n }\n return hit.value\n }\n}\n\nconst isStale = (self, hit) => {\n if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n return false\n\n const diff = Date.now() - hit.now\n return hit.maxAge ? diff > hit.maxAge\n : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n if (self[LENGTH] > self[MAX]) {\n for (let walker = self[LRU_LIST].tail;\n self[LENGTH] > self[MAX] && walker !== null;) {\n // We know that we're about to delete this one, and also\n // what the next least recently used key will be, so just\n // go ahead and set it now.\n const prev = walker.prev\n del(self, walker)\n walker = prev\n }\n }\n}\n\nconst del = (self, node) => {\n if (node) {\n const hit = node.value\n if (self[DISPOSE])\n self[DISPOSE](hit.key, hit.value)\n\n self[LENGTH] -= hit.length\n self[CACHE].delete(hit.key)\n self[LRU_LIST].removeNode(node)\n }\n}\n\nclass Entry {\n constructor (key, value, length, now, maxAge) {\n this.key = key\n this.value = value\n this.length = length\n this.now = now\n this.maxAge = maxAge || 0\n }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n let hit = node.value\n if (isStale(self, hit)) {\n del(self, node)\n if (!self[ALLOW_STALE])\n hit = undefined\n }\n if (hit)\n fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.format()\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${range}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.format()\n }\n\n format () {\n this.range = this.set\n .map((comps) => {\n return comps.join(' ').trim()\n })\n .join('||')\n .trim()\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n range = range.trim()\n\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts = Object.keys(this.options).join(',')\n const memoKey = `parseRange:${memoOpts}:${range}`\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\nmodule.exports = Range\n\nconst LRU = require('lru-cache')\nconst cache = new LRU({ max: 1000 })\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) =>\n comp.trim().split(/\\s+/).map((c) => {\n return replaceTilde(c, options)\n }).join(' ')\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) =>\n comp.trim().split(/\\s+/).map((c) => {\n return replaceCaret(c, options)\n }).join(' ')\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map((c) => {\n return replaceXRange(c, options)\n }).join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp.trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return (`${from} ${to}`).trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","const ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false,\n }\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n const sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n const sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n const sameSemVer = this.semver.version === comp.semver.version\n const differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n const oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<')\n const oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>')\n\n return (\n sameDirectionIncreasing ||\n sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan ||\n oppositeDirectionsGreaterThan\n )\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","const Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","const Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","const SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","const Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","const SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","const outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","const Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\nmodule.exports = intersects\n","// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","const Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = [new Comparator('>=0.0.0-0')]\n } else {\n sub = [new Comparator('>=0.0.0')]\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = [new Comparator('>=0.0.0')]\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","/*\r\n * base_64.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// btoa and atob don't handle unicode strings, see\r\n// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa#Unicode_strings\r\n\r\n// these functions implement the suggested workaround ()\r\n\r\nexport function base64Encode(text: string) {\r\n const binary = toBinary(text);\r\n return window.btoa(binary);\r\n}\r\n\r\nexport function base64Decode(encoded: string) {\r\n const decoded = atob(encoded);\r\n return fromBinary(decoded);\r\n}\r\n\r\n// convert a Unicode string to a string in which each 16-bit unit occupies only one byte\r\nfunction toBinary(text: string) {\r\n const codeUnits = new Uint16Array(text.length);\r\n for (let i = 0; i < codeUnits.length; i++) {\r\n codeUnits[i] = text.charCodeAt(i);\r\n }\r\n const charCodes = Array.from(new Uint8Array(codeUnits.buffer)).map(code => String.fromCharCode(code));\r\n return charCodes.join('');\r\n}\r\n\r\n// reverse the conversion\r\nfunction fromBinary(binary: string) {\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < bytes.length; i++) {\r\n bytes[i] = binary.charCodeAt(i);\r\n }\r\n const charCodes = Array.from(new Uint16Array(bytes.buffer)).map(code => String.fromCharCode(code));\r\n return charCodes.join('');\r\n}\r\n","/*\r\n * pandoc_capsule.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\n\r\nimport { base64Encode, base64Decode } from './base64';\r\n\r\nimport { PandocToken, ProsemirrorWriter, mapTokens, PandocTokenType } from './pandoc';\r\n\r\n// constants used for creating/consuming capsules\r\nconst kFieldDelimiter = '\\n';\r\nconst kValueDelimiter = ':';\r\nconst kTypeField = 'type';\r\nconst kPositionField = 'position';\r\nconst kPrefixField = 'prefix';\r\nconst kSourceField = 'source';\r\nconst kSuffixField = 'suffix';\r\nconst kBlockCapsuleSentinel = '31B8E172-B470-440E-83D8-E6B185028602'.toLowerCase();\r\n\r\n// block capsule\r\nexport interface PandocBlockCapsule {\r\n type: string;\r\n position: number;\r\n prefix: string;\r\n source: string;\r\n suffix: string;\r\n}\r\n\r\n// preserve block source code through markdown parsing (e.g. for yaml metadata or rmd chunks).\r\n// block capsules remove markdown from the document before pandoc parses it (placing it into\r\n// a base64 encoded 'capsule'), then unwraps the capsule from the AST. All of this is done\r\n// by the function in this interface.\r\nexport interface PandocBlockCapsuleFilter {\r\n // unique type id for this capsule\r\n type: string;\r\n\r\n // regex that matches a prefix (match[1]), the source to preserve (match[2]), and a suffix (match[3])\r\n // we need the prefix/suffix for the cases where the preserved source needs to be put back exactly\r\n // where it came from (e.g. in a multi-line html comment). we also need it to fixup indentation in\r\n // cases where capsules are unwrapped within a code block or raw block. the prefix and suffix\r\n // must begin and end (respectively) with newlines, and consist entirely of whitespace (e.g. leading\r\n // space for indented block or incidental whitespace after block delimiter)\r\n match: RegExp;\r\n\r\n // optional seconary filter expression (applied to a successful match to ensure\r\n // that matching wasn't overly greedy)\r\n discard?: RegExp;\r\n\r\n // custom function for pulling out the 3 parts from a match (defaults to p1,p2,p3)\r\n extract?: (\r\n match: string,\r\n p1: string,\r\n p2: string,\r\n p3: string,\r\n p4: string,\r\n ) => { prefix: string; source: string; suffix: string };\r\n\r\n // provide a (text) envelope around the capsule, e.g.\r\n // - newlines to ensure that yaml is parsed as a standalone paragraph;\r\n // - backticks to ensure an Rmd is structurally parsed by pandoc as a codeblock\r\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) => string;\r\n\r\n // examine a piece of text from within the pandoc ast and, if approproate, substitute any\r\n // capsules of my type for the original text (otherwise just return the passed string).\r\n // this method will generally use encodedBlockCapsuleRegex to create a regex to search\r\n // with, then upon finding a capsule, will unpack it with parsePandocBlockCapsule, compare\r\n // the type against our own type, and in the case they match do the substitution.\r\n handleText: (text: string, tok: PandocToken) => string;\r\n\r\n // do you want to handle this token as a capsule object? if so return the capsule text\r\n // (only the filter will know how to extract it from a pandoc token b/c it knows\r\n // where it was parsed from and what happened in the 'enclose' method)\r\n handleToken: (tok: PandocToken) => string | null;\r\n\r\n // write a capsule as a pandoc node\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => void;\r\n}\r\n\r\n// transform the passed markdown to include base64 encoded block capsules as specified by the\r\n// provided capsule filter. capsules are used to hoist block types that we don't want pandoc\r\n// to see (e.g. yaml metadata or Rmd chunks) out of the markdown, only to be re-inserted\r\n// after pandoc has yielded an ast. block capsules are a single base64 encoded pieced of\r\n// text that include the original content, the matched prefix and suffix, and a type\r\n// identifier for orchestrating the unpacking.\r\nexport function pandocMarkdownWithBlockCapsules(\r\n original: string,\r\n markdown: string,\r\n capsuleFilter: PandocBlockCapsuleFilter,\r\n) {\r\n // default extractor\r\n const defaultExtractor = (_match: string, p1: string, p2: string, p3: string) => {\r\n return {\r\n prefix: p1,\r\n source: p2,\r\n suffix: p3,\r\n };\r\n };\r\n\r\n // find the original position of all the matches\r\n const positions: number[] = [];\r\n let match = capsuleFilter.match.exec(original);\r\n while (match != null) {\r\n positions.push(match.index);\r\n match = capsuleFilter.match.exec(original);\r\n }\r\n\r\n // reset capsule filter match index\r\n capsuleFilter.match.lastIndex = 0;\r\n\r\n // replace all w/ source preservation capsules\r\n return markdown.replace(capsuleFilter.match, (match: string, p1: string, p2: string, p3: string, p4: string) => {\r\n // read the original position of the match\r\n let position = 0;\r\n const originalPos = positions.shift();\r\n if (originalPos) {\r\n position = originalPos;\r\n }\r\n\r\n // if the capsuleFilter has a discard expression then check it\r\n if (capsuleFilter.discard && !!match.match(capsuleFilter.discard)) {\r\n return match;\r\n }\r\n\r\n // extract matches\r\n const extract = capsuleFilter.extract || defaultExtractor;\r\n const { prefix, source, suffix } = extract(match, p1, p2, p3, p4);\r\n\r\n // make the capsule\r\n const capsule: PandocBlockCapsule = {\r\n [kTypeField]: capsuleFilter.type,\r\n [kPositionField]: position,\r\n [kPrefixField]: prefix,\r\n [kSourceField]: source,\r\n [kSuffixField]: suffix,\r\n };\r\n\r\n // construct a field\r\n const field = (name: string, value: string) => `${name}${kValueDelimiter}${base64Encode(value)}`;\r\n\r\n // construct a record\r\n const record =\r\n field(kTypeField, capsule.type) +\r\n kFieldDelimiter +\r\n field(kPositionField, capsule.position.toString()) +\r\n kFieldDelimiter +\r\n field(kPrefixField, capsule.prefix) +\r\n kFieldDelimiter +\r\n field(kSourceField, capsule.source) +\r\n kFieldDelimiter +\r\n field(kSuffixField, capsule.suffix);\r\n\r\n // now base64 encode the entire record (so it can masquerade as a paragraph)\r\n const encodedRecord = base64Encode(record);\r\n\r\n // return capsule, which is:\r\n // - a base64 encoded record surrounded with a sentinel value\r\n // - enclosed in a filter specific envelope (used to influence pandoc parsing),\r\n // - surrounded by the original prefix and suffix\r\n return (\r\n prefix +\r\n capsuleFilter.enclose(\r\n `${kBlockCapsuleSentinel}${kValueDelimiter}${encodedRecord}${kValueDelimiter}${kBlockCapsuleSentinel}`,\r\n capsule,\r\n ) +\r\n suffix\r\n );\r\n });\r\n}\r\n\r\n// block capsules can also end up not as block tokens, but rather as text within another\r\n// token (e.g. within a backtick code block or raw_block). this function takes a set\r\n// of pandoc tokens and recursively converts block capsules that aren't of type\r\n// PandocTokenType.Str (which is what we'd see in a paragraph) into their original form\r\nexport function resolvePandocBlockCapsuleText(\r\n tokens: PandocToken[],\r\n filters: readonly PandocBlockCapsuleFilter[],\r\n): PandocToken[] {\r\n // process all tokens\r\n return mapTokens(tokens, token => {\r\n // look for non-string pandoc tokens\r\n if (token.t !== PandocTokenType.Str && token.c) {\r\n if (typeof token.c === 'string') {\r\n token.c = decodeBlockCapsuleText(token.c, token, filters);\r\n } else if (Array.isArray(token.c)) {\r\n const children = token.c.length;\r\n for (let i = 0; i < children; i++) {\r\n if (typeof token.c[i] === 'string') {\r\n token.c[i] = decodeBlockCapsuleText(token.c[i], token, filters);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return token;\r\n });\r\n}\r\n\r\n// decode the text capsule by running all of the filters (as there could be nesting)\r\nexport function decodeBlockCapsuleText(text: string, tok: PandocToken, filters: readonly PandocBlockCapsuleFilter[]) {\r\n filters.forEach(filter => {\r\n text = filter.handleText(text, tok);\r\n });\r\n return text;\r\n}\r\n\r\nexport function blockCapsuleTextHandler(type: string, pattern: RegExp, textFilter?: (text: string) => string) {\r\n return (text: string, tok: PandocToken): string => {\r\n // if this is a code block or raw block then we need to strip the prefix\r\n // (b/c it could in a blockquote or indented in a list)\r\n const stripPrefix = tok.t === PandocTokenType.CodeBlock || tok.t === PandocTokenType.RawBlock;\r\n\r\n // replace text\r\n return text.replace(pattern, match => {\r\n const capsuleText = textFilter ? textFilter(match) : match;\r\n const capsule = parsePandocBlockCapsule(capsuleText);\r\n if (capsule.type === type) {\r\n if (stripPrefix) {\r\n return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\r\n } else {\r\n return capsule.source;\r\n }\r\n } else {\r\n return match;\r\n }\r\n });\r\n };\r\n}\r\n\r\n// token handler that looks for a paragraph token consisting entirely of a block capsule of our type.\r\n// if we find that then return the block capsule text\r\nexport function blockCapsuleParagraphTokenHandler(type: string) {\r\n const tokenRegex = encodedBlockCapsuleRegex('^', '$');\r\n return (tok: PandocToken) => {\r\n if (tok.t === PandocTokenType.Para) {\r\n if (tok.c.length === 1 && tok.c[0].t === PandocTokenType.Str) {\r\n const text = tok.c[0].c as string;\r\n const match = text.match(tokenRegex);\r\n if (match) {\r\n const capsuleRecord = parsePandocBlockCapsule(match[0]);\r\n if (capsuleRecord.type === type) {\r\n return match[0];\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\n// create a regex that can be used to match a block capsule\r\nexport function encodedBlockCapsuleRegex(prefix?: string, suffix?: string, flags?: string) {\r\n return new RegExp(\r\n (prefix || '') +\r\n kBlockCapsuleSentinel +\r\n kValueDelimiter +\r\n '((?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)' +\r\n kValueDelimiter +\r\n kBlockCapsuleSentinel +\r\n (suffix || ''),\r\n flags,\r\n );\r\n}\r\n\r\n// remove encoding envelope then parse the remaining text into a block capsule\r\nexport function parsePandocBlockCapsule(text: string): PandocBlockCapsule {\r\n const envelopeLen = kBlockCapsuleSentinel.length + kFieldDelimiter.length;\r\n const record = text.substring(envelopeLen, text.length - envelopeLen);\r\n const decodedRecord = base64Decode(record);\r\n const fields = decodedRecord.split(kFieldDelimiter);\r\n const fieldValue = (i: number) => base64Decode(fields[i].split(kValueDelimiter)[1]);\r\n return {\r\n [kTypeField]: fieldValue(0),\r\n [kPositionField]: parseInt(fieldValue(1), 10),\r\n [kPrefixField]: fieldValue(2),\r\n [kSourceField]: fieldValue(3),\r\n [kSuffixField]: fieldValue(4),\r\n };\r\n}\r\n\r\n// provide a version of the block capsule source with the prefix removed\r\n// from all but the very first line. this allows us to restore the text\r\n// to the level of indentation implied by the markdown (as opposed to the\r\n// level found literally in the source file)\r\nexport function blockCapsuleSourceWithoutPrefix(source: string, prefix: string) {\r\n // prefix represents the indentation level of the block's source code, strip that\r\n // same prefix from all the lines of code save for the first one\r\n const prefixStripRegEx = new RegExp('^' + prefix);\r\n const lines = source.split('\\n').map((line, index) => {\r\n return index > 0 ? line.replace(prefixStripRegEx, '') : line;\r\n });\r\n return lines.join('\\n');\r\n}\r\n","/*\r\n * heading.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport const kHeadingLevel = 0;\r\nexport const kHeadingAttr = 1;\r\nexport const kHeadingChildren = 2;\r\n","/*\r\n * pandoc_to_prosemirror.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Attrs, Mark, Node as ProsemirrorNode, NodeType, Schema } from 'prosemirror-model';\r\n\r\nimport {\r\n PandocTokenReader,\r\n PandocToken,\r\n PandocAst,\r\n ProsemirrorWriter,\r\n PandocBlockReaderFn,\r\n PandocInlineHTMLReaderFn,\r\n PandocTokensFilterFn,\r\n PandocTokenType,\r\n mapTokens,\r\n stringifyTokens,\r\n PandocExtensions,\r\n forEachToken,\r\n} from '../api/pandoc';\r\nimport {\r\n pandocAttrReadAST,\r\n kCodeBlockAttr,\r\n kCodeBlockText,\r\n kPandocAttrClasses,\r\n kPandocAttrKeyvalue,\r\n} from '../api/pandoc_attr';\r\nimport {\r\n PandocBlockCapsuleFilter,\r\n parsePandocBlockCapsule,\r\n resolvePandocBlockCapsuleText,\r\n decodeBlockCapsuleText,\r\n} from '../api/pandoc_capsule';\r\n\r\nimport { PandocToProsemirrorResult, PandocLineWrapping } from './pandoc_converter';\r\nimport { kLinkTarget, kLinkTargetUrl, kLinkChildren, kLinkAttr, kLinkTargetTitle } from '../api/link';\r\nimport { kHeadingAttr, kHeadingLevel, kHeadingChildren } from '../api/heading';\r\nimport { pandocAutoIdentifier, gfmAutoIdentifier } from '../api/pandoc_id';\r\nimport { hasShortcutHeadingLinks } from '../api/pandoc_format';\r\nimport { equalsIgnoreCase } from 'core';\r\n\r\nexport function pandocToProsemirror(\r\n ast: PandocAst,\r\n schema: Schema,\r\n extensions: PandocExtensions,\r\n readers: readonly PandocTokenReader[],\r\n tokensFilters: readonly PandocTokensFilterFn[],\r\n blockReaders: readonly PandocBlockReaderFn[],\r\n inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[],\r\n blockCapsuleFilters: readonly PandocBlockCapsuleFilter[],\r\n): PandocToProsemirrorResult {\r\n const parser = new Parser(\r\n schema,\r\n extensions,\r\n readers,\r\n tokensFilters,\r\n blockReaders,\r\n inlineHTMLReaders,\r\n blockCapsuleFilters,\r\n );\r\n return parser.parse(ast);\r\n}\r\n\r\nclass Parser {\r\n private readonly schema: Schema;\r\n private readonly extensions: PandocExtensions;\r\n private readonly tokensFilters: readonly PandocTokensFilterFn[];\r\n private readonly inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[];\r\n private readonly blockCapsuleFilters: readonly PandocBlockCapsuleFilter[];\r\n private readonly handlers: { [token: string]: ParserTokenHandlerCandidate[] };\r\n\r\n constructor(\r\n schema: Schema,\r\n extensions: PandocExtensions,\r\n readers: readonly PandocTokenReader[],\r\n tokensFilters: readonly PandocTokensFilterFn[],\r\n blockReaders: readonly PandocBlockReaderFn[],\r\n inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[],\r\n blockCapsuleFilters: readonly PandocBlockCapsuleFilter[],\r\n ) {\r\n this.schema = schema;\r\n this.extensions = extensions;\r\n this.tokensFilters = tokensFilters;\r\n this.inlineHTMLReaders = inlineHTMLReaders;\r\n // apply block capsule filters in reverse order\r\n this.blockCapsuleFilters = blockCapsuleFilters.slice().reverse();\r\n this.handlers = this.createHandlers(readers, blockReaders);\r\n }\r\n\r\n public parse(ast: PandocAst) {\r\n // create state\r\n const state: ParserState = new ParserState(this.schema);\r\n // create writer (compose state w/ writeTokens function)\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const parser = this;\r\n const writer: ProsemirrorWriter = {\r\n openNode: state.openNode.bind(state),\r\n closeNode: state.closeNode.bind(state),\r\n openNoteNode: state.openNoteNode.bind(state),\r\n addNode: state.addNode.bind(state),\r\n openMark: state.openMark.bind(state),\r\n closeMark: state.closeMark.bind(state),\r\n writeText: state.writeText.bind(state),\r\n hasInlineHTMLWriter(html: string) {\r\n return parser.hasInlineHTMLWriter(html);\r\n },\r\n writeInlineHTML(html: string) {\r\n return parser.writeInlineHTML(this, html);\r\n },\r\n writeTokens(tokens: PandocToken[]) {\r\n parser.writeTokens(this, tokens);\r\n },\r\n logUnrecognized: state.logUnrecognized.bind(state),\r\n logExampleList: state.logExampleList.bind(state),\r\n isNodeOpen: state.isNodeOpen.bind(state),\r\n };\r\n\r\n // process raw text capsules\r\n let targetAst = {\r\n ...ast,\r\n blocks: resolvePandocBlockCapsuleText(ast.blocks, this.blockCapsuleFilters),\r\n };\r\n\r\n // detect line wrapping\r\n const lineWrapping = detectLineWrapping(targetAst);\r\n\r\n // resolve heading ids\r\n targetAst = resolveHeadingIds(targetAst, this.extensions);\r\n\r\n // write all tokens\r\n writer.writeTokens(targetAst.blocks);\r\n\r\n // return\r\n return {\r\n doc: state.doc(),\r\n line_wrapping: lineWrapping,\r\n unrecognized: state.unrecognized(),\r\n example_lists: state.hasExampleLists(),\r\n unparsed_meta: ast.meta,\r\n };\r\n }\r\n\r\n private writeTokens(writer: ProsemirrorWriter, tokens: PandocToken[]) {\r\n // pass through tokens filters\r\n let targetTokens = tokens;\r\n this.tokensFilters.forEach(filter => {\r\n targetTokens = filter(targetTokens, writer);\r\n });\r\n\r\n // process tokens\r\n targetTokens.forEach(tok => this.writeToken(writer, tok));\r\n }\r\n\r\n private writeToken(writer: ProsemirrorWriter, tok: PandocToken) {\r\n // process block-level capsules\r\n for (const filter of this.blockCapsuleFilters) {\r\n const capsuleText = filter.handleToken?.(tok);\r\n if (capsuleText) {\r\n const blockCapsule = parsePandocBlockCapsule(capsuleText);\r\n // run all of the text filters in case there was nesting\r\n blockCapsule.source = decodeBlockCapsuleText(blockCapsule.source, tok, this.blockCapsuleFilters);\r\n filter.writeNode(this.schema, writer, blockCapsule);\r\n return;\r\n }\r\n }\r\n\r\n // look for a handler.match function that wants to handle this token\r\n const handlers = this.handlers[tok.t] || [];\r\n for (const handler of handlers) {\r\n // It's not enough for a pandoc reader's preferred token to match the\r\n // current token; it's possible based on the `match` method for the\r\n // reader to decline to handle it.\r\n if (handler.match && handler.match(tok)) {\r\n handler.handler(writer, tok);\r\n return;\r\n }\r\n }\r\n\r\n // if we didn't find one, look for the default handler\r\n for (const handler of handlers) {\r\n if (!handler.match) {\r\n handler.handler(writer, tok);\r\n return;\r\n }\r\n }\r\n\r\n // log unrecognized token\r\n writer.logUnrecognized(tok.t);\r\n }\r\n\r\n private hasInlineHTMLWriter(html: string) {\r\n for (const reader of this.inlineHTMLReaders) {\r\n if (reader(this.schema, html)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private writeInlineHTML(writer: ProsemirrorWriter, html: string) {\r\n for (const reader of this.inlineHTMLReaders) {\r\n if (reader(this.schema, html, writer)) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // create parser token handler functions based on the passed readers\r\n private createHandlers(readers: readonly PandocTokenReader[], blockReaders: readonly PandocBlockReaderFn[]) {\r\n const handlers: { [token: string]: ParserTokenHandlerCandidate[] } = {};\r\n\r\n for (const reader of readers) {\r\n // resolve children (provide default impl)\r\n const getChildren = reader.getChildren || ((tok: PandocToken) => tok.c);\r\n\r\n // resolve getAttrs (provide default imple)\r\n const getAttrs = reader.getAttrs ? reader.getAttrs : () => ({});\r\n\r\n let handler: ParserTokenHandler;\r\n\r\n // see if there is a low-level handler\r\n if (reader.handler) {\r\n handler = reader.handler(this.schema);\r\n }\r\n\r\n // text\r\n else if (reader.text) {\r\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n if (reader.getText) {\r\n const text = reader.getText(tok);\r\n writer.writeText(text);\r\n }\r\n };\r\n\r\n // marks\r\n } else if (reader.mark) {\r\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n const markType = this.schema.marks[reader.mark as string];\r\n const mark = markType.create(getAttrs(tok));\r\n writer.openMark(mark);\r\n if (reader.getText) {\r\n writer.writeText(reader.getText(tok));\r\n } else {\r\n writer.writeTokens(getChildren(tok));\r\n }\r\n writer.closeMark(mark);\r\n };\r\n\r\n // blocks\r\n } else if (reader.block) {\r\n const nodeType = this.schema.nodes[reader.block];\r\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n // give the block readers first crack (e.g. handle a paragraph node with\r\n // a single image as a figure node)\r\n for (const blockReader of blockReaders) {\r\n if (blockReader(this.schema, tok, writer)) {\r\n return;\r\n }\r\n }\r\n\r\n writer.openNode(nodeType, getAttrs(tok));\r\n if (reader.getText) {\r\n writer.writeText(reader.getText(tok));\r\n } else {\r\n writer.writeTokens(getChildren(tok));\r\n }\r\n writer.closeNode();\r\n };\r\n\r\n // nodes\r\n } else if (reader.node) {\r\n const nodeType = this.schema.nodes[reader.node];\r\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n if (reader.getChildren) {\r\n writer.openNode(nodeType, getAttrs(tok));\r\n writer.writeTokens(getChildren(tok));\r\n writer.closeNode();\r\n } else {\r\n let content: ProsemirrorNode[] = [];\r\n if (reader.getText) {\r\n content = [this.schema.text(reader.getText(tok))];\r\n }\r\n writer.addNode(nodeType, getAttrs(tok), content);\r\n }\r\n };\r\n\r\n // code blocks\r\n } else if (reader.code_block) {\r\n handler = (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n // type/attr/text\r\n const nodeType = this.schema.nodes.code_block;\r\n const attr = pandocAttrReadAST(tok, kCodeBlockAttr);\r\n const text = tok.c[kCodeBlockText] as string;\r\n\r\n // write node\r\n writer.openNode(nodeType, attr);\r\n writer.writeText(text);\r\n writer.closeNode();\r\n };\r\n } else {\r\n throw new Error('pandoc reader was malformed or unrecognized');\r\n }\r\n\r\n // Ensure an array exists\r\n handlers[reader.token] = handlers[reader.token] || [];\r\n\r\n handlers[reader.token].push({\r\n match: reader.match,\r\n handler,\r\n });\r\n }\r\n return handlers;\r\n }\r\n}\r\n\r\nclass ParserState {\r\n private readonly schema: Schema;\r\n private readonly stack: ParserStackElement[];\r\n private readonly notes: ProsemirrorNode[];\r\n private marks: readonly Mark[];\r\n private footnoteNumber: number;\r\n private unrecognizedTokens: string[];\r\n private exampleLists: boolean;\r\n\r\n constructor(schema: Schema) {\r\n this.schema = schema;\r\n this.stack = [{ type: this.schema.nodes.body, attrs: {}, content: [] }];\r\n this.notes = [];\r\n this.marks = Mark.none;\r\n this.footnoteNumber = 1;\r\n this.unrecognizedTokens = [];\r\n this.exampleLists = false;\r\n }\r\n\r\n public doc(): ProsemirrorNode {\r\n const content: ProsemirrorNode[] = [];\r\n content.push(this.top().type.createAndFill(null, this.top().content) as ProsemirrorNode);\r\n content.push(this.schema.nodes.notes.createAndFill(null, this.notes) as ProsemirrorNode);\r\n return this.schema.topNodeType.createAndFill({}, content) as ProsemirrorNode;\r\n }\r\n\r\n public unrecognized(): string[] {\r\n return this.unrecognizedTokens;\r\n }\r\n\r\n public hasExampleLists(): boolean {\r\n return this.exampleLists;\r\n }\r\n\r\n public writeText(text: string) {\r\n if (!text) {\r\n return;\r\n }\r\n const nodes: ProsemirrorNode[] = this.top().content;\r\n const last: ProsemirrorNode = nodes[nodes.length - 1];\r\n const node: ProsemirrorNode = this.schema.text(text, this.marks);\r\n const merged: ProsemirrorNode | undefined = this.maybeMerge(last, node);\r\n if (last && merged) {\r\n nodes[nodes.length - 1] = merged;\r\n } else {\r\n nodes.push(node);\r\n }\r\n }\r\n\r\n public addNode(type: NodeType, attrs: Attrs, content: ProsemirrorNode[]) {\r\n const node: ProsemirrorNode | null | undefined = type.createAndFill(attrs, content, this.marks);\r\n if (!node) {\r\n return null;\r\n }\r\n if (this.stack.length) {\r\n if (type === this.schema.nodes.note) {\r\n this.notes.push(node);\r\n } else {\r\n this.top().content.push(node);\r\n }\r\n }\r\n return node;\r\n }\r\n\r\n public openNode(type: NodeType, attrs: Attrs) {\r\n this.stack.push({ type, attrs, content: [] });\r\n }\r\n\r\n public closeNode(): ProsemirrorNode {\r\n // get node info\r\n const info: ParserStackElement = this.stack.pop() as ParserStackElement;\r\n\r\n // clear marks if the node type isn't inline\r\n if (!info.type.isInline) {\r\n if (this.marks.length) {\r\n this.marks = Mark.none;\r\n }\r\n }\r\n\r\n return this.addNode(info.type, info.attrs, info.content) as ProsemirrorNode;\r\n }\r\n\r\n public openMark(mark: Mark) {\r\n this.marks = mark.addToSet(this.marks);\r\n }\r\n\r\n public closeMark(mark: Mark) {\r\n this.marks = mark.removeFromSet(this.marks);\r\n }\r\n\r\n public openNoteNode(ref: string) {\r\n this.openNode(this.schema.nodes.note, { ref, number: this.footnoteNumber++ });\r\n }\r\n\r\n public logUnrecognized(type: string) {\r\n if (!this.unrecognizedTokens.includes(type)) {\r\n this.unrecognizedTokens.push(type);\r\n }\r\n }\r\n\r\n public logExampleList() {\r\n this.exampleLists = true;\r\n }\r\n\r\n public isNodeOpen(type: NodeType) {\r\n return this.stack.some(value => value.type === type);\r\n }\r\n\r\n private top(): ParserStackElement {\r\n return this.stack[this.stack.length - 1];\r\n }\r\n\r\n private maybeMerge(a: ProsemirrorNode, b: ProsemirrorNode): ProsemirrorNode | undefined {\r\n if (a && a.isText && b.isText && Mark.sameSet(a.marks, b.marks)) {\r\n return this.schema.text(((a.text as string) + b.text) as string, a.marks);\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\n// determine what sort of line wrapping is used within the file\r\nfunction detectLineWrapping(ast: PandocAst): PandocLineWrapping {\r\n // look for soft breaks and classify them as column or sentence breaks\r\n let columnBreaks = 0;\r\n let sentenceBreaks = 0;\r\n let prevTok: PandocToken = { t: PandocTokenType.Null };\r\n forEachToken(ast.blocks, tok => {\r\n if (tok.t === PandocTokenType.SoftBreak) {\r\n if (\r\n prevTok.t === PandocTokenType.Str &&\r\n typeof prevTok.c === 'string' &&\r\n ['.', '?', '!'].includes(prevTok.c.charAt(prevTok.c.length - 1))\r\n ) {\r\n sentenceBreaks++;\r\n } else {\r\n columnBreaks++;\r\n }\r\n }\r\n prevTok = tok;\r\n });\r\n\r\n // need to have > 5 line breaks or more line breaks than blocks to trigger detection\r\n // (prevents 'over-detection' if there are stray few soft breaks)\r\n const lineBreaks = columnBreaks + sentenceBreaks;\r\n if (lineBreaks > 5 || lineBreaks > ast.blocks.length) {\r\n if (sentenceBreaks > columnBreaks) {\r\n return 'sentence';\r\n } else {\r\n return 'column';\r\n }\r\n } else {\r\n return 'none';\r\n }\r\n}\r\n\r\n// determine which heading ids are valid based on explicit headings contained in the\r\n// document and any headings targeted by links. remove any heading ids not so identified\r\nfunction resolveHeadingIds(ast: PandocAst, extensions: PandocExtensions) {\r\n // determine function we will use to create auto-identifiers\r\n const autoIdentifier = extensions.gfm_auto_identifiers ? gfmAutoIdentifier : pandocAutoIdentifier;\r\n\r\n // start with ids we know are valid (i.e. ones the user added to the doc)\r\n const headingIds = new Set<string>((ast.heading_ids || []).map(id => id.toLocaleLowerCase()));\r\n\r\n // find ids referenced in links\r\n let astBlocks = mapTokens(ast.blocks, tok => {\r\n if (tok.t === PandocTokenType.Link) {\r\n const target = tok.c[kLinkTarget];\r\n const href = target[kLinkTargetUrl] as string;\r\n if (href.startsWith('#')) {\r\n // if we have support for implicit header references and shortcut reference links,\r\n // also check to see whether the link text resolves to the target (in that case\r\n // we don't need the explicit id). note that if that heading has an explicit\r\n // id defined then we also leave it alone.\r\n const text = stringifyTokens(tok.c[kLinkChildren], extensions.gfm_auto_identifiers);\r\n if (\r\n hasShortcutHeadingLinks(extensions) &&\r\n equalsIgnoreCase('#' + autoIdentifier(text, extensions.ascii_identifiers), href) &&\r\n !headingIds.has(href.toLocaleLowerCase())\r\n ) {\r\n // return a version of the link w/o the target\r\n return {\r\n t: PandocTokenType.Link,\r\n c: [tok.c[kLinkAttr], tok.c[kLinkChildren], ['#', tok.c[kLinkTarget][kLinkTargetTitle]]],\r\n };\r\n\r\n // otherwise note that it's a valid id\r\n } else {\r\n headingIds.add(href.toLocaleLowerCase());\r\n }\r\n }\r\n }\r\n // default to return token unmodified\r\n return tok;\r\n });\r\n\r\n // remove any heading ids not created by the user or required by a link\r\n astBlocks = mapTokens(ast.blocks, tok => {\r\n if (tok.t === PandocTokenType.Header) {\r\n const attr = pandocAttrReadAST(tok, kHeadingAttr);\r\n if (attr.id && !headingIds.has('#' + attr.id.toLocaleLowerCase())) {\r\n return {\r\n t: PandocTokenType.Header,\r\n c: [\r\n tok.c[kHeadingLevel],\r\n ['', tok.c[kHeadingAttr][kPandocAttrClasses], tok.c[kHeadingAttr][kPandocAttrKeyvalue]],\r\n tok.c[kHeadingChildren],\r\n ],\r\n };\r\n }\r\n }\r\n // default to just reflecting back the token\r\n return tok;\r\n });\r\n\r\n // return the ast\r\n return {\r\n ...ast,\r\n blocks: astBlocks,\r\n heading_ids: undefined,\r\n };\r\n}\r\n\r\ninterface ParserStackElement {\r\n type: NodeType;\r\n attrs: Record<string,unknown>;\r\n content: ProsemirrorNode[];\r\n}\r\n\r\ntype ParserTokenHandler = (writer: ProsemirrorWriter, tok: PandocToken) => void;\r\n\r\ninterface ParserTokenHandlerCandidate {\r\n match?: (tok: PandocToken) => boolean;\r\n handler: ParserTokenHandler;\r\n}\r\n","/*\r\n * pandoc_from_prosemirror.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Fragment, MarkType } from 'prosemirror-model';\r\n\r\nimport {\r\n PandocAst,\r\n PandocToken,\r\n PandocOutput,\r\n PandocNodeWriterFn,\r\n PandocNodeWriter,\r\n PandocMarkWriter,\r\n PandocApiVersion,\r\n PandocTokenType,\r\n PandocOutputOption,\r\n PandocExtensions,\r\n marksByPriority,\r\n kPreventBracketEscape,\r\n} from '../api/pandoc';\r\n\r\nimport { kGfmFormat } from '../api/pandoc_format';\r\nimport { PandocAttr } from '../api/pandoc_attr';\r\nimport { PandocFormat } from '../api/pandoc-types';\r\nimport { fragmentText } from '../api/fragment';\r\n\r\n\r\nexport function pandocFromProsemirror(\r\n doc: ProsemirrorNode,\r\n apiVersion: PandocApiVersion,\r\n format: PandocFormat,\r\n nodeWriters: readonly PandocNodeWriter[],\r\n markWriters: readonly PandocMarkWriter[],\r\n) {\r\n const bodyNode = doc.child(0);\r\n const notesNode = doc.child(1);\r\n const writer = new PandocWriter(apiVersion, format, nodeWriters, markWriters, notesNode);\r\n writer.writeNodes(bodyNode);\r\n return writer.output();\r\n}\r\n\r\nclass PandocWriter implements PandocOutput {\r\n private readonly ast: PandocAst;\r\n private readonly format: PandocFormat;\r\n private readonly nodeWriters: { [key: string]: PandocNodeWriterFn };\r\n private readonly markWriters: { [key: string]: PandocMarkWriter };\r\n private readonly notes: { [key: string]: ProsemirrorNode };\r\n private readonly containers: unknown[][];\r\n private readonly activeMarks: MarkType[];\r\n private options: { [key: string]: boolean };\r\n\r\n public readonly extensions: PandocExtensions;\r\n\r\n private readonly escapeCharacters: string[] = [];\r\n private readonly manualEscapeCharacters: Map<string, string> = new Map<string, string>();\r\n private readonly preventEscapeCharacters: string[] = [];\r\n\r\n constructor(\r\n apiVersion: PandocApiVersion,\r\n format: PandocFormat,\r\n nodeWriters: readonly PandocNodeWriter[],\r\n markWriters: readonly PandocMarkWriter[],\r\n notes: ProsemirrorNode,\r\n ) {\r\n // save format and extensions\r\n this.format = format;\r\n this.extensions = format.extensions;\r\n // compute escape characters based on format\r\n this.initEscapeCharacters();\r\n // create maps of node and mark writers\r\n this.nodeWriters = {};\r\n nodeWriters.forEach((writer: PandocNodeWriter) => {\r\n this.nodeWriters[writer.name] = writer.write;\r\n });\r\n this.markWriters = {};\r\n markWriters.forEach((writer: PandocMarkWriter) => {\r\n this.markWriters[writer.name] = writer;\r\n });\r\n // create map of notes\r\n this.notes = {};\r\n notes.forEach((note: ProsemirrorNode) => {\r\n this.notes[note.attrs.ref] = note;\r\n });\r\n\r\n this.ast = {\r\n blocks: [],\r\n 'pandoc-api-version': apiVersion,\r\n meta: {},\r\n };\r\n this.containers = [this.ast.blocks];\r\n this.activeMarks = [];\r\n this.options = {\r\n writeSpaces: true,\r\n };\r\n }\r\n\r\n public output() {\r\n return {\r\n ast: this.ast,\r\n };\r\n }\r\n\r\n public write(value: unknown) {\r\n const container = this.containers[this.containers.length - 1];\r\n container.push(value);\r\n }\r\n\r\n public writeToken(type: PandocTokenType, content?: VoidFunction | unknown) {\r\n const token: PandocToken = {\r\n t: type,\r\n };\r\n if (content !== undefined) {\r\n if (typeof content === 'function') {\r\n token.c = [];\r\n this.fill(token.c, content as VoidFunction);\r\n } else {\r\n token.c = content;\r\n }\r\n }\r\n this.write(token);\r\n }\r\n\r\n public writeMark(type: PandocTokenType, parent: Fragment, expelEnclosingWhitespace = true) {\r\n // expel enclosing whitepsace if requested and if the fragment isn't 100% spaces\r\n if (expelEnclosingWhitespace) {\r\n // build output spec\r\n const output = {\r\n spaceBefore: false,\r\n nodes: new Array<ProsemirrorNode>(),\r\n spaceAfter: false,\r\n };\r\n\r\n // if we see leading or trailing spaces we need to output them as tokens\r\n // and substitute text nodes\r\n parent.forEach((node: ProsemirrorNode, _offset: number, index: number) => {\r\n // check for leading/trailing space in first/last nodes\r\n if (node.isText) {\r\n let outputText = node.textContent;\r\n\r\n // checking for leading space in first node\r\n if (output.nodes.length === 0 && node.textContent.match(/^\\s+/)) {\r\n output.spaceBefore = true;\r\n outputText = outputText.trimLeft();\r\n }\r\n\r\n // check for trailing space in last node\r\n if (index === parent.childCount - 1 && node.textContent.match(/\\s+$/)) {\r\n output.spaceAfter = true;\r\n outputText = outputText.trimRight();\r\n }\r\n\r\n // check for an entirely blank node\r\n if (outputText.match(/^\\s*$/)) {\r\n outputText = '';\r\n }\r\n\r\n // skip the node if it has nothing in it\r\n if (outputText.length > 0) {\r\n // if we modified the node's text then create a new node\r\n if (outputText !== node.textContent) {\r\n output.nodes.push(node.type.schema.text(outputText, node.marks));\r\n } else {\r\n output.nodes.push(node);\r\n }\r\n }\r\n } else {\r\n output.nodes.push(node);\r\n }\r\n });\r\n\r\n // output space tokens before/after mark as necessary\r\n if (output.nodes.length > 0) {\r\n if (output.spaceBefore) {\r\n this.writeToken(PandocTokenType.Space);\r\n }\r\n this.writeToken(type, () => {\r\n this.writeInlines(Fragment.from(output.nodes));\r\n });\r\n if (output.spaceAfter) {\r\n this.writeToken(PandocTokenType.Space);\r\n }\r\n }\r\n\r\n // normal codepath (not expelling existing whitespace)\r\n } else {\r\n this.writeToken(type, () => {\r\n this.writeInlines(parent);\r\n });\r\n }\r\n }\r\n\r\n public writeArray(content: () => void) {\r\n const arr: unknown[] = [];\r\n this.fill(arr, content);\r\n this.write(arr);\r\n }\r\n\r\n public writeAttr(id?: string, classes?: string[], keyvalue?: Array<[string, string]>) {\r\n this.write([id || '', classes || [], keyvalue || []]);\r\n }\r\n\r\n public writeText(text: string | null) {\r\n // determine which characters we shouldn't escape\r\n const preventEscapeCharacters = [ ...this.preventEscapeCharacters ];\r\n if (this.options[kPreventBracketEscape]) {\r\n preventEscapeCharacters.push('[', ']');\r\n }\r\n if (this.extensions.smart) {\r\n preventEscapeCharacters.push('\\'', '\"');\r\n }\r\n\r\n if (text) {\r\n let textRun = '';\r\n const flushTextRun = () => {\r\n if (textRun) {\r\n // if this is a line block, convert leading nbsp to regular space,\r\n if (!this.options.writeSpaces) {\r\n textRun = textRun.replace(/(^|\\n)+(\\u00A0+)/g, (_match, p1, p2) => {\r\n return p1 + Array(p2.length + 1).join(' ');\r\n });\r\n }\r\n\r\n \r\n this.writeToken(PandocTokenType.Str, textRun);\r\n textRun = '';\r\n }\r\n };\r\n for (let i = 0; i < text.length; i++) {\r\n const ch = text.charAt(i);\r\n if (this.options.writeSpaces && ch === ' ') {\r\n flushTextRun();\r\n this.writeToken(PandocTokenType.Space);\r\n } else if (preventEscapeCharacters.includes(ch)) {\r\n flushTextRun();\r\n this.writeRawMarkdown(ch);\r\n } else if (this.manualEscapeCharacters.has(ch)) {\r\n flushTextRun();\r\n this.writeRawMarkdown(this.manualEscapeCharacters.get(ch)!);\r\n } else {\r\n textRun += ch;\r\n }\r\n }\r\n flushTextRun();\r\n }\r\n }\r\n\r\n public writeLink(href: string, title: string, attr: PandocAttr | null, content: VoidFunction) {\r\n this.writeToken(PandocTokenType.Link, () => {\r\n // write attr if provided\r\n if (attr) {\r\n this.writeAttr(attr.id, attr.classes, attr.keyvalue);\r\n } else {\r\n this.writeAttr();\r\n }\r\n // write content\r\n this.writeArray(() => {\r\n content();\r\n });\r\n\r\n // write href\r\n this.write([href || '', title || '']);\r\n });\r\n }\r\n\r\n public writeNote(note: ProsemirrorNode) {\r\n // get corresponding note body\r\n const noteBody = this.notes[note.attrs.ref];\r\n\r\n // don't write empty footnotes (otherwise in block or section mode they gobble up the section below them)\r\n if (noteBody.textContent.trim().length > 0) {\r\n this.writeToken(PandocTokenType.Note, () => {\r\n this.writeNodes(noteBody);\r\n });\r\n }\r\n }\r\n\r\n public writeNode(node: ProsemirrorNode) {\r\n this.nodeWriters[node.type.name](this, node);\r\n }\r\n\r\n public writeNodes(parent: ProsemirrorNode) {\r\n parent.forEach(this.writeNode.bind(this));\r\n }\r\n\r\n public writeInlines(fragment: Fragment) {\r\n // get the marks from a node that are not already on the stack of active marks\r\n const nodeMarks = (node: ProsemirrorNode) => {\r\n // get marks ordered by writer priority\r\n let marks = marksByPriority(node.marks, this.markWriters);\r\n\r\n // remove active marks\r\n for (const activeMark of this.activeMarks) {\r\n marks = activeMark.removeFromSet(marks);\r\n }\r\n\r\n // return marks\r\n return marks;\r\n };\r\n\r\n // helpers to iterate through the nodes (sans any marks already on the stack)\r\n let currentChild = 0;\r\n const nextNode = () => {\r\n const childIndex = currentChild;\r\n currentChild++;\r\n return {\r\n node: fragment.child(childIndex),\r\n marks: nodeMarks(fragment.child(childIndex)),\r\n };\r\n };\r\n const putBackNode = () => {\r\n currentChild--;\r\n };\r\n\r\n // iterate through the nodes\r\n while (currentChild < fragment.childCount) {\r\n // get the next node\r\n let next = nextNode();\r\n\r\n // if there are active marks then collect them up and call the mark handler\r\n // with all nodes that it contains, otherwise just process it as a plain\r\n // unmarked node\r\n if (next.marks.length > 0) {\r\n // get the mark and start building a list of marked nodes\r\n const mark = next.marks[0];\r\n const markedNodes: ProsemirrorNode[] = [next.node];\r\n\r\n // inner iteration to find nodes that have this mark\r\n while (currentChild < fragment.childCount) {\r\n next = nextNode();\r\n // If the next node shares the same mark with the current node\r\n // then add this next node node as a child of the current node\r\n if (next.marks.some(nextMark => nextMark.eq(mark))) {\r\n markedNodes.push(next.node);\r\n } else {\r\n // no mark found, \"put back\" the node\r\n putBackNode();\r\n break;\r\n }\r\n }\r\n\r\n // call the mark writer after noting that this mark is active (which\r\n // will cause subsequent recursive invocations of this function to\r\n // not re-process this mark)\r\n this.activeMarks.push(mark.type);\r\n this.markWriters[mark.type.name].write(this, mark, Fragment.from(markedNodes));\r\n this.activeMarks.pop();\r\n } else {\r\n // ordinary unmarked node, call the node writer\r\n this.nodeWriters[next.node.type.name](this, next.node);\r\n }\r\n }\r\n }\r\n\r\n public writeRawMarkdown(markdown: Fragment | string, escapeSymbols?: boolean) {\r\n // collect markdown text if necessary\r\n let md = markdown instanceof Fragment ? fragmentText(markdown) : markdown;\r\n\r\n // escape symbols if requested\r\n if (escapeSymbols) {\r\n const escaped: string[] = [];\r\n for (let i = 0; i < md.length; i++) {\r\n const ch = md.charAt(i);\r\n if (this.escapeCharacters.includes(ch)) {\r\n escaped.push('\\\\' + ch);\r\n } else {\r\n escaped.push(ch);\r\n }\r\n }\r\n md = escaped.join('');\r\n }\r\n\r\n this.writeToken(PandocTokenType.RawInline, () => {\r\n this.write('markdown');\r\n this.write(md);\r\n });\r\n }\r\n\r\n public withOption(option: PandocOutputOption, value: boolean, f: () => void) {\r\n const previousValue = this.options[option];\r\n this.options[option] = value;\r\n f();\r\n this.options[option] = previousValue;\r\n }\r\n\r\n private fill(container: unknown[], content: () => void) {\r\n this.containers.push(container);\r\n content();\r\n this.containers.pop();\r\n }\r\n\r\n private initEscapeCharacters() {\r\n // gfm disallows [] escaping so that MediaWiki style page links (e.g. [[MyPage]]) work as expected\r\n // tex_math_single_backslash does not allow escaping of [] or () (as that conflicts with the math syntax)\r\n if (this.format.mode === kGfmFormat || this.format.extensions.tex_math_single_backslash) {\r\n this.preventEscapeCharacters.push('[', ']');\r\n }\r\n\r\n // tex_math_single_backslash does not allow escaping of [] or () (as that conflicts with the math syntax)\r\n if (this.format.extensions.tex_math_single_backslash) {\r\n this.preventEscapeCharacters.push('(', ')');\r\n }\r\n\r\n // filter standard escape characters w/ preventEscapeCharacters\r\n const allEscapeCharacters = ['\\\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!'];\r\n if (this.format.extensions.angle_brackets_escapable) {\r\n allEscapeCharacters.push('<');\r\n }\r\n this.escapeCharacters.push(...allEscapeCharacters.filter(ch => !this.preventEscapeCharacters.includes(ch)));\r\n\r\n // Manual escape characters are ones we can't rely on pandoc to automatically escape (b/c\r\n // they represent valid syntax for a markdown extension, e.g. '@' for citations).\r\n // For '@', since we already do special writing for spans we know are citation ids, we can\r\n // globally prescribe escaping behavior and never stomp over a citation. We also check\r\n // that '@' can be escaped in the current markdown format, and if not use an html escape.\r\n const atEscape = this.extensions.all_symbols_escapable ? '\\\\@' : '@';\r\n this.manualEscapeCharacters.set('@', atEscape);\r\n }\r\n}\r\n","/*\r\n * pandoc_converter.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport * as semver from \"semver\";\r\n\r\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { findChildren } from 'prosemirror-utils';\r\n\r\nimport {\r\n PandocServer,\r\n PandocTokenReader,\r\n PandocNodeWriter,\r\n PandocMarkWriter,\r\n PandocPreprocessorFn,\r\n PandocBlockReaderFn,\r\n PandocPostprocessorFn,\r\n PandocInlineHTMLReaderFn,\r\n PandocTokensFilterFn,\r\n PandocMarkdownPostProcessorFn,\r\n} from '../api/pandoc';\r\n\r\nimport { haveTableCellsWithInlineRcode } from '../api/rmd';\r\n\r\nimport { pandocFormatWith, kGfmFormat, kCommonmarkFormat } from '../api/pandoc_format';\r\nimport { PandocCapabilities } from '../api/pandoc_capabilities';\r\nimport { PandocBlockCapsuleFilter, pandocMarkdownWithBlockCapsules } from '../api/pandoc_capsule';\r\n\r\nimport { ExtensionManager } from '../editor/editor-extensions';\r\n\r\nimport { pandocToProsemirror } from './pandoc_to_prosemirror';\r\nimport { pandocFromProsemirror } from './pandoc_from_prosemirror';\r\nimport { isParagraphNode } from '../api/paragraph';\r\nimport { PandocFormat, PandocWriterOptions } from '../api/pandoc-types';\r\nimport { escapeRegExpCharacters, lines, normalizeNewlines } from 'core';\r\n\r\nexport type PandocLineWrapping = 'none' | 'column' | 'sentence';\r\n\r\nexport interface PandocToProsemirrorResult {\r\n doc: ProsemirrorNode;\r\n line_wrapping: PandocLineWrapping;\r\n unrecognized: string[];\r\n example_lists: boolean;\r\n unparsed_meta: { [key: string]: unknown };\r\n}\r\n\r\nexport class PandocConverter {\r\n private readonly schema: Schema;\r\n private readonly preprocessors: readonly PandocPreprocessorFn[];\r\n private readonly postprocessors: readonly PandocPostprocessorFn[];\r\n private readonly readers: readonly PandocTokenReader[];\r\n private readonly tokensFilters: readonly PandocTokensFilterFn[];\r\n private readonly blockReaders: readonly PandocBlockReaderFn[];\r\n private readonly inlineHTMLReaders: readonly PandocInlineHTMLReaderFn[];\r\n private readonly blockCapsuleFilters: readonly PandocBlockCapsuleFilter[];\r\n private readonly nodeWriters: readonly PandocNodeWriter[];\r\n private readonly markWriters: readonly PandocMarkWriter[];\r\n private readonly markdownPostProcessors: readonly PandocMarkdownPostProcessorFn[];\r\n private readonly pandoc: PandocServer;\r\n private readonly pandocCapabilities: PandocCapabilities;\r\n\r\n constructor(\r\n schema: Schema,\r\n extensions: ExtensionManager,\r\n pandoc: PandocServer,\r\n pandocCapabilities: PandocCapabilities,\r\n ) {\r\n this.schema = schema;\r\n\r\n this.preprocessors = extensions.pandocPreprocessors();\r\n this.postprocessors = extensions.pandocPostprocessors();\r\n this.readers = extensions.pandocReaders();\r\n this.tokensFilters = extensions.pandocTokensFilters();\r\n this.blockReaders = extensions.pandocBlockReaders();\r\n this.inlineHTMLReaders = extensions.pandocInlineHTMLReaders();\r\n this.blockCapsuleFilters = extensions.pandocBlockCapsuleFilters();\r\n this.nodeWriters = extensions.pandocNodeWriters();\r\n this.markWriters = extensions.pandocMarkWriters();\r\n this.markdownPostProcessors = extensions.pandocMarkdownPostProcessors();\r\n\r\n this.pandoc = pandoc;\r\n this.pandocCapabilities = pandocCapabilities;\r\n }\r\n\r\n public async toProsemirror(markdown: string, format: PandocFormat): Promise<PandocToProsemirrorResult> {\r\n // normalize newlines (for regex)\r\n markdown = normalizeNewlines(markdown);\r\n\r\n // save original markdown (for aligning capsule positions)\r\n const original = markdown;\r\n\r\n // adjust format. we always need to *read* raw_html, raw_attribute, and backtick_code_blocks b/c\r\n // that's how preprocessors hoist content through pandoc into our prosemirror token parser.\r\n // we always need to read with auto_identifiers so we can catch any auto-generated ids\r\n // required to fulfill links inside the document (we will strip out heading ids that\r\n // aren't explicit or a link target using the heading_ids returned with the ast). \r\n //\r\n // we always read all forms of tables (since they can always be written back out as raw_html)\r\n //\r\n // we also always read math (since it can always be output as 'asciimath')\r\n \r\n // determine type of auto_ids\r\n const autoIds = format.extensions.gfm_auto_identifiers ? 'gfm_auto_identifiers' : 'auto_identifiers';\r\n const targetFormat = adjustedFormat(\r\n format.fullName,\r\n ['raw_html', 'raw_attribute', 'backtick_code_blocks', autoIds, \r\n 'grid_tables', 'pipe_tables', 'multiline_tables', 'simple_tables',\r\n 'tex_math_dollars'],\r\n ['smart'],\r\n );\r\n\r\n // run preprocessors\r\n this.preprocessors.forEach(preprocessor => {\r\n markdown = preprocessor(markdown);\r\n });\r\n\r\n // create source capsules\r\n this.blockCapsuleFilters.forEach(filter => {\r\n markdown = pandocMarkdownWithBlockCapsules(original, markdown, filter);\r\n });\r\n\r\n const ast = await this.pandoc.markdownToAst(markdown, targetFormat, []);\r\n const result = pandocToProsemirror(\r\n ast,\r\n this.schema,\r\n format.extensions,\r\n this.readers,\r\n this.tokensFilters,\r\n this.blockReaders,\r\n this.inlineHTMLReaders,\r\n this.blockCapsuleFilters,\r\n );\r\n\r\n // run post-processors\r\n this.postprocessors.forEach(postprocessor => {\r\n result.doc = postprocessor(result.doc);\r\n });\r\n\r\n // return the doc\r\n return result;\r\n }\r\n\r\n // NOTE: For a plain markdown file, this is the closest we can come to cannonicalizing w/ just pandoc:\r\n //\r\n // pandoc MANUAL.md --to markdown-auto_identifiers-smart -o MANUAL.md --self-contained --atx-headers --wrap=none\r\n //\r\n // For R Mardown files, we would need to pull out the Rmd chunks before sending to pandoc.\r\n //\r\n\r\n public async fromProsemirror(\r\n doc: ProsemirrorNode,\r\n pandocFormat: PandocFormat,\r\n pandocCapabilities: PandocCapabilities,\r\n options: PandocWriterOptions,\r\n ): Promise<string> {\r\n // generate pandoc ast\r\n const output = pandocFromProsemirror(\r\n doc,\r\n this.pandocCapabilities.api_version,\r\n pandocFormat,\r\n this.nodeWriters,\r\n this.markWriters,\r\n );\r\n\r\n // adjust format. we always need to be able to write raw_attribute b/c that's how preprocessors\r\n // hoist content through pandoc into our prosemirror token parser. since we open this door when\r\n // reading, users could end up writing raw inlines, and in that case we want them to echo back\r\n // to the source document just the way they came in. for writing markdown from pm we don't\r\n // ever want to generate auto identifiers so we disable them here.\r\n let format = adjustedFormat(\r\n pandocFormat.fullName,\r\n ['raw_html', 'raw_attribute'], // always enable\r\n ['auto_identifiers', 'gfm_auto_identifiers', 'smart'],\r\n ); // always disable\r\n\r\n // disable selected format options\r\n format = pandocFormatWith(format, disabledFormatOptions(format, pandocFormat, doc), '');\r\n\r\n // prepare pandoc options\r\n let pandocOptions: string[] = [];\r\n if (!options.atxHeaders) {\r\n pandocOptions.push('--markdown-headings=setext');\r\n }\r\n if (options.dpi) {\r\n pandocOptions.push('--dpi');\r\n }\r\n // default to block level references (validate known types)\r\n let referenceLocation = 'block';\r\n if (options.references?.location) {\r\n referenceLocation = ['block', 'section', 'document'].includes(options.references.location)\r\n ? options.references.location\r\n : 'block';\r\n }\r\n pandocOptions.push(`--reference-location=${referenceLocation}`);\r\n\r\n // references prefix (if any)\r\n if (options.references?.prefix) {\r\n pandocOptions.push('--id-prefix', options.references.prefix);\r\n }\r\n\r\n // reference links\r\n if (options.references?.links) {\r\n pandocOptions.push('--reference-links');\r\n }\r\n\r\n // provide wrap options\r\n pandocOptions = pandocOptions.concat(wrapOptions(options));\r\n\r\n // render to markdown\r\n let markdown = await this.pandoc.astToMarkdown(output.ast, format, pandocOptions);\r\n\r\n // normalize newlines (don't know if pandoc uses \\r\\n on windows)\r\n markdown = markdown.replace(/\\r\\n|\\n\\r|\\r/g, '\\n');\r\n\r\n // if the pandoc version is >= 3.1.4 then fix IDs that were broken by\r\n // the change in --id-prefix behavior\r\n if (options.references?.prefix) {\r\n const pandocVersion = pandocSemver(pandocCapabilities);\r\n if (pandocVersion && semver.gte(pandocVersion, \"3.1.4\")) {\r\n const regex = new RegExp(escapeRegExpCharacters(`{#${options.references.prefix}`), \"g\");\r\n markdown = markdown.replace(regex, \"{#\");\r\n }\r\n }\r\n\r\n // run post-processors\r\n this.markdownPostProcessors.forEach(postprocessor => {\r\n markdown = postprocessor(markdown);\r\n });\r\n\r\n // return\r\n return markdown;\r\n }\r\n}\r\n\r\n// extract semver from pandoc version output\r\nfunction pandocSemver(capabilities: PandocCapabilities) {\r\n const versionLines = lines(capabilities.version);\r\n const version = versionLines[0].replace(\"pandoc \", \"\").trim();\r\n return semver.coerce(version);\r\n}\r\n\r\n// adjust the specified format\r\nfunction adjustedFormat(format: string, extensions: string[], disabled: string[]) {\r\n let newFormat = pandocFormatWith(\r\n format,\r\n '',\r\n extensions.map(ext => `+${ext}`).join('') + disabled.map(ext => `-${ext}`).join(''),\r\n );\r\n\r\n // any extension specified needs to not have a - anywhere in the format\r\n extensions.forEach(ext => {\r\n newFormat = newFormat.replace('-' + ext, '');\r\n });\r\n\r\n return newFormat;\r\n}\r\n\r\nfunction disabledFormatOptions(format: string, pandocFormat: PandocFormat, doc: ProsemirrorNode) {\r\n // (prefer pipe and grid tables). users can still force the availability of these by\r\n // adding those format flags but all known markdown variants that support tables also\r\n // support pipe tables so this seems unlikely to ever be required.\r\n let disabledTableTypes = '-simple_tables-multiline_tables';\r\n\r\n // if there are tables with inline R code then disable grid tables (as the inline\r\n // R code will mess up the column boundaries)\r\n if (haveTableCellsWithInlineRcode(doc) || \r\n (!gridTablesRequired(doc) && pandocFormat.extensions.pipe_tables)) {\r\n disabledTableTypes += '-grid_tables';\r\n }\r\n\r\n // gfm and commonmark variants don't allow simple/multiline/grid tables (just pipe tables)\r\n // and it's an error to even include these in the markdown format specifier -- so for\r\n // these modes we just nix the disabling\r\n if (format.startsWith(kGfmFormat) || format.startsWith(kCommonmarkFormat)) {\r\n disabledTableTypes = '';\r\n }\r\n\r\n // return\r\n return disabledTableTypes;\r\n}\r\n\r\nfunction gridTablesRequired(doc: ProsemirrorNode) {\r\n const schema = doc.type.schema;\r\n const isTableCell = (node: ProsemirrorNode) => node.type === schema.nodes.table_cell || node.type === schema.nodes.table_header;\r\n return findChildren(doc, isTableCell).some(cell => {\r\n // various things require grid tables (basically anything that requires embedded newlines)\r\n\r\n // multiple blocks\r\n if (cell.node.childCount > 1) {\r\n return true;\r\n }\r\n\r\n // non paragraph block\r\n if (!isParagraphNode(cell.node.firstChild)) {\r\n return true;\r\n }\r\n\r\n // paragraph with hard break\r\n const paraNode = cell.node.firstChild!;\r\n return findChildren(paraNode, node => node.type === schema.nodes.hard_break).length > 0;\r\n }); \r\n}\r\n\r\nfunction wrapOptions(options: PandocWriterOptions) {\r\n const pandocOptions: string[] = [];\r\n if (options.wrap) {\r\n if (options.wrap === 'none' || options.wrap === 'sentence') {\r\n pandocOptions.push('--wrap=none');\r\n } else {\r\n const column = parseInt(options.wrap, 10);\r\n if (column) {\r\n pandocOptions.push('--wrap=auto');\r\n pandocOptions.push(`--columns=${column}`);\r\n } else {\r\n pandocOptions.push('--wrap=none');\r\n }\r\n }\r\n } else {\r\n pandocOptions.push('--wrap=none');\r\n }\r\n return pandocOptions;\r\n}\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NWRiNjhhYy01MDNjLTRmZDAtOTVhOC1lMTM3YWIxOWIxZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkQxNTE2QjA3NENEMTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkQxNTE2QUY3NENEMTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplY2JjYzM4ZS04NzVkLTQ4NzQtOTFjNy00NTE0NjM3MTliYzQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplNmFjZjIwZi0yZWIwLTQwNDEtOGRhZC1hM2U1YmNhNWM3OGMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7vkHxoAAAClklEQVR42sxYz08TQRR+M93+A8DBkhjw4D9AwkU2Hk1M1JOGxPTCQRLCAdQEjMpZxR8xxtiqF0MChQB3DhyU0P8CTxAT4UBMPGk7z3l0p+yuO92d3elmt33Z3Wnn9Zvv+97sTBkiQpEPJ6rxxZed3r2Q3vJFY0O6olPnns5L0zesAeTGPWLA2VbEsQ1OyGCMmY9bMzAW9UFI4rsyZiQaNwm4/+87bfJ6X7Tb9VcPJ1dNACZhcGby2rg7OjyYSaqDw2P34+ZXorbR0QICiBbebsHy/O0UACVzFy8MwN+WyARwpDIEMsMEqXZumHgGexbJo6nrjMQscWbF8B4I7oEMJBXGEqNKaq8ihUBYeLP+h7ESpd+XUXt5/86auQe9arWNkEA8vXcLHMeBo+NT99P2HjWvKfCJJe5Wa9gomQGeM3XmSUQ3lQfVVNKrYyqJQ7n8uXU/w3VDRbDvwfBg/bIKIwZ9ydCyB/UMGkns82BfJQZI7UHVQfSRQX9uYc4g9sGDYE9ikbsHDapY9MmDvSQuiAfBZhVjzlUMaT1ocwGv96BRFQsfg3lJrHvq5zpRoz2JITDN6JZC2QTOUMUBiYVofj86yQzu4PAnXKoMhnZ8GCOwZsHqr+JWu1V/39hlMvMVxWzUrg2DO7jOqlK1y7vRygBcHbt8BlCBTPIsduKq+N1ilXZhG953+dzzld9L0zeN2CNAnPNuxIFKLPHcckNtD2lL16JgvATlctk4aJlPQQAVi0mcrWdQdGVWeYQXzR8nvyZGhoeMWVRnCvKkzN9MBVCBI3yzz1aRjg+Pq55xoFbf+kZNbmJPgt+T3QUxgaslmpuiIu+j+uRzJA4OBT8KD9CJeyw9eL0R8GTaeTCtbVjR/wL+J8AADym9+B8KLMsAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NWRiNjhhYy01MDNjLTRmZDAtOTVhOC1lMTM3YWIxOWIxZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0IxREFFRDE3NEI0MTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0IxREFFRDA3NEI0MTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MDAxMTRhZC00ZWFjLTQzYmMtYWU0OS0wMGE2MjE1N2ZiZmMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplNmFjZjIwZi0yZWIwLTQwNDEtOGRhZC1hM2U1YmNhNWM3OGMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6swmwvAAAEaUlEQVR42syYa0yTVxjHT9+W1wLWUopAQZ3iNYbhNWFZVsBL0KjLxPjFC/EyHEKWmBl184NR45aYqdunbQ4VQReJH7zFLHHegkEN+kVEMGEZNUOgUFraUiwI78XzNC05vLT1vH1b5SRP0vecnuf88pzznPM/RyWKIhrPRUN+/Frz4KPCfLcpf0wdg8Z50YwnGJVKNeoblp9SwDnY1mMrxDYfm9Ff78D2Eg9wh+e465q4uJYPHcFN2MqSdPHmrEwjmpZmQIZJCUjLxvkaB4eGTc4+r6mt27nC0uE47vIM1AmCcHrf1uU1v1yqlZWVKjKLKZJkAYBlTtaX5mZ/gjJS9FSDdNrd6EnT/6jd5qoQBP6P/cUrnwcD3bu5YMwUy0mSYrWaaShYMqu0qCCHGg4K/Bf6LFs6+xuWZZ+d/Ot+MYZR0fSlBdymZTUXivI/RdlZpogXLPQFHwlatvrExbvbaSBpABdr1EzVl+ZslG6cpDhTwQf4msCylcfP/7PkfZA0gGV5i2aitGRd1LYT8AU+cXaXAUM4yLCAOPO24IQomT8jPep7HvicmmbY+XP17c2QrKEgwwIyDLP7M5ytsSrgm1FrdofjCNnA89zCFH3iFyYZ2Sq3gO9Ug+7zI79fWQhR9BsdoFqtKZo5xRjz4w3GSJyoXx+KJSQg3iTzTJP1MQfMwGOoGMYcKoJBjzpYsHinn2vQJYyqt3TY0K26Rt/v1eYclJWZqrgtCY+BRcIcAhBMpEkSY+BsDZRbD1+g/oG3PoPf0WiDMTBgcrDoKdOD4ZR4ZG3ykgQkE1YloyrW5uWgifETkC5Ri9bmL4hKG4yB13uvbLmFO7U4PV5TopYdqZuekYr2bC30LRCeFxGphCJtc3m8+EDg/5O9D4qC8NDa4x4jf4Y5AXHYpJetSNs67X0Ii9pHsgE5jrva2u6I+TbT+tqOHLbOG/7MFakBf9ixqrHH1f/IanfHDA58d/e66098v7MxGFxIQL/aFXlu+M96rIRjVeqb2pC333MWdAkRQZE2i8UD2wpr2roc55ot1qjDgc9X7V3Vh8uKLksAZe2DwqD3zem6BgueCk/U4MAX+Ozpaj9DwAmykiQwzYdKv2rwegdKbtY1RwUSfIAvp8NefupgSQPsPEoi6IsiTpgLbrd717XaRtSkYLqhL/josXWXHy7fcJGAEyJS1IEogoODX6+ptlk7cu/Wv6yEQayOPvpsxf+9VvsC3X7cVNXa0mwm4EaiF+q+THUv9stxxm/qHytubtHGJ+wyJulyZ2Qmo2npBpSsG3VxR734hGjrcqJXHb3I7up72u92VR79dmMNATYSvQBcsHsx9cVdAukD3ftTxbyU9Cnr4lh2JcOo52JVYvA7duLT4d+ht4P3rK8tf/92bE8LMZXktApk5BQBEpABUCmwSqJIyH1NIEwMNa1KXxbINUlOE4dtmLAhv5F1nKSPSPtGI/vxSLJeeEnUpHpOlEQTKXo8CvZGR+vnffI2Mk0soncCDABKD2XHd8NU+QAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmOGVmYTNiOC1hNTg2LTQ2YzctODY5NC1mNjI4ODk4ZGU1NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDBCMTM4NDNEMTEwMTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDBCMTM4NDJEMTEwMTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkMjQ3YjE0OC0yMGQ0LTQ3NzYtODM5OC1hOTc3NGM0MGQ5YTYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3M2Q3MTQ1ZC0xYWRiLThmNDQtYWE1MS1jYzYyMDRiOTc4NDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4yAfWnAAACHElEQVR42syYv0/CQBTHixGjKaKLIYxENhM0Lji4GAeMurnozj/AIo6O4qJ/gM446KZGBuKiURdimjhJ0pEQFkVBEwb8Hj4TbA96pe2Vl3xIk2vf+3I/371Au91WhslG2U+lUhkKMdFo9FeQTQuBDbACFkAMTFHbO9DBM7gFV+DTjvMAGzLBHoqDLNgBqqD/BsiDHCiL9NCIgNNxcABeQNqGGIXeTdO3OfLV16wEzYIH6pkxB9ODfbtLvuKDCloE9zRP3DLm64582xLE/sUNiHiwmCLkOy4qaAKcgxkPVzjzfUGxLAXtg3kJ206CYvUVxCZxRuJemDEOnVHQHghKFBSkmFxBk7TpybZtim0StG5z03PLVIptErTq47m6yhOU8FFQ4l/60bXCuKbrulIoFDrPqVRKicVijts4q9vUQ+FebzOnjUajw18Ap20GC4sertKtW1C910usu1VVVUKhUOfZjTaD1XkJ2iNI+tQxT2DJmKBpPo6Uxhuyoo+CijxB15QDy7YmxTYJ+gBnPgjKU2zusmfJfEuimBYl/z3TD3ZVOZIo6Bi8imSMmqSVZZkxMvsCW6DmoZgaxWiK3jrY0K2BqgdiquS7bPdeVgLLLg+fRj5Lg95cy3ScHDpcfS3ykbS644uc9t90lZ4DJ7xx72NsPp7St1ny5Vr1o7scs2kox0xT25uhHHNppxzDDtdBBHlasAoMW0nvR4ABABxMp4w9hnbDAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmOGVmYTNiOC1hNTg2LTQ2YzctODY5NC1mNjI4ODk4ZGU1NzkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RENBRDAyRTJEMTM5MTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RENBRDAyRTFEMTM5MTFFQUI5MDc4NkU4Nzg5Q0U4NjgiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkMjQ3YjE0OC0yMGQ0LTQ3NzYtODM5OC1hOTc3NGM0MGQ5YTYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3M2Q3MTQ1ZC0xYWRiLThmNDQtYWE1MS1jYzYyMDRiOTc4NDMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6MRjK9AAACIElEQVR42syYv0/CQBTHwYjBUNFFmQ3dTNC44OBiWIwaFhfdNc4s4uioLvoH6IyDLqDGhbho1IUYEiabOBMWtRVNGPB7+CSkvUJL2ysv+RiSu7739X68e3fBZrMZGCQbZn/S6fRAiMnn83+CbJoEVsESmAPTYJzaPsAbeAF34BpotkfIoskgCzZBxKTPFJEEO+AL5MAhUKwEGbLQJwwOQAVsdRHDswh9UyFRYaeC4uCRRmbEwfJg3+6SL7lfQfPggdaJW8Z83ZNvW4LYf3ELYh5sphj5lq0KGgUXYNLDHc58X1KsnoL2wayAtJOgWF0FsUWcEZgLM/qp0wvaAyGBgkIUkytojJKeaNug2AZBKzaTnlsWodgGQSkfz9UUT1DCR0EJ3uEaNz1VZbldorASQVEUx22c3W0YoahZb+ZUkqQW+tqp3zadRe2c9kKtU9CnWadCoRDQNC2gqmrrtxttOmvHDrKamobziQorP+wZLLB11jlCZR9nqsybsqKPgoo8QTdUA4u2OsU2CFLBuQ+CchSbu+1ZMd8QKKZBxb9p+cFS6bFAQSfg1UrFWBa0s3pWjMy+wTqoeSimRjHqVm8dbOqWQdUDMVXyrdi9l5XAosvTVyafpX5vrgodJ0cOd1+DfCR73fGtnPY/dJWeAae8ee9ibD2e0bdZ8uXa6wfbntt0dVnTPcdMUJ933XPMlZfPMf+mUUb3JKsHB+1J71eAAQC4YppRCfko4gAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NWRiNjhhYy01MDNjLTRmZDAtOTVhOC1lMTM3YWIxOWIxZTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkQxNTE2QUM3NENEMTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0IxREFFRDQ3NEI0MTFFQTkyNTA5RTVFNkRDODhDNkQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjAgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDplY2JjYzM4ZS04NzVkLTQ4NzQtOTFjNy00NTE0NjM3MTliYzQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplNmFjZjIwZi0yZWIwLTQwNDEtOGRhZC1h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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAaCAYAAADFTB7LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpkNTYxZjQzZS03MDNhLTQ1NDctOTc2NC02NDI1NGIzNDA4YzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUQwMzc2MEVGREYzMTFFNjg5N0JERDhGNUU4RDYzNDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUQwMzc2MERGREYzMTFFNjg5N0JERDhGNUU4RDYzNDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MWIxOGZjOC0xNjU2LTRiYjUtOWQ4Yi02NDgyMTVlZTkzNzQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo5NzdkMjQ5My00NjVlLTExN2EtYTFkMi1iYmZjNGIzNzBlMDEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5BAxSWAAAAo0lEQVR42uzXuw2AMAwEUAy0LMBU9MxBTZahZwHWYQFqMJ+SKiJ34oRwkyaRXj52EnP3TDnyTDzkgWXK4GJoovuu7fjaCvbqWxyYSNQZpCGRSUJBorMYjmSUGSiSVQdhSGahhiDZN0kykn7VbfMSZIEH7mxMEojA0YAoHAV4x3k36QDROCiQgYMBWTgIkIlLfvJfM6wre/oNiAn7v51fB+4CDADx5DfWJ0NRmgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAkCAYAAAD7PHgWAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxZWEwZTZkNy1lYzllLTRjMWQtYWI1Yi02M2NlNjNhOGE1ZGMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEVFRjBBN0VGMkJFMTFFNkI1MjA5MzExNzcwNUREOTYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEVFRjBBN0RGMkJFMTFFNkI1MjA5MzExNzcwNUREOTYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmZTkyZDlmOS0xOTRhLTQ0NDUtOTYwZS1jYThhYTg4ZTA4ZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo1MTI1NTI1ZS0zOTlhLTExN2EtYjhmOS1kMTcyMzliNGI4YjAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4TKdKTAAAA40lEQVR42uzXwQrCMAwG4EV8BRFfxYF3fR4fYHspvXqZryLixYs3MXa7KUOa/KktmkIZDMY+2jRJiZmrksekKnw48OeB0/cX3bHLAqmXtXgFmzA55TydL4xscQ9sU61YwPUPQmMwCTIWF3tITJESnOQUmyClOGmagZAanCYPqpBanDZRi5AIDqkkUUgUh5a6j0gLnEUtHkVa4ayahRekJc6ymxmQ1rjRbgZBLuaz5u/6QfJLU+4YpP0G+p7XOx0w/Phbe09+q8sTg7dH4cDr3YEQkLeHqJpK7coriQMdmHM8BRgALyZkUcvZVOAAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM1MiwgMjAyMC8wMS8zMC0xNTo1MDozOCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZGZkN2I5YS05ZTUzLTQ2YzctYjE2Ny1lODk0MWM4ZTNmMjYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Rjk5NjFFNTU5NTk5MTFFQTk0NjFDNTdEMTcyQzlDNjUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Rjk5NjFFNTQ5NTk5MTFFQTk0NjFDNTdEMTcyQzlDNjUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0YjYxMjhmYi1iMmIxLTQ5NTctODk4MS01OGYwZTU0MjQ1YzIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiYTc5MGFlYy0yZWQ5LWNhNDItOGJlNS0yMWZhM2Q3ZmFjMmUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4uw9JnAAAB4klEQVR42qyVPUgDQRCFLyaKEKKdnQoqJIqIVhEbQ1JYKFr4V1hpIQgWdv4gaSxsBQsLwTRGOCGFIggRxUZI7EQERbAQCaI2KhZBwvk2vMBl2bvLSR58mVx2d2ZnMzvnyWQymoWiYJq2hb89gwtwCM5Vi8LhcNmzTzEnBHZARDHWQebBJVgA95qNaqTnQXBN5x9gDfSAetIL4hyLcO5gpQHEzo9AAKS4001wC/LkBmyAds4JcE3IKYAHJEAjF06CT5uNfXFOimsS9GEZIAb6wTuYA4bmLINz37g2Zhdginabu6tUYu6W5EMZIEp7rLnXieRDGaCZ9v4fAR4kH8oAee3/qqukTHOmUnWrNtoX1WDpJosLEwSjrHU3Gqa9Eh/ZbFaZQZJ2ETS4cN4Flvl93+6I0kB0vSawZ3VpJLUyc3HRHsGZXQBxaWZ5e8fZLQM2zjvBHfCb/odJp14kSnQMfIMJ8ARWQTeopbM+sM5s/aa1XnDA9l4mj+J9EGJv6Xc4okfu3Gv6rQBmgG7VrkuZDIAhsMtMfsEPx3Y5FqSzgpRJ0pyJz6aRpYmddFMVeqUgxXGPYRiuil6uc2paClI6rpEarTrSLY4rXq0AVkFyPq260vmOWAGvYKnaAYROSVF/AgwA245sdvjCoBwAAAAASUVORK5CYII=\"","export default \"data:image/gif;base64,R0lGODlhMAAwAPf/AKvV9ISoxQDK/830/z/Z/2Ky7hvR/7TT7Eex/xTn/9Dx/yWh/4LK/+v7/0Tr/3q77mrQ/8nZ5QDl/5rV/0fI/3Hc/3nk/4OnxIHx/7bw/wXP/+T7/4Pa/4u53Ay3/6PI5Wyz6Z7F5Hjw/x+8/4Ll/x2e/3rH/3ew3GW+//b9/6ru/wmv/+T0/1/u/9L6/w2x/5a1zW6p2Njy/2C8/7XR6BCX/wDk/3qu1qv2/wTC/wDM//r+/2HP/3Go0hSZ/9v6/3OdvVKGrrXp/7bg/3vX/+32/GLf/3bV/2za/0qy/6rm/wDL/5TG6wS1/0GW1+v3/wuU/1SHrzyNy4vn/1mSvZzL76TE3oO/64y84QDk/wDj/3uv1oGu0WOs5GCaxgCy/wmT/waS//v8/ff5+1WHrmCPs/z9/gCr/wC+/+/0+EyMviWT50CQzjOU30SNxgDj/wCx/1SHrleJr7PJ3G+au+fu832jwbPJ25W0zbTK3HWevlSGrV+Os1yMseDp8HKcvIyuydvm7q/G2uHq8LLI27HI232kwnOcvPr8/cra5uXt8m6Zuo2uyfn8/vj8/93n7luMsdjk7G2Yutbi62mWuMzb5l6Os7HH2vX4+tfj7LDH2vL2+G+Zuubu89fj6+fv9FaIrlaIr8HU4eXt83Wevfz+/3+t0fr8/o6vyVyNsn6kwsLU4fb5+9zn7nSdvYSoxMDT4u71+v3+/jyQ0UiLvkWNxfn+//n9/+j2/06Kufz///v9/127/3Seve/1+W/Q/2au5QCy/1ac1E+HsgDN/wHC/1OHr1mazM7q/0Ct/3ix3JbJ74Clw4vO//3+/0mh4/z9//b7/4a54FCJtOv2/bDW843y/zfq/3eozZ/B3KfA1afH4KvD17zQ367d/zzF/+/09xm7/7rP3/7//3q+8e30+e31+meUtl7e/5XL8+T3/yO9/5KyzGTu/4631tXt/3yjwT6f6pK52Lb4/4vc/2fg/6bZ/yqR4bjT6O70+Y/d/3iozY/I81OGrf///////yH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4ZmE3MTU0Mi01MmVhLTQ4ZjEtYWE5NS00MjBiZjU4YTQ0ZGIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjdFNTNFMDRFNjE1MTFFQTk4MTlFN0Q0NDNENzVGMjAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjdFNTNFMDNFNjE1MTFFQTk4MTlFN0Q0NDNENzVGMjAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmNWM5OGEyNy01NDE5LTQ3MjctYmJlMy1mODliYzRkZTg0ZDAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2ZTA0NGNhMi02ZmQzLTcxNGMtOTY0MC1lNWFjMDhhM2M0YmYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4B//79/Pv6+fj39vX08/Lx8O/u7ezr6uno5+bl5OPi4eDf3t3c29rZ2NfW1dTT0tHQz87NzMvKycjHxsXEw8LBwL++vby7urm4t7a1tLOysbCvrq2sq6qpqKempaSjoqGgn56dnJuamZiXlpWU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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk5NEY3ODRBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk5NEY3ODNBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTllZjExZS1lZjQ2LTQxMDMtYjEwNy02ZjhiYjAwZDg3OTAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4tuXxXAAAAeElEQVR42uzZIRKAIBAFUHC8lscwWTyaxeQxOBgaDEaa7PD+zAYab9jdQq61psiZUvAAAAAAAAAAAAAA/Jf5ezjOq+vL7tva9ALlqdpZlegtlJta6M1iiAEGB9hCtpAhBrCFbKEwyf4HAAAAAAAAAAAAAIYF3AIMAMlpekFYUthNAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0M0RDYzRjg5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0M0RDYzRjc5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4rHykJAAABA0lEQVR42uyZ0Q3CIBCGOeMAHcF3XlzAFDdzA1fQSVrDDLx3BDfAa8JDY1Co2pTD/5I/pA2UfrnjOFry3ivJtlHCrS4AIjIs/6RTzoO4XxcZq3IFDwAAAACQaduV5jWsPasJ1y2n0itXBRcpAF3k3m0pD7SZm9luxrzH0J6DJxYNIRP0S+tDe8cizugzBKVsuiiLAhizQ3INjMXcAqGGjQwAAAAAAABQNwBNv8zxbtpEqsOB+yRLCR4bKyX6GeVH1jxvARBCAPiiGnXOiXlprfVLD1iWL1hWeghR6kBzwCIGwJ8D2JIyjDQPfPSfCVkIAAAouxay0j1A1WchHCnXtocAAwCBsqK0C+rTzQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5NDU1QzQ5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0I5NDU1QzM5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Mvr0uAAAA/0lEQVR42uyZ0Q2CMBCGe8YBGMH3vriAATdzA1eQSdB0hr47ghvUmpwJKQq1gdCr/yV/SAilfLm73rWQc05Jto0SbsUBNF4u0CnyXV04lohUrOABAAAAADJtu8akvvq/luu9V8W3aq/W6yICgGtGaLelPFBHFrPdD/Me+XpmTywaQg1rNvOV98qh9EASRzxzZ01ZPymzAmgjc6CbO9RQyAAAAAAAAADFA1BwMld96A6TW4l30zayL+iPiZ1nFAAhBIDUbtRaK+ajtdZfPWDU8Gw0JxnpIURTG5oDkhgAfw5gclphpHkg6T8TViEAACDvXshI9wAVvwphS7m2PQUYAGkNn42mH5EBAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0M0RDYzRkM5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0M0RDYzRkI5REQ4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5yNHH4AAABfElEQVR42uxY3W3DIBA2VQfICHn3Cx0gUrJBskFHaDZwJ/AIyQbJBkbyAO2L3zNCNnAPCUunawwOhgTa+6RPEQYEH/fDEdH3fZEzXorMwQJYAAvIHK+4IYSoUPMCKfY4NhHGLuHnHX1Shl7wTud64kDdRGxwHyVgTcZXc07StpaNHAMWLIyLHYBf1LrADzNmHiK6UEX6b1ELkym70DdwD3zTcW+4M98Ls/k6VQvY3IPOlSla4GrpU3eInX4PEEjI9Y0jSH2xJO1LDAELY+oYqIk1ogi4omAbEyg91tRpdYvW2KUaxGOb/5VCc7mJD6h2OgM3DgvPdqGQN3KDTvtzbt30SAF484O/q5ALxBZwQicfxGUeKaBGaVg50rJKUYAkpYPtThH8pER+OqWWGSrNjaUc2Aep9x0Q/NciCwgUA13XZbPpsixHLdBOeMc+k23uLiRcaXTFQcwC/rmANqUMk5sFvCpSzkIsgAWkXQu1uVtA/PksxE/KZ+NHgAEA6e/1MvhAOBsAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTI2NjVDNzc5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTI2NjVDNzY5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz66movGAAABkklEQVR42uxY3W2DMBDGVQZghLzz4g5QiWzQTNB0g2SC0gkYId2g3YBIDNC88M4I2YDeVY50srCJbEPs9k76FMAG7rt/IoZhyFKWhyxxYQJMgAkkLivtvCLHPeDDcu8asCPnJyHEyVUR53KONxJQabQ1HaW2v/Kx5MS7jOAcsFg0B+wAR8D3iHf3uCd0DoSUPeDNsFYqvACJV8idc6xVCBU7AB6FEjjequsoElBnAZMnWBLbwmPkXhldEoOxL5Y1vdzmc+QAurexrOceXl9rl/o5COQq0eaQWmuAvWsjsxG4kGQzEZQO1j/CzzN5xzbKJDYpT/Zjb5DJdGJl+evs9AXY+NT/JRoZLacNCbd3ULwK9fzVgsr/xrvPxHoPD3wSywcJmcUIgPVrUobR6jjclTc2tig8IEeGN2Nz5k/Ka5xqjWxq0txYxoGDz7hx88zFfy0ygUA50HVdMkoXRWH0QIslPGK0qYeQmCqjT5zETOCfE2hjqjCpecBpIuUqxASYQNyzUJu6B8Sfr0L8SXlv+RFgANZJRw8KZDBWAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjczNTMwQzE5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjczNTMwQzA5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz42Krv6AAABiklEQVR42uxY3W3CQAy+qxiAEeA5LyxQqd2ADVAnQJmAbEA7QbtB2wlAygDwkmdgArJB8AlTuWmuAeSDM9jSJ6LL/fCd7c8GW1WVkWwPRrgpASWgBJSAErhvAsZVYqzGA8CMwGeN88g+Q8A7YOGGCRY43jvM5QA9+Kl2oM8a55F9ZrX3dWzdJXARCBFC34AXQB8OsA7w/AxY4/sueoI9hFg84HX1PrR+1sXsgWOslKhCY/L8xrVppyVUfCr0r1lre05tyPwRWfcKrs8ukQPH4k8OgGUe9RlySmjIHHCKM0eURH0+wTvTUIUsmArhmi1Zk4lSITjIeSIlQxPwRFeUCgGJj1PFICoCXDcenABKaJPR5C0xrILWgXNtBSSW8OmwwbERqQsGeyUTK4FDfA88LUQKt/8VgsASu8Y2a5vX9xCYc4XNr5DVvxaVAFMOFEUh5ksnSeL1QH5mR3op5NJDyLbVgUdNYiVw5wTymBRGmgcsRzeqKqQEVIUi732kecDevArpT8pr206AAQAawGQVQVcDngAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTI2NjVDN0I5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTI2NjVDN0E5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5JcfabAAABbUlEQVR42uyY303DQAzGY8QAHaF9zksWQCobZIOqE1RMQDYoTAAbABM0UgZoX/IMTEA2OBzJkawoTiJyJ87gT/pJbeKc+sl/7lJwziWadZUolxkwA2bADJgBM9ApQ04dAJAMIcUx5cgTckYc40zX114dtEcJYuuYRuIH49g6JzeuLyRj8YsIUUJvyB7ZIEDcIh90f0WZiDYDEnkvE9FmYI4ajVPowD4/+lr0eqxUhFvZjHXXbNq08Tv23ANSBO+BuRJ6oBCmT+6r9kP3QDtxSqJh0+cFOca+DwyxpQx0KrRNoTYTd+z7PWVE1RR6/sEwiMrAKsSiIQxIh7VjbyMrg+4DC/SOXIhPurbrGdsH38gWKhNqvKFmfg1h4EKnxilNxW0EA6WvsuEC+2vRDHjqgbqu1fzoNE3FDFS9F/HYqLSXEEztAzfWxGbgnxuoYpow2jIAPk6jNoXMgE2hyM8+2jIAf34K2Svlb+tbgAEAanbJtxqAB8IAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjAwM0Q5Q0M5RTc0MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUVBRTU1ODI5RTczMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDg4YTdkNC1iOGMyLTQyZjEtYmNlMi01OTRiMGMyM2IyZDciIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6s34cNAAABbUlEQVR42uxYyw3CMAxtEAN0BO69dAFE2QAmADaACYAJGAE2gA1A6gJcemeEblBeJEeqQkrFp20MfpKVNnGDX2I7DqooioAzegFzCAEhIASEgBD4bwJ986CU+mgi+0THfCGaPSSkrhV0ro0RaABHSFJ6D9m4EFZ/YxnfSgzMIWeS2KFbN26Mn6BZ0+uptRgABqVVc2133bg2Pia/11jQNxMWWcgK2gMC9sAtje7Ita4wfsHtHFhSjOSQaSfngIWZI4uMKnRjWn2NKVb/5gOB+QtznKnVh1SCWEgqSM/0GAhu2iCwIoPsXXERC0s7ET/5LfNtKwS08RerLwk8xDeCWBdRCq7xIOjflvTG1CfVqBDwCcrU8UhxA6pdTBDnjlqoctz1D589J3TyxgiIC3V9pcyyjJXhURT9ZhZKdTx6LCn3GFB1tdBQspAQ+HMCqU8ZhtsOvHVXkCwkBISA37VQyn0H1M9nIblSdo27AAMAhLPKnh5WTKkAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjAwM0Q5RDA5RTc0MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjAwM0Q5Q0Y5RTc0MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyNzRhODQ4NC0zNzc1LTRjNTEtYjRlMy1hMGU3NGMzNzUzN2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4GhoT6AAABW0lEQVR42uxX0Q2CMBBtjQM4Av/8sIARN8AJwA10AnUCR9ANdANNWIAf/h2BDfCaHEnTFImaQg/uJS9tKJC+9u71Kuu6FpQxE8TBAlgAC2ABLGDaAuZNR0r5148sJ/oCeMFWYQ8snAlwgBswNgSRCaGjMXn3OQAhkAEfyMgSIh/HNSTAA/bvveUAINBWzbbdXeMKEca9wha/Sai4kJ60VyQpGz3jDhS4+nTOAciJHTQZsAJuBjkHDKQwKdNFVi2Tj3D1BU7+5YOA7It/PLAtMMnjFtEpjh37EGA7NdMWYQvNgT7Za6adEc4FFFBaPI1QiYWH+DuJJUJ1LTxpr67xGVejLMAnSK2OD5BNEldGEneNi5b6KdBstnIpgENo0CtlWZakJh6G4ThdKFf56DFz6jkgu2qhJbsQC5i4gNwnh6G2Az/dFdiFWAAL8LsWyqnvgBy9C/GVcmi8BRgAkFbNjxCh6DsAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjczNTMwQzU5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjczNTMwQzQ5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5sG5gfAAAA5klEQVR42uyYsQrCMBCGe9I+TXafo0M3R32NOlgcfBEnB5/DPfoqgkO8wAVCqA6Kctf+Bz+kIYV8TY8PQiGEynItKuMFAAAAAAAAmDdAnQZE9HahVmOXJ9BwBs6Vc5NxY+IEpHrOOnuO4ztnnya893/ZmHPuI4BuZM0qB5A6c5Y/2vuF01puYvrmFzpxNsXcceS9VmsPDPIFugzoYKmJH9LIPUQGgJkCTN/E2gFgYpgYJoaJAQATw8QwMUxsyMSUbtzkZi427LYw8S4KTuvNXAnwsrQC1No3CBMDAAAAAAAAJg3wFGAABoJDnIH7pgoAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTI2NjVDN0Y5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTI2NjVDN0U5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4TQNV+AAAA0UlEQVR42uyZMQrCMBSGG7Gnye45OnRz1GvUweLgRZwcPId79CqCQ3yFVwihU0XJK9+DH5KQQL7SxzfExRgry7WqjBcAAAAAAAAALAqglvSSh+Sp47pkgHU27yS7ZD6MX5LTuBBC+MvFvPezANqJPdsUQOsm2fzo7ndJY7kH3De/0FWyz9YuE+eaUnug1y/QJkBnS0381kbu8AAAmHihJi4dABNjYkyMiQHAxJgYE2NiQyZ22RvZ0LCHzMRHFVyR5XjkAwAAAAAAAAAA5tdHgAEAzSI3m3N0x3oAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5NDU1QkM5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjczNTMwQzg5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6CdTepAAABbUlEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoB0a2B1iwCUpJScUAqWog5gdizWfPnn0cMh4AOr4LSMXg0nD16lW6OExbW5vsGLgExFOBWA6IfXHo2wDEZjRy+ykgDiA7BoDJZQk0JmYOUKpgpDgPEAECBkseGC1GBxowktqhGWyl0GgSGowVGajsrwJieahQK7BonTqUYqALWh9IAanNoCYF0FO2QyYGgA7XROIKoNGDribGmQegNTEo5B8C8aEhVRMDHb8SyfERWFqjg7cmxuL4h0OtGNWD0qBS6DjQQ8+gJdOQzMSjFdmoB8ioiUHdyWykmrgM1skZKjEAcvhhaE0M6l52AT0lP5QycSuaEKgO+DBk+sRIDTpYn3gqnYdVSKqJ8XZokIZY0oGe2Dzoh1WADgYNZIEGtOSBDg6nxOAB61ICPQEqgXIYIKNyg74/wDg6yTfqgVEPjHpg1AOjHhj1wKgHyAcAAQYAkdxwaOAdRQAAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTU2NTZBNzg5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTU2NTZBNzc5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6pEd37AAABQ0lEQVR42uyZsQrCMBCGrbjX2UFnKTi6+QgFNx26O/gIzi7dHdxd3IS+gQ6CY6E4uzjrE9QLXKGEKLXVNgf/wU+aQiFfc5c/aZ00TVuSo90SHgAAAAAAAAAAmCIgXUl3kmszQMdwL2QAYyRJUsvAPM8rDRCTNqQ+yX/z3IE0/tPYL6RplRnYcbttKCucqilUJKa2FzGWURsAFqQe6YkZAMB3AGrtP7MLKy2lAYTcqvyPSCvSRNJWYpi77mqtdU78qQa2/OZvpKM0J97nBj83LKVWO7E++Ju0Ih5xO8itRr7UIoaRAaAEQKA5cSANQBXviZ04ZmceSCritdZXHvCQ5sQ+p8+Iz8h1ngl+4sQRK+TdaMx965xYB3B596lyfmZ6oOj3mqYAnrx1yFIoq4nI1iJ28JMPAAAAAAAAAAAAlI+XAAMA8xY9SX7X9MMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5NDU1QzA5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0I5NDU1QkY5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5sO5FPAAABkElEQVR42uyZu0oDQRSGM0ZBEgX1DaxSBLtAWltbS2tBEBsLGx8gYGEVUqW19xkUVBBfwMbCwsLGyoAXXP+FWRiWnd1zsucIi+fA1yT7L/NN5kpckiStJtdCq+FlAiZgAiZgAiZgAiZgAg2uxfwHzjn2S9Ij+bw5cYGCWgab4AM8g2/iu+fN8XshJKgumIBZ+pjnDZyBTklPsnJ1iQksgeugAXnuwWqBADunJbBf0oiMiwIBdk5L4JLQkB/Qzwmwc3WJLaPrhOmTLjt7QjnxfeCJmO8L5cQFpv7nrqoNoZy4wB04ITRmJpRT2cjOwQM4AD3wBdpgEDzzIpgT38hiE/A1WFGOiEeCaE5rGY3Vmu/RrCE9okA0p7WMxuowGHZX4FE5JzqEtv3BLNuMhsRTZWnur4bQLngPhsCIeCyuzGkLrICx77n0y09w6idlmQA5pykw9Of4rPduwBbhYsLKaQoc+wbcgh3GzYqV0xRox3quQoCVq4vLj9+m3Ymd/UdmAiZgAiZgAiZgAv9Y4FeAAQBvfbkSUuJTkgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTU2NTZBN0M5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTU2NTZBN0I5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMmUzMzMyZi1iZjJkLTQ2NGMtOWFhYy1lYWNjNzkxZjZiOTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7wOoUKAAABZ0lEQVR42uyZvUoDQRSFM/6A+IPoG1gJBjvB1tbW0loQxMbCJg8gWFiJla29D2CloILYWdlYpLCwsTIQFcczsOAQHJ29nkEWzoWvyp5hvs3svQnrvPetJtdQq+ElAQlIQAISkIAEJCABCfxfjWRcMwbmQB90wXvm2tZcvQp/aBJMgCPQ81/1DPbBeIGcidQHo+DCp+sGTBFzdIEN/3udEHN0gdOMjXyANilnJtWFZjIeHwfWSTl6G33IzLdJObrAcWhQGflZUo4ucA12MzbTI+WKDLIDcAs2wTx4A8NgKbrmkZijD7LvcOAp6ijbhXPmLpSq6YFOc1Y4R/8xtxUdu3NwXzhHPUIroB8No+XCuT9N4kHWwEt0hvcK52gCk+CwunOhXkGneihL5KgC4avuRnfvEixmLGrN0QV2qg1cgdUai1pzJtwPb2jC8FkAdzX7gjVnKqdXTBKQgAQkIAEJSEACza1PAQYAq/Ivr+JOanMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVCN0Q0RUM5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVCN0Q0RUI5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDg4YTdkNC1iOGMyLTQyZjEtYmNlMi01OTRiMGMyM2IyZDciIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7feN3EAAAB+ElEQVR42uyZOUgDQRSGs15YqHijIgY8EE2hmNrKyk6UVIIIgmBlK6iVrdjZaSNYpREEBQuxsLHTIoWFoIURoxFNIV64/gNvYRg2m03WkBd4Dz5mdics79+5/tlYtm2HyjkqQmUeIkAEiAARIAICRZVTSSQS7JONRCK+eiAGUsBmQhJM+h1C1WAHtDF68Z1gN585YDEcPZZfAd9gATwySv6ecvKexFrEifJahZyYis0GfuhBfL90AnJEJWjwaH+llYOFgB6wAsZBGNT7eF4jeOMgoAacgj56q3XgV0suW098crES01SOgCawCq5AMxGl9jNa4hw+Sj6JnV0bTIA7ulZvO621t1CZ5mrm1rXkVbSCZ+26ncoXlxXov61IXlYiW4xSUvr2ruLJSL4YViRvK2FGFxgzeiDsMYSKYUWsIAJi9Lukdi/qJgCbYDGsiKeVyCVALZdLVNeT6tc2LnMnVzakw1idgtANjgoVsAgGqW5Oan0oqZjjdqQcAltU/wI3WluGymXaK4bBDDcB86CW6ifgXWu7oLIXXKoTqXaPjYBzsgYq8Q2jbQ3cUl1ZjD2wycJOa3FIhs4213vENRigCZZx29C42OmUR9uP1gt8DjRkBbYZHewfaB84lq8S8lVCvkq4dI38yScCRIAIEAEiQASIgMLjT4ABADQhm0ULI9zKAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVCN0Q0RjA5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVCN0Q0RUY5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5NDg4YTdkNC1iOGMyLTQyZjEtYmNlMi01OTRiMGMyM2IyZDciIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4E31EtAAAB8UlEQVR42uyZO0gDQRCGcxrFQsU3KmLAB6IpFFNbWdkqaUUQBCtbQa1sxc5OG1tLQcFCLGzstEhhIWhhxGhEU4gvPP+FCQzL5bwzRicwAx+7d3uE+W9vZ/+7OK7rRso5KiJlHipABagAFaACiopovpNKpcQnG4/HA81AEmSAK4Q0mAj6CFWBTdAq6MZ3gK0wa8AR+PQ4QQW8g1lwKyj5a8rJfxGz2CHKqwr5rfSw8ZcVLRry+kpQ7zP+SJVDhIBusAjGQAzUBfi9BvAkQUA1OAS9dFdrwSdLrtBMvEqxEpPUDoNGsATOQBORoPEjKnF5Xv59EefXMhgHV3Rs7naWjTdTm5Vq5lZY8iZawD07bqP2waMC/bYVCWUlCsUIJcW3dxN3VvKlsCKhrYQdnWDUmoGYzyNUCiviFCMgSdel2bmElwBsgqWwIr5W4jsBplzOU58n1cc2LnsnNzak3apOxdAF9n4qYA4MUN9e1PxRMjEt7ZVyEKxT/w1csLEctQu0VwyBKWkCZkAN9Q/AMxs7obYHnJoCxM6JEXBM1sAkvmqNLYNL6huLsQ3WRNhpFrtk6Fy73iPOQT8tsJzXhibFTmd8xj7YLMh5oSErsCHoxf6G9oF9/SqhXyX0q4TH1OiffCpABagAFaACVIAK+Hl8CTAARE6bxIgaUvEAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0RkM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ5MUI0RkI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7lxtDfAAAByklEQVR42uyZu0vEQBDGL76wUPENinjgA9EUildbWdmJkkoQQRCsbAW1shX/Am0Eq2sEuyvEwsZOixQWgld44OmJWogvjN/CBIaguYh4mcAM/NjdzBH228fsZM/yPC+VZKtKJdxUgApQASogXqvxK67riu+sbduRZsABReAJoQCmoi6hWrADOgQNfBfY/c0esASuHiuqgHewCG4Edf6a+hS+iZllCQ2jFQ2jvk07c39+6UF2Pz4BZawaNIX4Hyj0iRDQC1bBBEiDxgjvawaPEgTUgSPQT6PaAD5Z536aiVcpm3iGylHQAtbAOWglMuQ/phjt8xL7JvbTDjAJ8tQ2o11i/jYqS+KiENlGoN0O7li7k8r7pJwDY5Tg8fzE2G0SBHSD8cAMpKUsoSgCHPpdgT3LJEWACZfLVOcJ3gA7uEQLWAJDVM8HNjVfSsbmpQkYBttUfwOXzPdE5QqdFSNgVpqABVBP9Rx4Zr5TKvvAmfmkZs/ECDih1MB0fDPgWwdXVDcpxh7YknSQGTukhM77Jt5fgEHQQ8sptgOtXDpdDPF9sFmQk0pU8mPkv/aA3gvpvZDeCyXoXsjSfylVgApQASpABaiAGO1LgAEAajeaste9Eu4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2NkY5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NkU5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz70cgaEAAABwElEQVR42uyZu0vEQBDGL3qKhYpvUMQDH4heoXi1lZWtcq0IgmBlK6iVrfgXaGNraWchFjZ2WqSwELzCA09P1EJ8YfwWvsASNCbNZSIz8GNnM+HYL7s7O+w5nudl0mx1mZSbClABKkAFJGtZ33FdV/xg8/l8pBkoggrwhFAGs1GXUAPYBd2CPnwv2IuzBxyBq8eJKuADLIFbQYO/4ZjCN7FlB0TTaE3TaFiqimu1TMnZmO/Xg9aQ+CNTnwgBA2ANTIMcaInwe23gSYKARnAMhvhVm8GXNbjfZuJNyiaeYzsB2sE6uAAdpMD4CXO0z2vim9jfy2AGlNg3X7tqxTvZVsVlIdpmoN8F7q1+D9uHtJwDkyzw7PrE2F0aBPSBqcAM5KQsoSgCinyvbD0rpEWASZcr9O0Cb9g6uEQLWAaj9EuBTW0vJWML0gSMgR367+DKij2zXeVZMQ7mpQlYBE30j8CLFTtjOwjOTf1mPRMj4JSlgRn4ViC2Aa7pmxJjH2xLOsiMHbKg837I95dgBPRzOSV2oP1VTldCYp/WLMgpJdJwP6T3QnovpPdC/+heyNF/KVWAClABKkAFqIAE7VuAAQA7zJsxG/IKEAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDBFMzlFN0Y5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDBFMzlFN0U5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YQPSwAAAB1ElEQVR42uxZu07DMBRtItgZQAIVwcTUshB+gIoOfAAjDHRhBn6j7CDoACO/UMEPUBaSCSbEsyDBzhBOpFPJsuIkFOHE0rV0dKP6xjnnXt/Edr04jmsuN7/meBMBIkAEiAAR8Kc2MbqIosgJwo1GIzcDm8AQiCuEZ2CjyBSaBE6AmYoFfg44LVoDXkVnj1dEwDfQAd4qRv6JvMxFrLQLQl6jTghoNpuzzgoA+QWYF9jb0j9kOUSnYLrAfhiGX0rXqlJkWX7lZYCk+sAOcKR1r9Be0x7Tr8/7yhWgkA+AuySymssoAze0e8A9/a2I8H9BvoVp8ai5BWoG2L9Gfysi/HHJw2cRZhr4QN/D6Hf6tWyJ8MeMvBr9gd5hU0RaBrp8aLIK3DKQTyvgNBHbHCfguFYEHDCqyeLpHJGrG+7VC1jP5DzMGccZcNz/F4DIfcK0+dAl4MogIjBlgOQveX8yTpvj2iliPmzdJEIp4He1gG2Tz3yN8ktqEhGkTR/b5HM/ZCkiDnOmT9cm+UJLCUVED9jNygD7e7bIF17MUYS6I6qnZYCkO5VfToPocrLR1gvYqf0AyL9WdUcm50JyLiTnQg6dC3nyN6sIEAEiQASIAJfbjwADAGFgC060in8aAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTcwRDkxNzQ5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTcwRDkxNzM5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5jFJBaAAABy0lEQVR42uyZP0sDMRjGe4fuDgpKRSenw8XzC1js4Adw1MEuzurXqLtiO+joVyj6BayL3KST+F9Bd4fzOXiEEJK7s2JM4A08vIWkyfNL7r0maZTneSPkEjcCLwIgAAIgAALwqzL2/SHLsiAMJ0lSuQLr0AuUe6QHaK3OIzQOHUFTnk38DNSrmwORp09PVAfgE+pAz56Zv6cvexIr5ZSS12gQAHitTQcLAPNzCI+IV14DwOAE1CuiVrWsJFlZu/8DoJkBtAUdaNVLjBeMh2w3cAUR1zSfQtfQrmUFLhl3oBu2dwIR/8B8C/ulO61Zqq4A61fY3glEPKp5tJlHmITeUHerbAqLdi1XEPGIM6/O/lCvcAlhWoEuBy12gRsW86YENkFssp+U/ToB2OOsFpunE8xc0/JdPYH1lZxFOGY/Q/b79wCYuXeENgddgM4tEKltBWj+jN8v+mmzXzdJzMFWbRBKAr+qCezafOlrFIN+lECkpsfHtfnKHzIDxH7F49N1ab7WVkKB6EPbZSvA+r4r87YDjQ1CPRE1TStA0x3vt9MwulgctPUEDuo8APNPvp7I5F5I7oXkXiige6FI/mYVAAEQAAEQgJDLlwADAOLvBdKwILkPAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTcwRDkxNzA5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTcwRDkxNkY5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Dkbw7AAAA1ElEQVR42uyZQQrCMBBFOyquvEmuoLcSPIELwVvlDDmJuBEkjpCVhqatrc3QN/AZCF30ZZo/QyMxxsZyrBrjAQAAAAAAwLIBNrlFEfla++zYIYRZX9w5V6zAWXVL2eQndFLtVMeWZ/y7OH+U7wOwTnlb0YZLpzPQIw64EAALBxjThbz1CshonRgXAgCAWVxokDPVXoGiM+FCAADALMQsxBkAABeaaBZ6pvyo2ZnaAC6qu+pacCGZUPsiYe6atcvP3Voi2wcs3R1jowAAAAAAP8VLgAEAac6PGpYu78kAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTcwRDkxNkM5RUZGMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDhGMUI1MjI5RUY4MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4NDUzOWViYS0zOTQ3LTQ4MWMtYTJiNy0zNGRkODdkMmZkOTIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6LeXsjAAAAu0lEQVR42uyZQQrDIBBFtSld9SZeoblVoCfoIpBbeQZPUroJBDML15EWtRl8A5/ZKPgc/Q5oY4xGc1yM8gAAAAAAAKBvgOuvE0MIf124cy5bgZfonbLKI/QU3UXTwRgvig3lvwEYUr6daMNtsTuQYsSFAOgcoKQLee0VsE1fYlwIAACa9EJeewWyzoQLAQAAvRC9EHcAAFyoUi+0pbye2ZmOAGbRR7RkXMhW1CNLyDcrAAAAAAAAmmMXYABA54YbTC7YLwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2NzM5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NzI5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3ZDYxNTc0Ni00OGIxLTQyZGItOGRkOS03OThiZjdlZDI5YzgiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Zo5FTAAAEA0lEQVR42uyZWUgVYRTH772JBi5li0gEmUsISRBGWLgEEeVWLy0UCVJUQuVTmUULKWHYk1QPRlHR8uBTi6X1EHptIaUiMsKysgWsaK+Hcu3/wX/gMIzTjDP3mnQP/LjfzHxzvnNmvjnfOd/1Dg4Oekaz+DyjXEIOhBz43x0I0xqLcwv/KcOuNVy258AwJA7kgRyQBhJADK99B12gHTSDRvAuoG/AhmSBMrDE5P5JZA4oBv2gAVSDlpH6BhJBPfCDApvOj+E9fupIDLYDq8EDkC/ODdKgHSATxIMIEs9zZewjl/t86loTrCm0F+wXxwPgFKgCnUPc857cAodAMtjJ6eTjt3KO5ysC+QZ26Yx/CTLAehPjjaST92RQhyZK9+5AOaCmzQFx3ATmgjYH47VRh1+cq+RYrjowHdSK4+tqqQAfXZi2SsciFerFuVqO6ZoDh0E02x1gOehxMfr1UGcHj6M5pisOZIpoo+J3EfgRgDXoJ3X3i+iU5YYDZaJ9Wjfnw0EN+AQ+sx1uov9v/dsY0TTZ5tQBlR7kijhfpbuuVtJSMAHEsm0WBq30PyjWiTzaMGwH8sTa4DcIlUUGOjaY6LfSv1NEpTDaMGwHckT7ahCTTznWAicOpIn2bYP+ZwzOHTfRb7X/HdGe6SSVSBDtZ0N84F4xNZSBe0z0W+3/VLcGWRavtq3CguYXkzEPf3uCNIVUZPot1ogIqwWNfgp5R3tNLBes2CDaETuEDbYdkJliShAdmCHaXU4ceCza84LogByr3YkDTbrKSS9juRCttWmg+rZWgKVDpC9y8Wp24oAqvPvYzmbFJKUcHGM4PCIilplMASqk1IGLYKPuerJI4vrsLqA+g1KwUTy1ct31SNHeDB7RoMkGRfxslpNPdG+z1+ChaHY00gZH2Wi1aBdza0STGl1+lMJi5AN4Ax4yx/8G7jO7jBH9j+qyz3SOYTT2sB1Q+zZXxJNU0yWKx285aJ3BfVPBLEaUSN015eAysEXk/0rnWY6h5UMtbjjgYdqrxeNUGhwudt1WgYWc270m+tX02Q6SwCXdyltH3Vrs3+rmtsoLUMKtDw9rhAtgJSspJTfIeBbq6g1M5PVuTqHXBrqjaHyuOFfCMV3dFzrPJ1chnGhjCL0n+n1l0W9F0jltUsW5fRwrIPtClRzAI6ZTKzhB56xKEu9pNTDe0caWlZ25CkaeWr5+5fQ6Ro+b/A5U7fAcfBG5jTJ6PijkRoFPV9BvcvLk7TigTae7DKP54u1lE7vVVykddj0bNRM1YAHLznoRDq3IAO/J4QNwxXg7b0CKn8TRGO0PjmlgHPuohewVEzM/U5TuQGSBTv6hUYvTSTJi4g39Ux9yIORAyIERlT8CDAC0w+Qc+vS71AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2Nzc5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NzY5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3ZDYxNTc0Ni00OGIxLTQyZGItOGRkOS03OThiZjdlZDI5YzgiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7DkrK2AAADOUlEQVR42uyZT2gTQRTGEyupYK0WaxakoLbRi71IjWA1rXizQm8KqR56UQSvKkW0eBS8KHhsT6KgN7WN8WTiQW+CWI0iaNVDLZpCkx60+ee38BYew2STycyuBHbgR6eZt/Pm25mdffM2XKvVQu1cNoTavAQCAgGBgDYvGzWujYIxMAoGwW7QTW0FsAgWQBakwU9PFNjvAUUS4Cko1ZovZbom0YI/V1SM+8FcTb/MUV++CkiCVWEgVZAFV8ARYIEIYdFvl8mmKlxr9zXhl4BpwXkFzIKYgqMYXVMR+pr2WsBVweEXENdwGKc+eLnmlYCk4OgF6DUw7b20rHhJmhawBxSYg+e0tk3tHnZfadZ/gXwaE8B3m49gi+ntD3RR33x3MiLgqLB/xz0YPH8mysxfwoSAJ6zDWcnU3wF5sEL1SIOl0sh+hvl7rCsgyt6wVclWeVvyYrrp4qAZ+xh7T5RoDC0LmGSOMpIL8pIB5V0cNGufYe2TKgLEaHSU1VM+BpXc1zGdcHqQ1V9J7O9Jfptx6b9Z+9esvl8nGv3FptJyeShXFB/iRvYW8/tbZQmFhbTKH9BJdfvvuk9LKAL+Un2djUF5CYXb/UhZZPUeH8fRU2cMygK+svpeHwXsY/VFHQHvWf2wjwK4rwUdARlWPymx3wTOgbOKA7SfrVNgvE4mZIzVszrbqNUglLjBtru7oLOJrW6nEN1ekIQSFRZKWDpv4mVKgTh3bUpo38zqF8E7cB7sEOw6wAFwC+SE2SwJtlNsVtI0Bq20SkIIpw+ytj7wuU624Qd4Cz6BtTo29qx1sP6GvAinxQNNjg4fTls3eKiYSlkG45IDTY7ZzJs8kfULR8qUJAQ4TmeHdZeBfwCXhBvghBgp4UjZUq4o7PKFZgLcZ/8/A6fBmmC3DRwCfWA7tS+BN+C7pN8u8AicYL+dAQ+8SC1eF+5ojtZtq0fIIWHZaOeGdBJbAwqOBv5XYsvBTgMWJUKytMaHJanFYWrLSgZe9DO1yO+iieTuvOLsGRPgMEKp8rLCoCt0zYjp1ExY4ztxlN6wzgeOXWArta2CbxSYvaQdbMmLKFBHQPCNLBAQCAgEBAJC/wQYACBotyE0lg/PAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMEM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMEI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4vbCgLAAACcklEQVR42uyZTyjlURTHf28wfgvTRMT412TBkJ3/YxALCzMrf5umWY2SsKBQ9tMoGVYslJpCsSBWosiMhQUL/0KZqVGjKUTS9IR587056nm953nv/vl5zT312dz3Xvd+77nn3HPPszkcDiOQ7ZER4KYFaAFagBZgrQW7DszNLzyIhZUUF/kngGMjUsFzEAFCwRk4BLvghzIP+GBx4C0oBgXgyR3f3QfzYAaMkzjLYiANjIKfoAuUeVk8s1jwDnwhMZ3kKaUCQmjiVVANgvyck4ltBzvkQSUCosE3mlhU3ESCEdDHsRn3EhAFvoIcSXFYD4b9FeFNwGMwCZIlZ80a8FGGgA6Qpyj1t1E2E5ZGn9GZv507Y2MM0zS5V2u3241f+7+dh2ygB2SK8kAdMOVtuM3dYAZ4JcoD1e4GXXZNhlWCRV4PPAUvLCqD8kR4IMGTj32NATdn3ZsliogBU/JZv8tCRXjgyNMPFMTAoQgPsELt1KIY2BDhgb9gFlSIvAfuGQ/Tou6BAUW539nYO2FM1D3AHh9LIFdhDPSCE1EecNBtbFd09rfAJ9HF3BqoJTEy7RhUgT8y3gOsVm8AV5IWfwBKwabMF1k/eEOTibRlKh2WVbyJp+lBPwguORfOsk0reAm+q+xKsFvyA/WAejk8wrLfFLiwqi/EmlXNoAWkU28o27hubIVTLcV2OQmEeai1hkA+rwjeDgPLTuuEp8qSdR1eu/ksC3wGTSqPkK+2R8FfTvWVqzWC9w9ZwI1NgBRKx9sun3UbHH2hYEOdndNx6qO3byGIN64bv1eBIMDZVgj+8lD/T6wFaAFagBbwXwv4J8AAcnZ+CvseI8sAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMDg5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMDc5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz52R3D6AAACeklEQVR42uyZS0hUURjH7+SULopIEvGRlImluDMfkz2YFi7KleWIRKsEERVsoBHci6Kks7JFEAgW1KLQlSQ0VC5cTIseosKMoos2GUVEGDXd/of5hJlhxnmcx52h84ff5t6Be/7nO993zvnGZpqmkcs6YOS4tAFtQBvQBqyVPfbBS9+rrBjYFeflzAxwTEQNOAkKQT74AXZAAGwoi0AaKgNdwAkugiP7/PYT8IEX4BmZsywHasETsAUmwNUkg2cqBTfBDJkZo0gpNXCQPvwOuEBeht9kZofAOkVQiYFi8IY+LCpvjoPHYJpjMlIyUARegyZJedgLHmVqIpmBQ2AOVEuump1gRIaBYeBQVPo9VM2EldESWvNRGp/0GoHgJvdoq06fMjzuwchHNjAFzomKQA8okDXdpmmL97geXBAVAVfcOEfPmgzdAEu8ETgKzlp0DHKIiMAJWpMGbw7EWevJVCEiBwokr/X9lC8iAl8S1jr5ObAjIgLsoPbdohz4KCICf8EiuC5yH0gxHxZE7QMPFNX+SLF7wlNR+wC7fCyDZoU54AXfREXApN14V9HaXwWjog9z70E3mZGpr6AD/JRxH2Bn9T4QkjT4z6AVrMi8kd0HbfQxkfLT0cGv4k68QBf6h+AP58BZtbkLzoOgyq4E2yVvUw/IyxERVv3mwW+r+kKsWXUHuEEd9YYajXBj6xidpdgsV4LDCc5as6CF1wRvh4FVpw9EopMl6zpci/OuAUyCAZVLKF1tU/K30/kqVv3gVjYb2NNzcIbK8VrMu3s8fSG7oU6/aDlN0933Eig3wo3fUC4YiNRbgls2/T+xNqANaAPawH9t4J8AAwDcFn/zte1DQAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NzE5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NzA5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6gRaM+AAABDklEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoBygCLDDG1atXB71jtbW1iYqBUCB+BcT/Bwl+BsSexCYhViCeA8SigyjgJYF4Lil5gHEQph5GYj3wG4iTgfjlIHL8U6ib8GdiJLAaiodWKdQ8eeWAOqQ2N5wyDyCBtQPhAUIBCPRgMLEeYCjNjAoaTMmke/qydcO/JsYFLly9zfDx8xeKLeLn5WEw0FYdum2h/wz/ByYGaBFqo61RWuYBWqV1usUArdL6aB4YkfUAPfIDTWOAHvlhNA8MyjyAr/U3FDwQPJQ6NIywCY7RcaHRcSGcYHRcaKDB8B4XYhydZh31wKgHRj0w6oFRDwxlABBgAF6HjTO9JXa9AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NkQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NkM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6tYZtmAAABCklEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoBygCLDDG1atXB71jtbW1iYqBUCB+BcT/Bwl+BsSexCYhViCeA8SigyjgJYF4Lil5gHEQph5GYj3wG4iTgfjlIHL8U6ib8GdiJLAaiodWKfTtL9uAOoSL+RdlHkACawfCA4QCEOjBYGI9wFBVXhQ0mJJJW2ffuuFfE+MCaZm5DAoKihRb9ODBfYZZ0ycP3bYQ40DFAC1CbbQ1Sss8QKu0TrcYYBxsMTCaB4ZyPUCP/EDTGGAczQMjNQ/ga/0NBQ8ED8kODbkGDMY8MDouRGUwOi400GB4jwsxjk6zjnpg1AOjHhj1wKgHhjIACDAATzaFsMYlGBIAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFEQTJDQjdBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFEQTJDQjZBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7zNXDpAAAB1ElEQVR42uyZPUvEQBCGE+8KTxQtbA4FS2386C+NVnel2thrbS8I1tpoZ68/QrTVzuYqRRSs/ChsFK9Q0XUWJjIsyV6yN2s4MgMvl51JwjzZnd1NLlRKBf1sA0GfmwAIgAAIgACUG6Ca9cQwDFNjRa7m1axJGjYJGgfdgjo5rnMy6wPSwVgWGzPa2/pS0CG2h30DpClLDUSgO9AS8c3g7w2oAjoFbRYyhrr0gE7+DZ/2LvFfoq8JWgB9gX58Qdh6wAZAk9/XJUJir+ifwvYy6MMXhAsATX7PuN8E+jvGNNxEXxqEyqlHUMsFoGFJXtsixtoJsRbGkiCUI0TuIn4BvePxHKhmxOMCvjL8eibawmNdEw8Mo6fuWsTTSK9whhkisQP07xDfCOgc/boWVntIOjJ6wbmIKcQZgThB3xq2R0EXJPkVjrrlADAhjtB3j+15bB8zJ88KEENcg2ZBg6BvVI2M0zZj8uwAdM+kC/gTe4FahXvq5wYwYeqBX8sMENoS973L7ALwl4Ytx/K80CQ9GXmlFAABEAAB6AUg8pRTI8/JeVfiIr5gsa7ET/+c/DP3ENrIclMm06+k69xDqLBvV057oX74C1bWAQEQAAEQgHID/AowAGH05Uu7jC4/AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFEQTJDQjNBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFEQTJDQjJBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6pBFMMAAABwUlEQVR42uyYPUvDUBSGm9rB+oGCOBQFcapL1cmlWXTRjtalo6Bzdyd3Eexv0P+g1FV3xcEPEJy0Di6KDqJtfC+ewuWShpt40jZ4Djwk95wQ7tPm5CZxPM9LJTnSqYSHCIiACIiACIjAvxSYBotgOCkC48Z4E1yAfRqP9LOAC+7Bipabo+0dGAB1UO1HATX5YzABVrV8nra3oACWQK0nEupxugMuePN+4wA4Wu2V8jM0XgefoAWqAedkx2bye0ZtivIfIK3l1yjXSSJsPIFSFIFiwOQVy1S79KmVqOYn4UWUCBTw64EX8E778yBr1NsNfG3k1Z1oh/a/wCPDFZ6L2gN5sldRB0NarUb5XS03Cs4or3ph4w/XtWv8C5F6wJQ41SROKFeh8Rg41yZfZmhOFgFT4pByDzReoPER8+RZBdoSN6AABkGTyFI9Rw1dZrw9Wgs4lp9VMuCbGviKGnRWq6vVuMm5PGn7TtCBToTvQkpmEjTiXF/jFOjKA4KtQOLfBzJx/TLyRiYCIiACImDzsh9HFMMcHHYl7sWyzboSN7o8+WfuS2jb5qRMoZ54t7gvIbkLiYAIiIAIiIAIcMaPAAMAmet1+sgVUDwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0Rjg5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ5MUI0Rjc5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5dheuLAAABxElEQVR42uyYQU6DUBCGi3Ffb2BjXLmRxO5bEw/AxsZlvQE7u5Olu3IDWWprIp5APAAJbly5wBvgCfAf8z/zQkyaAFZIZpLJowP0zffePwOtU5bloM+2M+i5KYACKIACKIACKIACNLDdLiVzeOTeYDiBnzE0fn/L0t7sAJJdYJhpDSiAAtTsQvfrhxGG+YZ78ovZedRmEk1+1lbbqABcb7jnBd4I4G61lnlGWIik1R3gFzrWRAGBTtuYzDJZgIk9l2UHleP0Tx5kgPMotyk8FAdkgfic8chIDTHXXAPfg7uMy6JkcN96kF1Z06wQS/F8GLcKwIQeKaeQCfhMLuZxiOskuZyxAkAxYgJcwIfwhOftB9liG11IpPUJ95BUwM9DSU52wWoEEZMXMM+Sac7joGlDqAsw5RhTBiZhl4kZWRxT6wKad+llTrb/gxIwFlPPP+220t069Tb6ytUNKZnf2mTMGhH53Eo9cGc6ARCwiBMkFnK1RT4Jk4x5ncfVTyg3l8ByfoLPPs9lW60B6SYYLs3qwp9NHRBIdue7oK162GfHMnJ7gi+tWC1z9N9pBVAABVAABVAABVAABVAABVCAf7IvAQYAm1+fyPGr/AwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0RjQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM5REU1ODI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4UZISiAAABuElEQVR42uyYQU7CUBCGW8MePIHEC9jE7qk36EbjEm/ATnd26c7ewC4VTKxrF9YDkOAN6gUMnqD+Y/6XTBoMKZQIZib5Q/t45c03738Dwa+qytvl2PN2PAzAAAzAAAzAAAzAAP4RwA30AlXU8bIH/C38NboPffI6hKZmIQMwgN+jo28eJo99vAyXPFOen51mbSaxTiPp1O4F4HrJM2/QWgD344ms00chilZ3gB/oq4USAp20sZgKKcBAr6XisHY9bbIDTaoY024RlIoAOcf4kOOZsxrGAjcH6kEBx6UoM2ikvsgu1TJjAoStHmIm9MRkUiZQ8u3cjcs8qOfGAJRz3pxzHYCLK+6KVriJLiTW+oJiJJXwvotkI9kF1QgyBRQrm5a8TtZtCKsCRK7atIFLOGBizhZH9LqAlhtvow2iC33QAp6yjrZDWetu3jYBvLO6KS2zqE3mbLlinzuMzbgzWwGQ8BAXSCxltcU+BZPMOS9m9QvaLSCwvD/A/WjBQd78GWA3uXDVhV7dOSCQ7M7PgVbn4YAdy9ntGbpVYyuFb/9OG4ABGIABGIABGIABGIABGIAB/FF8CzAAEzaXJE3B8jEAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0QwNjk0QThBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0QwNjk0QTdBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7SS8gjAAACcUlEQVR42uxZQU7DMBBMEFyRgoQEiBM9trfyBPfAA9oPIDVPaJ/QPAEEH6B3Ls0TyK09wg0QCJEHcCi71RitTNK6QIMj2dLITbDamfWuxzbhfD4P6ty2gpo3L8AL8AK8gP9t2/rDbDarBeFms7lyBrqEV8LcITwRzmxSaIdwRdh3LPCHhGvbGggdzZ7QRsAH4Zzw4hj5R/AqL2LRxoBfRitdRle1VqsVUdcGdMsY0+k0d1YAET+hbkDoLxlzSV1CQh6cSiEixqTvDPIpkIl3i3E0vuuMAJC/IHDqcGR7FOGQ0AFO6d0eISbkGHdjKWJdsyw1slAfKeVWgkgo6iZ45PQYcp6LOgjoOTXqY4K/sZjGkrpgs3wj7K4Z7GfCkbmVKKuBEXqO/BAkR6gFTZoJJmJsByIipFSyrin9hZExMbnSJIjkjSSPFol3GWZE14VaQuQnZllqZEU18PXjROoStaBEOu1xLeBzJGYqEAaoVhDicQeIqg2OCbe2y6gSq40uOB3lWIwbitUpc9mJlRFdPTu5YWjObyUio1ZUgYBukdiqBaRG5DW5viYNdx4V+Ebb+I5/EfBgkBqLGZjQOzaOe2NP9A7TWxQ6F39VRvZNAP34WIgYYLVJCmapB9PSLYfhxSvI/+TUV3oiKzOyGKZ0gr4DIfycE8kMM5QK913MEqeZdOnKjUxsE3Qk20gZhaU0M1aiXG/mhOigKiMr3AsVbOgCY8XJhTi5OsUW+b/xaxU5E0ymgfQJBGkFRMKhG5smv/YMWJzIuNjTKk9k5gxYC6jTzVytmr9a9FeL/mqx5leLof9HtxfgBXgBXsBv2qcAAwDGUEyo1AvpmwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0QwNjk0QTRBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0QwNjk0QTNBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5y6jOtAAACa0lEQVR42uxZQU7CQBRtjW5NSmKixhUsWeIRhoUHgAuY2CPIEegRJHoB2LuhR7BLlrJTozH2AC7wf/Im+RlbGFDKNJlJXgbqRN/78/9/0zFcLBZBncdBUPPhBXgBXoAXsN9xqD/MZrNaEG6322t3oEf4ICwcwivhyiaFjgj3hBPHAn9GeLCtgdDR7AltBHwTrgnvjpF/Aa/yIhZjAvg2WmkbtWhfEU0dQI+MQS04d1YAEW/SdEu4WbFmRFNCQuZOpRARY9JPBvkUyMSz5Tpa33NGAMjfETh1OLJ9inBI6AKX9KxBiAk51o0tRWxqlqVGFupXSnmUIBKKpim+cnoMOM9FHfD61KiPKX7GYlor6oLN8pNwvGGw3wjn5lGirAaGmDnyA5AcohY0aSaYiLVdiIiQUsmmpvQfRsbEZKdJEMmxJI8RiWcZdkTXhVpBZBuzLDWyohpQ4oQ6Qi0okU4NrgV8jsROBcIA1RpCvO4UUbXBBeHRto0q0W10wekox2LdQHSnzGUnVkZ09e7khqE5f5SIjFpRBQJ6RWKrFpAakdfkbjRpuPOwwDc6xu/Yi4C5QWoidmBKz9g4no0z0RdMb1noXPxVGdkvAfTHJ0LELbpNUrBLfZiWHjkML15Dfpu3vtI3sjIji2FKTcxdCOHvOZHMsEOpcN/lLnGaSZeu3MjEMUFHsoOUUWilmdGJcn2YE6KDqoys8CxUcKALjI6TC3GyO8UW+b/zaxW5E0ymhfQJBGkFRMKhW7smv/EOWLyRcbGnVb6RmTtgLaBON3O1Gv5q0V8t+qvFml8thv4f3V6AF+AFeAF/GT8CDAABOUyxLJ3aXgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0QwNjk0QTBBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0QwNjk0OUZBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6joObSAAACMElEQVR42uxZgXGCQBAExwZICZ8SSAmkBFMClkBK0BK0BFMClqAlYAlQAuEze2bncy+axCRO7mZu5IE/bnf/jmdM+75PbtkmyY2bATAABsAAGAADYAAMgAG4YZvKQZqmfzXHbPAZfr2th0+A7pi3fA9EAPhJxeAOYz9xO/jhh5LPB68peW8PQ87748gDUD5q/ISVvxzxGsGvbRt65g5+zPktbwWAT6zFpBZBKrgH1VDQ8soAWiLsA+kaAEeTVoF0bBWBuKYS8owqBmCiJOaTXg8+x/rfIUiDcQ2gz5iz+M0K5yJ2SNIX6j0VkGa+kJ+glrc7zBOm9hiXBHZP9VUifoaG8IKYTCSTs4V36EKJVsQlmN7gUhPIlyuS1hgXgeQbWop8PQ/O95F6OtU8oksoI/Yc3LOzpPPC0lgbnYGtJdjvEF9aoij4CPYT1JwLGE/oeVtSUVWgInYLrfqpHlzQJVzAXKs0gOrEtUYr1kuL+EAyy5uuoC5T0XFHBa+92NYUI6FY3N9r8ky558w+9a5ARogdsd0HzIbjfIyxoF76sTV+iQJTOi9rtgJDc3SBgmohwznZUizVdanbgX7nkXu6ryggKnDfLyP7o5Lkd2cqUEQ6jmxbtBfnqALaViJT5Ob1ystnds4DyRZ0T4N47YmtyacAiJUn6iC2zRgDIC22CWI2ChlnARjbTosi3H32yfeYvIkvjsmEp/b/gAEwAAbAABgAA2AADIABMAD/FsCrAAMAJJuHJ6fJxfgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFEQTJDQkJBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFEQTJDQkFBNDVFMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyYzlhNjhjZi0yMzBmLTRiNzgtYTUzYS02ZWFiYjU4YWNlM2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4A3g20AAACVklEQVR42uxZi22DQAyFqgvQEegIdAQ6Ah2BjEBHSEZIRkhHgBHKCGQEGOFqV8+Rczo+QUrbqD7JAu5j/J4/OErsnIvueTxEdz4MgAEwAAbAABgAA2AADMAdj0e5ieP4TxpI7X5Cl4IkwdSBZDjbLb8HQgBwOCdJMcUHG9p7+iHjM7rUyngeLySt3hT5P2rYcJK9Gx81lN8awFG985NF2/xttw+ADSPpcaiHkgrCoDqltLwxALGj9ubDAOiaqkN7hFBIcaVAZDcEIKMaA+BXoQrxdqA433D8w3UOzOdgg3PiHWe2v5nksQofNqpDoj6TSAKFRkPyRtLj+YkAD4qpFnpKAUvrrSoMJfTzPReED1pvtIc9chrIQPsOFzmr3FGC6SPmO+0+5Ibz5mo8557LjyoU9XrmzbtQPk0Vj6kQknhvORfA3IkQ71BmW7AQgbWpUcADO4TaAOalJIoHX5l9nNnjvZrxSL2vuSifAQ9IYlaI9VD2Sz6kXpVIPeZ6vwAo/aG1biRZr0piYTVTX7pcqgyUSMWReE9GPmxcBAZvLlf3R4RfDZKSwJ7FpUokUYhTxbbzmPWfsznGvHxxczF+jQd0L8Ss7lBKOZE3qAI5vLMDU1tpKXhOqsuCcVLXzcieYbUHVAuh634Z6o9QsSQE0oUeyEcqjrQt+0BuzHog1EokAXfXSnT4FEteqNa3ak8Hff1Ya7IKgNpUTuRBsM2YA4A9hddPCZhiTSsx2U6rL+e5+lwR80ta5WSNTk14bP8PGAADYAAMgAEwAAbAABgAA/BvAXwJMAAbjDDPFLZLBQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzM5REU1N0Y5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM5REU1N0U5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5AkfjKAAAB5ElEQVR42uyZ0U3DMBCG44j3lAkA8cRTwgRpJyAbEDYIG2QDwgZhA9ig2aB54gnRTECZINxJZ8m1nOCEyrGFTzpFddX2Pt9v39llfd8HLlsYOG4ewAN4AA/gAf5kZ0NvMMaOXl/fxBk8EvDtx3u7nfuDpy6cbOgLOQAEvsKgwWPh7RZ8DSCHpQF0JPQqBR/Q68oGCY1mgGb/a+TzV5CFvc0ZSOj5Br4BPwd/IAmh5dYuYsG+MVBB7zVkBtfEJwGU1kpozACihsc9+C3A7WxexENW2yCj2QBUCzrwzOVKjOviAuSUOAdAQfP6ULiYATHozCkAmP1L2oG4RdQrOZMB1c7jBgC1F4WzABRoJI01S8loDkCpCL5YKgvhRPmscd+XKzK1Ep31AIrZ7yD4Wjg3GJdROGH2cetMpeFK0RtltmagVLTZtdAbLSKjUHP2V1Lh4to/KDpUozLSzYBq369saLF1AeSAXlRnYRrD4+YdrZmjaxk6yZkFgB/NVVunxkGnIumJWUyXOBPL8ml+udjC7fQJs4A3GgDR0OVAZFxCVLjiCbPPZdQIQ6kQfGtaQvlI4RqzauL46QEUPb92AACJMnqUZvxZE97MtcrEo+ee1wxjl7uumP+DwwN4AA/gAf43wI8AAwArU6SaRSk8MAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzM5REU1N0I5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzM5REU1N0E5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4aoNsvAAAByUlEQVR42uxZ7W2DMBCNq/4vnaB0grJB0w28QekGjNARGIER2g3oBukGbFAygXuWDsmxzsYkyB/SnXSybEPww3fvHo5QSh1KtrtD4cYAGAADYAAM4Ca7d00IIS76UPAkNA34CHPjtQ/cvXDqH6TcmK/AT+rSdL/a83nXegiAUdE25ABAuLZUhxC+5T/Pep7huillCK0lcYPtN/gb+CP4B/gvjrfJs9gXQtAewWc73qFfYxhN2eeAZyEDgmhSArilDgw5hJE3iQPe5oTX1rkm8ZrN4E9bwygLALjoF+x2JWohc9EySxr13FMTlVmWxEIU88giWAiLmmafB2vqDPdUJbCQJBb/o8dCwyhpDmjut2Jfq9UmVKEmlRKojWxrDWBz7gDsb4PJmOtD2CgZC2nqhObVGu4JbSSzzAFDfS5GyezVMEqyA7jQd1uNAm3OhEKNy0YhOwD9TyJ5a0+F/soqiQnqHDwLPFEA9a4gCUQ/lWiJt3/0AOiWXTBzxGCw6ADsM6Fxo9AbMeFVdAC+wrUCwnWWdIoNYHAVrhUA0gGgjQbAofm7DezWWeHXRz+Z24mm9afntNSMveW04L9ZGQADYAAMgAGUbP8CDACJcEdiioKbegAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMDQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMDM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7W5ot0AAAAf0lEQVR42uzZsQqAIBQFUF/00UHQEAT9tS0NjSWGSedugkMnexehyDmnnjOkzgMAAAAAAADQMuN1sWz7Jx5qnacywJnWt7v47yf08E3kl/ZpIQCASkN8d6hq73MCatQQA6hRNapGDTGAIVaj7U4gegKEn3wAAAAAAAAA5TkEGAB+Zxxj6E3/9AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NzU5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NzQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz76dIDbAAAAaUlEQVR42uzWQQoAEBAFUCP3v/K4gIVCkjdL2TzT/4nMLC9PLY8PAAAAAAAAAMDCtMHZ7d9dfL+B2ZfIQ/eEGABgU4hnQ7X7ng2oUSEGUKNqVI0KMYAQq9F7GwgZAAAAAAAAAPgE0AUYAAxGFmU6tXJJAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTU2NTZBODA5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTU2NTZBN0Y5RTJCMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6lLxXqAAABqUlEQVR42uxYMU7EMBC0AVFR3BPSp+EBIPwDeEJegK5AoqDxFRRIFMAL7gn3hJPyAShSE36QhgYJmbW0kVbGJBeTxAnsSqNdr527nXi9tiONMWLOsidmLkyACTABJhBXDmhDSpmAylqe0UMFE7Qn2YdqgCjraoEYkkBXSMoaZuDbb9Zdnv9LEFuPr8T2Au1j1BXaVj+T8dau+pgBHwFfx5b02WCWJL0MBmRwnCI2nckHp70ImYEQAkv0bfBt0jHaCTBz0lI7RDQhm4UQCKlCF479hrYi/kckunZ8mqRc3d6Q9PtdFQqUOsiS+CrPuKqlLcYiYN/gmVNSk74CGmMjs7n9AjjHoO2bf8X1EHcj88jqh1RQmP8KCZS4GOksCZJaK+Jr051E8o2MCTCBP3ScbjjUiaku9qYyegu4BDwBbtzOoiiiBZ2m6U4pdA04Alw1jMl3uD/0ibzLGthHfTihjJF9H+ZOuQoxgX9OoM8qlM99BmSMKyVXISbAVWjks08XAp+oP6ZcmZoI3AHeAfctVUgOiJOgrxKzv9DM6VMLl1EmwASYQFz5EmAAP7VTSIZcqb8AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjFFOTRGMjE5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjFFOTRGMjA5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7dopD2AAABqklEQVR42uxYO07EMBCNAVFR7BG2T7MHAJEbsEfICdAWSBQ0uwUFEsXCCfYIewMi5QKhSE24gRsaJGTG0kSMRpaz6/3EETPSk+0ZW5kX22+iKGNMMmQ7SQZuQkAICAEh0K+dsfEYkPsWKKXmh0ompCYptigDvHUQUNES4LkZDLqShpDdrTGECu4DNOgaYX+Crca+hnUVmV/BWAd9FdhFLRwxYxwBcBXmz+yDZ+ifo6/C1s7LSJ/ako1HNJdNsTUBmyy614AJnUMItAnmhIDBeMHGLdk8hECICk1Z/xOTz4j/BY7EDLBiPisABRuviYDsrEIh1ibZEJ92zNMd4+RYBOwbvKaSipdR91EHQo7QEvAOuMELbN/8B6pL74WM28JRBzSe9ynWjQZRsV1KyNFaEF9Xu1Mhk28hISAEhEA8MvoIuAW8Ah54sK7r3pJO03SjHbgHXADuPHNKW4iPiHKbI3SK7XlEJ0bt+2PuSi6xEPjnBPapQuXQdyDod42okBAQAvGoUJAy+Qj8YPsdszL5CDwBvgDPHSqkDohL+SshBISAEBACQsBnvwIMAAWcwLMQah40AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjFFOTRGMjU5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjFFOTRGMjQ5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Hk7MTAAAAo0lEQVR42uyYYQqAIAyFXXgbz9DpPYPnWf2wP0FlILRH30AQgvBje083c/ekHEsSDwAAAACAbyMfm9Za2EOWUoYzUPflgVZVLyEbLqEeKyIG4OcANZLDRM+AzfiJvAsZHRkAvEa7GMwkDnzWbPTX6OO9oVRCdmujqiWUrz7gQgAwlYg5haAfoB9AxAAwlZjqTNEy8NqZmEogYgAAAAAA6dgEGADHw79ZMlLwuQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzdGQUM2QUM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjFFOTRGMjg5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6WMc/vAAAAkElEQVR42uyYwQnAMAhFY8k2ztDpncF5bA/tPYWASt+HQE4hD/UnKhExOusYzQUAAAAAkKv5bty97CVVdTkCdq8otKx7CslyCj06KWIAfg5glRymegRkxyHtXUjoyAAAgHcg9d3oFAHBRgEAgKlE/hSCfoB+gCIGgN/oVmeqFoHPzsRUgiIGAAAAAGitS4ABAFjztljTAxC+AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk5NEY3ODhBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk5NEY3ODdBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjOTg1OTExZS0zYmJiLTQ4NWEtOTk2Yy1hMzE3NWE3MzhiNWQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7KNhJpAAAB/UlEQVR42uyaP0gDMRTGe9oOVoricOBmFxVxcNbVIkgRHAUXN0UQxUkXcRHESXFXwaEgVsEu/hkcFNfuCt7sIAqiQof6HbyTtNyRyzVecpgHP66XUvK+95K8JNSq1+upJFtbKuFmBBgBRoARYAT8bwFp74NlWVo6yNsppJveM2AdTINuBf6+gzLYAjWhDJCtgTmFAe+i/r/BdugUMWmqAgccAjtm523q1yE/GvwLolmAQ9iKMmAzPoQSELQKvSgSINxv3MtoEVyBR3oWpS2jMdgk2Gfe+5n3ShIK2XJA+1JLGYixgOUF27XLwLNgu3QBY+AU3NPY7RXsazegfU9mlBrWYMZGaeVwGG5BT4RV6AY80bPI84FXByyfH7vWx7QNghOQ8+nMrZgz4EtyEH994G3meEPIHSYHAc67NkJDoF3H80COnOeN9QLY1E1ABzii4RPGZsGC5EkfyoLmwDVFVujsAVbAORgGZ3S+8OwVLIKHOOZAIWIwdsA4RTzT9L27Yh2DeZ/ASc9AS6fAEA5eglXw8derkIyg+NkEuAADSb6VyNP5dyrJ1yqdVEc2om7tdbkXcg/yJTDU6nitKrpO8ewTZMEbVXnhSVxWnIksPUtRM+BdbKm8G7qj/mthMqDnfSJbVBTUAW12o0aAEWAEGAFGANfS5t8qiu1HgAEAn/W+VAu57isAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzdGQUM2QjQ5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzdGQUM2QjM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4bY3DUAAAB0klEQVR42uyYv0vDUBDHE4W4CKWKg6VZXdTFxdl21kVpERf/CnEVF0eLq5ug3dx0cJQq7upgl04KghUchBQxfh+8ITySNO9HfskdfAhN4d19X+4ul2f7vm+V2SaskhsJIAEkgASQABLwrwQ4oAM+gJ8DQ+7fSayAzUIBjv1i2JEQVyS2MMyxnZ8pQGawJzGrkkLB4K9BDdgZUOP+wuKINfEJBH+wRd8y3PV58BqMTbcLpRF8CzwCj19b2v6EogiaZZitiIJt6fiPSyHb8O6zHV8Muf8EllT9ZynAi+jvIzCl6j/LN3Ff8r7xUaIJemAAusCV9HUQcf9Qa1sSFnEDeML/fTAnWcht8AxG/NrWbSJJamAZ3IJKiP4H0ADfhtLMeA3UwVVE8MxWwQWYLOI4XeHB18essQFOcpuaYnLwTnKC3BfWaoIeGIAucBPktHQNxC0ga79gh6+zElL072CtyAJ8HvQ671Bh9gP2gG1KQFwX0ukk4zrIJdgFX7pdKA0BSe0FbPIZKbU2mqYtgHuwXeZTiWlwzj/kXZUF8kwh0T5BVTeFhjkKqKrEIQo4K8h51anqm9gBnZzPhG54HErvATobJQEkgASQABJAAkiAhP0JMAAxLAJengtz9wAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjdDOEU3QkI5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjdDOEU3QkE5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6JMYyWAAACmklEQVR42uyZzWsTQRjGsyVtMSptqYb6kRpsG5AUD+kpqWAv5iTFg/0Deu1ZRf+HQunBS6GHFHPSi9ZLQFCo0tKC3kRoItYG/OwHiIoaTZ+Bt7IMs7OT7Gx3Q+eFH23amc3z7M77zjuJVa/XI60cbZEWD2PAGDAGjAFjwFNEGxlsWZavYprZVA/XE2ji2jlwAXSCDfAcbGl/bKooRju4Bb6wy3P8BnOgz6uW/5o0G+gFzwTCeaogEzYDTPwrBfH7fABnwmJAJP4ruEF3egTcBtvcmPthMCASXwZJwdgUlxv/wOkgDTiJPyt5WlPc+EkvBqIeNio2+CZ4A9aossRIUFUybxHctb1OBrUP1GldNxo/Bdc58F5oDNwD78AvsANWwB3Q7TJ3lHtd1raRKcRx8MClPDIzVx3mx7icqYG4tiTWWOf/gnFu/hFQ4sYtaC2jDYr/Ax6DGarn3wRPIi4Rz5bfyYMwcEIg/i24SEviPP1k9fyFbQxr3AYdxH8Gw9pbCUXxLOn6QQH8oL+9p7vdQXOOSu68ULwfBrocxCfo/0XBU5kAx8jIFfBSVbwfBooS8SzOkSDV5k0qXreBjCDhEoL3zFHT5iaezU/rPJu4GZjmBGQl78uS+KGknBbstV63Acsu3NYLLYFL9PtrlbuHGAB56m1qlBMll77I86E+Kimd+7GpcB1WRi/Taewj6KFkrkb8DocltGxbBhUF8aJSmfLzfO6WA7OcoGsNitdW55s1kOVE7dL6tscp8NTvOu9lHxBVllUwT4eS7wLxad1LxIsB1mitK25Sn/yq8157IbZMnriIZ8fJIb+SVFc7nacTWIXaZLazPgLX6WwcCcqA00YWmk+fD9en0634pbf5iskYMAaMgWBjT4ABAFhGZHJcZm/wAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjdDOEU3QkY5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjdDOEU3QkU5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7TAK9zAAACj0lEQVR42uyYzWsUMRiHu+IHXSt+dLtUsVpqFaRFpHrZKn6BPUnx4lXo1bui/0NBL168tdhTK1L0UlAsWEVUFBRFpJSqFaRVWhEUtTo+gVcYYiYz7s5kdyEvPOzMbJL5/TJ5M8nkgiBoqOdY0VDn4Q14A96AN+ANeAN1HSszbrsXdsMaeANT8CnVu6i1UMqsgnOwEPwbP+AKtKZ1v7TFN8NkEB9z0JPGPXMprkab4RbsTVj+A+yH97WQxCbxaqyfhX0i9AIshv5vhUu1kANq2DzVhsg0tBvK7tJy4zdsqWYORInfaqlzRis/UImGSqbRnAyRV/BIhkQeBmDOUu8GXA6dt1frPaCy/3wZ9b4Z2nGexEfgKszCd0nOB5KoG2LqHtDOp10m8ToYi5njF+FERP28ljPLUHSVxKaEjYpf0K/Vb4QJrdywqzexSfxPuAkXYRS+GJ5E0SJ+FlpcGCgYxM/AHhkSHfKr5vN7oTJT0Bkhfh66XayFChHz/DYYgq9y7a309mqps9bS86mJjzOwPkJ8m/w/Yngqp6BJjByHJ1mKjzMwYhGv2C6Ckkbq4m0GegwJ12Yo1wsfE4hX9bsy2HtEGhjUBJQsjagkHrdMp0OVzvXl7AfuwkE5fgldCd6JO6BP1jbLMAMTMeuizPbEhdDxuwTtqEXcYZiUjcpGaMpavM3AUuh4ZwLx16X3/8ZC6AlW5bPKw9BxB5z8T/HH4LWT7yoRyVHSknEJ+rQym+GOi6my3E39OPRr19TG5TkUpZfzWs8fhRcuP2zZDLTAfehM0M68GHIqPm5Do3r0ENyOaeOxJKxz8XFPIBwqSU9DCTbBZ3gGw3Ct0m2hCwP+67Q34A14A96AN1CT8UeAAQAR+tYwJTuMPgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjdDOEU3QzM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjdDOEU3QzI5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4U5VvbAAABe0lEQVR42mL8//8/w1AGTAxDHIx6YNQDox4Y9cCoB0Y9MKQBC4hgZGSkieH0aKYMyyTEA8Q1QHwdiH+DApIE/BOIZwOxCt18gBbNokB8jURHw/AyIJZGN5vWmAXNP31ArEmEv2GZBub7+UCcjMQHg6tXr1I9wLW1tVEdAvIFNBNzAfE7IGYnwwPcQPwNJnnlyhVQ0jwPxHpUdPsRILZF9wByHlAj0vHYwDc6pHZGnMUoFHBRyyYdHZ1/QEofGBN0LYVeDvVi9D4QvxnKHgBF++KhXpE1A/EDSg0Fpn1mIL5EZn2CjA+T6oH3QOwExKdoUWLQwhzkegDdY4FAnAPE9lgMQq8HGHHEBM0rMlyNOVB+WAvEjkAsDMS6QGwyaJvTBMB7KB7t0AxUDJBVCkHbQrrUbgvRKwYY6WUmrlIIZ/dhqJRCo6MSox4YZqUQ1hJoKJVCjKS2hagVE3Tt1NN6yIZ2eWAoz1SOFqOjHhj1wKgHRj0w6oEhDQACDABKmNMsJ247fgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzVCN0Q0RTg5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzVCN0Q0RTc5RTUwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4DdqJSAAABZElEQVR42uyYsUoDMRjHGz0QWjdxci2CHNXFVcS+gc/QtY/g1t0XcOgguPUpdHIRhNNRV0G87aAIpv+UK8QjJ5cziY38P/hxtJSQX7/ky5cTUspOzLHRiTwoQAEKUIACFKAABRwLbIML8Aw+gbRgDq5AP5iB6kY1dsGTbBc3YK8ynneSis8lOGjgLVb+5XMKRtrnZWRZ5vwPT9P0+0S0+0AXfICtFgI9UGgTV0vzARw6nPsdOKkK6Htgv+HkTVEEWO3C9KW+hLoO0/yFx5GPJfRTFXqLvYy+gPeYBVTar2M/yCbg9beDYu1vgkfLQ9DEra1ADobg3kfF8DGOqHkvpMTOwRicGgaqngOiJhPeD7K6Zk7thxk4AztgAI7XcQ8kDX6Tl7Cd/qsMtKpCZS80cN0LhcqACDWmsHw7LWOpQrwTU+CfVSFjBYqpCgnbXshVJoJe6rmJKUABClCAAhSggGUsBBgAGacMBNaUMkwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM1NTg1OUI5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM1NTg1OUE5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5myDPRAAACNElEQVR42uxZO07DQBDNIjiAkSgocQcxlaGjDAUHIBdAcg5AEY6QHIEITuCOFpd04IoY0SQdSFDgAyBk3siz0mgFka3IZI12pNHaE3/em593N6ooik6bZa3TcnEEHAFHwBFYrazrgyzLrAfb7XYrReAU+g4tLNFX6EnVFNqAXkG3LHL8NvS6Tg0oC7NHVSXwCT2DvlkE/oUxLS5iITGra6OOQJ3vgJa7+ycrFwhHh3uqag38evGqZJFT/18KSdkPggjDpWG+eJxOx8Z1Mww+dBOuyrlxk83D+SafhxgeqMPB1mfbEMMIeoxnJk0W8YSVZATAoQDfY/AkkdGOPQaupygkPdg8PqbfiHDadBcaw0MD8j6f++I3DXpuEEhM4Dx6ggTZEh21v2ijPSN1fAaoI+QrBlyUBHIBNhRRDPlZ3jLer0NgBrAFvzRFNGLD+7EAZ0YhNK5LmXQobI0T0C/JAf6Ave8JYLfQD5HjOsW0d6lYc45KzClI96ZFmXqNE6Dcp87jAfhI5LYnvD8RRCNR/DrvE6M2pK2ZNmoWMoMegkTOIGkcICp5EAR63kuRiDCOqThVGYVQRwO2VJX3LZ3/VQik7EVKnRzA+8K75L052X+IVmi0YFnA2hn0jVh61qv03qheE9Nn28apBGGquiZu/1TC1hlpJQK2pY9bkbWNAJ1nFm1q1d7YovzfsczJtTa2vqA3bd7YIjmHPrd5Y4tu2G1LESv3N6sj4Ag4Ao6AI9Bm+RZgAC9r6vuQn2OmAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU2RTZBQzA5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM1NTg1OUU5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4qrvidAAACFklEQVR42uxZTUrDQBTuiCK4m4oLt9m2u3iEuvAA9gJCeoR6hPYIFj1BjmCO4Cy7bHcKCpqdIC7i9+QNPAYtKTXtRN6DxyQvafJ97y8zU1NVVafNstdpuSgBJaAElMBuZd8fzOfz6MH2er1aEbiEvkCrSPQJelE3hQ6gt9CTiBx/Cr1bpwZMhNlj6hL4hF5BnyMC/8iYVhexkJxV26gSWOc74OX14yjKBcLx4bupWwO/3rwrWeXU/5dCwac7w3ATmK8x7ZgG9y0wJNCuMaYkG5aqZLM47/J5iuGBOhxsQ7aNMUyg53hm0WQRz1hJJgCcCvADBk+SBe3YMnA/RSEZwGb5mK4RYdd0F5rCQyPyPp8n4poHvQwIFCFwHq0gQbbCR20bbXQQpE7CAH2EEgD7BgxQBXvXg01FFFN+lt3E++sQWABsxS91iEYeeD8X4MIopMF9jkmnwtY4Af+SEuDP2PtWALuHvokc9ynmvUvFWnJUck5B+q2DbbkNApT71HksgE9Eblvh/Zkgmoni93lfBLUhbc200bCQGfQYJEoGSeMIUSn7/X6HWyNFIsM4peLE6DhdHNeGg638i/yvQ8CxFyl1SgAfCu+S95Zk/yFaadCCZQF7Z9A3YuNZr/F7o35NTJ/tGKcShKnumrj9U4lYZ6S1CMSWProiayMB3djSjS3d2GrRxpbRv1mVgBJQAkpACbRZvgQYAFu5B4kUJFIUAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjBBMDdCNjA5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjBBMDdCNUY5RjAwMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Yj0aIAAAB40lEQVR42uxZMUvDQBRupO5dBAWhzrbSLm5C29Gti3ML/gD7D+xPyA9QOGeXTs4R3FxabJ3bQUEnnR3id/AdHIfEJjVpat6Dj9zrHcn73n2Xe7l6YRiWNtm2ShtuQkAICAEhsF4rm8ZsNst9sLVarRgSOgPegTAneAVOlyWwDVwBOzlK8h5wHWcGvBwqxVuWwBdwDrzlKPgXxhT9FrLslpB9INN9wNjD43OqHwgnx4deqgTSeEiayZFaKLcEjup1HwgI3a44/QNAWb4e12a7Sb9Jv639rGegyat+cBdQTv8Q6JkgYRWOK/HacvzKOiQUPE2nOtCRRUhntM/mBBiwPXIC/nR8lbDmilULuXaJYPVNLgDfyf6Iv/UoL+1XKaMGiTU4Q1XOZJKaK3YtZNsNsADuMRO+0TMDsmU2QP+YWdfjFvAVfUV/vELN5SUlMAe0XFoIvGtlf8K+D02OY4yMGla2XT9JzRVZC/36GkXmAs6EAokDLs6hXhtcH31Kp+8E/tPVrbl2md0o7AN3sXZiIwtm2LQV/Q5JGYJzBN9B00hkbvUH7vg/r7PN2aj5JtbbfZqlxCr3/pffxOWsiq7MCKQlHynmikRAzoXkXEjOheRcKENtyf/EQkAICAEhUGgC3wIMABPj9CP+WLkjAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM1NTg1OTc5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM1NTg1OTY5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VI06MAAAB8UlEQVR42uxZsUoDQRDNSUSwCoigIMQ+RfyDJKVdGmsP/ADzB+YT8gERztomlfXFD5CkSG1SKCgIsRHE4nwT3sKySMxdvMvFzMDjdm73LvNmZnfnNl4URYV1lq3CmosSUAJKQAmsVoqmMRqNcm9spVLZjBQ6A16BKCd4Bk4XJbANdIH9HDn5ELiOEwEvh5niLUrgC7gAXnJk/BNtmr8KWXJL6D6Q6T5g5O1zN9UPhL2dDy9VAmn8SJrO0Vood3PAqjs6uJxQHQBt1EtTq78l/bjnUw85JkRbnpPnW9AH0OvSd//wmGkEjPFiWBMInP42cE5jRUocV+C15uilVaRQCA+KoT2LkHjbZ3MoXma75xj87uhBwporVi3kyhWMlZdcMiVs7/d4T6JQol5mulRJrMoIlRnJJDVX7FrIlhtgAvQRiQ69X6dBdprNcp1el3ET6AH1gPpgiZrLS0pgDEi61GB40/L+kH0yqfscY9Koannb1ZPUXHNroV+XUVlVGIkAJI45OWW1aXN++Ewd3zH8p6tbcx3Qu/NwBNzFXkaZw1OrHVBvkJQhOIbxDS61s6hZ/aE7/s/rbHM2ar6JZbtPs5RY5t3/8pu4mFXRlRmBtNJHi7lNIqDnQnoupOdCei6UYW7p/8RKQAkoASWw0QS+BRgA/Gf9s2Uy2OEAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Nzk3MkM4ODM5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Nzk3MkM4ODI5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5pzmUdAAACH0lEQVR42uxZvU7DMBBOUHkABgZGskG7tWyMZeAB4AWQ2gdgaB+heQQieAG6sTYjG2RLEEu7gQRLHgCh8J10lk5RHBJEVFvySadcbJ9zn30/ieMXReHZTDue5eQAOAAOgAOwXeopIcsy443t9/uNduAC/AkuDOF38HlTF9oF34L3DVr4A/BdmxjwDfQevymAL/AV+MMg49/YpvogFrRkdmnUAWhTBxQ9Pr0Y+YFwenLsN40B7eBtUd2i9uoUB4PBDJeFpjtO0/SsiQGYZ4LLjWjagEl3LdqmmC/qIgZycMQP9VhOWj4nKeksed5Y0//3GKggWpklVnEFOYA8hTxUOwOZVnai0R1hfEJMMsY+40q6Odpy3BMI6h/9WxBLwsShpj1hF5CrN+TdUUSg9kqql2ACMYPx1DcmYFtNo+y3qvCFtEPEkOfC7dRYug8Z2Ix3d2NcHeDg9zTGySofmFbI1jC+qMlcRPciYBccT8YAiHRZCoYGKhFwLMwVILSPOwWAB6w54EguyBjN0JD9fypBsEupOfKSa9FcK+V2XaRRtbJBqTbUBXZC6ZWM4mKXiAy1EdkrKtWKbgDo0mlFHaAYkN1z1o9F0fJ0bV3uwG9VVvcK0Pl3ha9Op9WphMlvo1WnEj3T30TdF5ltAOg+M+hQq/XBFvn/oWGL3Opg6xv8YPPBFtE1+NXmgy1SOLIliH33m9UBcAAcAAfAAbCZfgQYAAbyA3PPbINeAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTE0NDc2NTI5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTE0NDc2NTE5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz74iYiRAAACBklEQVR42uxZzUrDQBBOpCL0JuLBa649to9QDz6AvoDQPkL7CM0jGPQF7CO0J8/GW4+JJwUFyU0QD/EbmIEldNOs9GcDMzBksn+Zb3d+djdhWZZBm+koaDkpAAWgABTAYakjwmq18l7ZXq/XaAWuwZ/g0hN+B181NaFj8D343KOJvwA/uPhA6KH1hE0B/IJvwR8eKf/GOtU7sUFzZg2jCsAlDwh9/XS9PCCcnXyHTX3A2vhQVDepnQ2Zb4LHzFK9RPa+bJhBR3jcGUU5mPpmRtkY4yW78IECnPBHA5ZTx++klT5zHndpqf+/D6whmpk5ZnEBOYI8htyXlYFMMzuy9B2gfUpMMto+40l9C5QVeCcQVD/YmhObhIFjS3nKJmDOXp9XR4hAnVa63oAJxATKU92QgB00jLLdSuKLaYWIIU8Ns5O29B4zsAmvbu5dHmDnDyzKmVk+8i2RZVC+rIlcRI+Gw87Yn7wBkNiiFBSNJBCwL0wFEMqHOwWAD2TscCSXpIylacz2PzZBsEnJGEXFtGishZjdLsKozGxUyQ11jp1SeCWlONmlRoTKjeiVVHKF+0FB7kblTExp22UrsSEPTG2h2HUrQTqtOxN3tmD31Zm0RZz97EZdd6RPL6911ViZ7n4B+LYT1RNZGwHoxZZebOnFVosutkL9zaoAFIACUAAKoM30J8AAccYD/WxBuWsAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU2RTZBQzQ5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUU2RTZBQzM5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz66XCDdAAABi0lEQVR42uyZPU7DQBCFYwQHSEGRlhK7Q3SUbnIAcwEkc4RwBHwEW3ABcgRc0iF3NmU6kKDxASjMW/QWrazE2kggj9GM9LTOei3NN/szu5ug67rZlO1gNnFTAAVQAAUY1w7tQ9M04p0Nw9CrBxLoA+qE6A1a+g6hI+gOOhYU+AV0v88cCASOnsAX4BO6gt4FOf9Kn4YnsWNrSpdRBdgnD1h7en4ReUC4OD8NfOfAzsZj2VBQ/+8ciKJoBXWmdOoeWJeyfOx9Y+tz/v5uOwpAXdcZigoyICdQwm3GDbRhs9i8cz5Lpa1Cl9AcyqmKYK6tGO0YxZkoADi7YcRjglxvSXoJnJ8TxLQvReUBRryFMjxXvdcFwW4JWUhNZC3VNxvxlO/FAgyZnRNr9NA2yJyr0c/q9KeZeIcVXJHcyJu6Fk6XcCxzol86vZVxiFmrfn2fba8W7ZHSZD2Jmdj45HuknPZmTvKGzgtA2vDRA80UAfReSO+F9F5oQvdCgf5LqQAKoAAKoAAKMKJ9CTAAQ1XEnKr52QUAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUU2RTZBQzg5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUU2RTZBQzc5Rjc3MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ZDFlOTE1NC02MTlmLTQ2MzgtOWI0Ny02ODQ2YmQzNWVhY2QiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4a/dtTAAABiElEQVR42uyZT0rEMBTGJ6II7gZx4dZtl16hGw/QuYBQjzAewR6hRS/gHMFeoctuZ+eAgnQniIv6Rb5IKDMlA0pf5D34SCdN4f1e/rwkY/q+n8VsB7PITQEUQAEUYFo7dA9t24p3NkmSoB7IoFeoF6INdBU6hI6ge+hMUODPoYd95oAROHpMKMAndA29CHL+mT6NT2LPVpQuowqwTx5w9vZxIvKAcHr8bkLnwM7GU9lYUP/vHEDaXkK9Lb26R9blLJ8G37j6kr+/204CgL1RgaKBLMgFlHGbcQut2Sy177zPcmmr0AKaQyXVEMy3JaOdorgUBQBn14x4SpCbLUkvg/Nzgtj2tag8wIh3UIHnZvC6ItgdISupiayjhuYinvO9WIAxc3NihR7aBllyNfpZnf40E++wiiuSH3lb18HpGo4VXvRrr7cKDjFnza/vs93VojtS2qwnMRNbn0KPlHFv5iRv6IIApA0fPdDECKD3QnovpPdCEd0LGf2XUgEUQAEUQAEUYEL7EmAAKI/Ebx/P1aUAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzQyOUQ0NjBBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQyOUQ0NUZBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5fq2h0AAAC7UlEQVR42uyaXUgUURTHZy3KWsoESaMI6yWSFWWFRHpIQvrupYKicDEUxAcffMgPxAd7CsSH8kV6kBrooai3oLLo8yGIWCiG6EPK7IuE6GPpC63tf+AsDMPuzN29906zMAd+zDo7d+b859577jl3jaTTaaOYrcQocgsFhAJCAUVuC50nTNP07eGJREK9AAmLgGqwEZSBKPgC3oJH4KcvPVCAkcPdYB+ozHHNPJgEp8C1oMwBansCWKDLxfnMi9oFroKzYFEQBAyDPnAHHABnRIc+GAmCgL02hy6BdvBesO2RoAwhslV8XAGW+R08VNyIJuVlsDkPAYGKQuWgNc82P/6rgFgsZliWdQgfl/CpaJbIct3lFnN0j2Qy6fmseDwuJYAWp6Ngv91BOK/i5a0E5xzn7nKE+qWqB06DDk3DdzlocZxr4bm0G/yRjUKtGp03bMPPadt5YZQOo70anf/r8X2PaIjPdVEdzVWNAp669ADZelArI6BRo/O0DTIKdnpc1ygjYJ1GAX0Ioe9wPOZx3VqZKFSWh0NT4An4bTtXmmWIpCiqwflXnJVGBRZIrSvxC9AJh+7j2OAyplNcDywFW8FFAeczuVXBAryW+pegCc434/gGVGgYat9kBMx4tBuE8/U4ngcLNM2VDzICHnq0ewDGNTpP9lgmCiV57BouNW6VRue/g5syAiiZMn3azchmpugccFuuj4OPOb6LahRB2zBDKnKhWbANPHMRoXqFvge2gE+q0mmaSDW8KpY43pKXVYsOA9u8SumoyChznHZWZAJ22yXrJGc3qOi2SCE/MXEp+Fo0X2GjVGOxo9qTLin92p0+yKlGP//9NQj7QqJGkewCT9Ix1TeXEfA8j+J9B39uE0xVfNkXorr1FlgjsLNxhSMSFfK0/Xg4CD0wxWn0BO3zCD7rJJeKVhB6ILPY0abuANgDNoHVnMtT1PnM9S8lfzcMDT9yqEoHZrknJgyfLRL+q0EoIBRQ3PZPgAEAXgON9EXSzVMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzQyOUQ0NjhBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQyOUQ0NjdBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6BNCZzAAABnklEQVR42uyZMUvDUBSFb0xoCASdnBwEwUFwUkdBxM1NHPoHOujeSQfBxVlwcHTNILi5OCtY1EGRKEi6JCARwSGR2CT15DUVhwq1aVJK74EPSuhrz9fXR8uN1Gw2aZgzRkMeFmABFmABFsgUpZsnGYaRe5FyuZyfQIeoYAksgjkwDaaADibSnf0CHngDr+AZPIEr8AjiwnbgV9bANlgHWpdrZjpcc8EpOARmUWfgGFyAzX+U/yuTYAs8gEpyoVqt5ivg+34lh6++7LruUSE7YJqmbNs2BUHQl+ae55FlWVSv19VCzkAUReQ4jkBVVdJ1nTRNE49LpRIpikKyLJMkST9r4jgW68IwFOIJ2ElRvtFo0CAOsUi7zND8kNVqtVxLZHl9/ivBAizAAizAAizAAizAAizAAiMhcJlTh/OiBFbBPvjsU/E7sEGtIVkhAsmocA/MggPg9PB+yZjxBKyABXCW9VPoZSphgx2wm5ZYBvOp2Di1ZqPJ3PMDvIMXcA+uwS31aSaaRaCd5P7sTcrAIvF9YhZgARZggZEW+BZgAJHnc+7qw5G3AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTFGRDEyNTFBNDdEMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTFGRDEyNTBBNDdEMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxODljZjNjZi01OWExLTQxMGYtOGIyNC1mY2U4OTNhNDczNDkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6zrxzAAAADT0lEQVR42uyZW4hNURjH93GO0xyDGRIScktNhjouceRh8uJFChHmgYcjt0xKqcmDUkTKg1wyDhkPJDNIvIxLMjQMjTIIKTNmmpSGJo7LOOP4r+Y7tTrttfZa+3ac2l/9au+9zvpm/ff+vm9dJpTNZo1itiFGkVsgIBAQCChyi5g9TKVS/9Ugk8mkngDu68wBpaAfpEEH+CHpMwuUKI7rF/hg4c/eFyAbAZ7nPWOzXid4Cm6B66AvT3Q9CVGxDHgIToMGunctB2Imz0JgClgDzoMucBiUUXs7SICbGi+wClwCrSDupoCoQn/2lfaA12AJPfsGVoIrmmNhg38EVhSiCk0A91i+caGxAdzX9BOjUKoqRBkdCurAVk7EWvDJhp96QQh7Pg+wHDnOvcHPYIcNP5PBJqdV6AvYQiLHgWlgEZhp4TNMSVkJesFVUAvK8343FlRLcm01OOVEwHcKiXxjVWgzqAHDBX3HgwNcOB0S/O4iuC1Jak9CiE1me0EFlT6RMZEzLHzdodJrZqO9zoFusBQ8k/jepeDnp2Sm9jyJ0xTHfwTt1VRVZLV/ruQFOUpiVXsHGsE6k7ZySvxmul/Olcc4VSjRGFr9EsDshkAAs/mcgH10r2KNfs4D7ZK2qdx1p6K/t/RSfBPQJ2kbxV33KvgaoPKb8VNA2CLR+cGpWFT1D7u5mBMZ/9ZLFV/GWTDMTwFxi3jO2RhFfxPBRj8FrJK0tXHX+2mvsJ7WR902fbpaRhM0I5tZD3jJ3T8xWQu9ESydF/jxBcooXkXWYNH/I2iR+C7xUsAkcJcWdSJLOYyCkBcCcktlFhrzJL+7ZjHBMZsNFgvavkoWekrqo7Qr+kvr/ulgIS2+wgpnPrXcPVtmjDT5gtslY2hxmsQxOq+xY7u58rmMdmi6drkQe2JmZ8BJLhHrbPh4RRXKVwHs1O4It41kCXiONug6xo4xt6muhdxaTnfQAUAT9+yg6mTEWYbyrlm1g1MBbBI6RnNBP+fzKNip6auHZugHOp10BfwGL4zBEzdWJh9T6OSskmI+oeGTHUteACfoJMRwS0CaKkiErrtoQzJgEb81JmdAIv/vjcHDL9sWsYjHJhv7Y18tFPyjOxAQCAgEBAKc2D8BBgAUsKJ1efpEZgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzQyOUQ0NjRBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzQyOUQ0NjNBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4hld39AAAEA0lEQVR42uyZW0hUURSG94xjKuoohYw5KSkaWWlToCVlFtRDkPjQha4QvURRQWT40EsvgYTZQ4XVQ1HRDaIbdsGiMujiVDaU0RQ6mWWljoqWtxxn+vdpJSLNucweHYVZ8MEcZ+856z9nrb3X2uo8Hg8bz6Zn49yCAoICggLGuRmG/6GkpGTMOFdYWKhdgMCDmAlSwSQQBnrAV/AefB61N6DBuJMrwVqwBETJjG0EN8FZ8DzQOcBFbwd14DzIV3CemxlsA8/AY7AgUG9gOrgA5gjccyrYAD4A52gKWAEuqnjaw20APAHl4C54G4gcWEXOqx3fDe6B6+S4M5BJnEuxrjTWDR5Qol4DvwKyDwwzviReBhNkxrjAGXAAfAr4RjbMisFkme/tYD14PWZ24iE2A2yR+d5Jy2GboA+htLplgmR6kx5/CNirsE8c98F5I5gLLEQm7eBDQ/QVuCMqgC+VqxXivqyystLrgLy8PPMQRy20d6QAnYJPm/0hgJcGkTLzrsL5b/8ukpKSTMnJydzBHDCfnI3zMaSWU1j1iwhYrDDv8ESYXq8v7enpKWhoaIjt7u7mQlh0dLRoXkZTmFWJCEj3NsHj8VjtdntRR0dHwcDAwGA4OJ1OCaPRyMxmM4uLi2M6nc5XERmiAqZ4m1BfXz+7ubk529v3nZ2dEg6HgyUmJrKEhARfhMSLVqNGbxPwZMNgij/c19fHamtrmdVqZU1NTVoFRIoK6PM2ISoqimVlZbGUlBQWERGheIPe3l6GkGM2m036rNJcogLa5SaFhIRI4ZGdnc0sFosUJqGhobI3Qs6w6upq1tXVpcavdlEBH9X+QExMDEtLS2M5OTksIyODmUwmZjD8P7X6+/ulsFJhdaL7wAuwSUvQ8kTFyirhdrtZa2srQ7KztrY26XowuCMjea+sFHtVogLuC/Wper20jHJcLpe0vDY2NrrDw8Mfpaam8rJhocz0N+CHqAB+kmCjEkCsWjQYeuPj40+DYtqkahSmXPJXU39UwG9eTVrBHpBIhwCtYJ/CPB5ep/wl4JyWZKKOjDtdREXbPFBKleZ+anbWKfwGr3A1bRpy5fRvsAvckhnTAiqoeqyga24J1EvwXnopFWdK9p2E+rUjuw1OgK10/ZPOdR4StiG1Uz4lZy6d0Gk9udjIK5GRaOr5W3hHS+tLajGz6OkepM9GwVzfSQcCI3IqwUPpCNhNxyQmP7a0Hur8ynxesjWMPQau+NF5Hi5rwCGhPUfDWP4mdlCsOwSdL6euTfiB6H28eToltpZjQt4i3gCL/PQQVOeAt7dxkpgFltG6Pw3EUj3PT+a+sL+HuE9pRWsZ7YMtNVajojwYMdMF/1MfFBAUEBQQUPsjwACM9wmzfWllAwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM3RDkzRUFBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM3RDkzRTlBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4laDObAAABsUlEQVR42uyZP2vCQBjGH0vFQSnxzyQIDm0yFBwUnBR0ar5KP4STH6Sbm2uJg2CXSgs6mEVd1CWDiILgIA7pvUfboeIiOc2V94GXJEdI3t/d+9xdSMT3feisG2guBmAABmAABmAABrimbv82NJvNqyXTaDQCG4E7Ea8ifMXhiDACHYFvvRuG8ZhOp5X2+Hq9ftpsNh/i1AraA8qTJ6VSKTqYPAv9q1nolDKZDMrlMoQ35PXhcMB4PIbruuEHiMViqNfr2O12aLfb2O/3KJVKyOVyWCwW2G634QbI5/OIRqPodrsyedJgMNDPAzQSWpp4Pp/L8qlUKshms/qZmMrGcRwUi0XUajXZNpvNMBwOf0sq9CVEifb7fbRaLfR6PSSTSdi2ffWyOmsd8DxPGjoej8M0Tf0AtPOAZVkoFAoYjUaYTCaybKrVqlzMptPp0b20RpwSTb/0jIsC0AsTiYRM7Ce55XKJTqdzZGK6N8gEA9tKUM+FZfHi3SgDXADAFZ96yl++Wq3o8KLCxLb4Xn0Tca+Y4VPEswoAT8QDe+ACivBPPgZgAAZgAAZgAAY4X18CDADTlai6K3tzngAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTcyQjFERTFBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTcyQjFERTBBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5+l8fkAAABsElEQVR42uyZMWvCQBiGX0vBrYYE5yC2DaaLuLnGoR3E1SGLo/0BIggOwUHE/2BdBEcHKZ2ELoU6iNBBHF0EUXTVKb072qEVl+JprnwvfFwSjrvvyd17lyMh3/ehsi6guAiAAAiAAAiAAAjgnLr8/aBWq50tmWq1erQRuGLxzMKXHC8stKOOwJfeNE27MwxD6htfr9f3m83mnV1ax/aA9OS5dF3nxS2tQv9qFTqkxWKBbreL4XAo7qPRKPL5PNLpdPABdrsd6vU6YrEYWq0WwuEwBoOBgLFtG5FIJNgAk8kEy+USjUZDJM/lOI4IpTyw3W7VNHEikYBlWWi325jNZuoB8GlTLpcRj8dRqVTgui76/b7whjKrEIfIZrMi+Cj0ej2MRiMB9u0LZfYB0zRRLBYxnU4FBG1ksqfQeDwWBi4UCkgmk2LudzodsZmlUqm9us1m82BbpVJJtHFSAN5hLpf7kVgmk4HneXvzn9flcIEzcVA2LvoaJYATAXywo570zlerFS+eZJj4gZ1XX1lcS2bgh4tHGQBzFjfkgRMoRD/5CIAACIAACIAACODv+hRgADijl1y+nhxTAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM3RDkzRTJBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUI1RTMyMjRBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz67m8jUAAAC0klEQVR42uyZTahSQRTHx0itNFEh45kGYvGI0KyF4EZcFFLUshZua9OmRZu+3jKoTbRp0TIoLIJauHBlJEEZhiAKkosUowTtwxAiVMr+Z7hKiVffFe74hDnw415G5zj/O+ecmbkahsMhW2XbxlbcpAApQAqQAqQAKWClbftkQzKZ1P1HE4mEfgI0mAm4lVnsgq+rEEJecAW8AT9BHXwAX0ALPAVngGGrCbCCW6AKboPIlNlzgbMgBd6C6FYRcAC8A1fBzk36DYOX4IbwJJ4y+FdgbcGHcxNYwPVlCNgBnv07+Gg0yqxWK+v3+8xkMjGLxcKMRiMbDAas0+mwSqXCms3mpJ9roKjkh9AQopAJ/ld2MGi73c5cLhcfeK1WY+VymV8dDgeLxWLM7XZP83UP2EUKoB+7PNmYz+dZNpvl9+12mxUKBS6ArqlUis9EKBSa5m8PuCRSwDmwe7Kx2+1OCxFuvV6PtVotPkMqdl6P8qom4OSiDmkWVGw/OCxKwFGtjmw2G/N4PHwWZtgRUVVo77yOVIHW19f5vdPp5IOnp18sFmd1WxMl4M+8jlSJiJFRUlOSU56I3P2qCfgMDs7qWK/XWS6X46ETj8fHST7H2qJyoLZZBzToUqnEZ2MUUjOsIkrACy1OqtUqD6FgMMhnRMW+g4IoAY9BX4sjin9ancPhsNpXHoHfogR8Ag8mG30+HwsEAvyetg50T22jUKJVmUIpEonwz8xm86jrL3BH9GaOdpCngGfU4Pf7x5WHVlyCQocSmowEeL3esahGo8FXaGVb/VG0gG/K6eo12EUNmUxmrsN0Oj3Z9BDcXdaBhlal0+DHgv6fgAvLPpHRyeqYxspEgi/SCwitxUCvMzEF+XFwAjxXDvRqdX6D0gXcB7r//aP1tUpGwQgOgX3KyY3y5b0eK61e74Voz1xSWKoZ5J98UoAUIAVIAVKAFCAFLG5/BRgAItPLbETXRdsAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM3RDkzRTZBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM3RDkzRTVBNDY1MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4NOADFAAAC+UlEQVR42uyZW0hUQRjHv43SdW2ll4xVK9rNSiXbDMJNUQmlMqMe1h566KGCiMKHeuj6GNRLbz740ENQUIQFFXaxNS3abrK2SW4XUkGUvC7horsWtf1nOCty2ItHOaML88GPnZ3dmTP/me+b8805hnA4TMlsSyjJTQqQAqQAKUAKkAKS2paqKxobG3W/qNPp1E+ABksBWcoqjoPRZHCh1eAseAMmQC/oBiNgCNwF+4BhsQlYDq6Ab+AqcERZvUxQCx6Cd6BssQhYD9rBOZA2y363g1ZwUXgQRxn8K2CZ4+RcBungwkIIMIJ7Mwf/qOkJjYz5yWRKo8nJIA0ODdN4YIIyzOlkXbeWSh3FlJOdpe7nPPAq8SFUAHOZwpkVE8Egff/Ry8vZlkwqL3GQ0WikUChEL91vydvpo1PHj0QTUQ+awS9RMbACnFZXVu+q4gNklrdxA5XsKKZtRXb+eabuJF+J5pbWaP2tBHUig/ggMKsrM8zmaLPLLTU1hTbnb5peoSh2VI/tNZaAPXPtkK1CDFsDCkQJ2Kq1o/FAgNzvPXwV4tgWUUG8KlHDUb+funxfePnn4BB98Hzks19eVhqvmUWUgH+JGrIdhxExe2E+D3IWJyKz31gCBkBuvIaVFaVUubOCu059w/XpIE9gw6JioGf2QWum/Xt389WIuFQc84kS0KKlk4L8PO5CD5qe8hWJYX7gESXgNvitpSPm/yytePzseay/3AJ/RQnoBzfUld09PeTp8PJyX/8AL7O6iCvVHqjhruR60cZ/m5qanoMguCY6F2IZZDXIiVS0Y1CRnYfdcRnMdWxWK69jacWnz13kanvNv+fm2vgdWkmr+/QQYFA/Xledie3ADUzzuMZNcFivM3GifZn5S808ssg74NhCn8hYelmkcWdigk+AQ1o3A73OxCzFrARV4L5yoI+1z18CNtAAdH/9o/WxikthGTsSsHONcnIbA1/1uNPq9VzoD+hUWFAzyJd8UoAUIAVIAVKAFCAFzN3+CzAAV+PTMJygmAEAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTcyQjFERTVBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTcyQjFERTRBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4kpuQBAAABaklEQVR42uyZga3CIBCGqRt0ha7ACq7gCm+FrlBHeG+EOkIdoY5gR2hHQEiO5EKOSgPkxfhfclGPv8CHvbsaG2OM+mQ7qQ83AAAAAAAAAAAAAAAAAAAA3wug3C8y7oH11p9ORj5Z79j4j/WBxi70mev7YL5kfbivmO8BjDS5ZosbirW0mAng/AYc5EzxX3YYyfpcgJ6dErdVONk1ctqabVYf1acCxHLATb5YvwXxK70uLLYIMWcP63d6f87QH05iTbfIJow5gEYAi9mDzVlDLwL4JG0L1Iitsl4EWBhIV6jYVQM5Rb7GjeWCZEPi/P4A7pX00ST+Y6VzDMbObxZX7Ba80IHcCugPNbKW1eXQn0F+eN1KwP76iWJhQibpSzQyxbqm90FI7pnV9Wmnax/SlwJIsTnS9LL0uY3sq55G28r6qgAd25CuoM9+nN6zUahQayl9ag40+IcGAAAAAAAAAAAAAAAA/2YvAQYAr4Gq1H3L26AAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTcyQjFERTlBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTcyQjFERThBNDY2MTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3OThhZGE3My02YTk4LTRjODUtOTY0NS1lMTllNmU3NDMxYWUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7K9YAuAAABiUlEQVR42uxZgW2DMBDE3cArsAKMkBVYgRVYIRmhHSEZgYwAI8AIMIL7Fkf0sUxrC6woyr90sjifbc7wb6IoY0z2zvGVvXmIATEgBsSAGBADYkAMiAExIAbEwCOUUg9QNISBYICWkLP+mnBGX4Vrrm+c+YL1wWF/UnIw/koYCAWua7OE5TShMc/RWg7anNCB/wYXqw+C1wBbrHLMTuCbvzjwBbvZIlYfamArB+zkIz3Km8Nf0I6MGz2cfQ16au64PO3Qx+UAdksTZk9+XNQSt8D5e7RFIr33CeRo9QFFYk6s9xpYH61NrPygapfMiK+M9myCZqNynQPnXzfgnki/mcQ/aG3pvDo3f/pn8VWnUev7jZyJ1YefA6jznfHHgMVW7aqz5bFm41twhbNekH5XGaUdmAklK5u8jJa23zPM9lVm2YUJXIlXMjtAH3cSR4zvfIfeXv3eg+yjvkZ1Yn06AzgndOjpGatPmgP4WnVjOlAfBCX/0IgBMSAGxIAYEANiQAyIgZfFrwADAPq+gHa7/SY2AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABuklEQVRoge3VO2gUURTG8d+KrBjSpbCwFGITUWwigrUWIoggGBu1UMFGsRK0UrQRFAWxtPERRCx8gI1gYSUISjoJKMQnKSUxKhuLucFxudndyW6yCOcPl3OZc8+53zdzZ4YgCIIgCIIg6Bc1OHfhUi5Xx3EcwAgGO+j3HRO4i5v42ROVi3D+7BmrF8mtx2NsqdhzENvSOIzd+LhkhR2QM1D3r/gJXMNzfMZMpmYt1mEHTmA01T9J8wb2YSc2YKCNrhlM4hke4FcVA8dK4m/haKsGiVm8T+M2LuMUNuO04ggOt+lRZgCb0tiDk/iWW5gzMJbiW4WZduKbaShEj2K7wsiHlJvEPbzCNH401a7BkOIG7vfX+FUcknmnVmUEbE3xeq6gQ+ZxI82HUnyEg3iIqYx4mMMnPMUR3EnXh7E3t1HOQD3FF1VVN/EyxRre4SJ+V6hv4IriJMCu3KKcgQWmKmyW40tpPq76UaR4kvfTfGNuQSsDs0vYsEz5iLzuos+bFOu5ZCsDveRrF7XTrZIrZWCui9qWH5KVMrBshIF+s/Annl/mfXrVv7lP7b9/AkEQBEEQBEEQBEG/+AOzUVA5Dso0kwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABq0lEQVRoge3WvYsUQRDG4WeWY0UxMzAwFDQxMBFFMNZcUMTEQEQQQU0NzIwEwcjQTEX8A0wEQRHx8LjjIuUCQfCDC+X0VLYMtheWpXd1P7xFqB8M3dM99U6/1dXDkCRJkiRJkiTzooGIqM21cRFncAA7/0LvK1ZxH3fxYyarHELTNN1ORAxeeyJiKaZjqejU9GdyUd+BNl7hYLlfxR08xUdsVJKxHbtxDJdwuIwvl34HJ3Ece7HjD8ndwBqe4DF+DtuBmoHLZcFwDxeGCQyhhVu4Wu6v65bgvjE0+nmLK/gyODHMwEscwQoOmayOGzzHUazjfRlfwwO8LuPfB+K2YZfu7p/SNd4zcW5wLcPOwGap4fNT1ujZotOJiMWIuBERC2PEtyLiWoldjIjTtTPQqmSvXdpnE2S+nxe9ROEdbuLXGPEd3NatBDhRe6hmoMeHMV5W41Nf/6HxzlGPwKPS3197YJSBbxO8sJ/++n4zhc5yadu1yVEGZsnnKWLXR01ulYHNKWJHfgW3ysA/Iw3Mm4XSVn9HZ8is9Ad1mv9+B5IkSZIkSZIkSZJ58RvPKHRtk6EDYwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABPUlEQVRoge2XQUrDQBSGv4hLKV21JxCvkHUp1YJu3HkLl4J7cekt3LnpolR6AI/Q4g26kta9LmYCZvqCCW0yCfwfDAN5vPD9mZnAgBBCCNFhkvDB5Ooa4Bx4BsZAr2GnkC2wBB4W89lnkuSVT42GC+AD6NfvVooecAuMLqc3KbD+WzwxGp5w8q/AELdKMcfQu/S9Ww4rwNjP98Cm6LM0yAbnAjAJi1aAbM+3QT4jczkLC1aATmEd4iJ+Kr47/MMd2m9SJUDpl1Ise2j/Hp3fQgoQGwWIjQLERgFiowCxUYDYKEBsqt4Hql5Kjt2/R5UAZS8jdfWbdH4LWQG2fh40KfIPmct3WLACLP38QjtCDHAuAO9h0ToDj8AIuPOjLXzh3HJYK7ACUuAN2NUsVYYdziVdzGer2DJCCCHEUfkFNzUn/saEG7IAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABM0lEQVRoge2YQUoDMRSGvxGXIl21JxCF5ADjvngel55AXHoLdx5AutcDzGKKN+hK2u7rIhlo01dmQjWZwPtgCCR54f9mwkACiqIoilIwVdjRNA3ADfACzIHrxJlC1sACeDLGfFfVYWRJ4Bb4AiZJ4g3nB6ittcv9zgth4jMu/Bsww0nmfGY+y8RnO0ASmPv2EVidfiHJWOGyADyEg5JAt+fHEL6jy3IVDkgCRXEZMXcXuXb4gzi3XiRGYPCinA57bv0RxW8hFciNCuRGBXKjArlRgdyoQG5UIDex54HYQ8lf1x8RIzD0MPJf9SLFbyFJYO3bacogPXRZtuGAJLDw7SvjkJjisgB8hIPS1eId8Mk4rxbvrbXtfqf0BVqgBt6BTYJgfWxwWWpjTNs3WVEURVGK4heX7CvtjShXcgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAqklEQVRoge3TsQnCUBSF4V9xgCwhrmAtIVhYOY1gL06TykJCBnCEiEsEXMDCJ4hKbiMkkP+DNPfmXDjFA0mSJEmSxmnStSzWG4A5cATyNK6BHXALbv89V51PXz/PgmML4AJkb7MtsAKWwLXv3DQocPg49pKlXe+5qEDesSuGkIsKDF5UoO7YVUPIRQX2QPtj3qZd77moQMPz9ZfAPX1lmjUDykmSJEmSNDoPEhY2Kop88EMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAq0lEQVRoge3UwQnCMBiG4VcncAnxkgEcoDiT4L04TQeQDuAAPVRcouACHppTtQmCYqDvA7n8P1/Id2hBkiRJkqRlWqWWXdcBbIEzUMVxCxyBe+bur+dCCB8X2AFXYDNZDcAeuM1Ef5ILIbzk1nOPj+o3lxFndQm5XIEqsTuUkMsVKF6uQJvYXUrI5QqcGD+gqSHu/p7LFegZ/xoN8IinibO+oJwkSZIkSYvzBKc3OjurNp29AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABMklEQVRoge3VP0oDQRzF8e9KSgmpkhOIV9jGJoRoQBs7b2Ep2Iult7CzSREi6dJ4hIg3SCWJvRYzC+74MxuDs3/I+8AwkGHgvczOLoiIiDRYEv4wPDsHOALugQHQLjlTaAXMgJvpZPyWJPnILWPDMfACdOJn20obuAT6p6OLFHj9vnhgbLjDhX8EerhTqnL0fJaOz5ZjFRj4+RpY/va3lGiJywIwDBetAtkzX4fwmSzLYbhgFWiUXQrMgc9IY15GgZh+vNaLWK/RIic77ImmbifwZ3tZQJd4A13ixtnLArrEG+gSN44KVE0FqqYCVbMKrPzcLTNIgSzLR7hgFZj5+YF6lOjisgA8h4vWl/gW6ANXftTFOy5bjnUCCyAFnoB15FDbWOOypNPJeFF1GBERkX/1BeIvaQaHZ5k3AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABKUlEQVRoge3YMU7DMACF4T+IEaFO7QkQSPYBwsBWcR5GToAYuQUbB0DdOsABMgRxg06oZYfBjtQa00CkOLH6PimyZKfKe0ncISAiIpKxIpyoqgrgDLgH5sBp4kyhNbAAbo0x70WxGzlW4Bx4BSZJ4v3dB1Baa9+2J48iJ97hwj8CM1zJIY+ZzzLx2XbECsz9eAOsfr8hyaxwWQCuw8VYgeadH0P4RpPlJFyIFchKlwJL4KunY5miQJ9+/Cu2Oe5wkasOv+nN2J7Avx1kAW3iPbSJs3OQBbSJ99Amzo4KDE0FhqYCQ4sVWPtxmjJIiybLZ7gQK7Dw4wPjKDHFZQF4DhdjnxYvgBfG+Wnx0lpbb0/GnkANlMATsEkQrM0Gl6U0xtRtJ4uIiGTlG0L1bPXDdsBoAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQyMzIwMTVBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQyMzIwMTRBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6m6HrXAAABfklEQVR42uyZQW7CMBBF4yoXqOgCxGm6YsmOJTvOAfQUVKISS0T3vUAOAhvUcgAWSFRmLCaSZUxMzCSxlRnpiygkzjzb3xkrQkqZxBypeUIIEXzSeqe/JJFHKwA6oA3oV41ehcpAH17zSZcl+W3FiZtalcnZBbDBRn9APfPaZ5Xng3oHHfF4SQWQTxvy5C0AKgagkwuiDIC8Xk+f/B0AFUMN4jNGABUj0BnPL2IEUDEG/eN/4xgAphaIibbE0gBUURk4IG5GiAIg83xR2WL24P1WgDpLCVEAMPdu1Ox1oxqVSCwarFal2QF6zmmIJXKZ8r615bSPiR81dTT7ARIzBWPiAg8Umpi3lG01cRb7CJAZiU3MJmaA5koJkhUphBF4alXgVYhNzPsB3g80a+KU6kFsYgawxx/Ow14jLheii4cHX4B8qVtqjdWVfB9+vow87KZ0fOTbJfV+5DOlnv92L2cXQII3f+N0qjPxPWgNei3qdNd7IMjgYo4BCOMiwADckNqYRvM/iAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkUwMDIyMzhBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkUwMDIyMzdBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6y8QMXAAABe0lEQVR42mL8//8/w1AGTAxDHIx6YCh4QBiIVwHxcyD+T0N8GIibSPUAI4FMDHL8GSBWoGOgLgTiBKJVgzyAB6/6DwHbgFiSgFpyMQw4AvFXKHsOsfoJKXgONZBWjkf2AIjtDsQ/SfEEKYbTwwMg7I/kiZlD0QMgHAbEf6DiM4aiB0A4Doj/QuXicOkfTPVAPRp/ERBnQNmp5BajMElGmMDJkyep6mpzc3NkBzQAcSMhN1CjJj5MZkWFDTSieQBd36BpSmANQWCMYgt1qtXENE9CSEmJaDeMtkaHgwfIycTEZuohEwOM1DCEhUx9tqN5YNQDA5uJDw/1GGCklkGjmXjUA6MeGLimBFVKpMEQAxSVSKOl0KgHRvsDo/2BAS7CSB2VGAAwOioxpD3wAkpLDpD7JKD0S3I9ACvq5iAZRi8gDcRz0dxBciYGTfKdBWL5AUwlD4HYBIjfkBMDb6Ga1+CLRhqBZ0C8EogNcTmemBgYLYVGPTDcPQAQYACKm5vtMHYXngAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM3NTgxOTRBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM3NTgxOTNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6VkqIQAAABJklEQVR42uyZMQ7CIBSGwTi7uLs4e4SODr1HJy/iDeoBXIyDlyBdPIRuhcUz4KNJk4bUYiMgJP9LfgaSpv8H7z1C4FprlnMsWOaRPcDSnuCcJ23YTnmkUA4Aa9KVJM0OBtaLdJmdU0ONmH9GMG7r/LVfB4BZeV2WpW7bVocOIcQQYucDoEubGOb7GADUpI0LgNumrTaqx1pXyLD+fyIdptpo6gDdFM4BAKQKUBRFl7NzZb7Legd8NgV0IRRxDkXss2j/sgMhawhFjCIGAAAAAAAAAAAAAAAAAD6FMoOUMlsAYYaqqphSKriZpmm838jMA8eDtPrjIv90IzNPPlvSPdkccjxw2LBHFv+5adrvDIA+9qRbJPO1C8BVA0lmDA4yAHiMtwADAHuHFQf8ilDIAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEExMjc5OTRBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEExMjc5OTNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz64wBZQAAABL0lEQVR42mL8//8/w1AGTAxDHIx6YNQDox4gDISBeBUQPwfi/zTGR4C4nRQPsBDh+DNArECnALWGYhCoJEYDI4F6ABTyoUdPnmNo7JzO8Obte5q63kBPg2He5BYGaGxrAPEnSpOQLYigh+NB4MKlGzCmJBBfA2J/Sj0gASLo4XgsQBqIN4yWQqMeGPUAZfUAXjBvSjODga4m6aXN5esMSTm1QzgGGBkHRwxQKxRHM/FoJqZjph2YGKBiph3NxKOZeNQDox4Y9cCoB0Y9MOqBUQ+MemDUA6MeINYDL0CEiLDgkPXAYRBRV5bJICwkQHPHGOiqk97ZIzA/AJrgeA1SN4CBzEhJDLwFYl8g/jGUM/FWIFYB4hNDuRR6CsQOQDx7sHmAcXStxKgHRrgHAAIMAFm8Wk+uIk/fAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzcyNUUwMThBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzcyNUUwMTdBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4NLP2TAAADt0lEQVR42uxYbWiOURh+XxsbxkxTWkY21DQ0jJJF9sO2IiUJLX8sKVmLRvkqShtZzQ9R/rBCGUJE5qvURPke08hXrWGfLbP52Os+dZ26nJ7XnvO+e5fNc9fVc7rOc+5zrnPuc879PP5AIODrzzbI18/NE+AJ8AR4AjwBYVm0Sfj9/n96wObF+9+EUILgmuCLYHoExzNSUCuoEUxyvSQMBxsiqFavCrojLGC4oBl9vRWM63G8LgQcg0OFfX0QFaupvweYwJAF5JCzy4IoqhsvyO2FAc8TzDC4Eup3R6gC1P54ASctgiSqWyRoR11GGINXE/Jd8FOw3uDvwb/qJzEUAXk0CxuJTxa0gm8QDAtzBarg6xcmRtscp1WwEXABjesFscSfBa9mLbsXQihF0AifrwQxVHcT/DtbAWpWO9G4jBxm0KwcNAaSbcxgMEvHRmVbRX7XEr+G+Jk2AhZSwyxyWEZxOcrYiD8En1wIuAIfhZwACB6Dv0N8PPaI4jfbCChEo07jGKsFf8ro/D74UhcCVuLdZmMStlBoxhOvhZ2wEXAUjZ6QoxG4yBRfQHwWdZxEl1+5oAkDLaeJUKfbB7QpIj+zadUXEH8c3EMnAcFSidF4fiRuImbbh+NV23I8H2HDK9sv2AQ/CSjvQZ2ahKsoLyM/z6icSuUGPJNsciG9hG1GPqStico6tagjLt/BJ6/aSzynEtcl6ECZQ6sFz1gbAUN7eLfLuHR8OMddZ8V02rF1Uwj63PgNJqDdoYM2hxBT9gbPycRVBMmptE3B8zVxgwVxKHcQH2OIcyVAD3asw1LqPEjbdTwz6f1iwSG0aUF5J51aeUZb02c9lbXPRpt0+gDlQH4KlW/gS4wcXudFW12Ez2I6beYGucymEX8D3C2bYzSfnHFo3AZXR8J8OCYV/9npM9UwnR5UG/xp8K3kw0951xEbAekkYB11UkR8jnFqqS+2ky5WYLvgKe0DnSDq1KUiSOpSYCMgCudvAEuoLZHCpaYXMlFtZ2ig84kvJT7VNhs9TGluGvG7yenFIEeuje0lf+eJj8Vm/iMjsBGQSY4rjXO/kuqWhDH4ZPKjwmoM1RVT3YZQPykvkZMVxvG7TXDXuBNC+StyDhs0jvg03AWq3/d8sdkKSKGY/2qk1pGyCTjl9F+Q3HD/SixFrh/Af6HoCAuoolXf1Ru/VfTXVhtyoPgIC3iOmS90dfG6FKDDaVYfhNBf+zHH6zcH3d9+7kb39MJA+bnrCfAEeAI8AZ6AgSngtwADAG0WCD/0TAVFAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzBGQzk0QTFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzBGQzk0QTBBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5HxpBcAAADtUlEQVR42uxZW0hVQRS911u+MF9ZhKSRZpBYaWBBGEVCllAEEVEh0kdEEPlRWB9lUBBaJNhH9OFXfRRohUlS+cggKAoxK02xoBDE8o1kauptD6xDi+HqPec+PqQzsJjNmpk9Z81zz71Ot9vtWMgpxLHAky3AFmALsAXYAmwB/4WAOMEzQb9gQxC/J1rQKWgXrAmUgFBBnWCXYGmQB3RGsFyQLqgXrPTaQgVzXlDp/peumqjvL45Qf+8EofPV9+ZsNzl7InBRWbJgTwA+eKtgo8aVUr8XfBUQIuiAk2FBIpXtFIyhLMuPj1cDMiWYFpzQ+Dfwr/pJ8EVAPo3CKeKTBCPg+wSRfs5AA3zNYGAMfrOZWZjPcQ0a9wrCiX8AXo1abgCWUIpgAD67BGFU1gT+m1UBalQn0Lic+CwalRtam1xtBOdCBjYqc4fJbyHxR4nfZEXADmq4jfhyWpex2kb8I/hhQkAdfBQR5xS8B/+S+BjsEZXOWBFQhEYT2jHWCf6e1vlb8GUmBBxC3SFtEM7S0owh3hB2x5O/uS6ydORdginYSwRrYTdR3RxBNi6hCrr8lD0oGIIdirIqQQ9u92Pkpxm5S5BJfBvyDCs3cTzyHuJWC5ywO4g/gLxV0Av7muA0/MTBvoyyWcFT2PvJz0eyU8nuQ55oRUAM8lEtHjLSINlGbNRNXIEHn8fJ/qzNtEqTgnHYscQPIw+3IiDCS91Jsl0Ux5hNxo9RkRo/S0vQYcbvXALGPHQw6mGJqfQVeRpxdz34rCTb2EtfiFssiII9TnyYJs6UAONjV3iYSpWSya5Hnk31iwU30WYY9kWUqX2Ur7XVffaSbfgcsBKNXqcYyEnxyW/wpVQ3muKicyaO0Ty6Y7bMcZmtJ74R3Asr90ABOUsjvhlcNwlTqAD/U7DIiwAjPHit8ffBj5APJ8Vdt63cA61kbye7Brl6LeURXyJ4LmgQTHvZwI04MguJS6IjtZZ8ZNKJ2GJlCbkQaboxhQafQMulPQCRqIEqmvEc4suIT7Uajd6iMHcd8ZfI6WNBhJ8ff4X8PSI+HJGwSm2+hNPZ5Lham51qKtvrx8cnkZ8PgmVUVkxlJ319UtaSk4Paa+284JUg3g8Bys9DbNAo4tWMj6Pf7/O9i808Now1/0sLrYOFVTjlVJr19u4243AfYn2V+k0ck44APTFVKvFW36xT9doaFUxqsXow8AkjX2SmvtPCn3wpiEhbgvzjlqV+rAiwf9y1BdgCbAG2AFuALSDQ6a8AAwBvAojnpL+08AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM3NTgxOTBBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM3NTgxOEZBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz61F45xAAACrElEQVR42uyZz0tUURTHfTpMNvgjkzAILBIjQihUykVD/0DQIiVchCiTqwiKNi0K96GLDEGwFq1bCC0KxJUutB+uLDRRGKlQtGTyR1Ok0/fA98Hlos17M/c9RrwHPtz3hvfuvd977jvvnTNOJpMp2s9WXLTPzQqwAg66gMhuPzqOUzATzBYl7RYqyC3k495G0ADqwRlwDJSDSuW63yAFfoB5MAM+gQnwy8ge08li3WBYbjXAa3AHRP3MT8XZbcJ7PMQJcAtc5Pk2mALT4DOYAyvgJ3HtED1yFNSBs+AcaAGlvGYWPAEDfh9irx54rqzae3ATVGdbnf8BKwNtYFTp+5lfD3gR0MXOZb92iIPymfge47WDNMe5blrAK3acMD1xbcy7HOeFHwFewmicbVXAETHG9rLpKJTiyixxjx4xvPISdgfBBsdJmt5CroCHbOW8l9HIyXHSEuaawWOwxn77chHgJYzKhCtk5fmA9fJYbBm8BR/AAlgE38EW+MP4HuP2OwlO8+V3CRxnH+vgPnjDyS/yWmNh1PWA+3YVMffAJNjJ8QUm973jxN3FqA3DAynt0hpupSaurkyimqsepRe2uE2S9NIUxS9pfdWG5YGgrIbjLPvxQMRvxArK4PU0D0ttSmkFWAFWgBVgBVgBim2zLQmpxPPXtIAxtg8CFtCpjWcsI2tRPoP7pUwSQD7cyQKYnFwznZHpIqSydkO2lIGJS1XvpdL3UBBlFdcuaDWcr+ApaztSViz2kEaeAlfBI2ZyGeUTuivoypxrt0EruKL9vgm+sDqX1qoNkuScYDFLtY/c8z16HuD1Ez4XAa6dp4g4j+s93JNkKVJy6HEwkm8Oko8A3cq4ylKhPqz8LinlKvjGBN53kAlLQCBm/6EpdIuEnbxbD1gBVoBZ+yfAAA78GFeePSH8AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEExMjc5OTBBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkREMDgxNjhBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz609Kj+AAACfklEQVR42uzZT0gUUQDHcUdDLdZ/SRgEayRKhFBUmIekewQeLKJDhGKduhReOhTdww4VUVAdOnfrUBCd6pD251RhRcJGhfZPVivXyKbvg9/iMBTMnzfG0nvwYfbfe7O/N29n5r31fN+vquRSXVXhxQVwAVwAF8AFSFVWpKy7Fd3oRBfWoAFNgc8toIgveI0JPMcDzP+LAEewG/0WOvA2buESfiRpwItxKzGMw+jR80U8wVO8xCt8xKyUS52OyGp0YCM2oRf1+swLnMPF2AlMgAiu+UvlEQ6iNWLdv8lhH+4G2r4at50oHxpS4/M4BC/lF/+TAyhpPwO2A9xUw8MZfPGgY9rP9Tj1opxG+7RtyfiMuErbnbZ/A0X1zJTGaLPlnm/AZXzVfgq2h1A5wEltzfNR9KT4PZh623EGM2r3bJIAUU6j5iLUiGYMYFSPTZnGOB5jEm/wGd91Xq/V0DDDrx0bdPHbgbVqYw4juiYU1EZ7FkOoSc8bcRxj+OUnK6beQ4wEhmR+OY5AMfRemy5s29S7ebSq12t1FMzRmFHvTuriN4apUFv5JEcgbQCbpU2hPuhxxd2NlrStd/MBF8AFcAFcABfABQiURW1rlmmJ56ftAPe0PZFxgMHQ/qzdTvcGboPPoy6D+fAgFrSPftszsnCICexHjYUv3o0bgbavZLGsUrYltIbzDhe0ttOF6gjTyPXYg1MYD7Q1reWb2J3gJfiT7yj2Ylfo9W94q9W5Umi1wUxy1iEXqvNMY/60pqeZLi2Gy2aF6NPjzgh1ClqKNHPo+7iT9pfvWfybNadeNivUKwOvmynlJ7zXBN5q8dz/xC6AC+ACuAD/dYDfAgwAieXAY2a3Q2cAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM3NTgxOENBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM5RDE3Q0FBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4cmPIqAAAA6UlEQVR42uyZ4Q2CMBBGqXEJx4AtnEPXYg3Zgk4hukU9TH9oAim2xXL6LrmQQK69l1zv6wXjnKs0265SbgAAAAAAACTZfu6DtXZTidZ1/RnAaE3THOXRih8S9r6Jn/q+717eLV33GSvexZZQavKVj28j152KLXIGzFqxIYCz+D0x+asvg5h1p2Lf6eZuo1oOMToAwMoAY78exF0hH3wO0QA5dCC3hqgroeI6kFtDlt+FxC6FS4guBMC/6UCw729dB4J9X0MJmZwA39aBYN9HBwAAgHmAeYB54Kd0wPCbFQAAAAAAAM32EGAA8KWLlWhx0bkAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkREMDgxNjVBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkREMDgxNjRBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5CnGYvAAAA+0lEQVR42uyZQQrCMBBFE+nOE7jyGLlAN55Dj2XP4UYPkFvYhegB1G38QhalECY1pibyBz6FtIPzymR+g9o5p2qOhao8CEAAAhCAAEnRhG5Ya4sq1BgzDcAnbXDpoFXCb1+hLV7IYbC2hlpoKeQ+oCPUf9pCqcUrn9+N1mKKV/6ZtoQ9oHPlSgA76JZY/OXdQqO1E/SMyL37FgrThb5Ga9nE9AEC5DKyifM6VyT7wC+LL8oHsnmIBBA7r3OF6APSHjhDe04hAtAHZhul4twv3QfEuV9DC+lvAsztA+Lcpw8QgAA8D/A8wPPAX/mA5t+sBCAAAQhAgJrjJcAA2wQ54iEuTmAAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzcyNUUwMUNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzcyNUUwMUJBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5UB6ViAAABtElEQVR42uyYv0vDQBTHGy0VHJQqDgH9D3TxP1BnN42I/4f4JzjaxcnNxUlwcXFWnCUUxEVwE6yCU0WM34MXCPEuuUsuzZ28Bx8KTdt7n/v5ekGSJB2fY6rjebAAC7AAC7BAreiqHgRB4FyyskO3bAR6YADexPdbYETt9wqtZFCctJR4nmNVroGqFqIpJHp+wYHZI0ZiUZpryQhke+EahBNKOKT2su3L8zQQCCfc66FtgSYiAjEY02uUnyAuC+woFmzki0CsEIhNBP7sQrkDLPvQ9sk2VuzvX2BG1n6Vg6zJeDJ8X+8gK1pEudgCt+AZXIAVQ4FdxRTaq7UGNAU2aQpkn4ueWzKUEMkOadoMc8k3JrAGPhS9dw9mbdZvtgWWwUtJ3XIFpl0UmAcPmsXXqYsCd4YV5JGFRW9VwJQfcEC/sy5Z9K9gw2WBhJLeph1K9vwbHBYckq0LpCNR9plLMOeqgC6PYNVnAcEn2PdZIGVAu5TVanTS8Q76davRUYsCfZ08ygTOHbnTOqtaTqcXW23eCd2kf3yqrAHvrxb5dpoFWIAFWOB/C3R1DgseARZQx68AAwBnjfJa0O+OzAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBCMkM3QUFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBCMkM3QTlBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4sl9ITAAAB0UlEQVR42uyYv0vDQBTHG4W4CKWKg6VdXdTFxdl21kVJERf/CnEVF0eLq5ug3dx0cJQq7upgl04WBCs4CCli/B7cEEPSu5ffkffgQ+CS3r3v5b13rzEcxykV2SZKBTcWwAJYAAtgASxgnJmgDd6BkwFDub4Z6KFoJcZw7OTDjoJ8NBS9kNj5mRxEingTs2FCyO38NagCIwWqcj0/P/6Y6g24b4pJBynu+jx4dfsatQol4bwFHoEtrxZ5PUUSu60UM1sBCWtR1qeEkBHz7osdX/QZfwJLuutnKcAOqO8jMKW7fpYncY84Hnsr0QRd0AcdUCf+/iBg/JA0S8gkbgDbc78H5oiJ3ALPYCSvLWoRCZMDy+AWlH2efwAN8BVTmMWeAzVwFeC8sFVwASbz2E6XpfM1xXMb4CS1UkDIgTtiB7nvmasJuqAPOqCukSPKHKBMQLUfsCPnWfFJ+jewlmcBjnR6XVYoP/sGe8AIK4BShaJUEtUpfgl2wSe1CqUhQNdewKbskRIro0naArgH20X+KjENzuUfea3WJE8h5LUPUIkaQsMMBVR0/FAJOMtJaJ2GPYlN0M74m9CN9CPUOcDfRlkAC2ABLIAFsAAW8J8F/AowAPJuAl7UZefRAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEExMjc5OThBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEExMjc5OTdBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YYe3eAAACnUlEQVR42uxZz0sbQRTelVAM1mJys7QIonjzoig99VALitC/QISe8i/kH+hBof+AFw8eRD0Lgl6kp0AjqKVizbnVm0IDjVbWN+ULrMsmzps3bzUlA1+Wnc28b7758ebt2zCKoqCTS0/Q4aXjBeQ0jIZhmFqvsVw1Z2CO8BOY0yIJNUYFM2A6PoiqX4SXKlyKAqIsuP7PTdxqE2ptbtvCncFPhAaWwmOigb6kD0obAabhsyeyUn4T+rl7YPsJLfVdl008hOsXXA8wY7ZIm21bHCS4h7iK32P9GV9exDVCvfWeSyBL7mAPjcq4L+N+LwMBYu5JNLgkDKBuAPemfkJRgBfuLfx5KVG/jPpNRQFi7lHCLeFPLI5plkG4VvN8REGAF+4VkK04PpcIEHPbqGw3ShIBXrht11mrdSoRIObm7PQ0TyER4IWb62uTvloiQMyddzjt4qdlXiDAC3cJFVVmuFFFu5JAgJjbBE5XhBeEOuGaYcSE2n3wCrOE/RQB7UL3t4QdQq+A+8q8kZ1DQB/ALc0OcEsdbQMB94UJpzeEsfp3hyXQDM/PhNxr5uc54dTxde8vYUawB97Bhgv3D/T9Xxkm1JgGzJpd9OBGF2GLw11Dn++VIqbk1sLAEWHK40n8hvDNgtf0bZVQaGdsjPCZcEy4iTU2fned8MEyn8QN5npgez12NkTowzH6NOayUQqO2QnXN7K4qyw8mGtSzCREWXDlFHOj4syac2pRKzXIaW8rtvuFJlbMm9Q8YvbxlOeHcL9fkfWr+dlpNFW2aDEAC7HokIMq2uYk/ZIImCacBPLs8wlsZSrgY+KQk+IGNjMRIAnArANDTQGVQO9jRoUrwMWNvlb0iq/YZwvndNT6dtY9yHyPSpal42fgToABAJG3FBi5/OKOAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkUwMDIyMzRBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkUwMDIyMzNBNDgxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4SUPiZAAACpklEQVR42uyZTWsTQRjHN2lQS1Ta3iqVgFR682Jp8eShFiwFP4EUPHnVg9ov4NEPoBfRHooHvQkWcymelCZgWyxqzlVPtmAgaS3jf/AfWIdN3WeenZLoPvDLZnYzz8u8PDM7KRhjon6WYtTnkgfwLwcwB7bJXCgjhYCT2Do+yu9fwJl+C8BVXMjnwP8WwH3Q5lDwIWlI+dCmL+I5YCse65GG/gFOSXvgZQ+NlNc+Q6jC6xte68wkaYkSslBa6o7tSvdchyGUwKz5LdtghFfD+1FKXElbT2S7m5IqKy2yvMhy9QgCENlOUjDJCjtgiPeGWLZyMWAAYttJc+Aerw/BDr/b6yPneQiR23YiOg8OQAuMOs9suc3n4wF6wMu22wN3mJmecgMWF1t+wud3A7S+n21hCx/WSpoe8LYd74HbXHmfg0aXVvoMXoDj4FaGre9v2yPLJGUKTQ+obEeeed7N1ZoAVLbtjUGPlTa+Wg4qAlDbtjdu8kZNsFpG/L1hfd8A1LbtdnoXU+E0aII9wcSzk64MWuAqWBW+Ul4Gr8AJhe3dEj6+MoAykUrHAak0WTdS2P5m0+gzZQr8AGoe9epMjRpZsuPpJPho/OQnuKKYAzPU4SOfrO8dRedAQ6hgDyxkkEYXqEsiDfr8x1bCvjwscbn+m6yDqQy3EpfAZgq71rfHYPiw94EJ8ABsgP1YZZt3l8E1UAywGy1S93JsbTD0YYM+Tbj10pzMDXukuSxO5jqp8nt+tJgfLeYBdJdShrrGwTyYBBcSnr8H62CNp36NbGaabBfoUgLXY7tDidRYt6TxQeP8NNgyetmiriMN4IazyGllnzrFvvisAzNgBQxkPB8P+F5RDf0f2VswFSipvAPTodPo2YBZcayX/qXMF7I8gH6QXwIMAFfIjUgDHRTtAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM5RDE3QzNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM5RDE3QzJBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6JH7d5AAACQUlEQVR42uyZvS8EQRjGd31/RdyJkNC4ikJoCM1JdAgX/gDRKxRqiURzQYheKK4WuUYEjc5FIgqERiEhJySCwrfzTDLbXNzMu7czu3uxb/JrbnZnnufuZuZ9Z8xMJmMUchQZBR6BgcCAwyihPmiapqvCqItLieJx20AMDIBWUA9eQRqcgCTY55+pc0pBEoPgiHVH4BksgDoluhwaYCI2icKzuQNDXhpoBmd5irf4BlNeGAiBc4fiLX7ApNsGthSJt3gDXW4ZGLch7BF8Ep9NsdVatwE2wKlEyDX/S9Twd4pBFOwSTIzoNhCVCDgE4Vx7IYhL3t/WbWBZMPgTaJRt6GBH0McHqNZpICUYfJG4d/ZKfoUBOwbsJnMRQdsesY+UJJWI6MxGQ4K2e2r2wlcn0e6uzcC7gm+uEjQI2j90GrgTtMWIfQyD0jzHcJyNJgWT75NPUFFUgQvJJG7XuQpNSwa/Bd05xIf5RJe9b+o00ERIDVj7BhgFnaAfzPFJLtuJl9zIhRKKEzmLd17FaTfQAl40GIi7mU5PKBZ/DCrcrshWFIlP81/V9ZKynJBaUxjzsqjvAV8OxCe8PpVgMZ+n+CtQ6wcDZXwS2hHP9oo+P5wLWdHBC3OqgVllKY4iAyxmiOIPeJ3sOwMmP/cUib/nB2KGHw1Yp3UPAgOjyrNkxQYMvq7/JX5dS5qvwQCLtSzxN3ZLRa8NsKORS9lu62cD1tLK8pxVnfcWJlWcX6+Y/s8ln19v9IN74sBAYKDA41eAAQAjAokcv/NHIwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBCMkM3QjJBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBCMkM3QjFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4C5Vi3AAAChUlEQVR42uyZTUhUURTH51VmKcGohUErXWjSxhZ+YGCkKy1SpI0QRUWrWdqmnUiQCKW4M4K+3KrYIoSJoEU0KpoogrshQmuwyKKwGZTX/8KZjTD3vvfuOZND78BvM+fde8//zb3nnnuf47pupJDtQKTALRQQCvjfBRxi7u806AJtoApUgG3wBSyBafCafuMxlUYZ6ADzrjf7CYZAlGNs2w5UEBNuMEuBzn8p4BRYde1sF8RsBDgBd+Iy8A7UccxicBM8DdI4qIAp0M24+NOgmRa6eBrt8RH8Ftjx8FwxGFMvVFqAGmDA8MwncAMco6l2BJwHcUO7RnBJOo22GhZlApTnaKum66Ch/SvpLPRQM/gPUGlor0TMaPrIgFI/MfmdQuc0vkcg5SHj9Gv8RaBJcg1Ua3xxj33MGkqJakkBZRrfpo+8/13jj0oKSDO8uaPghMafkRSgm+NdHvu4SHM9yBjWAlY0vl7aTXVWAu4ZnlmWFPDGcLaYBA05/OV0HqjV9PEZrEnWQidpp9UdhFTpME710kdalBdADBw39P8A3JEu5l6AqwKnwwyd6JLSxdxd8EtAwLDf4G3K6WvgGWPwH0AL+JOvW4nnYIQpeJU2LwcJ3uYfyNbwC+CMpYAeWvB5vxdK01Fw16KPcZvgOS625sD9gG2TlFqtzGG4Xj8MEuCsjzZqr2gF7/fD1aLK39cNhd5eG+AInvNmTtHn8S7oLTjINa7D+IXGoUNNu+aZr6AerHMNynk77dJU+qZ55hZn8NwCIhTc7Ry+J+Ald/3hCH3ke0xvO2sbtOFtFYqAUrAIajh223xOoaz9BleozhmVCl7yH8ibhR/5QgGhgFBAKMDK/gowAANJMMNKjwOPAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQyMzIwMURBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQyMzIwMUNBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7F8+ifAAABAUlEQVR42uxZ2w3DIAzEVYZo0ok6RztWO0cnatotKEh8oEgxBPMIzZ3kryTG5wecCGmtVc84qc4BAiAAAiAAAscmMHAPiWgXQXJqIaYCV2Oz9VPZZrc2C+LYuQpYR2Oj5H+MTWyMEQT8F/yeyq0C13yTtIVCeNksuQC22OS+lQ/ImnnZ4EzSXmOEfzbGrS0UKn1SDiVzOmTq05IzcOCDLKHcJVsJWkgttkF/J0nFOeC7SgUei0BicTH2FE9+hm20NIqfxF3tQn95DkALQQtBC0ELQQtBC+1aC7W8VvnataVa6O4c1cbb2C1HBZoj+SDr4Q8mrtdBAARAAARAoGv8BBgA2R/krL99HYMAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzBGQzk0OURBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzBGQzk0OUNBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6qT5nlAAAA5ElEQVR42uyYWw6CMBBFO4ZFSF2R69Bl6TpckeAuak3mgxCVQh9Ac24yPwSmPZ1Oe4M458yedTA7FwAAAAAAAABUD3D20flwhaPTsf9KArzQJ1G70gL3PmwswPAF+fE8hSRgzCw98NBVkplh9ds46pkV+CarpV6iVrdoaGWyAEjkIkblbxLt05w9UPc90CQud86thJUwo2NweJIs1XEid5EK3EYTCdXJx30L90BuSdU9wD2AF8IL0QN4IbwQXmjrXmjN3yqvqbFDKnDVRKX19HFJUYGqmhgAAAAAAAAAAEiptwADACZnYbeTflyjAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NEM5RDE3QzdBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NEM5RDE3QzZBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7TLpScAAACbElEQVR42uxZTU7CQBSmxgN0i3FRbkC5AGXpSjyBEN0LJyCcwF7AUE5A2bgVL0DxBHQjurM3wDfJN8nLOJQGCi0yL3lJO7Twfa/f+5lirdfryinbReXEzRAwBM6dwCU/iaLoJEC7rpv6BG7IV+TrkvkK2LZK6IW8WsLAV4HtpHPAykLgkfy7hOA/yR9Skxj2WlIJnUEZbTQa2663yevsfMY/nM/nxRJIAd0hv1fAS1uQj8kD8uToWc3Hacv6k+Rt8hFIbDMBvktPISy6kUl7Jp8AvADnk7dQyqS3sJ7gugnJsFOGJBYgekwignJf1TzOxXoN1wkbEQnvAB1e24l1EnLIl1iKAT5hkpJ5EAK0xyQ0wf0xSamm/NYqh/L8RX61TUIDdtwFsDpITfC58Agye4ML4EPc59BTaBfRiWXFkdKZYU0ClOtSLj1ejSjqATtv5tzhtZ1YJcDL5JQls82eiMtyglegWOkN9Q0d3trRr/EdqQQ8TZNqs8jzCAdKLyjlKOGx6E81db/0BNLMYccfGEVs9hTfiyCwUKIfpyQlr1Yx6x86iR1tlBAR/FEa2JJFO0S0m0q+hJCUJOBTReoXMUokLHJ1gLxTGtkA66EyM6WBz2OfvVcntgHcAZkxCAjgT0zzIYHXJXQeXVjbiTdNoz3UfymlboZKI+65xfFYaWp5ERCNsJplGvXhUkoRxuq2Mlo7kM4ShD3MQcEB9tnaTpz3fmBI4P2y7AdkdalhbNgkoRhDnHsM8LtsKRNFUp7SN46+jdxIIOOmfGZeqxyYgHm5eyAzL3eLtv/5ctcyf3QbAoaAIWAI7GO/AgwA1KQv5XzbYuwAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkREMDgxNjFBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkREMDgxNjBBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4YrUXKAAACfklEQVR42uxZ3W3CMBBOUB/7wAip1AHIBMAAqDBBYQOYADFBsgEwAVT0nXQC0vdKZINGat/pXfW5OqVOgkRIAtjSKXZio+983/3Y2IfDwbrk1rAuvBkFjAK3rsCdHOx2u4sA7bquXgG0R5IeyX3NcH+TbEg+8ihUR/AWMPVuwok3MFfd2hewpTsxGnPMM2G0ijB6RPhq0qMlwm5QewUAekjyLMGLeBySLEkWpFBcKwoRwD499vCJVsq0Fr7vMb8eChAYBrUiYQvwzvokXdplWwmP8T7GvBWtG5apgC0PNKqUAIg5XjNFBvQtyqHZVlipq/GPUzP8XybOLCXooyPARwATC0opkGt6H9K7DsYjWEytfyg4w6tM7OVRaCr6IwZPIFskewCcQnag2RbCwGdY55TlD42UiPNLHaaBoIcjKBWiPxbLef5CjNsFZ/ijMrGMNC94enBQZZEFlB0Lc8bCR5j7HU3UOkuGT1KoI/rKCfspOyz7YS1LCThoM2ERFbHi2iuQo5wjhu/Ch5QV36pQIEzQKcpwShmt1LxhCsXKSWSgy6fgvIvwqXZ7jd1uJ/xljWysFPBp7aSMM/G/TEwf5wJIF8C2whckaF2s14Ev4pytzcQ6H5iJ/hz0cEGJAMC5tBjwE+8CrHNTdr6Ic7b2TJxWC8kYHyL+hzlm5TVPGC4TIXdS0EUBW8HLpFCiGh0nnJJDaSBqIwe+MBV+wueC0RkoxJn4NUmhVAVE8TbX8F/XWKkZ/YZf5sVWZh4gMGtUlZOMZBUJ/vtWyS3TAhnZWRZwpR8j864WrRyrVH6Qv/prFXO5e6ZmLnerbtd5uWubP7qNAkYBo4BR4JT2I8AAB5cVM5cb8ikAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjQyMzIwMTlBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjQyMzIwMThBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5Iux74AAABRUlEQVR42uyZMQrCMBSGjdRNXARdXcV7eBOv4C30DO56ChcXb6CLuKiTiLhIqS+QQihNfa9p0NL/hx9aCP/LV5qXlqgkSVp1VrtVcwEAAE0HiOwbpdRfTY7TISPfGgHnr7AGAACAprXR0B0jRGfDKwQAAAAAAAAAAAAA4FaXPCfvyU/ynbwlzzw+BKvN1D/OqTMak4/m6zDPO+uaK1GmPTeXXQB98rmgUNYciTN9ABaCQlwAcWZZAL0urhUDlMrkAOQt4oFxlQqR6exCHWHGizEmRKYT4CIJIB0YY0JkOgHe5I2g2JoxJkRm4T4wIj8YC0339B6zlDjTp41qTc0u6Sp0Ik+E77Yo0xcgfWqrzJO7kZdmYyojdiYHQNkTLzgf0F1kSI5NsbiCDvg1k3M+wAX4icQHHHU8M8YPDQAAAAAAeOkjwAA86LR37Nuw2wAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzBGQzk0OTlBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzBGQzk0OThBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4nB2+CAAABJUlEQVR42uyZPQrCQBCFs6Kd2ARiY2Er3sObeAULD+EZ7PUUNjYW9tpYKamCiI3I+gIWIk6cJTtF4A18aLG+9UuW2fw4733S5GolDS8KUIACDa92zd9b9mDHJUQBCrALxe0YFp2NS4gCFKAABShAAQpQQK4umIEduIECbMC0xoVg3Mzy0aLACBy9XNuP74mS6JlOeDaagj0YRLyctsgUl9A8YCJtWWT+PAOl1BlkEW9oLDLFM5AFTqQpi0xRoBOYcVeMscgUBS4hAaiDYoxFpijwAOuAyVaKMRaZlfvAEFz9/yp7ek/Zsy0yKzeyCSgqJjqBccAmZpKpOWrLryOXgwVIA/+8SaZTvqUsu0gfPEH+/qxbUTIdX7NSgAIUoAAFmlwvAQYAWJmxzw5HRIkAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzcyNUUwMjBBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzcyNUUwMUZBNTYxMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6PoCmLAAAD0klEQVR42uxZS0hVURS9r7R8mp/K/kUff32gtA/0sdIiGtSkKGwUQUFE2CCiSTOlLxRBEShEDmoSRBANykCIqGwQmaYlFaX2dVBqlKWvbB/YN1abdz+ee6/PB2/D4p2397vnnPXOOfvsvW9oYGDAiGcZYcS5JAgkCHiUJCtDKBQadpON5nCSAhhnHmEhoYCQQUgl9BA+EloJjwhffWUVDYOUIsI5wgfVpQMihHpCOWGs17l6JbCIcMvFpK3QTaggpA01gWTCKUK/zeQaoP2F0GHz2zZC6VARmEi47/DPHiOMhO+NhExCrcPWOhg0gamEF2LgakKn+P5vTCBg8IFuBP1dwj3R38mgCKSLwb8Rygi7QfeSJ2lFQEkhbD31mUc4LUgcDoLAFRigi7BEXReE56DfKseMQsDgVTJtZ1m3X2ynEj8JbIPOfxHWsX4N6JuZkBsCs2AV1J0QZn2FONhpfhBIIbR7cJVeUOkHgX0xmrx5T2TZEQhZeRyIhdTWmM/tdt6fYV7eDNb/5FtYyhz+jPCz/w1BmA1brYsdQ4T7zWbbAb7lo59NhxUogn/jrYheN4KtxsrzwX6OJp/AG2FctgCerbebq1M4vQHaVwl/4HsOtJs0Q7FGCCpngr4ZbMvsYiYnAiuhXStsOOAbTQJtwjOh3IQ5LtclkA/tZ8I2DdqfNQl0WvRn8I1vSsGgExoIHUx5wHvSlMniYuoVz4ZFP2pL9InfYB+VfGBNyYT2JN184HcMXSjigu4h7h0m2WSv7hnogXYuYRzgBtjWC5sJUzos7MfhN3v4bgjx9tsLtm7dM6CiyyngdV5beJA0hzy3y8KeIe4EAy7GHDEPrRVogPZSYXtn40HcynSL/uR4T3UJ1EF7k7C9EpUIHZkLbVzd8YTVsDItulvoDscn6Rw613A4LV3bFo5arUStUFWUWCiP232c1GAMlczta17LKlUxdqGLvYbTuQ7VhyBR61dGdh467ecDpqoOm0HfZBONyoxshsjIRrO+XKSVhX4RyGK3icn7BHYC70Ff4pLAUbBdYt0qPl+m/oTfSf0KMcBjjnEqQVfngkA2X0ymTXmbYr4rTJ2qO40Koi60g5fWHEhlYbvEhHY6ELgIelUTOsJeyNS18uoGVpkrEyuh8F2UXNZaEDgknvshvj8REWpgtdFih0qFOqBnRDp63cHjXCaMGcrqdBYn2xGPrlL9EdtjVV43+DatFufADVq4Gpfi5f2Am7KKWwlzpaKU3xvkc1aVyr6+k9PEh4TbIlDUfsXkJ4Hh9Y4sXt7gJ94TJwgkCMS5/BVgACZy+472MaEbAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4YjhjMGM0MC04ZTFlLTRlMzktODY5YS0zNzYzOGNkYmRjOWIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTBCMkM3QUVBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTBCMkM3QURBNTYwMTFFQUJEMURCRThEODFBMDU2QUEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzNhYmU1ZC1lMWEwLTQ5OTUtOThhYS01NWJjYmYzMTZlYzAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0YjMxMmJlYy00Y2Y2LWFiNDEtYmNjYS1lYWM3MzY0M2NhZWEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5tva0nAAAD1klEQVR42uyZSUiVURTH3zMNh/RZWZmVaWWWUSYWNGlalIto0YStoolaBC4i3EQbbQYjcJUQudBNEEG0KAMhogkazHJKo9Qyc5ET5dCr1//C+eB0eN97X/cNKr4DPzzfnf/e+93v3vPsLpfLNpEtzDbBLSQgJGCyCwgPQJvLwSqQDuJANBgAX0ELeA56x5uALHAY7AFzvZT9DV6AalDlsxj1HfCBTHDPpW/9oATE6I5Bd+AR4DL45WFwdcz/Djo9lG0H+cESMBs89vKfPQ+msOd64AA1Huo4wclAC0gCzaLjCtAjno3yXIB6jibfsIfgkWjvUqAExIrOB0EhOMLSWmmQZgIUq9nSU3/TQJkQURwIAdWsgz6QDeygiaXvFnXcCbDRLBl2ldJOiOWU508Be1njI2ALpeey9AYSZEVACpuFXhBF6SXixfa6O9ktHKcjwXuwYAw+tGfBGV+PEofGaPDKikC8pwJWZqABZJDfAZwgCsTQUUHZMOhyU3cR/XVS3X/6BqnG9xT0gUEqq9pNYCLKdb/EWWxNfgJhLK+A5VWa1Ofr2V1+N9uNwln6Clb3macxeltC25h/E/xhz4uZ/1ZzidSzM9lCMetG3lowXfcd2MD8GpHHO/yoKaCd+Ski7y4b4zpdAUuZ/07kzWP+N00BPSbtKWtmfrrucTqJ+U/oZTMskfkVYEjUjRLtqCUxKsrwNkrphTXMwfw5ugJimZ/qoVyGhXvHSi9lkgl35tBdQkPj5OY4pCtggPlLwAzGHZa3VeQZGNZpkn+BlTlK3wY7Lb/jLK9fdwm1siui2nU+mOwgMV6uhn0m+XHM72b+sNimW3VnoI75a0TeZw87iFWbb9Ke7O+NroBa5u8QeW0iEqFjy5jPZ3cmyGEz06i7hB7Q+UTtRrmgEoy42dp20anVzNQMXXNzFkojX22vZeIMFUH+LV8Pc6rjY2O4A2WDV74IULtPU4CCYDYLK2C7r/eBNjH9TjpgKUE7xVHDLuCHPZ6eTO0YO1QkpReJAFixvwJb8XQk5pf3WXS8/sLS8yxeKc+xvBuUtpGuq4Zd9Pelfr3o4CWFWUpZWq0FAQkUkTMsB2yiQIFhKu40NRBxof0UMTCsCxwUAzrgRcB1lq5iQqfBKEtrodkNWGSuUMyEsh8i5LLZRMApUe+neH4NEoMRG1VT3uEhTKiuiFfEdfS2l3BkFZgWrOCu8WKXiyWlY+ofsS/Y0WlOGkXa+v9z4I0UjYv0pX8rHzKrpo7ABSAfZNJ11EG/0PTS9VFdE5+C++KgqG3+FBD6kS8kICQgJGASCvgrwABwOuT+LTc6HAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Mjg5RUE4MTFCQjMyMTFFQTg0MzdGQUVERjhCN0JFRjgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Mjg5RUE4MTJCQjMyMTFFQTg0MzdGQUVERjhCN0JFRjgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyODlFQTgwRkJCMzIxMUVBODQzN0ZBRURGOEI3QkVGOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyODlFQTgxMEJCMzIxMUVBODQzN0ZBRURGOEI3QkVGOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhCTGioAAABNSURBVHjaYrzHxvCfgQSg+PM/I4hmYiAT0F8jCxAz4pD7T46NuDTBLWEBhhJc9D47I1GasNlIlCYUjUDbCGpCdh0TOZrAEiMg5QAEGADICBcZn0ZaAwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTFGODYyRkJDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFGODYyRkFDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4pzy08AAADOUlEQVR42txXzU8TURCf3S4LbYHSAiUQUcAYCAcPeFESD+JVbhoTA0fiSQ5GQf8BE1APXr1qNEEuRjlojCCakPiR+EXSmkBRBEo/tum23Xa327e+t91dabuAtEtInGTSt9vZmXkzv5k3j1IUBQ6SaDhgYvTFhYcLZSt5MnTKsgiwmO9hjmJWtmFOk2EtjYBGk5hHd/nGrcmkMd+wGgPDe/h2xIoIUHoVaBjYa0lQlRgn2FEjcGVmETqa3eXoUPbIBfhpaT2cx0A1Q4OTtbFHPHXgrbcDQ1tbnTJCEOLT8CvGuxWFGsVRz1AUNW6AkKEoEGU0aa9hIZSSQMohsKo/YdXA2mgguhudDogk0yRvI/PXL97EfyPVAUEmBpVhIkiMW0lkI6Kc35CNYXSv3NrmJTovpG7Xk0Vo3zoe0U1RVEkLYIq9NaNDGBcDXR6or66CjYQIr5cjEMtkC2S8DhbOHm2CZvwbFiSYDUQhmBR30k2bNaISanfZ4Wp/JwZm3vvuJif0tdXBxNtl4EVZfeexV8G1011gZ2zq8zEgMvVw510ANlNiZYfRyfYGw7hOJBL97X/L9kSbyzCuUw1+HuhqrPw0tDPmIt5atsCYqYyTrdwBXzhp+n5rsfi3kZGRUrkDH9bi8GaFg1wRitb4tLH+waXguW8TskUl/DshVu4AMTu9uAHjL33wJcir7yRc1x/X+QK5F0sRVWZ+hVOfEXb4/WrMuomop7EWeptr1fUz/yYkJblEpqPBoaKf0FyAg43k7hHYtQzJOXG+t1WtBpKFGX8I5rRdGkpwgznX7YUzGPU0Xs//5OApTkk5A0kJXTreBn2tLogKWXj8dR380VLADfa0qCWXwH1h6nsQPgfjZU9EJfRqKQqf1njwRZLbnhMLONeBWArLCJCRcxWNZCW0Gk+rvBORlhv8h3wbwEYobgZCbr9HcH36khKxKTMHHuy3A0JGlDKx8KNv92/dJpVanIIxlJMZirYN4WPTZenOEeKFWHhmdmLsrsCFCIpJE5GLHZCmLw+ScXsMcx1mB2abxUEgCBUwJ3QHjKmYDIhb0sJobPXVDWmGZbMUbBWSNP7/L6fUQV/P/wgwAOY3UmkhFMarAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAByUlEQVRYhe2XzU7bQBSFvzgjHH6S0iKhVoqqSmVL1V2XvAISK56AbXkCdqzgLaouuqm67jNUrdQ/9W9RYf4ioDaEEOOE00Vq46jJBInErlSOZFmee+eeM2d8RxrIGYVv+83kQwIhECXBuqSnEgWhTkwgCdF5+/UI//Scxw8qFIsOe0FIZ/pAaMs78JcWHt4xPYKPBM+A+cv0TlERk8PJWYtf9XPm75cpuUW8wzBOtaLdvuDr993CkV+/DZAIEBRAq8A64CYrjYumKjfCFgdByNy9ScoThq3D8K+cXmg2Iz592aZxFiZjztysC1BFvBZsItz0yruqCsKoTc1vUp0pcXfaxTsK08l9ERw3ePfhZxc5gNnxo+XJMWdDUBGqK64T257ac4CpUpGZ8hgSBI0WlXHzJ73/5nu7wdT7z9tJjS4BP3ZOnlulDwFvP3p9Y6aXqmHDxmAy4MfGYXSVrr0+WqQ6rltAJg7oFLjVU4DVn6EJ6B/LxAEbsumCvB2wt2EWXfBvO5CzgvyP4kx+gbwdsMFkQW9b5M1J6IycfQD+awdqAM7ljWd0TwoR8ApYBKoA5koXqWtC4g3wEnixtvKkFo+vrYyc+gaD8Ru+5CfMxLTKPAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MENDODY0NDBFQjVCMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MENDODY0M0ZFQjVCMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpiN2VlMmZmMS0zMmZkLTQxNjQtOGYzZi0yN2IwNjI4MGE5NTQiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz44JtPiAAAAyUlEQVR42mL8//8/w0ACFhAhLinHEDZnO8Pz+fVYFUkmNlLd4lUpnmCaCUmAERgaXkDmMyD+TzP8//8RkF0we5mQHMUIBHNBHqZpmDMyWgNJZmwOAAlK0CnqmbCGAB3THuNAO4ABmwMYRh0w6oBRB4w6YNQBow4YdcCoA0YdMOqAgXYAqOfyckAd8OPHz1wg/YqWFv77++ck1LOQvgCodwzqnEIdww7FzDR0wy8g/g7Ef+C9Y6Qo+AmVYKRRRwVkxz8g/gsTAAgwADedQ1H9J6L4AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjc2RjZFN0VDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Qjc2RjZFN0RDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7qIg32AAABWklEQVR42mKsqqpiwAZyfT4zUAPoB20A0y+fP8IqzzRn3mLG////ewHZz4D4P7Xw//+MR4CWMxJyIBMQMwLBXCAtyUBFwMj43xpIMRPjAJAiCQbaACaiQoCBdoCg2Sw0dgAciEvK4XQATgBMSAzX7v9gWLbrA8PHr3/h4pKJjURZGjYn/QcOg4+uSvWyBbHwxtF/hn8MS3a9R7GcSikUnkDxOuAf0N7PX/8x0DKBEgwBWidQJkJpgNaAiWGAwagDRh0w6oBRB4w6YFA4ANiC/f9yQB3w5cvXXKAjXg2EA0BNsr8rV6/fAqR3Izej58wDBw2bnY35M1o7ANSR+AnEf6CNBEZEy4mRnR4hAOvN/BuMuQDkMJomUBZcnUZoO/7/jx8/czk42KcA2WLUsvTf3z8noZ5jAHVM8TkAFELsUMxMRY//AuLvoHTHQkQUYE2gFABYegN3NgACDAAnVoG963bS6gAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Qjc2RjZFN0FDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFGODYyRkVDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5ch4E8AAAB2ElEQVR42tRXy0rDQBSdmYT0Qa2WVkUKigsV1/6DuHEpuFBwU9wVXNmNP2Bx4U+I6FrwJ1wJoksR6cM2tW1MY00m3mnTkrZUSTJp6IVTQjoz98y5j8xg0zRRkCayn/uHF0+L7GxtuJ5LUMA2TEACXAKqAHMMZGuMxC0ENjsHZP+Zk7DGtAA53gocOpib4aEAZlVgS0KnJYG9Jm9HgfRC0m0mmw4xkD+LS8vdHCAYo+dCTUqn5lAyFkHxsMAlw1mLUXUDMZWLdRWV5GYCnrMADWN82g/B03sVxSOiqWgGMqiJKOfmxDYoEIxqiorqzS9GqHa0u52Cv2gnBMxpVCS+OGfG1uz4CIW6iYNxoleB/SqQBOKLczsJQvBICyBBN8HAW7HodIK+tz9+sdvr6fsYOVZgeJd/KeK7AnbnbuT3RICHc9cEeDnnUgVeyUx/FfA+EU3EKKX1QAhQ2v3YfcryzQiBb8N89ZuA0tLalXLpKn+WyzM+AzkQEoW8ruubAiEHmJBZzpI3yqXi3clx5uKjWFDgVYMVUP9E9PhWQWvzsdDK6voPvAsDZgBRgMBZBAOgApoAjXHDvbshOyDawiJa4J0j1Nq5PhKCoUFtCxO/mk3ccNDX818BBgAducu1VKoKmAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QkNEQ0M4RkFFOTIxMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QkNEQ0M4RjlFOTIxMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozZDQxMzYxNS05MDhjLTRmY2MtOTQyNC02MDFjZmYyOTQyOWEiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4faqZHAAACgUlEQVR42uxXTWsUQRB9PTujGxTxIH5BLkGIIAgBD0IuCoIfBxH1T6iomKt4UQS9RBIj/ggV/AEiHgVvuWiMXtSD7mHdiAaz091ldff0pHdN2OzOTuagBb1d09NT73VVV3WvICJUKREqlv8EKicgzM/0hWrAp54BcTjwamFVPzaOS9w98iQLiEmzG2x7JrCdS7zWFyH48gqgC2Tq1gQiqeEB2yQmMbtmCELhcOTgX74DHxrFls8EMDEK1BPrievs9ofh+1pAJLp/Dpe5n+PaNBRwI1IBjZ/Arm0QUYRTJw6i9eId3oQELPjds7jCyqzWEJ8Y/CODmyI5jOZJ7GQSSYSTx8fRerngSMQZgXj/vrGZo5NnRH1kO0x5JmaiTWNda8lWNBQ0iK3p7J3UrCseI27KjdlvycyB7bul3V4Ri4uvp4HmY35M46wWJEcmJkVCEu2lBn/sQZRryumkFIMaMJmDu3G9Op9MT5bU30kvECd1jO4d40U3eXdART4EIAGVtssDtwlJkOlvKKV9ERS+EgqVg5YEHpDIpoiOOuAMiZ7gB05POSOmwfX2mW3MP7ndd5Z0EUDPla8HjgHvFTkBt+upp9vfPr/X4fZD528ODN5xGppU6zfmIfj80zsFCSjadPCuPSAZJNpU8E4CDCLZH/2AGzl88VauD0ImD4HaYJ5jyLfoIAQm9uhZZIq6fD0CJKWEIFOc9GAVboNiU915kTwBo+jmj+VvW2piz46RxA6VBb70K0UqqWFXykBxpqTvP7euylTPaVK73ZGqbc3O6twwb8Ffo1p0zWAabJGfhs4biT+lSroIk1+wuSx5Av5kEiWDd5Mgvw/+bRFV/z3/I8AA338cLAScyV8AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTFGODYyRjdDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTFGODYyRjZDQURFMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7aJFBhAAAB10lEQVR42txXvU7DMBD2JSZQKqgKA38Sj8DCczCwMLVjxUTZCoyMFDGw8AJFDBVrFxaeoAsSj4CQihrUQn+Spg5n5FZJaQJNHIX2pG9IYvs+3332XcC2bRKnKSRmi50AdT5ky9VAi5QOdmcrBRriGlFH2B7QxRhNagqEFRH5X+alxZgO4lR2BLITzM+FjQA47wEhwkkvBggj3GEEjirPZD2VDLKW/Ue4dLO2sf2NoQbmqUKSmqptphJkNblAqAJSVG4xm9RbXfLa6KSRRR4j3gWAkx8ipADEsFhRm6Ok1jKI2Wck7C2NSxJNVUgC11xOaKTRMXm+cg/H+2f4mbkItC3u0M7yCdy5DOMbMCyxEYABq7Twa7o0IMS40mNM+mXD1wSAscefjmPtZ5mdLc9vt08vnpHwOv7/qxj9xUZ36ReRyIuR07lX+CMjIMN5YAKynAfSwGjOw5KZ/lMwdU2pzVjDj4AemWNxHRpNvexHoBQVAaNnmR29dle9Ob8cVMJxGiiwvkVBUTNYPFKSQt5sv79VHi8KV2299omvmrxN8CJg3h/u8WazgFhCLCJUSUHo86qP+HAScPWEvEVypIYKyBIqE44tvxQ4B5uDpmGm/w0h7t/zLwEGAFpNuv6RVEs+AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjkwRjFGOTRDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjkwRjFGOTNDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6HBGUUAAABxklEQVR42mL8//8/w0ACFhDx77DvgFjOZLuZgQmJzwbEE4H4LRD/pxF+B7WDDSUEoKALiPNo7GlBqB3fgbgCHApIkrF0DP1UeDQgCQrR0QFC2KKAbHD/2VeG+jlX4XwjdQGGgnA14hIiwwCDUQeMOoDkXPDh82+G959/gdmKUtz0c8Dztz8YVu55xHDu5gcUcU8LSQZ9VX7aOgBkeev8awyfvv3BkNt+4jnD0UuvaZcGfvz6xzBp5S2slsMAPjmKQ+DM9XcMT9/8wAh2Cx1IaXr78ReGTYefku0Iwg648Q6FH+Muz+BmLg7ngxKiqiwPSlFM1ShAT3R2hqIYakCOkBbhoE85wMGGXYu4MJ0cACoHsIE7wLRAEweAqlZksGb/Yww1Ry6+oV0itNEXQUkHhy68Ybj75AuDozEkIV578BEjnVDVASYaQgzqcjwMNx8hghiULZfsfEi/yqg4SgPsCFwAVC7QtCgGpXyQI0CF0sHzr+ChAXJUoL0Mg5YiH8PL99/h6hUkeYh2ACOoZwTtmNC7i8SI3jF5R0fL32FLA4vp6IA52NJAGShYoB0UQRpZ/B7q0VpsDgA1c/KhmH4JYaC75wABBgDYK6zYatRG+wAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjkwRjFGOTBDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjkwRjFGOEZDQUMzMTFFQTk4ODc5MEMxQ0ZFRTA1RjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNWNmYzY4Yi0wZjZkLTQzMzAtOTMwOC1iNDUwZjI4NWRlZmIiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmIxMmNkYi00YmJiLTliNDMtYjU5NC1jNjYyMTY0N2MyYTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ngUl1AAADUklEQVR42ryX+0sUURTHz8zs7EN3FhFsLVPbNlkxV8rHklkIkQY96CFYRj9FGEFB/VRQv9o/UCBIP/agDIrSqB+CHoZFVOK2uZubmrttbaHlY3f2MY/OtYm0Ntq12bnwYXfu3LnnO+eeOfdcSpZlWNCeVoHKLQfZieQhnbBucMFNGrLTWGQ7cgkJI5eRDakG6lQ0Sl5mI7IPaUXy03lIDQFrkf2K4eWZPrxYAWWK0TbE8T/qMxGwTHlLQp1a6/aHgG/Hfi1d3rlJcrFHedvGbARtSg9YOqb30haBGN2CGCCLLaWA6TOWC2wFBI3NMZqxRQEojQWADOakB8qTHiNQZtOMsVHIYWuiDF2Q1EjAfC2zMsf3MsD3cqBbJUuGWoHWVUeAMknpzD+B3EF6kHupBlC/p2Kf+wlYD56W/5XnDFUS6F0JoB08UMyC4W8Ug7eRfl9upzj/psPZoEIewJWIv6CRuSUCalNROFbjHKQLxY4JtvGhFokIxMJ8SNavAb7WCYmlS6zY1URgpmcx98vdooW7iNfPEUk1AXIeB4n6qjmj8RXFKb8O0WImYo4qhJWluIXcP3n2fPTmlQyXQM41glC3Gvg6NOywYypK/5vE+LKOBkIHHj0bcAVD4R3Y1Z6WB2RWB0JtRYxvqOZjDptFZnRMBkZhLPgRBjzD8VceXyIeT3DYTYqM12kvwdSpQ4fjtuJt+LcZYdI1Ojj0DtxDw+JMJMooGdSQcRC2j5IuWxeMQleXTcjFi61Ii/LLpTLq8fphajby89ZfBX9tO55ZEKIYMms3AcUYBVFs6vd/OPFpPLh+eMhnmGc069txJYrZRUt0q6Rf6aTsNtloLpX1Y16KDvgBhKTqAkiou5DdynZMChCQ6B+7sUxRFF9YCgTatVk0Bkck9r2XpUNjOEhURUAAKUpnAolmmGhJGQMlqFEU4jkBf1I/4jFTn4MkUBYtoGhR/mR0huiKcgLQycSMafxtjPW7C6jJcFaL0tSeYfVcxF7Jgb1SMIUDj419PQNaCiC+71fOA9d4a/EXvuWIJh7wKocRYnhEq3NBCLmKkN3vpVbnginkhmL0AdkEtTgXxJG7iotJxcNrUROSYqJPMXodmdSqKHUrgUQYz+a54LsAAwB7PSzVTR6hyQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3VpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowNzZlZmExZC01YzBjLTQ4YjgtOGMyOS0zOWIxNGUyZDhlMTYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzZERUJENEZFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzZERUJENEVFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowNzZlZmExZC01YzBjLTQ4YjgtOGMyOS0zOWIxNGUyZDhlMTYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDc2ZWZhMWQtNWMwYy00OGI4LThjMjktMzliMTRlMmQ4ZTE2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+E5EAIQAABCBJREFUeNq0l39MW1UUx0+hpYWuRUZZcUgY+4ELS7ZBcDP+Npos8RcaQ41LiD+ymGXqH/rHpn9IFI2aGBP/UzOzqMxpUBOjqYtuZiHqnCIGYg0bGRbGXPkxcKUUaWmp3wO37737Xkv6ayf59J17332v55577nnnmkgn3d3dfDkAnOBtsKi939bWRoUUs7huBg1gAPwDasEL4BbwIIglH6h+8ZuCGlAkrruAF1z0eDw/+f3+etF/L3iKrqIUpei7eWBg4BFN+2Vgv1oGmDMYUwXuAZ/r+svAnaAFuMAsGAeD4DSYL5QBpDPAAg6B58DaNOMXwHfgA3AcxLNZglSyjX+e/cNWjssP4NVV/pzFBloBR+x5sA+U5GxANBqtE+oxcGuWy7wBHAZ/grtyMiASiZRh9nvFUuQqvM1Pgk+Ae/yN+zOPgVgsxi59Sdu3vaZc0ecWFunvaWPMrS+3kWuNVWmfn5qj+WicJ3I38glPps+cxQyuTSpuh5W+f+Y25cblcIR2vn6CYksJ6YGjj++mxmqn0m7/+Dc6MTjB6jqRe/qKsjDAkVS2VjukGy67lW5vqJL6WuoqpD9n2VK1JuddII1tWOcw3GzbWSu122+oM4zZWGnP2QDJt1vdTsOAPY1uclhXVrS81EKt29cbxmzK0wOKXO82vqjUUkytO2qWdU/zdWRDWy/1eXhAZ4AzZf/elpVlaN+luj+h8V2100b2EnN+BtRcY1NczXLy7KSiN9dW0GM3bpBixOsLyFmpsiy/GNDP/vDpYboU/E9pv3bfNkUfn12g938elsZv1sVBSgOCwaDUNplMCTUA5R0wNDlHR3svKG1LsfrKj34dpeGpsLwTXBkY4PV6qbOz02DIsgc07g1HYxQILtCx3lFDElqMLy33z8xHaS4SS5sL0i6Bz+ejjo4OCoflGWiT0Mh0WLg6IsUCy/G/xmkiFFnWx66oabrelUUMBAIB6urqUgebTJiBQ5PbVeO6ekekZ4+c8Sv66LQaI5vSLMEY+Ax8BaSo6enpoVAoFGW9tqKUykqKpY9LUk6dm6Kxf1dmOjgxS2f8M8q9ZD+L02ahSrvVYMCP4FHwEMpyrpB3gE85+uPxOPX3919M9Q0YvqwasIQNnwzGI7/I3hiZ0QVilboMpjTngpWM5vE8zEVIU1PT75f2vHKTbmgInBW1H3/dtmRR4iXPHu+uGgMw5ktcnh8aGgppzgaDotxaKz6pd4BG/gSIMv5D3iD5lOV6eQ874Zx4KRvUDL7WHlaEsCe+BU9wsHNOAleyrorhdn0XV7RfcABzuucSMQOjp0QF9Q7oBPvTTTbTVMx1/pMZ/rlWpsHTYql8+RgQn3jzgck8CtI+cYB5S19bmBOJxKpPFvAwymnxIKcWzlvZnowKKXwI3i0Clf4XYAA/EDgbfkAEYQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzZERUJENTJFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzZERUJENTNFQUJGMTFFQTg0OEI4QkQxNkQwQzUzRDkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDNkRFQkQ1MEVBQkYxMUVBODQ4QjhCRDE2RDBDNTNEOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDNkRFQkQ1MUVBQkYxMUVBODQ4QjhCRDE2RDBDNTNEOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po7qg+wAAAMRSURBVHja1JdtSJNRFMe3WuVLLwZllhpMojDLChdFX/pQsaiEbBZDCAqKhDIqCMkEi0hMImif+hZJEEQmZi9mhR+aRjTTXrAXsq0RJTOwdELLtvU/cp64Pj57vBtb4YEf99xnd/eee++559xrDIfDBi2xWCyGeIvL5RrzbZLhP8uENGAKmAeS/rUBRnAK+EAv8IM2UAqSYzXAFEXbE6CK9X5QA1pBACwHnWA4UQYsACdZp0Gs4Fk8tsBkrPuk+UPB6GoZSGH9WqyDa41lktz73UplKN3c/NZ+fhX7wADoK3DYQon0gcUgU6mk+twtKCh6bQaFYFPH4fogO2YP+Mh0gy4Y911/dlc82lvgsCmqnZd9ZAHAdLEdBp+GogSUgyUaXb0BTtAM7nMfUR3DdEH3axgaAJehrgBneXVEyQX7QT34Ci6BhdEYMFXQI553NqQS6nGdvmaAA+AdOCprQL+gz1QZpCUX2R/0hKLoBbBPxgCvqr5IrzFW4TcKj+QhKJMx4JWqnq/XGE5J25QnacCwjAG9qlVYP077Y7zXMtIgm4weCfrWSL6D2e9EcVqyT4oVDtlc0AD2sp4N1vHZVgZORVENDkk6dh/YDgZlDaAA8g3M4ToN5MTAtNR7OAhlSvbVAXbxCkjfB36B60IALX5hr70B5Qsto+Tgn8FBsFYZXCoXYJYZKFameJ6Hcm9Vc6ALT87qbLJ5rEfG+/tP8BDUgUaeyJhcMAtlBi/vfJADzHze88VQnHOn1jC75+nfP78uqjIEskedStqmLtAOntA2IS74hcloZsMgR6a5PFgyf/NyFKR0nEYO47XsSEpzu6zGUHBk65berhnoLqwoD2Qto/v2B53MR74yGGs2VMsZUCnUX4KN7NlaUsKTcWqtgDGGhwndih+DNcI3N19a2lRtt4CrfHSH4vUwoTthMXu1ImY2qomPJa3IOXa8u+o7QKy3YvWR2gAeCLmdfGUbo8gPUJGol9F7sBq0RPid7otFGtk0rk8zH1/RKaze48RF327yxbo1ng8TPWlkJt7j9I8AAwD3p9cpqoDWqQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAB0klEQVRoge2WrXLDMAyAv/3APEDRSIOKylvekrKRoj3DUNFQH2BoD1C+opGOZzzlLc8DBA0NxF6UXJMo2ZrudvrufJF9jixZkm0wDMMwDMMwjEtxc2kDKgiAkZPTuolX57elNSHwLPovwK5q8l+MwB3wCSROHgHbqsm3PRnVhti1AJg2Tb4+uzndCIC1kyvTB3QRGLjmicnyNHD9Aw2FJhgLOXFN6krd2NqN74BNnUKNAyGwEv0l8CCMWSp0eFbC2A3wWtIVAUe3ZkRWwLVoHIjcIj4KoVhwR3H33yp0LISuuZOHQp9nD0ycnAL34r/klGJtEUdC2USM75X/e45CDkpfyNLT65+L8QM/dOCd3AG/+ymZY5IF9cRCHnO6Jp6UNgH6Uygh2wXIUymumNukR+5k+XBojTYCA/JcTcnCPnbfNjUAv5eOgD4CMyH7SKgumhPIOugtArKgtuS5O6N40TTVABQN9Q60uUsKaCIwp3hpyRwOKe6ihpQ8ip6Pljq+0ThQTp/ycTajPWWDyw6p0aTQ44kxTarUkZbkTvkPl3vMDYXc2Xjo/zk9JTNeHgqdjk9P3xEYkN8BkOV+7XO5ib4jkJJfhKrXpmEYhmEYhvGP+QL9m1fJg2Js6wAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABs0lEQVRoge2W4XHCMAyFn3pdICtkhayQjsAKdARW6AowAhkBRiAjNCPACK8/IoPiEnASIPzQd5eLbYQs209yAMdxHMdxHMdxDCQzkiXJfO5YBkOyYJfl3DENQnd+TXKrCzjOHdMoVEZ3F/DxqoCGQDIDsNPu5patJDjLAZyTSUT2JAsAmQ7VInJKDKw03UZEmsjXCUCjwRcANiLyneL71qSLKKkykjvbV7ubj9oczf9WOmZ9bUmuQjslvrsSEpEK7a4ECgBhJzfR7rPnCVSRH/sGgL3xfdLFrCaXU5I/ZpfWpr0wNmA/wWZpxnY6ZsmjEwmUPaElLyA3zn71fYxsUiRk/ZBtyTz7HRNbUhUSkQZArd1wnPuhk6kfK0crjcH+gMQFsNVg0GrQfElNYGva81hsHixM+3kLAGCv83ASWRRAKrVpTz6BJNgtf1a3B2NzNwfULuN/DlcnflDwtnIcriTi4BKnfiyrsfGlSKgjH03Evt9TqaJ+fdXqXYlOddLX5lwfc/HtO5rPiYEMgu3NXaAru+dVn0fDy4faw6rPqyV0wuUirAB8vXh+x3Ecx3Ec5534A/F+SwdqC2c1AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACa0lEQVRoge2YLXcTQRSGHz5OEF0VRKJQq2qIQkVhiKopvqqYKn4Ait+AQtUHQ0yjMEXFEENNMFGpKWYxwSDezGEzu5s0d2YPiHnOyTmZ2dmd++7OnXvvQCKRSCQSiX/HgwjPyIAh0APyUv8c+AYsIszRSKiAEXCGRDSxAD7QkpBHAfe+Bs6Bzp5xXST0BlgFzFeLVcAAeOv1FcBnYLb5/8y7fgxMjPM18th433OvvUKCilLfHLjY/L8Eroxz7cQqIPfaU7aNBxmcAde0sHQcVgE+vYb+caTnN2L1gafIDxw58Bv4HmzRgVgFLJGAbqlvALxEQlrd+8tYBayBr1RFZMALJOQJcEfVN6ISEgdOkKF1ZEjcCYoTP5Do6FgFXKBA5ijQsurWjD1GqcYN+iJRsQgYAG9K7QWKARNk5JrqNuvypSmRv4RFwCnbBn7kr9OuUCSeAf3Nz9FBQmaGORt5aLinv38IC+Ad1eg7NMy3E4sAn1Oas9FLr70razVhETD32jlaRiP2G/hfZKNLZGw5je6g/X+EaowlctZztv3lE5GjtbWgyYH3NL/xAr3tsvFut4pKSEWWoWpsdI+xY/T2o0flkEi8RlviF7SE+jRXZ0uUekQnRICjQEKmwC2qxPyllQM/aSHJiyHAsUYGTlBGOvCud5HIqMSIA3WMqQYxP72IgrUiy5DzHlENVo5b47MP4lABzvBy9P1FtXTMgFdeXytFzqECCnQiUXbSM2TsNRLTQzmP78jR1z/Y4sC+IFbHFTqdi45lF7pD+VBOfQHjM0a5UiuEno0O0ZLK2d5l3KHulBbPhBKJRCKR+APr/2wSkDXqVgAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABt0lEQVRoge2X23HCMBBFV5k04BZICW6BFmjBLTglkBJIK1ACKcGUQEo4+fCSUdaSnTE2UjI6PwxISHe1L0mkUCgUCoVCOty9CwCViOxEZCMitTd0EpGTc+7j3j1WA2iAK+OcgXp6tQcDtBPCLds1dMwKIRVzND9/isi7ftbSh5XPxTn3Mme/xQH25nQ7zQV/TuONt3Y8KcDRGNBG5rXAZk0tzwutExTpnHtbaP1liSRw0AtZAlRaHi0d0KTW9ytGjLgZsnr830UkjELss6pAIiLAwYi8jnjj5pE8ujGwNeLOtxPWMWucb2R6TwQE2o4rQM2wVwAcUmi24qywgQHe3EGoPVJrTJQ14DuEAnMr64Kl9TzN+M/JfK9FpKO/+0zF+GXGfsuipxp7A1zxLm6BEMqjW2uSjj1kQmX1nFr3D9QTsZJpya+Z3QA2asiYR9KXzynUIw191w3xNy55ItF7Ul45MEUoP9bYZ9aLTBOyEZHKOfcamZa+5ls0zluTsIParvNsLuQRQoQvaR19qWyJV6Q8kpjpJhYirzKqRow9YHz2qfVGAXYaMtaYo4ZUvm/iQqFQKPwLvgCpiCypib09zwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTk5NEY3ODRBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTk5NEY3ODNBQjBEMTFFQTk0RjBCREMwMENEMzA0OUUiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowMTllZjExZS1lZjQ2LTQxMDMtYjEwNy02ZjhiYjAwZDg3OTAiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4tuXxXAAAAeElEQVR42uzZIRKAIBAFUHC8lscwWTyaxeQxOBgaDEaa7PD+zAYab9jdQq61psiZUvAAAAAAAAAAAAAA/Jf5ezjOq+vL7tva9ALlqdpZlegtlJta6M1iiAEGB9hCtpAhBrCFbKEwyf4HAAAAAAAAAAAAAIYF3AIMAMlpekFYUthNAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUU3NUQwMDQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUU3NUQwMDM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7W5ot0AAAAf0lEQVR42uzZsQqAIBQFUF/00UHQEAT9tS0NjSWGSedugkMnexehyDmnnjOkzgMAAAAAAADQMuN1sWz7Jx5qnacywJnWt7v47yf08E3kl/ZpIQCASkN8d6hq73MCatQQA6hRNapGDTGAIVaj7U4gegKEn3wAAAAAAAAA5TkEGAB+Zxxj6E3/9AAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTdDQkE5NzU5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OTdDQkE5NzQ5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpjZjE5MWRiNi1jOGRkLTQ0MjgtOWExOS00MGNjZjEyZDNhYmYiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz76dIDbAAAAaUlEQVR42uzWQQoAEBAFUCP3v/K4gIVCkjdL2TzT/4nMLC9PLY8PAAAAAAAAAMDCtMHZ7d9dfL+B2ZfIQ/eEGABgU4hnQ7X7ng2oUSEGUKNqVI0KMYAQq9F7GwgZAAAAAAAAAPgE0AUYAAxGFmU6tXJJAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACCklEQVRoge3YP2sUQRjH8U9iMMEgggYhETSgEG2SQjCIItaCNlZREFHQTqso/kPBShGL2NhoaSx8BTYRklbQdL6BWCiCxEYQsZg7Pda7y87euFc432aY2Z3n+T0zz8w9t2QymUwmk8lkMpmKDDTaIVzAcWztg45vWMJz/IiZuKnRXsQpDKfVVZrNmBIW8n3MxOYOvBBW/i0W8CWlug3Yjis4iHWciZk82GibaVO3eA1/CwUdpRks9OsW37PfoZQqunAUc5jAGhaxksJwHQEcwfWW/u6Wfs9BFFPoX9DpUM6lMF5HABOR41HUEcBa5HgUZQKYwUM8wzWMRfpY7DD+MtJOWzY6xNO41/LeTuzDPL6W9LEi/GDOYRwfhaCWI7W2pVsAk7jZ5p1x3MEtfC/pZ1kiwUU6pdAY7mK0w/MpYRfqOENdaSdgVBC/Ua7P4nJyRZEU02NYyPnJkvNP4BNetYzN4Cx24INQIn/uRWQ3igHMY3+kjXOCwDfY6+9DPy3cYqtVRXajmEKzFWwM4CoOCSVCcVG24T5O+1O+JyPVIRzCbeGG6uTnPG5gSyKfvw2noszqHsZj7EnltB/X4C48wrEUxvp1j48IF8YlPZb0df2h6cRJoTR5WtVAcwfWk8ipxgE8qKqjGcBSMjnVGGm0r2MnNr8LrQolxFQqRRV4hyf42UcNmUwm87/xC+iEQMxfY06MAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzdGQUM2QjQ5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzdGQUM2QjM5RTRFMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MzYzNWJhMC05ZmEzLTQyZGMtODAwMi04MDc2Y2E0MjI1OWMiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4bY3DUAAAB0klEQVR42uyYv0vDUBDHE4W4CKWKg6VZXdTFxdl21kVpERf/CnEVF0eLq5ug3dx0cJQq7upgl04KghUchBQxfh+8ITySNO9HfskdfAhN4d19X+4ul2f7vm+V2SaskhsJIAEkgASQABLwrwQ4oAM+gJ8DQ+7fSayAzUIBjv1i2JEQVyS2MMyxnZ8pQGawJzGrkkLB4K9BDdgZUOP+wuKINfEJBH+wRd8y3PV58BqMTbcLpRF8CzwCj19b2v6EogiaZZitiIJt6fiPSyHb8O6zHV8Muf8EllT9ZynAi+jvIzCl6j/LN3Ff8r7xUaIJemAAusCV9HUQcf9Qa1sSFnEDeML/fTAnWcht8AxG/NrWbSJJamAZ3IJKiP4H0ADfhtLMeA3UwVVE8MxWwQWYLOI4XeHB18essQFOcpuaYnLwTnKC3BfWaoIeGIAucBPktHQNxC0ga79gh6+zElL072CtyAJ8HvQ671Bh9gP2gG1KQFwX0ukk4zrIJdgFX7pdKA0BSe0FbPIZKbU2mqYtgHuwXeZTiWlwzj/kXZUF8kwh0T5BVTeFhjkKqKrEIQo4K8h51anqm9gBnZzPhG54HErvATobJQEkgASQABJAAkiAhP0JMAAxLAJengtz9wAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDQ5MUI0RkM5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDQ5MUI0RkI5RUExMTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7lxtDfAAAByklEQVR42uyZu0vEQBDGL76wUPENinjgA9EUildbWdmJkkoQQRCsbAW1shX/Am0Eq2sEuyvEwsZOixQWgld44OmJWogvjN/CBIaguYh4mcAM/NjdzBH228fsZM/yPC+VZKtKJdxUgApQASogXqvxK67riu+sbduRZsABReAJoQCmoi6hWrADOgQNfBfY/c0esASuHiuqgHewCG4Edf6a+hS+iZllCQ2jFQ2jvk07c39+6UF2Pz4BZawaNIX4Hyj0iRDQC1bBBEiDxgjvawaPEgTUgSPQT6PaAD5Z536aiVcpm3iGylHQAtbAOWglMuQ/phjt8xL7JvbTDjAJ8tQ2o11i/jYqS+KiENlGoN0O7li7k8r7pJwDY5Tg8fzE2G0SBHSD8cAMpKUsoSgCHPpdgT3LJEWACZfLVOcJ3gA7uEQLWAJDVM8HNjVfSsbmpQkYBttUfwOXzPdE5QqdFSNgVpqABVBP9Rx4Zr5TKvvAmfmkZs/ECDih1MB0fDPgWwdXVDcpxh7YknSQGTukhM77Jt5fgEHQQ8sptgOtXDpdDPF9sFmQk0pU8mPkv/aA3gvpvZDeCyXoXsjSfylVgApQASpABaiAGO1LgAEAajeaste9Eu4AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0OGQyYjZkOS04YzU1LTQ1ZTctYTJlYy1mMTZjMDhjNDE5NjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZERDE2NkY5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZERDE2NkU5RUE2MTFFQTgxRTJDMkQyMkM1MTBBOTIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpmN2VmMTcxYS03MGYyLTRiM2EtODQyMy04Y2U5MzczYjg0MzkiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmU5ZGZjZi03YzM0LTA5NDUtYWNhZi1lODA2M2FhYzczNTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz70cgaEAAABwElEQVR42uyZu0vEQBDGL3qKhYpvUMQDH4heoXi1lZWtcq0IgmBlK6iVrfgXaGNraWchFjZ2WqSwELzCA09P1EJ8YfwWvsASNCbNZSIz8GNnM+HYL7s7O+w5nudl0mx1mZSbClABKkAFJGtZ33FdV/xg8/l8pBkoggrwhFAGs1GXUAPYBd2CPnwv2IuzBxyBq8eJKuADLIFbQYO/4ZjCN7FlB0TTaE3TaFiqimu1TMnZmO/Xg9aQ+CNTnwgBA2ANTIMcaInwe23gSYKARnAMhvhVm8GXNbjfZuJNyiaeYzsB2sE6uAAdpMD4CXO0z2vim9jfy2AGlNg3X7tqxTvZVsVlIdpmoN8F7q1+D9uHtJwDkyzw7PrE2F0aBPSBqcAM5KQsoSgCinyvbD0rpEWASZcr9O0Cb9g6uEQLWAaj9EuBTW0vJWML0gSMgR367+DKij2zXeVZMQ7mpQlYBE30j8CLFTtjOwjOTf1mPRMj4JSlgRn4ViC2Aa7pmxJjH2xLOsiMHbKg837I95dgBPRzOSV2oP1VTldCYp/WLMgpJdJwP6T3QnovpPdC/+heyNF/KVWAClABKkAFqIAE7VuAAQA7zJsxG/IKEAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACS0lEQVRYhe3WS4iOURgH8B/DEMkCG8lCkstMYQppooTFkDQp47KQshAWskBJLCQblElSGmalLFi4bYaUBSuXGcZYaoqQy8JtZlwW53zNmdf3+d7xZWX+9fSe5zmX5/+e5znPOQxhCP87hqXKzqsdpcbNxlEcx50i/dvQiwv4me1sXl1TksDwMgSn4BweYQ2aiowZgQNowW3MLLNmbgJb8BxboxNYh5GZcY2YGttLI9nDGF0pgVv4nLFNxMqMbXdGr0Y9flRK4AU2+z2m65P2oigp2oVd6amUANzEkYxtLcbEdvbvu9GAj3mc5yEAh9CW6OOwSoh7Y2L/GJ1353VOf3L9Cd+xEQ8wOdo2YEEy/7sQrvbBOC9GoA2P8TDKU+F8vxZifzvOacCXZN4uXM2sOwNzUIuDeQksi1JADzoSQleEozgqClwUtn0/aqLTWcJpKCA3gSyqMT9KKTQpXqByIU8S/lOU24E36ERXlAYDQwSX8Ql1QtyrKiFwTCi/nXiG90nf9sT5B4wXLrN6IUTdQn2ojfq8KKVvoiIE9pUYtwGnEr05klmMSUJyLhFK9/0opXwMQJ4cWIHz+re2B6fRmoypw9kS8/sqIbBQ+Lv0SF3BS1zCt8S+CXvKrDcoArW4pr/uF3Aift8ZWHwIOZS9Lf+KwBRcx4SM/QHuJXprpr9KKEzTKyXwSki0rxn7yYx+QziqKUZjeaUE+oTtnIu70fZWiHuKXuGPCQ+QFuFJdiYvgXKFqEt4Zu3AWAMvoAJaMQ178SSv4yEMoYBfppRxbh+K3NcAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABl0lEQVRYhe2UvUrDUBTHf4pz+wQWH6DBycni1KlG3IsUHEuDxqngGzhZJeIepIKbkHTQTBInN5vBUSI+QN/A4Z5LbzEhRawK5g+Xe5Pzcf/n4x4oUaJEif+OpUVf0OwMLOACqAFx5Lt7pnx50QSACXAiq9HsDBo/SiDy3TTy3RBYFTJjU76SZeQESVeOWtkCUs+uhzn6NWBbPkNUui2Al5toCFyJbCfy3UkhAaACdMUZ4ry3dXCaow5A3yC9KfapEUAPqDU7g4lJIq8EI9mrQAOYGNHvAq/GOnu+u0+ZzZYlZzNjF6hMWMa/7Ax4dn3sBEkqylVgaIifJBqNd9lj0a+gSgCQSP0vcwItbMJqgdxEIrtlEIiLjDIJOEHSECfaQdsJEk1mA5VOvfYBjBLpy8eeXZ9puLkJAC3thGlt27LfAmvGOjTsYoPAiDnwqQckUn3ZG6qTLaD1cH6UW0vBI6ppNflCfOsolvnRR72a9Xls8ubAVy7vM81c5sBaKAHU4AE1bq9/g8Ax6tmGnl1Pi5RLlCjxZ/ABxApv+tDwMawAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABsElEQVRYhe2W0W3CMBRFT6v+ZwMmcNQFEAtgBijKAK3wBAzABEZ0gIoOgFkAhQEqPEE2yAb9sNM6KCJOAPGT+5U4L7k3z+++Zxgw4MF46hKsjE2BcbCUaylOdxfgiVdA2vD4BCz7CmkVoIxNgB0w8kulJ02BJFibaCnKrgKeI2KmAXnuiTJg4oUUwKIPOcBLREwSXB8rIi1FqYzN+hJXiMlAEVy/K2P/ivBacogvwhUwD5Zy4FtLsb9WQEwGAI5n92NgrYw9KGPnTS/EIsYFc5wFwW1HQb0XgCvGXvVwMQPegiH5LHDANghNga+u5K0CqDeeMnBAoaVYAlkY6xvWTQWEKU2VsR/hQy1FjivICqFloxBTAzvqmSiATy3F1m/RwROXWorXrgJiXJBR/8sRsFLG/uBadILLVNbwbiuip6F3wxvNA2nRtyd0GsdeSOqFhP6/6zCqQUtx8g6Y8V+kyZmg2wpQxs6VsdNzIbgGdBUuTsOzs0CpjE20FNtKFPWOWDR8ohUxNlzjzgSXkPsO2RmtW6ClWACbCyEbYNGHHLrZcIRLeXgM29/iTDBgwEPxC0fwlYYuS1E7AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAZUlEQVRYhWNgGAWjYBSMglEw0gEjjJGz5YotAwPDAQYGBiYa2vd0io+ODLIAumX/aGg5VsCCxD7MwMDASm8H0DK4SXaALQMDw18GBob/NMRP8DmAgWE0DQwAGE0Do2AUjIJRMAoAyC87sLKZnK8AAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAVklEQVRYhWNgGAWjYBSMdMAIY+RsufKfFhZM8dFhxCfPRAtLSQED7gA4yNly5T8uQIkcIXsHPARGHTDg2RAORhPhiHXAaCIc8CgYdcDgSYSjYBSMWAAAxx4KtgvwB9YAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABsUlEQVRYhe2UvUvDQBiHn9outoKiVimi1g9wCaiDiA6Cg1sGERwUQdwzKoK46KjolEEQdCl+gU7nP+Ag6GAdgpOCuPmB4mJBbOvQNKSlSZM2uJhnOe649/397r17D3x8fHz+OwF9HAM2gVYPcz8DS8CFk83XwDRQ45F4EJjR89qSr8Aj0A1knCpkRZnEMiHgHojb7TOf2LF4Ee3AMXAHHAJt+vqPk2AvSr4NDANhYITcW3KMFwYGi+b9f23gpmiedBMcKrWoCK0D2AA6gV1VlvZsciwCW8AQcAUsuzFg7oK4Lt4InFH4eldVWUqYAx10QUFeKwquQBFaLbBXImhNEdqEvWRlGBVQhNYD7ABWQilgRpWlW0VoIXIfTSdwpMrSvUXMI2UqYDaQAObKGH4HpoAFYN5kbFWVpdNqDZTRNngFmk2xeRLAuipL324MVNKG0RLikKveiSK0mJtkhoFsttKfuIAB4FwR2igWLV5MUB9n61pikWhXH4FAqcO5ojaTTk+mPt76Xh7uGoBdu815tfFwfeP+1+d7teIGkaYWmjp6V56SlweOAhShhT1T9/FxwS/rkWUDMDJyvQAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABSklEQVRYhe3WPUscURSH8Z+uhDTarNgEA6KwKHY2Fu43SBdIISI2dmKvlYWNjZWlIFgIYqGF2Ckp0kgsbdKkcUHxBdRGQVct9o5cNpNCmNkEnD8M5+UynIczZw6XQoXeu9oSZ2b3+BO+YyCnWnWsrXwZno6T7ZFfzbE4lDDZnIwBfuB3jgB1rDcnOyK/hv4cAVL1CnD16/ZNL5YrXZkAtKfkRrCKI5ziDs/Rc51J5b8AdGMPnQHkDJvh7BJb2MkToIqvmAjxMqaCf4BvUZyJOpri7WA/B1uLznL5Q9JmAIYigNK/ABgL9gSDrQb4gHGNobtHb8gnn6WSJUDzDMAc+rAf4mRBLOAjyljMCiCtAz14wFKID/FTowOz2MiqOOkdmME8bkL8iFGNHXGhsYxyBXiOiid6wnmWhf8AKFe6WnIfQHEfKFSo0P+lF+J0PxKDtMCfAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyOWM3YjkzZi1iOTZkLTQ3NGItOGJiOS1mNDA3ODA1YzE3MzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA1REZGNkREQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA1REZGNkNEQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMjBkNGU1Ny0wNDNiLTQyMzItYTY3ZC1lNjIzMDE0YjMyZGUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ODQ3MDEzNS00MGY4LTAzNGMtYTczZC1iMmUxYmQ0OTE1ZDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4ag8jqAAACf0lEQVR42rSXT0hUURTGn84YhmUtKtfh7IL+uMhNIDWb0HYtnFSUoD+bQNxky5bVRgna9AcilHKoXUUbCUVxNoo8cNVIa3FTWmrIRN+R74VN99x735t5B364uOee73Puu/ee21AqlQLPOAR6wEVwFpwERzj2HXwFy+Az+AB++BTNeuTkwCi4BlqUnBOkE9wGP8Fr8BCUbcUbLWPN4AFYATcs4qZo4ZwVmmiOa6AdLPA/PxAkD5l7l7VyvgY6wDzXuV4hteZY22pAXH4CbUH9o421c5qBg+AtOB6kF1L7HbX+M3AfnAnSj9PU+seAfHQjyoQKeAyug1kPgVnmPgG/lZyRaCkiA/dAk5L8DAyDl+ASKFrEi8yR3DvgqZLXRM09A4d5yGixVPVr9CkmihyrKHOroyDaYqDbccj0g4zDhElc5vQ6DqtuOYrzjjXtAhNgYJ9AZCIKk/iER+18ll+lKwr8q5kwiRd8dkSWOyCowUSQUHxv98k30BpjDxcokDGMxRWXaG1McJA0JLxd1QkbMfKnuCsqyoHVxxzf2BADqzWIZwxbtD+GiVUxENYgPkmSmgjFwLQjacYi3ks0E67a02LgI3s4LSYt4lFoJmy/wpZoi4FN8MaS2OEQt5k4Z6krTetm1BVL8zmo3Ig3wS+wCIYcx6uYOAZegfPglpK3y2b1b1surfMYG0jTATMcY2vlPe6AcfDF1BGFQfoRmjoiiW1wFaynKL5OjS3t6JSluAzWUhBfY+2y6+yWLuZCnZcjZM0l38ujzHfeI36xSWOXNTq1N6Lt9trh0+wUeL5/3TxCvqcXnDvKWuarNebz/ErV8/wox75VPc/f+z7P/wgwAHIMm7NGjWqDAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDYuMC1jMDAyIDc5LjE2NDM2MCwgMjAyMC8wMi8xMy0wMTowNzoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoyOWM3YjkzZi1iOTZkLTQ3NGItOGJiOS1mNDA3ODA1YzE3MzAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDA1REZGNjVEQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDA1REZGNjREQzhFMTFFQUI0MUVEQzM1Nzk2NDIzRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIxLjEgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxYTZmYmRiYi1lZjI3LTQyYzctOTQxNy02YWM3OGRkZjFkNmUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0ODQ3MDEzNS00MGY4LTAzNGMtYTczZC1iMmUxYmQ0OTE1ZDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7ILxSjAAABGUlEQVR42mL8//8/w0ACJoYBBizInJMnT9LFUnNzc7qHAPNARUElEL8D4i9A3AXEjPR0QCcQtwGxIBBzAHEpEPvTywF2QFyGRdyYHg5oAOJvQFyERe4orR0ACvZ6IN4NxIfRHAGS24E3G1LBcliwC0Ad4Qp1hAQQVxAsB6hkOQOaI/SA+DEts2EnjgQHArPwWU4NB+CzHJTvy2lZF1BsOSUOoIrl5DqAapaT4wCqWk6qA6huOSkOoInlxDqAZpYT4wCaWk7IATS3HJ8DkulhOT4HhNHDclwO4ARie3pYjqs6dgJidiT+PyDuxlWf08IB3tCW7G5oCwaEX9ClYwIFE4A4F4j/0r1nBAW36Nk1YxzxndMBdwBAgAEAlTlANVZ6av4AAAAASUVORK5CYII=\"","/*\r\n * editor-images.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorUIImages } from '../api/ui-images';\r\n\r\nimport copyImage from './images/copy.png';\r\nimport propertiesImage from './images/properties.png';\r\nimport propertiesDecoImage from './images/properties_deco.png';\r\nimport propertiesDecoDarkImage from './images/properties_deco_dark.png';\r\nimport removelinkImage from './images/removelink.png';\r\nimport runchunkImage from './images/runchunk.png';\r\nimport runprevchunksImage from './images/runprevchunks.png';\r\nimport searchImage from './images/search.png';\r\nimport searchProgressImage from './images/search_progress.gif';\r\n\r\nimport omniInsertGenericImage from './images/omni_insert/generic.png';\r\nimport heading1Image from './images/omni_insert/heading1.png';\r\nimport heading1DarkImage from './images/omni_insert/heading1_dark.png';\r\nimport heading2Image from './images/omni_insert/heading2.png';\r\nimport heading2DarkImage from './images/omni_insert/heading2_dark.png';\r\nimport heading3Image from './images/omni_insert/heading3.png';\r\nimport heading3DarkImage from './images/omni_insert/heading3_dark.png';\r\nimport heading4Image from './images/omni_insert/heading4.png';\r\nimport heading4DarkImage from './images/omni_insert/heading4_dark.png';\r\nimport bulletListImage from './images/omni_insert/bullet_list.png';\r\nimport bulletListDarkImage from './images/omni_insert/bullet_list_dark.png';\r\nimport orderedListImage from './images/omni_insert/ordered_list.png';\r\nimport orderedListDarkImage from './images/omni_insert/ordered_list_dark.png';\r\nimport blockquoteImage from './images/omni_insert/blockquote.png';\r\nimport blockquoteDarkImage from './images/omni_insert/blockquote_dark.png';\r\nimport mathInlineImage from './images/omni_insert/math_inline.png';\r\nimport mathInlineDarkImage from './images/omni_insert/math_inline_dark.png';\r\nimport mathDisplayImage from './images/omni_insert/math_display.png';\r\nimport mathDisplayDarkImage from './images/omni_insert/math_display_dark.png';\r\nimport htmlBlockImage from './images/omni_insert/html_block.png';\r\nimport htmlBlockDarkImage from './images/omni_insert/html_block_dark.png';\r\nimport lineBlockImage from './images/omni_insert/line_block.png';\r\nimport lineBlockDarkImage from './images/omni_insert/line_block_dark.png';\r\nimport emojiImage from './images/omni_insert/emoji.png';\r\nimport emojiDarkImage from './images/omni_insert/emoji_dark.png';\r\nimport commentImage from './images/omni_insert/comment.png';\r\nimport commentDarkImage from './images/omni_insert/comment_dark.png';\r\nimport divImage from './images/omni_insert/div.png';\r\nimport divDarkImage from './images/omni_insert/div_dark.png';\r\nimport codeBlockImage from './images/omni_insert/code_block.png';\r\nimport codeBlockDarkImage from './images/omni_insert/code_block_dark.png';\r\nimport footnoteImage from './images/omni_insert/footnote.png';\r\nimport footnoteDarkImage from './images/omni_insert/footnote_dark.png';\r\nimport citationImage from './images/omni_insert/citation.png';\r\nimport citationDarkImage from './images/omni_insert/citation_dark.png';\r\nimport crossReferenceImage from './images/omni_insert/cross_reference.png';\r\nimport crossReferenceDarkImage from './images/omni_insert/cross_reference_dark.png';\r\nimport symbolImage from './images/omni_insert/symbol.png';\r\nimport symbolDarkImage from './images/omni_insert/symbol_dark.png';\r\nimport tableImage from './images/omni_insert/table.png';\r\nimport tableDarkImage from './images/omni_insert/table_dark.png';\r\nimport definitionListImage from './images/omni_insert/definition_list.png';\r\nimport definitionListDarkImage from './images/omni_insert/definition_list_dark.png';\r\nimport horizontalRuleImage from './images/omni_insert/horizontal_rule.png';\r\nimport horizontalRuleDarkImage from './images/omni_insert/horizontal_rule_dark.png';\r\nimport imgImage from './images/omni_insert/image.png';\r\nimport imgDarkImage from './images/omni_insert/image_dark.png';\r\nimport linkImage from './images/omni_insert/link.png';\r\nimport linkDarkImage from './images/omni_insert/link_dark.png';\r\nimport paragraphImage from './images/omni_insert/paragraph.png';\r\nimport paragraphDarkImage from './images/omni_insert/paragraph_dark.png';\r\nimport rawBlockImage from './images/omni_insert/raw_block.png';\r\nimport rawBlockDarkImage from './images/omni_insert/raw_block_dark.png';\r\nimport rawInlineImage from './images/omni_insert/raw_inline.png';\r\nimport rawInlineDarkImage from './images/omni_insert/raw_inline_dark.png';\r\nimport texBlockImage from './images/omni_insert/tex_block.png';\r\nimport texBlockDarkImage from './images/omni_insert/tex_block_dark.png';\r\nimport yamlBlockImage from './images/omni_insert/yaml_block.png';\r\nimport yamlBlockDarkImage from './images/omni_insert/yaml_block_dark.png';\r\nimport pythonChunkImage from './images/omni_insert/python_chunk.png';\r\nimport sqlChunkImage from './images/omni_insert/sql_chunk.png';\r\nimport d3ChunkImage from './images/omni_insert/d3_chunk.png';\r\nimport stanChunkImage from './images/omni_insert/stan_chunk.png';\r\nimport bashChunkImage from './images/omni_insert/bash_chunk.png';\r\nimport bashChunkDarkImage from './images/omni_insert/bash_chunk_dark.png';\r\nimport rChunkImage from './images/omni_insert/r_chunk.png';\r\nimport rChunkDarkImage from './images/omni_insert/r_chunk_dark.png';\r\nimport rcppChunkImage from './images/omni_insert/rcpp_chunk.png';\r\nimport rcppChunkDarkImage from './images/omni_insert/rcpp_chunk_dark.png';\r\nimport tabsetImage from './images/omni_insert/tabset.png';\r\nimport tabsetDarkImage from './images/omni_insert/tabset_dark.png';\r\nimport slideColumns from './images/omni_insert/slide_columns.png';\r\nimport slideColumnsDark from './images/omni_insert/slide_columns_dark.png';\r\nimport slidePause from './images/omni_insert/slide_pause.png';\r\nimport slidePauseDark from './images/omni_insert/slide_pause_dark.png';\r\nimport slideNotes from './images/omni_insert/slide_notes.png';\r\nimport slideNotesDark from './images/omni_insert/slide_notes_dark.png';\r\n\r\nimport articleImage from './images/citations/article.png';\r\nimport articleDarkImage from './images/citations/article_dark.png';\r\nimport bookImage from './images/citations/book.png';\r\nimport bookDarkImage from './images/citations/book_dark.png';\r\nimport broadcastImage from './images/citations/broadcast.png';\r\nimport broadcastDarkImage from './images/citations/broadcast_dark.png';\r\nimport dataImage from './images/citations/data.png';\r\nimport dataDarkImage from './images/citations/data_dark.png';\r\nimport entryImage from './images/citations/entry.png';\r\nimport entryDarkImage from './images/citations/entry_dark.png';\r\nimport imageImage from './images/citations/image.png';\r\nimport imageDarkImage from './images/citations/image_dark.png';\r\nimport legalImage from './images/citations/legal.png';\r\nimport legalDarkImage from './images/citations/legal_dark.png';\r\nimport mapImage from './images/citations/map.png';\r\nimport mapDarkImage from './images/citations/map_dark.png';\r\nimport movieImage from './images/citations/movie.png';\r\nimport movieDarkImage from './images/citations/movie_dark.png';\r\nimport otherImage from './images/citations/other.png';\r\nimport otherDarkImage from './images/citations/other_dark.png';\r\nimport songImage from './images/citations/song.png';\r\nimport songDarkImage from './images/citations/song_dark.png';\r\nimport webImage from './images/citations/web.png';\r\nimport webDarkImage from './images/citations/web_dark.png';\r\nimport zoteroOverlayImage from './images/citations/zotero-overlay.png';\r\nimport localSourcesImage from './images/citations/insert/local-sources.png';\r\nimport packageImage from './images/citations/insert/packages.png';\r\nimport bibliographyImage from './images/citations/insert/bibliography.png';\r\nimport bibliographyFolderImage from './images/citations/insert/bibliography-folder.png';\r\nimport zoteroRootImage from './images/citations/insert/zotero-root.png';\r\nimport zoteroLibraryImage from './images/citations/insert/zotero-library.png';\r\nimport zoteroCollectionImage from './images/citations/insert/zotero-collection.png';\r\nimport doiImage from './images/citations/insert/doi.png';\r\nimport crossRefImage from './images/citations/insert/crossref.png';\r\nimport pubmedImage from './images/citations/insert/pubmed.png';\r\nimport dataciteImage from './images/citations/insert/datacite.png';\r\n\r\nimport equationXRefImage from './images/xref/equation.png';\r\nimport equationXRefDarkImage from './images/xref/equation_dark.png';\r\nimport sectionXRefImage from './images/xref/section.png';\r\nimport sectionXRefDarkImage from './images/xref/section_dark.png';\r\nimport listingXRefImage from './images/xref/listing.png';\r\nimport listingXRefDarkImage from './images/xref/listing.png';\r\nimport tableXRefImage from './images/xref/table.png';\r\nimport tableXRefDarkImage from './images/xref/table_dark.png';\r\nimport figureXRefImage from './images/xref/figure.png';\r\nimport figureXRefDarkImage from './images/xref/figure_dark.png';\r\nimport theoremXRefImage from './images/xref/theorem.png';\r\nimport theoremXRefDarkImage from './images/xref/theorem_dark.png';\r\n\r\nimport allXRefInsertImage from './images/xref/insert/all.png';\r\nimport equationXRefInsertImage from './images/xref/insert/equation.png';\r\nimport sectionXRefInsertImage from './images/xref/insert/section.png';\r\nimport listingXRefInsertImage from './images/xref/insert/listing.png';\r\nimport tableXRefInsertImage from './images/xref/insert/table.png';\r\nimport figureXRefInsertImage from './images/xref/insert/figure.png';\r\nimport theoremXRefInsertImage from './images/xref/insert/theorem.png';\r\n\r\nimport tagDelete from './images/widgets/tag-delete.png';\r\nimport tagEdit from './images/widgets/tag-edit.png';\r\n\r\nexport function defaultEditorUIImages(): EditorUIImages {\r\n return {\r\n copy: copyImage,\r\n properties: propertiesImage,\r\n properties_deco: propertiesDecoImage,\r\n properties_deco_dark: propertiesDecoDarkImage,\r\n removelink: removelinkImage,\r\n runchunk: runchunkImage,\r\n runprevchunks: runprevchunksImage,\r\n search: searchImage,\r\n search_progress: searchProgressImage,\r\n omni_insert: {\r\n generic: omniInsertGenericImage,\r\n heading1: heading1Image,\r\n heading1_dark: heading1DarkImage,\r\n heading2: heading2Image,\r\n heading2_dark: heading2DarkImage,\r\n heading3: heading3Image,\r\n heading3_dark: heading3DarkImage,\r\n heading4: heading4Image,\r\n heading4_dark: heading4DarkImage,\r\n bullet_list: bulletListImage,\r\n bullet_list_dark: bulletListDarkImage,\r\n ordered_list: orderedListImage,\r\n ordered_list_dark: orderedListDarkImage,\r\n blockquote: blockquoteImage,\r\n blockquote_dark: blockquoteDarkImage,\r\n math_inline: mathInlineImage,\r\n math_inline_dark: mathInlineDarkImage,\r\n math_display: mathDisplayImage,\r\n math_display_dark: mathDisplayDarkImage,\r\n html_block: htmlBlockImage,\r\n html_block_dark: htmlBlockDarkImage,\r\n line_block: lineBlockImage,\r\n line_block_dark: lineBlockDarkImage,\r\n emoji: emojiImage,\r\n emoji_dark: emojiDarkImage,\r\n comment: commentImage,\r\n comment_dark: commentDarkImage,\r\n div: divImage,\r\n div_dark: divDarkImage,\r\n code_block: codeBlockImage,\r\n code_block_dark: codeBlockDarkImage,\r\n footnote: footnoteImage,\r\n footnote_dark: footnoteDarkImage,\r\n citation: citationImage,\r\n citation_dark: citationDarkImage,\r\n cross_reference: crossReferenceImage,\r\n cross_reference_dark: crossReferenceDarkImage,\r\n symbol: symbolImage,\r\n symbol_dark: symbolDarkImage,\r\n table: tableImage,\r\n table_dark: tableDarkImage,\r\n definition_list: definitionListImage,\r\n definition_list_dark: definitionListDarkImage,\r\n horizontal_rule: horizontalRuleImage,\r\n horizontal_rule_dark: horizontalRuleDarkImage,\r\n image: imgImage,\r\n image_dark: imgDarkImage,\r\n link: linkImage,\r\n link_dark: linkDarkImage,\r\n paragraph: paragraphImage,\r\n paragraph_dark: paragraphDarkImage,\r\n raw_block: rawBlockImage,\r\n raw_block_dark: rawBlockDarkImage,\r\n raw_inline: rawInlineImage,\r\n raw_inline_dark: rawInlineDarkImage,\r\n tex_block: texBlockImage,\r\n tex_block_dark: texBlockDarkImage,\r\n yaml_block: yamlBlockImage,\r\n yaml_block_dark: yamlBlockDarkImage,\r\n python_chunk: pythonChunkImage,\r\n sql_chunk: sqlChunkImage,\r\n d3_chunk: d3ChunkImage,\r\n stan_chunk: stanChunkImage,\r\n bash_chunk: bashChunkImage,\r\n bash_chunk_dark: bashChunkDarkImage,\r\n r_chunk: rChunkImage,\r\n r_chunk_dark: rChunkDarkImage,\r\n rcpp_chunk: rcppChunkImage,\r\n rcpp_chunk_dark: rcppChunkDarkImage,\r\n tabset: tabsetImage,\r\n tabset_dark: tabsetDarkImage,\r\n slide_columns: slideColumns,\r\n slide_columns_dark: slideColumnsDark,\r\n slide_notes: slideNotes,\r\n slide_notes_dark: slideNotesDark,\r\n slide_pause: slidePause,\r\n slide_pause_dark: slidePauseDark\r\n },\r\n citations: {\r\n article: articleImage,\r\n article_dark: articleDarkImage,\r\n book: bookImage,\r\n book_dark: bookDarkImage,\r\n broadcast: broadcastImage,\r\n broadcast_dark: broadcastDarkImage,\r\n data: dataImage,\r\n data_dark: dataDarkImage,\r\n entry: entryImage,\r\n entry_dark: entryDarkImage,\r\n image: imageImage,\r\n image_dark: imageDarkImage,\r\n legal: legalImage,\r\n legal_dark: legalDarkImage,\r\n map: mapImage,\r\n map_dark: mapDarkImage,\r\n movie: movieImage,\r\n movie_dark: movieDarkImage,\r\n other: otherImage,\r\n other_dark: otherDarkImage,\r\n song: songImage,\r\n song_dark: songDarkImage,\r\n web: webImage,\r\n web_dark: webDarkImage,\r\n zoteroOverlay: zoteroOverlayImage,\r\n local_sources: localSourcesImage,\r\n packages: packageImage,\r\n bibligraphy: bibliographyImage,\r\n bibligraphy_folder: bibliographyFolderImage,\r\n zotero_library: zoteroLibraryImage,\r\n zotero_collection: zoteroCollectionImage,\r\n zotero_root: zoteroRootImage,\r\n doi: doiImage,\r\n crossref: crossRefImage,\r\n pubmed: pubmedImage,\r\n datacite: dataciteImage,\r\n },\r\n xrefs: {\r\n section: sectionXRefImage,\r\n section_dark: sectionXRefDarkImage,\r\n figure: figureXRefImage,\r\n figure_dark: figureXRefDarkImage,\r\n table: tableXRefImage,\r\n table_dark: tableXRefDarkImage,\r\n listing: listingXRefImage,\r\n listing_dark: listingXRefDarkImage,\r\n equation: equationXRefImage,\r\n equation_dark: equationXRefDarkImage,\r\n theorem: theoremXRefImage,\r\n theorem_dark: theoremXRefDarkImage,\r\n type_all: allXRefInsertImage,\r\n type_section: sectionXRefInsertImage,\r\n type_equation: equationXRefInsertImage,\r\n type_figure: figureXRefInsertImage,\r\n type_table: tableXRefInsertImage,\r\n type_listing: listingXRefInsertImage,\r\n type_theorem: theoremXRefInsertImage\r\n },\r\n widgets: {\r\n tag_delete: tagDelete,\r\n tag_edit: tagEdit,\r\n },\r\n };\r\n}\r\n","/*\r\n * table.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorCommandId } from './command';\r\nimport { EditorUI } from './ui-types';\r\n\r\nexport type { TableCapabilities } from 'editor-types';\r\n\r\nexport function tableMenu(insert: boolean, ui: EditorUI) {\r\n return [\r\n ...(insert \r\n ? [{ command: EditorCommandId.TableInsertTable }, \r\n { separator: true }\r\n ] \r\n : []\r\n ),\r\n { command: EditorCommandId.TableAddRowBefore },\r\n { command: EditorCommandId.TableAddRowAfter },\r\n { separator: true },\r\n { command: EditorCommandId.TableAddColumnBefore },\r\n { command: EditorCommandId.TableAddColumnAfter },\r\n { separator: true },\r\n { command: EditorCommandId.TableDeleteRow },\r\n { command: EditorCommandId.TableDeleteColumn },\r\n { separator: true },\r\n { command: EditorCommandId.TableDeleteTable },\r\n { separator: true },\r\n {\r\n text: ui.context.translateText('Align Column'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.TableAlignColumnLeft },\r\n { command: EditorCommandId.TableAlignColumnCenter },\r\n { command: EditorCommandId.TableAlignColumnRight },\r\n { separator: true },\r\n { command: EditorCommandId.TableAlignColumnDefault },\r\n ],\r\n },\r\n },\r\n { separator: true },\r\n { command: EditorCommandId.TableToggleHeader },\r\n { command: EditorCommandId.TableToggleCaption },\r\n ];\r\n}\r\n","/*\r\n * editor-menus.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { tableMenu } from '../api/table';\r\nimport { EditorCommandId, EditorCommand } from '../api/command';\r\nimport { EditorOptions } from '../api/options';\r\n\r\nexport function editorMenus(options: EditorOptions, ui: EditorUI, commands: EditorCommand[]) {\r\n return {\r\n format: formatMenu(ui, commands),\r\n insert: insertMenu(options, ui, commands),\r\n table: tableMenu(true, ui),\r\n };\r\n}\r\n\r\nfunction formatMenu(ui: EditorUI, commands: EditorCommand[]) {\r\n return [\r\n { command: EditorCommandId.Strong },\r\n { command: EditorCommandId.Em },\r\n { command: EditorCommandId.Underline },\r\n { command: EditorCommandId.Code },\r\n {\r\n text: ui.context.translateText('Text'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.Strikeout },\r\n { command: EditorCommandId.Superscript },\r\n { command: EditorCommandId.Subscript },\r\n { command: EditorCommandId.Smallcaps },\r\n ],\r\n },\r\n },\r\n { separator: true },\r\n {\r\n text: ui.context.translateText('Bullets & Numbering'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.BulletList },\r\n { command: EditorCommandId.OrderedList },\r\n { separator: true },\r\n { command: EditorCommandId.TightList },\r\n { separator: true },\r\n { command: EditorCommandId.ListItemCheck },\r\n { command: EditorCommandId.ListItemCheckToggle },\r\n { separator: true },\r\n { command: EditorCommandId.ListItemSink },\r\n { command: EditorCommandId.ListItemLift },\r\n { separator: true },\r\n { command: EditorCommandId.EditListProperties },\r\n ],\r\n },\r\n },\r\n { separator: true },\r\n { command: codeBlockCommand(commands) },\r\n { command: EditorCommandId.Blockquote },\r\n { command: EditorCommandId.LineBlock },\r\n { separator: haveAnyOf(commands, EditorCommandId.Div, EditorCommandId.Span) },\r\n { command: EditorCommandId.Div },\r\n { command: EditorCommandId.Span },\r\n { separator: true },\r\n {\r\n text: ui.context.translateText('Raw'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.HTMLInline },\r\n { command: EditorCommandId.HTMLBlock },\r\n { separator: true },\r\n { command: EditorCommandId.TexInline },\r\n { command: EditorCommandId.TexBlock },\r\n { separator: true },\r\n { command: EditorCommandId.RawInline },\r\n { command: EditorCommandId.RawBlock },\r\n ],\r\n },\r\n },\r\n { separator: true },\r\n { command: EditorCommandId.ClearFormatting },\r\n { separator: true },\r\n { command: EditorCommandId.AttrEdit },\r\n ];\r\n}\r\n\r\nfunction insertMenu(options: EditorOptions, ui: EditorUI, commands: EditorCommand[]) {\r\n const pyDefault = !!options.defaultCellTypePython;\r\n return [\r\n { command: EditorCommandId.OmniInsert },\r\n { separator: true },\r\n { command: EditorCommandId.YamlMetadata },\r\n ...(haveAnyOf(commands, EditorCommandId.RCodeChunk, EditorCommandId.PythonCodeChunk)\r\n ? [\r\n { separator: true },\r\n {\r\n text: ui.context.translateText('Executable Cell'),\r\n subMenu: {\r\n items: [\r\n ...(pyDefault\r\n ? [ { command: EditorCommandId.PythonCodeChunk }, \r\n { command: EditorCommandId.RCodeChunk } ] \r\n : [ { command: EditorCommandId.RCodeChunk }, \r\n { command: EditorCommandId.PythonCodeChunk } ] \r\n ),\r\n { command: EditorCommandId.BashCodeChunk },\r\n { command: EditorCommandId.RcppCodeChunk },\r\n { command: EditorCommandId.SQLCodeChunk },\r\n { command: EditorCommandId.D3CodeChunk },\r\n { command: EditorCommandId.StanCodeChunk },\r\n { command: EditorCommandId.JuliaCodeChunk },\r\n { separator: true },\r\n { command: EditorCommandId.MermaidCodeChunk },\r\n { command: EditorCommandId.GraphVizCodeChunk }\r\n ],\r\n },\r\n },\r\n ]\r\n : []),\r\n { separator: true },\r\n { command: EditorCommandId.Table },\r\n { command: EditorCommandId.Image },\r\n { command: EditorCommandId.Link },\r\n { command: EditorCommandId.Shortcode },\r\n { separator: true },\r\n { command: EditorCommandId.CodeBlockFormat },\r\n ...(haveAnyOf(commands, EditorCommandId.Citation, EditorCommandId.CrossReference, EditorCommandId.Footnote)\r\n ? [\r\n { separator: true },\r\n { command: EditorCommandId.Citation },\r\n { command: EditorCommandId.CrossReference },\r\n { command: EditorCommandId.Footnote },\r\n ] : []),\r\n ...(haveAnyOf(commands, EditorCommandId.InsertSlideNotes, EditorCommandId.InsertSlidePause, EditorCommandId.InsertSlideColumns)\r\n ? [\r\n { separator: true },\r\n { command: EditorCommandId.InsertSlideColumns },\r\n { command: EditorCommandId.InsertSlidePause },\r\n { command: EditorCommandId.InsertSlideNotes }\r\n ] : []),\r\n { separator: true },\r\n ...(haveAnyOf(commands, EditorCommandId.InlineMath, EditorCommandId.DisplayMath)\r\n ? [\r\n {\r\n text: ui.context.translateText('LaTeX Math'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.InlineMath },\r\n { command: EditorCommandId.DisplayMath },\r\n ],\r\n },\r\n },\r\n ]\r\n : []),\r\n ...(haveAnyOf(commands, EditorCommandId.DefinitionList)\r\n ? [\r\n {\r\n text: ui.context.translateText('Definition'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.DefinitionList },\r\n { separator: true },\r\n { command: EditorCommandId.DefinitionTerm },\r\n { command: EditorCommandId.DefinitionDescription },\r\n ],\r\n },\r\n },\r\n ]\r\n : []),\r\n {\r\n text: ui.context.translateText('Special Characters'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.Emoji },\r\n { command: EditorCommandId.Symbol },\r\n { separator: true },\r\n { command: EditorCommandId.EnDash },\r\n { command: EditorCommandId.EmDash },\r\n { separator: true },\r\n { command: EditorCommandId.NonBreakingSpace },\r\n { separator: true },\r\n { command: EditorCommandId.HardLineBreak },\r\n ],\r\n },\r\n },\r\n { separator: true },\r\n { command: EditorCommandId.ParagraphInsert },\r\n { command: EditorCommandId.InsertDiv },\r\n { command: EditorCommandId.HorizontalRule },\r\n ...(haveAnyOf(commands, EditorCommandId.Tabset)\r\n ? [\r\n { separator: true },\r\n { command: EditorCommandId.Tabset },\r\n { command: EditorCommandId.Callout },\r\n ] : []),\r\n { separator: true },\r\n { command: haveAnyOf(commands, EditorCommandId.UserComment) \r\n ? EditorCommandId.UserComment \r\n : EditorCommandId.HTMLComment \r\n } \r\n ];\r\n}\r\n\r\nfunction haveAnyOf(commands: EditorCommand[], ...ids: EditorCommandId[]) {\r\n for (const command of commands) {\r\n if (ids.includes(command.id)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction codeBlockCommand(commands: EditorCommand[]) {\r\n return haveAnyOf(commands, EditorCommandId.CodeBlockFormat)\r\n ? EditorCommandId.CodeBlockFormat\r\n : EditorCommandId.CodeBlock;\r\n}\r\n","/*\r\n * editor-schema.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, NodeSpec, MarkSpec, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { ExtensionManager } from './editor-extensions';\r\nimport { PandocNode } from '../api/node';\r\nimport { PandocMark } from '../api/mark';\r\nimport { kPmScrollContainer } from '../api/scroll';\r\nimport { EditorOptions } from '../api/options';\r\n\r\nexport function editorSchema(options: EditorOptions, extensions: ExtensionManager, bodyScrollContainer: boolean): Schema {\r\n // build in doc node + nodes from extensions\r\n const nodes: { [name: string]: NodeSpec } = {\r\n doc: {\r\n attrs: {\r\n initial: { default: false },\r\n },\r\n content: 'body notes' + (options.commenting ? ' annotations' : ''),\r\n },\r\n\r\n body: {\r\n content: 'block+',\r\n isolating: true,\r\n parseDOM: [{ tag: 'div[class*=\"body\"]' }],\r\n toDOM() {\r\n return [\r\n 'div',\r\n { class: 'body pm-cursor-color pm-text-color pm-background-color pm-editing-root-node'\r\n + (bodyScrollContainer ? ` ${kPmScrollContainer}` : '') },\r\n ['div', { class: 'pm-content' }, 0],\r\n ];\r\n },\r\n },\r\n\r\n notes: {\r\n content: 'note*',\r\n parseDOM: [{ tag: 'div[class*=\"notes\"]' }],\r\n toDOM() {\r\n return [\r\n 'div',\r\n { class: `notes pm-cursor-color pm-text-color pm-background-color pm-editing-root-node ${kPmScrollContainer}` },\r\n ['div', { class: 'pm-content' }, 0],\r\n ];\r\n },\r\n },\r\n\r\n note: {\r\n content: 'block+',\r\n attrs: {\r\n ref: {},\r\n number: { default: 1 },\r\n },\r\n isolating: true,\r\n parseDOM: [\r\n {\r\n tag: 'div[class*=\"note\"]',\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n ref: el.getAttribute('data-ref'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n return [\r\n 'div',\r\n { 'data-ref': node.attrs.ref, class: 'note pm-footnote-body', 'data-number': node.attrs.number },\r\n 0,\r\n ];\r\n },\r\n },\r\n\r\n ...(options.commenting ? {\r\n annotations: {\r\n content: '',\r\n editable: false,\r\n selectable: false,\r\n attrs: {},\r\n // No parseDOM/toDOM because we're using a NodeView\r\n },\r\n } : {}),\r\n\r\n };\r\n extensions.pandocNodes().forEach((node: PandocNode) => {\r\n nodes[node.name] = node.spec;\r\n });\r\n\r\n // marks from extensions\r\n const marks: { [name: string]: MarkSpec } = {};\r\n extensions.pandocMarks().forEach((mark: PandocMark) => {\r\n marks[mark.name] = mark.spec;\r\n });\r\n\r\n // allow code to exclude marks that don't support input rules\r\n // (e.g. marks that denote a special escape sequences from markdown,\r\n // like raw_tex, raw_html, shortcodes, xrefs, math, etc.)\r\n if (marks.code) {\r\n const excludeInCode = extensions\r\n .pandocMarks()\r\n .filter(mark => mark.noInputRules && mark.name !== 'code')\r\n .map(mark => mark.name)\r\n .join(' ');\r\n marks.code.excludes = excludeInCode;\r\n }\r\n\r\n // return schema\r\n return new Schema({\r\n nodes,\r\n marks,\r\n });\r\n}\r\n","/*\r\n * text.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { PandocOutput, PandocToken, PandocTokenType, ProsemirrorWriter } from '../api/pandoc';\r\nimport { kQuoteType, QuoteType, kQuoteChildren } from '../api/quote';\r\n\r\nconst extension = () => {\r\n \r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'text',\r\n spec: {\r\n group: 'inline',\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n toDOM(node: ProsemirrorNode): any {\r\n return node.text;\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n { token: PandocTokenType.Str, text: true, getText: (t: PandocToken) => t.c },\r\n { token: PandocTokenType.Space, text: true, getText: () => ' ' },\r\n { token: PandocTokenType.SoftBreak, text: true, getText: () => ' ' },\r\n {\r\n token: PandocTokenType.Quoted,\r\n handler: () => (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n const type = tok.c[kQuoteType].t;\r\n const quote = type === QuoteType.SingleQuote ? \"'\" : '\"';\r\n writer.writeTokens([{ t: 'Str', c: quote }, ...tok.c[kQuoteChildren], { t: 'Str', c: quote }]);\r\n },\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n const text = node.textContent;\r\n output.writeText(text);\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * paragraph.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\n\r\nimport { BlockCommand, EditorCommandId, ProsemirrorCommand } from '../api/command';\r\nimport { Extension } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { insertParagraph } from '../api/paragraph';\r\nimport { emptyNodePlaceholderPlugin } from '../api/placeholder';\r\nimport { selectionWithinLastBodyParagraph } from '../api/selection';\r\n\r\nconst extension: Extension = {\r\n nodes: [\r\n {\r\n name: 'paragraph',\r\n spec: {\r\n content: 'inline*',\r\n group: 'block list_item_block',\r\n parseDOM: [{ tag: 'p' }],\r\n toDOM() {\r\n return ['p', 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n { token: PandocTokenType.Para, block: 'paragraph' },\r\n { token: PandocTokenType.Plain, block: 'paragraph' },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeInlines(node.content);\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [\r\n new BlockCommand(EditorCommandId.Paragraph, ['Mod-Alt-0'], schema.nodes.paragraph, schema.nodes.paragraph),\r\n new InsertParagraphCommand(),\r\n ];\r\n },\r\n\r\n plugins: (schema: Schema) => {\r\n let hints = 1;\r\n return [emptyNodePlaceholderPlugin(schema.nodes.paragraph, () => \" type / to insert a block (code, math, figure, div, etc.)\", tr => {\r\n if (hints > 0) {\r\n if (selectionWithinLastBodyParagraph(tr.selection)) {\r\n if (tr.docChanged) {\r\n hints--;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n })];\r\n },\r\n};\r\n\r\nclass InsertParagraphCommand extends ProsemirrorCommand {\r\n constructor() {\r\n super(EditorCommandId.ParagraphInsert, [], insertParagraph);\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * heading.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { textblockTypeInputRule, InputRule } from 'prosemirror-inputrules';\r\nimport { Node as ProsemirrorNode, Schema, NodeType, Fragment } from 'prosemirror-model';\r\nimport { EditorState } from 'prosemirror-state';\r\nimport { findParentNode, findParentNodeOfType } from 'prosemirror-utils';\r\n\r\nimport { PandocOutput, PandocToken, PandocTokenType } from '../api/pandoc';\r\nimport { EditorCommandId, toggleBlockType, ProsemirrorCommand } from '../api/command';\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\nimport {\r\n pandocAttrSpec,\r\n pandocAttrParseDom,\r\n pandocAttrToDomAttr,\r\n pandocAttrReadAST,\r\n pandocAttrParseText,\r\n} from '../api/pandoc_attr';\r\nimport { uuidv4 } from '../api/util';\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\r\nimport { emptyNodePlaceholderPlugin } from '../api/placeholder';\r\nimport { kHeadingLevel, kHeadingAttr, kHeadingChildren } from '../api/heading';\r\n\r\nconst kHeadingLevels = [1, 2, 3, 4, 5, 6];\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, format, ui } = context;\r\n\r\n const headingAttr = pandocExtensions.header_attributes || pandocExtensions.mmd_header_identifiers;\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'heading',\r\n spec: {\r\n attrs: {\r\n level: { default: 1 },\r\n link: { default: null },\r\n navigation_id: { default: null },\r\n ...(headingAttr ? pandocAttrSpec : {}),\r\n },\r\n content: 'inline*',\r\n group: 'block',\r\n defining: true,\r\n parseDOM: [\r\n { tag: 'h1', getAttrs: headingAttrs(1, headingAttr) },\r\n { tag: 'h2', getAttrs: headingAttrs(2, headingAttr) },\r\n { tag: 'h3', getAttrs: headingAttrs(3, headingAttr) },\r\n { tag: 'h4', getAttrs: headingAttrs(4, headingAttr) },\r\n { tag: 'h5', getAttrs: headingAttrs(5, headingAttr) },\r\n { tag: 'h6', getAttrs: headingAttrs(6, headingAttr) },\r\n ],\r\n toDOM(node) {\r\n const attr = headingAttr ? pandocAttrToDomAttr(node.attrs) : {};\r\n attr.class = (attr.class as string || '').concat(' pm-heading');\r\n return [\r\n 'h' + node.attrs.level,\r\n {\r\n 'data-link': node.attrs.link,\r\n ...attr,\r\n },\r\n\r\n 0,\r\n ];\r\n },\r\n },\r\n\r\n attr_edit: () => {\r\n if (headingAttr) {\r\n return {\r\n type: (schema: Schema) => schema.nodes.heading,\r\n offset: {\r\n top: 2,\r\n right: 6,\r\n },\r\n preferHidden: true\r\n };\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Header,\r\n block: 'heading',\r\n getAttrs: (tok: PandocToken) => ({\r\n level: tok.c[kHeadingLevel],\r\n navigation_id: uuidv4(),\r\n ...(headingAttr ? pandocAttrReadAST(tok, kHeadingAttr) : {}),\r\n }),\r\n getChildren: (tok: PandocToken) => tok.c[kHeadingChildren],\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Header, () => {\r\n output.write(node.attrs.level);\r\n if (headingAttr) {\r\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\r\n } else {\r\n output.writeAttr();\r\n }\r\n output.writeArray(() => {\r\n if (node.attrs.level === 1 && format.rmdExtensions.bookdownPart) {\r\n writeBookdownH1(output, node);\r\n } else {\r\n output.writeInlines(node.content);\r\n }\r\n });\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [\r\n new HeadingCommand(schema, EditorCommandId.Heading1, 1, heading1OmniInsert(ui)),\r\n new HeadingCommand(schema, EditorCommandId.Heading2, 2, heading2OmniInsert(ui)),\r\n new HeadingCommand(schema, EditorCommandId.Heading3, 3, heading3OmniInsert(ui)),\r\n new HeadingCommand(schema, EditorCommandId.Heading4, 4, heading4OmniInsert(ui)),\r\n new HeadingCommand(schema, EditorCommandId.Heading5, 5),\r\n new HeadingCommand(schema, EditorCommandId.Heading6, 6),\r\n ];\r\n },\r\n\r\n inputRules: (schema: Schema) => {\r\n const rules = [\r\n textblockTypeInputRule(\r\n new RegExp('^(#{1,' + kHeadingLevels.length + '})\\\\s$'),\r\n schema.nodes.heading,\r\n match => ({\r\n level: match[1].length,\r\n navigation_id: uuidv4(),\r\n }),\r\n ),\r\n ];\r\n\r\n if (headingAttr) {\r\n rules.push(headingAttributeInputRule(schema));\r\n }\r\n\r\n return rules;\r\n },\r\n\r\n plugins: (schema: Schema) => {\r\n return [emptyHeadingPlaceholderPlugin(schema.nodes.heading, ui)];\r\n },\r\n };\r\n};\r\n\r\nfunction headingAttributeInputRule(schema: Schema) {\r\n return new InputRule(/ {([^}]+)}$/, (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n // only fire in headings\r\n const heading = findParentNodeOfType(schema.nodes.heading)(state.selection);\r\n if (heading) {\r\n // try to parse the attributes\r\n const attrs = pandocAttrParseText(match[1]);\r\n if (attrs) {\r\n const tr = state.tr;\r\n tr.setNodeMarkup(heading.pos, undefined, {\r\n ...heading.node.attrs,\r\n ...attrs,\r\n });\r\n tr.deleteRange(start + 1, end);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nclass HeadingCommand extends ProsemirrorCommand {\r\n public readonly nodeType: NodeType;\r\n public readonly level: number;\r\n\r\n constructor(schema: Schema, id: EditorCommandId, level: number, omniInsert?: OmniInsert) {\r\n super(id, ['Mod-Alt-' + level], headingCommandFn(schema, level), omniInsert);\r\n this.nodeType = schema.nodes.heading;\r\n this.level = level;\r\n }\r\n\r\n public isActive(state: EditorState) {\r\n const predicate = (n: ProsemirrorNode) => n.type === this.nodeType && n.attrs.level === this.level;\r\n const node = findParentNode(predicate)(state.selection);\r\n return !!node;\r\n }\r\n}\r\n\r\nfunction heading1OmniInsert(ui: EditorUI) {\r\n return headingOmniInsert(ui, 1, ui.context.translateText('Part heading'), [\r\n ui.images.omni_insert.heading1,\r\n ui.images.omni_insert.heading1_dark,\r\n ]);\r\n}\r\n\r\nfunction heading2OmniInsert(ui: EditorUI) {\r\n return headingOmniInsert(ui, 2, ui.context.translateText('Section heading'), [\r\n ui.images.omni_insert.heading2,\r\n ui.images.omni_insert.heading2_dark,\r\n ]);\r\n}\r\nfunction heading3OmniInsert(ui: EditorUI) {\r\n return headingOmniInsert(ui, 3, ui.context.translateText('Sub-section heading'), [\r\n ui.images.omni_insert.heading3,\r\n ui.images.omni_insert.heading3_dark,\r\n ]);\r\n}\r\n\r\nfunction heading4OmniInsert(ui: EditorUI) {\r\n return headingOmniInsert(ui, 4, ui.context.translateText('Small heading'), [\r\n ui.images.omni_insert.heading4,\r\n ui.images.omni_insert.heading4_dark,\r\n ]);\r\n}\r\n\r\nfunction headingOmniInsert(ui: EditorUI, level: number, description: string, images: [string, string], group = OmniInsertGroup.Headings): OmniInsert {\r\n return {\r\n name: headingName(ui, level),\r\n keywords: [\"h\" + level],\r\n description,\r\n group,\r\n image: () => (ui.prefs.darkMode() ? images[1] : images[0]),\r\n };\r\n}\r\n\r\nfunction headingName(ui: EditorUI, level: number) {\r\n const kHeadingPrefix = ui.context.translateText('Heading');\r\n return `${kHeadingPrefix} ${level}`;\r\n}\r\n\r\nfunction headingCommandFn(schema: Schema, level: number) {\r\n return toggleBlockType(schema.nodes.heading, schema.nodes.paragraph, { level });\r\n}\r\n\r\n// function for getting attrs\r\nfunction headingAttrs(level: number, pandocAttrSupported: boolean) {\r\n return (dom: Node | string) => {\r\n const el = dom as Element;\r\n return {\r\n level,\r\n 'data-link': el.getAttribute('data-link'),\r\n ...(pandocAttrSupported ? pandocAttrParseDom(el, {}) : {}),\r\n };\r\n };\r\n}\r\n\r\nfunction emptyHeadingPlaceholderPlugin(nodeType: NodeType, ui: EditorUI) {\r\n return emptyNodePlaceholderPlugin(nodeType, node => headingName(ui, node.attrs.level));\r\n}\r\n\r\n// write a bookdown (PART) H1 w/o spurious \\\r\nfunction writeBookdownH1(output: PandocOutput, node: ProsemirrorNode) {\r\n // see if this is a (PART\\*). note we also match and replay any text\r\n // before the first ( in case the cursor sentinel ended up there\r\n const partMatch = node.textContent.match(/^([^()]*)\\(PART\\\\\\*\\)/);\r\n if (partMatch) {\r\n const schema = node.type.schema;\r\n output.writeInlines(Fragment.from(schema.text(partMatch[1] + '(PART*)')));\r\n output.writeInlines(node.content.cut(partMatch[0].length));\r\n } else {\r\n output.writeInlines(node.content);\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * blockquote.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { wrappingInputRule } from 'prosemirror-inputrules';\r\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\r\n\r\nimport { WrapCommand, EditorCommandId } from '../api/command';\r\nimport { ExtensionContext } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { OmniInsertGroup } from '../api/omni_insert';\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n const { ui } = context;\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'blockquote',\r\n spec: {\r\n content: 'block+',\r\n group: 'block',\r\n defining: true,\r\n parseDOM: [{ tag: 'blockquote' }],\r\n toDOM(): DOMOutputSpec {\r\n return ['blockquote', { class: 'pm-blockquote pm-block-border-color' }, 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.BlockQuote,\r\n block: 'blockquote',\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.BlockQuote, () => {\r\n output.writeNodes(node);\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new WrapCommand(EditorCommandId.Blockquote, [], schema.nodes.blockquote, {}, blockquoteOmniInsert(ui))];\r\n },\r\n\r\n inputRules: (schema: Schema) => {\r\n return [wrappingInputRule(/^\\s*>\\s$/, schema.nodes.blockquote)];\r\n },\r\n };\r\n};\r\n\r\nfunction blockquoteOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Blockquote'),\r\n description: ui.context.translateText('Section quoted from another source'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 8,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.blockquote_dark : ui.images.omni_insert.blockquote),\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * code_block.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { newlineInCode, exitCode } from 'prosemirror-commands';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { findParentNodeOfType } from 'prosemirror-utils';\r\n\r\nimport { lines } from 'core';\r\n\r\nimport { BlockCommand, EditorCommandId, ProsemirrorCommand, toggleBlockType } from '../api/command';\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\nimport { BaseKey } from '../api/basekeys';\r\nimport { codeNodeSpec } from '../api/code';\r\nimport { PandocOutput, PandocTokenType, PandocExtensions, ProsemirrorWriter } from '../api/pandoc';\r\nimport { pandocAttrSpec, pandocAttrParseDom, pandocAttrToDomAttr, pandocAttrAvailable } from '../api/pandoc_attr';\r\nimport { PandocCapabilities } from '../api/pandoc_capabilities';\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { CodeBlockProps } from 'editor-types';\r\nimport { hasFencedCodeBlocks } from '../api/pandoc_format';\r\nimport { precedingListItemInsertPos, precedingListItemInsert } from '../api/list';\r\nimport { EditorOptions } from '../api/options';\r\nimport { OmniInsertGroup } from '../api/omni_insert';\r\nimport { blockCapsuleParagraphTokenHandler, blockCapsuleSourceWithoutPrefix, blockCapsuleTextHandler, encodedBlockCapsuleRegex, PandocBlockCapsule, PandocBlockCapsuleFilter } from '../api/pandoc_capsule';\r\n\r\nconst kNoAttributesSentinel = 'CEF7FA46';\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, pandocCapabilities, ui, options } = context;\r\n\r\n const hasAttr = hasFencedCodeBlocks(pandocExtensions);\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'code_block',\r\n\r\n spec: {\r\n ...codeNodeSpec(),\r\n attrs: { ...(hasAttr ? pandocAttrSpec : {}) },\r\n parseDOM: [\r\n {\r\n tag: 'pre',\r\n preserveWhitespace: 'full',\r\n getAttrs: (node: Node | string) => {\r\n if (hasAttr) {\r\n const el = node as Element;\r\n return pandocAttrParseDom(el, {});\r\n } else {\r\n return {};\r\n }\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n const fontClass = 'pm-fixedwidth-font';\r\n const attrs = hasAttr\r\n ? pandocAttrToDomAttr({\r\n ...node.attrs,\r\n classes: [...node.attrs.classes, fontClass],\r\n })\r\n : {\r\n class: fontClass,\r\n };\r\n return ['pre', attrs, ['code', 0]];\r\n },\r\n },\r\n\r\n code_view: {\r\n lang: (node: ProsemirrorNode) => {\r\n return codeBlockLang(node, options);\r\n },\r\n attrEditFn: codeBlockFormatCommandFn(pandocExtensions, ui, pandocCapabilities.highlight_languages),\r\n },\r\n\r\n attr_edit: codeBlockAttrEdit(pandocExtensions, pandocCapabilities, ui),\r\n\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.CodeBlock,\r\n code_block: true,\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n\r\n // see if we need to escape executable code block syntax\r\n if (!pandocAttrAvailable(node.attrs) && pandocExtensions.backtick_code_blocks) {\r\n let text = node.textContent;\r\n const textLines = lines(text);\r\n if (textLines.length > 0) {\r\n const match = textLines[0].match(/^(```+)(\\{+[^}]+\\}+)([ \\t]*)$/);\r\n if (match) {\r\n textLines[0] = `${match[1]}{${match[2]}}${match[3]}`;\r\n text = textLines.join(\"\\n\");\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeRawMarkdown(text);\r\n });\r\n return;\r\n }\r\n }\r\n }\r\n \r\n output.writeToken(PandocTokenType.CodeBlock, () => {\r\n if (hasAttr) {\r\n const id = pandocExtensions.fenced_code_attributes ? node.attrs.id : '';\r\n const keyvalue = pandocExtensions.fenced_code_attributes ? node.attrs.keyvalue : [];\r\n \r\n // if there are no attributes this will end up outputting a code block\r\n // without the fence markers (rather indenting the code block 4 spaces).\r\n // we don't want this so we add a sentinel class to the attributes to\r\n // force the fence markers (which we then cleanup below in the postprocessor)\r\n const classes = [...node.attrs.classes];\r\n if (!pandocAttrAvailable(node.attrs) && pandocExtensions.backtick_code_blocks) {\r\n classes.push(kNoAttributesSentinel)\r\n }\r\n\r\n output.writeAttr(id, classes, keyvalue);\r\n } else {\r\n output.writeAttr();\r\n }\r\n output.write(node.textContent);\r\n });\r\n },\r\n blockCapsuleFilter: escapedRmdChunkBlockCapsuleFilter(),\r\n markdownPostProcessor: (markdown: string) => {\r\n // cleanup the sentinel classes we may have added above\r\n if (pandocExtensions.backtick_code_blocks) {\r\n markdown = markdown.replace(\r\n new RegExp(\"``` \" + kNoAttributesSentinel, 'g'), \r\n \"``` \" + \" \".repeat(kNoAttributesSentinel.length)\r\n );\r\n }\r\n return markdown;\r\n }\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n const commands: ProsemirrorCommand[] = [\r\n new BlockCommand(EditorCommandId.CodeBlock, [], schema.nodes.code_block, schema.nodes.paragraph, {}),\r\n ];\r\n if (hasAttr) {\r\n commands.push(new CodeBlockFormatCommand(pandocExtensions, ui, pandocCapabilities.highlight_languages));\r\n }\r\n return commands;\r\n },\r\n\r\n baseKeys: () => {\r\n return [\r\n { key: BaseKey.Enter, command: newlineInCode },\r\n { key: BaseKey.ModEnter, command: exitCode },\r\n { key: BaseKey.ShiftEnter, command: exitCode },\r\n ];\r\n },\r\n };\r\n};\r\n\r\nclass CodeBlockFormatCommand extends ProsemirrorCommand {\r\n constructor(pandocExtensions: PandocExtensions, ui: EditorUI, languages: string[]) {\r\n super(\r\n EditorCommandId.CodeBlockFormat,\r\n ['Shift-Mod-\\\\'],\r\n codeBlockFormatCommandFn(pandocExtensions, ui, languages),\r\n {\r\n name: ui.context.translateText('Code Block...'),\r\n description: ui.context.translateText('Source code display'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 7,\r\n noFocus: true,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.code_block_dark : ui.images.omni_insert.code_block,\r\n },\r\n );\r\n }\r\n}\r\n\r\nfunction codeBlockFormatCommandFn(pandocExtensions: PandocExtensions, ui: EditorUI, languages: string[]) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // enable if we are either inside a code block or we can toggle to a code block\r\n const schema = state.schema;\r\n const codeBlock = findParentNodeOfType(schema.nodes.code_block)(state.selection);\r\n if (\r\n !codeBlock &&\r\n !toggleBlockType(schema.nodes.code_block, schema.nodes.paragraph)(state) &&\r\n !precedingListItemInsertPos(state.doc, state.selection)\r\n ) {\r\n return false;\r\n }\r\n\r\n async function asyncEditCodeBlock() {\r\n if (dispatch) {\r\n // get props to edit\r\n const codeBlockProps = codeBlock\r\n ? { ...(codeBlock.node.attrs as CodeBlockProps), lang: '' }\r\n : defaultCodeBlockProps();\r\n\r\n // set lang if the first class is from available languages\r\n // (alternatively if we don't support attributes then it's\r\n // automatically considered the language)\r\n if (codeBlockProps.classes && codeBlockProps.classes.length) {\r\n const potentialLang = codeBlockProps.classes[0];\r\n if (!pandocExtensions.fenced_code_attributes || languages.includes(potentialLang)) {\r\n codeBlockProps.lang = potentialLang;\r\n codeBlockProps.classes = codeBlockProps.classes.slice(1);\r\n }\r\n }\r\n\r\n // show dialog\r\n const result = await ui.dialogs.editCodeBlock(\r\n codeBlockProps,\r\n pandocExtensions.fenced_code_attributes,\r\n languages,\r\n );\r\n if (result) {\r\n // extract lang\r\n const applyProps = propsWithLangClass(result);\r\n\r\n // edit or toggle as appropriate\r\n if (codeBlock) {\r\n const tr = state.tr;\r\n tr.setNodeMarkup(codeBlock.pos, schema.nodes.code_block, applyProps);\r\n dispatch(tr);\r\n } else {\r\n const prevListItemPos = precedingListItemInsertPos(state.doc, state.selection);\r\n if (prevListItemPos) {\r\n const tr = state.tr;\r\n const block = schema.nodes.code_block.create(applyProps);\r\n precedingListItemInsert(tr, prevListItemPos, block);\r\n dispatch(tr);\r\n } else {\r\n toggleBlockType(schema.nodes.code_block, schema.nodes.paragraph, applyProps)(state, dispatch, view);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n\r\n asyncEditCodeBlock();\r\n\r\n return true;\r\n };\r\n}\r\n\r\nfunction defaultCodeBlockProps() {\r\n return { id: '', classes: [], keyvalue: [], lang: '' };\r\n}\r\n\r\nfunction propsWithLangClass(props: CodeBlockProps) {\r\n const newProps = { ...props };\r\n if (newProps.classes && newProps.lang) {\r\n newProps.classes.unshift(props.lang);\r\n }\r\n return newProps;\r\n}\r\n\r\n// determine the code block language. if it's an Rmd example (i.e. with `r ''`) and\r\n// we have rmdExampleHighlight enabled then use the Rmd chunk language for highlighting\r\nfunction codeBlockLang(node: ProsemirrorNode, options: EditorOptions) {\r\n if (node.attrs.classes && node.attrs.classes.length) {\r\n const lang = node.attrs.classes[0];\r\n if (options.rmdExampleHighlight && lang === 'md') {\r\n const match = node.textContent.match(/^```+\\s*\\{([a-zA-Z0-9_-]+)( *[ ,].*)?\\}`r ''`/);\r\n if (match) {\r\n return match[1].split(\"-\").pop() || \"\";\r\n }\r\n }\r\n return lang;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction codeBlockAttrEdit(pandocExtensions: PandocExtensions, pandocCapabilities: PandocCapabilities, ui: EditorUI) {\r\n return () => {\r\n if (hasFencedCodeBlocks(pandocExtensions)) {\r\n return {\r\n type: (schema: Schema) => schema.nodes.code_block,\r\n tags: (node: ProsemirrorNode) => {\r\n const tags: string[] = [];\r\n if (node.attrs.id) {\r\n tags.push(`#${node.attrs.id}`);\r\n }\r\n if (node.attrs.classes) {\r\n for (let i=1; i<node.attrs.classes.length; i++) {\r\n tags.push(`.${node.attrs.classes[i]}`);\r\n } \r\n if (node.attrs.classes.length > 0) {\r\n const lang = node.attrs.classes[0];\r\n if (pandocCapabilities.highlight_languages.includes(lang) || lang === 'tex') {\r\n tags.push(lang);\r\n } else {\r\n tags.push(`.${lang}`);\r\n }\r\n }\r\n }\r\n if (node.attrs.keyvalue && node.attrs.keyvalue.length) {\r\n tags.push(`${node.attrs.keyvalue.map(\r\n (kv: [string,string]) => kv[0] + '=\"' + (kv[1] || '1') + '\"').join(' ')}\r\n `);\r\n }\r\n return tags;\r\n },\r\n offset: {\r\n top: 3,\r\n right: 0,\r\n },\r\n editFn: () => codeBlockFormatCommandFn(pandocExtensions, ui, pandocCapabilities.highlight_languages),\r\n };\r\n } else {\r\n return null;\r\n }\r\n };\r\n}\r\n\r\n// NOTE: we also reverse this when writing code blocks: for the first line ```{python} becomes ```{{python}}\r\nexport function escapedRmdChunkBlockCapsuleFilter(): PandocBlockCapsuleFilter {\r\n const kEscapedRmdChunkBlockCapsuleType = '9CB79E6C-888D-4A0E-9C9B-FF67CD404E60'.toLowerCase();\r\n\r\n return {\r\n type: kEscapedRmdChunkBlockCapsuleType,\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n match: /^([\\t >]*)((```+)\\s*\\{{2,}[a-zA-Z0-9_-]+(?: *[ ,].*?)?\\}{2,}[ \\t]*\\n(?:[\\t >]*\\3|[\\W\\w]*?\\n[\\t >]*\\3))([ \\t]*)$/gm,\r\n\r\n extract: (_match: string, p1: string, p2: string, _p3: string, p4: string) => {\r\n return {\r\n prefix: p1,\r\n source: p2,\r\n suffix: p4,\r\n };\r\n },\r\n\r\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\r\n // (in this case we don't do anything because pandoc would have written this table as a\r\n // semantically standalone block)\r\n enclose: (capsuleText: string) => {\r\n return capsuleText;\r\n },\r\n\r\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\r\n // and if we find it, parse and return the original source code\r\n handleText: blockCapsuleTextHandler(\r\n kEscapedRmdChunkBlockCapsuleType,\r\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\r\n ),\r\n\r\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\r\n // if find that then return the block capsule text\r\n handleToken: blockCapsuleParagraphTokenHandler(kEscapedRmdChunkBlockCapsuleType),\r\n\r\n // write the node\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\r\n // remove the source prefix\r\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\r\n\r\n // remove escaping\r\n const sourceLines = lines(source);\r\n sourceLines[0] = sourceLines[0].replace(/^(```+)\\{(\\{+[^}]+\\}+)\\}([ \\t]*)$/, \"$1$2$3\");\r\n\r\n // write the node\r\n writer.addNode(schema.nodes.code_block, {}, [schema.text(sourceLines.join(\"\\n\"))]);\r\n },\r\n };\r\n}\r\n\r\n\r\nexport default extension;\r\n","/*\r\n * div-callout.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from \"prosemirror-state\";\r\nimport { EditorView } from \"prosemirror-view\";\r\nimport { setTextSelection, ContentNodeWithPos, findParentNodeOfType } from \"prosemirror-utils\";\r\nimport { wrapIn } from \"prosemirror-commands\";\r\n\r\n\r\nimport { EditorCommandId, ProsemirrorCommand, toggleWrap } from \"../../api/command\";\r\nimport { EditorUI } from \"../../api/ui-types\";\r\nimport { OmniInsertGroup } from \"../../api/omni_insert\";\r\nimport { pandocAttrEnsureClass, pandocAttrSetKeyvalue, pandocAttrGetKeyvalue, \r\n pandocAttrRemoveKeyvalue, pandocAttrRemoveClass, pandocAttrFrom, PandocAttr } from \"../../api/pandoc_attr\";\r\nimport { CalloutProps } from \"editor-types\"\r\nimport { removeDiv } from \"./div\";\r\n\r\nexport function insertCalloutCommand(ui: EditorUI) {\r\n return new ProsemirrorCommand(EditorCommandId.Callout, [], insertCalloutCommandFn(ui), {\r\n name: ui.context.translateText('Callout'),\r\n description: ui.context.translateText('Content framed for special emphasis'),\r\n group: OmniInsertGroup.Content,\r\n priority: 2,\r\n noFocus: true,\r\n image: () => ui.images.omni_insert.generic,\r\n });\r\n}\r\n\r\nexport async function editCalloutDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void, div: ContentNodeWithPos) {\r\n \r\n // extract callout props\r\n const callout = defaultCallout();\r\n const attr = pandocAttrFrom(div.node.attrs);\r\n const calloutType = pandocAttrRemoveClass(attr, clz => clz.startsWith(\"callout-\"));\r\n if (calloutType) {\r\n let calloutAppearance = pandocAttrGetKeyvalue(attr, \"appearance\") as string | undefined;\r\n if (calloutAppearance) {\r\n pandocAttrRemoveKeyvalue(attr, \"appearance\");\r\n } else {\r\n calloutAppearance = \"default\";\r\n }\r\n let calloutIcon = true;\r\n if (pandocAttrGetKeyvalue(attr, \"icon\") === \"false\") {\r\n calloutIcon = false;\r\n pandocAttrRemoveKeyvalue(attr, \"icon\");\r\n }\r\n let calloutCaption = \"\";\r\n if (div.node.firstChild?.type === state.schema.nodes.heading) {\r\n calloutCaption = div.node.firstChild?.textContent || \"\";\r\n }\r\n callout.type = calloutType.replace(/^callout-/, \"\");\r\n callout.appearance = calloutAppearance;\r\n callout.icon = calloutIcon;\r\n callout.caption = calloutCaption;\r\n }\r\n \r\n // edit callout\r\n const result = await ui.dialogs.editCallout({ attr, callout }, true);\r\n \r\n if (result) {\r\n const tr = state.tr;\r\n if (result.action === 'edit') {\r\n \r\n // start with raw attributes\r\n const resultAttr = result.attr;\r\n\r\n // apply callout attributes \r\n pandocAttrEnsureClass(resultAttr, `callout-${result.callout.type}`);\r\n if (result.callout.appearance !== \"default\") {\r\n pandocAttrSetKeyvalue(resultAttr, \"appearance\", result.callout.appearance);\r\n }\r\n if (result.callout.icon !== true) {\r\n pandocAttrSetKeyvalue(resultAttr, \"icon\", \"false\");\r\n }\r\n\r\n // set node markup\r\n tr.setNodeMarkup(div.pos, div.node.type, resultAttr);\r\n\r\n // set caption if it's different\r\n if (result.callout && (callout?.caption !== result.callout?.caption)) {\r\n if (div.node.firstChild?.type === state.schema.nodes.heading) {\r\n if (result.callout?.caption) {\r\n tr.replaceRangeWith(\r\n div.start, \r\n div.start + div.node.firstChild?.nodeSize || 0, \r\n state.schema.nodes.heading.create(\r\n { level: 2 },\r\n state.schema.text(result.callout?.caption)\r\n )\r\n );\r\n } else {\r\n tr.deleteRange(div.start, div.start + div.node.firstChild?.nodeSize || 0);\r\n }\r\n } else if (result.callout?.caption) {\r\n tr.insert(\r\n div.start, \r\n state.schema.nodes.heading.create(\r\n { level: 2 }, \r\n state.schema.text(result.callout?.caption)\r\n )\r\n );\r\n }\r\n }\r\n dispatch(tr);\r\n\r\n } else if (result.action === 'remove') {\r\n removeDiv(state, dispatch, div); \r\n }\r\n }\r\n}\r\n\r\nfunction insertCalloutCommandFn(ui: EditorUI) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n \r\n const schema = state.schema;\r\n if (!toggleWrap(schema.nodes.div)(state)) {\r\n return false;\r\n }\r\n\r\n async function asyncInsertCallout() {\r\n if (dispatch) {\r\n await createCalloutDiv(ui, state, dispatch);\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncInsertCallout();\r\n\r\n return true;\r\n };\r\n}\r\n\r\nasync function createCalloutDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void) {\r\n const props = {\r\n attr: { id: \"\", classes: [], keyvalue: []},\r\n callout: defaultCallout()\r\n };\r\n const result = await ui.dialogs.editCallout(props, false);\r\n if (result) {\r\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\r\n // set div props from callout\r\n const attr = result.attr as PandocAttr;\r\n pandocAttrEnsureClass(attr, `callout-${result.callout.type}`);\r\n attr.keyvalue = attr.keyvalue || [];\r\n if (result.callout?.appearance !== \"default\") {\r\n attr.keyvalue.push([\"appearance\", result.callout.appearance]);\r\n }\r\n if (result.callout?.icon === false) {\r\n attr.keyvalue.push([\"icon\", \"false\"]);\r\n }\r\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\r\n tr.setNodeMarkup(div.pos, div.node.type, attr);\r\n\r\n // insert caption if one is specified\r\n if (result.callout?.caption) {\r\n const calloutContent = [\r\n state.schema.nodes.heading.create(\r\n { level: 2 },\r\n state.schema.text(result.callout?.caption)\r\n ),\r\n state.schema.nodes.paragraph.create()\r\n ];\r\n tr.replaceWith(div.start, div.start + 1, calloutContent);\r\n setTextSelection(div.start + calloutContent[0].nodeSize)(tr);\r\n }\r\n dispatch(tr);\r\n });\r\n }\r\n}\r\n\r\nfunction defaultCallout() : CalloutProps {\r\n return {\r\n type: \"note\",\r\n appearance: \"default\",\r\n icon: true,\r\n caption: \"\"\r\n };\r\n}\r\n\r\n","/*\r\n * div-tabset.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from \"prosemirror-state\";\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { wrapIn } from \"prosemirror-commands\";\r\nimport { findParentNodeOfType, setTextSelection } from \"prosemirror-utils\";\r\nimport { EditorView } from \"prosemirror-view\";\r\n\r\nimport { EditorCommandId, ProsemirrorCommand, toggleWrap } from \"../../api/command\";\r\nimport { EditorUI } from \"../../api/ui-types\";\r\nimport { OmniInsertGroup } from \"../../api/omni_insert\";\r\nimport { pandocAttrEnsureClass } from \"../../api/pandoc_attr\";\r\n\r\n\r\nexport function insertTabsetCommand(ui: EditorUI) {\r\n return new ProsemirrorCommand(EditorCommandId.Tabset, [], insertTabsetCommandFn(ui), {\r\n name: ui.context.translateText('Tabset'),\r\n description: ui.context.translateText('Content divided into tabs'),\r\n group: OmniInsertGroup.Content,\r\n priority: 2,\r\n noFocus: true,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.tabset_dark : ui.images.omni_insert.tabset),\r\n });\r\n}\r\n\r\nfunction insertTabsetCommandFn(ui: EditorUI) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n \r\n const schema = state.schema;\r\n if (!toggleWrap(schema.nodes.div)(state)) {\r\n return false;\r\n }\r\n\r\n async function asyncInsertTabset() {\r\n if (dispatch) {\r\n const result = await ui.dialogs.insertTabset();\r\n if (result) {\r\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\r\n // locate inserted div\r\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\r\n\r\n // ensure that .panel-tabset is the first class then set attributes\r\n pandocAttrEnsureClass(result.attr, \"panel-tabset\");\r\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\r\n \r\n // insert tabset\r\n const tabset: ProsemirrorNode[] = result.tabs.flatMap(tab => {\r\n return [\r\n schema.nodes.heading.create(\r\n { level: 2 },\r\n schema.text(tab)\r\n ),\r\n schema.nodes.paragraph.create()\r\n ];\r\n });\r\n tr.replaceWith(div.start, div.start + 1, tabset);\r\n\r\n // set selection\r\n setTextSelection(div.start + tabset[0].nodeSize)(tr);\r\n\r\n // dispatch\r\n dispatch(tr);\r\n });\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncInsertTabset();\r\n\r\n return true;\r\n };\r\n}\r\n\r\n\r\n\r\n","/*\r\n * div.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec, ResolvedPos } from 'prosemirror-model';\r\nimport { EditorState, Transaction, Plugin, PluginKey, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findParentNodeOfType, ContentNodeWithPos } from 'prosemirror-utils';\r\nimport { wrapIn } from 'prosemirror-commands';\r\nimport { liftTarget } from 'prosemirror-transform';\r\n\r\nimport { ExtensionContext, Extension } from '../../api/extension';\r\nimport {\r\n pandocAttrSpec,\r\n pandocAttrToDomAttr,\r\n pandocAttrParseDom,\r\n pandocAttrReadAST,\r\n pandocAttrFrom,\r\n pandocAttrAvailable,\r\n PandocAttr,\r\n pandocAttrHasClass,\r\n} from '../../api/pandoc_attr';\r\nimport { PandocOutput, PandocTokenType, PandocToken } from '../../api/pandoc';\r\nimport { ProsemirrorCommand, EditorCommandId, toggleWrap } from '../../api/command';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { OmniInsertGroup, OmniInsert } from '../../api/omni_insert';\r\nimport { markIsActive } from '../../api/mark';\r\nimport { BaseKey } from '../../api/basekeys';\r\nimport { attrInputToProps } from '../../api/ui';\r\nimport { kQuartoDocType } from '../../api/format';\r\n\r\nimport { insertCalloutCommand, editCalloutDiv } from './div-callout';\r\nimport { insertTabsetCommand } from './div-tabset';\r\n\r\nimport './div-styles.css';\r\n\r\nconst DIV_ATTR = 0;\r\nconst DIV_CHILDREN = 1;\r\n\r\nconst extension = (context: ExtensionContext) : Extension | null => {\r\n const { pandocExtensions, format, ui } = context;\r\n\r\n if (!pandocExtensions.fenced_divs && !pandocExtensions.native_divs) {\r\n return null;\r\n }\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'div',\r\n spec: {\r\n attrs: {\r\n ...pandocAttrSpec,\r\n },\r\n defining: true,\r\n content: 'block+',\r\n group: 'block list_item_block',\r\n parseDOM: [\r\n {\r\n tag: 'div[data-div=\"1\"]',\r\n getAttrs(dom: Node | string) {\r\n const attrs: { [key: string]: string | null } = { 'data-div': '1' };\r\n return {\r\n ...attrs,\r\n ...pandocAttrParseDom(dom as Element, attrs),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\r\n const attr = {\r\n 'data-div': '1',\r\n ...pandocAttrToDomAttr({\r\n ...node.attrs,\r\n classes: [...node.attrs.classes, 'pm-div', 'pm-div-background-color'],\r\n }),\r\n };\r\n return ['div', attr, 0];\r\n },\r\n },\r\n\r\n attr_edit: () => ({\r\n type: (schema: Schema) => schema.nodes.div,\r\n editFn: () => divCommand(ui, true),\r\n offset: {\r\n top: 3,\r\n right: 0\r\n }\r\n }),\r\n\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Div,\r\n block: 'div',\r\n getAttrs: (tok: PandocToken) => ({\r\n ...pandocAttrReadAST(tok, DIV_ATTR),\r\n }),\r\n getChildren: (tok: PandocToken) => tok.c[DIV_CHILDREN],\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Div, () => {\r\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\r\n output.writeArray(() => {\r\n output.writeNodes(node);\r\n });\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n baseKeys: () => {\r\n return [\r\n { key: BaseKey.Enter, command: divInputRuleEnter() },\r\n ];\r\n },\r\n\r\n commands: () => {\r\n const cmds = [\r\n // turn current block into a div\r\n new DivCommand(EditorCommandId.Div, ui, true),\r\n\r\n // insert a div\r\n new DivCommand(EditorCommandId.InsertDiv, ui, false, {\r\n name: ui.context.translateText('Div...'),\r\n description: ui.context.translateText('Block containing other content'),\r\n group: OmniInsertGroup.Common,\r\n priority: 6,\r\n noFocus: true,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.div_dark : ui.images.omni_insert.div),\r\n }),\r\n ];\r\n\r\n // quarto div commands\r\n if (format.docTypes.includes(kQuartoDocType)) {\r\n cmds.push(\r\n insertCalloutCommand(ui),\r\n insertTabsetCommand(ui)\r\n );\r\n }\r\n\r\n return cmds;\r\n },\r\n\r\n plugins: (schema: Schema) => {\r\n return [\r\n new Plugin({\r\n key: new PluginKey(\"div-selection\"),\r\n appendTransaction: (_transactions: readonly Transaction[], _oldState: EditorState, newState: EditorState) => {\r\n if (newState.selection.empty) {\r\n return undefined;\r\n }\r\n const divNode = findParentNodeOfType(schema.nodes.div)(newState.selection);\r\n if (divNode && \r\n (newState.selection.anchor === divNode.start + 1) &&\r\n newState.selection.head === divNode.pos + divNode.node.nodeSize - 2) {\r\n const tr = newState.tr;\r\n const sel = TextSelection.create(tr.doc, divNode.start, divNode.start + divNode.node.nodeSize - 1);\r\n tr.setSelection(sel);\r\n return tr;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n }),\r\n ];\r\n },\r\n };\r\n};\r\n\r\nexport function removeDiv(state: EditorState, dispatch: (tr: Transaction) => void, div: ContentNodeWithPos) {\r\n const tr = state.tr;\r\n trRemoveDiv(tr, div);\r\n dispatch(tr);\r\n}\r\n\r\nexport function trRemoveDiv(tr: Transaction, div: ContentNodeWithPos) {\r\n const fromPos = tr.doc.resolve(div.pos + 1);\r\n const toPos = tr.doc.resolve(div.pos + div.node.nodeSize - 1);\r\n const nodeRange = fromPos.blockRange(toPos);\r\n if (nodeRange) {\r\n const targetLiftDepth = liftTarget(nodeRange);\r\n if (targetLiftDepth || targetLiftDepth === 0) {\r\n tr.lift(nodeRange, targetLiftDepth);\r\n }\r\n }\r\n}\r\n\r\nfunction divCommand(ui: EditorUI, allowEdit: boolean) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // two different modes:\r\n // - editing attributes of an existing div\r\n // - wrapping (a la blockquote)\r\n const schema = state.schema;\r\n const div = allowEdit ? findParentNodeOfType(schema.nodes.div)(state.selection) : undefined;\r\n if (!div && !toggleWrap(schema.nodes.div)(state)) {\r\n return false;\r\n }\r\n\r\n async function asyncEditDiv() {\r\n if (dispatch) {\r\n // selecting nothing or entire div means edit, selecting text outside of a\r\n // div or a subset of an existing div means create new one\r\n const editMode = div && (state.selection.empty || isFullDivSelection(div, state));\r\n if (editMode) {\r\n const attr = pandocAttrFrom(div!.node.attrs);\r\n if (pandocAttrHasClass(attr, (clz) => clz.startsWith(\"callout-\"))) {\r\n await editCalloutDiv(ui, state, dispatch, div!);\r\n } else {\r\n await editDiv(ui, state, dispatch, div!);\r\n }\r\n } else {\r\n await createDiv(ui, state, dispatch);\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncEditDiv();\r\n\r\n return true;\r\n };\r\n}\r\n\r\nclass DivCommand extends ProsemirrorCommand {\r\n constructor(id: EditorCommandId, ui: EditorUI, allowEdit: boolean, omniInsert?: OmniInsert) {\r\n super(id, [], divCommand(ui, allowEdit), omniInsert);\r\n }\r\n}\r\n\r\nasync function createDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void) {\r\n const result = await ui.dialogs.editDiv({}, false);\r\n if (result) {\r\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\r\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\r\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\r\n dispatch(tr);\r\n });\r\n }\r\n}\r\n\r\nasync function editDiv(ui: EditorUI, state: EditorState, dispatch: (tr: Transaction) => void, div: ContentNodeWithPos) {\r\n const attr = pandocAttrFrom(div.node.attrs);\r\n const result = await ui.dialogs.editDiv(attr, pandocAttrAvailable(attr));\r\n if (result) {\r\n if (result.action === 'edit') {\r\n const tr = state.tr;\r\n tr.setNodeMarkup(div.pos, div.node.type, result.attr);\r\n dispatch(tr);\r\n } else if (result.action === 'remove') {\r\n removeDiv(state, dispatch, div);\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction isFullDivSelection(div: ContentNodeWithPos, state: EditorState) {\r\n const divStart = div.pos;\r\n const divEnd = div.pos + div.node.nodeSize;\r\n return state.selection.from - 2 === divStart && state.selection.to + 2 === divEnd;\r\n}\r\n\r\nfunction divInputRuleEnter() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // see if the parent consist of a pending code block input rule\r\n const schema = state.schema;\r\n\r\n // selection must be empty\r\n if (!state.selection.empty) {\r\n return false;\r\n }\r\n\r\n // full text of parent must meet the pattern\r\n // eslint-disable-next-line no-useless-escape\r\n const match = state.selection.$head.parent.textContent.match(/^:{3,}(\\s+({.*?}|\\S+)?[\\s:]*)?$/);\r\n if (!match) {\r\n return false;\r\n }\r\n\r\n // no inline code marks\r\n if (markIsActive(state, schema.marks.code)) {\r\n return false;\r\n }\r\n\r\n // must be able to perform the replacement\r\n if (!canApplyDivInputRule(state)) {\r\n return false;\r\n }\r\n\r\n // execute\r\n if (dispatch) {\r\n // if it's just followed by whitespace then don't do it\r\n if (match[1] && match[1].trim().length === 0) {\r\n return false;\r\n }\r\n\r\n // parse attributes\r\n const attrs: PandocAttr = pandocAttrFrom({});\r\n const attribMatch = match[2];\r\n if (attribMatch) {\r\n const bracesMatch = attribMatch.match(/^{(.*?)}$/);\r\n if (bracesMatch) {\r\n const pandocAttrsText = bracesMatch[1];\r\n const pandocAttrsMatch = pandocAttrsText.match(/^\\s*(#\\S+)?\\s*((?:\\.\\S+\\s*)*)?(.*)?$/);\r\n if (pandocAttrsMatch) {\r\n const attrProps = attrInputToProps({ id: pandocAttrsMatch[1], classes: pandocAttrsMatch[2] });\r\n attrs.id = attrProps.id || '';\r\n attrs.classes = attrProps.classes || [];\r\n }\r\n } else {\r\n attrs.classes = [attribMatch];\r\n }\r\n }\r\n\r\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\r\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\r\n tr.setNodeMarkup(div.pos, div.node.type, attrs);\r\n const $head = tr.selection.$head;\r\n const start = $head.start();\r\n const end = start + $head.parent.textContent.length;\r\n tr.deleteRange(start, end);\r\n dispatch(tr);\r\n });\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nfunction canReplaceNodeWithDiv(schema: Schema, $pos: ResolvedPos) {\r\n return $pos.node(-1).canReplaceWith($pos.index(-1), $pos.indexAfter(-1), schema.nodes.div);\r\n}\r\n\r\nfunction canApplyDivInputRule(state: EditorState) {\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n return canReplaceNodeWithDiv(schema, $head);\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * list-commands.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { NodeType, Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { EditorState, Transaction, Selection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { autoJoin } from 'prosemirror-commands';\r\nimport { NodeWithPos, findParentNode } from 'prosemirror-utils';\r\n\r\nimport { NodeCommand, toggleList, ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { EditorUI, EditorUIPrefs } from '../../api/ui-types';\r\nimport { ListProps } from 'editor-types';\r\nimport { ListType, ListCapabilities } from '../../api/list-types';\r\nimport { isList } from '../../api/list';\r\n\r\nimport { OmniInsert } from '../../api/omni_insert';\r\nimport { findWrapping } from 'prosemirror-transform';\r\nimport { trRemoveDiv } from '../div/div';\r\nimport { pandocAttrHasClass, pandocAttrRemoveClass, pandocAttrEnsureClass } from '../../api/pandoc_attr';\r\n\r\nexport class ListCommand extends NodeCommand {\r\n constructor(\r\n id: EditorCommandId,\r\n keymap: string[],\r\n listType: NodeType,\r\n listItemType: NodeType,\r\n omniInsert: OmniInsert,\r\n prefs: EditorUIPrefs,\r\n ) {\r\n super(id, keymap, listType, {}, autoJoin(toggleList(listType, listItemType, prefs), [listType.name]), omniInsert);\r\n }\r\n}\r\n\r\nexport class TightListCommand extends ProsemirrorCommand {\r\n constructor() {\r\n super(\r\n EditorCommandId.TightList,\r\n ['Mod-Alt-9'],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const parentList = findParentNode(isList)(state.selection);\r\n if (!parentList) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const node = parentList.node;\r\n tr.setNodeMarkup(parentList.pos, node.type, {\r\n ...node.attrs,\r\n tight: !node.attrs.tight,\r\n });\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n },\r\n );\r\n }\r\n\r\n public isActive(state: EditorState): boolean {\r\n if (this.isEnabled(state)) {\r\n const itemNode = findParentNode(isList)(state.selection) as NodeWithPos;\r\n return itemNode.node.attrs.tight;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport function editListPropertiesCommandFn(ui: EditorUI, capabilities: ListCapabilities) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // see if a parent node is a list\r\n let node: ProsemirrorNode | null = null;\r\n let pos = 0;\r\n const nodeWithPos = findParentNode(isList)(state.selection);\r\n if (nodeWithPos) {\r\n node = nodeWithPos.node;\r\n pos = nodeWithPos.pos;\r\n }\r\n\r\n // return false (disabled) for no targets\r\n if (!node) {\r\n return false;\r\n }\r\n\r\n // execute command when requested\r\n async function asyncEditList() {\r\n if (dispatch) {\r\n await editList(node as ProsemirrorNode, pos, state, dispatch, ui, capabilities);\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncEditList();\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport class EditListPropertiesCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI, capabilities: ListCapabilities) {\r\n super(EditorCommandId.EditListProperties, [], editListPropertiesCommandFn(ui, capabilities));\r\n }\r\n}\r\n\r\nconst kListIncrementalDefault = \"default\";\r\nconst kListIncremental = \"incremental\";\r\nconst kListNonIncremental = \"nonincremental\";\r\n\r\nasync function editList(\r\n node: ProsemirrorNode,\r\n pos: number,\r\n state: EditorState,\r\n dispatch: (tr: Transaction) => void,\r\n ui: EditorUI,\r\n capabilities: ListCapabilities,\r\n): Promise<void> {\r\n // get list properties\r\n const schema = node.type.schema;\r\n const attrs = node.attrs;\r\n const props = {\r\n ...attrs,\r\n type: node.type === schema.nodes.ordered_list ? ListType.Ordered : ListType.Bullet,\r\n } as ListProps;\r\n\r\n // if we support incremental lists then determine that value\r\n const incrementalDiv = wrappingIncrementalDiv(state.selection, schema);\r\n if (incrementalDiv && capabilities.incremental) {\r\n props.incremental = pandocAttrHasClass(incrementalDiv.node.attrs, clz => clz === kListIncremental) \r\n ? kListIncremental \r\n : kListNonIncremental;\r\n } else {\r\n props.incremental = kListIncrementalDefault;\r\n }\r\n\r\n // edit list\r\n const result = await ui.dialogs.editList(props, capabilities);\r\n\r\n // apply result\r\n if (result) {\r\n const tr = state.tr;\r\n const listType = result.type === ListType.Ordered ? schema.nodes.ordered_list : schema.nodes.bullet_list;\r\n tr.setNodeMarkup(pos, listType, {\r\n ...attrs,\r\n ...result,\r\n });\r\n\r\n \r\n if (capabilities.incremental) {\r\n\r\n // remove any existing wrapping\r\n if (result.incremental === kListIncrementalDefault) {\r\n if (incrementalDiv) {\r\n trRemoveDiv(tr, incrementalDiv);\r\n }\r\n // edit existing wrapping\r\n } else if (incrementalDiv) {\r\n const divAttrs = { id: \"\", classes: [], keyvalue: [], ...incrementalDiv.node.attrs };\r\n pandocAttrRemoveClass(divAttrs, isIncrementalClass);\r\n pandocAttrEnsureClass(divAttrs, result.incremental);\r\n tr.setNodeMarkup(incrementalDiv.pos, schema.nodes.div, divAttrs);\r\n // create new wrapping\r\n } else {\r\n const $pos = tr.doc.resolve(pos);\r\n const $endPos = tr.doc.resolve(pos + node.nodeSize);\r\n const range = $pos.blockRange($endPos); \r\n if (range) {\r\n const wrapping = findWrapping(range, schema.nodes.div, { classes: [result.incremental]});\r\n if (wrapping) {\r\n tr.wrap(range, wrapping);\r\n }\r\n }\r\n }\r\n }\r\n \r\n dispatch(tr);\r\n }\r\n}\r\n\r\nfunction wrappingIncrementalDiv(selection: Selection, schema: Schema) {\r\n return findParentNode(nd => {\r\n return nd.type === schema.nodes.div && \r\n pandocAttrHasClass(nd.attrs, isIncrementalClass);\r\n })(selection);\r\n\r\n}\r\n\r\nfunction isIncrementalClass(clz: string) {\r\n return [kListIncremental, kListNonIncremental].includes(clz);\r\n}","/*\r\n * list-checked.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, Fragment, NodeType } from 'prosemirror-model';\r\nimport { NodeView, EditorView } from 'prosemirror-view';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { findParentNodeOfType, NodeWithPos, setTextSelection } from 'prosemirror-utils';\r\nimport { InputRule, wrappingInputRule } from 'prosemirror-inputrules';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { PandocToken, mapTokens } from '../../api/pandoc';\r\n\r\n// custom NodeView that accomodates display / interaction with item check boxes\r\nexport class CheckedListItemNodeView implements NodeView {\r\n public readonly dom: HTMLElement;\r\n public readonly contentDOM: HTMLElement;\r\n\r\n constructor(node: ProsemirrorNode, view: EditorView, getPos: () => number) {\r\n \r\n // create root li element\r\n this.dom = window.document.createElement('li');\r\n if (node.attrs.tight) {\r\n this.dom.setAttribute('data-tight', 'true');\r\n }\r\n\r\n const container = window.document.createElement('div');\r\n container.classList.add('list-item-container');\r\n this.dom.appendChild(container);\r\n\r\n // add checkbox for checked items\r\n if (node.attrs.checked !== null) {\r\n this.dom.setAttribute('data-checked', node.attrs.checked ? 'true' : 'false');\r\n\r\n // checkbox for editing checked state\r\n const input = window.document.createElement('input');\r\n input.classList.add('list-item-checkbox');\r\n input.setAttribute('type', 'checkbox');\r\n input.checked = node.attrs.checked;\r\n input.contentEditable = 'false';\r\n input.disabled = !view.editable;\r\n input.addEventListener('mousedown', (ev: Event) => {\r\n ev.preventDefault(); // don't steal focus\r\n });\r\n input.addEventListener('change', (ev: Event) => {\r\n const tr = view.state.tr;\r\n tr.setNodeMarkup(getPos(), node.type, {\r\n ...node.attrs,\r\n checked: (ev.target as HTMLInputElement).checked,\r\n });\r\n setTextSelection(getPos() + 1)(tr);\r\n view.dispatch(tr);\r\n });\r\n container.appendChild(input);\r\n }\r\n\r\n // content div\r\n const content = window.document.createElement('div');\r\n content.classList.add('list-item-content');\r\n this.contentDOM = content;\r\n container.appendChild(content);\r\n }\r\n}\r\n\r\n// command to toggle checked list items\r\nexport function checkedListItemCommandFn(itemType: NodeType) {\r\n return (state: EditorState, dispatch?: ((tr: Transaction) => void) | undefined) => {\r\n const itemNode = findParentNodeOfType(itemType)(state.selection);\r\n if (!itemNode) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n if (itemNode.node.attrs.checked !== null) {\r\n setItemChecked(tr, itemNode, null);\r\n } else {\r\n setItemChecked(tr, itemNode, false);\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function checkedListItemToggleCommandFn(itemType: NodeType) {\r\n return (state: EditorState, dispatch?: ((tr: Transaction) => void) | undefined) => {\r\n const itemNode = findParentNodeOfType(itemType)(state.selection);\r\n if (!itemNode || itemNode.node.attrs.checked === null) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n setItemChecked(tr, itemNode, !itemNode.node.attrs.checked);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport class CheckedListItemCommand extends ProsemirrorCommand {\r\n constructor(itemType: NodeType) {\r\n super(EditorCommandId.ListItemCheck, [], checkedListItemCommandFn(itemType));\r\n }\r\n\r\n public isActive(state: EditorState): boolean {\r\n if (this.isEnabled(state)) {\r\n const itemNode = findParentNodeOfType(state.schema.nodes.list_item)(state.selection) as NodeWithPos;\r\n return itemNode.node.attrs.checked !== null;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport class CheckedListItemToggleCommand extends ProsemirrorCommand {\r\n private itemType: NodeType;\r\n\r\n constructor(itemType: NodeType) {\r\n super(EditorCommandId.ListItemCheckToggle, [], checkedListItemToggleCommandFn(itemType));\r\n this.itemType = itemType;\r\n }\r\n\r\n public isActive(state: EditorState): boolean {\r\n const itemNode = findParentNodeOfType(this.itemType)(state.selection);\r\n return itemNode && itemNode.node.attrs.checked;\r\n }\r\n}\r\n\r\n// allow users to type [x] or [ ] to define a checked list item\r\nexport function checkedListItemInputRule() {\r\n return new InputRule(/\\[([ x])\\]\\s$/, (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n const schema = state.schema;\r\n\r\n const itemNode = findParentNodeOfType(schema.nodes.list_item)(state.selection);\r\n if (itemNode) {\r\n // create transaction\r\n const tr = state.tr;\r\n\r\n // set checked\r\n setItemChecked(tr, itemNode, match[1]);\r\n\r\n // delete entered text\r\n tr.delete(start, end);\r\n\r\n // return transaction\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nexport interface InputRuleWithHandler extends InputRule {\r\n handler: (state: EditorState, match: RegExpMatchArray, start: number, end: number) => Transaction\r\n}\r\n\r\n// allow users to begin a new checked list by typing [x] or [ ] at the beginning of a line\r\nexport function checkedListInputRule(schema: Schema) {\r\n // regex to match checked list at the beginning of a line\r\n const regex = /^\\s*\\[([ x])\\]\\s$/;\r\n\r\n // we are going to steal the handler from the base bullet list wrapping input rule\r\n const baseInputRule = wrappingInputRule(regex, schema.nodes.bullet_list) as InputRuleWithHandler;\r\n\r\n return new InputRule(regex, (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n // call the base handler to create the bullet list\r\n const tr = baseInputRule.handler(state, match, start, end);\r\n if (tr) {\r\n // set the checkbox\r\n const itemNode = findParentNodeOfType(schema.nodes.list_item)(tr.selection);\r\n if (itemNode) {\r\n setItemChecked(tr, itemNode, match[1]);\r\n }\r\n\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nfunction setItemChecked(tr: Transaction, itemNode: NodeWithPos, check: null | boolean | string) {\r\n tr.setNodeMarkup(itemNode.pos, itemNode.node.type, {\r\n ...itemNode.node.attrs,\r\n checked: check === null ? null : typeof check === 'string' ? check === 'x' : check,\r\n });\r\n}\r\n// prepend a check mark to the provided fragment\r\nexport function fragmentWithCheck(schema: Schema, fragment: Fragment, checked: boolean) {\r\n // create a raw markdown node with [x] or [ ]\r\n const mark = schema.marks.raw_inline.create({ format: 'markdown' });\r\n const check = schema.text((checked ? '[x]' : '[ ]') + ' ', [mark]);\r\n return Fragment.from(check).append(fragment);\r\n}\r\n\r\nconst kCheckedChar = '☒';\r\nconst kUncheckedChar = '☐';\r\n\r\nexport function tokensWithChecked(tokens: PandocToken[]): { checked: null | boolean; tokens: PandocToken[] } {\r\n // will set this flag based on inspecting the first Str token\r\n let checked: null | boolean | undefined;\r\n let lastWasChecked = false;\r\n\r\n // map tokens\r\n const mappedTokens = mapTokens(tokens, tok => {\r\n // if the last token was checked then strip the next space\r\n if (tok.t === 'Space' && lastWasChecked) {\r\n lastWasChecked = false;\r\n return {\r\n t: 'Str',\r\n c: '',\r\n };\r\n }\r\n\r\n // derive 'checked' from first chraracter of first Str token encountered\r\n // if we find checked or unchecked then set the flag and strip off\r\n // the first 2 chraracters (the check and the space after it)\r\n else if (tok.t === 'Str' && checked === undefined) {\r\n let text = tok.c as string;\r\n if (text.charAt(0) === kCheckedChar) {\r\n checked = true;\r\n lastWasChecked = true;\r\n text = text.slice(1);\r\n } else if (text.charAt(0) === kUncheckedChar) {\r\n checked = false;\r\n lastWasChecked = true;\r\n text = text.slice(1);\r\n } else {\r\n checked = null;\r\n }\r\n return {\r\n t: 'Str',\r\n c: text,\r\n };\r\n } else {\r\n return tok;\r\n }\r\n });\r\n\r\n // return\r\n return {\r\n checked: checked !== undefined ? checked : null,\r\n tokens: mappedTokens,\r\n };\r\n}\r\n","/*\r\n * list-indent.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { liftTarget, ReplaceAroundStep, canJoin} from \"prosemirror-transform\"\r\nimport {Slice, Fragment, NodeType, Node, NodeRange} from \"prosemirror-model\"\r\nimport {Command, EditorState, Transaction} from \"prosemirror-state\"\r\n\r\n\r\n// fork of https://github.com/ProseMirror/prosemirror-schema-list/blob/d017648e4f4472076599aa12ec839ae222e6e1b5/src/schema-list.ts#L173 \r\n// to allow for inheriting the attributes of nodes that are lifted or sunk\r\n\r\n/// Create a command to lift the list item around the selection up into\r\n/// a wrapping list.\r\nexport function liftListItem(itemType: NodeType): Command {\r\n return function(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const {$from, $to} = state.selection\r\n const range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild!.type == itemType)\r\n if (!range) return false\r\n if (!dispatch) return true\r\n const node = $from.node(range.depth - 1);\r\n if (node.type == itemType) // Inside a parent list\r\n return liftToOuterList(state, dispatch, node, range)\r\n else // Outer list node\r\n return liftOutOfList(state, dispatch, range)\r\n }\r\n}\r\n\r\n/// Create a command to sink the list item around the selection down\r\n/// into an inner list.\r\nexport function sinkListItem(itemType: NodeType): Command {\r\n return function(state, dispatch) {\r\n const {$from, $to} = state.selection\r\n const range = $from.blockRange($to, node => node.childCount > 0 && node.firstChild!.type == itemType)\r\n if (!range) return false\r\n const startIndex = range.startIndex\r\n if (startIndex == 0) return false\r\n const parent = range.parent, nodeBefore = parent.child(startIndex - 1)\r\n if (nodeBefore.type != itemType) return false\r\n\r\n if (dispatch) {\r\n const nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type\r\n const inner = Fragment.from(nestedBefore ? itemType.create() : null)\r\n const slice = new Slice(Fragment.from(itemType.create(null, Fragment.from(parent.type.create(parent.attrs, inner)))),\r\n nestedBefore ? 3 : 1, 0)\r\n const before = range.start, after = range.end\r\n dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after,\r\n before, after, slice, 1, true))\r\n .scrollIntoView())\r\n }\r\n return true\r\n }\r\n}\r\n\r\nfunction liftToOuterList(state: EditorState, dispatch: (tr: Transaction) => void, node: Node, range: NodeRange) {\r\n const tr = state.tr, end = range.end, endOfList = range.$to.end(range.depth)\r\n if (end < endOfList) {\r\n // There are siblings after the lifted items, which must become\r\n // children of the last item\r\n tr.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList,\r\n new Slice(Fragment.from(node.type.create(node.attrs, range.parent.copy())), 1, 0), 1, true))\r\n range = new NodeRange(tr.doc.resolve(range.$from.pos), tr.doc.resolve(endOfList), range.depth)\r\n }\r\n const target = liftTarget(range)\r\n if (target == null) return false\r\n tr.lift(range, target)\r\n const after = tr.mapping.map(end, -1) - 1\r\n if (canJoin(tr.doc, after)) tr.join(after)\r\n dispatch(tr.scrollIntoView())\r\n return true\r\n}\r\n\r\nfunction liftOutOfList(state: EditorState, dispatch: (tr: Transaction) => void, range: NodeRange) {\r\n const tr = state.tr, list = range.parent\r\n // Merge the list items into a single big item\r\n for (let pos = range.end, i = range.endIndex - 1, e = range.startIndex; i > e; i--) {\r\n pos -= list.child(i).nodeSize\r\n tr.delete(pos - 1, pos + 1)\r\n }\r\n const $start = tr.doc.resolve(range.start), item = $start.nodeAfter!\r\n if (tr.mapping.map(range.end) != range.start + $start.nodeAfter!.nodeSize) return false\r\n const atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount\r\n const parent = $start.node(-1), indexBefore = $start.index(-1)\r\n if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1,\r\n item.content.append(atEnd ? Fragment.empty : Fragment.from(list))))\r\n return false\r\n const start = $start.pos, end = start + item.nodeSize\r\n // Strip off the surrounding list. At the sides where we're not at\r\n // the end of the list, the existing list is closed. At sides where\r\n // this is the end, it is overwritten to its end.\r\n tr.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1,\r\n new Slice((atStart ? Fragment.empty : Fragment.from(list.copy(Fragment.empty)))\r\n .append(atEnd ? Fragment.empty : Fragment.from(list.copy(Fragment.empty))),\r\n atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1))\r\n dispatch(tr.scrollIntoView())\r\n return true\r\n}\r\n","/*\r\n * list-pandoc.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, NodeType, Fragment, Attrs } from 'prosemirror-model';\r\n\r\nimport { PandocOutput, PandocToken, ProsemirrorWriter, PandocTokenType } from '../../api/pandoc';\r\n\r\nimport { fragmentWithCheck, tokensWithChecked } from './list-checked';\r\nimport { ListNumberDelim, ListNumberStyle } from '../../api/list-types';\r\nimport { isList } from '../../api/list';\r\nimport { ListCapabilities } from '../../api/list-types';\r\n\r\nconst LIST_ATTRIBS = 0;\r\nconst LIST_CHILDREN = 1;\r\n\r\nconst LIST_ATTRIB_ORDER = 0;\r\nconst LIST_ATTRIB_NUMBER_STYLE = 1;\r\nconst LIST_ATTRIB_NUMBER_DELIM = 2;\r\n\r\n// Note that we are planning on eliminating the markdownOutputFilter after this commit\r\n// as there will be no more uses of it and it plays poorly w/ e.g. pandoc table output\r\n// which needs to reliably know the number of characters wide each column will be).\r\n// (previous uses of markdownOutputFilter were converted to use output.writeRawMarkdown).\r\n// So, if we are attempting to re-enable example lists b/c there is now round tripping\r\n// of example lists through the pandoc AST we need an alternative way to fixup\r\n// example list output (likely a more robust pandoc AST).\r\nconst kListItemExampleSentinel = '20543127-1873-4833-AC49-5B352CFA2AF5';\r\nconst kListItemExampleRegex = new RegExp(`\\\\(\\\\d+\\\\) ${kListItemExampleSentinel}`, 'g');\r\n\r\nexport function readPandocList(nodeType: NodeType, capabilities: ListCapabilities) {\r\n // alias schema\r\n const schema = nodeType.schema;\r\n\r\n // default extraction functions\r\n let getChildren = (tok: PandocToken) => tok.c;\r\n let getAttrs: (tok: PandocToken) => Attrs = () => ({});\r\n\r\n // function to read the number style (convert example to default if we\r\n // don't support example lists)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const readNumberStyle = (attribs: any) => {\r\n if (capabilities.fancy) {\r\n const style = attribs[LIST_ATTRIB_NUMBER_STYLE].t;\r\n if (style === ListNumberStyle.Example && !capabilities.example) {\r\n return ListNumberStyle.DefaultStyle;\r\n } else {\r\n return style;\r\n }\r\n } else {\r\n return ListNumberStyle.DefaultStyle;\r\n }\r\n };\r\n\r\n // specialize for ordered_list\r\n if (nodeType === schema.nodes.ordered_list) {\r\n getAttrs = (tok: PandocToken) => {\r\n const attribs = tok.c[LIST_ATTRIBS];\r\n return {\r\n order: capabilities.order ? attribs[LIST_ATTRIB_ORDER] : 1,\r\n number_style: readNumberStyle(attribs),\r\n number_delim: capabilities.fancy ? attribs[LIST_ATTRIB_NUMBER_DELIM].t : ListNumberDelim.DefaultDelim,\r\n };\r\n };\r\n getChildren = (tok: PandocToken) => tok.c[LIST_CHILDREN];\r\n }\r\n\r\n const listItemNodeType = schema.nodes.list_item;\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n\r\n // determine if this is an example list and log if it is\r\n if ((nodeType === schema.nodes.ordered_list) && capabilities.fancy) {\r\n const style = tok.c[LIST_ATTRIBS][LIST_ATTRIB_NUMBER_STYLE].t;\r\n if (style === ListNumberStyle.Example) {\r\n writer.logExampleList();\r\n }\r\n }\r\n \r\n const children = getChildren(tok);\r\n const attrs = { ...getAttrs(tok), \r\n tight: children.length && children[0].length && children[0][0].t === 'Plain'\r\n };\r\n writer.openNode(nodeType, attrs);\r\n children.forEach((child: PandocToken[]) => {\r\n // setup tokens/attribs for output\r\n let tokens = child;\r\n const childAttrs: { checked: null | boolean } = { checked: null };\r\n\r\n // special task list processing if the current format supports task lists\r\n if (capabilities.tasks) {\r\n // look for checkbox in first character of child tokens\r\n // if we see it, remove it and set childAttrs.checked as appropriate\r\n const childWithChecked = tokensWithChecked(child);\r\n childAttrs.checked = childWithChecked.checked;\r\n tokens = childWithChecked.tokens;\r\n }\r\n\r\n // process children\r\n writer.openNode(listItemNodeType, childAttrs);\r\n writer.writeTokens(tokens);\r\n writer.closeNode();\r\n });\r\n writer.closeNode();\r\n };\r\n}\r\n\r\nexport function writePandocOrderedList(capabilities: ListCapabilities) {\r\n return (output: PandocOutput, node: ProsemirrorNode) => {\r\n // alias some list options\r\n const options = listNodeOptions(node, capabilities);\r\n\r\n // force delim to two parens for example styles. we do this\r\n // to simplify the search/replace of example list sentinels\r\n // during conversion post-processing\r\n const delim = options.example ? ListNumberDelim.TwoParens : node.attrs.number_delim;\r\n\r\n output.writeToken(PandocTokenType.OrderedList, () => {\r\n output.writeArray(() => {\r\n output.write(capabilities.order ? node.attrs.order : 1);\r\n output.writeToken(capabilities.fancy ? node.attrs.number_style : ListNumberStyle.DefaultStyle);\r\n output.writeToken(capabilities.fancy ? delim : ListNumberDelim.DefaultDelim);\r\n });\r\n output.writeArray(() => {\r\n node.forEach(item => writePandocListItem(output, options, item));\r\n });\r\n });\r\n };\r\n}\r\n\r\nexport function writePandocBulletList(capabilities: ListCapabilities) {\r\n return (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.BulletList, () => {\r\n node.forEach(item => writePandocListItem(output, listNodeOptions(node, capabilities), item));\r\n });\r\n };\r\n}\r\n\r\nexport function exampleListPandocMarkdownOutputFilter(markdown: string) {\r\n return markdown.replace(kListItemExampleRegex, '(@) ');\r\n}\r\n\r\ninterface ListNodeOptions {\r\n tight: boolean;\r\n example: boolean;\r\n}\r\n\r\nfunction listNodeOptions(node: ProsemirrorNode, capabilities: ListCapabilities): ListNodeOptions {\r\n const options = {\r\n tight: node.attrs.tight,\r\n example: capabilities.example ? node.attrs.number_style === ListNumberStyle.Example : false,\r\n };\r\n\r\n // if it's tight see if we need to override b/c of multiple blocks\r\n // (allow case of [paragraph,list] which is just a nested list)\r\n node.forEach(item => {\r\n if (options.tight && item.childCount > 1) {\r\n if (item.childCount > 2 || !isList(item.child(1)) ) {\r\n options.tight = false;\r\n }\r\n }\r\n });\r\n\r\n return options;\r\n}\r\n\r\nfunction writePandocListItem(output: PandocOutput, options: ListNodeOptions, node: ProsemirrorNode) {\r\n const checked = node.attrs.checked;\r\n\r\n output.writeArray(() => {\r\n node.forEach((itemNode: ProsemirrorNode, _offset, index) => {\r\n if (itemNode.type === node.type.schema.nodes.paragraph) {\r\n const paraItemBlockType = options.tight ? PandocTokenType.Plain : PandocTokenType.Para;\r\n output.writeToken(paraItemBlockType, () => {\r\n // for first item block, prepend check mark if we have one\r\n if (checked !== null && index === 0) {\r\n writeListItemInlines(\r\n output,\r\n options.example,\r\n fragmentWithCheck(node.type.schema, itemNode.content, checked),\r\n index,\r\n );\r\n } else {\r\n writeListItemInlines(output, options.example, itemNode.content, index);\r\n }\r\n });\r\n } else {\r\n output.writeNode(itemNode);\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction writeListItemInlines(output: PandocOutput, example: boolean, fragment: Fragment, index: number) {\r\n if (index === 0 && example) {\r\n output.writeToken(PandocTokenType.Str, kListItemExampleSentinel);\r\n }\r\n output.writeInlines(fragment);\r\n}\r\n","/*\r\n * list.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { splitListItem } from 'prosemirror-schema-list';\r\nimport { Plugin, PluginKey, EditorState } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { findParentNodeOfType } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { BaseKey } from '../../api/basekeys';\r\nimport { EditorUI, kListSpacingTight } from '../../api/ui-types';\r\nimport { ListCapabilities, ListNumberDelim, ListNumberStyle } from '../../api/list-types';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { PandocTokenType } from '../../api/pandoc';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\nimport { conditionalWrappingInputRule } from '../../api/input_rule';\r\nimport { kPresentationDocType } from '../../api/format';\r\n\r\nimport { ListCommand, TightListCommand, EditListPropertiesCommand, editListPropertiesCommandFn } from './list-commands';\r\n\r\nimport {\r\n CheckedListItemNodeView,\r\n checkedListItemInputRule,\r\n checkedListInputRule,\r\n CheckedListItemCommand,\r\n CheckedListItemToggleCommand,\r\n} from './list-checked';\r\n\r\nimport { liftListItem, sinkListItem } from './list-indent';\r\n\r\nimport { writePandocBulletList, writePandocOrderedList, readPandocList } from './list-pandoc';\r\n\r\nimport './list-styles.css';\r\n\r\n\r\nconst plugin = new PluginKey('list');\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, ui, format } = context;\r\n\r\n // determine list capabilities based on active format options\r\n const capabilities: ListCapabilities = {\r\n tasks: pandocExtensions.task_lists,\r\n fancy: pandocExtensions.fancy_lists,\r\n /*\r\n Always disable example lists b/c they don't round trip through the AST:\r\n - (@good) referenced elsewhere via (@good) just becomes a generic example (@) with \r\n a literal numeric reference.\r\n - The writer doesn't preserve the (@) or the (@good) when writing\r\n */\r\n // example: pandocExtensions.fancy_lists && pandocExtensions.example_lists,\r\n example: false,\r\n order: pandocExtensions.startnum,\r\n incremental: format.docTypes.includes(kPresentationDocType)\r\n };\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'list_item',\r\n spec: {\r\n content: 'list_item_block block*',\r\n attrs: {\r\n checked: { default: null },\r\n },\r\n defining: true,\r\n parseDOM: [\r\n {\r\n tag: 'li',\r\n getAttrs: (dom: Node | string) => {\r\n const el = dom as Element;\r\n const attrs: Record<string,unknown> = {};\r\n if (capabilities.tasks && el.hasAttribute('data-checked')) {\r\n attrs.checked = el.getAttribute('data-checked') === 'true';\r\n }\r\n return attrs;\r\n },\r\n },\r\n ],\r\n toDOM(node) {\r\n const attrs: Record<string,unknown> = {\r\n class: 'pm-list-item',\r\n };\r\n if (capabilities.tasks && node.attrs.checked !== null) {\r\n attrs['data-checked'] = node.attrs.checked ? 'true' : 'false';\r\n }\r\n return ['li', attrs, 0];\r\n },\r\n },\r\n pandoc: {},\r\n },\r\n {\r\n name: 'bullet_list',\r\n spec: {\r\n content: 'list_item+',\r\n group: 'block',\r\n attrs: {\r\n tight: { default: false },\r\n },\r\n parseDOM: [\r\n {\r\n tag: 'ul',\r\n getAttrs: (dom: Node | string) => {\r\n const el = dom as Element;\r\n const attrs: Record<string,unknown> = {};\r\n if (el.hasAttribute('data-tight')) {\r\n attrs.tight = true;\r\n }\r\n return attrs;\r\n },\r\n },\r\n ],\r\n toDOM(node) {\r\n const attrs: { [key: string]: string } = {};\r\n attrs.class = 'pm-list pm-bullet-list';\r\n if (node.attrs.tight) {\r\n attrs['data-tight'] = 'true';\r\n }\r\n return ['ul', attrs, 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.BulletList,\r\n handler: (schema: Schema) => readPandocList(schema.nodes.bullet_list, capabilities),\r\n },\r\n ],\r\n writer: writePandocBulletList(capabilities),\r\n },\r\n\r\n attr_edit: listAttrEdit('bullet_list', capabilities, ui),\r\n },\r\n {\r\n name: 'ordered_list',\r\n spec: {\r\n content: 'list_item+',\r\n group: 'block',\r\n attrs: {\r\n tight: { default: false },\r\n order: { default: 1 },\r\n number_style: { default: ListNumberStyle.DefaultStyle },\r\n number_delim: { default: ListNumberDelim.DefaultDelim },\r\n },\r\n parseDOM: [\r\n {\r\n tag: 'ol',\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n\r\n const attrs: Record<string,unknown> = {};\r\n attrs.tight = el.hasAttribute('data-tight');\r\n\r\n if (capabilities.order) {\r\n const order: string | null = el.getAttribute('start');\r\n if (!order) {\r\n attrs.order = 1;\r\n } else {\r\n attrs.order = parseInt(order, 10) || 1;\r\n }\r\n }\r\n\r\n if (capabilities.fancy) {\r\n if (capabilities.example && el.getAttribute('data-example')) {\r\n attrs.number_style = ListNumberStyle.Example;\r\n } else {\r\n attrs.number_style = typeToNumberStyle(el.getAttribute('type'));\r\n }\r\n const numberDelim = el.getAttribute('data-number-delim');\r\n if (numberDelim) {\r\n attrs.number_delim = numberDelim;\r\n }\r\n }\r\n\r\n return attrs;\r\n },\r\n },\r\n ],\r\n toDOM(node) {\r\n const attrs: { [key: string]: string } = {};\r\n attrs.class = 'pm-list pm-ordered-list';\r\n if (node.attrs.tight) {\r\n attrs['data-tight'] = 'true';\r\n }\r\n if (capabilities.order && node.attrs.order !== 1) {\r\n attrs.start = node.attrs.order;\r\n }\r\n if (capabilities.fancy) {\r\n const type = numberStyleToType(node.attrs.number_style);\r\n if (type) {\r\n attrs.type = type;\r\n }\r\n if (capabilities.example) {\r\n if (node.attrs.number_style === ListNumberStyle.Example) {\r\n attrs['data-example'] = '1';\r\n }\r\n }\r\n attrs['data-number-delim'] = node.attrs.number_delim;\r\n }\r\n return ['ol', attrs, 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.OrderedList,\r\n handler: (schema: Schema) => readPandocList(schema.nodes.ordered_list, capabilities),\r\n },\r\n ],\r\n writer: writePandocOrderedList(capabilities),\r\n },\r\n\r\n attr_edit: listAttrEdit('ordered_list', capabilities, ui),\r\n },\r\n ],\r\n\r\n plugins: () => {\r\n const plugins: Plugin[] = [];\r\n if (capabilities.tasks) {\r\n plugins.push(\r\n new Plugin({\r\n key: plugin,\r\n props: {\r\n nodeViews: {\r\n list_item(node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) {\r\n return new CheckedListItemNodeView(node, view, getPos as () => number);\r\n },\r\n },\r\n },\r\n }),\r\n );\r\n }\r\n return plugins;\r\n },\r\n\r\n commands: (schema: Schema) => {\r\n const commands = [\r\n new ListCommand(\r\n EditorCommandId.BulletList,\r\n [],\r\n schema.nodes.bullet_list,\r\n schema.nodes.list_item,\r\n bulletListOmniInsert(ui),\r\n ui.prefs,\r\n ),\r\n new ListCommand(\r\n EditorCommandId.OrderedList,\r\n [],\r\n schema.nodes.ordered_list,\r\n schema.nodes.list_item,\r\n orderedListOmniInsert(ui),\r\n ui.prefs,\r\n ),\r\n new ProsemirrorCommand(EditorCommandId.ListItemSink, ['Tab'], sinkListItem(schema.nodes.list_item)),\r\n new ProsemirrorCommand(EditorCommandId.ListItemLift, ['Shift-Tab'], liftListItem(schema.nodes.list_item)),\r\n new ProsemirrorCommand(EditorCommandId.ListItemSplit, ['Enter'], splitListItem(schema.nodes.list_item)),\r\n new TightListCommand(),\r\n ];\r\n if (capabilities.fancy) {\r\n commands.push(new EditListPropertiesCommand(ui, capabilities));\r\n }\r\n if (capabilities.tasks) {\r\n commands.push(\r\n new CheckedListItemCommand(schema.nodes.list_item),\r\n new CheckedListItemToggleCommand(schema.nodes.list_item),\r\n );\r\n }\r\n return commands;\r\n },\r\n\r\n baseKeys: (schema: Schema) => {\r\n return [\r\n { key: BaseKey.Enter, command: splitListItem(schema.nodes.list_item) },\r\n { key: BaseKey.Tab, command: sinkListItem(schema.nodes.list_item) },\r\n { key: BaseKey.ShiftTab, command: liftListItem(schema.nodes.list_item) },\r\n ];\r\n },\r\n\r\n inputRules: (schema: Schema) => {\r\n // reflect tight pref\r\n const tightFn = () => {\r\n return {\r\n tight: ui.prefs.listSpacing() === kListSpacingTight,\r\n };\r\n };\r\n\r\n const isNotInHeading = (state: EditorState) => {\r\n return !findParentNodeOfType(schema.nodes.heading)(state.selection);\r\n };\r\n\r\n const rules = [\r\n conditionalWrappingInputRule(/^\\s*([-+*])\\s$/, schema.nodes.bullet_list, isNotInHeading, tightFn),\r\n conditionalWrappingInputRule(\r\n /^(\\d+)\\.\\s$/,\r\n schema.nodes.ordered_list,\r\n isNotInHeading,\r\n match => ({ order: +match[1], tight: tightFn() }),\r\n (match, node) => node.childCount + node.attrs.order === +match[1],\r\n ),\r\n ];\r\n if (capabilities.tasks) {\r\n rules.push(checkedListItemInputRule(), checkedListInputRule(schema));\r\n }\r\n return rules;\r\n },\r\n };\r\n};\r\n\r\nfunction listAttrEdit(type: string, capabilities: ListCapabilities, ui: EditorUI) {\r\n return () => {\r\n return {\r\n type: (schema: Schema) => schema.nodes[type],\r\n editFn: () => editListPropertiesCommandFn(ui, capabilities),\r\n offset: {\r\n top: 5,\r\n right: 5,\r\n },\r\n preferHidden: true\r\n };\r\n };\r\n}\r\n\r\nfunction numberStyleToType(style: ListNumberStyle): string | null {\r\n switch (style) {\r\n case ListNumberStyle.DefaultStyle:\r\n case ListNumberStyle.Decimal:\r\n case ListNumberStyle.Example:\r\n return 'l';\r\n case ListNumberStyle.LowerAlpha:\r\n return 'a';\r\n case ListNumberStyle.UpperAlpha:\r\n return 'A';\r\n case ListNumberStyle.LowerRoman:\r\n return 'i';\r\n case ListNumberStyle.UpperRoman:\r\n return 'I';\r\n default:\r\n return null;\r\n }\r\n}\r\n\r\nfunction typeToNumberStyle(type: string | null): ListNumberStyle {\r\n switch (type) {\r\n case 'l':\r\n return ListNumberStyle.Decimal;\r\n case 'a':\r\n return ListNumberStyle.LowerAlpha;\r\n case 'A':\r\n return ListNumberStyle.UpperAlpha;\r\n case 'i':\r\n return ListNumberStyle.LowerRoman;\r\n case 'I':\r\n return ListNumberStyle.UpperRoman;\r\n default:\r\n return ListNumberStyle.Decimal;\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nfunction bulletListOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Bullet List'),\r\n description: ui.context.translateText('List using bullets for items'),\r\n group: OmniInsertGroup.Common,\r\n priority: 4,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.bullet_list_dark : ui.images.omni_insert.bullet_list),\r\n };\r\n}\r\n\r\nfunction orderedListOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Numbered List'),\r\n description: ui.context.translateText('List using numbers for items'),\r\n group: OmniInsertGroup.Common,\r\n priority: 3,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.ordered_list_dark : ui.images.omni_insert.ordered_list,\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * image-util.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findParentNodeClosestToPos } from 'prosemirror-utils';\r\n\r\nimport { ImageProps } from 'editor-types';\r\nimport {\r\n imageSizePropWithUnit,\r\n isValidImageSizeUnit,\r\n ensureContainerWidth,\r\n isNaturalAspectRatio,\r\n ImageDimensions,\r\n} from '../../api/image';\r\nimport { kWidthAttrib, kHeightAttrib, attrPartitionKeyvalue } from '../../api/pandoc_attr';\r\nimport { kPercentUnit, kPixelUnit } from '../../api/css';\r\nimport { elementInnerDimensions } from '../../api/dom';\r\n\r\nexport function imagePropsWithSizes(image: ImageProps, dims: ImageDimensions) {\r\n // pull width, height, and units out of keyvalue if necessary\r\n // (enables front-ends to provide dedicated UI for width/height)\r\n // note that if the value doesn't use a unit supported by the\r\n // UI it's kept within the original keyvalue prop\r\n if (image.keyvalue) {\r\n let width: number | undefined;\r\n let height: number | undefined;\r\n let units: string | undefined;\r\n let lockRatio = true;\r\n const partitionedKeyvalue = attrPartitionKeyvalue([kWidthAttrib, kHeightAttrib], image.keyvalue);\r\n for (const kv of partitionedKeyvalue.partitioned) {\r\n const [key, value] = kv;\r\n let partitioned = false;\r\n const sizeWithUnit = imageSizePropWithUnit(value);\r\n if (sizeWithUnit) {\r\n sizeWithUnit.unit = sizeWithUnit.unit || kPixelUnit;\r\n if (isValidImageSizeUnit(sizeWithUnit.unit)) {\r\n if (key === kWidthAttrib) {\r\n width = sizeWithUnit.size;\r\n units = sizeWithUnit.unit;\r\n } else if (key === kHeightAttrib) {\r\n height = sizeWithUnit.size;\r\n units = units || sizeWithUnit.unit;\r\n }\r\n partitioned = true;\r\n }\r\n }\r\n if (!partitioned) {\r\n partitionedKeyvalue.base.push(kv);\r\n }\r\n }\r\n if (width && height) {\r\n lockRatio = isNaturalAspectRatio(width, height, dims, lockRatio);\r\n }\r\n return {\r\n ...image,\r\n width,\r\n height,\r\n units,\r\n lockRatio,\r\n keyvalue: partitionedKeyvalue.base,\r\n };\r\n } else {\r\n return image;\r\n }\r\n}\r\n\r\nexport function imageDimensionsFromImg(img: HTMLImageElement, containerWidth: number) {\r\n return {\r\n naturalWidth: img.naturalWidth || null,\r\n naturalHeight: img.naturalHeight || null,\r\n containerWidth: ensureContainerWidth(containerWidth),\r\n };\r\n}\r\n\r\nexport function hasPercentWidth(size: string | null) {\r\n return !!size && size.endsWith(kPercentUnit);\r\n}\r\n\r\nexport function imageContainerWidth(pos: number, view: EditorView) {\r\n let containerWidth = (view.dom as HTMLElement).offsetWidth;\r\n if (containerWidth > 0) {\r\n if (pos) {\r\n const imagePos = view.state.doc.resolve(pos);\r\n const resizeContainer = findParentNodeClosestToPos(imagePos, nd => nd.isBlock);\r\n if (resizeContainer) {\r\n const resizeEl = view.domAtPos(resizeContainer.pos + 1);\r\n containerWidth = elementInnerDimensions(resizeEl.node as HTMLElement).width;\r\n }\r\n }\r\n }\r\n\r\n return containerWidth;\r\n}\r\n\r\nexport function inlineHTMLIsImage(html: string) {\r\n return html\r\n .trimLeft()\r\n .toLowerCase()\r\n .startsWith('<img');\r\n}\r\n","/*\r\n * image-dialog.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, NodeType, Fragment, Mark } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { insertAndSelectNode } from '../../api/node';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { ImageProps } from 'editor-types';\r\nimport { extractSizeStyles, kPercentUnit, kPixelUnit } from '../../api/css';\r\nimport { ImageType, ImageDimensions, isNaturalAspectRatio } from '../../api/image';\r\nimport { kWidthAttrib, kHeightAttrib, pandocAttrRemoveKeyvalue, \r\n pandocAttrGetKeyvalue, pandocAttrSetKeyvalue, \r\n kFigAlignAttrib, kFigEnvAttrib, kFigAltAttrib } from '../../api/pandoc_attr';\r\n import { EditorFormat, kQuartoDocType } from '../../api/format';\r\n\r\nimport { imagePropsWithSizes, hasPercentWidth } from './image-util';\r\n\r\nexport async function imageDialog(\r\n node: ProsemirrorNode | null,\r\n dims: ImageDimensions | null,\r\n nodeType: NodeType,\r\n view: EditorView,\r\n editorUI: EditorUI,\r\n editorFormat: EditorFormat,\r\n imageAttributes: boolean,\r\n) {\r\n // alias schema\r\n const schema = view.state.schema;\r\n\r\n // if we are being called with an existing node then read it's attributes\r\n let content = Fragment.empty;\r\n let image: ImageProps = { src: null };\r\n let linkMark: Mark | undefined;\r\n let marks: readonly Mark[] = [];\r\n if (node && dims && node.type === nodeType) {\r\n // base attributess\r\n image = {\r\n ...(node.attrs as ImageProps),\r\n caption: nodeType === schema.nodes.figure ? node.textContent : node.attrs.caption,\r\n };\r\n\r\n // move width and height out of style and into keyvalue if necessary\r\n image = {\r\n ...image,\r\n keyvalue: extractSizeStyles(image.keyvalue),\r\n };\r\n\r\n // move width, height, and units out of keyvalue into explicit\r\n // top level image properties if necessary\r\n image = imagePropsWithSizes(image, dims);\r\n\r\n // record marks / linkTo\r\n if (nodeType === schema.nodes.image) {\r\n marks = node.marks;\r\n linkMark = node.marks.find(mark => mark.type === schema.marks.link);\r\n if (linkMark) {\r\n image.linkTo = linkMark.attrs.href;\r\n }\r\n }\r\n\r\n // content (will be caption for figures)\r\n content = node.content;\r\n } else {\r\n // create a new image\r\n image = nodeType.create(image).attrs as ImageProps;\r\n }\r\n\r\n // determine the type\r\n const type = nodeType === view.state.schema.nodes.image ? ImageType.Image : ImageType.Figure;\r\n\r\n // if this is a quarto figure then remove fig-align and fig-env from attributes\r\n const quartoFigure = (type === ImageType.Figure) && \r\n editorFormat.docTypes.includes(kQuartoDocType) && \r\n imageAttributes;\r\n if (quartoFigure) {\r\n // fig-alt\r\n image.alt = pandocAttrGetKeyvalue(image, kFigAltAttrib) || \"\";\r\n pandocAttrRemoveKeyvalue(image, kFigAltAttrib);\r\n // fig-align\r\n image.align = pandocAttrGetKeyvalue(image, kFigAlignAttrib) || \"default\";\r\n pandocAttrRemoveKeyvalue(image, kFigAlignAttrib);\r\n // fig env\r\n image.env = pandocAttrGetKeyvalue(image, kFigEnvAttrib) || \"\";\r\n pandocAttrRemoveKeyvalue(image, kFigEnvAttrib);\r\n }\r\n\r\n const result = await editorUI.dialogs.editImage(\r\n image, dims, type === ImageType.Figure, imageAttributes\r\n );\r\n if (result) {\r\n // since captions support inline formatting (and the dialog doesn't) we only want \r\n // to update the content if the alt/caption actually changed (as it will blow away\r\n // formatting)\r\n if (type === ImageType.Figure && image.caption !== result.caption) {\r\n if (result.caption) {\r\n content = Fragment.from(view.state.schema.text(result.caption));\r\n } else {\r\n content = Fragment.empty;\r\n }\r\n }\r\n\r\n // if we have align then move into keyvalue\r\n if (quartoFigure) {\r\n // fig-alt\r\n if (result.alt) {\r\n pandocAttrSetKeyvalue(result, kFigAltAttrib, result.alt);\r\n } else {\r\n pandocAttrRemoveKeyvalue(result, kFigAltAttrib);\r\n }\r\n // fig-align\r\n if (result.align) {\r\n if (result.align !== \"default\") {\r\n pandocAttrSetKeyvalue(result, kFigAlignAttrib, result.align);\r\n } else {\r\n pandocAttrRemoveKeyvalue(result, kFigAlignAttrib);\r\n }\r\n }\r\n // fig-env\r\n if (result.env) {\r\n pandocAttrSetKeyvalue(result, kFigEnvAttrib, result.env);\r\n } else {\r\n pandocAttrRemoveKeyvalue(result, kFigEnvAttrib);\r\n }\r\n }\r\n\r\n // if we have width and height move them into keyvalue\r\n let keyvalue = result.keyvalue;\r\n if (result.units) {\r\n // no units for px\r\n const units = result.units && result.units === kPixelUnit ? '' : result.units;\r\n // width\r\n if (result.width) {\r\n let width = result.width;\r\n if (hasPercentWidth(units)) {\r\n width = Math.min(width, 100);\r\n }\r\n keyvalue = keyvalue || [];\r\n keyvalue.push([kWidthAttrib, width + units]);\r\n }\r\n // only record height if it's not % units and it's not at it's natural height\r\n if (result.height && units !== kPercentUnit && !isNaturalHeight(result.width, result.height, dims)) {\r\n keyvalue = keyvalue || [];\r\n keyvalue.push([kHeightAttrib, result.height + units]);\r\n }\r\n }\r\n\r\n // merge updated keyvalue\r\n const imageProps = { ...result, keyvalue };\r\n\r\n // update or create link mark as necessary\r\n if (nodeType === schema.nodes.image) {\r\n if (linkMark) {\r\n marks = linkMark.removeFromSet(marks);\r\n if (imageProps.linkTo) {\r\n linkMark = linkMark.type.create({ ...linkMark.attrs, href: imageProps.linkTo });\r\n }\r\n } else if (imageProps.linkTo) {\r\n linkMark = schema.marks.link.create({ href: imageProps.linkTo });\r\n }\r\n if (imageProps.linkTo && linkMark) {\r\n marks = linkMark.addToSet(marks);\r\n }\r\n }\r\n\r\n // create the image\r\n const newImage = nodeType.createAndFill(imageProps, content, marks);\r\n\r\n // insert and select\r\n if (newImage) {\r\n insertAndSelectNode(view, newImage);\r\n }\r\n }\r\n\r\n if (view) {\r\n view.focus();\r\n }\r\n}\r\n\r\n// wrapper for isNaturalHeight that handles potentially undefined params\r\nfunction isNaturalHeight(width: number | undefined, height: number | undefined, dims: ImageDimensions | null) {\r\n if (width && height && dims) {\r\n return isNaturalAspectRatio(width, height, dims, false);\r\n } else {\r\n return false;\r\n }\r\n}\r\n","/*\r\n * decoration.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { NodeWithPos } from 'prosemirror-utils';\r\nimport { DecorationAttrs, Decoration } from 'prosemirror-view';\r\n\r\nexport function nodeDecoration(nodeWithPos: NodeWithPos, attrs: DecorationAttrs) {\r\n return Decoration.node(nodeWithPos.pos, nodeWithPos.pos + nodeWithPos.node.nodeSize, attrs);\r\n}\r\n","/*\r\n * image-textsel.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction, NodeSelection, Plugin, PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration } from 'prosemirror-view';\r\nimport { nodeDecoration } from '../../api/decoration';\r\n\r\nconst pluginKey = new PluginKey('image-text-selection');\r\n\r\nexport function imageTextSelectionPlugin() {\r\n return new Plugin<DecorationSet>({\r\n key: pluginKey,\r\n state: {\r\n init() {\r\n return DecorationSet.empty;\r\n },\r\n apply(tr: Transaction, _value: DecorationSet, _oldState: EditorState, newState: EditorState) {\r\n // no decorations for empty or node selection\r\n if (tr.selection.empty || tr.selection instanceof NodeSelection) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n const schema = newState.schema;\r\n const decorations: Decoration[] = [];\r\n tr.doc.nodesBetween(tr.selection.from, tr.selection.to, (node, pos) => {\r\n if ([schema.nodes.image, schema.nodes.figure].includes(node.type)) {\r\n decorations.push(nodeDecoration({ node, pos }, { class: 'pm-image-text-selection' }));\r\n }\r\n });\r\n\r\n return DecorationSet.create(tr.doc, decorations);\r\n },\r\n },\r\n props: {\r\n decorations(state: EditorState) {\r\n return pluginKey.getState(state);\r\n },\r\n },\r\n });\r\n}\r\n","/*\r\n * resource.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { EditorUIContext } from \"./ui-types\";\r\n\r\n// mapResourceToURL can return a string or promise, this function\r\n// normalizes the call so its always a promise\r\nexport function mapResourceToURL(uiContext: EditorUIContext, path: string) : Promise<string> {\r\n return new Promise(resolve => {\r\n const result = uiContext.mapResourceToURL(path);\r\n if (typeof(result) === \"string\") {\r\n resolve(result);\r\n } else {\r\n result.then(resolve);\r\n }\r\n });\r\n\r\n}","/*\r\n * widgets.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { applyStyles } from '../css';\r\n\r\nimport './widgets.css';\r\n\r\nexport function createHorizontalPanel() {\r\n const div = window.document.createElement('div');\r\n div.classList.add('pm-horizontal-panel');\r\n return div;\r\n}\r\n\r\nexport function addHorizontalPanelCell(panel: HTMLDivElement, el: HTMLElement) {\r\n el.classList.add('pm-horizontal-panel-cell');\r\n panel.append(el);\r\n}\r\n\r\nexport function createPopup(\r\n view: EditorView,\r\n classes: string[],\r\n onDestroyed?: () => void,\r\n style?: { [key: string]: string },\r\n) {\r\n // create popup\r\n const popup = window.document.createElement('span');\r\n popup.contentEditable = 'false';\r\n popup.classList.add(\r\n 'pm-popup',\r\n 'pm-text-color',\r\n 'pm-proportional-font',\r\n 'pm-pane-border-color',\r\n 'pm-background-color',\r\n );\r\n popup.style.position = 'absolute';\r\n popup.style.zIndex = '10';\r\n applyStyles(popup, classes, style);\r\n\r\n // create mutation observer that watches for destruction\r\n if (onDestroyed) {\r\n const observer = new MutationObserver(mutationsList => {\r\n mutationsList.forEach(mutation => {\r\n mutation.removedNodes.forEach(node => {\r\n if (node === popup) {\r\n observer.disconnect();\r\n onDestroyed();\r\n }\r\n });\r\n });\r\n });\r\n observer.observe(view.dom, { attributes: false, childList: true, subtree: true });\r\n }\r\n\r\n return popup;\r\n}\r\n\r\nexport function createImageButton(image: string, classes: string[], title: string, style?: { [key: string]: string }) {\r\n const button = window.document.createElement('button');\r\n button.classList.add('pm-image-button');\r\n button.title = title;\r\n applyStyles(button, classes, style);\r\n const imageEl = window.document.createElement('img') as HTMLImageElement;\r\n imageEl.src = image;\r\n imageEl.setAttribute('draggable', 'false');\r\n button.append(imageEl);\r\n return button;\r\n}\r\n\r\nexport function createInputLabel(text: string, classes?: string[], style?: { [key: string]: string }) {\r\n const label = window.document.createElement('label');\r\n label.innerText = text;\r\n label.classList.add('pm-input-label');\r\n applyStyles(label, classes, style);\r\n return label;\r\n}\r\n\r\nexport function createSelectInput(options: string[], classes?: string[], style?: { [key: string]: string }) {\r\n const select = window.document.createElement('select');\r\n appendOptions(select, options);\r\n select.classList.add('pm-input-select');\r\n select.classList.add('pm-pane-border-color');\r\n applyStyles(select, classes, style);\r\n return select;\r\n}\r\n\r\nfunction appendOptions(container: HTMLElement, options: string[]) {\r\n options.forEach(option => {\r\n const optionEl = window.document.createElement('option');\r\n optionEl.value = option;\r\n optionEl.textContent = option;\r\n container.append(optionEl);\r\n });\r\n}\r\n\r\nexport function createCheckboxInput(classes?: string[], style?: { [key: string]: string }) {\r\n const input = window.document.createElement('input');\r\n input.classList.add('pm-input-checkbox');\r\n input.type = 'checkbox';\r\n applyStyles(input, classes, style);\r\n return input;\r\n}\r\n\r\nexport function createTextInput(widthChars: number, classes?: string[], style?: { [key: string]: string }) {\r\n const input = document.createElement('input');\r\n input.type = 'text';\r\n input.classList.add('pm-input-text');\r\n input.classList.add('pm-pane-border-color');\r\n applyStyles(input, classes, style);\r\n input.style.width = widthChars + 'ch';\r\n return input;\r\n}\r\n","/*\r\n * image-resize.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { NodeWithPos } from 'prosemirror-utils';\r\nimport { NodeSelection } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport {\r\n createPopup,\r\n createHorizontalPanel,\r\n addHorizontalPanelCell,\r\n createInputLabel,\r\n createImageButton,\r\n createCheckboxInput,\r\n createSelectInput,\r\n createTextInput,\r\n} from '../../api/widgets/widgets';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { editingRootScrollContainerElement } from '../../api/node';\r\nimport { extractSizeStyles, kPercentUnit, kPixelUnit, removeStyleAttrib } from '../../api/css';\r\nimport {\r\n imageSizePropWithUnit,\r\n isNaturalAspectRatio,\r\n unitToPixels,\r\n pixelsToUnit,\r\n roundUnit,\r\n kValidUnits,\r\n isValidImageSizeUnit,\r\n} from '../../api/image';\r\nimport { kWidthAttrib, kHeightAttrib, kStyleAttrib, kAlignAttrib, kFigAlignAttrib, pandocAttrGetKeyvalue } from '../../api/pandoc_attr';\r\nimport { EditorUIImages } from '../../api/ui-images';\r\nimport { EditorFormat } from '../../api/format';\r\n\r\nimport { imageDialog } from './image-dialog';\r\nimport { hasPercentWidth, imageDimensionsFromImg } from './image-util';\r\n\r\nconst kDataWidth = 'data-width';\r\nconst kDataHeight = 'data-height';\r\n\r\nconst kDefaultContainerDisplay = 'inline-block';\r\n\r\nexport function initResizeContainer(container: HTMLElement) {\r\n // add standard parent class\r\n container.classList.add('pm-image-resize-container', 'pm-selected-node-outline-color');\r\n\r\n // so that we are the offsetParent for the resize handles and shelf\r\n container.style.position = 'relative';\r\n\r\n // so that the container matches the size of the contained image\r\n container.style.display = kDefaultContainerDisplay;\r\n\r\n // so that the handles and shelf can be visible outside the boundaries of the image\r\n container.style.overflow = 'visible';\r\n\r\n // return for convenience\r\n return container;\r\n}\r\n\r\nexport function isResizeUICompatible(img: HTMLImageElement) {\r\n // incompatible if it has a width, but not a data-width\r\n const incompatibleWidth = img.style.width && !img.hasAttribute(kDataWidth);\r\n\r\n // incompatible if it has a height, but not a data-height\r\n const incompatibleHeight = img.style.height && img.style.height !== 'auto' && !img.hasAttribute(kDataHeight);\r\n\r\n return !incompatibleWidth && !incompatibleHeight;\r\n}\r\n\r\nexport interface ResizeUI {\r\n update: () => void;\r\n detach: () => void;\r\n}\r\n\r\nexport function attachResizeUI(\r\n imageNode: () => NodeWithPos,\r\n container: HTMLElement,\r\n img: HTMLImageElement,\r\n imgContainerWidth: () => number,\r\n view: EditorView,\r\n ui: EditorUI,\r\n format: EditorFormat\r\n): ResizeUI {\r\n // indicate that resize ui is active\r\n container.classList.add('pm-image-resize-active');\r\n\r\n // sync current state of shelf to node\r\n const updateImageNodeFromShelf = () => {\r\n updateImageNodeSize(\r\n view,\r\n imageNode(),\r\n img,\r\n imgContainerWidth,\r\n shelf.props.width(),\r\n shelf.props.height(),\r\n shelf.props.units(),\r\n );\r\n };\r\n\r\n // shelf init\r\n const onInitShelf = () => {\r\n // sync props\r\n shelf.sync();\r\n\r\n // default for lockRatio based on naturalWidth/naturalHeight\r\n const dims = imageDimensionsFromImg(img, imgContainerWidth());\r\n shelf.props.setLockRatio(isNaturalAspectRatio(shelf.props.width(), shelf.props.height(), dims, true));\r\n };\r\n\r\n // handle width changed from shelf\r\n const onWidthChanged = () => {\r\n const width = shelf.props.width();\r\n const height = shelf.props.lockRatio() ? (img.offsetHeight / img.offsetWidth) * width : shelf.props.height();\r\n shelf.props.setHeight(height);\r\n updateImageNodeFromShelf();\r\n };\r\n\r\n // handle height changed from shelf\r\n const onHeightChanged = () => {\r\n const height = shelf.props.height();\r\n const width = shelf.props.lockRatio() ? (img.offsetWidth / img.offsetHeight) * height : shelf.props.width();\r\n shelf.props.setWidth(width);\r\n updateImageNodeFromShelf();\r\n };\r\n\r\n // do necessary unit conversion when the units change\r\n const onUnitsChanged = () => {\r\n const prevUnits = shelfSizeFromImage(img).unit;\r\n const containerWidth = imgContainerWidth();\r\n\r\n const width = shelf.props.width();\r\n const widthPixels = unitToPixels(width, prevUnits, containerWidth);\r\n let widthInUnits = pixelsToUnit(widthPixels, shelf.props.units(), containerWidth);\r\n if (hasPercentWidth(shelf.props.units()) && widthInUnits > 100) {\r\n widthInUnits = 100;\r\n }\r\n shelf.props.setWidth(widthInUnits);\r\n\r\n const height = shelf.props.height();\r\n const heightPixels = unitToPixels(height, prevUnits, containerWidth);\r\n shelf.props.setHeight(pixelsToUnit(heightPixels, shelf.props.units(), containerWidth));\r\n\r\n updateImageNodeFromShelf();\r\n };\r\n\r\n // handle editImage request from shelf\r\n const onEditImage = () => {\r\n const nodeWithPos = imageNode();\r\n imageDialog(\r\n nodeWithPos.node,\r\n imageDimensionsFromImg(img, imgContainerWidth()),\r\n nodeWithPos.node.type,\r\n view,\r\n ui,\r\n format,\r\n true,\r\n );\r\n };\r\n\r\n // create resize shelf\r\n const shelf = resizeShelf(\r\n view,\r\n container,\r\n img,\r\n onInitShelf,\r\n onWidthChanged,\r\n onHeightChanged,\r\n onUnitsChanged,\r\n onEditImage,\r\n ui.images,\r\n ui.context.translateText,\r\n );\r\n\r\n // create resize handle and add it to the container\r\n const handle = resizeHandle(\r\n img,\r\n imageNode,\r\n container,\r\n imgContainerWidth,\r\n shelf.props.lockRatio,\r\n shelf.props.units,\r\n shelf.sync,\r\n updateImageNodeFromShelf,\r\n );\r\n container.append(handle);\r\n\r\n // return functions that can be used to update and detach the ui\r\n return {\r\n update: () => {\r\n shelf.sync();\r\n },\r\n detach: () => {\r\n container.classList.remove('pm-image-resize-active');\r\n handle.remove();\r\n shelf.remove();\r\n },\r\n };\r\n}\r\n\r\nfunction resizeShelf(\r\n view: EditorView,\r\n container: HTMLElement,\r\n img: HTMLImageElement,\r\n onInit: () => void,\r\n onWidthChanged: () => void,\r\n onHeightChanged: () => void,\r\n onUnitsChanged: () => void,\r\n onEditImage: () => void,\r\n uiImages: EditorUIImages,\r\n translateText: (text: string) => string,\r\n) {\r\n // create resize shelf\r\n const shelf = createPopup(view, []);\r\n\r\n // add the shelf to the editor container (so we don't mutate the editor dom)\r\n const editorContainer = view.dom.parentNode as HTMLElement;\r\n editorContainer.appendChild(shelf);\r\n\r\n // update shelf absolute position to make sure it's visible\r\n const updatePosition = () => {\r\n const kShelfRequiredSize = 333;\r\n const editorBox = editorContainer.getBoundingClientRect();\r\n const imageBox = container.getBoundingClientRect();\r\n shelf.style.top = imageBox.top - editorBox.top + imageBox.height + 6 + 'px';\r\n const positionLeft = imageBox.left + kShelfRequiredSize < editorBox.right;\r\n if (positionLeft) {\r\n shelf.style.right = '';\r\n shelf.style.left = imageBox.left - editorBox.left + 'px';\r\n } else {\r\n shelf.style.left = '';\r\n shelf.style.right = editorBox.right - imageBox.right + 'px';\r\n }\r\n };\r\n\r\n // detect when the editing root note scrolls and update the position\r\n const editingScrollContainerEl = editingRootScrollContainerElement(view);\r\n if (editingScrollContainerEl) {\r\n editingScrollContainerEl.addEventListener('scroll', updatePosition);\r\n }\r\n\r\n // update position every 50ms (cleanup drag/drop copy/paste mispositioning)\r\n const positionTimer = window.setInterval(updatePosition, 50);\r\n\r\n // main panel that holds the controls\r\n const panel = createHorizontalPanel();\r\n shelf.append(panel);\r\n const addToPanel = (widget: HTMLElement, paddingRight: number) => {\r\n addHorizontalPanelCell(panel, widget);\r\n if (paddingRight) {\r\n const paddingSpan = window.document.createElement('span');\r\n paddingSpan.style.width = paddingRight + kPixelUnit;\r\n addHorizontalPanelCell(panel, paddingSpan);\r\n }\r\n };\r\n\r\n // width\r\n const inputClasses = ['pm-text-color', 'pm-background-color'];\r\n const wLabel = createInputLabel('w:');\r\n addToPanel(wLabel, 4);\r\n const wInput = createTextInput(5, inputClasses);\r\n wInput.onchange = onWidthChanged;\r\n addToPanel(wInput, 8);\r\n\r\n // height\r\n const kHeightWidth = '38px';\r\n const hLabel = createInputLabel('h:');\r\n addToPanel(hLabel, 4);\r\n const hInput = createTextInput(5, inputClasses, { width: kHeightWidth });\r\n hInput.onchange = onHeightChanged;\r\n addToPanel(hInput, 0);\r\n const hAutoLabel = createInputLabel('(auto)', ['pm-light-text-color'], { width: kHeightWidth });\r\n addToPanel(hAutoLabel, 10);\r\n\r\n // units\r\n const unitsSelect = createSelectInput(kValidUnits, inputClasses);\r\n unitsSelect.onchange = () => {\r\n // drive focus to width and back to prevent wierd selection change\r\n // detection condition that causes PM to re-render the node the\r\n // next time we resize it\r\n wInput.focus();\r\n unitsSelect.focus();\r\n\r\n // manage UI\r\n manageUnitsUI();\r\n\r\n // notify client\r\n onUnitsChanged();\r\n };\r\n addToPanel(unitsSelect, 12);\r\n\r\n // lock ratio\r\n const checkboxWrapper = window.document.createElement('div');\r\n const lockCheckbox = createCheckboxInput();\r\n lockCheckbox.checked = true;\r\n checkboxWrapper.append(lockCheckbox);\r\n addToPanel(checkboxWrapper, 4);\r\n const lockLabel = createInputLabel(translateText('Lock ratio'));\r\n addToPanel(lockLabel, 20);\r\n\r\n // edit button\r\n const editImage = createImageButton(\r\n uiImages.properties!,\r\n ['pm-image-button-edit-properties'],\r\n translateText('Edit Attributes'),\r\n );\r\n editImage.onclick = onEditImage;\r\n addHorizontalPanelCell(panel, editImage);\r\n\r\n // run onInit (wait for image to load if necessary)\r\n if (img.complete) {\r\n window.setTimeout(onInit, 0);\r\n } else {\r\n img.onload = onInit;\r\n }\r\n\r\n // function used to manage units ui (percent vs. non-percent)\r\n const manageUnitsUI = () => {\r\n const percentSizing = unitsSelect.value === kPercentUnit;\r\n\r\n if (percentSizing) {\r\n lockCheckbox.checked = true;\r\n lockCheckbox.disabled = true;\r\n } else {\r\n lockCheckbox.disabled = false;\r\n }\r\n\r\n hInput.style.display = percentSizing ? 'none' : '';\r\n hAutoLabel.style.display = percentSizing ? '' : 'none';\r\n };\r\n manageUnitsUI();\r\n\r\n // helper function to get a dimension (returns null if input not currently valid)\r\n const getDim = (input: HTMLInputElement) => {\r\n const value = parseFloat(input.value);\r\n if (isNaN(value)) {\r\n return null;\r\n }\r\n if (value > 0) {\r\n return value;\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n const setWidth = (width: number) => {\r\n wInput.value = roundUnit(width, unitsSelect.value);\r\n };\r\n const setHeight = (height: number) => {\r\n hInput.value = roundUnit(height, unitsSelect.value);\r\n };\r\n\r\n return {\r\n // shelf element\r\n el: shelf,\r\n\r\n // sync the shelf props to the current size/units of the image\r\n // we don't sync to the node b/c we want to benefit from automatic\r\n // unit handling in the conversion to the DOM\r\n sync: () => {\r\n const size = shelfSizeFromImage(img);\r\n unitsSelect.value = size.unit;\r\n setWidth(size.width);\r\n setHeight(size.height);\r\n\r\n // manage units ui\r\n manageUnitsUI();\r\n\r\n // ensure we are positioned correctly (not offscreen, wide enough, etc.)\r\n updatePosition();\r\n },\r\n\r\n position: () => {\r\n updatePosition();\r\n },\r\n\r\n remove: () => {\r\n if (editingScrollContainerEl) {\r\n editingScrollContainerEl.removeEventListener('scroll', updatePosition);\r\n }\r\n clearInterval(positionTimer);\r\n shelf.remove();\r\n },\r\n\r\n props: {\r\n width: () => getDim(wInput) || shelfSizeFromImage(img).width,\r\n setWidth,\r\n height: () => getDim(hInput) || shelfSizeFromImage(img).height,\r\n setHeight,\r\n units: () => unitsSelect.value,\r\n setUnits: (units: string) => (unitsSelect.value = units),\r\n lockRatio: () => lockCheckbox.checked,\r\n setLockRatio: (lock: boolean) => {\r\n if (!lockCheckbox.disabled) {\r\n lockCheckbox.checked = lock;\r\n }\r\n },\r\n },\r\n };\r\n}\r\n\r\nfunction resizeHandle(\r\n img: HTMLImageElement,\r\n imageNode: () => NodeWithPos,\r\n container: HTMLElement,\r\n imgContainerWidth: () => number,\r\n lockRatio: () => boolean,\r\n units: () => string,\r\n onSizing: () => void,\r\n onSizingComplete: () => void,\r\n) {\r\n const handle = document.createElement('span');\r\n handle.contentEditable = 'false';\r\n handle.classList.add('pm-image-resize-handle', 'pm-background-color', 'pm-selected-node-border-color');\r\n handle.style.position = 'absolute';\r\n handle.style.bottom = '-6px';\r\n handle.style.right = '-6px';\r\n handle.style.cursor = 'nwse-resize';\r\n\r\n const havePointerEvents = !!document.body.setPointerCapture;\r\n\r\n const onPointerDown = (ev: MouseEvent) => {\r\n ev.preventDefault();\r\n\r\n const startWidth = img.offsetWidth;\r\n const startHeight = img.offsetHeight;\r\n\r\n const startX = ev.pageX;\r\n const startY = ev.pageY;\r\n\r\n const containerWidth = imgContainerWidth();\r\n\r\n const onPointerMove = (e: MouseEvent) => {\r\n // detect pointer movement\r\n const movedX = e.pageX - startX;\r\n const movedY = e.pageY - startY;\r\n\r\n let width;\r\n let height;\r\n if (lockRatio()) {\r\n if (movedX >= movedY) {\r\n width = startWidth + movedX;\r\n height = startHeight + movedX * (startHeight / startWidth);\r\n } else {\r\n height = startHeight + movedY;\r\n width = startWidth + movedY * (startWidth / startHeight);\r\n }\r\n } else {\r\n width = startWidth + movedX;\r\n height = startHeight + movedY;\r\n }\r\n\r\n // determine the new width in units. If it's percent and > 100 then clip\r\n const widthInUnits = pixelsToUnit(width, units(), containerWidth);\r\n if (hasPercentWidth(units()) && widthInUnits > 100) {\r\n width = containerWidth;\r\n height = width * (startHeight / startWidth);\r\n }\r\n\r\n // set margins for any alignment we have\r\n const align = pandocAttrGetKeyvalue(imageNode().node.attrs, kFigAlignAttrib);\r\n if (align) {\r\n setMarginsForAlignment(container, align, width, containerWidth);\r\n }\r\n\r\n img.style.width = width + kPixelUnit;\r\n img.setAttribute(kDataWidth, pixelsToUnit(width, units(), containerWidth) + units());\r\n img.style.height = height + kPixelUnit;\r\n img.setAttribute(kDataHeight, pixelsToUnit(height, units(), containerWidth) + units());\r\n\r\n onSizing();\r\n };\r\n\r\n const onPointerUp = (e: MouseEvent) => {\r\n e.preventDefault();\r\n\r\n // stop listening to events\r\n if (havePointerEvents) {\r\n handle.releasePointerCapture((e as PointerEvent).pointerId);\r\n handle.removeEventListener('pointermove', onPointerMove);\r\n handle.removeEventListener('pointerup', onPointerUp);\r\n } else {\r\n document.removeEventListener('mousemove', onPointerMove);\r\n document.removeEventListener('mouseup', onPointerUp);\r\n }\r\n\r\n // update image size\r\n onSizingComplete();\r\n };\r\n\r\n if (havePointerEvents) {\r\n handle.setPointerCapture((ev as PointerEvent).pointerId);\r\n handle.addEventListener('pointermove', onPointerMove);\r\n handle.addEventListener('pointerup', onPointerUp);\r\n } else {\r\n document.addEventListener('mousemove', onPointerMove);\r\n document.addEventListener('mouseup', onPointerUp);\r\n }\r\n };\r\n\r\n if (havePointerEvents) {\r\n handle.addEventListener('pointerdown', onPointerDown);\r\n } else {\r\n handle.addEventListener('mousedown', onPointerDown);\r\n }\r\n\r\n return handle;\r\n}\r\n\r\n// derive the shelf size attributes from the image. takes advantage of any data-width\r\n// or data-height attributes, then falls back to actual offsetWidth/offsetHeight\r\n// as necessary\r\nfunction shelfSizeFromImage(img: HTMLImageElement) {\r\n // get attributes\r\n const width = img.getAttribute(kDataWidth);\r\n const height = img.getAttribute(kDataHeight);\r\n\r\n // if there is no width and no height, then use naturalWidth/naturalHeight\r\n if (!width && !height) {\r\n return {\r\n width: img.naturalWidth || img.offsetWidth,\r\n height: img.naturalHeight || img.offsetHeight,\r\n unit: kPixelUnit,\r\n };\r\n\r\n // read units\r\n } else {\r\n let widthWithUnit = imageSizePropWithUnit(width);\r\n let heightWithUnit = imageSizePropWithUnit(height);\r\n\r\n if (!widthWithUnit) {\r\n widthWithUnit = {\r\n size: heightWithUnit!.size * (img.offsetWidth / img.offsetHeight),\r\n unit: heightWithUnit!.unit,\r\n };\r\n }\r\n\r\n if (!heightWithUnit) {\r\n heightWithUnit = {\r\n size: widthWithUnit.size * (img.offsetHeight / img.offsetWidth),\r\n unit: widthWithUnit.unit,\r\n };\r\n }\r\n\r\n return {\r\n width: widthWithUnit.size,\r\n height: heightWithUnit.size,\r\n unit: widthWithUnit.unit,\r\n };\r\n }\r\n}\r\n\r\nfunction updateImageNodeSize(\r\n view: EditorView,\r\n image: NodeWithPos,\r\n img: HTMLImageElement,\r\n imgContainerWidth: () => number,\r\n width: number,\r\n height: number,\r\n unit: string,\r\n) {\r\n // don't write pixels explicitly\r\n unit = unit === kPixelUnit ? '' : unit;\r\n\r\n // edit width & height in keyvalue\r\n let keyvalue = extractSizeStyles(image.node.attrs.keyvalue as Array<[string, string]>)!;\r\n keyvalue = keyvalue.filter(value => ![kWidthAttrib, kHeightAttrib].includes(value[0]));\r\n keyvalue.push([kWidthAttrib, width + unit]);\r\n const dims = imageDimensionsFromImg(img, imgContainerWidth());\r\n if (!hasPercentWidth(width + unit) && !isNaturalAspectRatio(width, height, dims, false)) {\r\n keyvalue.push([kHeightAttrib, height + unit]);\r\n }\r\n\r\n // create transaction\r\n const tr = view.state.tr;\r\n\r\n // set new attributes\r\n tr.setNodeMarkup(image.pos, image.node.type, { ...image.node.attrs, keyvalue });\r\n\r\n // restore node selection if our tr.setNodeMarkup blew away the selection\r\n const prevState = view.state;\r\n if (prevState.selection instanceof NodeSelection && prevState.selection.from === image.pos) {\r\n tr.setSelection(NodeSelection.create(tr.doc, image.pos));\r\n }\r\n\r\n // dispatch transaction\r\n view.dispatch(tr);\r\n}\r\n\r\n// update the DOM representation of the image. extracts size-oriented attributes from the node and\r\n// applies them to the img element (alignment oriented attributes are applied to the figure elmenet)\r\nexport function updateImageViewSize(\r\n node: ProsemirrorNode,\r\n img: HTMLImageElement,\r\n figure: HTMLElement | null,\r\n containerWidth: number,\r\n) {\r\n // reset attributes (they'll be set to new values below)\r\n img.removeAttribute(kStyleAttrib);\r\n img.removeAttribute(kDataWidth);\r\n img.removeAttribute(kDataHeight);\r\n\r\n // reset figure styles (only reset styles that we explicitly set below, b/c some\r\n // styles may have been set by e.g. the attachResizeUI function)\r\n if (figure) {\r\n figure.style.cssFloat = '';\r\n figure.style.verticalAlign = '';\r\n figure.style.margin = '';\r\n figure.style.marginTop = '';\r\n figure.style.marginBottom = '';\r\n figure.style.marginRight = '';\r\n figure.style.marginLeft = '';\r\n figure.style.padding = '';\r\n figure.style.paddingTop = '';\r\n figure.style.paddingBottom = '';\r\n figure.style.paddingRight = '';\r\n figure.style.paddingLeft = '';\r\n figure.style.display = kDefaultContainerDisplay;\r\n }\r\n\r\n // apply keyvalue attribute to image\r\n if (node.attrs.keyvalue) {\r\n // factor width & height out of style\r\n const keyvalue = extractSizeStyles(node.attrs.keyvalue);\r\n\r\n // inspect all keys and process width, height, and style\r\n (keyvalue as Array<[string, string]>).forEach(attr => {\r\n // alias key and value\r\n const key = attr[0];\r\n let value = attr[1];\r\n\r\n // set align oriented styles on figure parent\r\n if (key === kStyleAttrib) {\r\n if (figure) {\r\n const liftStyle = (attrib: string, val: string) => figure.style.setProperty(attrib, val);\r\n value = removeStyleAttrib(value, 'float', liftStyle);\r\n value = removeStyleAttrib(value, 'vertical-align', liftStyle);\r\n value = removeStyleAttrib(value, 'padding(?:[\\\\w\\\\-])*', liftStyle);\r\n removeStyleAttrib(value, 'display', liftStyle); // leave display for lifting by image\r\n }\r\n\r\n // apply selected other styles to the image view (we don't just forward the entire\r\n // style attribute b/c that would interfere with setting of style props in the\r\n // width and height cases below). here we should enumerate all styles we think\r\n // users might want to see in the editor\r\n const liftImgStyle = (attrib: string, val: string) => img.style.setProperty(attrib, val);\r\n value = removeStyleAttrib(value, 'border(?:[\\\\w\\\\-])*', liftImgStyle);\r\n value = removeStyleAttrib(value, 'margin(?:[\\\\w\\\\-])*', liftImgStyle);\r\n value = removeStyleAttrib(value, 'display', liftImgStyle);\r\n } else if (key === kWidthAttrib) {\r\n // see if this is a unit we can edit\r\n const widthProp = imageSizePropWithUnit(value);\r\n if (widthProp) {\r\n widthProp.unit = widthProp.unit || kPixelUnit;\r\n if (isValidImageSizeUnit(widthProp.unit)) {\r\n img.setAttribute(kDataWidth, widthProp.size + widthProp.unit);\r\n img.style.width = unitToPixels(widthProp.size, widthProp.unit, containerWidth) + kPixelUnit;\r\n }\r\n }\r\n\r\n // if not, just pass it straight through (editing UI will be disabled)\r\n if (!img.hasAttribute(kDataWidth)) {\r\n img.style.width = value;\r\n }\r\n } else if (key === kHeightAttrib) {\r\n // see if this is a unit we can edit\r\n const heightProp = imageSizePropWithUnit(value);\r\n if (heightProp) {\r\n heightProp.unit = heightProp.unit || kPixelUnit;\r\n if (isValidImageSizeUnit(heightProp.unit)) {\r\n img.setAttribute(kDataHeight, heightProp.size + heightProp.unit);\r\n img.style.height = unitToPixels(heightProp.size, heightProp.unit, containerWidth) + kPixelUnit;\r\n }\r\n }\r\n\r\n // if not, just pass it straight through (editing UI will be disabled)\r\n if (!img.hasAttribute(kDataHeight)) {\r\n img.style.height = value;\r\n }\r\n\r\n // use of legacy 'align' attribute is common for some pandoc users\r\n // so we convert it to the requisite CSS and apply it to the figure container\r\n } else if (figure && key === kAlignAttrib) {\r\n switch (value) {\r\n case 'left':\r\n case 'right':\r\n figure.style.cssFloat = value;\r\n break;\r\n case 'top':\r\n case 'bottom':\r\n case 'middle':\r\n figure.style.verticalAlign = value;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n // if we have a fig-align value then determine the displayed width and\r\n // apply margins as required to the figure\r\n if (figure) {\r\n const align = pandocAttrGetKeyvalue(node.attrs, kFigAlignAttrib);\r\n if (align && (align !== \"default\")) {\r\n let width: number | null = null;\r\n const widthProp = imageSizePropWithUnit(img.style.width);\r\n if (widthProp) {\r\n width = widthProp.size;\r\n } else {\r\n const dims = imageDimensionsFromImg(img, containerWidth);\r\n width = dims.naturalWidth;\r\n }\r\n if (width !== null) {\r\n setMarginsForAlignment(figure, align, width, containerWidth);\r\n }\r\n }\r\n }\r\n \r\n // if width is a percentage, then displayed height needs to be 'auto'\r\n if (hasPercentWidth(img.getAttribute(kDataWidth))) {\r\n img.style.height = 'auto';\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction setMarginsForAlignment(el: HTMLElement, align: string, width: number, containerWidth: number) {\r\n const marginWidth = containerWidth - width;\r\n if (marginWidth > 0) {\r\n if (align === \"left\") {\r\n el.style.marginRight = marginWidth + kPixelUnit;\r\n } else if (align === \"right\") {\r\n el.style.marginLeft = marginWidth + kPixelUnit;\r\n } else if (align === \"center\") {\r\n el.style.marginLeft = (marginWidth/2) + kPixelUnit;\r\n el.style.marginRight = el.style.marginLeft ;\r\n }\r\n } else {\r\n el.style.marginLeft = \"\";\r\n el.style.marginRight = \"\" ;\r\n }\r\n}","/*\r\n * image-view.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { NodeView, EditorView } from 'prosemirror-view';\r\nimport { NodeSelection, PluginKey, Plugin } from 'prosemirror-state';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { ImageType } from '../../api/image';\r\nimport { PandocExtensions, imageAttributesAvailable } from '../../api/pandoc';\r\nimport { isElementVisible } from '../../api/dom';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { ResizeEvent } from '../../api/event-types';\r\nimport { EditorFormat } from '../../api/format';\r\nimport { mapResourceToURL } from '../../api/resource';\r\n\r\nimport { imageDialog } from './image-dialog';\r\nimport {\r\n attachResizeUI,\r\n initResizeContainer,\r\n ResizeUI,\r\n isResizeUICompatible,\r\n updateImageViewSize,\r\n} from './image-resize';\r\nimport { imageDimensionsFromImg, imageContainerWidth } from './image-util';\r\n\r\nimport './image-styles.css';\r\n\r\nexport function imageNodeViewPlugins(\r\n type: string,\r\n ui: EditorUI,\r\n format: EditorFormat,\r\n events: EditorEvents,\r\n pandocExtensions: PandocExtensions,\r\n): Plugin[] {\r\n return [\r\n new Plugin({\r\n key: new PluginKey(`${type}-node-view`),\r\n props: {\r\n nodeViews: {\r\n [type]: (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => {\r\n return new ImageNodeView(node, view, getPos as () => number, ui, format, events, pandocExtensions);\r\n },\r\n },\r\n },\r\n }),\r\n ];\r\n}\r\n\r\nclass ImageNodeView implements NodeView {\r\n // ProseMirror context\r\n private readonly type: ImageType;\r\n private node: ProsemirrorNode;\r\n private readonly view: EditorView;\r\n private readonly getPos: () => number;\r\n private readonly editorUI: EditorUI;\r\n private readonly editorFormat: EditorFormat;\r\n private readonly imageAttributes: boolean;\r\n private readonly implicitFigures: boolean;\r\n\r\n // DOM elements\r\n public readonly dom: HTMLElement;\r\n private readonly img: HTMLImageElement;\r\n public readonly contentDOM: HTMLElement | null;\r\n private readonly figcaption: HTMLElement | null;\r\n\r\n // transient state\r\n private imgBroken: boolean;\r\n\r\n // things to clean up\r\n private resizeUI: ResizeUI | null;\r\n private sizeOnVisibleTimer?: number;\r\n private unregisterOnResize: VoidFunction;\r\n private unregisterWatchImg: VoidFunction | null = null;\r\n\r\n constructor(\r\n node: ProsemirrorNode,\r\n view: EditorView,\r\n getPos: () => number,\r\n editorUI: EditorUI,\r\n editorFormat: EditorFormat,\r\n editorEvents: EditorEvents,\r\n pandocExtensions: PandocExtensions,\r\n ) {\r\n // determine type\r\n const schema = node.type.schema;\r\n this.type = node.type === schema.nodes.image ? ImageType.Image : ImageType.Figure;\r\n\r\n // save references\r\n this.node = node;\r\n this.view = view;\r\n this.getPos = getPos;\r\n this.imageAttributes = imageAttributesAvailable(pandocExtensions);\r\n this.implicitFigures = pandocExtensions.implicit_figures;\r\n this.editorUI = editorUI;\r\n this.editorFormat = editorFormat;\r\n this.resizeUI = null;\r\n this.imgBroken = false;\r\n\r\n // set node selection on click\r\n const selectOnClick = () => {\r\n const tr = view.state.tr;\r\n tr.setSelection(NodeSelection.create(tr.doc, getPos()));\r\n view.dispatch(tr);\r\n };\r\n\r\n // show image dialog on double-click\r\n const editOnDblClick = () => {\r\n selectOnClick();\r\n imageDialog(\r\n this.node,\r\n imageDimensionsFromImg(this.img, this.containerWidth()),\r\n this.node.type,\r\n this.view,\r\n editorUI,\r\n editorFormat,\r\n this.imageAttributes,\r\n );\r\n };\r\n\r\n // stop propagation from child elmeents that need to handle click\r\n // (e.g. figcaption element)\r\n const noPropagateClick = (ev: MouseEvent) => {\r\n ev.stopPropagation();\r\n };\r\n\r\n // create the image (used by both image and figure node types)\r\n this.img = document.createElement('img');\r\n this.img.classList.add('pm-img');\r\n this.img.onload = () => {\r\n this.imgBroken = false;\r\n };\r\n this.img.onerror = () => {\r\n this.imgBroken = true;\r\n };\r\n this.img.onclick = selectOnClick;\r\n this.img.ondblclick = editOnDblClick;\r\n\r\n // wrap in figure if appropriate\r\n if (this.type === ImageType.Figure) {\r\n // create figure wrapper\r\n this.dom = document.createElement('figure');\r\n this.dom.classList.add('pm-figure');\r\n\r\n // create container\r\n const container = document.createElement('div');\r\n container.contentEditable = 'false';\r\n this.dom.append(container);\r\n\r\n // initialize the image\r\n container.append(this.img);\r\n this.updateImg();\r\n\r\n // create the caption and make it our contentDOM\r\n this.figcaption = document.createElement('figcaption');\r\n this.figcaption.classList.add('pm-figcaption');\r\n this.figcaption.classList.add('pm-node-caption');\r\n this.figcaption.onclick = noPropagateClick;\r\n this.figcaption.ondblclick = noPropagateClick;\r\n this.contentDOM = this.figcaption;\r\n this.dom.append(this.figcaption);\r\n\r\n // manage visibility\r\n this.manageFigcaption();\r\n\r\n // standard inline image\r\n } else {\r\n this.dom = document.createElement('span');\r\n\r\n this.dom.append(this.img);\r\n this.updateImg();\r\n\r\n this.contentDOM = null;\r\n this.figcaption = null;\r\n }\r\n\r\n // prevent drag/drop if the event doesn't target the image\r\n this.dom.ondragstart = (event: DragEvent) => {\r\n if (event.target !== this.img) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n };\r\n\r\n // init resize if we support imageAttributes\r\n if (this.imageAttributes) {\r\n initResizeContainer(this.dom);\r\n }\r\n\r\n // update image size when the image first becomes visible\r\n this.updateSizeOnVisible();\r\n\r\n // update image size whenever the container is resized\r\n this.unregisterOnResize = editorEvents.subscribe(ResizeEvent, () => {\r\n this.updateImageSize();\r\n });\r\n }\r\n\r\n public destroy() {\r\n if (this.unregisterWatchImg) {\r\n this.unregisterWatchImg();\r\n }\r\n this.unregisterOnResize();\r\n this.clearSizeOnVisibleTimer();\r\n this.detachResizeUI();\r\n }\r\n\r\n public selectNode() {\r\n // mirror default implementation\r\n this.dom.classList.add('ProseMirror-selectednode');\r\n if (this.contentDOM || !this.node.type.spec.draggable) {\r\n this.dom.draggable = true;\r\n }\r\n\r\n // manage figcaption\r\n this.manageFigcaption();\r\n\r\n // attach resize UI\r\n this.attachResizeUI();\r\n }\r\n\r\n public deselectNode() {\r\n // mirror default implementation\r\n this.dom.classList.remove('ProseMirror-selectednode');\r\n if (this.contentDOM || !this.node.type.spec.draggable) {\r\n this.dom.draggable = false;\r\n }\r\n\r\n // remove resize UI\r\n this.detachResizeUI();\r\n }\r\n\r\n // update image with latest node/attributes\r\n public update(node: ProsemirrorNode) {\r\n // boilerplate type check\r\n if (node.type !== this.node.type) {\r\n return false;\r\n }\r\n\r\n // set new node and update the image\r\n this.node = node;\r\n this.updateImg().then(() => {\r\n // if we already have resize UI then either update it\r\n // or detach it (if e.g. the units are no longer compatible)\r\n if (this.resizeUI) {\r\n if (isResizeUICompatible(this.img!)) {\r\n this.resizeUI.update();\r\n } else {\r\n this.resizeUI.detach();\r\n this.resizeUI = null;\r\n }\r\n // attach if the node is selected\r\n } else if (this.isNodeSelected()) {\r\n this.attachResizeUI();\r\n }\r\n });\r\n\r\n \r\n return true;\r\n }\r\n\r\n // ignore mutations outside of the content dom so sizing actions don't cause PM re-render\r\n public ignoreMutation(mutation: MutationRecord | { type: 'selection'; target: Element }) {\r\n return !this.contentDOM || !this.contentDOM.contains(mutation.target);\r\n }\r\n\r\n // map node to img tag\r\n private async updateImg() {\r\n\r\n // unsubscribe from any existing resource watcher\r\n if (this.unregisterWatchImg) {\r\n this.unregisterWatchImg();\r\n }\r\n\r\n // if the image has a protocol then just set it\r\n const src = this.node.attrs.src;\r\n if (src.match(/^\\w+:\\/\\//)) {\r\n this.img.src = src;\r\n } else {\r\n // otherwise map to path reachable within current editing frame\r\n // (and watch for future changes)\r\n const decodedSrc = decodeURI(src);\r\n this.img.src = await mapResourceToURL(this.editorUI.context, decodedSrc);\r\n this.unregisterWatchImg = this.editorUI.context.watchResource(decodedSrc, async () => {\r\n this.img.src = await mapResourceToURL(this.editorUI.context, decodedSrc) + \"?\" + new Date().getTime();\r\n });\r\n }\r\n\r\n // title/tooltip\r\n this.img.title = '';\r\n if (this.node.attrs.title) {\r\n this.img.title = this.node.attrs.title;\r\n }\r\n\r\n // ensure alt attribute so that we get default browser broken image treatment\r\n this.img.alt = this.node.textContent || this.node.attrs.src;\r\n\r\n // manage caption visibility\r\n this.manageFigcaption();\r\n\r\n // update size\r\n this.updateImageSize();\r\n }\r\n\r\n private updateImageSize() {\r\n const containerWidth = this.img.isConnected ? this.containerWidth() : 0;\r\n updateImageViewSize(this.node, this.img, this.isFigure() ? this.dom : null, containerWidth);\r\n }\r\n\r\n private updateSizeOnVisible() {\r\n const updateSizeOnVisible = () => {\r\n if (isElementVisible(this.img)) {\r\n this.updateImageSize();\r\n this.clearSizeOnVisibleTimer();\r\n }\r\n };\r\n this.sizeOnVisibleTimer = window.setInterval(updateSizeOnVisible, 200);\r\n }\r\n\r\n private clearSizeOnVisibleTimer() {\r\n if (this.sizeOnVisibleTimer) {\r\n clearInterval(this.sizeOnVisibleTimer);\r\n this.sizeOnVisibleTimer = undefined;\r\n }\r\n }\r\n\r\n // attach resize UI if appropriate\r\n private attachResizeUI() {\r\n if (this.imageAttributes && !this.imgBroken && isResizeUICompatible(this.img!)) {\r\n const imageNode = () => ({ pos: this.getPos(), node: this.node });\r\n const imgContainerWidth = () => this.containerWidth();\r\n this.resizeUI = attachResizeUI(imageNode, this.dom, this.img!, imgContainerWidth, \r\n this.view, this.editorUI, this.editorFormat);\r\n }\r\n }\r\n\r\n private detachResizeUI() {\r\n if (this.resizeUI) {\r\n this.resizeUI.detach();\r\n this.resizeUI = null;\r\n }\r\n }\r\n\r\n private isNodeSelected() {\r\n return this.dom.classList.contains('ProseMirror-selectednode');\r\n }\r\n\r\n private isFigure() {\r\n return this.type === ImageType.Figure;\r\n }\r\n\r\n private containerWidth() {\r\n return imageContainerWidth(this.getPos(), this.view);\r\n }\r\n\r\n private manageFigcaption() {\r\n // hide the figcaption if appropriate\r\n const noImplicitFigures = !this.implicitFigures;\r\n const emptyFigcaption = this.figcaption && this.node.textContent.length === 0;\r\n const selection = this.view.state.selection;\r\n const selectionInFigcaption = selection.empty && selection.$head.node() === this.node;\r\n const hide = noImplicitFigures || (emptyFigcaption && !selectionInFigcaption);\r\n\r\n // hide or show if we have a figcaption\r\n if (this.figcaption) {\r\n if (noImplicitFigures) {\r\n this.figcaption.style.display = 'none';\r\n this.figcaption.contentEditable = 'false';\r\n } else {\r\n this.figcaption.contentEditable = hide ? 'false' : 'true';\r\n this.figcaption.style.height = hide ? '0' : '';\r\n this.figcaption.style.minHeight = hide ? '0' : '';\r\n this.figcaption.style.margin = hide ? '0' : '';\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * figure-keys.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { EditorState, Transaction, NodeSelection, Selection, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport {\r\n findParentNodeOfTypeClosestToPos,\r\n setTextSelection,\r\n ContentNodeWithPos,\r\n findParentNodeOfType,\r\n findParentNodeClosestToPos,\r\n NodeWithPos,\r\n} from 'prosemirror-utils';\r\n\r\nimport { BaseKey } from '../../api/basekeys';\r\nimport { exitNode } from '../../api/command';\r\nimport { verticalArrowCanAdvanceWithinTextBlock } from '../../api/cursor';\r\nimport { findSelectedNodeOfType } from '../../api/node';\r\n\r\nexport function figureKeys(schema: Schema) {\r\n return [\r\n { key: BaseKey.Enter, command: exitNode(schema.nodes.figure, -1, false) },\r\n { key: BaseKey.Backspace, command: backspaceHandler() },\r\n { key: BaseKey.ArrowLeft, command: figureArrowHandler('left') },\r\n { key: BaseKey.ArrowRight, command: figureArrowHandler('right') },\r\n { key: BaseKey.ArrowUp, command: figureArrowHandler('up') },\r\n { key: BaseKey.ArrowDown, command: figureArrowHandler('down') },\r\n ];\r\n}\r\n\r\nfunction backspaceHandler() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // must be an empty selection\r\n const selection = state.selection;\r\n if (!selection.empty) {\r\n return false;\r\n }\r\n\r\n // must be a selection at the beginning of it's parent\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n const { parentOffset } = $head;\r\n if (parentOffset !== 0) {\r\n return false;\r\n }\r\n\r\n // two scenarios: backspace within empty caption or backspace right after figure\r\n const isWithinEmptyCaption = $head.parent.type === schema.nodes.figure && $head.parent.childCount === 0;\r\n if (isWithinEmptyCaption) {\r\n if (dispatch) {\r\n // set a node selection for the figure\r\n const tr = state.tr;\r\n tr.setSelection(NodeSelection.create(tr.doc, $head.pos - 1));\r\n dispatch(tr);\r\n }\r\n return true;\r\n } else {\r\n // check if the previous node is a figure\r\n const parent = $head.node($head.depth - 1);\r\n const parentIndex = $head.index($head.depth - 1);\r\n if (parentIndex > 0) {\r\n const previousNode = parent.child(parentIndex - 1);\r\n if (previousNode.type === schema.nodes.figure) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n\r\n // if the current node is and empty textblock then remove it\r\n if ($head.node().childCount === 0) {\r\n const parentTextBlock = findParentNodeClosestToPos($head, node => node.isTextblock);\r\n if (parentTextBlock) {\r\n tr.deleteRange(parentTextBlock.pos, parentTextBlock.pos + parentTextBlock.node.nodeSize);\r\n }\r\n }\r\n\r\n const nodePos = $head.pos - previousNode.nodeSize - 1;\r\n const figureSelection = NodeSelection.create(tr.doc, nodePos);\r\n tr.setSelection(figureSelection);\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}\r\n\r\nfunction figureArrowHandler(dir: 'up' | 'down' | 'left' | 'right') {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // select figure\r\n const selectFigure = (figure: ContentNodeWithPos) => {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const figureSelection = NodeSelection.create(state.doc, figure.pos);\r\n tr.setSelection(figureSelection).scrollIntoView();\r\n dispatch(tr);\r\n }\r\n };\r\n\r\n // select figure caption\r\n const selectFigureCaption = (figure: NodeWithPos, atEnd = false) => {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n setTextSelection(figure.pos + (atEnd ? figure.node.textContent.length + 1 : 0), 1)(tr);\r\n dispatch(tr);\r\n }\r\n };\r\n\r\n // alias schema and selection\r\n const { schema, selection } = state;\r\n\r\n // down/right arrow for node selection w/ caption drives cursor into caption\r\n if (\r\n (dir === 'down' || dir === 'right') &&\r\n selection instanceof NodeSelection &&\r\n selection.node.type === schema.nodes.figure\r\n ) {\r\n const figure = findSelectedNodeOfType(schema.nodes.figure,selection);\r\n if (figure && figure.node.childCount > 0) {\r\n selectFigureCaption(figure);\r\n return true;\r\n }\r\n }\r\n\r\n // up/left arrow for selection in caption takes us back to the node selection\r\n if (\r\n (dir === 'up' || dir === 'left') &&\r\n selection instanceof TextSelection &&\r\n !!findParentNodeOfType(schema.nodes.figure)(selection)\r\n ) {\r\n if (dir === 'up' || (dir === 'left' && selection.$head.parentOffset === 0)) {\r\n const figure = findParentNodeOfType(schema.nodes.figure)(selection);\r\n if (figure) {\r\n selectFigure(figure);\r\n return true;\r\n }\r\n }\r\n\r\n // normal node traversal\r\n } else if (selection.empty && view && view.endOfTextblock(dir)) {\r\n // compute side offset\r\n const side = dir === 'left' || dir === 'up' ? -1 : 1;\r\n\r\n // get selection head\r\n const { $head } = selection;\r\n\r\n // see if this would traverse our type\r\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\r\n if (nextPos.$head) {\r\n const figure = findParentNodeOfTypeClosestToPos(nextPos.$head, schema.nodes.figure);\r\n if (figure) {\r\n // check for e.g. math where you can advance across embedded newlines\r\n if ((dir === 'up' || dir === 'down') && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\r\n return false;\r\n }\r\n // arrowing back into a figure with a caption selects the caption\r\n if (side === -1 && figure.node.childCount > 0) {\r\n selectFigureCaption(figure, dir === 'left');\r\n // otherwise select the figure\r\n } else {\r\n selectFigure(figure);\r\n }\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n // not handled\r\n return false;\r\n };\r\n}\r\n","/*\r\n * figure.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, Fragment, ResolvedPos } from 'prosemirror-model';\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { Transform } from 'prosemirror-transform';\r\n\r\nimport { findChildrenByType, findParentNodeClosestToPos } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { FixupContext } from '../../api/fixup';\r\nimport { isSingleLineHTML } from '../../api/html';\r\nimport { getMarkAttrs } from '../../api/mark';\r\nimport {\r\n PandocToken,\r\n PandocTokenType,\r\n ProsemirrorWriter,\r\n kRawBlockContent,\r\n kRawBlockFormat,\r\n imageAttributesAvailable,\r\n} from '../../api/pandoc';\r\nimport { trTransform } from '../../api/transaction';\r\n\r\nimport {\r\n imageAttrsFromDOM,\r\n imageNodeAttrsSpec,\r\n imageDOMOutputSpec,\r\n imagePandocOutputWriter,\r\n pandocImageHandler,\r\n imageAttrsFromHTML,\r\n imageCommand,\r\n} from './image';\r\nimport { inlineHTMLIsImage } from './image-util';\r\nimport { imageNodeViewPlugins } from './image-view';\r\nimport { figureKeys } from './figure-keys';\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, ui, events, format } = context;\r\n\r\n const imageAttr = imageAttributesAvailable(pandocExtensions);\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'figure',\r\n spec: {\r\n attrs: imageNodeAttrsSpec(true, imageAttr),\r\n content: 'inline*',\r\n group: 'block',\r\n draggable: true,\r\n selectable: true,\r\n defining: true,\r\n parseDOM: [\r\n {\r\n tag: 'figure',\r\n contentElement: 'figcaption',\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n const img = el.querySelector('img');\r\n if (img && img.parentNode === dom) {\r\n return imageAttrsFromDOM(img, imageAttr);\r\n } else {\r\n return {\r\n src: null,\r\n title: null,\r\n };\r\n }\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n return ['figure', imageDOMOutputSpec(node, imageAttr), ['figcaption', { class: 'pm-figcaption' }, 0]];\r\n },\r\n },\r\n pandoc: {\r\n writer: imagePandocOutputWriter(true),\r\n\r\n readers: [\r\n {\r\n token: PandocTokenType.Figure,\r\n handler: (schema: Schema) => {\r\n const imageHandler = pandocImageHandler(true, true)(schema);\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n const kFigureAttributes = 0;\r\n const kFigureContents = 2;\r\n const tokImage: PandocToken | undefined = tok.c[kFigureContents]?.[0]?.c[0];\r\n if (tokImage?.t === PandocTokenType.Image) {\r\n tokImage.c[0][0] = tok.c[kFigureAttributes][0];\r\n imageHandler(writer, tokImage);\r\n }\r\n }\r\n },\r\n },\r\n ],\r\n\r\n // intercept paragraphs with a single image and process them as figures\r\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\r\n // helper to process html image\r\n const handleHTMLImage = (html: string) => {\r\n const attrs = imageAttrsFromHTML(html);\r\n if (attrs) {\r\n writer.addNode(schema.nodes.figure, { ...attrs, raw: true }, []);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n \r\n // unroll figure from paragraph with single image\r\n if (isParaWrappingFigure(tok) && !writerHasProhibitedFigureParent(schema, writer)) {\r\n const handler = pandocImageHandler(true, imageAttr)(schema);\r\n handler(writer, tok.c[0]);\r\n return true;\r\n // unroll figure from html RawBlock with single <img> tag\r\n } else if (isHTMLImageBlock(tok)) {\r\n return handleHTMLImage(tok.c[kRawBlockContent]);\r\n } else {\r\n return false;\r\n }\r\n },\r\n },\r\n\r\n attr_edit: () => ({\r\n type: (schema: Schema) => schema.nodes.figure,\r\n editFn: () => imageCommand(ui, format, imageAttr),\r\n offset: {\r\n top: 2,\r\n right: 0\r\n },\r\n noKeyvalueTags: true,\r\n preferHidden: true\r\n }),\r\n },\r\n ],\r\n\r\n fixups: () => {\r\n return [\r\n (tr: Transaction, fixupContext: FixupContext) => {\r\n if (fixupContext === FixupContext.Load) {\r\n return convertImagesToFigure(tr);\r\n } else {\r\n return tr;\r\n }\r\n },\r\n ];\r\n },\r\n\r\n appendTransaction: (schema: Schema) => {\r\n return [\r\n {\r\n name: 'figure-convert',\r\n nodeFilter: node => node.type === schema.nodes.image,\r\n append: convertImagesToFigure,\r\n },\r\n ];\r\n },\r\n\r\n baseKeys: figureKeys,\r\n\r\n plugins: () => {\r\n return [...imageNodeViewPlugins('figure', ui, format, events, pandocExtensions)];\r\n },\r\n };\r\n};\r\n\r\nexport function posHasProhibitedFigureParent(schema: Schema, $pos: ResolvedPos) {\r\n return prohibitedFigureParents(schema).some(type => {\r\n return !!findParentNodeClosestToPos($pos, node => node.type === type);\r\n });\r\n}\r\n\r\nexport function writerHasProhibitedFigureParent(schema: Schema, writer: ProsemirrorWriter) {\r\n return prohibitedFigureParents(schema).some(writer.isNodeOpen);\r\n}\r\n\r\nfunction prohibitedFigureParents(schema: Schema) {\r\n return [schema.nodes.table_cell, schema.nodes.list_item, schema.nodes.definition_list];\r\n}\r\n\r\nfunction convertImagesToFigure(tr: Transaction) {\r\n return trTransform(tr, imagesToFiguresTransform);\r\n}\r\n\r\nfunction imagesToFiguresTransform(tr: Transform) {\r\n const schema = tr.doc.type.schema;\r\n const images = findChildrenByType(tr.doc, schema.nodes.image);\r\n images.forEach(image => {\r\n // position reflecting steps already taken in this handler\r\n const mappedImagePos = tr.mapping.mapResult(image.pos);\r\n\r\n // process image so long as it wasn't deleted by a previous step\r\n if (!mappedImagePos.deleted) {\r\n // resolve image pos\r\n const imagePos = tr.doc.resolve(mappedImagePos.pos);\r\n\r\n // if it's an image in a standalone paragraph, convert it to a figure\r\n if (\r\n imagePos.parent.type === schema.nodes.paragraph &&\r\n imagePos.parent.childCount === 1 &&\r\n !posHasProhibitedFigureParent(schema, imagePos)\r\n ) {\r\n // figure attributes\r\n let attrs = image.node.attrs;\r\n\r\n // extract linkTo from link mark (if any)\r\n if (schema.marks.link.isInSet(image.node.marks)) {\r\n const linkAttrs = getMarkAttrs(\r\n tr.doc,\r\n { from: mappedImagePos.pos, to: mappedImagePos.pos + image.node.nodeSize },\r\n schema.marks.link,\r\n );\r\n if (linkAttrs && linkAttrs.href) {\r\n attrs = { ...attrs, linkTo: linkAttrs.href };\r\n }\r\n }\r\n\r\n // figure content\r\n const content = attrs.caption ? Fragment.from(schema.text(attrs.caption)) : Fragment.empty;\r\n\r\n // replace image with figure\r\n const figure = schema.nodes.figure.createAndFill(attrs, content);\r\n if (figure) {\r\n tr.replaceRangeWith(mappedImagePos.pos, mappedImagePos.pos + image.node.nodeSize, figure);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction isParaWrappingFigure(tok: PandocToken) {\r\n return isSingleChildParagraph(tok) && tok.c[0].t === PandocTokenType.Image;\r\n}\r\n\r\nfunction isHTMLImageBlock(tok: PandocToken) {\r\n if (tok.t === PandocTokenType.RawBlock) {\r\n const format = tok.c[kRawBlockFormat];\r\n const text = tok.c[kRawBlockContent] as string;\r\n return format === 'html' && isSingleLineHTML(text) && inlineHTMLIsImage(text);\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction isSingleChildParagraph(tok: PandocToken) {\r\n return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1;\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * image-events.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { Plugin, PluginKey } from 'prosemirror-state';\r\n\r\nimport { kImageExtensions } from 'core';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\n\r\nconst kTextUriList = 'text/uri-list';\r\nconst kApplicationQtImage = 'application/x-qt-image';\r\n\r\nconst pluginKey = new PluginKey('image-events');\r\n\r\nexport function imageEventsPlugin(ui: EditorUI) {\r\n return new Plugin({\r\n key: pluginKey,\r\n props: {\r\n handleDOMEvents: {\r\n drop: imageDrop(ui),\r\n },\r\n handlePaste: imagePaste(ui),\r\n },\r\n });\r\n}\r\n\r\nfunction imagePaste(ui: EditorUI) {\r\n return (view: EditorView, event: Event) => {\r\n const clipboardEvent = event as ClipboardEvent;\r\n\r\n if (clipboardEvent.clipboardData) {\r\n\r\n // don't handle office images (we want to use their html representation)\r\n const kTextHtml = \"text/html\";\r\n const kOfficeSchema = \"urn:schemas-microsoft-com:office:office\";\r\n if (clipboardEvent.clipboardData.types.includes(kTextHtml)) {\r\n const html = clipboardEvent.clipboardData.getData(kTextHtml);\r\n if (html.includes(kOfficeSchema)) {\r\n return false;\r\n }\r\n }\r\n \r\n // see if our stock image handling can take care of it\r\n if (handleImageDataTransfer(\r\n event, \r\n clipboardEvent.clipboardData, \r\n view,\r\n view.state.selection.from,\r\n ui)\r\n ) {\r\n return true;\r\n }\r\n\r\n // detect file pastes where there is no payload, in that case check to see\r\n // if there is clipboard data we can get from our context (e.g. from Qt)\r\n else if (clipboardEvent.clipboardData.types.includes(kTextUriList)) {\r\n const uriList = clipboardEvent.clipboardData.getData(kTextUriList);\r\n if (uriList.length === 0) {\r\n ui.context.clipboardUris().then(uris => {\r\n if (uris) {\r\n handleImageUris(view, view.state.selection.from, uris, ui);\r\n }\r\n });\r\n event.preventDefault();\r\n return true;\r\n }\r\n // raw image paste from qt\r\n } else if (clipboardEvent.clipboardData.types.includes(kApplicationQtImage)) {\r\n ui.context.clipboardImage().then(image => {\r\n if (image) {\r\n handleImageUris(view, view.state.selection.from, [image], ui);\r\n }\r\n });\r\n event.preventDefault();\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}\r\n\r\nfunction imageDrop(ui: EditorUI) {\r\n return (view: EditorView, event: Event) => {\r\n // alias to drag event so typescript knows about event.dataTransfer\r\n const dragEvent = event as DragEvent;\r\n\r\n // ensure we have data transfer\r\n if (!dragEvent.dataTransfer) {\r\n return false;\r\n }\r\n\r\n // ensure the drop coordinates map to an editor position\r\n const coordinates = view.posAtCoords({\r\n left: dragEvent.clientX,\r\n top: dragEvent.clientY,\r\n });\r\n if (!coordinates) {\r\n return false;\r\n }\r\n\r\n return handleImageDataTransfer(dragEvent, dragEvent.dataTransfer, view, coordinates.pos, ui);\r\n }\r\n}\r\n\r\n\r\nfunction handleImageDataTransfer(event: Event, dataTransfer: DataTransfer, view: EditorView, pos: number, ui: EditorUI) {\r\n // array of uris\r\n let uris: string[] | null = null;\r\n\r\n // check for files w/ path (vscode provides full path in undocumented 'path' property)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n if (dataTransfer.files?.length && (dataTransfer.files[0] as any).path) {\r\n uris = [];\r\n for (let i=0; i<dataTransfer.files.length; i++) {\r\n const file = dataTransfer.files.item(i) as (File & { path: string } | null);\r\n if (file && file.path) {\r\n uris.push(file.path);\r\n } \r\n }\r\n } else {\r\n // see if this is a drag of uris\r\n const uriList = dataTransfer.getData(kTextUriList);\r\n if (uriList) {\r\n uris = uriList.split('\\r?\\n');\r\n } else {\r\n // see if the ui context has some dropped uris\r\n uris = ui.context.droppedUris();\r\n }\r\n }\r\n \r\n // process uris if we have them\r\n if (uris && handleImageUris(view, pos, uris, ui)) {\r\n event.preventDefault();\r\n return true;\r\n }\r\n \r\n // now look for png file blobs\r\n const files: File[] = [];\r\n if (dataTransfer.files.length) {\r\n for (let i=0; i<dataTransfer.files.length; i++) {\r\n const file = dataTransfer.files.item(i);\r\n if (file && kImageExtensions.some(ext => file.type === `image/${ext}`)) {\r\n files.push(file);\r\n }\r\n }\r\n }\r\n\r\n // if we have at least one then handle\r\n if (files.length) {\r\n if (ui.context.resolveBase64Images) {\r\n Promise.all(files.map(blobToBase64)).then(async (base64Files) => {\r\n const images = await ui.context.resolveBase64Images!(base64Files);\r\n insertImageFiles(view, pos, images);\r\n });\r\n }\r\n event.preventDefault();\r\n return true;\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nfunction handleImageUris(view: EditorView, pos: number, uris: string[], ui: EditorUI): boolean {\r\n // filter out images\r\n const imageUris = uris.filter(uri => {\r\n // get extension and check it it's an image\r\n // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#Common_image_file_types\r\n const extension = uri\r\n .split(/\\./)\r\n .pop()!\r\n .toLowerCase();\r\n return kImageExtensions.includes(extension);\r\n });\r\n\r\n // exit if we have no image uris\r\n if (imageUris.length === 0) {\r\n return false;\r\n }\r\n\r\n // resolve image uris then insert them. note that this is done\r\n // async so we return true indicating we've handled the drop and\r\n // then we actually do the insertion once it returns\r\n ui.context.resolveImageUris(imageUris).then(images => {\r\n insertImageFiles(view, pos, images);\r\n });\r\n\r\n // indicate that we will handle the event\r\n return true;\r\n}\r\n\r\nfunction insertImageFiles(view: EditorView, pos: number, images: string[]) {\r\n const tr = view.state.tr;\r\n images.forEach(image => {\r\n const node = view.state.schema.nodes.image.create({ src: image });\r\n tr.insert(pos, node);\r\n });\r\n view.dispatch(tr);\r\n}\r\n\r\nconst blobToBase64 = (blob: File) => new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = error => reject(error);\r\n});\r\n","/*\r\n * image.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\r\nimport { EditorState, NodeSelection, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { selectionIsImageNode, selectionIsEmptyParagraph } from '../../api/selection';\r\nimport {\r\n pandocAttrSpec,\r\n pandocAttrParseDom,\r\n pandocAttrToDomAttr,\r\n pandocAttrReadAST,\r\n pandocAttrAvailable,\r\n} from '../../api/pandoc_attr';\r\nimport {\r\n PandocOutput,\r\n PandocTokenType,\r\n ProsemirrorWriter,\r\n PandocToken,\r\n stringifyTokens,\r\n imageAttributesAvailable,\r\n} from '../../api/pandoc';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { ImageDimensions } from '../../api/image';\r\nimport { asHTMLTag } from '../../api/html';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\nimport { EditorFormat } from '../../api/format';\r\n\r\nimport { imageDialog } from './image-dialog';\r\nimport { imageDimensionsFromImg, imageContainerWidth, inlineHTMLIsImage } from './image-util';\r\nimport { imageTextSelectionPlugin } from './image-textsel';\r\nimport { posHasProhibitedFigureParent } from './figure';\r\nimport { imageEventsPlugin } from './image-events';\r\nimport { imageNodeViewPlugins } from './image-view';\r\n\r\nconst TARGET_URL = 0;\r\nconst TARGET_TITLE = 1;\r\n\r\nconst IMAGE_ATTR = 0;\r\nconst IMAGE_ALT = 1;\r\nconst IMAGE_TARGET = 2;\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, ui, events, format } = context;\r\n\r\n const imageAttr = imageAttributesAvailable(pandocExtensions);\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'image',\r\n spec: {\r\n inline: true,\r\n attrs: imageNodeAttrsSpec(false, imageAttr),\r\n group: 'inline',\r\n draggable: true,\r\n parseDOM: [\r\n {\r\n tag: 'img[src]',\r\n getAttrs(dom: Node | string) {\r\n return imageAttrsFromDOM(dom as Element, imageAttr);\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n return imageDOMOutputSpec(node, imageAttr);\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Image,\r\n handler: pandocImageHandler(false, imageAttr),\r\n },\r\n ],\r\n inlineHTMLReader: pandocExtensions.raw_html ? imageInlineHTMLReader : undefined,\r\n writer: imagePandocOutputWriter(false),\r\n },\r\n\r\n attr_edit: () => ({\r\n type: (schema: Schema) => schema.nodes.image,\r\n noDecorator: true,\r\n editFn: () => imageCommand(ui, format, imageAttr),\r\n }),\r\n },\r\n ],\r\n\r\n commands: () => {\r\n return [\r\n new ProsemirrorCommand(\r\n EditorCommandId.Image,\r\n ['Shift-Mod-i'],\r\n imageCommand(ui, format, imageAttr),\r\n imageOmniInsert(ui),\r\n ),\r\n ];\r\n },\r\n\r\n plugins: () => {\r\n return [\r\n imageTextSelectionPlugin(),\r\n imageEventsPlugin(ui),\r\n ...imageNodeViewPlugins('image', ui, format, events, pandocExtensions),\r\n ];\r\n },\r\n };\r\n};\r\n\r\nexport function pandocImageHandler(figure: boolean, imageAttributes: boolean) {\r\n return (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n // get attributes\r\n const target = tok.c[IMAGE_TARGET];\r\n const attrs = {\r\n src: target[TARGET_URL],\r\n title: readPandocTitle(target[TARGET_TITLE]),\r\n caption: '',\r\n ...(imageAttributes ? pandocAttrReadAST(tok, IMAGE_ATTR) : {}),\r\n };\r\n\r\n // add alt as plain text if it's not a figure\r\n if (!figure) {\r\n attrs.caption = stringifyTokens(tok.c[IMAGE_ALT]);\r\n }\r\n\r\n // read image and (if appropriate) children\r\n writer.openNode(figure ? schema.nodes.figure : schema.nodes.image, attrs);\r\n if (figure) {\r\n writer.writeTokens(tok.c[IMAGE_ALT]);\r\n }\r\n writer.closeNode();\r\n };\r\n}\r\n\r\nexport function imagePandocOutputWriter(figure: boolean) {\r\n return (output: PandocOutput, node: ProsemirrorNode) => {\r\n // default writer for markdown images\r\n let writer = () => {\r\n output.writeToken(PandocTokenType.Image, () => {\r\n if (output.extensions.link_attributes) {\r\n output.writeAttr(node.attrs.id, node.attrs.classes, node.attrs.keyvalue);\r\n } else {\r\n output.writeAttr();\r\n }\r\n output.writeArray(() => {\r\n if (figure) {\r\n output.writeInlines(node.content);\r\n } else {\r\n output.writeText(node.attrs.caption);\r\n }\r\n });\r\n output.write([node.attrs.src, node.attrs.title || '']);\r\n });\r\n };\r\n\r\n // see if we need to write raw html\r\n const requireHTML =\r\n pandocAttrAvailable(node.attrs) && // attribs need to be written\r\n !output.extensions.link_attributes && // markdown attribs not supported\r\n output.extensions.raw_html; // raw html is supported\r\n\r\n // if we do, then substitute a raw html writer\r\n if (node.attrs.raw || requireHTML) {\r\n writer = () => {\r\n const imgAttr = imageDOMAttributes(node, true, false);\r\n const html = asHTMLTag('img', imgAttr, true, true);\r\n output.writeRawMarkdown(html);\r\n };\r\n }\r\n\r\n // write (wrap in paragraph and possibly link for figures)\r\n if (figure) {\r\n let writeFigure = writer;\r\n if (node.attrs.linkTo) {\r\n writeFigure = () => {\r\n output.writeLink(node.attrs.linkTo, '', null, writer);\r\n };\r\n }\r\n output.writeToken(PandocTokenType.Para, writeFigure);\r\n } else {\r\n writer();\r\n }\r\n };\r\n}\r\n\r\n// parse inline html with <img> as image node\r\nfunction imageInlineHTMLReader(schema: Schema, html: string, writer?: ProsemirrorWriter) {\r\n const isImage = inlineHTMLIsImage(html);\r\n if (!isImage) {\r\n return false;\r\n }\r\n\r\n if (writer) {\r\n const attrs = imageAttrsFromHTML(html);\r\n if (attrs) {\r\n writer.addNode(schema.nodes.image, { ...attrs, raw: true }, []);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n return isImage;\r\n}\r\n\r\nexport function imageDOMOutputSpec(node: ProsemirrorNode, imageAttributes: boolean): DOMOutputSpec {\r\n return ['img', imageDOMAttributes(node, imageAttributes)];\r\n}\r\n\r\nexport function imageDOMAttributes(\r\n node: ProsemirrorNode,\r\n imageAttributes: boolean,\r\n marker = true,\r\n): { [key: string]: unknown } {\r\n const attr: { [key: string]: string } = {\r\n src: node.attrs.src,\r\n };\r\n const title = node.attrs.title;\r\n if (title) {\r\n attr.title = title;\r\n }\r\n const caption = node.attrs.caption || node.textContent;\r\n if (caption) {\r\n attr.alt = caption;\r\n }\r\n\r\n return {\r\n ...attr,\r\n ...(imageAttributes ? pandocAttrToDomAttr(node.attrs, marker) : {}),\r\n };\r\n}\r\n\r\nexport function imageNodeAttrsSpec(linkTo: boolean, imageAttributes: boolean) {\r\n return {\r\n src: {},\r\n title: { default: null },\r\n caption: { default: null },\r\n raw: { default: false },\r\n ...(linkTo ? { linkTo: { default: null } } : {}),\r\n ...(imageAttributes ? pandocAttrSpec : {}),\r\n };\r\n}\r\n\r\nexport function imageAttrsFromDOM(el: Element, imageAttributes: boolean, forceAttrs = false) {\r\n const attrs: { [key: string]: string | null } = {\r\n src: el.getAttribute('src') || null,\r\n title: el.getAttribute('title') || null,\r\n caption: el.getAttribute('alt') || null,\r\n };\r\n return {\r\n ...attrs,\r\n ...(imageAttributes ? pandocAttrParseDom(el, attrs, forceAttrs) : {}),\r\n };\r\n}\r\n\r\nexport function imageAttrsFromHTML(html: string) {\r\n const parser = new window.DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n if (doc.body && doc.body.firstChild instanceof HTMLImageElement) {\r\n return imageAttrsFromDOM(doc.body.firstChild, true, true);\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function imageCommand(editorUI: EditorUI, editorFormat: EditorFormat, imageAttributes: boolean) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n const schema = state.schema;\r\n\r\n if (!canInsertNode(state, schema.nodes.image) && !canInsertNode(state, schema.nodes.figure)) {\r\n return false;\r\n }\r\n\r\n if (dispatch && view) {\r\n // see if we are editing an existing node\r\n let node: ProsemirrorNode | null = null;\r\n let nodeType = schema.nodes.image;\r\n let img: HTMLImageElement | null = null;\r\n let imgDimensions: ImageDimensions | null = null;\r\n if (selectionIsImageNode(schema, state.selection)) {\r\n node = (state.selection as NodeSelection).node;\r\n nodeType = node.type;\r\n if (nodeType === schema.nodes.figure) {\r\n const figure = view.nodeDOM(state.selection.from) as HTMLElement;\r\n img = figure.firstChild!.firstChild as HTMLImageElement;\r\n } else {\r\n const span = view.nodeDOM(state.selection.from) as HTMLElement;\r\n img = span.firstChild! as HTMLImageElement;\r\n }\r\n if (img) {\r\n const containerWidth = imageContainerWidth(state.selection.from, view);\r\n imgDimensions = imageDimensionsFromImg(img, containerWidth);\r\n }\r\n }\r\n\r\n // see if we are in an empty paragraph (in that case insert a figure)\r\n if (\r\n selectionIsEmptyParagraph(schema, state.selection) &&\r\n !posHasProhibitedFigureParent(schema, state.selection.$head)\r\n ) {\r\n nodeType = schema.nodes.figure;\r\n }\r\n\r\n // show dialog\r\n imageDialog(node, imgDimensions, nodeType, view, editorUI, editorFormat, imageAttributes);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nfunction imageOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Figure / Image...'),\r\n description: ui.context.translateText('Figure or inline image'),\r\n group: OmniInsertGroup.Content,\r\n priority: 10,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.image_dark : ui.images.omni_insert.image),\r\n };\r\n}\r\n\r\nfunction readPandocTitle(title: string | null) {\r\n if (title) {\r\n return title.replace(/^(fig:)/, '');\r\n } else {\r\n return title;\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * hr.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, DOMOutputSpec } from 'prosemirror-model';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { findParentNodeOfType } from 'prosemirror-utils';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { ProsemirrorCommand, insertNode, EditorCommandId } from '../api/command';\r\nimport { ExtensionContext } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { OmniInsertGroup } from '../api/omni_insert';\r\n\r\nimport './hr-styles.css';\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n const { ui } = context;\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'horizontal_rule',\r\n spec: {\r\n group: 'block',\r\n parseDOM: [{ tag: 'hr' }],\r\n toDOM(): DOMOutputSpec {\r\n return ['div', ['hr', { class: 'pm-hr-background-color' }]];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.HorizontalRule,\r\n node: 'horizontal_rule',\r\n },\r\n ],\r\n writer: (output: PandocOutput) => {\r\n output.writeToken(PandocTokenType.HorizontalRule);\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [\r\n new ProsemirrorCommand(\r\n EditorCommandId.HorizontalRule,\r\n [],\r\n insertNode(schema.nodes.horizontal_rule, {}, true),\r\n hrOmniInsert(ui),\r\n ),\r\n ];\r\n },\r\n\r\n inputRules: () => {\r\n return [\r\n new InputRule(/^\\*{3}$/, (state: EditorState, _match: RegExpMatchArray, start: number, end: number) => {\r\n const schema = state.schema;\r\n const paraNode = findParentNodeOfType(schema.nodes.paragraph)(state.selection);\r\n if (paraNode && state.selection.$anchor.depth === 2) {\r\n // only in top-level paragraphs\r\n return state.tr.replaceRangeWith(start, end, schema.nodes.horizontal_rule.create());\r\n } else {\r\n return null;\r\n }\r\n }),\r\n ];\r\n },\r\n };\r\n};\r\n\r\nfunction hrOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Horizontal Line'),\r\n keywords: [\"hr\", \"rule\"],\r\n description: ui.context.translateText('Line that spans across the page'),\r\n group: OmniInsertGroup.Content,\r\n priority: 1,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.horizontal_rule_dark : ui.images.omni_insert.horizontal_rule,\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * hard_break.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { BaseKey } from '../api/basekeys';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\n\r\nconst extension: Extension = {\r\n nodes: [\r\n {\r\n name: 'hard_break',\r\n spec: {\r\n inline: true,\r\n group: 'inline',\r\n selectable: false,\r\n parseDOM: [{ tag: 'br' }],\r\n toDOM() {\r\n return ['br'];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.LineBreak,\r\n node: 'hard_break',\r\n },\r\n ],\r\n writer: (output: PandocOutput) => {\r\n output.writeToken(PandocTokenType.LineBreak);\r\n },\r\n },\r\n },\r\n ],\r\n\r\n baseKeys: () => {\r\n return [\r\n { key: BaseKey.ModEnter, command: hardBreakCommandFn() },\r\n { key: BaseKey.ShiftEnter, command: hardBreakCommandFn() },\r\n ];\r\n },\r\n};\r\n\r\nexport function hardBreakCommandFn() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const br = state.schema.nodes.hard_break;\r\n if (dispatch) {\r\n dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView());\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * null.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\n\r\nimport './null-styles.css';\r\n\r\nconst extension: Extension = {\r\n nodes: [\r\n {\r\n name: 'null',\r\n spec: {\r\n group: 'block',\r\n atom: true,\r\n selectable: false,\r\n parseDOM: [{ tag: \"div[class*='null-block']\" }],\r\n toDOM() {\r\n return ['div', { class: 'null-block' }];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Null,\r\n node: 'null',\r\n },\r\n ],\r\n writer: (output: PandocOutput) => {\r\n output.writeToken(PandocTokenType.Null);\r\n },\r\n },\r\n },\r\n ],\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * em.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'em',\r\n spec: {\r\n group: 'formatting',\r\n parseDOM: [\r\n { tag: 'i' },\r\n { tag: 'em' },\r\n { style: 'font-weight', getAttrs: (value: string | Node) => (value as string) === 'italic' && null },\r\n ],\r\n toDOM() {\r\n return ['em'];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Emph,\r\n mark: 'em',\r\n },\r\n ],\r\n writer: {\r\n priority: 4,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.Emph, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Em, ['Mod-i'], schema.marks.em)];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [\r\n delimiterMarkInputRule('\\\\*', schema.marks.em, filter, '\\\\*-`', true),\r\n delimiterMarkInputRule('_', schema.marks.em, filter, '\\\\w_`', true),\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * strong.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'strong',\r\n spec: {\r\n group: 'formatting',\r\n parseDOM: [\r\n // This works around a Google Docs misbehavior where pasted content will be inexplicably wrapped in `<b>`\r\n // tags with a font-weight normal.\r\n {\r\n tag: 'b',\r\n getAttrs: (value: string | Node) => (value as HTMLElement).style.fontWeight !== 'normal' && null,\r\n },\r\n { tag: 'strong' },\r\n {\r\n style: 'font-weight',\r\n getAttrs: (value: string | Node) => /^(bold(er)?|[5-9]\\d{2,})$/.test(value as string) && null,\r\n },\r\n ],\r\n toDOM() {\r\n return ['strong'];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Strong,\r\n mark: 'strong',\r\n },\r\n ],\r\n writer: {\r\n priority: 3,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.Strong, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Strong, ['Mod-b'], schema.marks.strong)];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [\r\n delimiterMarkInputRule('\\\\*\\\\*', schema.marks.strong, filter, '`', true),\r\n delimiterMarkInputRule('__', schema.marks.strong, filter, '\\\\w`', true),\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * code.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Fragment, Mark, Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { MarkCommand, EditorCommandId, ProsemirrorCommand, toggleMarkType } from '../api/command';\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\nimport { pandocAttrSpec, pandocAttrParseDom, pandocAttrToDomAttr, pandocAttrReadAST } from '../api/pandoc_attr';\r\nimport { PandocToken, PandocOutput, PandocTokenType } from '../api/pandoc';\r\n\r\nimport { kCodeText, kCodeAttr } from '../api/code';\r\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\r\nimport { domAttrNoSpelling } from '../api/mark';\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\r\n\r\nimport { canInsertNode } from '../api/node';\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, ui, options } = context;\r\n\r\n const codeAttrs = pandocExtensions.inline_code_attributes;\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'code',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n group: 'formatting',\r\n attrs: codeAttrs ? pandocAttrSpec : {},\r\n parseDOM: [\r\n {\r\n tag: 'code',\r\n getAttrs(dom: Node | string) {\r\n if (codeAttrs) {\r\n return pandocAttrParseDom(dom as Element, {});\r\n } else {\r\n return {};\r\n }\r\n },\r\n },\r\n ],\r\n toDOM(mark: Mark) {\r\n const fontClass = 'pm-code pm-fixedwidth-font pm-chunk-background-color pm-block-border-color';\r\n const attrs = codeAttrs\r\n ? pandocAttrToDomAttr({\r\n ...mark.attrs,\r\n classes: [...mark.attrs.classes, fontClass],\r\n })\r\n : {\r\n class: fontClass,\r\n };\r\n return ['code', domAttrNoSpelling(attrs)];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Code,\r\n mark: 'code',\r\n getText: (tok: PandocToken) => tok.c[kCodeText],\r\n getAttrs: (tok: PandocToken) => {\r\n if (codeAttrs) {\r\n return pandocAttrReadAST(tok, kCodeAttr);\r\n } else {\r\n return {};\r\n }\r\n },\r\n },\r\n ],\r\n writer: {\r\n // lowest possible mark priority since it doesn't call writeInlines\r\n // (so will 'eat' any other marks on the stack)\r\n priority: 0,\r\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\r\n // collect code and trim it (pandoc will do this on parse anyway)\r\n let code = '';\r\n parent.forEach((node: ProsemirrorNode) => (code = code + node.textContent));\r\n code = code.trim();\r\n if (code.length > 0) {\r\n output.writeToken(PandocTokenType.Code, () => {\r\n if (codeAttrs) {\r\n output.writeAttr(mark.attrs.id, mark.attrs.classes, mark.attrs.keyvalue);\r\n } else {\r\n output.writeAttr();\r\n }\r\n output.write(code);\r\n });\r\n }\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [\r\n new MarkCommand(EditorCommandId.Code, ['Mod-d'], schema.marks.code),\r\n ...(!options.defaultCellTypePython ? [new InsertInlinCodeCommand(ui)] : [])\r\n ];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [delimiterMarkInputRule('`', schema.marks.code, filter)];\r\n },\r\n };\r\n};\r\n\r\n\r\nexport class InsertInlinCodeCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI) {\r\n super(EditorCommandId.InlineRCode, [], insertInlineRCode, inlineRCodeOmniInsert(ui));\r\n }\r\n}\r\n\r\n\r\nfunction insertInlineRCode(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n // enable/disable command\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.text) || !toggleMarkType(schema.marks.code)(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const prevSel = tr.selection;\r\n const mark = schema.marks.code.create();\r\n const node = schema.text(\"r \", [mark]);\r\n tr.insert(tr.selection.from, node);\r\n setTextSelection(tr.mapping.map(prevSel.from) , -1)(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n}\r\n\r\nfunction inlineRCodeOmniInsert(ui: EditorUI): OmniInsert {\r\n return {\r\n name: ui.context.translateText('Inline R Code'),\r\n keywords: [\"r\"],\r\n description: ui.context.translateText('R code within a line or paragraph'),\r\n group: OmniInsertGroup.Content,\r\n priority: 2,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.r_chunk_dark : ui.images.omni_insert.r_chunk),\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * shortcode.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport const kShortcodePattern = '(?:^|[^`])({{([%<])\\\\s+.*?[%>]}})';\r\nexport const kShortcodeRegEx = new RegExp(kShortcodePattern, 'g');\r\n","/*\r\n * link-command.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { MarkType } from 'prosemirror-model';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { LinkEditorFn, LinkProps } from 'editor-types';\r\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findChildren } from 'prosemirror-utils';\r\n\r\nimport { markIsActive, getMarkAttrs, getSelectionMarkRange, getMarkRange } from '../../api/mark';\r\n\r\nimport { linkTargets, LinkCapabilities, LinkType } from '../../api/link';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\nimport { equalsIgnoreCase } from 'core';\r\n\r\nexport function linkCommand(markType: MarkType, onEditLink: LinkEditorFn, capabilities: LinkCapabilities) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // if the current node doesn't allow this mark return false\r\n if (!state.selection.$from.node().type.allowsMarkType(markType)) {\r\n return false;\r\n }\r\n\r\n async function asyncEditLink() {\r\n if (dispatch) {\r\n // collect link targets\r\n const targets = await linkTargets(state.doc);\r\n\r\n // get the range of the mark\r\n const range = getSelectionMarkRange(state.selection, markType);\r\n\r\n // get link attributes if we have them\r\n let link: { type?: LinkType, text?: string, href?: string, heading?: string } = {};\r\n\r\n // only get text if this is a text selection\r\n if (state.selection instanceof TextSelection) {\r\n link.text = state.doc.textBetween(range.from, range.to);\r\n capabilities.text = true;\r\n } else {\r\n capabilities.text = false;\r\n }\r\n\r\n // get other attributes\r\n if (markIsActive(state, markType)) {\r\n link = {\r\n ...link,\r\n ...getMarkAttrs(state.doc, range, markType),\r\n };\r\n } else {\r\n // if the link text is a URL then make it the default\r\n if (link.text && link.text.match(/^https?:\\/\\/.*$/)) {\r\n link.href = link.text;\r\n }\r\n }\r\n\r\n // determine type\r\n if (link.heading) {\r\n link.type = LinkType.Heading;\r\n } else if (link.href && link.href.startsWith('#')) {\r\n link.type = LinkType.ID;\r\n } else {\r\n link.type = LinkType.URL;\r\n }\r\n\r\n // ensure text and url are not undefined\r\n link.text = link.text || \"\";\r\n link.href = link.href || \"\";\r\n\r\n // show edit ui\r\n const result = await onEditLink({ ...link } as LinkProps, targets, capabilities);\r\n if (result) {\r\n const tr = state.tr;\r\n tr.removeMark(range.from, range.to, markType);\r\n if (result.action === 'edit') {\r\n // create the mark\r\n const mark = markType.create(result.link);\r\n\r\n // if the content changed then replace the range, otherwise\r\n if (capabilities.text && link.text !== result.link.text) {\r\n const node = markType.schema.text(result.link.text, [mark]);\r\n // if we are editing an existing link then replace it, otherwise replace the selection\r\n if (link.href) {\r\n tr.replaceRangeWith(range.from, range.to, node);\r\n } else {\r\n tr.replaceSelectionWith(node, false);\r\n }\r\n } else {\r\n tr.addMark(range.from, range.to, mark);\r\n }\r\n\r\n // if it's a heading link then update heading to indicate it has an associated link\r\n if (result.link.type === LinkType.Heading) {\r\n const heading = findChildren(\r\n tr.doc,\r\n node =>\r\n node.type === state.schema.nodes.heading &&\r\n equalsIgnoreCase(node.textContent, result.link.heading || ''),\r\n );\r\n if (heading.length > 0) {\r\n tr.setNodeMarkup(heading[0].pos, state.schema.nodes.heading, {\r\n ...heading[0].node.attrs,\r\n link: result.link.heading,\r\n });\r\n }\r\n }\r\n }\r\n dispatch(tr);\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncEditLink();\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function linkOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Link...'),\r\n description: ui.context.translateText('Link to another location'),\r\n group: OmniInsertGroup.Content,\r\n priority: 8,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.link_dark : ui.images.omni_insert.link),\r\n };\r\n}\r\n\r\nexport function removeLinkCommand(markType: MarkType) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const range = getMarkRange(state.selection.$from, markType);\r\n if (!range) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.removeMark(range.from, range.to, markType);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n","/*\r\n * link-input.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { EditorState } from 'prosemirror-state';\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { markInputRule, MarkInputRuleFilter } from '../../api/input_rule';\r\n\r\nexport function linkInputRules(autoLink: boolean) {\r\n return (schema: Schema, filter: MarkInputRuleFilter) => {\r\n const rules = [\r\n // <link> style link\r\n markInputRule(/(?:(?:^|[^`])<)(https?:\\/\\/[^>]+)(?:>)$/, schema.marks.link, filter, (match: string[]) => ({\r\n href: match[1],\r\n })),\r\n // full markdown link\r\n new InputRule(/(?:\\[)([^\\]]+)(?:\\]\\()([^)]+)(?:\\))$/, (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n if (!filter(state, start, end)) {\r\n return null;\r\n }\r\n \r\n // remove any leading delimter (modulo spaces)\r\n const textIndex = match[0].indexOf(match[1]);\r\n const prefix = match[0].substring(0, textIndex).replace(/^\\s/, \"\");\r\n const delimStart = start + textIndex - prefix.length;\r\n const tr = state.tr;\r\n tr.delete(delimStart, delimStart + prefix.length);\r\n \r\n // create mark\r\n const attrs = { href: match[2] };\r\n const mark = schema.marks.link.create(attrs);\r\n \r\n // apply it to the matching core text\r\n const markStart = start + textIndex - prefix.length;\r\n tr.addMark(markStart, markStart + match[1].length, mark);\r\n tr.removeStoredMark(mark); // Do not continue with mark.\r\n \r\n // remove any remaining text\r\n const remainStart = markStart + match[1].length;\r\n tr.delete(remainStart, end);\r\n setTextSelection(remainStart)(tr);\r\n \r\n return tr;\r\n })\r\n ];\r\n\r\n if (autoLink) {\r\n // plain link\r\n rules.push(\r\n new InputRule(\r\n /(^|[^`])(https?:\\/\\/[^\\s]+\\w)[.?!,)]* $/,\r\n (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n const tr = state.tr;\r\n start = start + match[1].length;\r\n const linkEnd = start + match[2].length;\r\n tr.addMark(start, linkEnd, schema.marks.link.create({ href: match[2] }));\r\n tr.removeStoredMark(schema.marks.link);\r\n tr.insertText(' ');\r\n setTextSelection(end + 1)(tr);\r\n return tr;\r\n },\r\n ),\r\n );\r\n }\r\n\r\n return rules;\r\n };\r\n}\r\n\r\n","/*\r\n * link-headings.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { findChildrenByType, findChildrenByMark } from 'prosemirror-utils';\r\n\r\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { equalsIgnoreCase } from 'core';\r\n\r\n// detect links to headings within the doc read from pandoc and update the doc\r\n// to note those headings in the link attributes\r\nexport function linkHeadingsPostprocessor(doc: ProsemirrorNode) {\r\n // alias schema\r\n const schema = doc.type.schema;\r\n\r\n // start with a list of all headings\r\n const headings = findChildrenByType(doc, schema.nodes.heading);\r\n\r\n // find link marks\r\n findChildrenByMark(doc, schema.marks.link).forEach(link => {\r\n const markRange = getMarkRange(doc.resolve(link.pos), schema.marks.link);\r\n if (markRange) {\r\n const attrs = getMarkAttrs(doc, markRange, schema.marks.link);\r\n const linkText = doc.textBetween(markRange.from, markRange.to);\r\n const matchedHeading = headings.find(heading => {\r\n return equalsIgnoreCase(heading.node.textContent, linkText) && !attrs.title && attrs.href === '#';\r\n });\r\n if (matchedHeading) {\r\n // point the link mark at this heading by name\r\n doc.nodesBetween(markRange.from, markRange.to, node => {\r\n const linkMark = node.marks.find(m => m.type === schema.marks.link);\r\n if (linkMark) {\r\n // this violates the 'readonly' attribute of linkMark.attrs but this\r\n // isn't actually a prposemirror node but rather the node we read\r\n // from the pandoc ast -- cast away the readonly\r\n (linkMark.attrs as Record<string,unknown>).heading = matchedHeading.node.textContent;\r\n }\r\n });\r\n\r\n // update the heading to indicate it has a named link to it\r\n // see comment above re: cast\r\n (matchedHeading.node.attrs as Record<string,unknown>).link = linkText;\r\n }\r\n }\r\n });\r\n\r\n // return doc\r\n return doc;\r\n}\r\n\r\nexport function syncHeadingLinksAppendTransaction() {\r\n return {\r\n name: 'sync-heading-links',\r\n nodeFilter: (node: ProsemirrorNode) =>\r\n (node.type === node.type.schema.nodes.heading) || !!node.type.schema.marks.link.isInSet(node.marks),\r\n append: (tr: Transaction) => {\r\n // alias schema\r\n const schema = tr.doc.type.schema;\r\n\r\n // fix links to be in sync with their text\r\n const links = findChildrenByMark(tr.doc, schema.marks.link);\r\n links.forEach(link => {\r\n const linkPos = tr.mapping.map(link.pos);\r\n const range = getMarkRange(tr.doc.resolve(linkPos), schema.marks.link);\r\n if (range) {\r\n const attrs = getMarkAttrs(tr.doc, range, schema.marks.link);\r\n const linkText = tr.doc.textBetween(range.from, range.to);\r\n if (attrs.heading && !equalsIgnoreCase(attrs.heading, linkText)) {\r\n tr.removeMark(range.from, range.to, schema.marks.link);\r\n tr.addMark(range.from, range.to, schema.marks.link.create({ ...attrs, heading: linkText }));\r\n }\r\n }\r\n });\r\n\r\n // if a heading has deviated from it's link, then update the link\r\n findChildrenByType(tr.doc, schema.nodes.heading).forEach(heading => {\r\n const headingPos = tr.mapping.map(heading.pos);\r\n const headingText = heading.node.textContent;\r\n const headingLink = heading.node.attrs.link;\r\n\r\n if (headingLink && !equalsIgnoreCase(headingLink, headingText) && headingText.length > 0) {\r\n // set the heading link text\r\n tr.setNodeMarkup(headingPos, schema.nodes.heading, {\r\n ...heading.node.attrs,\r\n link: headingText,\r\n });\r\n\r\n // find links that don't match and update them\r\n findChildrenByMark(tr.doc, schema.marks.link).forEach(link => {\r\n const linkPos = tr.mapping.map(link.pos);\r\n const range = getMarkRange(tr.doc.resolve(linkPos), schema.marks.link);\r\n if (range) {\r\n const attrs = getMarkAttrs(tr.doc, range, schema.marks.link);\r\n if (equalsIgnoreCase(attrs.heading, headingLink)) {\r\n tr.insertText(headingText, range.from, range.to);\r\n tr.addMark(\r\n range.from,\r\n range.from + headingText.length,\r\n schema.marks.link.create({ ...attrs, heading: headingText }),\r\n );\r\n }\r\n }\r\n });\r\n }\r\n });\r\n },\r\n };\r\n}\r\n","/*!\n * clipboard.js v2.0.11\n * https://clipboardjs.com/\n *\n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 686:\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ clipboard; }\n});\n\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(279);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(370);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(817);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n;// CONCATENATED MODULE: ./src/common/command.js\n/**\n * Executes a given operation type.\n * @param {String} type\n * @return {Boolean}\n */\nfunction command(type) {\n try {\n return document.execCommand(type);\n } catch (err) {\n return false;\n }\n}\n;// CONCATENATED MODULE: ./src/actions/cut.js\n\n\n/**\n * Cut action wrapper.\n * @param {String|HTMLElement} target\n * @return {String}\n */\n\nvar ClipboardActionCut = function ClipboardActionCut(target) {\n var selectedText = select_default()(target);\n command('cut');\n return selectedText;\n};\n\n/* harmony default export */ var actions_cut = (ClipboardActionCut);\n;// CONCATENATED MODULE: ./src/common/create-fake-element.js\n/**\n * Creates a fake textarea element with a value.\n * @param {String} value\n * @return {HTMLElement}\n */\nfunction createFakeElement(value) {\n var isRTL = document.documentElement.getAttribute('dir') === 'rtl';\n var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS\n\n fakeElement.style.fontSize = '12pt'; // Reset box model\n\n fakeElement.style.border = '0';\n fakeElement.style.padding = '0';\n fakeElement.style.margin = '0'; // Move element out of screen horizontally\n\n fakeElement.style.position = 'absolute';\n fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically\n\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n fakeElement.style.top = \"\".concat(yPosition, \"px\");\n fakeElement.setAttribute('readonly', '');\n fakeElement.value = value;\n return fakeElement;\n}\n;// CONCATENATED MODULE: ./src/actions/copy.js\n\n\n\n/**\n * Create fake copy action wrapper using a fake element.\n * @param {String} target\n * @param {Object} options\n * @return {String}\n */\n\nvar fakeCopyAction = function fakeCopyAction(value, options) {\n var fakeElement = createFakeElement(value);\n options.container.appendChild(fakeElement);\n var selectedText = select_default()(fakeElement);\n command('copy');\n fakeElement.remove();\n return selectedText;\n};\n/**\n * Copy action wrapper.\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @return {String}\n */\n\n\nvar ClipboardActionCopy = function ClipboardActionCopy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n var selectedText = '';\n\n if (typeof target === 'string') {\n selectedText = fakeCopyAction(target, options);\n } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) {\n // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n selectedText = fakeCopyAction(target.value, options);\n } else {\n selectedText = select_default()(target);\n command('copy');\n }\n\n return selectedText;\n};\n\n/* harmony default export */ var actions_copy = (ClipboardActionCopy);\n;// CONCATENATED MODULE: ./src/actions/default.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n\n\n/**\n * Inner function which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n * @param {Object} options\n */\n\nvar ClipboardActionDefault = function ClipboardActionDefault() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // Defines base properties passed from constructor.\n var _options$action = options.action,\n action = _options$action === void 0 ? 'copy' : _options$action,\n container = options.container,\n target = options.target,\n text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'.\n\n if (action !== 'copy' && action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n } // Sets the `target` property using an element that will be have its content copied.\n\n\n if (target !== undefined) {\n if (target && _typeof(target) === 'object' && target.nodeType === 1) {\n if (action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n } // Define selection strategy based on `text` property.\n\n\n if (text) {\n return actions_copy(text, {\n container: container\n });\n } // Defines which selection strategy based on `target` property.\n\n\n if (target) {\n return action === 'cut' ? actions_cut(target) : actions_copy(target, {\n container: container\n });\n }\n};\n\n/* harmony default export */ var actions_default = (ClipboardActionDefault);\n;// CONCATENATED MODULE: ./src/clipboard.js\nfunction clipboard_typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return clipboard_typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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 } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\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); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\nfunction getAttributeValue(suffix, element) {\n var attribute = \"data-clipboard-\".concat(suffix);\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\n\nvar Clipboard = /*#__PURE__*/function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n var _super = _createSuper(Clipboard);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n var _this;\n\n _classCallCheck(this, Clipboard);\n\n _this = _super.call(this);\n\n _this.resolveOptions(options);\n\n _this.listenClick(trigger);\n\n return _this;\n }\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: \"resolveOptions\",\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: \"listenClick\",\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: \"onClick\",\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n var action = this.action(trigger) || 'copy';\n var text = actions_default({\n action: action,\n container: this.container,\n target: this.target(trigger),\n text: this.text(trigger)\n }); // Fires an event based on the copy operation result.\n\n this.emit(text ? 'success' : 'error', {\n action: action,\n text: text,\n trigger: trigger,\n clearSelection: function clearSelection() {\n if (trigger) {\n trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n });\n }\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultAction\",\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: \"defaultTarget\",\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n /**\n * Allow fire programmatically a copy action\n * @param {String|HTMLElement} target\n * @param {Object} options\n * @returns Text copied.\n */\n\n }, {\n key: \"defaultText\",\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.listener.destroy();\n }\n }], [{\n key: \"copy\",\n value: function copy(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n container: document.body\n };\n return actions_copy(target, options);\n }\n /**\n * Allow fire programmatically a cut action\n * @param {String|HTMLElement} target\n * @returns Text cutted.\n */\n\n }, {\n key: \"cut\",\n value: function cut(target) {\n return actions_cut(target);\n }\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: \"isSupported\",\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n return support;\n }\n }]);\n\n return Clipboard;\n}((tiny_emitter_default()));\n\n/* harmony default export */ var clipboard = (Clipboard);\n\n/***/ }),\n\n/***/ 828:\n/***/ (function(module) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar closest = __webpack_require__(828);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n\n/***/ 879:\n/***/ (function(__unused_webpack_module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n\n/***/ 370:\n/***/ (function(module, __unused_webpack_exports, __webpack_require__) {\n\nvar is = __webpack_require__(879);\nvar delegate = __webpack_require__(438);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n\n/***/ 817:\n/***/ (function(module) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n\n/***/ 279:\n/***/ (function(module) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(__webpack_module_cache__[moduleId]) {\n/******/ \t\t\treturn __webpack_module_cache__[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\n/******/ \t// module exports must be returned from runtime so entry inlining is disabled\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(686);\n/******/ })()\n.default;\n});","function tlite(getTooltipOpts) {\n document.addEventListener('mouseover', function (e) {\n var el = e.target;\n var opts = getTooltipOpts(el);\n\n if (!opts) {\n el = el.parentElement;\n opts = el && getTooltipOpts(el);\n }\n\n opts && tlite.show(el, opts, true);\n });\n}\n\ntlite.show = function (el, opts, isAuto) {\n var fallbackAttrib = 'data-tlite';\n opts = opts || {};\n\n (el.tooltip || Tooltip(el, opts)).show();\n\n function Tooltip(el, opts) {\n var tooltipEl;\n var showTimer;\n var text;\n\n el.addEventListener('mousedown', autoHide);\n el.addEventListener('mouseleave', autoHide);\n\n function show() {\n text = el.title || el.getAttribute(fallbackAttrib) || text;\n el.title = '';\n el.setAttribute(fallbackAttrib, '');\n text && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1))\n }\n\n function autoHide() {\n tlite.hide(el, true);\n }\n\n function hide(isAutoHiding) {\n if (isAuto === isAutoHiding) {\n showTimer = clearTimeout(showTimer);\n var parent = tooltipEl && tooltipEl.parentNode;\n parent && parent.removeChild(tooltipEl);\n tooltipEl = undefined;\n }\n }\n\n function fadeIn() {\n if (!tooltipEl) {\n tooltipEl = createTooltip(el, text, opts);\n }\n }\n\n return el.tooltip = {\n show: show,\n hide: hide\n };\n }\n\n function createTooltip(el, text, opts) {\n var tooltipEl = document.createElement('span');\n var grav = opts.grav || el.getAttribute('data-tlite') || 'n';\n\n tooltipEl.innerHTML = text;\n\n el.appendChild(tooltipEl);\n\n var vertGrav = grav[0] || '';\n var horzGrav = grav[1] || '';\n\n function positionTooltip() {\n tooltipEl.className = 'tlite ' + 'tlite-' + vertGrav + horzGrav;\n\n var arrowSize = 10;\n var top = el.offsetTop;\n var left = el.offsetLeft;\n\n if (tooltipEl.offsetParent === el) {\n top = left = 0;\n }\n\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n var tooltipHeight = tooltipEl.offsetHeight;\n var tooltipWidth = tooltipEl.offsetWidth;\n var centerEl = left + (width / 2);\n\n tooltipEl.style.top = (\n vertGrav === 's' ? (top - tooltipHeight - arrowSize) :\n vertGrav === 'n' ? (top + height + arrowSize) :\n (top + (height / 2) - (tooltipHeight / 2))\n ) + 'px';\n\n tooltipEl.style.left = (\n horzGrav === 'w' ? left :\n horzGrav === 'e' ? left + width - tooltipWidth :\n vertGrav === 'w' ? (left + width + arrowSize) :\n vertGrav === 'e' ? (left - tooltipWidth - arrowSize) :\n (centerEl - tooltipWidth / 2)\n ) + 'px';\n }\n\n positionTooltip();\n\n var rect = tooltipEl.getBoundingClientRect();\n\n if (vertGrav === 's' && rect.top < 0) {\n vertGrav = 'n';\n positionTooltip();\n } else if (vertGrav === 'n' && rect.bottom > window.innerHeight) {\n vertGrav = 's';\n positionTooltip();\n } else if (vertGrav === 'e' && rect.left < 0) {\n vertGrav = 'w';\n positionTooltip();\n } else if (vertGrav === 'w' && rect.right > window.innerWidth) {\n vertGrav = 'e';\n positionTooltip();\n }\n\n tooltipEl.className += ' tlite-visible';\n\n return tooltipEl;\n }\n};\n\ntlite.hide = function (el, isAuto) {\n el.tooltip && el.tooltip.hide(isAuto);\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = tlite;\n}\n","/*\r\n * tooltip.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport tlite from 'tlite';\r\n\r\nimport './tooltip.css';\r\n\r\nexport function showTooltip(\r\n el: Element,\r\n text: string,\r\n grav: 's' | 'n' | 'e' | 'w' | 'sw' | 'se' | 'nw' | 'ne' = 'n',\r\n timeout = 2000,\r\n) {\r\n el.setAttribute('title', '');\r\n el.setAttribute('data-tlite', text);\r\n tlite.show(el, { grav });\r\n setTimeout(() => tlite.hide(el), timeout);\r\n}\r\n","/*\r\n * button.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nexport interface LinkButtonProps extends WidgetProps {\r\n text: string;\r\n onClick: () => void;\r\n title?: string;\r\n maxWidth?: number;\r\n}\r\n\r\nexport const LinkButton: React.FC<LinkButtonProps> = props => {\r\n const className = ['pm-link', 'pm-link-text-color'].concat(props.classes || []).join(' ');\r\n\r\n const style: React.CSSProperties = {\r\n ...props.style,\r\n maxWidth: props.maxWidth,\r\n };\r\n\r\n const onClick = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n props.onClick();\r\n };\r\n\r\n const onKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.keyCode === 32) {\r\n e.preventDefault();\r\n props.onClick();\r\n }\r\n };\r\n\r\n return (\r\n <a\r\n href={\"#0\"}\r\n tabIndex={0}\r\n onClick={onClick}\r\n onKeyDown={onKeyDown}\r\n title={props.title || props.text}\r\n className={className}\r\n style={style}\r\n >\r\n {props.text}\r\n </a>\r\n );\r\n};\r\n\r\nexport interface ImageButtonProps extends WidgetProps {\r\n title: string;\r\n image: string;\r\n tabIndex?: number;\r\n onClick?: () => void;\r\n}\r\n\r\nexport const ImageButton = React.forwardRef<HTMLButtonElement, ImageButtonProps>((props: ImageButtonProps, ref) => {\r\n const className = ['pm-image-button'].concat(props.classes || []).join(' ');\r\n const onClick = (e: React.MouseEvent) => {\r\n if (props.onClick) {\r\n e.preventDefault();\r\n props.onClick();\r\n }\r\n };\r\n return (\r\n <button\r\n onClick={onClick}\r\n title={props.title}\r\n className={className}\r\n style={props.style}\r\n ref={ref}\r\n tabIndex={props.tabIndex}\r\n >\r\n <img src={props.image} alt={props.title} draggable=\"false\"/>\r\n </button>\r\n );\r\n});\r\n\r\nexport interface TextButtonProps extends WidgetProps {\r\n title: string;\r\n onClick?: () => void;\r\n tabIndex?: number;\r\n disabled?: boolean;\r\n}\r\n\r\nexport const TextButton = React.forwardRef<HTMLButtonElement, TextButtonProps>((props: TextButtonProps, ref) => {\r\n const className = props.classes?.join(' ');\r\n const onClick = (e: React.MouseEvent) => {\r\n if (props.onClick) {\r\n e.preventDefault();\r\n props.onClick();\r\n }\r\n };\r\n return (\r\n <button\r\n onClick={onClick}\r\n type=\"button\"\r\n className={className}\r\n style={props.style}\r\n ref={ref}\r\n tabIndex={props.tabIndex}\r\n disabled={props.disabled}\r\n >\r\n {props.title}\r\n </button>\r\n );\r\n});\r\n\r\nexport interface OutlineButtonProps extends WidgetProps {\r\n title: string;\r\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\r\n tabIndex?: number;\r\n}\r\n\r\nexport const OutlineButton = React.forwardRef<HTMLButtonElement, OutlineButtonProps>(\r\n (props: OutlineButtonProps, ref) => {\r\n const className = ['pm-outline-button', 'pm-input-button', 'pm-input-outline-button']\r\n .concat(props.classes || [])\r\n .join(' ');\r\n return (\r\n <button\r\n onClick={props.onClick}\r\n type=\"button\"\r\n className={className}\r\n style={props.style}\r\n ref={ref}\r\n tabIndex={props.tabIndex}\r\n >\r\n {props.title}\r\n </button>\r\n );\r\n },\r\n);\r\n","/*\r\n * react.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { createRoot } from 'react-dom/client';\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nexport interface WidgetProps {\r\n children?: React.ReactNode;\r\n classes?: string[];\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// Render a react element into a DOM container that will eventually be added to the EditorView.dom\r\n// this function is necessary for situations where an element is created and then handed to ProseMirror\r\n// (unattached to the DOM), and then subsequently destoyed/unmounted by ProseMirror. We use a\r\n// MutationObserver to watch EditorView.dom for the element's removal then in response call\r\n// ReactDOM.unmountComponentAtNode\r\nexport function reactRenderForEditorView(element: React.ReactElement, container: HTMLElement, view: EditorView) {\r\n // render the react element into the container\r\n const root = createRoot(container);\r\n root.render(element);\r\n\r\n // track view dom mutations to determine when ProseMirror has destroyed the element\r\n // (our cue to unmount/cleanup the react component)\r\n const observer = new MutationObserver(mutationsList => {\r\n mutationsList.forEach(mutation => {\r\n mutation.removedNodes.forEach(node => {\r\n if (node === container) {\r\n observer.disconnect();\r\n root.unmount();\r\n }\r\n });\r\n });\r\n });\r\n observer.observe(view.dom, { attributes: false, childList: true, subtree: true });\r\n}\r\n","/*\r\n * decoration.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { editingRootNodeClosestToPos } from '../node';\r\n\r\nimport { kPixelUnit } from '../css';\r\n\r\nexport interface DecorationPosition {\r\n pos: number;\r\n style: { [key: string]: string };\r\n key: string;\r\n}\r\n\r\nexport function textRangePopupDecorationPosition(\r\n view: EditorView,\r\n range: { from: number; to: number },\r\n maxWidth: number,\r\n): DecorationPosition {\r\n // get the (window) DOM coordinates for the start of the range. we use range.from + 1 so\r\n // that ranges that are at the beginning of a line don't have their position set\r\n // to the previous line\r\n const rangeCoords = view.coordsAtPos(range.from + 1);\r\n\r\n // get the node, element, coordinates, and style for the current editing root\r\n const rangePos = view.state.doc.resolve(range.from);\r\n const editingNode = editingRootNodeClosestToPos(rangePos)!;\r\n const editingEl = view.domAtPos(editingNode!.pos + 1).node as HTMLElement;\r\n const editingBox = editingEl.getBoundingClientRect();\r\n const editingBoxStyle = window.getComputedStyle(editingEl);\r\n\r\n // base popup style\r\n const topPadding = parseInt(editingBoxStyle.paddingTop!, 10) || 0;\r\n const popupStyle = {\r\n top: rangeCoords.bottom - editingBox.top - topPadding + 5 + kPixelUnit,\r\n };\r\n\r\n // we need to compute whether the popup will be visible (horizontally), do\r\n // this by testing whether we have room for the max link width + controls/padding\r\n let style: { [key: string]: string };\r\n const positionRight = rangeCoords.left + maxWidth > editingBox.right;\r\n if (positionRight) {\r\n const rightCoords = view.coordsAtPos(range.to);\r\n const rightPos = rangeCoords.top === rightCoords.top ? editingBox.right - rightCoords.right : 0;\r\n style = {\r\n ...popupStyle,\r\n right: rightPos + kPixelUnit,\r\n };\r\n } else {\r\n const marginLeft =\r\n 'calc(' +\r\n (rangeCoords.left - editingBox.left) +\r\n 'px ' +\r\n ' - ' +\r\n editingBoxStyle.borderLeftWidth +\r\n ' - ' +\r\n editingBoxStyle.paddingLeft +\r\n ' - ' +\r\n editingBoxStyle.marginLeft +\r\n ' - 1ch' +\r\n ')';\r\n style = {\r\n ...popupStyle,\r\n marginLeft,\r\n };\r\n }\r\n\r\n // calculate key\r\n const key = Object.keys(style)\r\n .map(attrib => `${attrib}=${style[attrib]}`)\r\n .join(';');\r\n\r\n return {\r\n pos: editingNode.pos + editingNode.node.nodeSize - 1,\r\n style,\r\n key,\r\n };\r\n}\r\n","/*\r\n * TextPopup.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\r\nimport { Selection, Plugin, PluginKey, EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { getMarkRange, getMarkAttrs } from './mark';\r\nimport { kRestoreLocationTransaction, kNavigationTransaction } from './transaction';\r\n\r\nimport { reactRenderForEditorView } from './widgets/react';\r\nimport { textRangePopupDecorationPosition } from './widgets/decoration';\r\nimport { kPlatformMac } from './platform';\r\nimport { MarkType } from 'prosemirror-model';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport interface TextPopupTarget<AttrsType = any> {\r\n attrs: AttrsType;\r\n text: string;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport interface TextPopupDecoration<AttrsType = any> {\r\n key: PluginKey<DecorationSet>;\r\n markType: MarkType;\r\n maxWidth: number;\r\n createPopup: (\r\n view: EditorView,\r\n target: TextPopupTarget<AttrsType>,\r\n style: React.CSSProperties,\r\n ) => Promise<JSX.Element | null>;\r\n dismissOnEdit?: boolean;\r\n makeLinksAccessible?: boolean;\r\n specKey?: (target: TextPopupTarget<AttrsType>) => string;\r\n filter?: (selection: Selection) => boolean;\r\n onCmdClick?: (target: TextPopupTarget<AttrsType>) => void;\r\n}\r\n\r\nexport function textPopupDecorationPlugin(deco: TextPopupDecoration): Plugin<DecorationSet> {\r\n const {\r\n key,\r\n markType,\r\n maxWidth,\r\n createPopup,\r\n specKey,\r\n dismissOnEdit,\r\n makeLinksAccessible,\r\n filter,\r\n onCmdClick,\r\n } = deco;\r\n\r\n let editorView: EditorView;\r\n\r\n return new Plugin<DecorationSet>({\r\n key,\r\n view(view: EditorView) {\r\n editorView = view;\r\n return {};\r\n },\r\n state: {\r\n init: () => {\r\n return DecorationSet.empty;\r\n },\r\n apply: (tr: Transaction, _old: DecorationSet, _oldState: EditorState, newState: EditorState) => {\r\n // if this a restore location or navigation then return empty\r\n if (tr.getMeta(kRestoreLocationTransaction) || tr.getMeta(kNavigationTransaction)) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // if this is doc update and we have dismiss on edit then return empty\r\n if (dismissOnEdit && tr.docChanged) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // if the selection is contained within the mark then show the popup\r\n const selection = newState.selection;\r\n\r\n // TODO JJA: The mark range is undefined when the the selection is 'after' the mark\r\n // e.g. [@allaire2012|]\r\n // which means that the preview doesn't show\r\n const range = getMarkRange(selection.$from, markType);\r\n\r\n if (range) {\r\n // selection has to be bounded by the range\r\n if (selection.from < range.from || selection.to > range.to) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // apply the filter\r\n if (filter && !filter(selection)) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // don't show the link popup if it's positioned at the far left of the mark\r\n // (awkward when cursor is just left of an image)\r\n if (selection.empty && range.from === selection.from) {\r\n return DecorationSet.empty;\r\n }\r\n\r\n // mark target\r\n const attrs = getMarkAttrs(newState.doc, range, markType);\r\n const text = newState.doc.textBetween(range.from, range.to);\r\n const target = { attrs, text };\r\n\r\n // compute position (we need this both for setting the styles on the LinkPopup\r\n // as well as for setting the Decorator pos)\r\n const decorationPosition = textRangePopupDecorationPosition(editorView, range, maxWidth);\r\n\r\n // key if one was provided\r\n let decoratorSpec: Record<string,unknown> | undefined;\r\n if (specKey) {\r\n decoratorSpec = {\r\n key: decorationPosition.key + specKey(target),\r\n ignoreSelection: true,\r\n stopEvent: () => {\r\n return true;\r\n },\r\n };\r\n }\r\n\r\n // create decorator\r\n const textPopupDecorator = Decoration.widget(\r\n decorationPosition.pos,\r\n\r\n (view: EditorView) => {\r\n // create decorator and render popup into it\r\n const decorationEl = window.document.createElement('div');\r\n decorationEl.style.visibility = 'hidden';\r\n\r\n // create popup component\r\n createPopup(view, target, decorationPosition.style).then(popup => {\r\n if (popup) {\r\n reactRenderForEditorView(popup, decorationEl, view);\r\n\r\n // make sure links responsd to spacebar\r\n if (makeLinksAccessible) {\r\n const links = decorationEl.getElementsByTagName('a');\r\n // tslint:disable-next-line: prefer-for-of\r\n for (let i = 0; i < links.length; i++) {\r\n const link = links[0];\r\n link.onkeydown = (e: KeyboardEvent) => {\r\n if (e.keyCode === 32) {\r\n e.preventDefault();\r\n link.click();\r\n }\r\n };\r\n }\r\n }\r\n\r\n decorationEl.style.visibility = 'visible';\r\n }\r\n });\r\n\r\n return decorationEl;\r\n },\r\n\r\n decoratorSpec,\r\n );\r\n\r\n // return decorations\r\n return DecorationSet.create(tr.doc, [textPopupDecorator]);\r\n } else {\r\n return DecorationSet.empty;\r\n }\r\n },\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return key.getState(state);\r\n },\r\n handleClick: onCmdClick\r\n ? (view: EditorView, pos: number, event: MouseEvent) => {\r\n const keyPressed = kPlatformMac && event.metaKey;\r\n if (keyPressed) {\r\n const attrs = getMarkAttrs(view.state.doc, { from: pos, to: pos }, markType);\r\n const range = getMarkRange(view.state.doc.resolve(pos));\r\n if (attrs && range) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n const text = view.state.doc.textBetween(range.from, range.to);\r\n onCmdClick({ attrs, text });\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n : undefined,\r\n },\r\n });\r\n}\r\n","/*\r\n * url.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport function isHttpURL(url: string) {\r\n try {\r\n const urlObject = new URL(url);\r\n return urlObject.protocol === \"http:\" || urlObject.protocol === \"https:\";\r\n } catch (_) {\r\n return false;\r\n }\r\n}","/*\r\n * LinkPopup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { DecorationSet, EditorView } from 'prosemirror-view';\r\nimport { Selection, PluginKey } from 'prosemirror-state';\r\n\r\nimport * as React from 'react';\r\n\r\nimport ClipboardJS from 'clipboard';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { LinkProps } from 'editor-types';\r\nimport { CommandFn } from '../../api/command';\r\n\r\nimport { selectionIsImageNode } from '../../api/selection';\r\n\r\nimport { showTooltip } from '../../api/widgets/tooltip';\r\n\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { LinkButton, ImageButton } from '../../api/widgets/button';\r\nimport { Popup } from '../../api/widgets/popup';\r\nimport { EditorNavigation, NavigationType } from '../../api/navigation-types';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { textPopupDecorationPlugin, TextPopupTarget } from '../../api/text-popup';\r\nimport { isHttpURL } from '../../api/url';\r\n\r\nexport function linkPopupPlugin(\r\n schema: Schema,\r\n ui: EditorUI,\r\n nav: EditorNavigation,\r\n linkCmd: CommandFn,\r\n removeLinkCmd: CommandFn,\r\n) {\r\n const kPopupChromeWidth = 70;\r\n const kMaxLinkWidth = 300;\r\n const maxWidth = kMaxLinkWidth + kPopupChromeWidth;\r\n\r\n return textPopupDecorationPlugin({\r\n key: new PluginKey<DecorationSet>('link-popup'),\r\n markType: schema.marks.link,\r\n maxWidth,\r\n createPopup: (view: EditorView, target: TextPopupTarget<LinkProps>, style: React.CSSProperties) => {\r\n return Promise.resolve(\r\n <LinkPopup\r\n link={target.attrs}\r\n maxLinkWidth={kMaxLinkWidth - 10} // prevent off by pixel(s) overflow\r\n linkCmd={linkCmd}\r\n removeLinkCmd={removeLinkCmd}\r\n view={view}\r\n ui={ui}\r\n nav={nav}\r\n style={style}\r\n />,\r\n );\r\n },\r\n specKey: (target: TextPopupTarget<LinkProps>) => {\r\n const linkText = target.attrs.heading ? target.attrs.heading : target.attrs.href;\r\n return `link:${linkText}`;\r\n },\r\n filter: (selection: Selection) => {\r\n return !selectionIsImageNode(schema, selection);\r\n },\r\n onCmdClick: (target: TextPopupTarget<LinkProps>) => {\r\n ui.display.openURL(target.attrs.href);\r\n },\r\n });\r\n}\r\n\r\ninterface LinkPopupProps extends WidgetProps {\r\n link: LinkProps;\r\n maxLinkWidth: number;\r\n view: EditorView;\r\n ui: EditorUI;\r\n nav: EditorNavigation;\r\n linkCmd: CommandFn;\r\n removeLinkCmd: CommandFn;\r\n}\r\n\r\nconst LinkPopup: React.FC<LinkPopupProps> = props => {\r\n // link\r\n const linkText = props.link.heading ? props.link.heading : props.link.href;\r\n const onLinkClicked = () => {\r\n props.view.focus();\r\n if (props.link.heading) {\r\n props.nav.navigate(NavigationType.Heading, props.link.heading);\r\n } else if (props.link.href.startsWith('#')) {\r\n props.nav.navigate(NavigationType.Href, props.link.href.substr(1));\r\n } else if (isHttpURL(props.link.href)) {\r\n props.ui.display.openURL(props.link.href);\r\n } else {\r\n props.ui.display.navigateToFile(props.link.href);\r\n }\r\n };\r\n\r\n // copy\r\n const showCopyButton = !props.link.heading && ClipboardJS.isSupported();\r\n let clipboard: ClipboardJS;\r\n const setCopyButton = (button: HTMLButtonElement | null) => {\r\n if (button) {\r\n clipboard = new ClipboardJS(button, {\r\n text: () => linkText,\r\n });\r\n clipboard.on('success', () => {\r\n showTooltip(button, props.ui.context.translateText('Copied to Clipboard'), 's');\r\n });\r\n } else {\r\n if (clipboard) {\r\n clipboard.destroy();\r\n }\r\n }\r\n };\r\n\r\n // remove\r\n const onRemoveClicked = () => {\r\n // in rstudio (w/ webkit) removing the link during the click results\r\n // in a page-navigation! defer to next event cycle to avoid this\r\n window.setTimeout(() => {\r\n props.removeLinkCmd(props.view.state, props.view.dispatch, props.view);\r\n props.view.focus();\r\n }, 0);\r\n };\r\n\r\n // edit\r\n const onEditClicked = () => {\r\n props.linkCmd(props.view.state, props.view.dispatch, props.view);\r\n };\r\n\r\n return (\r\n <Popup classes={['pm-popup-link']} style={props.style}>\r\n <LinkButton text={linkText} onClick={onLinkClicked} maxWidth={props.maxLinkWidth} />\r\n {showCopyButton ? (\r\n <ImageButton\r\n image={props.ui.images.copy!}\r\n classes={['pm-image-button-copy-link']}\r\n title={props.ui.context.translateText('Copy Link to Clipboard')}\r\n ref={setCopyButton}\r\n />\r\n ) : null}\r\n <ImageButton\r\n image={props.ui.images.removelink!}\r\n classes={['pm-image-button-remove-link']}\r\n title={props.ui.context.translateText('Remove Link')}\r\n onClick={onRemoveClicked}\r\n />\r\n <ImageButton\r\n image={props.ui.images.properties!}\r\n classes={['pm-image-button-edit-properties']}\r\n title={props.ui.context.translateText('Edit Attributes')}\r\n onClick={onEditClicked}\r\n />\r\n </Popup>\r\n );\r\n};\r\n","/*\r\n * link.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Fragment, Mark, Schema } from 'prosemirror-model';\r\nimport { PluginKey, Plugin } from 'prosemirror-state';\r\n\r\nimport { tryDecodeUri } from 'core';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { PandocToken, PandocOutput, PandocTokenType } from '../../api/pandoc';\r\nimport { kShortcodePattern } from '../../api/shortcode';\r\n\r\nimport {\r\n pandocAttrSpec,\r\n pandocAttrParseDom,\r\n pandocAttrToDomAttr,\r\n pandocAttrReadAST,\r\n PandocAttr,\r\n} from '../../api/pandoc_attr';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { kLinkTarget, kLinkTargetUrl, kLinkTargetTitle, kLinkAttr, kLinkChildren, linkPasteHandler } from '../../api/link';\r\nimport { hasShortcutHeadingLinks } from '../../api/pandoc_format';\r\n\r\nimport { linkCommand, removeLinkCommand, linkOmniInsert } from './link-command';\r\nimport { linkInputRules } from './link-input';\r\nimport { linkHeadingsPostprocessor, syncHeadingLinksAppendTransaction } from './link-headings';\r\nimport { linkPopupPlugin } from './link-popup';\r\n\r\nimport './link-styles.css';\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, ui, navigation } = context;\r\n\r\n const capabilities = {\r\n headings: hasShortcutHeadingLinks(pandocExtensions),\r\n attributes: pandocExtensions.link_attributes,\r\n text: true,\r\n };\r\n const linkAttr = pandocExtensions.link_attributes;\r\n const autoLink = pandocExtensions.autolink_bare_uris;\r\n const citations = pandocExtensions.citations;\r\n\r\n const excludes = citations ? { excludes: 'cite_id' } : {};\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'link',\r\n spec: {\r\n attrs: {\r\n href: {},\r\n heading: { default: null },\r\n title: { default: null },\r\n ...(linkAttr ? pandocAttrSpec : {}),\r\n clipboard: { default: false }\r\n },\r\n inclusive: false,\r\n ...excludes,\r\n parseDOM: [\r\n {\r\n tag: 'a[href]',\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n const attrs: { [key: string]: string | null } = {\r\n href: el.getAttribute('href'),\r\n title: el.getAttribute('title'),\r\n heading: el.getAttribute('data-heading'),\r\n };\r\n return {\r\n ...attrs,\r\n ...(linkAttr ? pandocAttrParseDom(el, attrs) : {}),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(mark: Mark) {\r\n const linkClasses = 'pm-link pm-link-text-color';\r\n\r\n let extraAttr: Record<string,unknown> = {};\r\n if (linkAttr) {\r\n extraAttr = pandocAttrToDomAttr({\r\n ...mark.attrs,\r\n classes: [...mark.attrs.classes, linkClasses],\r\n });\r\n } else {\r\n extraAttr = { class: linkClasses };\r\n }\r\n\r\n return [\r\n 'a',\r\n {\r\n href: mark.attrs.clipboard ? mark.attrs.href : '#0',\r\n title: mark.attrs.title,\r\n 'data-heading': mark.attrs.heading,\r\n ...extraAttr,\r\n },\r\n ];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Link,\r\n mark: 'link',\r\n getAttrs: (tok: PandocToken) => {\r\n const target = tok.c[kLinkTarget];\r\n\r\n // decode href if this is a shortcode\r\n let href = target[kLinkTargetUrl] as string;\r\n const decodedRef = tryDecodeUri(href)\r\n if (decodedRef.match(kShortcodePattern)) {\r\n href = decodedRef;\r\n }\r\n\r\n return {\r\n href,\r\n title: target[kLinkTargetTitle] || null,\r\n ...(linkAttr ? pandocAttrReadAST(tok, kLinkAttr) : {}),\r\n };\r\n },\r\n getChildren: (tok: PandocToken) => {\r\n const children = tok.c[kLinkChildren];\r\n if (children.length > 0) {\r\n return children;\r\n } else {\r\n return [{\r\n t: PandocTokenType.Space,\r\n }]\r\n }\r\n },\r\n\r\n postprocessor: hasShortcutHeadingLinks(pandocExtensions) ? linkHeadingsPostprocessor : undefined,\r\n },\r\n ],\r\n\r\n writer: {\r\n priority: 11,\r\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\r\n if (mark.attrs.heading) {\r\n output.writeRawMarkdown('[');\r\n output.writeInlines(parent);\r\n output.writeRawMarkdown(']');\r\n } else {\r\n output.writeLink(\r\n mark.attrs.href,\r\n mark.attrs.title,\r\n linkAttr ? (mark.attrs as PandocAttr) : null,\r\n () => {\r\n output.writeInlines(parent);\r\n },\r\n );\r\n }\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [\r\n new ProsemirrorCommand(\r\n EditorCommandId.Link,\r\n ['Mod-k'],\r\n linkCommand(schema.marks.link, ui.dialogs.editLink, capabilities),\r\n linkOmniInsert(ui),\r\n ),\r\n new ProsemirrorCommand(EditorCommandId.RemoveLink, [], removeLinkCommand(schema.marks.link)),\r\n ];\r\n },\r\n\r\n inputRules: linkInputRules(autoLink),\r\n\r\n appendTransaction: () =>\r\n pandocExtensions.implicit_header_references ? [syncHeadingLinksAppendTransaction()] : [],\r\n\r\n plugins: (schema: Schema) => {\r\n const plugins = [\r\n linkPopupPlugin(\r\n schema,\r\n ui,\r\n navigation,\r\n linkCommand(schema.marks.link, ui.dialogs.editLink, capabilities),\r\n removeLinkCommand(schema.marks.link),\r\n )\r\n ];\r\n if (autoLink) {\r\n plugins.push(\r\n new Plugin({\r\n key: new PluginKey('link-auto'),\r\n props: {\r\n transformPasted: linkPasteHandler(schema),\r\n }\r\n }),\r\n );\r\n }\r\n return plugins;\r\n },\r\n };\r\n};\r\n\r\nexport default extension;\r\n","var GOOD_LEAF_SIZE = 200;\n\n// :: class<T> A rope sequence is a persistent sequence data structure\n// that supports appending, prepending, and slicing without doing a\n// full copy. It is represented as a mostly-balanced tree.\nvar RopeSequence = function RopeSequence () {};\n\nRopeSequence.prototype.append = function append (other) {\n if (!other.length) { return this }\n other = RopeSequence.from(other);\n\n return (!this.length && other) ||\n (other.length < GOOD_LEAF_SIZE && this.leafAppend(other)) ||\n (this.length < GOOD_LEAF_SIZE && other.leafPrepend(this)) ||\n this.appendInner(other)\n};\n\n// :: (union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Prepend an array or other rope to this one, returning a new rope.\nRopeSequence.prototype.prepend = function prepend (other) {\n if (!other.length) { return this }\n return RopeSequence.from(other).append(this)\n};\n\nRopeSequence.prototype.appendInner = function appendInner (other) {\n return new Append(this, other)\n};\n\n// :: (?number, ?number) → RopeSequence<T>\n// Create a rope repesenting a sub-sequence of this rope.\nRopeSequence.prototype.slice = function slice (from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from >= to) { return RopeSequence.empty }\n return this.sliceInner(Math.max(0, from), Math.min(this.length, to))\n};\n\n// :: (number) → T\n// Retrieve the element at the given position from this rope.\nRopeSequence.prototype.get = function get (i) {\n if (i < 0 || i >= this.length) { return undefined }\n return this.getInner(i)\n};\n\n// :: ((element: T, index: number) → ?bool, ?number, ?number)\n// Call the given function for each element between the given\n// indices. This tends to be more efficient than looping over the\n// indices and calling `get`, because it doesn't have to descend the\n// tree for every element.\nRopeSequence.prototype.forEach = function forEach (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n if (from <= to)\n { this.forEachInner(f, from, to, 0); }\n else\n { this.forEachInvertedInner(f, from, to, 0); }\n};\n\n// :: ((element: T, index: number) → U, ?number, ?number) → [U]\n// Map the given functions over the elements of the rope, producing\n// a flat array.\nRopeSequence.prototype.map = function map (f, from, to) {\n if ( from === void 0 ) from = 0;\n if ( to === void 0 ) to = this.length;\n\n var result = [];\n this.forEach(function (elt, i) { return result.push(f(elt, i)); }, from, to);\n return result\n};\n\n// :: (?union<[T], RopeSequence<T>>) → RopeSequence<T>\n// Create a rope representing the given array, or return the rope\n// itself if a rope was given.\nRopeSequence.from = function from (values) {\n if (values instanceof RopeSequence) { return values }\n return values && values.length ? new Leaf(values) : RopeSequence.empty\n};\n\nvar Leaf = /*@__PURE__*/(function (RopeSequence) {\n function Leaf(values) {\n RopeSequence.call(this);\n this.values = values;\n }\n\n if ( RopeSequence ) Leaf.__proto__ = RopeSequence;\n Leaf.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Leaf.prototype.constructor = Leaf;\n\n var prototypeAccessors = { length: { configurable: true },depth: { configurable: true } };\n\n Leaf.prototype.flatten = function flatten () {\n return this.values\n };\n\n Leaf.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n return new Leaf(this.values.slice(from, to))\n };\n\n Leaf.prototype.getInner = function getInner (i) {\n return this.values[i]\n };\n\n Leaf.prototype.forEachInner = function forEachInner (f, from, to, start) {\n for (var i = from; i < to; i++)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n for (var i = from - 1; i >= to; i--)\n { if (f(this.values[i], start + i) === false) { return false } }\n };\n\n Leaf.prototype.leafAppend = function leafAppend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(this.values.concat(other.flatten())) }\n };\n\n Leaf.prototype.leafPrepend = function leafPrepend (other) {\n if (this.length + other.length <= GOOD_LEAF_SIZE)\n { return new Leaf(other.flatten().concat(this.values)) }\n };\n\n prototypeAccessors.length.get = function () { return this.values.length };\n\n prototypeAccessors.depth.get = function () { return 0 };\n\n Object.defineProperties( Leaf.prototype, prototypeAccessors );\n\n return Leaf;\n}(RopeSequence));\n\n// :: RopeSequence\n// The empty rope sequence.\nRopeSequence.empty = new Leaf([]);\n\nvar Append = /*@__PURE__*/(function (RopeSequence) {\n function Append(left, right) {\n RopeSequence.call(this);\n this.left = left;\n this.right = right;\n this.length = left.length + right.length;\n this.depth = Math.max(left.depth, right.depth) + 1;\n }\n\n if ( RopeSequence ) Append.__proto__ = RopeSequence;\n Append.prototype = Object.create( RopeSequence && RopeSequence.prototype );\n Append.prototype.constructor = Append;\n\n Append.prototype.flatten = function flatten () {\n return this.left.flatten().concat(this.right.flatten())\n };\n\n Append.prototype.getInner = function getInner (i) {\n return i < this.left.length ? this.left.get(i) : this.right.get(i - this.left.length)\n };\n\n Append.prototype.forEachInner = function forEachInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from < leftLen &&\n this.left.forEachInner(f, from, Math.min(to, leftLen), start) === false)\n { return false }\n if (to > leftLen &&\n this.right.forEachInner(f, Math.max(from - leftLen, 0), Math.min(this.length, to) - leftLen, start + leftLen) === false)\n { return false }\n };\n\n Append.prototype.forEachInvertedInner = function forEachInvertedInner (f, from, to, start) {\n var leftLen = this.left.length;\n if (from > leftLen &&\n this.right.forEachInvertedInner(f, from - leftLen, Math.max(to, leftLen) - leftLen, start + leftLen) === false)\n { return false }\n if (to < leftLen &&\n this.left.forEachInvertedInner(f, Math.min(from, leftLen), to, start) === false)\n { return false }\n };\n\n Append.prototype.sliceInner = function sliceInner (from, to) {\n if (from == 0 && to == this.length) { return this }\n var leftLen = this.left.length;\n if (to <= leftLen) { return this.left.slice(from, to) }\n if (from >= leftLen) { return this.right.slice(from - leftLen, to - leftLen) }\n return this.left.slice(from, leftLen).append(this.right.slice(0, to - leftLen))\n };\n\n Append.prototype.leafAppend = function leafAppend (other) {\n var inner = this.right.leafAppend(other);\n if (inner) { return new Append(this.left, inner) }\n };\n\n Append.prototype.leafPrepend = function leafPrepend (other) {\n var inner = this.left.leafPrepend(other);\n if (inner) { return new Append(inner, this.right) }\n };\n\n Append.prototype.appendInner = function appendInner (other) {\n if (this.left.depth >= Math.max(this.right.depth, other.depth) + 1)\n { return new Append(this.left, new Append(this.right, other)) }\n return new Append(this, other)\n };\n\n return Append;\n}(RopeSequence));\n\nvar ropeSequence = RopeSequence;\n\nexport default ropeSequence;\n","import RopeSequence from 'rope-sequence';\nimport { Mapping } from 'prosemirror-transform';\nimport { PluginKey, Plugin } from 'prosemirror-state';\n\n// ProseMirror's history isn't simply a way to roll back to a previous\n// state, because ProseMirror supports applying changes without adding\n// them to the history (for example during collaboration).\n//\n// To this end, each 'Branch' (one for the undo history and one for\n// the redo history) keeps an array of 'Items', which can optionally\n// hold a step (an actual undoable change), and always hold a position\n// map (which is needed to move changes below them to apply to the\n// current document).\n//\n// An item that has both a step and a selection bookmark is the start\n// of an 'event' — a group of changes that will be undone or redone at\n// once. (It stores only the bookmark, since that way we don't have to\n// provide a document until the selection is actually applied, which\n// is useful when compressing.)\n// Used to schedule history compression\nconst max_empty_items = 500;\nclass Branch {\n constructor(items, eventCount) {\n this.items = items;\n this.eventCount = eventCount;\n }\n // Pop the latest event off the branch's history and apply it\n // to a document transform.\n popEvent(state, preserveItems) {\n if (this.eventCount == 0)\n return null;\n let end = this.items.length;\n for (;; end--) {\n let next = this.items.get(end - 1);\n if (next.selection) {\n --end;\n break;\n }\n }\n let remap, mapFrom;\n if (preserveItems) {\n remap = this.remapping(end, this.items.length);\n mapFrom = remap.maps.length;\n }\n let transform = state.tr;\n let selection, remaining;\n let addAfter = [], addBefore = [];\n this.items.forEach((item, i) => {\n if (!item.step) {\n if (!remap) {\n remap = this.remapping(end, i + 1);\n mapFrom = remap.maps.length;\n }\n mapFrom--;\n addBefore.push(item);\n return;\n }\n if (remap) {\n addBefore.push(new Item(item.map));\n let step = item.step.map(remap.slice(mapFrom)), map;\n if (step && transform.maybeStep(step).doc) {\n map = transform.mapping.maps[transform.mapping.maps.length - 1];\n addAfter.push(new Item(map, undefined, undefined, addAfter.length + addBefore.length));\n }\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n }\n else {\n transform.maybeStep(item.step);\n }\n if (item.selection) {\n selection = remap ? item.selection.map(remap.slice(mapFrom)) : item.selection;\n remaining = new Branch(this.items.slice(0, end).append(addBefore.reverse().concat(addAfter)), this.eventCount - 1);\n return false;\n }\n }, this.items.length, 0);\n return { remaining: remaining, transform, selection: selection };\n }\n // Create a new branch with the given transform added.\n addTransform(transform, selection, histOptions, preserveItems) {\n let newItems = [], eventCount = this.eventCount;\n let oldItems = this.items, lastItem = !preserveItems && oldItems.length ? oldItems.get(oldItems.length - 1) : null;\n for (let i = 0; i < transform.steps.length; i++) {\n let step = transform.steps[i].invert(transform.docs[i]);\n let item = new Item(transform.mapping.maps[i], step, selection), merged;\n if (merged = lastItem && lastItem.merge(item)) {\n item = merged;\n if (i)\n newItems.pop();\n else\n oldItems = oldItems.slice(0, oldItems.length - 1);\n }\n newItems.push(item);\n if (selection) {\n eventCount++;\n selection = undefined;\n }\n if (!preserveItems)\n lastItem = item;\n }\n let overflow = eventCount - histOptions.depth;\n if (overflow > DEPTH_OVERFLOW) {\n oldItems = cutOffEvents(oldItems, overflow);\n eventCount -= overflow;\n }\n return new Branch(oldItems.append(newItems), eventCount);\n }\n remapping(from, to) {\n let maps = new Mapping;\n this.items.forEach((item, i) => {\n let mirrorPos = item.mirrorOffset != null && i - item.mirrorOffset >= from\n ? maps.maps.length - item.mirrorOffset : undefined;\n maps.appendMap(item.map, mirrorPos);\n }, from, to);\n return maps;\n }\n addMaps(array) {\n if (this.eventCount == 0)\n return this;\n return new Branch(this.items.append(array.map(map => new Item(map))), this.eventCount);\n }\n // When the collab module receives remote changes, the history has\n // to know about those, so that it can adjust the steps that were\n // rebased on top of the remote changes, and include the position\n // maps for the remote changes in its array of items.\n rebased(rebasedTransform, rebasedCount) {\n if (!this.eventCount)\n return this;\n let rebasedItems = [], start = Math.max(0, this.items.length - rebasedCount);\n let mapping = rebasedTransform.mapping;\n let newUntil = rebasedTransform.steps.length;\n let eventCount = this.eventCount;\n this.items.forEach(item => { if (item.selection)\n eventCount--; }, start);\n let iRebased = rebasedCount;\n this.items.forEach(item => {\n let pos = mapping.getMirror(--iRebased);\n if (pos == null)\n return;\n newUntil = Math.min(newUntil, pos);\n let map = mapping.maps[pos];\n if (item.step) {\n let step = rebasedTransform.steps[pos].invert(rebasedTransform.docs[pos]);\n let selection = item.selection && item.selection.map(mapping.slice(iRebased + 1, pos));\n if (selection)\n eventCount++;\n rebasedItems.push(new Item(map, step, selection));\n }\n else {\n rebasedItems.push(new Item(map));\n }\n }, start);\n let newMaps = [];\n for (let i = rebasedCount; i < newUntil; i++)\n newMaps.push(new Item(mapping.maps[i]));\n let items = this.items.slice(0, start).append(newMaps).append(rebasedItems);\n let branch = new Branch(items, eventCount);\n if (branch.emptyItemCount() > max_empty_items)\n branch = branch.compress(this.items.length - rebasedItems.length);\n return branch;\n }\n emptyItemCount() {\n let count = 0;\n this.items.forEach(item => { if (!item.step)\n count++; });\n return count;\n }\n // Compressing a branch means rewriting it to push the air (map-only\n // items) out. During collaboration, these naturally accumulate\n // because each remote change adds one. The `upto` argument is used\n // to ensure that only the items below a given level are compressed,\n // because `rebased` relies on a clean, untouched set of items in\n // order to associate old items with rebased steps.\n compress(upto = this.items.length) {\n let remap = this.remapping(0, upto), mapFrom = remap.maps.length;\n let items = [], events = 0;\n this.items.forEach((item, i) => {\n if (i >= upto) {\n items.push(item);\n if (item.selection)\n events++;\n }\n else if (item.step) {\n let step = item.step.map(remap.slice(mapFrom)), map = step && step.getMap();\n mapFrom--;\n if (map)\n remap.appendMap(map, mapFrom);\n if (step) {\n let selection = item.selection && item.selection.map(remap.slice(mapFrom));\n if (selection)\n events++;\n let newItem = new Item(map.invert(), step, selection), merged, last = items.length - 1;\n if (merged = items.length && items[last].merge(newItem))\n items[last] = merged;\n else\n items.push(newItem);\n }\n }\n else if (item.map) {\n mapFrom--;\n }\n }, this.items.length, 0);\n return new Branch(RopeSequence.from(items.reverse()), events);\n }\n}\nBranch.empty = new Branch(RopeSequence.empty, 0);\nfunction cutOffEvents(items, n) {\n let cutPoint;\n items.forEach((item, i) => {\n if (item.selection && (n-- == 0)) {\n cutPoint = i;\n return false;\n }\n });\n return items.slice(cutPoint);\n}\nclass Item {\n constructor(\n // The (forward) step map for this item.\n map, \n // The inverted step\n step, \n // If this is non-null, this item is the start of a group, and\n // this selection is the starting selection for the group (the one\n // that was active before the first step was applied)\n selection, \n // If this item is the inverse of a previous mapping on the stack,\n // this points at the inverse's offset\n mirrorOffset) {\n this.map = map;\n this.step = step;\n this.selection = selection;\n this.mirrorOffset = mirrorOffset;\n }\n merge(other) {\n if (this.step && other.step && !other.selection) {\n let step = other.step.merge(this.step);\n if (step)\n return new Item(step.getMap().invert(), step, this.selection);\n }\n }\n}\n// The value of the state field that tracks undo/redo history for that\n// state. Will be stored in the plugin state when the history plugin\n// is active.\nclass HistoryState {\n constructor(done, undone, prevRanges, prevTime) {\n this.done = done;\n this.undone = undone;\n this.prevRanges = prevRanges;\n this.prevTime = prevTime;\n }\n}\nconst DEPTH_OVERFLOW = 20;\n// Record a transformation in undo history.\nfunction applyTransaction(history, state, tr, options) {\n let historyTr = tr.getMeta(historyKey), rebased;\n if (historyTr)\n return historyTr.historyState;\n if (tr.getMeta(closeHistoryKey))\n history = new HistoryState(history.done, history.undone, null, 0);\n let appended = tr.getMeta(\"appendedTransaction\");\n if (tr.steps.length == 0) {\n return history;\n }\n else if (appended && appended.getMeta(historyKey)) {\n if (appended.getMeta(historyKey).redo)\n return new HistoryState(history.done.addTransform(tr, undefined, options, mustPreserveItems(state)), history.undone, rangesFor(tr.mapping.maps[tr.steps.length - 1]), history.prevTime);\n else\n return new HistoryState(history.done, history.undone.addTransform(tr, undefined, options, mustPreserveItems(state)), null, history.prevTime);\n }\n else if (tr.getMeta(\"addToHistory\") !== false && !(appended && appended.getMeta(\"addToHistory\") === false)) {\n // Group transforms that occur in quick succession into one event.\n let newGroup = history.prevTime == 0 || !appended && (history.prevTime < (tr.time || 0) - options.newGroupDelay ||\n !isAdjacentTo(tr, history.prevRanges));\n let prevRanges = appended ? mapRanges(history.prevRanges, tr.mapping) : rangesFor(tr.mapping.maps[tr.steps.length - 1]);\n return new HistoryState(history.done.addTransform(tr, newGroup ? state.selection.getBookmark() : undefined, options, mustPreserveItems(state)), Branch.empty, prevRanges, tr.time);\n }\n else if (rebased = tr.getMeta(\"rebased\")) {\n // Used by the collab module to tell the history that some of its\n // content has been rebased.\n return new HistoryState(history.done.rebased(tr, rebased), history.undone.rebased(tr, rebased), mapRanges(history.prevRanges, tr.mapping), history.prevTime);\n }\n else {\n return new HistoryState(history.done.addMaps(tr.mapping.maps), history.undone.addMaps(tr.mapping.maps), mapRanges(history.prevRanges, tr.mapping), history.prevTime);\n }\n}\nfunction isAdjacentTo(transform, prevRanges) {\n if (!prevRanges)\n return false;\n if (!transform.docChanged)\n return true;\n let adjacent = false;\n transform.mapping.maps[0].forEach((start, end) => {\n for (let i = 0; i < prevRanges.length; i += 2)\n if (start <= prevRanges[i + 1] && end >= prevRanges[i])\n adjacent = true;\n });\n return adjacent;\n}\nfunction rangesFor(map) {\n let result = [];\n map.forEach((_from, _to, from, to) => result.push(from, to));\n return result;\n}\nfunction mapRanges(ranges, mapping) {\n if (!ranges)\n return null;\n let result = [];\n for (let i = 0; i < ranges.length; i += 2) {\n let from = mapping.map(ranges[i], 1), to = mapping.map(ranges[i + 1], -1);\n if (from <= to)\n result.push(from, to);\n }\n return result;\n}\n// Apply the latest event from one branch to the document and shift the event\n// onto the other branch.\nfunction histTransaction(history, state, dispatch, redo) {\n let preserveItems = mustPreserveItems(state);\n let histOptions = historyKey.get(state).spec.config;\n let pop = (redo ? history.undone : history.done).popEvent(state, preserveItems);\n if (!pop)\n return;\n let selection = pop.selection.resolve(pop.transform.doc);\n let added = (redo ? history.done : history.undone).addTransform(pop.transform, state.selection.getBookmark(), histOptions, preserveItems);\n let newHist = new HistoryState(redo ? added : pop.remaining, redo ? pop.remaining : added, null, 0);\n dispatch(pop.transform.setSelection(selection).setMeta(historyKey, { redo, historyState: newHist }).scrollIntoView());\n}\nlet cachedPreserveItems = false, cachedPreserveItemsPlugins = null;\n// Check whether any plugin in the given state has a\n// `historyPreserveItems` property in its spec, in which case we must\n// preserve steps exactly as they came in, so that they can be\n// rebased.\nfunction mustPreserveItems(state) {\n let plugins = state.plugins;\n if (cachedPreserveItemsPlugins != plugins) {\n cachedPreserveItems = false;\n cachedPreserveItemsPlugins = plugins;\n for (let i = 0; i < plugins.length; i++)\n if (plugins[i].spec.historyPreserveItems) {\n cachedPreserveItems = true;\n break;\n }\n }\n return cachedPreserveItems;\n}\n/**\nSet a flag on the given transaction that will prevent further steps\nfrom being appended to an existing history event (so that they\nrequire a separate undo command to undo).\n*/\nfunction closeHistory(tr) {\n return tr.setMeta(closeHistoryKey, true);\n}\nconst historyKey = new PluginKey(\"history\");\nconst closeHistoryKey = new PluginKey(\"closeHistory\");\n/**\nReturns a plugin that enables the undo history for an editor. The\nplugin will track undo and redo stacks, which can be used with the\n[`undo`](https://prosemirror.net/docs/ref/#history.undo) and [`redo`](https://prosemirror.net/docs/ref/#history.redo) commands.\n\nYou can set an `\"addToHistory\"` [metadata\nproperty](https://prosemirror.net/docs/ref/#state.Transaction.setMeta) of `false` on a transaction\nto prevent it from being rolled back by undo.\n*/\nfunction history(config = {}) {\n config = { depth: config.depth || 100,\n newGroupDelay: config.newGroupDelay || 500 };\n return new Plugin({\n key: historyKey,\n state: {\n init() {\n return new HistoryState(Branch.empty, Branch.empty, null, 0);\n },\n apply(tr, hist, state) {\n return applyTransaction(hist, state, tr, config);\n }\n },\n config,\n props: {\n handleDOMEvents: {\n beforeinput(view, e) {\n let inputType = e.inputType;\n let command = inputType == \"historyUndo\" ? undo : inputType == \"historyRedo\" ? redo : null;\n if (!command)\n return false;\n e.preventDefault();\n return command(view.state, view.dispatch);\n }\n }\n }\n });\n}\n/**\nA command function that undoes the last change, if any.\n*/\nconst undo = (state, dispatch) => {\n let hist = historyKey.getState(state);\n if (!hist || hist.done.eventCount == 0)\n return false;\n if (dispatch)\n histTransaction(hist, state, dispatch, false);\n return true;\n};\n/**\nA command function that redoes the last undone change, if any.\n*/\nconst redo = (state, dispatch) => {\n let hist = historyKey.getState(state);\n if (!hist || hist.undone.eventCount == 0)\n return false;\n if (dispatch)\n histTransaction(hist, state, dispatch, true);\n return true;\n};\n/**\nThe amount of undoable events available in a given state.\n*/\nfunction undoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.done.eventCount : 0;\n}\n/**\nThe amount of redoable events available in a given editor state.\n*/\nfunction redoDepth(state) {\n let hist = historyKey.getState(state);\n return hist ? hist.undone.eventCount : 0;\n}\n\nexport { closeHistory, history, redo, redoDepth, undo, undoDepth };\n","/*\r\n * history.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { history, redo, undo } from 'prosemirror-history';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\nimport { Extension } from '../api/extension';\r\n\r\nconst extension: Extension = {\r\n commands: () => {\r\n return [\r\n new ProsemirrorCommand(EditorCommandId.Undo, ['Mod-z'], undo),\r\n new ProsemirrorCommand(EditorCommandId.Redo, ['Shift-Mod-z'], redo),\r\n ];\r\n },\r\n\r\n plugins: () => {\r\n return [history()];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * select_all.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findBlockNodes, ContentNodeWithPos } from 'prosemirror-utils';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\nimport { editingRootNode } from '../api/node';\r\n\r\nconst extension: Extension = {\r\n commands: () => {\r\n return [new ProsemirrorCommand(EditorCommandId.SelectAll, ['Mod-a'], selectAll)];\r\n },\r\n};\r\n\r\nexport function selectAll(state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) {\r\n if (dispatch) {\r\n const editingRoot = editingRootNode(state.selection);\r\n if (editingRoot) {\r\n const schema = state.schema;\r\n const tr = state.tr;\r\n if (editingRoot.node.type === schema.nodes.note) {\r\n tr.setSelection(childBlocksSelection(tr.doc, editingRoot));\r\n } else {\r\n const start = tr.doc.resolve(editingRoot.pos);\r\n const end = tr.doc.resolve(editingRoot.pos + editingRoot.node.nodeSize);\r\n tr.setSelection(new TextSelection(start, end));\r\n }\r\n dispatch(tr);\r\n if (view) {\r\n // we do this to escape from embedded editors e.g. codemirror\r\n view.focus();\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nfunction childBlocksSelection(doc: ProsemirrorNode, parent: ContentNodeWithPos) {\r\n const blocks = findBlockNodes(parent.node);\r\n const begin = parent.start + blocks[0].pos + 1;\r\n const lastBlock = blocks[blocks.length - 1];\r\n const end = parent.start + lastBlock.pos + lastBlock.node.nodeSize;\r\n return TextSelection.create(doc, begin, end);\r\n}\r\n\r\nexport default extension;\r\n","import { Plugin } from 'prosemirror-state';\nimport { dropPoint } from 'prosemirror-transform';\n\n/**\nCreate a plugin that, when added to a ProseMirror instance,\ncauses a decoration to show up at the drop position when something\nis dragged over the editor.\n\nNodes may add a `disableDropCursor` property to their spec to\ncontrol the showing of a drop cursor inside them. This may be a\nboolean or a function, which will be called with a view and a\nposition, and should return a boolean.\n*/\nfunction dropCursor(options = {}) {\n return new Plugin({\n view(editorView) { return new DropCursorView(editorView, options); }\n });\n}\nclass DropCursorView {\n constructor(editorView, options) {\n this.editorView = editorView;\n this.cursorPos = null;\n this.element = null;\n this.timeout = -1;\n this.width = options.width || 1;\n this.color = options.color || \"black\";\n this.class = options.class;\n this.handlers = [\"dragover\", \"dragend\", \"drop\", \"dragleave\"].map(name => {\n let handler = (e) => { this[name](e); };\n editorView.dom.addEventListener(name, handler);\n return { name, handler };\n });\n }\n destroy() {\n this.handlers.forEach(({ name, handler }) => this.editorView.dom.removeEventListener(name, handler));\n }\n update(editorView, prevState) {\n if (this.cursorPos != null && prevState.doc != editorView.state.doc) {\n if (this.cursorPos > editorView.state.doc.content.size)\n this.setCursor(null);\n else\n this.updateOverlay();\n }\n }\n setCursor(pos) {\n if (pos == this.cursorPos)\n return;\n this.cursorPos = pos;\n if (pos == null) {\n this.element.parentNode.removeChild(this.element);\n this.element = null;\n }\n else {\n this.updateOverlay();\n }\n }\n updateOverlay() {\n let $pos = this.editorView.state.doc.resolve(this.cursorPos), rect;\n if (!$pos.parent.inlineContent) {\n let before = $pos.nodeBefore, after = $pos.nodeAfter;\n if (before || after) {\n let node = this.editorView.nodeDOM(this.cursorPos - (before ? before.nodeSize : 0));\n if (node) {\n let nodeRect = node.getBoundingClientRect();\n let top = before ? nodeRect.bottom : nodeRect.top;\n if (before && after)\n top = (top + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2;\n rect = { left: nodeRect.left, right: nodeRect.right, top: top - this.width / 2, bottom: top + this.width / 2 };\n }\n }\n }\n if (!rect) {\n let coords = this.editorView.coordsAtPos(this.cursorPos);\n rect = { left: coords.left - this.width / 2, right: coords.left + this.width / 2, top: coords.top, bottom: coords.bottom };\n }\n let parent = this.editorView.dom.offsetParent;\n if (!this.element) {\n this.element = parent.appendChild(document.createElement(\"div\"));\n if (this.class)\n this.element.className = this.class;\n this.element.style.cssText = \"position: absolute; z-index: 50; pointer-events: none; background-color: \" + this.color;\n }\n let parentLeft, parentTop;\n if (!parent || parent == document.body && getComputedStyle(parent).position == \"static\") {\n parentLeft = -pageXOffset;\n parentTop = -pageYOffset;\n }\n else {\n let rect = parent.getBoundingClientRect();\n parentLeft = rect.left - parent.scrollLeft;\n parentTop = rect.top - parent.scrollTop;\n }\n this.element.style.left = (rect.left - parentLeft) + \"px\";\n this.element.style.top = (rect.top - parentTop) + \"px\";\n this.element.style.width = (rect.right - rect.left) + \"px\";\n this.element.style.height = (rect.bottom - rect.top) + \"px\";\n }\n scheduleRemoval(timeout) {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(() => this.setCursor(null), timeout);\n }\n dragover(event) {\n if (!this.editorView.editable)\n return;\n let pos = this.editorView.posAtCoords({ left: event.clientX, top: event.clientY });\n let node = pos && pos.inside >= 0 && this.editorView.state.doc.nodeAt(pos.inside);\n let disableDropCursor = node && node.type.spec.disableDropCursor;\n let disabled = typeof disableDropCursor == \"function\" ? disableDropCursor(this.editorView, pos, event) : disableDropCursor;\n if (pos && !disabled) {\n let target = pos.pos;\n if (this.editorView.dragging && this.editorView.dragging.slice) {\n target = dropPoint(this.editorView.state.doc, target, this.editorView.dragging.slice);\n if (target == null)\n return this.setCursor(null);\n }\n this.setCursor(target);\n this.scheduleRemoval(5000);\n }\n }\n dragend() {\n this.scheduleRemoval(20);\n }\n drop() {\n this.scheduleRemoval(20);\n }\n dragleave(event) {\n if (event.target == this.editorView.dom || !this.editorView.dom.contains(event.relatedTarget))\n this.setCursor(null);\n }\n}\n\nexport { dropCursor };\n","/*\r\n * cursor.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey, Plugin, EditorState, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { ResolvedPos, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { dropCursor } from 'prosemirror-dropcursor';\r\nimport { gapCursor, GapCursor } from 'prosemirror-gapcursor';\r\nimport 'prosemirror-gapcursor/style/gapcursor.css';\r\n\r\nimport { findParentNodeOfTypeClosestToPos, findParentNodeOfType, findParentNode } from 'prosemirror-utils';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { BaseKey } from '../api/basekeys';\r\nimport { isList } from '../api/list';\r\n\r\nimport './cursor.css';\r\nimport { verticalArrowCanAdvanceWithinTextBlock } from '../api/cursor';\r\n\r\n\r\nconst extension: Extension = {\r\n\r\n baseKeys: () => {\r\n return [\r\n { key: BaseKey.ArrowLeft, command: gapArrowHandler('left') },\r\n { key: BaseKey.ArrowUp, command: gapArrowHandler('up') }\r\n ];\r\n },\r\n\r\n plugins: () => {\r\n return [\r\n gapCursor(), \r\n dropCursor(),\r\n new Plugin({\r\n key: new PluginKey('div-gap-cursor'),\r\n props: {\r\n handleDOMEvents: {\r\n click: gapClickHandler,\r\n },\r\n },\r\n })];\r\n },\r\n};\r\n\r\nfunction gapArrowHandler(dir: 'up' | 'left') {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n \r\n\r\n // function to create a gap cursor\r\n const createGapCursor = ($pos: ResolvedPos) => {\r\n if (dispatch) {\r\n const cursor = new GapCursor($pos);\r\n const tr = state.tr;\r\n tr.setSelection(cursor);\r\n dispatch(tr);\r\n }\r\n return true;\r\n };\r\n\r\n if (state.selection.empty && view && view.endOfTextblock(dir)) {\r\n \r\n // get the selection\r\n const $head = state.selection.$head;\r\n\r\n // if we are in a block that handles up/down (e.g. display math)\r\n // then we don't want to make a gap cursor\r\n if (dir === 'up' && verticalArrowCanAdvanceWithinTextBlock(state.selection, dir)) {\r\n return false;\r\n }\r\n\r\n // check if we are in a div \r\n if (state.schema.nodes.div) {\r\n const div = findParentNodeOfType(state.schema.nodes.div)(state.selection);\r\n \r\n // if we are at the very top of a div then create a gap cursor\r\n if (div) {\r\n \r\n const $divPos = state.doc.resolve(div.pos);\r\n if ($head.index($head.depth - 1) === 0 && !(state.selection instanceof GapCursor)) {\r\n \r\n // if we are in a list item the calculations about view.endOfTextblock will be off\r\n if (findParentNode(isList)(state.selection)) {\r\n return false;\r\n }\r\n \r\n return createGapCursor(state.doc.resolve($divPos.pos + 1));\r\n // if we are between divs then create a gap cursor between them\r\n } else if ($divPos.nodeBefore?.type === state.schema.nodes.div) {\r\n return createGapCursor(state.doc.resolve($divPos.pos));\r\n } \r\n }\r\n }\r\n \r\n\r\n // if we are at the top of the document then create a gap cursor\r\n if (!$head.nodeBefore && ($head.pos <= 2)) {\r\n return createGapCursor(state.doc.resolve($head.pos - 1));\r\n }\r\n \r\n return false;\r\n\r\n } else {\r\n return false;\r\n }\r\n\r\n \r\n };\r\n}\r\n\r\n\r\nfunction gapClickHandler(view: EditorView, event: Event): boolean {\r\n\r\n const schema = view.state.schema;\r\n const mouseEvent = event as MouseEvent;\r\n const clickPos = view.posAtCoords({ left: mouseEvent.clientX, top: mouseEvent.clientY } );\r\n\r\n if (clickPos) {\r\n\r\n // resolve click pos\r\n const $clickPos = view.state.doc.resolve(clickPos.pos); \r\n\r\n // create a gap cursor at the click position\r\n const createGapCursor = () => {\r\n // focus the view\r\n view.focus();\r\n \r\n // create the gap cursor\r\n const tr = view.state.tr;\r\n const cursor = new GapCursor($clickPos); \r\n tr.setSelection(cursor);\r\n view.dispatch(tr);\r\n \r\n // prevent default event handling\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n return false;\r\n };\r\n \r\n // handle clicks at the top of divs\r\n if (schema.nodes.div) {\r\n const div = findParentNodeOfTypeClosestToPos(\r\n view.state.doc.resolve(clickPos.pos), schema.nodes.div\r\n );\r\n if (div && div.pos === clickPos.inside) {\r\n const divNode = view.nodeDOM(div.start);\r\n if (divNode instanceof HTMLElement) {\r\n if (Math.abs(mouseEvent.clientX - divNode.getBoundingClientRect().left) < 150) {\r\n return createGapCursor();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // handle clicks between certain block types that don't have a natural text cursor\r\n // for inserting additioanl content\r\n const blockRequiresGap = (node: ProsemirrorNode | null | undefined) => {\r\n if (node) {\r\n return node.type === schema.nodes.div ||\r\n node.type === schema.nodes.figure ||\r\n node.type === schema.nodes.table ||\r\n node.type === schema.nodes.horizontal_rule ||\r\n node.type === schema.nodes.code_block ||\r\n node.type === schema.nodes.raw_block ||\r\n node.type === schema.nodes.rmd_chunk ||\r\n node.type === schema.nodes.html_preserve ||\r\n node.type === schema.nodes.shortcode_block ||\r\n node.type === schema.nodes.yaml_metadata;\r\n } else {\r\n return false;\r\n }\r\n };\r\n if (!clickPos.inside) {\r\n if (blockRequiresGap($clickPos.nodeBefore) && blockRequiresGap($clickPos.nodeAfter)) {\r\n return createGapCursor();\r\n }\r\n }\r\n\r\n // handle clicks above body\r\n // Take this out for now b/c it was interfering with other mouse \r\n // gestures (e.g. clicking on attr editor). keyboard gestures still\r\n // work to get to the top of the body\r\n /*\r\n if ($clickPos.parent.type === schema.nodes.body &&\r\n $clickPos.start() === $clickPos.pos) {\r\n \r\n return createGapCursor();\r\n\r\n }\r\n */\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * formatting.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { Transform, liftTarget } from 'prosemirror-transform';\r\nimport { trTransform } from './transaction';\r\n\r\n// marks included in clear formatting\r\nconst kFormattingMarks = ['code', 'em', 'underline', 'smallcaps', 'span', 'strikeout', 'strong', 'superscript', 'subscript'];\r\n\r\n// for nodes, all nodes with isTextblock === true will be converted to paragraph, and all\r\n// nodes in this list will be lifted\r\nconst kLiftFormattingNodes = ['blockquote', 'line_block', 'div', 'raw_block'];\r\n\r\nexport function clearFormatting(transaction: Transaction, from: number, to: number) {\r\n\r\n trTransform(transaction, (tr: Transform) => {\r\n // alias schema and selection\r\n const schema = tr.doc.type.schema;\r\n\r\n // clear formatting marks\r\n kFormattingMarks.forEach((markName) => {\r\n const mark = schema.marks[markName];\r\n if (mark) {\r\n tr.removeMark(from, to, mark);\r\n }\r\n });\r\n\r\n // lift / set nodes as required\r\n tr.doc.nodesBetween(from, to, (node: ProsemirrorNode, pos: number) => {\r\n // ignore paragraph and text nodes (already have 'cleared' formatting)\r\n if (\r\n node.type === schema.nodes.paragraph ||\r\n node.type === schema.nodes.text\r\n ) {\r\n return;\r\n }\r\n\r\n // pass recursively through list container nodes\r\n if (\r\n node.type === schema.nodes.bullet_list ||\r\n node.type === schema.nodes.ordered_list ||\r\n node.type === schema.nodes.definition_list ||\r\n node.type === schema.nodes.definition_list_term ||\r\n node.type === schema.nodes.definition_list_description\r\n ) {\r\n return;\r\n }\r\n\r\n // get node range (map positions)\r\n const fromPos = tr.doc.resolve(tr.mapping.map(pos + 1));\r\n const toPos = tr.doc.resolve(tr.mapping.map(pos + node.nodeSize - 1));\r\n const nodeRange = fromPos.blockRange(toPos);\r\n\r\n // process text blocks and blocks that can be lifted (e.g. blockquote)\r\n if (nodeRange) {\r\n if (node.type.isTextblock) {\r\n tr.setNodeMarkup(nodeRange.start, schema.nodes.paragraph);\r\n } else if (kLiftFormattingNodes.includes(node.type.name)) {\r\n const targetLiftDepth = liftTarget(nodeRange);\r\n if (targetLiftDepth || targetLiftDepth === 0) {\r\n tr.lift(nodeRange, targetLiftDepth);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n transaction.setStoredMarks([]);\r\n \r\n return transaction;\r\n}\r\n","/*\r\n * clear_formatting.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\nimport { clearFormatting } from '../api/formatting';\r\n\r\nconst extension: Extension = {\r\n commands: () => {\r\n return [new ProsemirrorCommand(EditorCommandId.ClearFormatting, ['Mod-\\\\'], (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const { from, to } = tr.selection;\r\n clearFormatting(tr, from, to);\r\n dispatch(tr);\r\n }\r\n return true;\r\n })];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * smarty.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { Extension, extensionIfEnabled } from '../api/extension';\r\n\r\n\r\n// match enDash but only for lines that aren't an html comment\r\nconst enDash = new InputRule(/[^!-`]--$/, (state: EditorState, _match: string[], _start: number, end: number) => {\r\n const { parent, parentOffset } = state.selection.$head;\r\n const precedingText = parent.textBetween(0, parentOffset);\r\n if (precedingText.indexOf('<!--') === -1) {\r\n const tr = state.tr;\r\n tr.insertText('–', end - 1, end);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n});\r\n\r\nconst emDash = new InputRule(/(^|[^`])–-$/, (state: EditorState, _match: string[], _start: number, end: number) => {\r\n const tr = state.tr;\r\n tr.insertText('—', end - 1, end);\r\n return tr;\r\n});\r\n\r\nconst extension: Extension = {\r\n inputRules: () => {\r\n return [enDash, emDash];\r\n }\r\n};\r\n\r\nexport default extensionIfEnabled(extension, 'smart');\r\n","/*\r\n * attr_duplicate_id.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Step, AddMarkStep } from 'prosemirror-transform';\r\nimport { findChildren } from 'prosemirror-utils';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { getMarkAttrs, getMarkRange } from '../api/mark';\r\nimport { extensionIfPandocAttrEnabled } from '../api/pandoc_attr';\r\n\r\nconst extension: Extension = {\r\n appendTransaction: () => {\r\n // detect changes in content with ids\r\n const hasAttrId = (node: ProsemirrorNode) => {\r\n return !!node.attrs.id || node.marks.some(mark => !!mark.attrs.id);\r\n };\r\n\r\n // detect mark steps with new ids\r\n const attrMarkStep = (step: Step) => {\r\n return step instanceof AddMarkStep && !!step.mark.attrs.id;\r\n };\r\n\r\n return [\r\n {\r\n name: 'attr_duplicate_id',\r\n filter: (transactions: readonly Transaction[]) => transactions.some(transaction => transaction.steps.some(attrMarkStep)),\r\n nodeFilter: hasAttrId,\r\n append: (tr: Transaction) => {\r\n const usedIds = new Set<string>();\r\n const scannedRanges: Array<{ from: number; to: number }> = [];\r\n findChildren(tr.doc, hasAttrId, true).forEach(attrNode => {\r\n if (attrNode.node.attrs.id) {\r\n const id = attrNode.node.attrs.id;\r\n if (usedIds.has(id)) {\r\n const node = attrNode.node;\r\n tr.setNodeMarkup(attrNode.pos, undefined, { ...node.attrs, id: null }, node.marks);\r\n } else {\r\n usedIds.add(id);\r\n }\r\n } else {\r\n const mark = attrNode.node.marks.find(mk => !!mk.attrs.id)!;\r\n const markRange = getMarkRange(tr.doc.resolve(attrNode.pos), mark.type) as { from: number; to: number };\r\n const markAttrs = getMarkAttrs(tr.doc, markRange, mark.type);\r\n const id = markAttrs.id;\r\n if (id && !scannedRanges.find(range => range.from === markRange.from && range.to === markRange.to)) {\r\n scannedRanges.push(markRange);\r\n if (usedIds.has(id)) {\r\n tr.removeMark(markRange.from, markRange.to, mark.type);\r\n tr.addMark(markRange.from, markRange.to, mark.type.create({ ...mark.attrs, id: null }));\r\n } else {\r\n usedIds.add(id);\r\n }\r\n }\r\n }\r\n });\r\n },\r\n },\r\n ];\r\n },\r\n};\r\n\r\nexport default extensionIfPandocAttrEnabled(extension);\r\n","/*\r\n * trailing_p.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { Extension } from '../api/extension';\r\nimport { FixupContext } from '../api/fixup';\r\nimport { requiresTrailingP, insertTrailingP } from '../api/trailing_p';\r\n\r\nconst extension: Extension = {\r\n fixups: () => {\r\n return [\r\n (tr: Transaction, context: FixupContext) => {\r\n if (context === FixupContext.Load) {\r\n if (requiresTrailingP(tr.selection)) {\r\n insertTrailingP(tr);\r\n }\r\n }\r\n return tr;\r\n },\r\n ];\r\n },\r\n\r\n appendTransaction: () => {\r\n return [\r\n {\r\n name: 'trailing_p',\r\n append: (tr: Transaction) => {\r\n if (requiresTrailingP(tr.selection)) {\r\n insertTrailingP(tr);\r\n }\r\n return tr;\r\n },\r\n },\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * empty_mark.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction, EditorState } from 'prosemirror-state';\r\nimport { ReplaceStep } from 'prosemirror-transform';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { getMarkRange } from '../api/mark';\r\n\r\nconst extension: Extension = {\r\n appendTransaction: () => {\r\n return [\r\n {\r\n name: 'clear_empty_mark',\r\n append: (tr: Transaction, transactions: readonly Transaction[], _oldState: EditorState, newState: EditorState) => {\r\n // if we have an empty selection\r\n if (newState.selection.empty) {\r\n // if the last change removed text\r\n const removedText = transactions.some(transaction =>\r\n transaction.steps.some(step => {\r\n return step instanceof ReplaceStep && step.slice.content.size === 0;\r\n }),\r\n );\r\n if (removedText) {\r\n // if there is a stored mark w/ 0 range then remove it\r\n newState.storedMarks?.forEach(mark => {\r\n const markRange = getMarkRange(tr.doc.resolve(tr.selection.from), mark.type);\r\n if (!markRange || markRange.from === markRange.to) {\r\n tr.removeStoredMark(mark);\r\n }\r\n });\r\n }\r\n }\r\n },\r\n },\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * escape_mark.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { BaseKey } from '../api/basekeys';\r\nimport { Extension } from '../api/extension';\r\n\r\nconst extension: Extension = {\r\n baseKeys: () => {\r\n return [\r\n {\r\n key: BaseKey.ArrowRight,\r\n command: (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (state.selection.empty) {\r\n // if we are at the end of a parent text block and there are\r\n // marks stored in the state or active on the selection then\r\n // clear the stored marks and insert a space.\r\n const $head = state.selection.$head;\r\n const parent = $head.node($head.depth);\r\n if (\r\n parent.type.isTextblock &&\r\n $head.parentOffset === parent.textContent.length &&\r\n ($head.marks().length > 0 || !!state.storedMarks)\r\n ) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.setStoredMarks([]);\r\n tr.insertText(' ');\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n },\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * code_block_input.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Schema, ResolvedPos, Fragment, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { PandocExtensions } from '../api/pandoc';\r\nimport { EditorFormat } from '../api/format';\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\nimport { precedingListItemInsertPos, precedingListItemInsert } from '../api/list';\r\nimport { pandocAttrFrom } from '../api/pandoc_attr';\r\nimport { BaseKey } from '../api/basekeys';\r\n\r\nimport { markIsActive } from '../api/mark';\r\nimport { canInsertRmdChunk } from '../api/rmd';\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { pandocExtensions, format } = context;\r\n\r\n const fencedAttributes = pandocExtensions.fenced_code_attributes || !!format.rmdExtensions.codeChunks;\r\n\r\n return {\r\n baseKeys: () => {\r\n return [{ key: BaseKey.Enter, command: codeBlockInputRuleEnter(pandocExtensions, fencedAttributes, format) }];\r\n },\r\n\r\n inputRules: () => {\r\n if (fencedAttributes) {\r\n return [\r\n new InputRule(/^```+{$/, (state: EditorState, match: string[], start: number) => {\r\n if (!canApplyCodeBlockInputRule(state)) {\r\n return null;\r\n }\r\n const tr = state.tr;\r\n tr.insertText('{}');\r\n setTextSelection(start + match[0].length)(tr);\r\n return tr;\r\n }),\r\n ];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n};\r\n\r\nfunction codeBlockInputRuleEnter(pandocExtensions: PandocExtensions, fencedAttributes: boolean, format: EditorFormat) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // see if the parent consist of a pending code block input rule\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n\r\n // selection must be empty\r\n if (!state.selection.empty) {\r\n return false;\r\n }\r\n\r\n // full text of parent must meet the pattern\r\n // eslint-disable-next-line no-useless-escape\r\n const match = $head.parent.textContent.match(/^```+(?:(\\w+)|\\{([\\.=]?[^\\}]+)\\})?$/);\r\n if (!match) {\r\n return false;\r\n }\r\n\r\n // no inline code marks\r\n if (markIsActive(state, schema.marks.code)) {\r\n return false;\r\n }\r\n\r\n // must be able to perform the replacement\r\n if (!canApplyCodeBlockInputRule(state)) {\r\n return false;\r\n }\r\n\r\n // determine nature of insert\r\n const fenced = fencedAttributes && !!match[2];\r\n const langAttrib = fenced ? match[2] : match[1] || '';\r\n const rawBlock = fenced && pandocExtensions.raw_attribute && langAttrib.match(/^=\\w.*$/);\r\n const rmdChunk = fenced && !!format.rmdExtensions.codeChunks && langAttrib.match(/^\\w.*$/);\r\n\r\n // if it's an rmd chunk then apply further validation\r\n if (rmdChunk && !canInsertRmdChunk(state)) {\r\n return false;\r\n }\r\n\r\n // execute\r\n if (dispatch) {\r\n // eslint-disable-next-line no-useless-escape\r\n const lang = langAttrib.replace(/^[\\.=]/, '');\r\n\r\n // create transaction and clear input\r\n const tr = state.tr;\r\n const start = $head.start();\r\n const end = start + $head.parent.textContent.length;\r\n tr.deleteRange(start, end);\r\n\r\n // determine type and attrs\r\n const type = rawBlock ? schema.nodes.raw_block : rmdChunk ? schema.nodes.rmd_chunk : schema.nodes.code_block;\r\n const content = rmdChunk ? schema.text(`{${match[2]}}\\n`) : Fragment.empty;\r\n const attrs = rawBlock ? { format: lang } : !rmdChunk && lang.length ? pandocAttrFrom({ classes: [lang] }) : {};\r\n\r\n // see if this should go into a preceding list item\r\n const prevListItemPos = precedingListItemInsertPos(state.doc, state.selection);\r\n if (prevListItemPos) {\r\n const block = type.createAndFill(attrs, content) as ProsemirrorNode;\r\n precedingListItemInsert(tr, prevListItemPos, block);\r\n } else {\r\n tr.insert(start, content);\r\n tr.setBlockType(start, start, type, attrs);\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nfunction canReplaceNodeWithCodeBlock(schema: Schema, $pos: ResolvedPos) {\r\n return $pos.node(-1).canReplaceWith($pos.index(-1), $pos.indexAfter(-1), schema.nodes.code_block);\r\n}\r\n\r\nfunction canApplyCodeBlockInputRule(state: EditorState) {\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n return canReplaceNodeWithCodeBlock(schema, $head) || precedingListItemInsertPos(state.doc, state.selection);\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * plain_text_paste.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { isWindows } from 'core-browser';\r\nimport { ResolvedPos, Schema, Fragment, Slice, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState, Plugin, PluginKey, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { ExtensionContext } from '../api/extension';\r\nimport { mapFragment } from '../api/fragment';\r\nimport { EditorMarkdown } from '../api/markdown-types';\r\nimport { clearFormatting } from '../api/formatting';\r\nimport { EditorCommandId, ProsemirrorCommand } from '../api/command';\r\nimport { pasteTransaction } from '../api/clipboard';\r\nimport { isLink, linkPasteHandler } from '../api/link';\r\n\r\nconst kTextPlain = \"text/plain\";\r\nconst kTextHtml = \"text/html\";\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n\r\n let pasteRaw = false;\r\n const collectPasteRaw = () => {\r\n const raw = pasteRaw;\r\n pasteRaw = false;\r\n return raw;\r\n }\r\n\r\n return {\r\n\r\n plugins: (schema: Schema) => [\r\n pastePlugin(\r\n schema, \r\n context.markdown, \r\n collectPasteRaw,\r\n [pasteMarkdownHandler(schema), pasteHtmlHandler(schema)]\r\n )\r\n ],\r\n commands: () => {\r\n const havePaste = document.queryCommandSupported(\"paste\");\r\n if (havePaste) {\r\n return [new ProsemirrorCommand(EditorCommandId.PasteRaw, ['Mod-Shift-v'], \r\n (_state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!document.queryCommandEnabled(\"paste\")) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n pasteRaw = true;\r\n document.execCommand(\"paste\");\r\n }\r\n return true;\r\n })];\r\n } else {\r\n return [];\r\n }\r\n\r\n }\r\n };\r\n}\r\n\r\ntype PasteHandler = (\r\n editorMarkdown: EditorMarkdown,\r\n view: EditorView, \r\n event: ClipboardEvent, \r\n pasteRaw: boolean,\r\n slice: Slice) => boolean;\r\n\r\nfunction pastePlugin(\r\n schema: Schema, \r\n editorMarkdown: EditorMarkdown,\r\n pasteRaw: () => boolean,\r\n handlers: PasteHandler[]) {\r\n\r\n let shiftPaste = false;\r\n\r\n return new Plugin({\r\n key: new PluginKey('paste-handler'),\r\n\r\n props: {\r\n\r\n // detect shift paste (required for chrome which handles Cmd+Shift+v natively)\r\n handleKeyDown: (_, event) => { \r\n shiftPaste = event.key === 'v' && (event.metaKey || event.ctrlKey) && event.shiftKey; \r\n },\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n clipboardTextParser: (text: string, $context: ResolvedPos) : any => {\r\n // if it's a single line then create a slice w/ marks from the active context\r\n if (text.indexOf('\\n') === -1) {\r\n const marks = $context.marks();\r\n const textNode = schema.text(text, marks);\r\n return new Slice(Fragment.from(textNode), 0, 0);\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n // NOTE: this issue is fixed in later versions of prosemirror so we can \r\n // remove once we've upgraded. see https://github.com/ProseMirror/prosemirror-view/pull/144\r\n transformPastedHTML(html) {\r\n if (isWindows()) {\r\n const fragments = html.match(/<!--StartFragment-->(.*)<!--EndFragment-->/); \r\n if (fragments) {\r\n return fragments[1];\r\n }\r\n }\r\n return html;\r\n },\r\n\r\n // call all of the paste handlers\r\n handlePaste(view, event, slice) {\r\n const raw = pasteRaw() || shiftPaste;\r\n for (const handler of handlers) {\r\n const handled = handler(editorMarkdown, view, event, raw, slice);\r\n if (handled) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n });\r\n\r\n}\r\n\r\n\r\n\r\nfunction pasteMarkdownHandler(\r\n schema: Schema\r\n) {\r\n\r\n const linkHandler = linkPasteHandler(schema);\r\n\r\n return (editorMarkdown: EditorMarkdown,\r\n view: EditorView, \r\n event: ClipboardEvent, \r\n pasteRaw: boolean,\r\n slice: Slice) => {\r\n \r\n // must be in a location valid for a markdown paste\r\n if (!editorMarkdown.allowMarkdownPaste(view.state)) {\r\n return false;\r\n }\r\n \r\n // inspect clipboard and selection state\r\n const { clipboardData } = event;\r\n const text = clipboardData?.getData(kTextPlain);\r\n const html = clipboardData?.getData(kTextHtml);\r\n const isVscode = isVscodePaste(clipboardData, html);\r\n \r\n // must have text/plain\r\n if (!text) {\r\n return false;\r\n }\r\n \r\n // text/html is a disqualifier, save for pastes from vscode\r\n // (where we need to steer around using the html version of the code)\r\n if (html && !isVscode) {\r\n return false;\r\n }\r\n \r\n editorMarkdown.markdownToSlice(text, slice.openStart, slice.openEnd).then(slice => {\r\n \r\n // convert bare links into markdown links\r\n slice = linkHandler(slice);\r\n\r\n // prepare paste transaction\r\n const tr = pasteTransaction(view.state);\r\n \r\n // if there is a selection and the slice is a single link then apply the mark\r\n const sliceText = slice.content.textBetween(0, slice.content.size);\r\n if (!tr.selection.empty && isLink(sliceText)) {\r\n tr.addMark(\r\n tr.selection.from, \r\n tr.selection.to, \r\n schema.marks.link.create({ href: sliceText })\r\n );\r\n } else {\r\n const prevSel = tr.selection;\r\n tr.replaceSelection(slice);\r\n if (pasteRaw) {\r\n clearFormatting(tr, prevSel.from, prevSel.from + slice.size);\r\n } \r\n }\r\n view.dispatch(tr);\r\n });\r\n \r\n return true; \r\n \r\n }\r\n\r\n}\r\n \r\n\r\n\r\n\r\nfunction pasteHtmlHandler(\r\n schema: Schema\r\n) {\r\n return (_editorMarkdown: EditorMarkdown,\r\n view: EditorView, \r\n event: ClipboardEvent, \r\n pasteRaw: boolean,\r\n slice: Slice) => {\r\n \r\n if (!event.clipboardData) {\r\n return false;\r\n }\r\n \r\n // helper to paste slice\r\n const pasteSlice = (s: Slice) => {\r\n const tr = view.state.tr;\r\n const prevSel = tr.selection;\r\n tr.replaceSelection(s);\r\n if (pasteRaw) {;\r\n clearFormatting(tr, prevSel.from, prevSel.from + slice.size)\r\n } \r\n view.dispatch(tr);\r\n }\r\n \r\n // if this contains office content or we are on windows then handle it\r\n // (office content has excessive internal vertical space, windows has\r\n // issues w/ prosemirror freezing in its paste implementation when handling\r\n // multiple paragraphs)\r\n const kTextHtml = \"text/html\";\r\n const kWordSchema = \"urn:schemas-microsoft-com:office:word\";\r\n if (event.clipboardData.types.includes(kTextHtml)) {\r\n const html = event.clipboardData.getData(kTextHtml);\r\n if (html.includes(kWordSchema) || isWindows()) {\r\n // filter out nodes with empty paragraphs\r\n const nodes: ProsemirrorNode[] = [];\r\n for (let i = 0; i < slice.content.childCount; i++) {\r\n const node = slice.content.child(i)\r\n if (node.textContent.trim() !== \"\") {\r\n const newNode = node.type.createAndFill(node.attrs, mapFragment(node.content, nd => {\r\n if (nd.isText) {\r\n return schema.text(nd.text!.replace(/\\n/g, ' '), nd.marks);\r\n } else {\r\n return nd;\r\n }\r\n }), node.marks);\r\n nodes.push(newNode || node);\r\n }\r\n }\r\n const fragment = Fragment.fromArray(nodes);\r\n const newSlice = new Slice(fragment, slice.openStart, slice.openEnd);\r\n pasteSlice(newSlice); \r\n return true;\r\n } else if (pasteRaw) {\r\n pasteSlice(slice);\r\n return true;\r\n }\r\n }\r\n \r\n return false;\r\n }\r\n}\r\n \r\n\r\n// detect vscode paste\r\nconst kVscodeEditorData = \"vscode-editor-data\";\r\nconst kVscodeRegex = /^<div.*?orphans: auto;.*?widows: auto.*?white-space: pre;/;\r\nfunction isVscodePaste(clipboardData: DataTransfer | null, html: string | undefined) {\r\n if (clipboardData?.types.some((type) => type === kVscodeEditorData)) {\r\n return true;\r\n } else if (html && html.match(kVscodeRegex)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * bottom_padding.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey } from 'prosemirror-state';\r\nimport { Schema } from 'prosemirror-model';\r\n\r\nimport zenscroll from 'zenscroll';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { selectionWithinLastBodyParagraph } from '../api/selection';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { bodyElement } from '../api/dom';\r\nimport { findParentNodeOfType } from 'prosemirror-utils';\r\nimport { editorScrollContainer } from '../api/scroll';\r\n\r\n// when we get close to the bottom, we autoscroll to provide more padding\r\nconst kAutoscrollGapPx = 25;\r\n\r\nconst extension: Extension = {\r\n plugins: (schema: Schema) => {\r\n return [\r\n new Plugin({\r\n key: new PluginKey('bottom_padding'),\r\n view: () => ({\r\n update: (view: EditorView) => {\r\n const selection = view.state.selection;\r\n if (selectionWithinLastBodyParagraph(selection)) {\r\n const paragraphNode = findParentNodeOfType(schema.nodes.paragraph)(selection);\r\n if (paragraphNode) {\r\n const paragraphEl = view.nodeDOM(paragraphNode.pos) as HTMLElement;\r\n const paragraphRect = paragraphEl.getBoundingClientRect();\r\n const editorEl = view.dom;\r\n const editorRect = editorEl.getBoundingClientRect();\r\n if (Math.abs(paragraphRect.bottom - editorRect.bottom) < kAutoscrollGapPx) {\r\n const bodyEl = bodyElement(view);\r\n const scroller = zenscroll.createScroller(editorScrollContainer(bodyEl));\r\n scroller.toY(bodyEl.scrollHeight, 0);\r\n }\r\n }\r\n }\r\n },\r\n }),\r\n }),\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * unicode.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// Tries to parse a unicode codepoint string that a user might enter\r\n// For example:\r\n// U+2A1F\r\n// 2A1F\r\n// 10783\r\nconst kMinValidCodepoint = 0;\r\nconst kMaxValidCodepoint = 1114112;\r\n\r\nconst kHexCodepointPrefix = 'U+';\r\nconst kHexNumberPrefex = '0x';\r\n\r\nexport function parseCodepoint(codepointText: string): number | undefined {\r\n // Try parsing it as a base 10 int\r\n // Use non primitive Number so we get strict parsing\r\n const base10Value = Number(codepointText).valueOf();\r\n if (!Number.isNaN(base10Value)) {\r\n if (isValidCodepoint(base10Value)) {\r\n return base10Value;\r\n }\r\n }\r\n\r\n // It might have a user prefix for unicode character, remove\r\n let hexOnlyText = codepointText.toUpperCase();\r\n if (hexOnlyText.startsWith(kHexCodepointPrefix.toUpperCase())) {\r\n hexOnlyText = codepointText.substr(kHexCodepointPrefix.length, codepointText.length - kHexCodepointPrefix.length);\r\n }\r\n\r\n // try parsing it as a hex string\r\n // Use non primitive Number so we get strict parsing, prefix with 0x to ensure treatment as hex\r\n if (!hexOnlyText.startsWith(kHexNumberPrefex)) {\r\n hexOnlyText = kHexNumberPrefex + hexOnlyText;\r\n }\r\n const hexValue = Number(hexOnlyText).valueOf();\r\n if (!Number.isNaN(hexValue) && isValidCodepoint(hexValue)) {\r\n return hexValue;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction isValidCodepoint(codepoint: number) {\r\n return codepoint > kMinValidCodepoint && codepoint < kMaxValidCodepoint;\r\n}\r\n","/*\r\n * focus.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport function isElementFocused(element: HTMLElement | null): boolean {\r\n if (element) {\r\n return window.document.activeElement === element;\r\n }\r\n return false;\r\n}\r\n\r\nexport function focusElement(element: HTMLElement | null) {\r\n if (element) {\r\n element.focus();\r\n }\r\n}\r\n","/*\r\n * select.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { ChangeEventHandler, ReactNode } from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nexport interface SelectInputProps extends WidgetProps {\r\n tabIndex?: number;\r\n className?: string;\r\n onChange?: ChangeEventHandler;\r\n children: ReactNode;\r\n defaultValue?: string;\r\n}\r\n\r\nexport const SelectInput = React.forwardRef<HTMLSelectElement, SelectInputProps>((props, ref) => {\r\n const style: React.CSSProperties = {\r\n ...props.style,\r\n };\r\n\r\n return (\r\n <select\r\n className={`pm-input-select pm-background-color pm-pane-border-color pm-text-color ${props.className}`}\r\n style={style}\r\n tabIndex={props.tabIndex}\r\n ref={ref}\r\n onChange={props.onChange}\r\n defaultValue={props.defaultValue}\r\n >\r\n {props.children}\r\n </select>\r\n );\r\n});\r\n","/*\r\n * text.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { ChangeEventHandler, KeyboardEventHandler, FocusEventHandler, ClipboardEventHandler } from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nimport './text.css';\r\n\r\nexport interface TextInputProps extends WidgetProps {\r\n width: string;\r\n tabIndex?: number;\r\n className?: string;\r\n placeholder?: string;\r\n iconAdornment?: string;\r\n value?: string;\r\n onChange?: ChangeEventHandler;\r\n onKeyDown?: KeyboardEventHandler<HTMLInputElement>;\r\n onKeyUp?: KeyboardEventHandler<HTMLInputElement>;\r\n onKeyPress?: KeyboardEventHandler<HTMLInputElement>;\r\n onBlur?: FocusEventHandler<HTMLInputElement>;\r\n onPaste?: ClipboardEventHandler<HTMLInputElement>;\r\n onFocus?: FocusEventHandler<HTMLInputElement>;\r\n}\r\n\r\nexport const TextInput = React.forwardRef<HTMLInputElement, TextInputProps>((props, ref) => {\r\n // Allow specifying an actual width (e.g. a percentage) or a character width\r\n // If a character width is specified, we should prefer to use the size attribute of the input\r\n // as the focus widget that is added to focus elements is confused by the 'ch' size in styles\r\n const characterWidth = props.width.endsWith('ch')\r\n ? parseInt(props.width.substr(0, props.width.length - 2), 10)\r\n : undefined;\r\n const style: React.CSSProperties = {\r\n ...props.style,\r\n width: characterWidth ? undefined : props.width,\r\n };\r\n\r\n return (\r\n <div className=\"pm-textinput-container\" style={style}>\r\n {props.iconAdornment ? <img src={props.iconAdornment} className=\"pm-textinput-icon\" alt=\"\" draggable=\"false\"/> : undefined}\r\n <input\r\n type=\"text\"\r\n placeholder={props.placeholder}\r\n size={characterWidth}\r\n className={`\r\n pm-input-text \r\n pm-textinput-input \r\n pm-text-color \r\n pm-background-color \r\n ${props.className}\r\n ${props.iconAdornment ? 'pm-textinput-input-with-icon' : ''}`}\r\n value={props.value !== undefined ? props.value : undefined}\r\n onChange={props.onChange}\r\n onKeyDown={props.onKeyDown}\r\n onKeyUp={props.onKeyUp}\r\n onKeyPress={props.onKeyPress}\r\n onBlur={props.onBlur}\r\n onFocus={props.onFocus}\r\n tabIndex={props.tabIndex}\r\n onPaste={props.onPaste}\r\n ref={ref}\r\n spellCheck={false}\r\n />\r\n </div>\r\n );\r\n});\r\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}","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 _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollLeft ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/*\r\n * insert_symbol-grid-cell.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\nimport { GridChildComponentProps } from 'react-window';\r\n\r\nimport { SymbolCharacter } from './insert_symbol-dataprovider';\r\n\r\nexport interface CharacterGridCellItemData {\r\n symbolCharacters: SymbolCharacter[];\r\n numberOfColumns: number;\r\n selectedIndex: number;\r\n selectedItemClassName: string;\r\n onSelectionChanged: (selectedIndex: number) => void;\r\n onSelectionCommitted: VoidFunction;\r\n}\r\n\r\nexport const SymbolCharacterCell = (props: GridChildComponentProps) => {\r\n const characterGridCellItemData = props.data as CharacterGridCellItemData;\r\n const symbolCharacters = characterGridCellItemData.symbolCharacters;\r\n const itemIndex = props.rowIndex * characterGridCellItemData.numberOfColumns + props.columnIndex;\r\n\r\n const handleMouseEnter = () => {\r\n characterGridCellItemData.onSelectionChanged(itemIndex);\r\n };\r\n\r\n // If we don't handle and eat the mouse down event, the mouse down will propagate to the parent\r\n // editor and result in loss of focus to this element\r\n const handleMouseDown = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n const handleMouseClick = (event: React.MouseEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n characterGridCellItemData.onSelectionCommitted();\r\n };\r\n\r\n if (itemIndex < symbolCharacters.length) {\r\n const ch = symbolCharacters[itemIndex];\r\n return (\r\n <div\r\n tabIndex={-1}\r\n style={props.style}\r\n className=\"pm-symbol-grid-container\"\r\n onClick={handleMouseClick}\r\n onMouseDown={handleMouseDown}\r\n onMouseEnter={handleMouseEnter}\r\n >\r\n <div\r\n className={`pm-symbol-grid-cell pm-grid-item pm-emoji-font ${\r\n characterGridCellItemData.selectedIndex === itemIndex ? characterGridCellItemData.selectedItemClassName : ''\r\n }`}\r\n >\r\n {ch.value || ''}\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n return null;\r\n }\r\n};\r\n","/*\r\n * insert_symbol-grid.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\nimport { FixedSizeGrid } from 'react-window';\r\n\r\nimport debounce from 'lodash.debounce';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\n\r\nimport { CharacterGridCellItemData, SymbolCharacterCell } from './insert_symbol-grid-cell';\r\nimport { SymbolCharacter } from './insert_symbol-dataprovider';\r\n\r\nimport './insert_symbol-grid-styles.css';\r\n\r\ninterface CharacterGridProps extends WidgetProps {\r\n height: number;\r\n width: number;\r\n numberOfColumns: number;\r\n symbolCharacters: SymbolCharacter[];\r\n selectedIndex: number;\r\n onSelectionChanged: (selectedIndex: number) => void;\r\n onSelectionCommitted: VoidFunction;\r\n ui: EditorUI;\r\n}\r\n\r\nconst selectedItemClassName = 'pm-grid-item-selected';\r\n\r\nconst SymbolCharacterGrid = React.forwardRef<HTMLDivElement, CharacterGridProps>((props, ref) => {\r\n const columnWidth = Math.floor(props.width / props.numberOfColumns);\r\n const characterCellData: CharacterGridCellItemData = {\r\n symbolCharacters: props.symbolCharacters,\r\n numberOfColumns: props.numberOfColumns,\r\n selectedIndex: props.selectedIndex,\r\n onSelectionChanged: props.onSelectionChanged,\r\n onSelectionCommitted: props.onSelectionCommitted,\r\n selectedItemClassName,\r\n };\r\n\r\n const gridRef = React.useRef<FixedSizeGrid>(null);\r\n const handleScroll = debounce(() => {\r\n gridRef.current?.scrollToItem({ rowIndex: Math.floor(props.selectedIndex / props.numberOfColumns) });\r\n }, 5);\r\n\r\n React.useEffect(handleScroll, [props.selectedIndex]);\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n const newIndex = newIndexForKeyboardEvent(\r\n event,\r\n props.selectedIndex,\r\n props.numberOfColumns,\r\n props.symbolCharacters.length,\r\n );\r\n if (newIndex !== undefined) {\r\n props.onSelectionChanged(newIndex);\r\n event.preventDefault();\r\n }\r\n };\r\n\r\n return (\r\n <div onKeyDown={handleKeyDown} tabIndex={0} ref={ref}>\r\n <FixedSizeGrid\r\n columnCount={props.numberOfColumns}\r\n rowCount={Math.ceil(props.symbolCharacters.length / props.numberOfColumns)}\r\n height={props.height}\r\n width={props.width + 1}\r\n rowHeight={columnWidth}\r\n columnWidth={columnWidth}\r\n itemData={characterCellData}\r\n className=\"pm-symbol-grid\"\r\n ref={gridRef}\r\n >\r\n {SymbolCharacterCell}\r\n </FixedSizeGrid>\r\n </div>\r\n );\r\n});\r\n\r\nfunction previous(currentIndex: number): number {\r\n const newIndex = currentIndex - 1;\r\n return Math.max(0, newIndex);\r\n}\r\nfunction next(currentIndex: number, _numberOfColumns: number, numberOfCells: number): number {\r\n const newIndex = currentIndex + 1;\r\n return Math.min(numberOfCells - 1, newIndex);\r\n}\r\nfunction prevRow(currentIndex: number, numberOfColumns: number): number {\r\n const newIndex = currentIndex - numberOfColumns;\r\n return newIndex >= 0 ? newIndex : currentIndex;\r\n}\r\nfunction nextRow(currentIndex: number, numberOfColumns: number, numberOfCells: number): number {\r\n const newIndex = currentIndex + numberOfColumns;\r\n return newIndex < numberOfCells ? newIndex : currentIndex;\r\n}\r\nfunction nextPage(currentIndex: number, numberOfColumns: number, numberOfCells: number): number {\r\n const newIndex = currentIndex + 6 * numberOfColumns;\r\n return Math.min(numberOfCells - 1, newIndex);\r\n}\r\nfunction prevPage(currentIndex: number, numberOfColumns: number): number {\r\n const newIndex = currentIndex - 6 * numberOfColumns;\r\n return Math.max(0, newIndex);\r\n}\r\n\r\nexport const newIndexForKeyboardEvent = (\r\n event: React.KeyboardEvent,\r\n selectedIndex: number,\r\n numberOfColumns: number,\r\n numberOfCells: number,\r\n): number | undefined => {\r\n switch (event.key) {\r\n case 'ArrowLeft': // left\r\n return previous(selectedIndex);\r\n\r\n case 'ArrowUp': // up\r\n return prevRow(selectedIndex, numberOfColumns);\r\n\r\n case 'ArrowRight': // right\r\n return next(selectedIndex, numberOfColumns, numberOfCells);\r\n\r\n case 'ArrowDown': // down\r\n return nextRow(selectedIndex, numberOfColumns, numberOfCells);\r\n\r\n case 'PageDown':\r\n return nextPage(selectedIndex, numberOfColumns, numberOfCells);\r\n\r\n case 'PageUp':\r\n return prevPage(selectedIndex, numberOfColumns);\r\n\r\n case 'Home':\r\n return 0;\r\n\r\n case 'End':\r\n return numberOfCells - 1;\r\n\r\n default:\r\n return undefined;\r\n }\r\n};\r\n\r\nexport default SymbolCharacterGrid;\r\n","/*\r\n * insert_symbol-grid-preview.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { CSSProperties, ReactNode } from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\n\r\nimport { SymbolCharacter } from './insert_symbol-dataprovider';\r\n\r\nimport './insert_symbol-grid-preview.css';\r\n\r\ninterface SymbolPreviewProps extends WidgetProps {\r\n symbolCharacter: SymbolCharacter;\r\n symbolPreviewStyle: CSSProperties;\r\n ui: EditorUI;\r\n children: ReactNode;\r\n}\r\n\r\nexport const SymbolPreview = React.forwardRef<any, SymbolPreviewProps>((props, ref) => {\r\n return (\r\n <div style={{ height: '54px' }} className=\"pm-popup-insert-symbol-preview-container\" ref={ref}>\r\n <div className=\"pm-popup-insert-symbol-preview-thumbnail\">\r\n <div style={props.symbolPreviewStyle}>{props.symbolCharacter.value}</div>\r\n <div className=\"pm-popup-insert-symbol-preview-summary\">\r\n <div className=\"pm-popup-insert-symbol-preview-name pm-text-color\">\r\n {props.ui.context.translateText(props.symbolCharacter.name)}\r\n </div>\r\n <div className=\"pm-popup-insert-symbol-preview-markdown pm-light-text-color\">\r\n {props.symbolCharacter.markdown || `U+${props.symbolCharacter.codepoint?.toString(16)}`}\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"pm-popup-insert-symbol-preview-action\">{props.children}</div>\r\n </div>\r\n );\r\n});\r\n","/*\r\n * insert_symbol-popup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { ChangeEvent } from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { isElementFocused, focusElement } from '../../api/focus';\r\nimport { Popup } from '../../api/widgets/popup';\r\nimport { SelectInput } from '../../api/widgets/select';\r\nimport { TextInput } from '../../api/widgets/text';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\n\r\nimport { SymbolDataProvider, SymbolCharacter } from './insert_symbol-dataprovider';\r\nimport SymbolCharacterGrid, { newIndexForKeyboardEvent } from './insert_symbol-grid';\r\n\r\nimport './insert_symbol-styles.css';\r\nimport { SymbolPreview } from './insert_symbol-grid-preview';\r\n\r\ninterface InsertSymbolPopupProps extends WidgetProps {\r\n symbolDataProvider: SymbolDataProvider;\r\n enabled: boolean;\r\n size: [number, number];\r\n onInsertSymbol: (symbolCharacter: SymbolCharacter, searchTerm: string) => void;\r\n onClose: VoidFunction;\r\n ui: EditorUI;\r\n searchImage?: string;\r\n searchPlaceholder?: string;\r\n}\r\n\r\nexport const InsertSymbolPopup: React.FC<InsertSymbolPopupProps> = props => {\r\n const kPopupChromeHeight = 25;\r\n const popupHeight = props.size[0] - kPopupChromeHeight;\r\n const popupWidth = props.size[1];\r\n const style: React.CSSProperties = {\r\n ...props.style,\r\n height: popupHeight + 'px',\r\n width: popupWidth + 'px',\r\n };\r\n const classNames = ['pm-popup-insert-symbol'].concat(props.classes || []);\r\n\r\n const gridHeight = popupHeight - 108;\r\n const gridWidth = popupWidth;\r\n const kNumberOfcolumns = 11;\r\n\r\n const [filterText, setFilterText] = React.useState<string>('');\r\n const [selectedSymbolGroup, setSelectedSymbolGroup] = React.useState<string>();\r\n const [selectedSymbolIndex, setSelectedSymbolIndex] = React.useState<number>(0);\r\n const [preferenceChanged, setPreferenceChanged] = React.useState<number>(0);\r\n\r\n const symbols = React.useMemo(() => props.symbolDataProvider.getSymbols(selectedSymbolGroup), [\r\n selectedSymbolGroup,\r\n preferenceChanged,\r\n props.symbolDataProvider,\r\n ]);\r\n const filteredSymbols = React.useMemo(() => props.symbolDataProvider.filterSymbols(filterText.toLowerCase(), symbols), [\r\n filterText,\r\n symbols,\r\n props.symbolDataProvider,\r\n ]);\r\n\r\n // If the symbol list gets shorter than the selected index, move\r\n // selected cell into range\r\n React.useEffect(() => {\r\n if (selectedSymbolIndex > filteredSymbols.length) {\r\n setSelectedSymbolIndex(Math.max(filteredSymbols.length - 1, 0));\r\n }\r\n }, [selectedSymbolIndex, filteredSymbols]);\r\n\r\n let textRef: HTMLInputElement | null;\r\n const onTextRef = (ref: HTMLInputElement) => {\r\n textRef = ref;\r\n setTimeout(() => focusElement(textRef), 0);\r\n };\r\n\r\n const selectRef = React.useRef<HTMLSelectElement>(null);\r\n const gridRef = React.useRef<HTMLDivElement>(null);\r\n const preferenceRef = React.useRef<HTMLElement>(null);\r\n\r\n const options = props.symbolDataProvider.symbolGroupNames().map(name => (\r\n <option key={name} value={name}>\r\n {props.ui.context.translateText(name)}\r\n </option>\r\n ));\r\n\r\n const handleSelectChanged = (event: ChangeEvent<Element>) => {\r\n const value: string = (event.target as HTMLSelectElement).selectedOptions[0].value;\r\n const selectedGroupName: string | undefined = props.symbolDataProvider\r\n .symbolGroupNames()\r\n .find(name => name === value);\r\n if (selectedGroupName) {\r\n setSelectedSymbolGroup(selectedGroupName);\r\n }\r\n };\r\n\r\n const handleKeyboardEvent = (event: React.KeyboardEvent<HTMLElement>) => {\r\n // The last element might be the preference panel, if a provider\r\n // provides one\r\n function lastElement(): React.RefObject<HTMLElement> {\r\n if (preferenceRef.current !== null) {\r\n return preferenceRef;\r\n }\r\n return gridRef;\r\n }\r\n\r\n // Global Key Handling\r\n switch (event.key) {\r\n case 'Escape':\r\n // Esc key - close popup\r\n props.onClose();\r\n event.preventDefault();\r\n break;\r\n\r\n case 'Tab':\r\n if (event.shiftKey && isElementFocused(textRef)) {\r\n focusElement(lastElement().current);\r\n event.preventDefault();\r\n } else if (!event.shiftKey && isElementFocused(lastElement().current)) {\r\n focusElement(textRef);\r\n event.preventDefault();\r\n }\r\n break;\r\n\r\n case 'Enter':\r\n if (isElementFocused(textRef) || isElementFocused(gridRef.current)) {\r\n handleSelectedSymbolCommitted();\r\n event.preventDefault();\r\n }\r\n break;\r\n\r\n case 'ArrowLeft':\r\n case 'ArrowRight':\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n case 'PageUp':\r\n case 'PageDown':\r\n // If the text filter is focused, forward arrow keys to the grid. If other elements are focused\r\n // they may need to handle arrow keys, so don't handle them in this case\r\n if (isElementFocused(textRef) && !event.shiftKey && !event.altKey && !event.ctrlKey) {\r\n const newIndex = newIndexForKeyboardEvent(\r\n event,\r\n selectedSymbolIndex,\r\n kNumberOfcolumns,\r\n filteredSymbols.length,\r\n );\r\n if (newIndex !== undefined && newIndex >= 0 && newIndex !== selectedSymbolIndex) {\r\n event.preventDefault();\r\n setSelectedSymbolIndex(newIndex);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const handleSelectedSymbolChanged = (symbolIndex: number) => {\r\n setSelectedSymbolIndex(symbolIndex);\r\n };\r\n\r\n const handleSelectedSymbolCommitted = () => {\r\n if (filteredSymbols.length > selectedSymbolIndex) {\r\n props.onInsertSymbol(filteredSymbols[selectedSymbolIndex], textRef?.value || '');\r\n }\r\n };\r\n\r\n const handleTextChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setFilterText(event?.target.value);\r\n };\r\n\r\n const handlePreferencesChanged = () => {\r\n setPreferenceChanged(preferenceChanged + 1);\r\n };\r\n\r\n const preferencesProps = {\r\n selectedSymbolIndex,\r\n context: props.ui.context,\r\n prefs: props.ui.prefs,\r\n onPreferencesChanged: handlePreferencesChanged,\r\n ref: preferenceRef,\r\n };\r\n\r\n const preferencesPanel = props.symbolDataProvider.symbolPreferencesPanel\r\n ? React.createElement(props.symbolDataProvider.symbolPreferencesPanel, preferencesProps)\r\n : undefined;\r\n\r\n return (\r\n <Popup classes={classNames} style={style}>\r\n <div onKeyDown={handleKeyboardEvent}>\r\n <div className=\"pm-popup-insert-symbol-search-container\" style={{ width: gridWidth }}>\r\n <TextInput\r\n width={20 + 'ch'}\r\n iconAdornment={props.searchImage}\r\n tabIndex={0}\r\n className=\"pm-popup-insert-symbol-search-textbox\"\r\n placeholder={props.searchPlaceholder}\r\n onChange={handleTextChange}\r\n ref={onTextRef}\r\n />\r\n <SelectInput\r\n tabIndex={0}\r\n ref={selectRef}\r\n className=\"pm-popup-insert-symbol-select-category\"\r\n onChange={handleSelectChanged}\r\n >\r\n {options}\r\n </SelectInput>\r\n </div>\r\n\r\n <hr className=\"pm-popup-insert-symbol-separator pm-border-background-color\" />\r\n <div className=\"pm-popup-insert-symbol-grid-container\">\r\n <SymbolCharacterGrid\r\n symbolCharacters={filteredSymbols}\r\n selectedIndex={selectedSymbolIndex}\r\n onSelectionChanged={handleSelectedSymbolChanged}\r\n onSelectionCommitted={handleSelectedSymbolCommitted}\r\n height={gridHeight}\r\n width={gridWidth}\r\n numberOfColumns={kNumberOfcolumns}\r\n ref={gridRef}\r\n ui={props.ui}\r\n />\r\n <div\r\n className=\"pm-popup-insert-symbol-no-matching pm-light-text-color\"\r\n style={{ display: filteredSymbols.length > 0 ? 'none' : 'block' }}\r\n >\r\n No matching symbols\r\n </div>\r\n </div>\r\n <hr className=\"pm-popup-insert-symbol-separator pm-border-background-color\" />\r\n {filteredSymbols[selectedSymbolIndex] && (\r\n <SymbolPreview\r\n symbolCharacter={filteredSymbols[selectedSymbolIndex]}\r\n symbolPreviewStyle={props.symbolDataProvider.symbolPreviewStyle}\r\n ui={props.ui}\r\n >\r\n {preferencesPanel}\r\n </SymbolPreview>\r\n )}\r\n </div>\r\n </Popup>\r\n );\r\n};\r\n","/*\r\n * insert_symbol-plugin.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction, Plugin, PluginKey } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport React from 'react';\r\n\r\nimport { applyStyles } from '../../api/css';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { EditorUI } from '../../api/ui-types';\r\n\r\nimport { InsertSymbolPopup } from './insert_symbol-popup';\r\nimport { SymbolDataProvider, SymbolCharacter } from './insert_symbol-dataprovider';\r\n\r\nimport { ScrollEvent } from '../../api/event-types';\r\nimport { createRoot, Root } from 'react-dom/client';\r\n\r\nconst kMinimumPanelPaddingToEdgeOfView = 5;\r\n\r\nexport const performInsertSymbol = (pluginKey: PluginKey<boolean>) => {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n if (!isEnabled(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch && view) {\r\n const plugin = pluginKey.get(state) as InsertSymbolPlugin;\r\n plugin.showPopup(view);\r\n }\r\n return true;\r\n };\r\n};\r\n\r\nfunction isEnabled(state: EditorState) {\r\n return canInsertNode(state, state.schema.nodes.text);\r\n}\r\n\r\nexport class InsertSymbolPlugin extends Plugin<boolean> {\r\n private readonly scrollUnsubscribe: VoidFunction;\r\n private readonly ui: EditorUI;\r\n private popup: { popup: HTMLElement, root: Root } | null = null;\r\n private dataProvider: SymbolDataProvider;\r\n\r\n constructor(pluginKey: PluginKey<boolean>, dataProvider: SymbolDataProvider, ui: EditorUI, events: EditorEvents) {\r\n super({\r\n key: pluginKey,\r\n view: () => ({\r\n update: () => {\r\n this.closePopup();\r\n },\r\n destroy: () => {\r\n this.closePopup();\r\n this.scrollUnsubscribe();\r\n window.document.removeEventListener('onfocus', this.focusChanged);\r\n },\r\n }),\r\n });\r\n\r\n this.dataProvider = dataProvider;\r\n this.ui = ui;\r\n this.closePopup = this.closePopup.bind(this);\r\n this.scrollUnsubscribe = events.subscribe(ScrollEvent, this.closePopup);\r\n\r\n this.focusChanged = this.focusChanged.bind(this);\r\n window.document.addEventListener('onfocus', this.focusChanged);\r\n }\r\n\r\n public showPopup(view: EditorView) {\r\n if (!this.popup) {\r\n const kHeight = 336;\r\n const kWidth = 450;\r\n const popup = window.document.createElement('div');\r\n popup.tabIndex = 0;\r\n popup.style.position = 'absolute';\r\n popup.style.zIndex = '900';\r\n applyStyles(popup, [], this.panelPositionStylesForCurrentSelection(view, kHeight, kWidth));\r\n const root = createRoot(popup);\r\n root.render(this.insertSymbolPopup(view, [kHeight, kWidth]));\r\n window.document.body.appendChild(popup);\r\n this.popup = { popup, root };\r\n }\r\n }\r\n\r\n private panelPositionStylesForCurrentSelection(view: EditorView, height: number, width: number) {\r\n const selection = view.state.selection;\r\n const editorRect = view.dom.getBoundingClientRect();\r\n\r\n const selectionCoords = view.coordsAtPos(selection.from);\r\n\r\n const maximumTopPosition = Math.min(\r\n selectionCoords.bottom,\r\n window.innerHeight - height - kMinimumPanelPaddingToEdgeOfView,\r\n );\r\n const minimumTopPosition = editorRect.y;\r\n const popupTopPosition = Math.max(minimumTopPosition, maximumTopPosition);\r\n\r\n const maximumLeftPosition = Math.min(\r\n selectionCoords.right,\r\n window.innerWidth - width - kMinimumPanelPaddingToEdgeOfView,\r\n );\r\n const minimumLeftPosition = editorRect.x;\r\n const popupLeftPosition = Math.max(minimumLeftPosition, maximumLeftPosition);\r\n\r\n // styles we'll return\r\n const styles = {\r\n top: popupTopPosition + 'px',\r\n left: popupLeftPosition + 'px',\r\n };\r\n\r\n return styles;\r\n }\r\n\r\n private focusChanged() {\r\n if (window.document.activeElement !== this.popup?.popup && !this.popup?.popup.contains(window.document.activeElement)) {\r\n this.closePopup();\r\n }\r\n }\r\n\r\n private closePopup() {\r\n if (this.popup) {\r\n this.popup.root.unmount();\r\n this.popup.popup.remove();\r\n this.popup = null;\r\n }\r\n }\r\n\r\n private insertSymbolPopup(view: EditorView, size: [number, number]) {\r\n const insertSymbol = (symbolCharacter: SymbolCharacter, searchTerm: string) => {\r\n const tr = this.dataProvider.insertSymbolTransaction(symbolCharacter, searchTerm, view.state);\r\n view.dispatch(tr);\r\n view.focus();\r\n };\r\n\r\n const closePopup = () => {\r\n this.closePopup();\r\n view.focus();\r\n };\r\n\r\n return (\r\n <InsertSymbolPopup\r\n symbolDataProvider={this.dataProvider}\r\n onClose={closePopup}\r\n onInsertSymbol={insertSymbol}\r\n enabled={isEnabled(view.state)}\r\n size={size}\r\n searchImage={this.ui.images.search}\r\n searchPlaceholder={this.ui.context.translateText(this.dataProvider.filterPlaceholderHint)}\r\n ui={this.ui}\r\n />\r\n );\r\n }\r\n}\r\n","import { SymbolCharacterGroup } from './insert_symbol-dataprovider';\r\n\r\nconst symbols: SymbolCharacterGroup[] = [\r\n {\r\n name: 'Miscellaneous',\r\n symbols: [\r\n {\r\n name: 'NO-BREAK SPACE',\r\n value: ' ',\r\n codepoint: 160,\r\n },\r\n {\r\n name: 'INVERTED EXCLAMATION MARK',\r\n value: '¡',\r\n codepoint: 161,\r\n },\r\n {\r\n name: 'CENT SIGN',\r\n value: '¢',\r\n codepoint: 162,\r\n },\r\n {\r\n name: 'POUND SIGN',\r\n value: '£',\r\n codepoint: 163,\r\n },\r\n {\r\n name: 'CURRENCY SIGN',\r\n value: '¤',\r\n codepoint: 164,\r\n },\r\n {\r\n name: 'YEN SIGN',\r\n value: '¥',\r\n codepoint: 165,\r\n },\r\n {\r\n name: 'BROKEN BAR',\r\n value: '¦',\r\n codepoint: 166,\r\n },\r\n {\r\n name: 'SECTION SIGN',\r\n value: '§',\r\n codepoint: 167,\r\n },\r\n {\r\n name: 'DIAERESIS',\r\n value: '¨',\r\n codepoint: 168,\r\n },\r\n {\r\n name: 'FEMININE ORDINAL INDICATOR',\r\n value: 'ª',\r\n codepoint: 170,\r\n },\r\n {\r\n name: 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK',\r\n value: '«',\r\n codepoint: 171,\r\n },\r\n {\r\n name: 'NOT SIGN',\r\n value: '¬',\r\n codepoint: 172,\r\n },\r\n {\r\n name: 'MACRON',\r\n value: '¯',\r\n codepoint: 175,\r\n },\r\n {\r\n name: 'DEGREE SIGN',\r\n value: '°',\r\n codepoint: 176,\r\n },\r\n {\r\n name: 'PLUS-MINUS SIGN',\r\n value: '±',\r\n codepoint: 177,\r\n },\r\n {\r\n name: 'SUPERSCRIPT TWO',\r\n value: '²',\r\n codepoint: 178,\r\n },\r\n {\r\n name: 'SUPERSCRIPT THREE',\r\n value: '³',\r\n codepoint: 179,\r\n },\r\n {\r\n name: 'ACUTE ACCENT',\r\n value: '´',\r\n codepoint: 180,\r\n },\r\n {\r\n name: 'MICRO SIGN',\r\n value: 'µ',\r\n codepoint: 181,\r\n },\r\n {\r\n name: 'PILCROW SIGN',\r\n value: '¶',\r\n codepoint: 182,\r\n },\r\n {\r\n name: 'MIDDLE DOT',\r\n value: '·',\r\n codepoint: 183,\r\n },\r\n {\r\n name: 'CEDILLA',\r\n value: '¸',\r\n codepoint: 184,\r\n },\r\n {\r\n name: 'SUPERSCRIPT ONE',\r\n value: '¹',\r\n codepoint: 185,\r\n },\r\n {\r\n name: 'MASCULINE ORDINAL INDICATOR',\r\n value: 'º',\r\n codepoint: 186,\r\n },\r\n {\r\n name: 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK',\r\n value: '»',\r\n codepoint: 187,\r\n },\r\n {\r\n name: 'VULGAR FRACTION ONE QUARTER',\r\n value: '¼',\r\n codepoint: 188,\r\n },\r\n {\r\n name: 'VULGAR FRACTION ONE HALF',\r\n value: '½',\r\n codepoint: 189,\r\n },\r\n {\r\n name: 'VULGAR FRACTION THREE QUARTERS',\r\n value: '¾',\r\n codepoint: 190,\r\n },\r\n {\r\n name: 'INVERTED QUESTION MARK',\r\n value: '¿',\r\n codepoint: 191,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER A WITH GRAVE',\r\n value: 'À',\r\n codepoint: 192,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER A WITH ACUTE',\r\n value: 'Á',\r\n codepoint: 193,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX',\r\n value: 'Â',\r\n codepoint: 194,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER A WITH TILDE',\r\n value: 'Ã',\r\n codepoint: 195,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER A WITH DIAERESIS',\r\n value: 'Ä',\r\n codepoint: 196,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER A WITH RING ABOVE',\r\n value: 'Å',\r\n codepoint: 197,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER AE',\r\n value: 'Æ',\r\n codepoint: 198,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER C WITH CEDILLA',\r\n value: 'Ç',\r\n codepoint: 199,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER E WITH GRAVE',\r\n value: 'È',\r\n codepoint: 200,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER E WITH ACUTE',\r\n value: 'É',\r\n codepoint: 201,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX',\r\n value: 'Ê',\r\n codepoint: 202,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER E WITH DIAERESIS',\r\n value: 'Ë',\r\n codepoint: 203,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER I WITH GRAVE',\r\n value: 'Ì',\r\n codepoint: 204,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER I WITH ACUTE',\r\n value: 'Í',\r\n codepoint: 205,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX',\r\n value: 'Î',\r\n codepoint: 206,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER I WITH DIAERESIS',\r\n value: 'Ï',\r\n codepoint: 207,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER ETH',\r\n value: 'Ð',\r\n codepoint: 208,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER N WITH TILDE',\r\n value: 'Ñ',\r\n codepoint: 209,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER O WITH GRAVE',\r\n value: 'Ò',\r\n codepoint: 210,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER O WITH ACUTE',\r\n value: 'Ó',\r\n codepoint: 211,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX',\r\n value: 'Ô',\r\n codepoint: 212,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER O WITH TILDE',\r\n value: 'Õ',\r\n codepoint: 213,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER O WITH DIAERESIS',\r\n value: 'Ö',\r\n codepoint: 214,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN',\r\n value: '×',\r\n codepoint: 215,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER O WITH STROKE',\r\n value: 'Ø',\r\n codepoint: 216,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER U WITH GRAVE',\r\n value: 'Ù',\r\n codepoint: 217,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER U WITH ACUTE',\r\n value: 'Ú',\r\n codepoint: 218,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX',\r\n value: 'Û',\r\n codepoint: 219,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER U WITH DIAERESIS',\r\n value: 'Ü',\r\n codepoint: 220,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER Y WITH ACUTE',\r\n value: 'Ý',\r\n codepoint: 221,\r\n },\r\n {\r\n name: 'LATIN CAPITAL LETTER THORN',\r\n value: 'Þ',\r\n codepoint: 222,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER SHARP S',\r\n value: 'ß',\r\n codepoint: 223,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER A WITH GRAVE',\r\n value: 'à',\r\n codepoint: 224,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER A WITH ACUTE',\r\n value: 'á',\r\n codepoint: 225,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER A WITH CIRCUMFLEX',\r\n value: 'â',\r\n codepoint: 226,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER A WITH TILDE',\r\n value: 'ã',\r\n codepoint: 227,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER A WITH DIAERESIS',\r\n value: 'ä',\r\n codepoint: 228,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER A WITH RING ABOVE',\r\n value: 'å',\r\n codepoint: 229,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER AE',\r\n value: 'æ',\r\n codepoint: 230,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER C WITH CEDILLA',\r\n value: 'ç',\r\n codepoint: 231,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER E WITH GRAVE',\r\n value: 'è',\r\n codepoint: 232,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER E WITH ACUTE',\r\n value: 'é',\r\n codepoint: 233,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER E WITH CIRCUMFLEX',\r\n value: 'ê',\r\n codepoint: 234,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER E WITH DIAERESIS',\r\n value: 'ë',\r\n codepoint: 235,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER I WITH GRAVE',\r\n value: 'ì',\r\n codepoint: 236,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER I WITH ACUTE',\r\n value: 'í',\r\n codepoint: 237,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER I WITH CIRCUMFLEX',\r\n value: 'î',\r\n codepoint: 238,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER I WITH DIAERESIS',\r\n value: 'ï',\r\n codepoint: 239,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER ETH',\r\n value: 'ð',\r\n codepoint: 240,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER N WITH TILDE',\r\n value: 'ñ',\r\n codepoint: 241,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER O WITH GRAVE',\r\n value: 'ò',\r\n codepoint: 242,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER O WITH ACUTE',\r\n value: 'ó',\r\n codepoint: 243,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER O WITH CIRCUMFLEX',\r\n value: 'ô',\r\n codepoint: 244,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER O WITH TILDE',\r\n value: 'õ',\r\n codepoint: 245,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER O WITH DIAERESIS',\r\n value: 'ö',\r\n codepoint: 246,\r\n },\r\n {\r\n name: 'DIVISION SIGN',\r\n value: '÷',\r\n codepoint: 247,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER O WITH STROKE',\r\n value: 'ø',\r\n codepoint: 248,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER U WITH GRAVE',\r\n value: 'ù',\r\n codepoint: 249,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER U WITH ACUTE',\r\n value: 'ú',\r\n codepoint: 250,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER U WITH CIRCUMFLEX',\r\n value: 'û',\r\n codepoint: 251,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER U WITH DIAERESIS',\r\n value: 'ü',\r\n codepoint: 252,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER Y WITH ACUTE',\r\n value: 'ý',\r\n codepoint: 253,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER THORN',\r\n value: 'þ',\r\n codepoint: 254,\r\n },\r\n {\r\n name: 'LATIN SMALL LETTER Y WITH DIAERESIS',\r\n value: 'ÿ',\r\n codepoint: 255,\r\n },\r\n {\r\n name: 'ACCOUNT OF',\r\n value: '℀',\r\n codepoint: 8448,\r\n },\r\n {\r\n name: 'ADDRESSED TO THE SUBJECT',\r\n value: '℁',\r\n codepoint: 8449,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL C',\r\n value: 'ℂ',\r\n codepoint: 8450,\r\n },\r\n {\r\n name: 'DEGREE CELSIUS',\r\n value: '℃',\r\n codepoint: 8451,\r\n },\r\n {\r\n name: 'CENTRE LINE SYMBOL',\r\n value: '℄',\r\n codepoint: 8452,\r\n },\r\n {\r\n name: 'CARE OF',\r\n value: '℅',\r\n codepoint: 8453,\r\n },\r\n {\r\n name: 'CADA UNA',\r\n value: '℆',\r\n codepoint: 8454,\r\n },\r\n {\r\n name: 'EULER CONSTANT',\r\n value: 'ℇ',\r\n codepoint: 8455,\r\n },\r\n {\r\n name: 'SCRUPLE',\r\n value: '℈',\r\n codepoint: 8456,\r\n },\r\n {\r\n name: 'DEGREE FAHRENHEIT',\r\n value: '℉',\r\n codepoint: 8457,\r\n },\r\n {\r\n name: 'SCRIPT SMALL G',\r\n value: 'ℊ',\r\n codepoint: 8458,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL H',\r\n value: 'ℋ',\r\n codepoint: 8459,\r\n },\r\n {\r\n name: 'BLACK-LETTER CAPITAL H',\r\n value: 'ℌ',\r\n codepoint: 8460,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL H',\r\n value: 'ℍ',\r\n codepoint: 8461,\r\n },\r\n {\r\n name: 'PLANCK CONSTANT',\r\n value: 'ℎ',\r\n codepoint: 8462,\r\n },\r\n {\r\n name: 'PLANCK CONSTANT OVER TWO PI',\r\n value: 'ℏ',\r\n codepoint: 8463,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL I',\r\n value: 'ℐ',\r\n codepoint: 8464,\r\n },\r\n {\r\n name: 'BLACK-LETTER CAPITAL I',\r\n value: 'ℑ',\r\n codepoint: 8465,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL L',\r\n value: 'ℒ',\r\n codepoint: 8466,\r\n },\r\n {\r\n name: 'SCRIPT SMALL L',\r\n value: 'ℓ',\r\n codepoint: 8467,\r\n },\r\n {\r\n name: 'L B BAR SYMBOL',\r\n value: '℔',\r\n codepoint: 8468,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL N',\r\n value: 'ℕ',\r\n codepoint: 8469,\r\n },\r\n {\r\n name: 'NUMERO SIGN',\r\n value: '№',\r\n codepoint: 8470,\r\n },\r\n {\r\n name: 'SOUND RECORDING COPYRIGHT',\r\n value: '℗',\r\n codepoint: 8471,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL P',\r\n value: '℘',\r\n codepoint: 8472,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL P',\r\n value: 'ℙ',\r\n codepoint: 8473,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL Q',\r\n value: 'ℚ',\r\n codepoint: 8474,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL R',\r\n value: 'ℛ',\r\n codepoint: 8475,\r\n },\r\n {\r\n name: 'BLACK-LETTER CAPITAL R',\r\n value: 'ℜ',\r\n codepoint: 8476,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL R',\r\n value: 'ℝ',\r\n codepoint: 8477,\r\n },\r\n {\r\n name: 'PRESCRIPTION TAKE',\r\n value: '℞',\r\n codepoint: 8478,\r\n },\r\n {\r\n name: 'RESPONSE',\r\n value: '℟',\r\n codepoint: 8479,\r\n },\r\n {\r\n name: 'SERVICE MARK',\r\n value: '℠',\r\n codepoint: 8480,\r\n },\r\n {\r\n name: 'TELEPHONE SIGN',\r\n value: '℡',\r\n codepoint: 8481,\r\n },\r\n {\r\n name: 'VERSICLE',\r\n value: '℣',\r\n codepoint: 8483,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL Z',\r\n value: 'ℤ',\r\n codepoint: 8484,\r\n },\r\n {\r\n name: 'OUNCE SIGN',\r\n value: '℥',\r\n codepoint: 8485,\r\n },\r\n {\r\n name: 'OHM SIGN',\r\n value: 'Ω',\r\n codepoint: 8486,\r\n },\r\n {\r\n name: 'INVERTED OHM SIGN',\r\n value: '℧',\r\n codepoint: 8487,\r\n },\r\n {\r\n name: 'BLACK-LETTER CAPITAL Z',\r\n value: 'ℨ',\r\n codepoint: 8488,\r\n },\r\n {\r\n name: 'TURNED GREEK SMALL LETTER IOTA',\r\n value: '℩',\r\n codepoint: 8489,\r\n },\r\n {\r\n name: 'KELVIN SIGN',\r\n value: 'K',\r\n codepoint: 8490,\r\n },\r\n {\r\n name: 'ANGSTROM SIGN',\r\n value: 'Å',\r\n codepoint: 8491,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL B',\r\n value: 'ℬ',\r\n codepoint: 8492,\r\n },\r\n {\r\n name: 'BLACK-LETTER CAPITAL C',\r\n value: 'ℭ',\r\n codepoint: 8493,\r\n },\r\n {\r\n name: 'ESTIMATED SYMBOL',\r\n value: '℮',\r\n codepoint: 8494,\r\n },\r\n {\r\n name: 'SCRIPT SMALL E',\r\n value: 'ℯ',\r\n codepoint: 8495,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL E',\r\n value: 'ℰ',\r\n codepoint: 8496,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL F',\r\n value: 'ℱ',\r\n codepoint: 8497,\r\n },\r\n {\r\n name: 'TURNED CAPITAL F',\r\n value: 'Ⅎ',\r\n codepoint: 8498,\r\n },\r\n {\r\n name: 'SCRIPT CAPITAL M',\r\n value: 'ℳ',\r\n codepoint: 8499,\r\n },\r\n {\r\n name: 'SCRIPT SMALL O',\r\n value: 'ℴ',\r\n codepoint: 8500,\r\n },\r\n {\r\n name: 'ALEF SYMBOL',\r\n value: 'ℵ',\r\n codepoint: 8501,\r\n },\r\n {\r\n name: 'BET SYMBOL',\r\n value: 'ℶ',\r\n codepoint: 8502,\r\n },\r\n {\r\n name: 'GIMEL SYMBOL',\r\n value: 'ℷ',\r\n codepoint: 8503,\r\n },\r\n {\r\n name: 'DALET SYMBOL',\r\n value: 'ℸ',\r\n codepoint: 8504,\r\n },\r\n {\r\n name: 'ROTATED CAPITAL Q',\r\n value: '℺',\r\n codepoint: 8506,\r\n },\r\n {\r\n name: 'FACSIMILE SIGN',\r\n value: '℻',\r\n codepoint: 8507,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK SMALL PI',\r\n value: 'ℼ',\r\n codepoint: 8508,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK SMALL GAMMA',\r\n value: 'ℽ',\r\n codepoint: 8509,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL GAMMA',\r\n value: 'ℾ',\r\n codepoint: 8510,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK CAPITAL PI',\r\n value: 'ℿ',\r\n codepoint: 8511,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK N-ARY SUMMATION',\r\n value: '⅀',\r\n codepoint: 8512,\r\n },\r\n {\r\n name: 'TURNED SANS-SERIF CAPITAL G',\r\n value: '⅁',\r\n codepoint: 8513,\r\n },\r\n {\r\n name: 'TURNED SANS-SERIF CAPITAL L',\r\n value: '⅂',\r\n codepoint: 8514,\r\n },\r\n {\r\n name: 'REVERSED SANS-SERIF CAPITAL L',\r\n value: '⅃',\r\n codepoint: 8515,\r\n },\r\n {\r\n name: 'TURNED SANS-SERIF CAPITAL Y',\r\n value: '⅄',\r\n codepoint: 8516,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK ITALIC CAPITAL D',\r\n value: 'ⅅ',\r\n codepoint: 8517,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK ITALIC SMALL D',\r\n value: 'ⅆ',\r\n codepoint: 8518,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK ITALIC SMALL E',\r\n value: 'ⅇ',\r\n codepoint: 8519,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK ITALIC SMALL I',\r\n value: 'ⅈ',\r\n codepoint: 8520,\r\n },\r\n {\r\n name: 'DOUBLE-STRUCK ITALIC SMALL J',\r\n value: 'ⅉ',\r\n codepoint: 8521,\r\n },\r\n {\r\n name: 'PROPERTY LINE',\r\n value: '⅊',\r\n codepoint: 8522,\r\n },\r\n {\r\n name: 'TURNED AMPERSAND',\r\n value: '⅋',\r\n codepoint: 8523,\r\n },\r\n {\r\n name: 'PER SIGN',\r\n value: '⅌',\r\n codepoint: 8524,\r\n },\r\n {\r\n name: 'AKTIESELSKAB',\r\n value: '⅍',\r\n codepoint: 8525,\r\n },\r\n {\r\n name: 'TURNED SMALL F',\r\n value: 'ⅎ',\r\n codepoint: 8526,\r\n },\r\n {\r\n name: 'SYMBOL FOR SAMARITAN SOURCE',\r\n value: '⅏',\r\n codepoint: 8527,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT ONE',\r\n value: '①',\r\n codepoint: 9312,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT TWO',\r\n value: '②',\r\n codepoint: 9313,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT THREE',\r\n value: '③',\r\n codepoint: 9314,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT FOUR',\r\n value: '④',\r\n codepoint: 9315,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT FIVE',\r\n value: '⑤',\r\n codepoint: 9316,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT SIX',\r\n value: '⑥',\r\n codepoint: 9317,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT SEVEN',\r\n value: '⑦',\r\n codepoint: 9318,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT EIGHT',\r\n value: '⑧',\r\n codepoint: 9319,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT NINE',\r\n value: '⑨',\r\n codepoint: 9320,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER TEN',\r\n value: '⑩',\r\n codepoint: 9321,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER ELEVEN',\r\n value: '⑪',\r\n codepoint: 9322,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER TWELVE',\r\n value: '⑫',\r\n codepoint: 9323,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER THIRTEEN',\r\n value: '⑬',\r\n codepoint: 9324,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER FOURTEEN',\r\n value: '⑭',\r\n codepoint: 9325,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER FIFTEEN',\r\n value: '⑮',\r\n codepoint: 9326,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER SIXTEEN',\r\n value: '⑯',\r\n codepoint: 9327,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER SEVENTEEN',\r\n value: '⑰',\r\n codepoint: 9328,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER EIGHTEEN',\r\n value: '⑱',\r\n codepoint: 9329,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER NINETEEN',\r\n value: '⑲',\r\n codepoint: 9330,\r\n },\r\n {\r\n name: 'CIRCLED NUMBER TWENTY',\r\n value: '⑳',\r\n codepoint: 9331,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT ONE',\r\n value: '⑴',\r\n codepoint: 9332,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT TWO',\r\n value: '⑵',\r\n codepoint: 9333,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT THREE',\r\n value: '⑶',\r\n codepoint: 9334,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT FOUR',\r\n value: '⑷',\r\n codepoint: 9335,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT FIVE',\r\n value: '⑸',\r\n codepoint: 9336,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT SIX',\r\n value: '⑹',\r\n codepoint: 9337,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT SEVEN',\r\n value: '⑺',\r\n codepoint: 9338,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT EIGHT',\r\n value: '⑻',\r\n codepoint: 9339,\r\n },\r\n {\r\n name: 'PARENTHESIZED DIGIT NINE',\r\n value: '⑼',\r\n codepoint: 9340,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER TEN',\r\n value: '⑽',\r\n codepoint: 9341,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER ELEVEN',\r\n value: '⑾',\r\n codepoint: 9342,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER TWELVE',\r\n value: '⑿',\r\n codepoint: 9343,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER THIRTEEN',\r\n value: '⒀',\r\n codepoint: 9344,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER FOURTEEN',\r\n value: '⒁',\r\n codepoint: 9345,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER FIFTEEN',\r\n value: '⒂',\r\n codepoint: 9346,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER SIXTEEN',\r\n value: '⒃',\r\n codepoint: 9347,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER SEVENTEEN',\r\n value: '⒄',\r\n codepoint: 9348,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER EIGHTEEN',\r\n value: '⒅',\r\n codepoint: 9349,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER NINETEEN',\r\n value: '⒆',\r\n codepoint: 9350,\r\n },\r\n {\r\n name: 'PARENTHESIZED NUMBER TWENTY',\r\n value: '⒇',\r\n codepoint: 9351,\r\n },\r\n {\r\n name: 'DIGIT ONE FULL STOP',\r\n value: '⒈',\r\n codepoint: 9352,\r\n },\r\n {\r\n name: 'DIGIT TWO FULL STOP',\r\n value: '⒉',\r\n codepoint: 9353,\r\n },\r\n {\r\n name: 'DIGIT THREE FULL STOP',\r\n value: '⒊',\r\n codepoint: 9354,\r\n },\r\n {\r\n name: 'DIGIT FOUR FULL STOP',\r\n value: '⒋',\r\n codepoint: 9355,\r\n },\r\n {\r\n name: 'DIGIT FIVE FULL STOP',\r\n value: '⒌',\r\n codepoint: 9356,\r\n },\r\n {\r\n name: 'DIGIT SIX FULL STOP',\r\n value: '⒍',\r\n codepoint: 9357,\r\n },\r\n {\r\n name: 'DIGIT SEVEN FULL STOP',\r\n value: '⒎',\r\n codepoint: 9358,\r\n },\r\n {\r\n name: 'DIGIT EIGHT FULL STOP',\r\n value: '⒏',\r\n codepoint: 9359,\r\n },\r\n {\r\n name: 'DIGIT NINE FULL STOP',\r\n value: '⒐',\r\n codepoint: 9360,\r\n },\r\n {\r\n name: 'NUMBER TEN FULL STOP',\r\n value: '⒑',\r\n codepoint: 9361,\r\n },\r\n {\r\n name: 'NUMBER ELEVEN FULL STOP',\r\n value: '⒒',\r\n codepoint: 9362,\r\n },\r\n {\r\n name: 'NUMBER TWELVE FULL STOP',\r\n value: '⒓',\r\n codepoint: 9363,\r\n },\r\n {\r\n name: 'NUMBER THIRTEEN FULL STOP',\r\n value: '⒔',\r\n codepoint: 9364,\r\n },\r\n {\r\n name: 'NUMBER FOURTEEN FULL STOP',\r\n value: '⒕',\r\n codepoint: 9365,\r\n },\r\n {\r\n name: 'NUMBER FIFTEEN FULL STOP',\r\n value: '⒖',\r\n codepoint: 9366,\r\n },\r\n {\r\n name: 'NUMBER SIXTEEN FULL STOP',\r\n value: '⒗',\r\n codepoint: 9367,\r\n },\r\n {\r\n name: 'NUMBER SEVENTEEN FULL STOP',\r\n value: '⒘',\r\n codepoint: 9368,\r\n },\r\n {\r\n name: 'NUMBER EIGHTEEN FULL STOP',\r\n value: '⒙',\r\n codepoint: 9369,\r\n },\r\n {\r\n name: 'NUMBER NINETEEN FULL STOP',\r\n value: '⒚',\r\n codepoint: 9370,\r\n },\r\n {\r\n name: 'NUMBER TWENTY FULL STOP',\r\n value: '⒛',\r\n codepoint: 9371,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER A',\r\n value: '⒜',\r\n codepoint: 9372,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER B',\r\n value: '⒝',\r\n codepoint: 9373,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER C',\r\n value: '⒞',\r\n codepoint: 9374,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER D',\r\n value: '⒟',\r\n codepoint: 9375,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER E',\r\n value: '⒠',\r\n codepoint: 9376,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER F',\r\n value: '⒡',\r\n codepoint: 9377,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER G',\r\n value: '⒢',\r\n codepoint: 9378,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER H',\r\n value: '⒣',\r\n codepoint: 9379,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER I',\r\n value: '⒤',\r\n codepoint: 9380,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER J',\r\n value: '⒥',\r\n codepoint: 9381,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER K',\r\n value: '⒦',\r\n codepoint: 9382,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER L',\r\n value: '⒧',\r\n codepoint: 9383,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER M',\r\n value: '⒨',\r\n codepoint: 9384,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER N',\r\n value: '⒩',\r\n codepoint: 9385,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER O',\r\n value: '⒪',\r\n codepoint: 9386,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER P',\r\n value: '⒫',\r\n codepoint: 9387,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER Q',\r\n value: '⒬',\r\n codepoint: 9388,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER R',\r\n value: '⒭',\r\n codepoint: 9389,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER S',\r\n value: '⒮',\r\n codepoint: 9390,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER T',\r\n value: '⒯',\r\n codepoint: 9391,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER U',\r\n value: '⒰',\r\n codepoint: 9392,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER V',\r\n value: '⒱',\r\n codepoint: 9393,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER W',\r\n value: '⒲',\r\n codepoint: 9394,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER X',\r\n value: '⒳',\r\n codepoint: 9395,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER Y',\r\n value: '⒴',\r\n codepoint: 9396,\r\n },\r\n {\r\n name: 'PARENTHESIZED LATIN SMALL LETTER Z',\r\n value: '⒵',\r\n codepoint: 9397,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER A',\r\n value: 'Ⓐ',\r\n codepoint: 9398,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER B',\r\n value: 'Ⓑ',\r\n codepoint: 9399,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER C',\r\n value: 'Ⓒ',\r\n codepoint: 9400,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER D',\r\n value: 'Ⓓ',\r\n codepoint: 9401,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER E',\r\n value: 'Ⓔ',\r\n codepoint: 9402,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER F',\r\n value: 'Ⓕ',\r\n codepoint: 9403,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER G',\r\n value: 'Ⓖ',\r\n codepoint: 9404,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER H',\r\n value: 'Ⓗ',\r\n codepoint: 9405,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER I',\r\n value: 'Ⓘ',\r\n codepoint: 9406,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER J',\r\n value: 'Ⓙ',\r\n codepoint: 9407,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER K',\r\n value: 'Ⓚ',\r\n codepoint: 9408,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER L',\r\n value: 'Ⓛ',\r\n codepoint: 9409,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER N',\r\n value: 'Ⓝ',\r\n codepoint: 9411,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER O',\r\n value: 'Ⓞ',\r\n codepoint: 9412,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER P',\r\n value: 'Ⓟ',\r\n codepoint: 9413,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER Q',\r\n value: 'Ⓠ',\r\n codepoint: 9414,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER R',\r\n value: 'Ⓡ',\r\n codepoint: 9415,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER S',\r\n value: 'Ⓢ',\r\n codepoint: 9416,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER T',\r\n value: 'Ⓣ',\r\n codepoint: 9417,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER U',\r\n value: 'Ⓤ',\r\n codepoint: 9418,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER V',\r\n value: 'Ⓥ',\r\n codepoint: 9419,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER W',\r\n value: 'Ⓦ',\r\n codepoint: 9420,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER X',\r\n value: 'Ⓧ',\r\n codepoint: 9421,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER Y',\r\n value: 'Ⓨ',\r\n codepoint: 9422,\r\n },\r\n {\r\n name: 'CIRCLED LATIN CAPITAL LETTER Z',\r\n value: 'Ⓩ',\r\n codepoint: 9423,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER A',\r\n value: 'ⓐ',\r\n codepoint: 9424,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER B',\r\n value: 'ⓑ',\r\n codepoint: 9425,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER C',\r\n value: 'ⓒ',\r\n codepoint: 9426,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER D',\r\n value: 'ⓓ',\r\n codepoint: 9427,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER E',\r\n value: 'ⓔ',\r\n codepoint: 9428,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER F',\r\n value: 'ⓕ',\r\n codepoint: 9429,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER G',\r\n value: 'ⓖ',\r\n codepoint: 9430,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER H',\r\n value: 'ⓗ',\r\n codepoint: 9431,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER I',\r\n value: 'ⓘ',\r\n codepoint: 9432,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER J',\r\n value: 'ⓙ',\r\n codepoint: 9433,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER K',\r\n value: 'ⓚ',\r\n codepoint: 9434,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER L',\r\n value: 'ⓛ',\r\n codepoint: 9435,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER M',\r\n value: 'ⓜ',\r\n codepoint: 9436,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER N',\r\n value: 'ⓝ',\r\n codepoint: 9437,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER O',\r\n value: 'ⓞ',\r\n codepoint: 9438,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER P',\r\n value: 'ⓟ',\r\n codepoint: 9439,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER Q',\r\n value: 'ⓠ',\r\n codepoint: 9440,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER R',\r\n value: 'ⓡ',\r\n codepoint: 9441,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER S',\r\n value: 'ⓢ',\r\n codepoint: 9442,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER T',\r\n value: 'ⓣ',\r\n codepoint: 9443,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER U',\r\n value: 'ⓤ',\r\n codepoint: 9444,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER V',\r\n value: 'ⓥ',\r\n codepoint: 9445,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER W',\r\n value: 'ⓦ',\r\n codepoint: 9446,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER X',\r\n value: 'ⓧ',\r\n codepoint: 9447,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER Y',\r\n value: 'ⓨ',\r\n codepoint: 9448,\r\n },\r\n {\r\n name: 'CIRCLED LATIN SMALL LETTER Z',\r\n value: 'ⓩ',\r\n codepoint: 9449,\r\n },\r\n {\r\n name: 'CIRCLED DIGIT ZERO',\r\n value: '⓪',\r\n codepoint: 9450,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER ELEVEN',\r\n value: '⓫',\r\n codepoint: 9451,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER TWELVE',\r\n value: '⓬',\r\n codepoint: 9452,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER THIRTEEN',\r\n value: '⓭',\r\n codepoint: 9453,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER FOURTEEN',\r\n value: '⓮',\r\n codepoint: 9454,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER FIFTEEN',\r\n value: '⓯',\r\n codepoint: 9455,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER SIXTEEN',\r\n value: '⓰',\r\n codepoint: 9456,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER SEVENTEEN',\r\n value: '⓱',\r\n codepoint: 9457,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER EIGHTEEN',\r\n value: '⓲',\r\n codepoint: 9458,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER NINETEEN',\r\n value: '⓳',\r\n codepoint: 9459,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED NUMBER TWENTY',\r\n value: '⓴',\r\n codepoint: 9460,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT ONE',\r\n value: '⓵',\r\n codepoint: 9461,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT TWO',\r\n value: '⓶',\r\n codepoint: 9462,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT THREE',\r\n value: '⓷',\r\n codepoint: 9463,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT FOUR',\r\n value: '⓸',\r\n codepoint: 9464,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT FIVE',\r\n value: '⓹',\r\n codepoint: 9465,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT SIX',\r\n value: '⓺',\r\n codepoint: 9466,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT SEVEN',\r\n value: '⓻',\r\n codepoint: 9467,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT EIGHT',\r\n value: '⓼',\r\n codepoint: 9468,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED DIGIT NINE',\r\n value: '⓽',\r\n codepoint: 9469,\r\n },\r\n {\r\n name: 'DOUBLE CIRCLED NUMBER TEN',\r\n value: '⓾',\r\n codepoint: 9470,\r\n },\r\n {\r\n name: 'NEGATIVE CIRCLED DIGIT ZERO',\r\n value: '⓿',\r\n codepoint: 9471,\r\n },\r\n {\r\n name: 'BLACK STAR',\r\n value: '★',\r\n codepoint: 9733,\r\n },\r\n {\r\n name: 'WHITE STAR',\r\n value: '☆',\r\n codepoint: 9734,\r\n },\r\n {\r\n name: 'LIGHTNING',\r\n value: '☇',\r\n codepoint: 9735,\r\n },\r\n {\r\n name: 'THUNDERSTORM',\r\n value: '☈',\r\n codepoint: 9736,\r\n },\r\n {\r\n name: 'SUN',\r\n value: '☉',\r\n codepoint: 9737,\r\n },\r\n {\r\n name: 'ASCENDING NODE',\r\n value: '☊',\r\n codepoint: 9738,\r\n },\r\n {\r\n name: 'DESCENDING NODE',\r\n value: '☋',\r\n codepoint: 9739,\r\n },\r\n {\r\n name: 'CONJUNCTION',\r\n value: '☌',\r\n codepoint: 9740,\r\n },\r\n {\r\n name: 'OPPOSITION',\r\n value: '☍',\r\n codepoint: 9741,\r\n },\r\n {\r\n name: 'WHITE TELEPHONE',\r\n value: '☏',\r\n codepoint: 9743,\r\n },\r\n {\r\n name: 'BALLOT BOX',\r\n value: '☐',\r\n codepoint: 9744,\r\n },\r\n {\r\n name: 'BALLOT BOX WITH X',\r\n value: '☒',\r\n codepoint: 9746,\r\n },\r\n {\r\n name: 'SALTIRE',\r\n value: '☓',\r\n codepoint: 9747,\r\n },\r\n {\r\n name: 'WHITE SHOGI PIECE',\r\n value: '☖',\r\n codepoint: 9750,\r\n },\r\n {\r\n name: 'BLACK SHOGI PIECE',\r\n value: '☗',\r\n codepoint: 9751,\r\n },\r\n {\r\n name: 'REVERSED ROTATED FLORAL HEART BULLET',\r\n value: '☙',\r\n codepoint: 9753,\r\n },\r\n {\r\n name: 'BLACK LEFT POINTING INDEX',\r\n value: '☚',\r\n codepoint: 9754,\r\n },\r\n {\r\n name: 'BLACK RIGHT POINTING INDEX',\r\n value: '☛',\r\n codepoint: 9755,\r\n },\r\n {\r\n name: 'WHITE LEFT POINTING INDEX',\r\n value: '☜',\r\n codepoint: 9756,\r\n },\r\n {\r\n name: 'WHITE RIGHT POINTING INDEX',\r\n value: '☞',\r\n codepoint: 9758,\r\n },\r\n {\r\n name: 'WHITE DOWN POINTING INDEX',\r\n value: '☟',\r\n codepoint: 9759,\r\n },\r\n {\r\n name: 'CAUTION SIGN',\r\n value: '☡',\r\n codepoint: 9761,\r\n },\r\n {\r\n name: 'CADUCEUS',\r\n value: '☤',\r\n codepoint: 9764,\r\n },\r\n {\r\n name: 'ANKH',\r\n value: '☥',\r\n codepoint: 9765,\r\n },\r\n {\r\n name: 'CHI RHO',\r\n value: '☧',\r\n codepoint: 9767,\r\n },\r\n {\r\n name: 'CROSS OF LORRAINE',\r\n value: '☨',\r\n codepoint: 9768,\r\n },\r\n {\r\n name: 'CROSS OF JERUSALEM',\r\n value: '☩',\r\n codepoint: 9769,\r\n },\r\n {\r\n name: 'FARSI SYMBOL',\r\n value: '☫',\r\n codepoint: 9771,\r\n },\r\n {\r\n name: 'ADI SHAKTI',\r\n value: '☬',\r\n codepoint: 9772,\r\n },\r\n {\r\n name: 'HAMMER AND SICKLE',\r\n value: '☭',\r\n codepoint: 9773,\r\n },\r\n {\r\n name: 'TRIGRAM FOR HEAVEN',\r\n value: '☰',\r\n codepoint: 9776,\r\n },\r\n {\r\n name: 'TRIGRAM FOR LAKE',\r\n value: '☱',\r\n codepoint: 9777,\r\n },\r\n {\r\n name: 'TRIGRAM FOR FIRE',\r\n value: '☲',\r\n codepoint: 9778,\r\n },\r\n {\r\n name: 'TRIGRAM FOR THUNDER',\r\n value: '☳',\r\n codepoint: 9779,\r\n },\r\n {\r\n name: 'TRIGRAM FOR WIND',\r\n value: '☴',\r\n codepoint: 9780,\r\n },\r\n {\r\n name: 'TRIGRAM FOR WATER',\r\n value: '☵',\r\n codepoint: 9781,\r\n },\r\n {\r\n name: 'TRIGRAM FOR MOUNTAIN',\r\n value: '☶',\r\n codepoint: 9782,\r\n },\r\n {\r\n name: 'TRIGRAM FOR EARTH',\r\n value: '☷',\r\n codepoint: 9783,\r\n },\r\n {\r\n name: 'BLACK SMILING FACE',\r\n value: '☻',\r\n codepoint: 9787,\r\n },\r\n {\r\n name: 'WHITE SUN WITH RAYS',\r\n value: '☼',\r\n codepoint: 9788,\r\n },\r\n {\r\n name: 'FIRST QUARTER MOON',\r\n value: '☽',\r\n codepoint: 9789,\r\n },\r\n {\r\n name: 'LAST QUARTER MOON',\r\n value: '☾',\r\n codepoint: 9790,\r\n },\r\n {\r\n name: 'MERCURY',\r\n value: '☿',\r\n codepoint: 9791,\r\n },\r\n {\r\n name: 'EARTH',\r\n value: '♁',\r\n codepoint: 9793,\r\n },\r\n {\r\n name: 'JUPITER',\r\n value: '♃',\r\n codepoint: 9795,\r\n },\r\n {\r\n name: 'SATURN',\r\n value: '♄',\r\n codepoint: 9796,\r\n },\r\n {\r\n name: 'URANUS',\r\n value: '♅',\r\n codepoint: 9797,\r\n },\r\n {\r\n name: 'NEPTUNE',\r\n value: '♆',\r\n codepoint: 9798,\r\n },\r\n {\r\n name: 'PLUTO',\r\n value: '♇',\r\n codepoint: 9799,\r\n },\r\n {\r\n name: 'WHITE CHESS KING',\r\n value: '♔',\r\n codepoint: 9812,\r\n },\r\n {\r\n name: 'WHITE CHESS QUEEN',\r\n value: '♕',\r\n codepoint: 9813,\r\n },\r\n {\r\n name: 'WHITE CHESS ROOK',\r\n value: '♖',\r\n codepoint: 9814,\r\n },\r\n {\r\n name: 'WHITE CHESS BISHOP',\r\n value: '♗',\r\n codepoint: 9815,\r\n },\r\n {\r\n name: 'WHITE CHESS KNIGHT',\r\n value: '♘',\r\n codepoint: 9816,\r\n },\r\n {\r\n name: 'WHITE CHESS PAWN',\r\n value: '♙',\r\n codepoint: 9817,\r\n },\r\n {\r\n name: 'BLACK CHESS KING',\r\n value: '♚',\r\n codepoint: 9818,\r\n },\r\n {\r\n name: 'BLACK CHESS QUEEN',\r\n value: '♛',\r\n codepoint: 9819,\r\n },\r\n {\r\n name: 'BLACK CHESS ROOK',\r\n value: '♜',\r\n codepoint: 9820,\r\n },\r\n {\r\n name: 'BLACK CHESS BISHOP',\r\n value: '♝',\r\n codepoint: 9821,\r\n },\r\n {\r\n name: 'BLACK CHESS KNIGHT',\r\n value: '♞',\r\n codepoint: 9822,\r\n },\r\n {\r\n name: 'WHITE HEART SUIT',\r\n value: '♡',\r\n codepoint: 9825,\r\n },\r\n {\r\n name: 'WHITE DIAMOND SUIT',\r\n value: '♢',\r\n codepoint: 9826,\r\n },\r\n {\r\n name: 'WHITE SPADE SUIT',\r\n value: '♤',\r\n codepoint: 9828,\r\n },\r\n {\r\n name: 'WHITE CLUB SUIT',\r\n value: '♧',\r\n codepoint: 9831,\r\n },\r\n {\r\n name: 'QUARTER NOTE',\r\n value: '♩',\r\n codepoint: 9833,\r\n },\r\n {\r\n name: 'EIGHTH NOTE',\r\n value: '♪',\r\n codepoint: 9834,\r\n },\r\n {\r\n name: 'BEAMED EIGHTH NOTES',\r\n value: '♫',\r\n codepoint: 9835,\r\n },\r\n {\r\n name: 'BEAMED SIXTEENTH NOTES',\r\n value: '♬',\r\n codepoint: 9836,\r\n },\r\n {\r\n name: 'MUSIC FLAT SIGN',\r\n value: '♭',\r\n codepoint: 9837,\r\n },\r\n {\r\n name: 'MUSIC NATURAL SIGN',\r\n value: '♮',\r\n codepoint: 9838,\r\n },\r\n {\r\n name: 'MUSIC SHARP SIGN',\r\n value: '♯',\r\n codepoint: 9839,\r\n },\r\n {\r\n name: 'WEST SYRIAC CROSS',\r\n value: '♰',\r\n codepoint: 9840,\r\n },\r\n {\r\n name: 'EAST SYRIAC CROSS',\r\n value: '♱',\r\n codepoint: 9841,\r\n },\r\n {\r\n name: 'UNIVERSAL RECYCLING SYMBOL',\r\n value: '♲',\r\n codepoint: 9842,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-1 PLASTICS',\r\n value: '♳',\r\n codepoint: 9843,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-2 PLASTICS',\r\n value: '♴',\r\n codepoint: 9844,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-3 PLASTICS',\r\n value: '♵',\r\n codepoint: 9845,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-4 PLASTICS',\r\n value: '♶',\r\n codepoint: 9846,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-5 PLASTICS',\r\n value: '♷',\r\n codepoint: 9847,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-6 PLASTICS',\r\n value: '♸',\r\n codepoint: 9848,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR TYPE-7 PLASTICS',\r\n value: '♹',\r\n codepoint: 9849,\r\n },\r\n {\r\n name: 'RECYCLING SYMBOL FOR GENERIC MATERIALS',\r\n value: '♺',\r\n codepoint: 9850,\r\n },\r\n {\r\n name: 'RECYCLED PAPER SYMBOL',\r\n value: '♼',\r\n codepoint: 9852,\r\n },\r\n {\r\n name: 'PARTIALLY-RECYCLED PAPER SYMBOL',\r\n value: '♽',\r\n codepoint: 9853,\r\n },\r\n {\r\n name: 'DIE FACE-1',\r\n value: '⚀',\r\n codepoint: 9856,\r\n },\r\n {\r\n name: 'DIE FACE-2',\r\n value: '⚁',\r\n codepoint: 9857,\r\n },\r\n {\r\n name: 'DIE FACE-3',\r\n value: '⚂',\r\n codepoint: 9858,\r\n },\r\n {\r\n name: 'DIE FACE-4',\r\n value: '⚃',\r\n codepoint: 9859,\r\n },\r\n {\r\n name: 'DIE FACE-5',\r\n value: '⚄',\r\n codepoint: 9860,\r\n },\r\n {\r\n name: 'DIE FACE-6',\r\n value: '⚅',\r\n codepoint: 9861,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH DOT RIGHT',\r\n value: '⚆',\r\n codepoint: 9862,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH TWO DOTS',\r\n value: '⚇',\r\n codepoint: 9863,\r\n },\r\n {\r\n name: 'BLACK CIRCLE WITH WHITE DOT RIGHT',\r\n value: '⚈',\r\n codepoint: 9864,\r\n },\r\n {\r\n name: 'BLACK CIRCLE WITH TWO WHITE DOTS',\r\n value: '⚉',\r\n codepoint: 9865,\r\n },\r\n {\r\n name: 'MONOGRAM FOR YANG',\r\n value: '⚊',\r\n codepoint: 9866,\r\n },\r\n {\r\n name: 'MONOGRAM FOR YIN',\r\n value: '⚋',\r\n codepoint: 9867,\r\n },\r\n {\r\n name: 'DIGRAM FOR GREATER YANG',\r\n value: '⚌',\r\n codepoint: 9868,\r\n },\r\n {\r\n name: 'DIGRAM FOR LESSER YIN',\r\n value: '⚍',\r\n codepoint: 9869,\r\n },\r\n {\r\n name: 'DIGRAM FOR LESSER YANG',\r\n value: '⚎',\r\n codepoint: 9870,\r\n },\r\n {\r\n name: 'DIGRAM FOR GREATER YIN',\r\n value: '⚏',\r\n codepoint: 9871,\r\n },\r\n {\r\n name: 'WHITE FLAG',\r\n value: '⚐',\r\n codepoint: 9872,\r\n },\r\n {\r\n name: 'BLACK FLAG',\r\n value: '⚑',\r\n codepoint: 9873,\r\n },\r\n {\r\n name: 'FLOWER',\r\n value: '⚘',\r\n codepoint: 9880,\r\n },\r\n {\r\n name: 'STAFF OF HERMES',\r\n value: '⚚',\r\n codepoint: 9882,\r\n },\r\n {\r\n name: 'DOUBLED FEMALE SIGN',\r\n value: '⚢',\r\n codepoint: 9890,\r\n },\r\n {\r\n name: 'DOUBLED MALE SIGN',\r\n value: '⚣',\r\n codepoint: 9891,\r\n },\r\n {\r\n name: 'INTERLOCKED FEMALE AND MALE SIGN',\r\n value: '⚤',\r\n codepoint: 9892,\r\n },\r\n {\r\n name: 'MALE AND FEMALE SIGN',\r\n value: '⚥',\r\n codepoint: 9893,\r\n },\r\n {\r\n name: 'MALE WITH STROKE SIGN',\r\n value: '⚦',\r\n codepoint: 9894,\r\n },\r\n {\r\n name: 'VERTICAL MALE WITH STROKE SIGN',\r\n value: '⚨',\r\n codepoint: 9896,\r\n },\r\n {\r\n name: 'HORIZONTAL MALE WITH STROKE SIGN',\r\n value: '⚩',\r\n codepoint: 9897,\r\n },\r\n {\r\n name: 'MEDIUM SMALL WHITE CIRCLE',\r\n value: '⚬',\r\n codepoint: 9900,\r\n },\r\n {\r\n name: 'MARRIAGE SYMBOL',\r\n value: '⚭',\r\n codepoint: 9901,\r\n },\r\n {\r\n name: 'DIVORCE SYMBOL',\r\n value: '⚮',\r\n codepoint: 9902,\r\n },\r\n {\r\n name: 'UNMARRIED PARTNERSHIP SYMBOL',\r\n value: '⚯',\r\n codepoint: 9903,\r\n },\r\n {\r\n name: 'NEUTER',\r\n value: '⚲',\r\n codepoint: 9906,\r\n },\r\n {\r\n name: 'WHITE DIAMOND IN SQUARE',\r\n value: '⛋',\r\n codepoint: 9931,\r\n },\r\n {\r\n name: 'ASTRONOMICAL SYMBOL FOR URANUS',\r\n value: '⛢',\r\n codepoint: 9954,\r\n },\r\n {\r\n name: 'UPPER BLADE SCISSORS',\r\n value: '✁',\r\n codepoint: 9985,\r\n },\r\n {\r\n name: 'LOWER BLADE SCISSORS',\r\n value: '✃',\r\n codepoint: 9987,\r\n },\r\n {\r\n name: 'WHITE SCISSORS',\r\n value: '✄',\r\n codepoint: 9988,\r\n },\r\n {\r\n name: 'TELEPHONE LOCATION SIGN',\r\n value: '✆',\r\n codepoint: 9990,\r\n },\r\n {\r\n name: 'TAPE DRIVE',\r\n value: '✇',\r\n codepoint: 9991,\r\n },\r\n {\r\n name: 'LOWER RIGHT PENCIL',\r\n value: '✎',\r\n codepoint: 9998,\r\n },\r\n {\r\n name: 'UPPER RIGHT PENCIL',\r\n value: '✐',\r\n codepoint: 10000,\r\n },\r\n {\r\n name: 'WHITE NIB',\r\n value: '✑',\r\n codepoint: 10001,\r\n },\r\n {\r\n name: 'CHECK MARK',\r\n value: '✓',\r\n codepoint: 10003,\r\n },\r\n {\r\n name: 'MULTIPLICATION X',\r\n value: '✕',\r\n codepoint: 10005,\r\n },\r\n {\r\n name: 'BALLOT X',\r\n value: '✗',\r\n codepoint: 10007,\r\n },\r\n {\r\n name: 'HEAVY BALLOT X',\r\n value: '✘',\r\n codepoint: 10008,\r\n },\r\n {\r\n name: 'OUTLINED GREEK CROSS',\r\n value: '✙',\r\n codepoint: 10009,\r\n },\r\n {\r\n name: 'HEAVY GREEK CROSS',\r\n value: '✚',\r\n codepoint: 10010,\r\n },\r\n {\r\n name: 'OPEN CENTRE CROSS',\r\n value: '✛',\r\n codepoint: 10011,\r\n },\r\n {\r\n name: 'HEAVY OPEN CENTRE CROSS',\r\n value: '✜',\r\n codepoint: 10012,\r\n },\r\n {\r\n name: 'SHADOWED WHITE LATIN CROSS',\r\n value: '✞',\r\n codepoint: 10014,\r\n },\r\n {\r\n name: 'OUTLINED LATIN CROSS',\r\n value: '✟',\r\n codepoint: 10015,\r\n },\r\n {\r\n name: 'MALTESE CROSS',\r\n value: '✠',\r\n codepoint: 10016,\r\n },\r\n {\r\n name: 'FOUR TEARDROP-SPOKED ASTERISK',\r\n value: '✢',\r\n codepoint: 10018,\r\n },\r\n {\r\n name: 'FOUR BALLOON-SPOKED ASTERISK',\r\n value: '✣',\r\n codepoint: 10019,\r\n },\r\n {\r\n name: 'HEAVY FOUR BALLOON-SPOKED ASTERISK',\r\n value: '✤',\r\n codepoint: 10020,\r\n },\r\n {\r\n name: 'FOUR CLUB-SPOKED ASTERISK',\r\n value: '✥',\r\n codepoint: 10021,\r\n },\r\n {\r\n name: 'BLACK FOUR POINTED STAR',\r\n value: '✦',\r\n codepoint: 10022,\r\n },\r\n {\r\n name: 'WHITE FOUR POINTED STAR',\r\n value: '✧',\r\n codepoint: 10023,\r\n },\r\n {\r\n name: 'STRESS OUTLINED WHITE STAR',\r\n value: '✩',\r\n codepoint: 10025,\r\n },\r\n {\r\n name: 'CIRCLED WHITE STAR',\r\n value: '✪',\r\n codepoint: 10026,\r\n },\r\n {\r\n name: 'OPEN CENTRE BLACK STAR',\r\n value: '✫',\r\n codepoint: 10027,\r\n },\r\n {\r\n name: 'BLACK CENTRE WHITE STAR',\r\n value: '✬',\r\n codepoint: 10028,\r\n },\r\n {\r\n name: 'OUTLINED BLACK STAR',\r\n value: '✭',\r\n codepoint: 10029,\r\n },\r\n {\r\n name: 'HEAVY OUTLINED BLACK STAR',\r\n value: '✮',\r\n codepoint: 10030,\r\n },\r\n {\r\n name: 'PINWHEEL STAR',\r\n value: '✯',\r\n codepoint: 10031,\r\n },\r\n {\r\n name: 'SHADOWED WHITE STAR',\r\n value: '✰',\r\n codepoint: 10032,\r\n },\r\n {\r\n name: 'HEAVY ASTERISK',\r\n value: '✱',\r\n codepoint: 10033,\r\n },\r\n {\r\n name: 'OPEN CENTRE ASTERISK',\r\n value: '✲',\r\n codepoint: 10034,\r\n },\r\n {\r\n name: 'EIGHT POINTED PINWHEEL STAR',\r\n value: '✵',\r\n codepoint: 10037,\r\n },\r\n {\r\n name: 'SIX POINTED BLACK STAR',\r\n value: '✶',\r\n codepoint: 10038,\r\n },\r\n {\r\n name: 'EIGHT POINTED RECTILINEAR BLACK STAR',\r\n value: '✷',\r\n codepoint: 10039,\r\n },\r\n {\r\n name: 'HEAVY EIGHT POINTED RECTILINEAR BLACK STAR',\r\n value: '✸',\r\n codepoint: 10040,\r\n },\r\n {\r\n name: 'TWELVE POINTED BLACK STAR',\r\n value: '✹',\r\n codepoint: 10041,\r\n },\r\n {\r\n name: 'SIXTEEN POINTED ASTERISK',\r\n value: '✺',\r\n codepoint: 10042,\r\n },\r\n {\r\n name: 'TEARDROP-SPOKED ASTERISK',\r\n value: '✻',\r\n codepoint: 10043,\r\n },\r\n {\r\n name: 'OPEN CENTRE TEARDROP-SPOKED ASTERISK',\r\n value: '✼',\r\n codepoint: 10044,\r\n },\r\n {\r\n name: 'HEAVY TEARDROP-SPOKED ASTERISK',\r\n value: '✽',\r\n codepoint: 10045,\r\n },\r\n {\r\n name: 'SIX PETALLED BLACK AND WHITE FLORETTE',\r\n value: '✾',\r\n codepoint: 10046,\r\n },\r\n {\r\n name: 'BLACK FLORETTE',\r\n value: '✿',\r\n codepoint: 10047,\r\n },\r\n {\r\n name: 'WHITE FLORETTE',\r\n value: '❀',\r\n codepoint: 10048,\r\n },\r\n {\r\n name: 'EIGHT PETALLED OUTLINED BLACK FLORETTE',\r\n value: '❁',\r\n codepoint: 10049,\r\n },\r\n {\r\n name: 'CIRCLED OPEN CENTRE EIGHT POINTED STAR',\r\n value: '❂',\r\n codepoint: 10050,\r\n },\r\n {\r\n name: 'HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK',\r\n value: '❃',\r\n codepoint: 10051,\r\n },\r\n {\r\n name: 'TIGHT TRIFOLIATE SNOWFLAKE',\r\n value: '❅',\r\n codepoint: 10053,\r\n },\r\n {\r\n name: 'HEAVY CHEVRON SNOWFLAKE',\r\n value: '❆',\r\n codepoint: 10054,\r\n },\r\n {\r\n name: 'HEAVY SPARKLE',\r\n value: '❈',\r\n codepoint: 10056,\r\n },\r\n {\r\n name: 'BALLOON-SPOKED ASTERISK',\r\n value: '❉',\r\n codepoint: 10057,\r\n },\r\n {\r\n name: 'EIGHT TEARDROP-SPOKED PROPELLER ASTERISK',\r\n value: '❊',\r\n codepoint: 10058,\r\n },\r\n {\r\n name: 'HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK',\r\n value: '❋',\r\n codepoint: 10059,\r\n },\r\n {\r\n name: 'SHADOWED WHITE CIRCLE',\r\n value: '❍',\r\n codepoint: 10061,\r\n },\r\n {\r\n name: 'LOWER RIGHT DROP-SHADOWED WHITE SQUARE',\r\n value: '❏',\r\n codepoint: 10063,\r\n },\r\n {\r\n name: 'UPPER RIGHT DROP-SHADOWED WHITE SQUARE',\r\n value: '❐',\r\n codepoint: 10064,\r\n },\r\n {\r\n name: 'LOWER RIGHT SHADOWED WHITE SQUARE',\r\n value: '❑',\r\n codepoint: 10065,\r\n },\r\n {\r\n name: 'UPPER RIGHT SHADOWED WHITE SQUARE',\r\n value: '❒',\r\n codepoint: 10066,\r\n },\r\n {\r\n name: 'BLACK DIAMOND MINUS WHITE X',\r\n value: '❖',\r\n codepoint: 10070,\r\n },\r\n {\r\n name: 'LIGHT VERTICAL BAR',\r\n value: '❘',\r\n codepoint: 10072,\r\n },\r\n {\r\n name: 'MEDIUM VERTICAL BAR',\r\n value: '❙',\r\n codepoint: 10073,\r\n },\r\n {\r\n name: 'HEAVY VERTICAL BAR',\r\n value: '❚',\r\n codepoint: 10074,\r\n },\r\n {\r\n name: 'HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT',\r\n value: '❛',\r\n codepoint: 10075,\r\n },\r\n {\r\n name: 'HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT',\r\n value: '❜',\r\n codepoint: 10076,\r\n },\r\n {\r\n name: 'HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT',\r\n value: '❝',\r\n codepoint: 10077,\r\n },\r\n {\r\n name: 'HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT',\r\n value: '❞',\r\n codepoint: 10078,\r\n },\r\n {\r\n name: 'CURVED STEM PARAGRAPH SIGN ORNAMENT',\r\n value: '❡',\r\n codepoint: 10081,\r\n },\r\n {\r\n name: 'HEAVY EXCLAMATION MARK ORNAMENT',\r\n value: '❢',\r\n codepoint: 10082,\r\n },\r\n {\r\n name: 'ROTATED HEAVY BLACK HEART BULLET',\r\n value: '❥',\r\n codepoint: 10085,\r\n },\r\n {\r\n name: 'FLORAL HEART',\r\n value: '❦',\r\n codepoint: 10086,\r\n },\r\n {\r\n name: 'ROTATED FLORAL HEART BULLET',\r\n value: '❧',\r\n codepoint: 10087,\r\n },\r\n {\r\n name: 'MEDIUM LEFT PARENTHESIS ORNAMENT',\r\n value: '❨',\r\n codepoint: 10088,\r\n },\r\n {\r\n name: 'MEDIUM RIGHT PARENTHESIS ORNAMENT',\r\n value: '❩',\r\n codepoint: 10089,\r\n },\r\n {\r\n name: 'MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT',\r\n value: '❪',\r\n codepoint: 10090,\r\n },\r\n {\r\n name: 'MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT',\r\n value: '❫',\r\n codepoint: 10091,\r\n },\r\n {\r\n name: 'MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT',\r\n value: '❬',\r\n codepoint: 10092,\r\n },\r\n {\r\n name: 'MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT',\r\n value: '❭',\r\n codepoint: 10093,\r\n },\r\n {\r\n name: 'HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT',\r\n value: '❮',\r\n codepoint: 10094,\r\n },\r\n {\r\n name: 'HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT',\r\n value: '❯',\r\n codepoint: 10095,\r\n },\r\n {\r\n name: 'HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT',\r\n value: '❰',\r\n codepoint: 10096,\r\n },\r\n {\r\n name: 'HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT',\r\n value: '❱',\r\n codepoint: 10097,\r\n },\r\n {\r\n name: 'LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT',\r\n value: '❲',\r\n codepoint: 10098,\r\n },\r\n {\r\n name: 'LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT',\r\n value: '❳',\r\n codepoint: 10099,\r\n },\r\n {\r\n name: 'MEDIUM LEFT CURLY BRACKET ORNAMENT',\r\n value: '❴',\r\n codepoint: 10100,\r\n },\r\n {\r\n name: 'MEDIUM RIGHT CURLY BRACKET ORNAMENT',\r\n value: '❵',\r\n codepoint: 10101,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT ONE',\r\n value: '❶',\r\n codepoint: 10102,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT TWO',\r\n value: '❷',\r\n codepoint: 10103,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT THREE',\r\n value: '❸',\r\n codepoint: 10104,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT FOUR',\r\n value: '❹',\r\n codepoint: 10105,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT FIVE',\r\n value: '❺',\r\n codepoint: 10106,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT SIX',\r\n value: '❻',\r\n codepoint: 10107,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT SEVEN',\r\n value: '❼',\r\n codepoint: 10108,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT EIGHT',\r\n value: '❽',\r\n codepoint: 10109,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED DIGIT NINE',\r\n value: '❾',\r\n codepoint: 10110,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED NUMBER TEN',\r\n value: '❿',\r\n codepoint: 10111,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT ONE',\r\n value: '➀',\r\n codepoint: 10112,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT TWO',\r\n value: '➁',\r\n codepoint: 10113,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT THREE',\r\n value: '➂',\r\n codepoint: 10114,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT FOUR',\r\n value: '➃',\r\n codepoint: 10115,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT FIVE',\r\n value: '➄',\r\n codepoint: 10116,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT SIX',\r\n value: '➅',\r\n codepoint: 10117,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN',\r\n value: '➆',\r\n codepoint: 10118,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT',\r\n value: '➇',\r\n codepoint: 10119,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF DIGIT NINE',\r\n value: '➈',\r\n codepoint: 10120,\r\n },\r\n {\r\n name: 'DINGBAT CIRCLED SANS-SERIF NUMBER TEN',\r\n value: '➉',\r\n codepoint: 10121,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE',\r\n value: '➊',\r\n codepoint: 10122,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO',\r\n value: '➋',\r\n codepoint: 10123,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE',\r\n value: '➌',\r\n codepoint: 10124,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR',\r\n value: '➍',\r\n codepoint: 10125,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE',\r\n value: '➎',\r\n codepoint: 10126,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX',\r\n value: '➏',\r\n codepoint: 10127,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN',\r\n value: '➐',\r\n codepoint: 10128,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT',\r\n value: '➑',\r\n codepoint: 10129,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE',\r\n value: '➒',\r\n codepoint: 10130,\r\n },\r\n {\r\n name: 'DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN',\r\n value: '➓',\r\n codepoint: 10131,\r\n },\r\n {\r\n name: 'HEAVY WIDE-HEADED RIGHTWARDS ARROW',\r\n value: '➔',\r\n codepoint: 10132,\r\n },\r\n {\r\n name: 'HEAVY SOUTH EAST ARROW',\r\n value: '➘',\r\n codepoint: 10136,\r\n },\r\n {\r\n name: 'HEAVY RIGHTWARDS ARROW',\r\n value: '➙',\r\n codepoint: 10137,\r\n },\r\n {\r\n name: 'HEAVY NORTH EAST ARROW',\r\n value: '➚',\r\n codepoint: 10138,\r\n },\r\n {\r\n name: 'DRAFTING POINT RIGHTWARDS ARROW',\r\n value: '➛',\r\n codepoint: 10139,\r\n },\r\n {\r\n name: 'HEAVY ROUND-TIPPED RIGHTWARDS ARROW',\r\n value: '➜',\r\n codepoint: 10140,\r\n },\r\n {\r\n name: 'TRIANGLE-HEADED RIGHTWARDS ARROW',\r\n value: '➝',\r\n codepoint: 10141,\r\n },\r\n {\r\n name: 'HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW',\r\n value: '➞',\r\n codepoint: 10142,\r\n },\r\n {\r\n name: 'DASHED TRIANGLE-HEADED RIGHTWARDS ARROW',\r\n value: '➟',\r\n codepoint: 10143,\r\n },\r\n {\r\n name: 'HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW',\r\n value: '➠',\r\n codepoint: 10144,\r\n },\r\n {\r\n name: 'THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD',\r\n value: '➢',\r\n codepoint: 10146,\r\n },\r\n {\r\n name: 'THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD',\r\n value: '➣',\r\n codepoint: 10147,\r\n },\r\n {\r\n name: 'BLACK RIGHTWARDS ARROWHEAD',\r\n value: '➤',\r\n codepoint: 10148,\r\n },\r\n {\r\n name: 'HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW',\r\n value: '➥',\r\n codepoint: 10149,\r\n },\r\n {\r\n name: 'HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW',\r\n value: '➦',\r\n codepoint: 10150,\r\n },\r\n {\r\n name: 'SQUAT BLACK RIGHTWARDS ARROW',\r\n value: '➧',\r\n codepoint: 10151,\r\n },\r\n {\r\n name: 'HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW',\r\n value: '➨',\r\n codepoint: 10152,\r\n },\r\n {\r\n name: 'RIGHT-SHADED WHITE RIGHTWARDS ARROW',\r\n value: '➩',\r\n codepoint: 10153,\r\n },\r\n {\r\n name: 'LEFT-SHADED WHITE RIGHTWARDS ARROW',\r\n value: '➪',\r\n codepoint: 10154,\r\n },\r\n {\r\n name: 'BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW',\r\n value: '➫',\r\n codepoint: 10155,\r\n },\r\n {\r\n name: 'FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW',\r\n value: '➬',\r\n codepoint: 10156,\r\n },\r\n {\r\n name: 'HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW',\r\n value: '➭',\r\n codepoint: 10157,\r\n },\r\n {\r\n name: 'HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW',\r\n value: '➮',\r\n codepoint: 10158,\r\n },\r\n {\r\n name: 'NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW',\r\n value: '➯',\r\n codepoint: 10159,\r\n },\r\n {\r\n name: 'NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW',\r\n value: '➱',\r\n codepoint: 10161,\r\n },\r\n {\r\n name: 'CIRCLED HEAVY WHITE RIGHTWARDS ARROW',\r\n value: '➲',\r\n codepoint: 10162,\r\n },\r\n {\r\n name: 'WHITE-FEATHERED RIGHTWARDS ARROW',\r\n value: '➳',\r\n codepoint: 10163,\r\n },\r\n {\r\n name: 'BLACK-FEATHERED SOUTH EAST ARROW',\r\n value: '➴',\r\n codepoint: 10164,\r\n },\r\n {\r\n name: 'BLACK-FEATHERED RIGHTWARDS ARROW',\r\n value: '➵',\r\n codepoint: 10165,\r\n },\r\n {\r\n name: 'BLACK-FEATHERED NORTH EAST ARROW',\r\n value: '➶',\r\n codepoint: 10166,\r\n },\r\n {\r\n name: 'HEAVY BLACK-FEATHERED SOUTH EAST ARROW',\r\n value: '➷',\r\n codepoint: 10167,\r\n },\r\n {\r\n name: 'HEAVY BLACK-FEATHERED RIGHTWARDS ARROW',\r\n value: '➸',\r\n codepoint: 10168,\r\n },\r\n {\r\n name: 'HEAVY BLACK-FEATHERED NORTH EAST ARROW',\r\n value: '➹',\r\n codepoint: 10169,\r\n },\r\n {\r\n name: 'TEARDROP-BARBED RIGHTWARDS ARROW',\r\n value: '➺',\r\n codepoint: 10170,\r\n },\r\n {\r\n name: 'HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW',\r\n value: '➻',\r\n codepoint: 10171,\r\n },\r\n {\r\n name: 'WEDGE-TAILED RIGHTWARDS ARROW',\r\n value: '➼',\r\n codepoint: 10172,\r\n },\r\n {\r\n name: 'HEAVY WEDGE-TAILED RIGHTWARDS ARROW',\r\n value: '➽',\r\n codepoint: 10173,\r\n },\r\n {\r\n name: 'OPEN-OUTLINED RIGHTWARDS ARROW',\r\n value: '➾',\r\n codepoint: 10174,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Mathematical',\r\n symbols: [\r\n {\r\n name: 'FOR ALL',\r\n value: '∀',\r\n codepoint: 8704,\r\n },\r\n {\r\n name: 'COMPLEMENT',\r\n value: '∁',\r\n codepoint: 8705,\r\n },\r\n {\r\n name: 'PARTIAL DIFFERENTIAL',\r\n value: '∂',\r\n codepoint: 8706,\r\n },\r\n {\r\n name: 'THERE EXISTS',\r\n value: '∃',\r\n codepoint: 8707,\r\n },\r\n {\r\n name: 'THERE DOES NOT EXIST',\r\n value: '∄',\r\n codepoint: 8708,\r\n },\r\n {\r\n name: 'EMPTY SET',\r\n value: '∅',\r\n codepoint: 8709,\r\n },\r\n {\r\n name: 'INCREMENT',\r\n value: '∆',\r\n codepoint: 8710,\r\n },\r\n {\r\n name: 'NABLA',\r\n value: '∇',\r\n codepoint: 8711,\r\n },\r\n {\r\n name: 'ELEMENT OF',\r\n value: '∈',\r\n codepoint: 8712,\r\n },\r\n {\r\n name: 'NOT AN ELEMENT OF',\r\n value: '∉',\r\n codepoint: 8713,\r\n },\r\n {\r\n name: 'SMALL ELEMENT OF',\r\n value: '∊',\r\n codepoint: 8714,\r\n },\r\n {\r\n name: 'CONTAINS AS MEMBER',\r\n value: '∋',\r\n codepoint: 8715,\r\n },\r\n {\r\n name: 'DOES NOT CONTAIN AS MEMBER',\r\n value: '∌',\r\n codepoint: 8716,\r\n },\r\n {\r\n name: 'SMALL CONTAINS AS MEMBER',\r\n value: '∍',\r\n codepoint: 8717,\r\n },\r\n {\r\n name: 'END OF PROOF',\r\n value: '∎',\r\n codepoint: 8718,\r\n },\r\n {\r\n name: 'N-ARY PRODUCT',\r\n value: '∏',\r\n codepoint: 8719,\r\n },\r\n {\r\n name: 'N-ARY COPRODUCT',\r\n value: '∐',\r\n codepoint: 8720,\r\n },\r\n {\r\n name: 'N-ARY SUMMATION',\r\n value: '∑',\r\n codepoint: 8721,\r\n },\r\n {\r\n name: 'MINUS SIGN',\r\n value: '−',\r\n codepoint: 8722,\r\n },\r\n {\r\n name: 'MINUS-OR-PLUS SIGN',\r\n value: '∓',\r\n codepoint: 8723,\r\n },\r\n {\r\n name: 'DOT PLUS',\r\n value: '∔',\r\n codepoint: 8724,\r\n },\r\n {\r\n name: 'DIVISION SLASH',\r\n value: '∕',\r\n codepoint: 8725,\r\n },\r\n {\r\n name: 'SET MINUS',\r\n value: '∖',\r\n codepoint: 8726,\r\n },\r\n {\r\n name: 'ASTERISK OPERATOR',\r\n value: '∗',\r\n codepoint: 8727,\r\n },\r\n {\r\n name: 'RING OPERATOR',\r\n value: '∘',\r\n codepoint: 8728,\r\n },\r\n {\r\n name: 'BULLET OPERATOR',\r\n value: '∙',\r\n codepoint: 8729,\r\n },\r\n {\r\n name: 'SQUARE ROOT',\r\n value: '√',\r\n codepoint: 8730,\r\n },\r\n {\r\n name: 'CUBE ROOT',\r\n value: '∛',\r\n codepoint: 8731,\r\n },\r\n {\r\n name: 'FOURTH ROOT',\r\n value: '∜',\r\n codepoint: 8732,\r\n },\r\n {\r\n name: 'PROPORTIONAL TO',\r\n value: '∝',\r\n codepoint: 8733,\r\n },\r\n {\r\n name: 'INFINITY',\r\n value: '∞',\r\n codepoint: 8734,\r\n },\r\n {\r\n name: 'RIGHT ANGLE',\r\n value: '∟',\r\n codepoint: 8735,\r\n },\r\n {\r\n name: 'ANGLE',\r\n value: '∠',\r\n codepoint: 8736,\r\n },\r\n {\r\n name: 'MEASURED ANGLE',\r\n value: '∡',\r\n codepoint: 8737,\r\n },\r\n {\r\n name: 'SPHERICAL ANGLE',\r\n value: '∢',\r\n codepoint: 8738,\r\n },\r\n {\r\n name: 'DIVIDES',\r\n value: '∣',\r\n codepoint: 8739,\r\n },\r\n {\r\n name: 'DOES NOT DIVIDE',\r\n value: '∤',\r\n codepoint: 8740,\r\n },\r\n {\r\n name: 'PARALLEL TO',\r\n value: '∥',\r\n codepoint: 8741,\r\n },\r\n {\r\n name: 'NOT PARALLEL TO',\r\n value: '∦',\r\n codepoint: 8742,\r\n },\r\n {\r\n name: 'LOGICAL AND',\r\n value: '∧',\r\n codepoint: 8743,\r\n },\r\n {\r\n name: 'LOGICAL OR',\r\n value: '∨',\r\n codepoint: 8744,\r\n },\r\n {\r\n name: 'INTERSECTION',\r\n value: '∩',\r\n codepoint: 8745,\r\n },\r\n {\r\n name: 'UNION',\r\n value: '∪',\r\n codepoint: 8746,\r\n },\r\n {\r\n name: 'INTEGRAL',\r\n value: '∫',\r\n codepoint: 8747,\r\n },\r\n {\r\n name: 'DOUBLE INTEGRAL',\r\n value: '∬',\r\n codepoint: 8748,\r\n },\r\n {\r\n name: 'TRIPLE INTEGRAL',\r\n value: '∭',\r\n codepoint: 8749,\r\n },\r\n {\r\n name: 'CONTOUR INTEGRAL',\r\n value: '∮',\r\n codepoint: 8750,\r\n },\r\n {\r\n name: 'SURFACE INTEGRAL',\r\n value: '∯',\r\n codepoint: 8751,\r\n },\r\n {\r\n name: 'VOLUME INTEGRAL',\r\n value: '∰',\r\n codepoint: 8752,\r\n },\r\n {\r\n name: 'CLOCKWISE INTEGRAL',\r\n value: '∱',\r\n codepoint: 8753,\r\n },\r\n {\r\n name: 'CLOCKWISE CONTOUR INTEGRAL',\r\n value: '∲',\r\n codepoint: 8754,\r\n },\r\n {\r\n name: 'ANTICLOCKWISE CONTOUR INTEGRAL',\r\n value: '∳',\r\n codepoint: 8755,\r\n },\r\n {\r\n name: 'THEREFORE',\r\n value: '∴',\r\n codepoint: 8756,\r\n },\r\n {\r\n name: 'BECAUSE',\r\n value: '∵',\r\n codepoint: 8757,\r\n },\r\n {\r\n name: 'RATIO',\r\n value: '∶',\r\n codepoint: 8758,\r\n },\r\n {\r\n name: 'PROPORTION',\r\n value: '∷',\r\n codepoint: 8759,\r\n },\r\n {\r\n name: 'DOT MINUS',\r\n value: '∸',\r\n codepoint: 8760,\r\n },\r\n {\r\n name: 'EXCESS',\r\n value: '∹',\r\n codepoint: 8761,\r\n },\r\n {\r\n name: 'GEOMETRIC PROPORTION',\r\n value: '∺',\r\n codepoint: 8762,\r\n },\r\n {\r\n name: 'HOMOTHETIC',\r\n value: '∻',\r\n codepoint: 8763,\r\n },\r\n {\r\n name: 'TILDE OPERATOR',\r\n value: '∼',\r\n codepoint: 8764,\r\n },\r\n {\r\n name: 'REVERSED TILDE',\r\n value: '∽',\r\n codepoint: 8765,\r\n },\r\n {\r\n name: 'INVERTED LAZY S',\r\n value: '∾',\r\n codepoint: 8766,\r\n },\r\n {\r\n name: 'SINE WAVE',\r\n value: '∿',\r\n codepoint: 8767,\r\n },\r\n {\r\n name: 'WREATH PRODUCT',\r\n value: '≀',\r\n codepoint: 8768,\r\n },\r\n {\r\n name: 'NOT TILDE',\r\n value: '≁',\r\n codepoint: 8769,\r\n },\r\n {\r\n name: 'MINUS TILDE',\r\n value: '≂',\r\n codepoint: 8770,\r\n },\r\n {\r\n name: 'ASYMPTOTICALLY EQUAL TO',\r\n value: '≃',\r\n codepoint: 8771,\r\n },\r\n {\r\n name: 'NOT ASYMPTOTICALLY EQUAL TO',\r\n value: '≄',\r\n codepoint: 8772,\r\n },\r\n {\r\n name: 'APPROXIMATELY EQUAL TO',\r\n value: '≅',\r\n codepoint: 8773,\r\n },\r\n {\r\n name: 'APPROXIMATELY BUT NOT ACTUALLY EQUAL TO',\r\n value: '≆',\r\n codepoint: 8774,\r\n },\r\n {\r\n name: 'NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO',\r\n value: '≇',\r\n codepoint: 8775,\r\n },\r\n {\r\n name: 'ALMOST EQUAL TO',\r\n value: '≈',\r\n codepoint: 8776,\r\n },\r\n {\r\n name: 'NOT ALMOST EQUAL TO',\r\n value: '≉',\r\n codepoint: 8777,\r\n },\r\n {\r\n name: 'ALMOST EQUAL OR EQUAL TO',\r\n value: '≊',\r\n codepoint: 8778,\r\n },\r\n {\r\n name: 'TRIPLE TILDE',\r\n value: '≋',\r\n codepoint: 8779,\r\n },\r\n {\r\n name: 'ALL EQUAL TO',\r\n value: '≌',\r\n codepoint: 8780,\r\n },\r\n {\r\n name: 'EQUIVALENT TO',\r\n value: '≍',\r\n codepoint: 8781,\r\n },\r\n {\r\n name: 'GEOMETRICALLY EQUIVALENT TO',\r\n value: '≎',\r\n codepoint: 8782,\r\n },\r\n {\r\n name: 'DIFFERENCE BETWEEN',\r\n value: '≏',\r\n codepoint: 8783,\r\n },\r\n {\r\n name: 'APPROACHES THE LIMIT',\r\n value: '≐',\r\n codepoint: 8784,\r\n },\r\n {\r\n name: 'GEOMETRICALLY EQUAL TO',\r\n value: '≑',\r\n codepoint: 8785,\r\n },\r\n {\r\n name: 'APPROXIMATELY EQUAL TO OR THE IMAGE OF',\r\n value: '≒',\r\n codepoint: 8786,\r\n },\r\n {\r\n name: 'IMAGE OF OR APPROXIMATELY EQUAL TO',\r\n value: '≓',\r\n codepoint: 8787,\r\n },\r\n {\r\n name: 'COLON EQUALS',\r\n value: '≔',\r\n codepoint: 8788,\r\n },\r\n {\r\n name: 'EQUALS COLON',\r\n value: '≕',\r\n codepoint: 8789,\r\n },\r\n {\r\n name: 'RING IN EQUAL TO',\r\n value: '≖',\r\n codepoint: 8790,\r\n },\r\n {\r\n name: 'RING EQUAL TO',\r\n value: '≗',\r\n codepoint: 8791,\r\n },\r\n {\r\n name: 'CORRESPONDS TO',\r\n value: '≘',\r\n codepoint: 8792,\r\n },\r\n {\r\n name: 'ESTIMATES',\r\n value: '≙',\r\n codepoint: 8793,\r\n },\r\n {\r\n name: 'EQUIANGULAR TO',\r\n value: '≚',\r\n codepoint: 8794,\r\n },\r\n {\r\n name: 'STAR EQUALS',\r\n value: '≛',\r\n codepoint: 8795,\r\n },\r\n {\r\n name: 'DELTA EQUAL TO',\r\n value: '≜',\r\n codepoint: 8796,\r\n },\r\n {\r\n name: 'EQUAL TO BY DEFINITION',\r\n value: '≝',\r\n codepoint: 8797,\r\n },\r\n {\r\n name: 'MEASURED BY',\r\n value: '≞',\r\n codepoint: 8798,\r\n },\r\n {\r\n name: 'QUESTIONED EQUAL TO',\r\n value: '≟',\r\n codepoint: 8799,\r\n },\r\n {\r\n name: 'NOT EQUAL TO',\r\n value: '≠',\r\n codepoint: 8800,\r\n },\r\n {\r\n name: 'IDENTICAL TO',\r\n value: '≡',\r\n codepoint: 8801,\r\n },\r\n {\r\n name: 'NOT IDENTICAL TO',\r\n value: '≢',\r\n codepoint: 8802,\r\n },\r\n {\r\n name: 'STRICTLY EQUIVALENT TO',\r\n value: '≣',\r\n codepoint: 8803,\r\n },\r\n {\r\n name: 'LESS-THAN OR EQUAL TO',\r\n value: '≤',\r\n codepoint: 8804,\r\n },\r\n {\r\n name: 'GREATER-THAN OR EQUAL TO',\r\n value: '≥',\r\n codepoint: 8805,\r\n },\r\n {\r\n name: 'LESS-THAN OVER EQUAL TO',\r\n value: '≦',\r\n codepoint: 8806,\r\n },\r\n {\r\n name: 'GREATER-THAN OVER EQUAL TO',\r\n value: '≧',\r\n codepoint: 8807,\r\n },\r\n {\r\n name: 'LESS-THAN BUT NOT EQUAL TO',\r\n value: '≨',\r\n codepoint: 8808,\r\n },\r\n {\r\n name: 'GREATER-THAN BUT NOT EQUAL TO',\r\n value: '≩',\r\n codepoint: 8809,\r\n },\r\n {\r\n name: 'MUCH LESS-THAN',\r\n value: '≪',\r\n codepoint: 8810,\r\n },\r\n {\r\n name: 'MUCH GREATER-THAN',\r\n value: '≫',\r\n codepoint: 8811,\r\n },\r\n {\r\n name: 'BETWEEN',\r\n value: '≬',\r\n codepoint: 8812,\r\n },\r\n {\r\n name: 'NOT EQUIVALENT TO',\r\n value: '≭',\r\n codepoint: 8813,\r\n },\r\n {\r\n name: 'NOT LESS-THAN',\r\n value: '≮',\r\n codepoint: 8814,\r\n },\r\n {\r\n name: 'NOT GREATER-THAN',\r\n value: '≯',\r\n codepoint: 8815,\r\n },\r\n {\r\n name: 'NEITHER LESS-THAN NOR EQUAL TO',\r\n value: '≰',\r\n codepoint: 8816,\r\n },\r\n {\r\n name: 'NEITHER GREATER-THAN NOR EQUAL TO',\r\n value: '≱',\r\n codepoint: 8817,\r\n },\r\n {\r\n name: 'LESS-THAN OR EQUIVALENT TO',\r\n value: '≲',\r\n codepoint: 8818,\r\n },\r\n {\r\n name: 'GREATER-THAN OR EQUIVALENT TO',\r\n value: '≳',\r\n codepoint: 8819,\r\n },\r\n {\r\n name: 'NEITHER LESS-THAN NOR EQUIVALENT TO',\r\n value: '≴',\r\n codepoint: 8820,\r\n },\r\n {\r\n name: 'NEITHER GREATER-THAN NOR EQUIVALENT TO',\r\n value: '≵',\r\n codepoint: 8821,\r\n },\r\n {\r\n name: 'LESS-THAN OR GREATER-THAN',\r\n value: '≶',\r\n codepoint: 8822,\r\n },\r\n {\r\n name: 'GREATER-THAN OR LESS-THAN',\r\n value: '≷',\r\n codepoint: 8823,\r\n },\r\n {\r\n name: 'NEITHER LESS-THAN NOR GREATER-THAN',\r\n value: '≸',\r\n codepoint: 8824,\r\n },\r\n {\r\n name: 'NEITHER GREATER-THAN NOR LESS-THAN',\r\n value: '≹',\r\n codepoint: 8825,\r\n },\r\n {\r\n name: 'PRECEDES',\r\n value: '≺',\r\n codepoint: 8826,\r\n },\r\n {\r\n name: 'SUCCEEDS',\r\n value: '≻',\r\n codepoint: 8827,\r\n },\r\n {\r\n name: 'PRECEDES OR EQUAL TO',\r\n value: '≼',\r\n codepoint: 8828,\r\n },\r\n {\r\n name: 'SUCCEEDS OR EQUAL TO',\r\n value: '≽',\r\n codepoint: 8829,\r\n },\r\n {\r\n name: 'PRECEDES OR EQUIVALENT TO',\r\n value: '≾',\r\n codepoint: 8830,\r\n },\r\n {\r\n name: 'SUCCEEDS OR EQUIVALENT TO',\r\n value: '≿',\r\n codepoint: 8831,\r\n },\r\n {\r\n name: 'DOES NOT PRECEDE',\r\n value: '⊀',\r\n codepoint: 8832,\r\n },\r\n {\r\n name: 'DOES NOT SUCCEED',\r\n value: '⊁',\r\n codepoint: 8833,\r\n },\r\n {\r\n name: 'SUBSET OF',\r\n value: '⊂',\r\n codepoint: 8834,\r\n },\r\n {\r\n name: 'SUPERSET OF',\r\n value: '⊃',\r\n codepoint: 8835,\r\n },\r\n {\r\n name: 'NOT A SUBSET OF',\r\n value: '⊄',\r\n codepoint: 8836,\r\n },\r\n {\r\n name: 'NOT A SUPERSET OF',\r\n value: '⊅',\r\n codepoint: 8837,\r\n },\r\n {\r\n name: 'SUBSET OF OR EQUAL TO',\r\n value: '⊆',\r\n codepoint: 8838,\r\n },\r\n {\r\n name: 'SUPERSET OF OR EQUAL TO',\r\n value: '⊇',\r\n codepoint: 8839,\r\n },\r\n {\r\n name: 'NEITHER A SUBSET OF NOR EQUAL TO',\r\n value: '⊈',\r\n codepoint: 8840,\r\n },\r\n {\r\n name: 'NEITHER A SUPERSET OF NOR EQUAL TO',\r\n value: '⊉',\r\n codepoint: 8841,\r\n },\r\n {\r\n name: 'SUBSET OF WITH NOT EQUAL TO',\r\n value: '⊊',\r\n codepoint: 8842,\r\n },\r\n {\r\n name: 'SUPERSET OF WITH NOT EQUAL TO',\r\n value: '⊋',\r\n codepoint: 8843,\r\n },\r\n {\r\n name: 'MULTISET',\r\n value: '⊌',\r\n codepoint: 8844,\r\n },\r\n {\r\n name: 'MULTISET MULTIPLICATION',\r\n value: '⊍',\r\n codepoint: 8845,\r\n },\r\n {\r\n name: 'MULTISET UNION',\r\n value: '⊎',\r\n codepoint: 8846,\r\n },\r\n {\r\n name: 'SQUARE IMAGE OF',\r\n value: '⊏',\r\n codepoint: 8847,\r\n },\r\n {\r\n name: 'SQUARE ORIGINAL OF',\r\n value: '⊐',\r\n codepoint: 8848,\r\n },\r\n {\r\n name: 'SQUARE IMAGE OF OR EQUAL TO',\r\n value: '⊑',\r\n codepoint: 8849,\r\n },\r\n {\r\n name: 'SQUARE ORIGINAL OF OR EQUAL TO',\r\n value: '⊒',\r\n codepoint: 8850,\r\n },\r\n {\r\n name: 'SQUARE CAP',\r\n value: '⊓',\r\n codepoint: 8851,\r\n },\r\n {\r\n name: 'SQUARE CUP',\r\n value: '⊔',\r\n codepoint: 8852,\r\n },\r\n {\r\n name: 'CIRCLED PLUS',\r\n value: '⊕',\r\n codepoint: 8853,\r\n },\r\n {\r\n name: 'CIRCLED MINUS',\r\n value: '⊖',\r\n codepoint: 8854,\r\n },\r\n {\r\n name: 'CIRCLED TIMES',\r\n value: '⊗',\r\n codepoint: 8855,\r\n },\r\n {\r\n name: 'CIRCLED DIVISION SLASH',\r\n value: '⊘',\r\n codepoint: 8856,\r\n },\r\n {\r\n name: 'CIRCLED DOT OPERATOR',\r\n value: '⊙',\r\n codepoint: 8857,\r\n },\r\n {\r\n name: 'CIRCLED RING OPERATOR',\r\n value: '⊚',\r\n codepoint: 8858,\r\n },\r\n {\r\n name: 'CIRCLED ASTERISK OPERATOR',\r\n value: '⊛',\r\n codepoint: 8859,\r\n },\r\n {\r\n name: 'CIRCLED EQUALS',\r\n value: '⊜',\r\n codepoint: 8860,\r\n },\r\n {\r\n name: 'CIRCLED DASH',\r\n value: '⊝',\r\n codepoint: 8861,\r\n },\r\n {\r\n name: 'SQUARED PLUS',\r\n value: '⊞',\r\n codepoint: 8862,\r\n },\r\n {\r\n name: 'SQUARED MINUS',\r\n value: '⊟',\r\n codepoint: 8863,\r\n },\r\n {\r\n name: 'SQUARED TIMES',\r\n value: '⊠',\r\n codepoint: 8864,\r\n },\r\n {\r\n name: 'SQUARED DOT OPERATOR',\r\n value: '⊡',\r\n codepoint: 8865,\r\n },\r\n {\r\n name: 'RIGHT TACK',\r\n value: '⊢',\r\n codepoint: 8866,\r\n },\r\n {\r\n name: 'LEFT TACK',\r\n value: '⊣',\r\n codepoint: 8867,\r\n },\r\n {\r\n name: 'DOWN TACK',\r\n value: '⊤',\r\n codepoint: 8868,\r\n },\r\n {\r\n name: 'UP TACK',\r\n value: '⊥',\r\n codepoint: 8869,\r\n },\r\n {\r\n name: 'ASSERTION',\r\n value: '⊦',\r\n codepoint: 8870,\r\n },\r\n {\r\n name: 'MODELS',\r\n value: '⊧',\r\n codepoint: 8871,\r\n },\r\n {\r\n name: 'TRUE',\r\n value: '⊨',\r\n codepoint: 8872,\r\n },\r\n {\r\n name: 'FORCES',\r\n value: '⊩',\r\n codepoint: 8873,\r\n },\r\n {\r\n name: 'TRIPLE VERTICAL BAR RIGHT TURNSTILE',\r\n value: '⊪',\r\n codepoint: 8874,\r\n },\r\n {\r\n name: 'DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE',\r\n value: '⊫',\r\n codepoint: 8875,\r\n },\r\n {\r\n name: 'DOES NOT PROVE',\r\n value: '⊬',\r\n codepoint: 8876,\r\n },\r\n {\r\n name: 'NOT TRUE',\r\n value: '⊭',\r\n codepoint: 8877,\r\n },\r\n {\r\n name: 'DOES NOT FORCE',\r\n value: '⊮',\r\n codepoint: 8878,\r\n },\r\n {\r\n name: 'NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE',\r\n value: '⊯',\r\n codepoint: 8879,\r\n },\r\n {\r\n name: 'PRECEDES UNDER RELATION',\r\n value: '⊰',\r\n codepoint: 8880,\r\n },\r\n {\r\n name: 'SUCCEEDS UNDER RELATION',\r\n value: '⊱',\r\n codepoint: 8881,\r\n },\r\n {\r\n name: 'NORMAL SUBGROUP OF',\r\n value: '⊲',\r\n codepoint: 8882,\r\n },\r\n {\r\n name: 'CONTAINS AS NORMAL SUBGROUP',\r\n value: '⊳',\r\n codepoint: 8883,\r\n },\r\n {\r\n name: 'NORMAL SUBGROUP OF OR EQUAL TO',\r\n value: '⊴',\r\n codepoint: 8884,\r\n },\r\n {\r\n name: 'CONTAINS AS NORMAL SUBGROUP OR EQUAL TO',\r\n value: '⊵',\r\n codepoint: 8885,\r\n },\r\n {\r\n name: 'ORIGINAL OF',\r\n value: '⊶',\r\n codepoint: 8886,\r\n },\r\n {\r\n name: 'IMAGE OF',\r\n value: '⊷',\r\n codepoint: 8887,\r\n },\r\n {\r\n name: 'MULTIMAP',\r\n value: '⊸',\r\n codepoint: 8888,\r\n },\r\n {\r\n name: 'HERMITIAN CONJUGATE MATRIX',\r\n value: '⊹',\r\n codepoint: 8889,\r\n },\r\n {\r\n name: 'INTERCALATE',\r\n value: '⊺',\r\n codepoint: 8890,\r\n },\r\n {\r\n name: 'XOR',\r\n value: '⊻',\r\n codepoint: 8891,\r\n },\r\n {\r\n name: 'NAND',\r\n value: '⊼',\r\n codepoint: 8892,\r\n },\r\n {\r\n name: 'NOR',\r\n value: '⊽',\r\n codepoint: 8893,\r\n },\r\n {\r\n name: 'RIGHT ANGLE WITH ARC',\r\n value: '⊾',\r\n codepoint: 8894,\r\n },\r\n {\r\n name: 'RIGHT TRIANGLE',\r\n value: '⊿',\r\n codepoint: 8895,\r\n },\r\n {\r\n name: 'N-ARY LOGICAL AND',\r\n value: '⋀',\r\n codepoint: 8896,\r\n },\r\n {\r\n name: 'N-ARY LOGICAL OR',\r\n value: '⋁',\r\n codepoint: 8897,\r\n },\r\n {\r\n name: 'N-ARY INTERSECTION',\r\n value: '⋂',\r\n codepoint: 8898,\r\n },\r\n {\r\n name: 'N-ARY UNION',\r\n value: '⋃',\r\n codepoint: 8899,\r\n },\r\n {\r\n name: 'DIAMOND OPERATOR',\r\n value: '⋄',\r\n codepoint: 8900,\r\n },\r\n {\r\n name: 'DOT OPERATOR',\r\n value: '⋅',\r\n codepoint: 8901,\r\n },\r\n {\r\n name: 'STAR OPERATOR',\r\n value: '⋆',\r\n codepoint: 8902,\r\n },\r\n {\r\n name: 'DIVISION TIMES',\r\n value: '⋇',\r\n codepoint: 8903,\r\n },\r\n {\r\n name: 'BOWTIE',\r\n value: '⋈',\r\n codepoint: 8904,\r\n },\r\n {\r\n name: 'LEFT NORMAL FACTOR SEMIDIRECT PRODUCT',\r\n value: '⋉',\r\n codepoint: 8905,\r\n },\r\n {\r\n name: 'RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT',\r\n value: '⋊',\r\n codepoint: 8906,\r\n },\r\n {\r\n name: 'LEFT SEMIDIRECT PRODUCT',\r\n value: '⋋',\r\n codepoint: 8907,\r\n },\r\n {\r\n name: 'RIGHT SEMIDIRECT PRODUCT',\r\n value: '⋌',\r\n codepoint: 8908,\r\n },\r\n {\r\n name: 'REVERSED TILDE EQUALS',\r\n value: '⋍',\r\n codepoint: 8909,\r\n },\r\n {\r\n name: 'CURLY LOGICAL OR',\r\n value: '⋎',\r\n codepoint: 8910,\r\n },\r\n {\r\n name: 'CURLY LOGICAL AND',\r\n value: '⋏',\r\n codepoint: 8911,\r\n },\r\n {\r\n name: 'DOUBLE SUBSET',\r\n value: '⋐',\r\n codepoint: 8912,\r\n },\r\n {\r\n name: 'DOUBLE SUPERSET',\r\n value: '⋑',\r\n codepoint: 8913,\r\n },\r\n {\r\n name: 'DOUBLE INTERSECTION',\r\n value: '⋒',\r\n codepoint: 8914,\r\n },\r\n {\r\n name: 'DOUBLE UNION',\r\n value: '⋓',\r\n codepoint: 8915,\r\n },\r\n {\r\n name: 'PITCHFORK',\r\n value: '⋔',\r\n codepoint: 8916,\r\n },\r\n {\r\n name: 'EQUAL AND PARALLEL TO',\r\n value: '⋕',\r\n codepoint: 8917,\r\n },\r\n {\r\n name: 'LESS-THAN WITH DOT',\r\n value: '⋖',\r\n codepoint: 8918,\r\n },\r\n {\r\n name: 'GREATER-THAN WITH DOT',\r\n value: '⋗',\r\n codepoint: 8919,\r\n },\r\n {\r\n name: 'VERY MUCH LESS-THAN',\r\n value: '⋘',\r\n codepoint: 8920,\r\n },\r\n {\r\n name: 'VERY MUCH GREATER-THAN',\r\n value: '⋙',\r\n codepoint: 8921,\r\n },\r\n {\r\n name: 'LESS-THAN EQUAL TO OR GREATER-THAN',\r\n value: '⋚',\r\n codepoint: 8922,\r\n },\r\n {\r\n name: 'GREATER-THAN EQUAL TO OR LESS-THAN',\r\n value: '⋛',\r\n codepoint: 8923,\r\n },\r\n {\r\n name: 'EQUAL TO OR LESS-THAN',\r\n value: '⋜',\r\n codepoint: 8924,\r\n },\r\n {\r\n name: 'EQUAL TO OR GREATER-THAN',\r\n value: '⋝',\r\n codepoint: 8925,\r\n },\r\n {\r\n name: 'EQUAL TO OR PRECEDES',\r\n value: '⋞',\r\n codepoint: 8926,\r\n },\r\n {\r\n name: 'EQUAL TO OR SUCCEEDS',\r\n value: '⋟',\r\n codepoint: 8927,\r\n },\r\n {\r\n name: 'DOES NOT PRECEDE OR EQUAL',\r\n value: '⋠',\r\n codepoint: 8928,\r\n },\r\n {\r\n name: 'DOES NOT SUCCEED OR EQUAL',\r\n value: '⋡',\r\n codepoint: 8929,\r\n },\r\n {\r\n name: 'NOT SQUARE IMAGE OF OR EQUAL TO',\r\n value: '⋢',\r\n codepoint: 8930,\r\n },\r\n {\r\n name: 'NOT SQUARE ORIGINAL OF OR EQUAL TO',\r\n value: '⋣',\r\n codepoint: 8931,\r\n },\r\n {\r\n name: 'SQUARE IMAGE OF OR NOT EQUAL TO',\r\n value: '⋤',\r\n codepoint: 8932,\r\n },\r\n {\r\n name: 'SQUARE ORIGINAL OF OR NOT EQUAL TO',\r\n value: '⋥',\r\n codepoint: 8933,\r\n },\r\n {\r\n name: 'LESS-THAN BUT NOT EQUIVALENT TO',\r\n value: '⋦',\r\n codepoint: 8934,\r\n },\r\n {\r\n name: 'GREATER-THAN BUT NOT EQUIVALENT TO',\r\n value: '⋧',\r\n codepoint: 8935,\r\n },\r\n {\r\n name: 'PRECEDES BUT NOT EQUIVALENT TO',\r\n value: '⋨',\r\n codepoint: 8936,\r\n },\r\n {\r\n name: 'SUCCEEDS BUT NOT EQUIVALENT TO',\r\n value: '⋩',\r\n codepoint: 8937,\r\n },\r\n {\r\n name: 'NOT NORMAL SUBGROUP OF',\r\n value: '⋪',\r\n codepoint: 8938,\r\n },\r\n {\r\n name: 'DOES NOT CONTAIN AS NORMAL SUBGROUP',\r\n value: '⋫',\r\n codepoint: 8939,\r\n },\r\n {\r\n name: 'NOT NORMAL SUBGROUP OF OR EQUAL TO',\r\n value: '⋬',\r\n codepoint: 8940,\r\n },\r\n {\r\n name: 'DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL',\r\n value: '⋭',\r\n codepoint: 8941,\r\n },\r\n {\r\n name: 'VERTICAL ELLIPSIS',\r\n value: '⋮',\r\n codepoint: 8942,\r\n },\r\n {\r\n name: 'MIDLINE HORIZONTAL ELLIPSIS',\r\n value: '⋯',\r\n codepoint: 8943,\r\n },\r\n {\r\n name: 'UP RIGHT DIAGONAL ELLIPSIS',\r\n value: '⋰',\r\n codepoint: 8944,\r\n },\r\n {\r\n name: 'DOWN RIGHT DIAGONAL ELLIPSIS',\r\n value: '⋱',\r\n codepoint: 8945,\r\n },\r\n {\r\n name: 'ELEMENT OF WITH LONG HORIZONTAL STROKE',\r\n value: '⋲',\r\n codepoint: 8946,\r\n },\r\n {\r\n name: 'ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE',\r\n value: '⋳',\r\n codepoint: 8947,\r\n },\r\n {\r\n name: 'SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE',\r\n value: '⋴',\r\n codepoint: 8948,\r\n },\r\n {\r\n name: 'ELEMENT OF WITH DOT ABOVE',\r\n value: '⋵',\r\n codepoint: 8949,\r\n },\r\n {\r\n name: 'ELEMENT OF WITH OVERBAR',\r\n value: '⋶',\r\n codepoint: 8950,\r\n },\r\n {\r\n name: 'SMALL ELEMENT OF WITH OVERBAR',\r\n value: '⋷',\r\n codepoint: 8951,\r\n },\r\n {\r\n name: 'ELEMENT OF WITH UNDERBAR',\r\n value: '⋸',\r\n codepoint: 8952,\r\n },\r\n {\r\n name: 'ELEMENT OF WITH TWO HORIZONTAL STROKES',\r\n value: '⋹',\r\n codepoint: 8953,\r\n },\r\n {\r\n name: 'CONTAINS WITH LONG HORIZONTAL STROKE',\r\n value: '⋺',\r\n codepoint: 8954,\r\n },\r\n {\r\n name: 'CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE',\r\n value: '⋻',\r\n codepoint: 8955,\r\n },\r\n {\r\n name: 'SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE',\r\n value: '⋼',\r\n codepoint: 8956,\r\n },\r\n {\r\n name: 'CONTAINS WITH OVERBAR',\r\n value: '⋽',\r\n codepoint: 8957,\r\n },\r\n {\r\n name: 'SMALL CONTAINS WITH OVERBAR',\r\n value: '⋾',\r\n codepoint: 8958,\r\n },\r\n {\r\n name: 'Z NOTATION BAG MEMBERSHIP',\r\n value: '⋿',\r\n codepoint: 8959,\r\n },\r\n {\r\n name: 'THREE DIMENSIONAL ANGLE',\r\n value: '⟀',\r\n codepoint: 10176,\r\n },\r\n {\r\n name: 'WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE',\r\n value: '⟁',\r\n codepoint: 10177,\r\n },\r\n {\r\n name: 'PERPENDICULAR',\r\n value: '⟂',\r\n codepoint: 10178,\r\n },\r\n {\r\n name: 'OPEN SUBSET',\r\n value: '⟃',\r\n codepoint: 10179,\r\n },\r\n {\r\n name: 'OPEN SUPERSET',\r\n value: '⟄',\r\n codepoint: 10180,\r\n },\r\n {\r\n name: 'LEFT S-SHAPED BAG DELIMITER',\r\n value: '⟅',\r\n codepoint: 10181,\r\n },\r\n {\r\n name: 'RIGHT S-SHAPED BAG DELIMITER',\r\n value: '⟆',\r\n codepoint: 10182,\r\n },\r\n {\r\n name: 'OR WITH DOT INSIDE',\r\n value: '⟇',\r\n codepoint: 10183,\r\n },\r\n {\r\n name: 'REVERSE SOLIDUS PRECEDING SUBSET',\r\n value: '⟈',\r\n codepoint: 10184,\r\n },\r\n {\r\n name: 'SUPERSET PRECEDING SOLIDUS',\r\n value: '⟉',\r\n codepoint: 10185,\r\n },\r\n {\r\n name: 'VERTICAL BAR WITH HORIZONTAL STROKE',\r\n value: '⟊',\r\n codepoint: 10186,\r\n },\r\n {\r\n name: 'LONG DIVISION',\r\n value: '⟌',\r\n codepoint: 10188,\r\n },\r\n {\r\n name: 'WHITE DIAMOND WITH CENTRED DOT',\r\n value: '⟐',\r\n codepoint: 10192,\r\n },\r\n {\r\n name: 'AND WITH DOT',\r\n value: '⟑',\r\n codepoint: 10193,\r\n },\r\n {\r\n name: 'ELEMENT OF OPENING UPWARDS',\r\n value: '⟒',\r\n codepoint: 10194,\r\n },\r\n {\r\n name: 'LOWER RIGHT CORNER WITH DOT',\r\n value: '⟓',\r\n codepoint: 10195,\r\n },\r\n {\r\n name: 'UPPER LEFT CORNER WITH DOT',\r\n value: '⟔',\r\n codepoint: 10196,\r\n },\r\n {\r\n name: 'LEFT OUTER JOIN',\r\n value: '⟕',\r\n codepoint: 10197,\r\n },\r\n {\r\n name: 'RIGHT OUTER JOIN',\r\n value: '⟖',\r\n codepoint: 10198,\r\n },\r\n {\r\n name: 'FULL OUTER JOIN',\r\n value: '⟗',\r\n codepoint: 10199,\r\n },\r\n {\r\n name: 'LARGE UP TACK',\r\n value: '⟘',\r\n codepoint: 10200,\r\n },\r\n {\r\n name: 'LARGE DOWN TACK',\r\n value: '⟙',\r\n codepoint: 10201,\r\n },\r\n {\r\n name: 'LEFT AND RIGHT DOUBLE TURNSTILE',\r\n value: '⟚',\r\n codepoint: 10202,\r\n },\r\n {\r\n name: 'LEFT AND RIGHT TACK',\r\n value: '⟛',\r\n codepoint: 10203,\r\n },\r\n {\r\n name: 'LEFT MULTIMAP',\r\n value: '⟜',\r\n codepoint: 10204,\r\n },\r\n {\r\n name: 'LONG RIGHT TACK',\r\n value: '⟝',\r\n codepoint: 10205,\r\n },\r\n {\r\n name: 'LONG LEFT TACK',\r\n value: '⟞',\r\n codepoint: 10206,\r\n },\r\n {\r\n name: 'UP TACK WITH CIRCLE ABOVE',\r\n value: '⟟',\r\n codepoint: 10207,\r\n },\r\n {\r\n name: 'LOZENGE DIVIDED BY HORIZONTAL RULE',\r\n value: '⟠',\r\n codepoint: 10208,\r\n },\r\n {\r\n name: 'WHITE CONCAVE-SIDED DIAMOND',\r\n value: '⟡',\r\n codepoint: 10209,\r\n },\r\n {\r\n name: 'WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK',\r\n value: '⟢',\r\n codepoint: 10210,\r\n },\r\n {\r\n name: 'WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK',\r\n value: '⟣',\r\n codepoint: 10211,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH LEFTWARDS TICK',\r\n value: '⟤',\r\n codepoint: 10212,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH RIGHTWARDS TICK',\r\n value: '⟥',\r\n codepoint: 10213,\r\n },\r\n {\r\n name: 'MATHEMATICAL LEFT WHITE SQUARE BRACKET',\r\n value: '⟦',\r\n codepoint: 10214,\r\n },\r\n {\r\n name: 'MATHEMATICAL RIGHT WHITE SQUARE BRACKET',\r\n value: '⟧',\r\n codepoint: 10215,\r\n },\r\n {\r\n name: 'MATHEMATICAL LEFT ANGLE BRACKET',\r\n value: '⟨',\r\n codepoint: 10216,\r\n },\r\n {\r\n name: 'MATHEMATICAL RIGHT ANGLE BRACKET',\r\n value: '⟩',\r\n codepoint: 10217,\r\n },\r\n {\r\n name: 'MATHEMATICAL LEFT DOUBLE ANGLE BRACKET',\r\n value: '⟪',\r\n codepoint: 10218,\r\n },\r\n {\r\n name: 'MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET',\r\n value: '⟫',\r\n codepoint: 10219,\r\n },\r\n {\r\n name: 'MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET',\r\n value: '⟬',\r\n codepoint: 10220,\r\n },\r\n {\r\n name: 'MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET',\r\n value: '⟭',\r\n codepoint: 10221,\r\n },\r\n {\r\n name: 'MATHEMATICAL LEFT FLATTENED PARENTHESIS',\r\n value: '⟮',\r\n codepoint: 10222,\r\n },\r\n {\r\n name: 'MATHEMATICAL RIGHT FLATTENED PARENTHESIS',\r\n value: '⟯',\r\n codepoint: 10223,\r\n },\r\n {\r\n name: 'TRIPLE VERTICAL BAR DELIMITER',\r\n value: '⦀',\r\n codepoint: 10624,\r\n },\r\n {\r\n name: 'Z NOTATION SPOT',\r\n value: '⦁',\r\n codepoint: 10625,\r\n },\r\n {\r\n name: 'Z NOTATION TYPE COLON',\r\n value: '⦂',\r\n codepoint: 10626,\r\n },\r\n {\r\n name: 'LEFT WHITE CURLY BRACKET',\r\n value: '⦃',\r\n codepoint: 10627,\r\n },\r\n {\r\n name: 'RIGHT WHITE CURLY BRACKET',\r\n value: '⦄',\r\n codepoint: 10628,\r\n },\r\n {\r\n name: 'LEFT WHITE PARENTHESIS',\r\n value: '⦅',\r\n codepoint: 10629,\r\n },\r\n {\r\n name: 'RIGHT WHITE PARENTHESIS',\r\n value: '⦆',\r\n codepoint: 10630,\r\n },\r\n {\r\n name: 'Z NOTATION LEFT IMAGE BRACKET',\r\n value: '⦇',\r\n codepoint: 10631,\r\n },\r\n {\r\n name: 'Z NOTATION RIGHT IMAGE BRACKET',\r\n value: '⦈',\r\n codepoint: 10632,\r\n },\r\n {\r\n name: 'Z NOTATION LEFT BINDING BRACKET',\r\n value: '⦉',\r\n codepoint: 10633,\r\n },\r\n {\r\n name: 'Z NOTATION RIGHT BINDING BRACKET',\r\n value: '⦊',\r\n codepoint: 10634,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET WITH UNDERBAR',\r\n value: '⦋',\r\n codepoint: 10635,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET WITH UNDERBAR',\r\n value: '⦌',\r\n codepoint: 10636,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET WITH TICK IN TOP CORNER',\r\n value: '⦍',\r\n codepoint: 10637,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER',\r\n value: '⦎',\r\n codepoint: 10638,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER',\r\n value: '⦏',\r\n codepoint: 10639,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER',\r\n value: '⦐',\r\n codepoint: 10640,\r\n },\r\n {\r\n name: 'LEFT ANGLE BRACKET WITH DOT',\r\n value: '⦑',\r\n codepoint: 10641,\r\n },\r\n {\r\n name: 'RIGHT ANGLE BRACKET WITH DOT',\r\n value: '⦒',\r\n codepoint: 10642,\r\n },\r\n {\r\n name: 'LEFT ARC LESS-THAN BRACKET',\r\n value: '⦓',\r\n codepoint: 10643,\r\n },\r\n {\r\n name: 'RIGHT ARC GREATER-THAN BRACKET',\r\n value: '⦔',\r\n codepoint: 10644,\r\n },\r\n {\r\n name: 'DOUBLE LEFT ARC GREATER-THAN BRACKET',\r\n value: '⦕',\r\n codepoint: 10645,\r\n },\r\n {\r\n name: 'DOUBLE RIGHT ARC LESS-THAN BRACKET',\r\n value: '⦖',\r\n codepoint: 10646,\r\n },\r\n {\r\n name: 'LEFT BLACK TORTOISE SHELL BRACKET',\r\n value: '⦗',\r\n codepoint: 10647,\r\n },\r\n {\r\n name: 'RIGHT BLACK TORTOISE SHELL BRACKET',\r\n value: '⦘',\r\n codepoint: 10648,\r\n },\r\n {\r\n name: 'DOTTED FENCE',\r\n value: '⦙',\r\n codepoint: 10649,\r\n },\r\n {\r\n name: 'VERTICAL ZIGZAG LINE',\r\n value: '⦚',\r\n codepoint: 10650,\r\n },\r\n {\r\n name: 'MEASURED ANGLE OPENING LEFT',\r\n value: '⦛',\r\n codepoint: 10651,\r\n },\r\n {\r\n name: 'RIGHT ANGLE VARIANT WITH SQUARE',\r\n value: '⦜',\r\n codepoint: 10652,\r\n },\r\n {\r\n name: 'MEASURED RIGHT ANGLE WITH DOT',\r\n value: '⦝',\r\n codepoint: 10653,\r\n },\r\n {\r\n name: 'ANGLE WITH S INSIDE',\r\n value: '⦞',\r\n codepoint: 10654,\r\n },\r\n {\r\n name: 'ACUTE ANGLE',\r\n value: '⦟',\r\n codepoint: 10655,\r\n },\r\n {\r\n name: 'SPHERICAL ANGLE OPENING LEFT',\r\n value: '⦠',\r\n codepoint: 10656,\r\n },\r\n {\r\n name: 'SPHERICAL ANGLE OPENING UP',\r\n value: '⦡',\r\n codepoint: 10657,\r\n },\r\n {\r\n name: 'TURNED ANGLE',\r\n value: '⦢',\r\n codepoint: 10658,\r\n },\r\n {\r\n name: 'REVERSED ANGLE',\r\n value: '⦣',\r\n codepoint: 10659,\r\n },\r\n {\r\n name: 'ANGLE WITH UNDERBAR',\r\n value: '⦤',\r\n codepoint: 10660,\r\n },\r\n {\r\n name: 'REVERSED ANGLE WITH UNDERBAR',\r\n value: '⦥',\r\n codepoint: 10661,\r\n },\r\n {\r\n name: 'OBLIQUE ANGLE OPENING UP',\r\n value: '⦦',\r\n codepoint: 10662,\r\n },\r\n {\r\n name: 'OBLIQUE ANGLE OPENING DOWN',\r\n value: '⦧',\r\n codepoint: 10663,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT',\r\n value: '⦨',\r\n codepoint: 10664,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT',\r\n value: '⦩',\r\n codepoint: 10665,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT',\r\n value: '⦪',\r\n codepoint: 10666,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT',\r\n value: '⦫',\r\n codepoint: 10667,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP',\r\n value: '⦬',\r\n codepoint: 10668,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP',\r\n value: '⦭',\r\n codepoint: 10669,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN',\r\n value: '⦮',\r\n codepoint: 10670,\r\n },\r\n {\r\n name: 'MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN',\r\n value: '⦯',\r\n codepoint: 10671,\r\n },\r\n {\r\n name: 'REVERSED EMPTY SET',\r\n value: '⦰',\r\n codepoint: 10672,\r\n },\r\n {\r\n name: 'EMPTY SET WITH OVERBAR',\r\n value: '⦱',\r\n codepoint: 10673,\r\n },\r\n {\r\n name: 'EMPTY SET WITH SMALL CIRCLE ABOVE',\r\n value: '⦲',\r\n codepoint: 10674,\r\n },\r\n {\r\n name: 'EMPTY SET WITH RIGHT ARROW ABOVE',\r\n value: '⦳',\r\n codepoint: 10675,\r\n },\r\n {\r\n name: 'EMPTY SET WITH LEFT ARROW ABOVE',\r\n value: '⦴',\r\n codepoint: 10676,\r\n },\r\n {\r\n name: 'CIRCLE WITH HORIZONTAL BAR',\r\n value: '⦵',\r\n codepoint: 10677,\r\n },\r\n {\r\n name: 'CIRCLED VERTICAL BAR',\r\n value: '⦶',\r\n codepoint: 10678,\r\n },\r\n {\r\n name: 'CIRCLED PARALLEL',\r\n value: '⦷',\r\n codepoint: 10679,\r\n },\r\n {\r\n name: 'CIRCLED REVERSE SOLIDUS',\r\n value: '⦸',\r\n codepoint: 10680,\r\n },\r\n {\r\n name: 'CIRCLED PERPENDICULAR',\r\n value: '⦹',\r\n codepoint: 10681,\r\n },\r\n {\r\n name: 'CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR',\r\n value: '⦺',\r\n codepoint: 10682,\r\n },\r\n {\r\n name: 'CIRCLE WITH SUPERIMPOSED X',\r\n value: '⦻',\r\n codepoint: 10683,\r\n },\r\n {\r\n name: 'CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN',\r\n value: '⦼',\r\n codepoint: 10684,\r\n },\r\n {\r\n name: 'UP ARROW THROUGH CIRCLE',\r\n value: '⦽',\r\n codepoint: 10685,\r\n },\r\n {\r\n name: 'CIRCLED WHITE BULLET',\r\n value: '⦾',\r\n codepoint: 10686,\r\n },\r\n {\r\n name: 'CIRCLED BULLET',\r\n value: '⦿',\r\n codepoint: 10687,\r\n },\r\n {\r\n name: 'CIRCLED LESS-THAN',\r\n value: '⧀',\r\n codepoint: 10688,\r\n },\r\n {\r\n name: 'CIRCLED GREATER-THAN',\r\n value: '⧁',\r\n codepoint: 10689,\r\n },\r\n {\r\n name: 'CIRCLE WITH SMALL CIRCLE TO THE RIGHT',\r\n value: '⧂',\r\n codepoint: 10690,\r\n },\r\n {\r\n name: 'CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT',\r\n value: '⧃',\r\n codepoint: 10691,\r\n },\r\n {\r\n name: 'SQUARED RISING DIAGONAL SLASH',\r\n value: '⧄',\r\n codepoint: 10692,\r\n },\r\n {\r\n name: 'SQUARED FALLING DIAGONAL SLASH',\r\n value: '⧅',\r\n codepoint: 10693,\r\n },\r\n {\r\n name: 'SQUARED ASTERISK',\r\n value: '⧆',\r\n codepoint: 10694,\r\n },\r\n {\r\n name: 'SQUARED SMALL CIRCLE',\r\n value: '⧇',\r\n codepoint: 10695,\r\n },\r\n {\r\n name: 'SQUARED SQUARE',\r\n value: '⧈',\r\n codepoint: 10696,\r\n },\r\n {\r\n name: 'TWO JOINED SQUARES',\r\n value: '⧉',\r\n codepoint: 10697,\r\n },\r\n {\r\n name: 'TRIANGLE WITH DOT ABOVE',\r\n value: '⧊',\r\n codepoint: 10698,\r\n },\r\n {\r\n name: 'TRIANGLE WITH UNDERBAR',\r\n value: '⧋',\r\n codepoint: 10699,\r\n },\r\n {\r\n name: 'S IN TRIANGLE',\r\n value: '⧌',\r\n codepoint: 10700,\r\n },\r\n {\r\n name: 'TRIANGLE WITH SERIFS AT BOTTOM',\r\n value: '⧍',\r\n codepoint: 10701,\r\n },\r\n {\r\n name: 'RIGHT TRIANGLE ABOVE LEFT TRIANGLE',\r\n value: '⧎',\r\n codepoint: 10702,\r\n },\r\n {\r\n name: 'LEFT TRIANGLE BESIDE VERTICAL BAR',\r\n value: '⧏',\r\n codepoint: 10703,\r\n },\r\n {\r\n name: 'VERTICAL BAR BESIDE RIGHT TRIANGLE',\r\n value: '⧐',\r\n codepoint: 10704,\r\n },\r\n {\r\n name: 'BOWTIE WITH LEFT HALF BLACK',\r\n value: '⧑',\r\n codepoint: 10705,\r\n },\r\n {\r\n name: 'BOWTIE WITH RIGHT HALF BLACK',\r\n value: '⧒',\r\n codepoint: 10706,\r\n },\r\n {\r\n name: 'BLACK BOWTIE',\r\n value: '⧓',\r\n codepoint: 10707,\r\n },\r\n {\r\n name: 'TIMES WITH LEFT HALF BLACK',\r\n value: '⧔',\r\n codepoint: 10708,\r\n },\r\n {\r\n name: 'TIMES WITH RIGHT HALF BLACK',\r\n value: '⧕',\r\n codepoint: 10709,\r\n },\r\n {\r\n name: 'WHITE HOURGLASS',\r\n value: '⧖',\r\n codepoint: 10710,\r\n },\r\n {\r\n name: 'BLACK HOURGLASS',\r\n value: '⧗',\r\n codepoint: 10711,\r\n },\r\n {\r\n name: 'LEFT WIGGLY FENCE',\r\n value: '⧘',\r\n codepoint: 10712,\r\n },\r\n {\r\n name: 'RIGHT WIGGLY FENCE',\r\n value: '⧙',\r\n codepoint: 10713,\r\n },\r\n {\r\n name: 'LEFT DOUBLE WIGGLY FENCE',\r\n value: '⧚',\r\n codepoint: 10714,\r\n },\r\n {\r\n name: 'RIGHT DOUBLE WIGGLY FENCE',\r\n value: '⧛',\r\n codepoint: 10715,\r\n },\r\n {\r\n name: 'INCOMPLETE INFINITY',\r\n value: '⧜',\r\n codepoint: 10716,\r\n },\r\n {\r\n name: 'TIE OVER INFINITY',\r\n value: '⧝',\r\n codepoint: 10717,\r\n },\r\n {\r\n name: 'INFINITY NEGATED WITH VERTICAL BAR',\r\n value: '⧞',\r\n codepoint: 10718,\r\n },\r\n {\r\n name: 'DOUBLE-ENDED MULTIMAP',\r\n value: '⧟',\r\n codepoint: 10719,\r\n },\r\n {\r\n name: 'SQUARE WITH CONTOURED OUTLINE',\r\n value: '⧠',\r\n codepoint: 10720,\r\n },\r\n {\r\n name: 'INCREASES AS',\r\n value: '⧡',\r\n codepoint: 10721,\r\n },\r\n {\r\n name: 'SHUFFLE PRODUCT',\r\n value: '⧢',\r\n codepoint: 10722,\r\n },\r\n {\r\n name: 'EQUALS SIGN AND SLANTED PARALLEL',\r\n value: '⧣',\r\n codepoint: 10723,\r\n },\r\n {\r\n name: 'EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE',\r\n value: '⧤',\r\n codepoint: 10724,\r\n },\r\n {\r\n name: 'IDENTICAL TO AND SLANTED PARALLEL',\r\n value: '⧥',\r\n codepoint: 10725,\r\n },\r\n {\r\n name: 'GLEICH STARK',\r\n value: '⧦',\r\n codepoint: 10726,\r\n },\r\n {\r\n name: 'THERMODYNAMIC',\r\n value: '⧧',\r\n codepoint: 10727,\r\n },\r\n {\r\n name: 'DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK',\r\n value: '⧨',\r\n codepoint: 10728,\r\n },\r\n {\r\n name: 'DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK',\r\n value: '⧩',\r\n codepoint: 10729,\r\n },\r\n {\r\n name: 'BLACK DIAMOND WITH DOWN ARROW',\r\n value: '⧪',\r\n codepoint: 10730,\r\n },\r\n {\r\n name: 'BLACK LOZENGE',\r\n value: '⧫',\r\n codepoint: 10731,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH DOWN ARROW',\r\n value: '⧬',\r\n codepoint: 10732,\r\n },\r\n {\r\n name: 'BLACK CIRCLE WITH DOWN ARROW',\r\n value: '⧭',\r\n codepoint: 10733,\r\n },\r\n {\r\n name: 'ERROR-BARRED WHITE SQUARE',\r\n value: '⧮',\r\n codepoint: 10734,\r\n },\r\n {\r\n name: 'ERROR-BARRED BLACK SQUARE',\r\n value: '⧯',\r\n codepoint: 10735,\r\n },\r\n {\r\n name: 'ERROR-BARRED WHITE DIAMOND',\r\n value: '⧰',\r\n codepoint: 10736,\r\n },\r\n {\r\n name: 'ERROR-BARRED BLACK DIAMOND',\r\n value: '⧱',\r\n codepoint: 10737,\r\n },\r\n {\r\n name: 'ERROR-BARRED WHITE CIRCLE',\r\n value: '⧲',\r\n codepoint: 10738,\r\n },\r\n {\r\n name: 'ERROR-BARRED BLACK CIRCLE',\r\n value: '⧳',\r\n codepoint: 10739,\r\n },\r\n {\r\n name: 'RULE-DELAYED',\r\n value: '⧴',\r\n codepoint: 10740,\r\n },\r\n {\r\n name: 'REVERSE SOLIDUS OPERATOR',\r\n value: '⧵',\r\n codepoint: 10741,\r\n },\r\n {\r\n name: 'SOLIDUS WITH OVERBAR',\r\n value: '⧶',\r\n codepoint: 10742,\r\n },\r\n {\r\n name: 'REVERSE SOLIDUS WITH HORIZONTAL STROKE',\r\n value: '⧷',\r\n codepoint: 10743,\r\n },\r\n {\r\n name: 'BIG SOLIDUS',\r\n value: '⧸',\r\n codepoint: 10744,\r\n },\r\n {\r\n name: 'BIG REVERSE SOLIDUS',\r\n value: '⧹',\r\n codepoint: 10745,\r\n },\r\n {\r\n name: 'DOUBLE PLUS',\r\n value: '⧺',\r\n codepoint: 10746,\r\n },\r\n {\r\n name: 'TRIPLE PLUS',\r\n value: '⧻',\r\n codepoint: 10747,\r\n },\r\n {\r\n name: 'LEFT-POINTING CURVED ANGLE BRACKET',\r\n value: '⧼',\r\n codepoint: 10748,\r\n },\r\n {\r\n name: 'RIGHT-POINTING CURVED ANGLE BRACKET',\r\n value: '⧽',\r\n codepoint: 10749,\r\n },\r\n {\r\n name: 'TINY',\r\n value: '⧾',\r\n codepoint: 10750,\r\n },\r\n {\r\n name: 'MINY',\r\n value: '⧿',\r\n codepoint: 10751,\r\n },\r\n {\r\n name: 'N-ARY CIRCLED DOT OPERATOR',\r\n value: '⨀',\r\n codepoint: 10752,\r\n },\r\n {\r\n name: 'N-ARY CIRCLED PLUS OPERATOR',\r\n value: '⨁',\r\n codepoint: 10753,\r\n },\r\n {\r\n name: 'N-ARY CIRCLED TIMES OPERATOR',\r\n value: '⨂',\r\n codepoint: 10754,\r\n },\r\n {\r\n name: 'N-ARY UNION OPERATOR WITH DOT',\r\n value: '⨃',\r\n codepoint: 10755,\r\n },\r\n {\r\n name: 'N-ARY UNION OPERATOR WITH PLUS',\r\n value: '⨄',\r\n codepoint: 10756,\r\n },\r\n {\r\n name: 'N-ARY SQUARE INTERSECTION OPERATOR',\r\n value: '⨅',\r\n codepoint: 10757,\r\n },\r\n {\r\n name: 'N-ARY SQUARE UNION OPERATOR',\r\n value: '⨆',\r\n codepoint: 10758,\r\n },\r\n {\r\n name: 'TWO LOGICAL AND OPERATOR',\r\n value: '⨇',\r\n codepoint: 10759,\r\n },\r\n {\r\n name: 'TWO LOGICAL OR OPERATOR',\r\n value: '⨈',\r\n codepoint: 10760,\r\n },\r\n {\r\n name: 'N-ARY TIMES OPERATOR',\r\n value: '⨉',\r\n codepoint: 10761,\r\n },\r\n {\r\n name: 'MODULO TWO SUM',\r\n value: '⨊',\r\n codepoint: 10762,\r\n },\r\n {\r\n name: 'SUMMATION WITH INTEGRAL',\r\n value: '⨋',\r\n codepoint: 10763,\r\n },\r\n {\r\n name: 'QUADRUPLE INTEGRAL OPERATOR',\r\n value: '⨌',\r\n codepoint: 10764,\r\n },\r\n {\r\n name: 'FINITE PART INTEGRAL',\r\n value: '⨍',\r\n codepoint: 10765,\r\n },\r\n {\r\n name: 'INTEGRAL WITH DOUBLE STROKE',\r\n value: '⨎',\r\n codepoint: 10766,\r\n },\r\n {\r\n name: 'INTEGRAL AVERAGE WITH SLASH',\r\n value: '⨏',\r\n codepoint: 10767,\r\n },\r\n {\r\n name: 'CIRCULATION FUNCTION',\r\n value: '⨐',\r\n codepoint: 10768,\r\n },\r\n {\r\n name: 'ANTICLOCKWISE INTEGRATION',\r\n value: '⨑',\r\n codepoint: 10769,\r\n },\r\n {\r\n name: 'LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE',\r\n value: '⨒',\r\n codepoint: 10770,\r\n },\r\n {\r\n name: 'LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE',\r\n value: '⨓',\r\n codepoint: 10771,\r\n },\r\n {\r\n name: 'LINE INTEGRATION NOT INCLUDING THE POLE',\r\n value: '⨔',\r\n codepoint: 10772,\r\n },\r\n {\r\n name: 'INTEGRAL AROUND A POINT OPERATOR',\r\n value: '⨕',\r\n codepoint: 10773,\r\n },\r\n {\r\n name: 'QUATERNION INTEGRAL OPERATOR',\r\n value: '⨖',\r\n codepoint: 10774,\r\n },\r\n {\r\n name: 'INTEGRAL WITH LEFTWARDS ARROW WITH HOOK',\r\n value: '⨗',\r\n codepoint: 10775,\r\n },\r\n {\r\n name: 'INTEGRAL WITH TIMES SIGN',\r\n value: '⨘',\r\n codepoint: 10776,\r\n },\r\n {\r\n name: 'INTEGRAL WITH INTERSECTION',\r\n value: '⨙',\r\n codepoint: 10777,\r\n },\r\n {\r\n name: 'INTEGRAL WITH UNION',\r\n value: '⨚',\r\n codepoint: 10778,\r\n },\r\n {\r\n name: 'INTEGRAL WITH OVERBAR',\r\n value: '⨛',\r\n codepoint: 10779,\r\n },\r\n {\r\n name: 'INTEGRAL WITH UNDERBAR',\r\n value: '⨜',\r\n codepoint: 10780,\r\n },\r\n {\r\n name: 'JOIN',\r\n value: '⨝',\r\n codepoint: 10781,\r\n },\r\n {\r\n name: 'LARGE LEFT TRIANGLE OPERATOR',\r\n value: '⨞',\r\n codepoint: 10782,\r\n },\r\n {\r\n name: 'Z NOTATION SCHEMA COMPOSITION',\r\n value: '⨟',\r\n codepoint: 10783,\r\n },\r\n {\r\n name: 'Z NOTATION SCHEMA PIPING',\r\n value: '⨠',\r\n codepoint: 10784,\r\n },\r\n {\r\n name: 'Z NOTATION SCHEMA PROJECTION',\r\n value: '⨡',\r\n codepoint: 10785,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH SMALL CIRCLE ABOVE',\r\n value: '⨢',\r\n codepoint: 10786,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE',\r\n value: '⨣',\r\n codepoint: 10787,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH TILDE ABOVE',\r\n value: '⨤',\r\n codepoint: 10788,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH DOT BELOW',\r\n value: '⨥',\r\n codepoint: 10789,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH TILDE BELOW',\r\n value: '⨦',\r\n codepoint: 10790,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH SUBSCRIPT TWO',\r\n value: '⨧',\r\n codepoint: 10791,\r\n },\r\n {\r\n name: 'PLUS SIGN WITH BLACK TRIANGLE',\r\n value: '⨨',\r\n codepoint: 10792,\r\n },\r\n {\r\n name: 'MINUS SIGN WITH COMMA ABOVE',\r\n value: '⨩',\r\n codepoint: 10793,\r\n },\r\n {\r\n name: 'MINUS SIGN WITH DOT BELOW',\r\n value: '⨪',\r\n codepoint: 10794,\r\n },\r\n {\r\n name: 'MINUS SIGN WITH FALLING DOTS',\r\n value: '⨫',\r\n codepoint: 10795,\r\n },\r\n {\r\n name: 'MINUS SIGN WITH RISING DOTS',\r\n value: '⨬',\r\n codepoint: 10796,\r\n },\r\n {\r\n name: 'PLUS SIGN IN LEFT HALF CIRCLE',\r\n value: '⨭',\r\n codepoint: 10797,\r\n },\r\n {\r\n name: 'PLUS SIGN IN RIGHT HALF CIRCLE',\r\n value: '⨮',\r\n codepoint: 10798,\r\n },\r\n {\r\n name: 'VECTOR OR CROSS PRODUCT',\r\n value: '⨯',\r\n codepoint: 10799,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN WITH DOT ABOVE',\r\n value: '⨰',\r\n codepoint: 10800,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN WITH UNDERBAR',\r\n value: '⨱',\r\n codepoint: 10801,\r\n },\r\n {\r\n name: 'SEMIDIRECT PRODUCT WITH BOTTOM CLOSED',\r\n value: '⨲',\r\n codepoint: 10802,\r\n },\r\n {\r\n name: 'SMASH PRODUCT',\r\n value: '⨳',\r\n codepoint: 10803,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN IN LEFT HALF CIRCLE',\r\n value: '⨴',\r\n codepoint: 10804,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN IN RIGHT HALF CIRCLE',\r\n value: '⨵',\r\n codepoint: 10805,\r\n },\r\n {\r\n name: 'CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT',\r\n value: '⨶',\r\n codepoint: 10806,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN IN DOUBLE CIRCLE',\r\n value: '⨷',\r\n codepoint: 10807,\r\n },\r\n {\r\n name: 'CIRCLED DIVISION SIGN',\r\n value: '⨸',\r\n codepoint: 10808,\r\n },\r\n {\r\n name: 'PLUS SIGN IN TRIANGLE',\r\n value: '⨹',\r\n codepoint: 10809,\r\n },\r\n {\r\n name: 'MINUS SIGN IN TRIANGLE',\r\n value: '⨺',\r\n codepoint: 10810,\r\n },\r\n {\r\n name: 'MULTIPLICATION SIGN IN TRIANGLE',\r\n value: '⨻',\r\n codepoint: 10811,\r\n },\r\n {\r\n name: 'INTERIOR PRODUCT',\r\n value: '⨼',\r\n codepoint: 10812,\r\n },\r\n {\r\n name: 'RIGHTHAND INTERIOR PRODUCT',\r\n value: '⨽',\r\n codepoint: 10813,\r\n },\r\n {\r\n name: 'Z NOTATION RELATIONAL COMPOSITION',\r\n value: '⨾',\r\n codepoint: 10814,\r\n },\r\n {\r\n name: 'AMALGAMATION OR COPRODUCT',\r\n value: '⨿',\r\n codepoint: 10815,\r\n },\r\n {\r\n name: 'INTERSECTION WITH DOT',\r\n value: '⩀',\r\n codepoint: 10816,\r\n },\r\n {\r\n name: 'UNION WITH MINUS SIGN',\r\n value: '⩁',\r\n codepoint: 10817,\r\n },\r\n {\r\n name: 'UNION WITH OVERBAR',\r\n value: '⩂',\r\n codepoint: 10818,\r\n },\r\n {\r\n name: 'INTERSECTION WITH OVERBAR',\r\n value: '⩃',\r\n codepoint: 10819,\r\n },\r\n {\r\n name: 'INTERSECTION WITH LOGICAL AND',\r\n value: '⩄',\r\n codepoint: 10820,\r\n },\r\n {\r\n name: 'UNION WITH LOGICAL OR',\r\n value: '⩅',\r\n codepoint: 10821,\r\n },\r\n {\r\n name: 'UNION ABOVE INTERSECTION',\r\n value: '⩆',\r\n codepoint: 10822,\r\n },\r\n {\r\n name: 'INTERSECTION ABOVE UNION',\r\n value: '⩇',\r\n codepoint: 10823,\r\n },\r\n {\r\n name: 'UNION ABOVE BAR ABOVE INTERSECTION',\r\n value: '⩈',\r\n codepoint: 10824,\r\n },\r\n {\r\n name: 'INTERSECTION ABOVE BAR ABOVE UNION',\r\n value: '⩉',\r\n codepoint: 10825,\r\n },\r\n {\r\n name: 'UNION BESIDE AND JOINED WITH UNION',\r\n value: '⩊',\r\n codepoint: 10826,\r\n },\r\n {\r\n name: 'INTERSECTION BESIDE AND JOINED WITH INTERSECTION',\r\n value: '⩋',\r\n codepoint: 10827,\r\n },\r\n {\r\n name: 'CLOSED UNION WITH SERIFS',\r\n value: '⩌',\r\n codepoint: 10828,\r\n },\r\n {\r\n name: 'CLOSED INTERSECTION WITH SERIFS',\r\n value: '⩍',\r\n codepoint: 10829,\r\n },\r\n {\r\n name: 'DOUBLE SQUARE INTERSECTION',\r\n value: '⩎',\r\n codepoint: 10830,\r\n },\r\n {\r\n name: 'DOUBLE SQUARE UNION',\r\n value: '⩏',\r\n codepoint: 10831,\r\n },\r\n {\r\n name: 'CLOSED UNION WITH SERIFS AND SMASH PRODUCT',\r\n value: '⩐',\r\n codepoint: 10832,\r\n },\r\n {\r\n name: 'LOGICAL AND WITH DOT ABOVE',\r\n value: '⩑',\r\n codepoint: 10833,\r\n },\r\n {\r\n name: 'LOGICAL OR WITH DOT ABOVE',\r\n value: '⩒',\r\n codepoint: 10834,\r\n },\r\n {\r\n name: 'DOUBLE LOGICAL AND',\r\n value: '⩓',\r\n codepoint: 10835,\r\n },\r\n {\r\n name: 'DOUBLE LOGICAL OR',\r\n value: '⩔',\r\n codepoint: 10836,\r\n },\r\n {\r\n name: 'TWO INTERSECTING LOGICAL AND',\r\n value: '⩕',\r\n codepoint: 10837,\r\n },\r\n {\r\n name: 'TWO INTERSECTING LOGICAL OR',\r\n value: '⩖',\r\n codepoint: 10838,\r\n },\r\n {\r\n name: 'SLOPING LARGE OR',\r\n value: '⩗',\r\n codepoint: 10839,\r\n },\r\n {\r\n name: 'SLOPING LARGE AND',\r\n value: '⩘',\r\n codepoint: 10840,\r\n },\r\n {\r\n name: 'LOGICAL OR OVERLAPPING LOGICAL AND',\r\n value: '⩙',\r\n codepoint: 10841,\r\n },\r\n {\r\n name: 'LOGICAL AND WITH MIDDLE STEM',\r\n value: '⩚',\r\n codepoint: 10842,\r\n },\r\n {\r\n name: 'LOGICAL OR WITH MIDDLE STEM',\r\n value: '⩛',\r\n codepoint: 10843,\r\n },\r\n {\r\n name: 'LOGICAL AND WITH HORIZONTAL DASH',\r\n value: '⩜',\r\n codepoint: 10844,\r\n },\r\n {\r\n name: 'LOGICAL OR WITH HORIZONTAL DASH',\r\n value: '⩝',\r\n codepoint: 10845,\r\n },\r\n {\r\n name: 'LOGICAL AND WITH DOUBLE OVERBAR',\r\n value: '⩞',\r\n codepoint: 10846,\r\n },\r\n {\r\n name: 'LOGICAL AND WITH UNDERBAR',\r\n value: '⩟',\r\n codepoint: 10847,\r\n },\r\n {\r\n name: 'LOGICAL AND WITH DOUBLE UNDERBAR',\r\n value: '⩠',\r\n codepoint: 10848,\r\n },\r\n {\r\n name: 'SMALL VEE WITH UNDERBAR',\r\n value: '⩡',\r\n codepoint: 10849,\r\n },\r\n {\r\n name: 'LOGICAL OR WITH DOUBLE OVERBAR',\r\n value: '⩢',\r\n codepoint: 10850,\r\n },\r\n {\r\n name: 'LOGICAL OR WITH DOUBLE UNDERBAR',\r\n value: '⩣',\r\n codepoint: 10851,\r\n },\r\n {\r\n name: 'Z NOTATION DOMAIN ANTIRESTRICTION',\r\n value: '⩤',\r\n codepoint: 10852,\r\n },\r\n {\r\n name: 'Z NOTATION RANGE ANTIRESTRICTION',\r\n value: '⩥',\r\n codepoint: 10853,\r\n },\r\n {\r\n name: 'EQUALS SIGN WITH DOT BELOW',\r\n value: '⩦',\r\n codepoint: 10854,\r\n },\r\n {\r\n name: 'IDENTICAL WITH DOT ABOVE',\r\n value: '⩧',\r\n codepoint: 10855,\r\n },\r\n {\r\n name: 'TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE',\r\n value: '⩨',\r\n codepoint: 10856,\r\n },\r\n {\r\n name: 'TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE',\r\n value: '⩩',\r\n codepoint: 10857,\r\n },\r\n {\r\n name: 'TILDE OPERATOR WITH DOT ABOVE',\r\n value: '⩪',\r\n codepoint: 10858,\r\n },\r\n {\r\n name: 'TILDE OPERATOR WITH RISING DOTS',\r\n value: '⩫',\r\n codepoint: 10859,\r\n },\r\n {\r\n name: 'SIMILAR MINUS SIMILAR',\r\n value: '⩬',\r\n codepoint: 10860,\r\n },\r\n {\r\n name: 'CONGRUENT WITH DOT ABOVE',\r\n value: '⩭',\r\n codepoint: 10861,\r\n },\r\n {\r\n name: 'EQUALS WITH ASTERISK',\r\n value: '⩮',\r\n codepoint: 10862,\r\n },\r\n {\r\n name: 'ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT',\r\n value: '⩯',\r\n codepoint: 10863,\r\n },\r\n {\r\n name: 'APPROXIMATELY EQUAL OR EQUAL TO',\r\n value: '⩰',\r\n codepoint: 10864,\r\n },\r\n {\r\n name: 'EQUALS SIGN ABOVE PLUS SIGN',\r\n value: '⩱',\r\n codepoint: 10865,\r\n },\r\n {\r\n name: 'PLUS SIGN ABOVE EQUALS SIGN',\r\n value: '⩲',\r\n codepoint: 10866,\r\n },\r\n {\r\n name: 'EQUALS SIGN ABOVE TILDE OPERATOR',\r\n value: '⩳',\r\n codepoint: 10867,\r\n },\r\n {\r\n name: 'DOUBLE COLON EQUAL',\r\n value: '⩴',\r\n codepoint: 10868,\r\n },\r\n {\r\n name: 'TWO CONSECUTIVE EQUALS SIGNS',\r\n value: '⩵',\r\n codepoint: 10869,\r\n },\r\n {\r\n name: 'THREE CONSECUTIVE EQUALS SIGNS',\r\n value: '⩶',\r\n codepoint: 10870,\r\n },\r\n {\r\n name: 'EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW',\r\n value: '⩷',\r\n codepoint: 10871,\r\n },\r\n {\r\n name: 'EQUIVALENT WITH FOUR DOTS ABOVE',\r\n value: '⩸',\r\n codepoint: 10872,\r\n },\r\n {\r\n name: 'LESS-THAN WITH CIRCLE INSIDE',\r\n value: '⩹',\r\n codepoint: 10873,\r\n },\r\n {\r\n name: 'GREATER-THAN WITH CIRCLE INSIDE',\r\n value: '⩺',\r\n codepoint: 10874,\r\n },\r\n {\r\n name: 'LESS-THAN WITH QUESTION MARK ABOVE',\r\n value: '⩻',\r\n codepoint: 10875,\r\n },\r\n {\r\n name: 'GREATER-THAN WITH QUESTION MARK ABOVE',\r\n value: '⩼',\r\n codepoint: 10876,\r\n },\r\n {\r\n name: 'LESS-THAN OR SLANTED EQUAL TO',\r\n value: '⩽',\r\n codepoint: 10877,\r\n },\r\n {\r\n name: 'GREATER-THAN OR SLANTED EQUAL TO',\r\n value: '⩾',\r\n codepoint: 10878,\r\n },\r\n {\r\n name: 'LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE',\r\n value: '⩿',\r\n codepoint: 10879,\r\n },\r\n {\r\n name: 'GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE',\r\n value: '⪀',\r\n codepoint: 10880,\r\n },\r\n {\r\n name: 'LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE',\r\n value: '⪁',\r\n codepoint: 10881,\r\n },\r\n {\r\n name: 'GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE',\r\n value: '⪂',\r\n codepoint: 10882,\r\n },\r\n {\r\n name: 'LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT',\r\n value: '⪃',\r\n codepoint: 10883,\r\n },\r\n {\r\n name: 'GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT',\r\n value: '⪄',\r\n codepoint: 10884,\r\n },\r\n {\r\n name: 'LESS-THAN OR APPROXIMATE',\r\n value: '⪅',\r\n codepoint: 10885,\r\n },\r\n {\r\n name: 'GREATER-THAN OR APPROXIMATE',\r\n value: '⪆',\r\n codepoint: 10886,\r\n },\r\n {\r\n name: 'LESS-THAN AND SINGLE-LINE NOT EQUAL TO',\r\n value: '⪇',\r\n codepoint: 10887,\r\n },\r\n {\r\n name: 'GREATER-THAN AND SINGLE-LINE NOT EQUAL TO',\r\n value: '⪈',\r\n codepoint: 10888,\r\n },\r\n {\r\n name: 'LESS-THAN AND NOT APPROXIMATE',\r\n value: '⪉',\r\n codepoint: 10889,\r\n },\r\n {\r\n name: 'GREATER-THAN AND NOT APPROXIMATE',\r\n value: '⪊',\r\n codepoint: 10890,\r\n },\r\n {\r\n name: 'LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN',\r\n value: '⪋',\r\n codepoint: 10891,\r\n },\r\n {\r\n name: 'GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN',\r\n value: '⪌',\r\n codepoint: 10892,\r\n },\r\n {\r\n name: 'LESS-THAN ABOVE SIMILAR OR EQUAL',\r\n value: '⪍',\r\n codepoint: 10893,\r\n },\r\n {\r\n name: 'GREATER-THAN ABOVE SIMILAR OR EQUAL',\r\n value: '⪎',\r\n codepoint: 10894,\r\n },\r\n {\r\n name: 'LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN',\r\n value: '⪏',\r\n codepoint: 10895,\r\n },\r\n {\r\n name: 'GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN',\r\n value: '⪐',\r\n codepoint: 10896,\r\n },\r\n {\r\n name: 'LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL',\r\n value: '⪑',\r\n codepoint: 10897,\r\n },\r\n {\r\n name: 'GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL',\r\n value: '⪒',\r\n codepoint: 10898,\r\n },\r\n {\r\n name: 'LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL',\r\n value: '⪓',\r\n codepoint: 10899,\r\n },\r\n {\r\n name: 'GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL',\r\n value: '⪔',\r\n codepoint: 10900,\r\n },\r\n {\r\n name: 'SLANTED EQUAL TO OR LESS-THAN',\r\n value: '⪕',\r\n codepoint: 10901,\r\n },\r\n {\r\n name: 'SLANTED EQUAL TO OR GREATER-THAN',\r\n value: '⪖',\r\n codepoint: 10902,\r\n },\r\n {\r\n name: 'SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE',\r\n value: '⪗',\r\n codepoint: 10903,\r\n },\r\n {\r\n name: 'SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE',\r\n value: '⪘',\r\n codepoint: 10904,\r\n },\r\n {\r\n name: 'DOUBLE-LINE EQUAL TO OR LESS-THAN',\r\n value: '⪙',\r\n codepoint: 10905,\r\n },\r\n {\r\n name: 'DOUBLE-LINE EQUAL TO OR GREATER-THAN',\r\n value: '⪚',\r\n codepoint: 10906,\r\n },\r\n {\r\n name: 'DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN',\r\n value: '⪛',\r\n codepoint: 10907,\r\n },\r\n {\r\n name: 'DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN',\r\n value: '⪜',\r\n codepoint: 10908,\r\n },\r\n {\r\n name: 'SIMILAR OR LESS-THAN',\r\n value: '⪝',\r\n codepoint: 10909,\r\n },\r\n {\r\n name: 'SIMILAR OR GREATER-THAN',\r\n value: '⪞',\r\n codepoint: 10910,\r\n },\r\n {\r\n name: 'SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN',\r\n value: '⪟',\r\n codepoint: 10911,\r\n },\r\n {\r\n name: 'SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN',\r\n value: '⪠',\r\n codepoint: 10912,\r\n },\r\n {\r\n name: 'DOUBLE NESTED LESS-THAN',\r\n value: '⪡',\r\n codepoint: 10913,\r\n },\r\n {\r\n name: 'DOUBLE NESTED GREATER-THAN',\r\n value: '⪢',\r\n codepoint: 10914,\r\n },\r\n {\r\n name: 'DOUBLE NESTED LESS-THAN WITH UNDERBAR',\r\n value: '⪣',\r\n codepoint: 10915,\r\n },\r\n {\r\n name: 'GREATER-THAN OVERLAPPING LESS-THAN',\r\n value: '⪤',\r\n codepoint: 10916,\r\n },\r\n {\r\n name: 'GREATER-THAN BESIDE LESS-THAN',\r\n value: '⪥',\r\n codepoint: 10917,\r\n },\r\n {\r\n name: 'LESS-THAN CLOSED BY CURVE',\r\n value: '⪦',\r\n codepoint: 10918,\r\n },\r\n {\r\n name: 'GREATER-THAN CLOSED BY CURVE',\r\n value: '⪧',\r\n codepoint: 10919,\r\n },\r\n {\r\n name: 'LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL',\r\n value: '⪨',\r\n codepoint: 10920,\r\n },\r\n {\r\n name: 'GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL',\r\n value: '⪩',\r\n codepoint: 10921,\r\n },\r\n {\r\n name: 'SMALLER THAN',\r\n value: '⪪',\r\n codepoint: 10922,\r\n },\r\n {\r\n name: 'LARGER THAN',\r\n value: '⪫',\r\n codepoint: 10923,\r\n },\r\n {\r\n name: 'SMALLER THAN OR EQUAL TO',\r\n value: '⪬',\r\n codepoint: 10924,\r\n },\r\n {\r\n name: 'LARGER THAN OR EQUAL TO',\r\n value: '⪭',\r\n codepoint: 10925,\r\n },\r\n {\r\n name: 'EQUALS SIGN WITH BUMPY ABOVE',\r\n value: '⪮',\r\n codepoint: 10926,\r\n },\r\n {\r\n name: 'PRECEDES ABOVE SINGLE-LINE EQUALS SIGN',\r\n value: '⪯',\r\n codepoint: 10927,\r\n },\r\n {\r\n name: 'SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN',\r\n value: '⪰',\r\n codepoint: 10928,\r\n },\r\n {\r\n name: 'PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO',\r\n value: '⪱',\r\n codepoint: 10929,\r\n },\r\n {\r\n name: 'SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO',\r\n value: '⪲',\r\n codepoint: 10930,\r\n },\r\n {\r\n name: 'PRECEDES ABOVE EQUALS SIGN',\r\n value: '⪳',\r\n codepoint: 10931,\r\n },\r\n {\r\n name: 'SUCCEEDS ABOVE EQUALS SIGN',\r\n value: '⪴',\r\n codepoint: 10932,\r\n },\r\n {\r\n name: 'PRECEDES ABOVE NOT EQUAL TO',\r\n value: '⪵',\r\n codepoint: 10933,\r\n },\r\n {\r\n name: 'SUCCEEDS ABOVE NOT EQUAL TO',\r\n value: '⪶',\r\n codepoint: 10934,\r\n },\r\n {\r\n name: 'PRECEDES ABOVE ALMOST EQUAL TO',\r\n value: '⪷',\r\n codepoint: 10935,\r\n },\r\n {\r\n name: 'SUCCEEDS ABOVE ALMOST EQUAL TO',\r\n value: '⪸',\r\n codepoint: 10936,\r\n },\r\n {\r\n name: 'PRECEDES ABOVE NOT ALMOST EQUAL TO',\r\n value: '⪹',\r\n codepoint: 10937,\r\n },\r\n {\r\n name: 'SUCCEEDS ABOVE NOT ALMOST EQUAL TO',\r\n value: '⪺',\r\n codepoint: 10938,\r\n },\r\n {\r\n name: 'DOUBLE PRECEDES',\r\n value: '⪻',\r\n codepoint: 10939,\r\n },\r\n {\r\n name: 'DOUBLE SUCCEEDS',\r\n value: '⪼',\r\n codepoint: 10940,\r\n },\r\n {\r\n name: 'SUBSET WITH DOT',\r\n value: '⪽',\r\n codepoint: 10941,\r\n },\r\n {\r\n name: 'SUPERSET WITH DOT',\r\n value: '⪾',\r\n codepoint: 10942,\r\n },\r\n {\r\n name: 'SUBSET WITH PLUS SIGN BELOW',\r\n value: '⪿',\r\n codepoint: 10943,\r\n },\r\n {\r\n name: 'SUPERSET WITH PLUS SIGN BELOW',\r\n value: '⫀',\r\n codepoint: 10944,\r\n },\r\n {\r\n name: 'SUBSET WITH MULTIPLICATION SIGN BELOW',\r\n value: '⫁',\r\n codepoint: 10945,\r\n },\r\n {\r\n name: 'SUPERSET WITH MULTIPLICATION SIGN BELOW',\r\n value: '⫂',\r\n codepoint: 10946,\r\n },\r\n {\r\n name: 'SUBSET OF OR EQUAL TO WITH DOT ABOVE',\r\n value: '⫃',\r\n codepoint: 10947,\r\n },\r\n {\r\n name: 'SUPERSET OF OR EQUAL TO WITH DOT ABOVE',\r\n value: '⫄',\r\n codepoint: 10948,\r\n },\r\n {\r\n name: 'SUBSET OF ABOVE EQUALS SIGN',\r\n value: '⫅',\r\n codepoint: 10949,\r\n },\r\n {\r\n name: 'SUPERSET OF ABOVE EQUALS SIGN',\r\n value: '⫆',\r\n codepoint: 10950,\r\n },\r\n {\r\n name: 'SUBSET OF ABOVE TILDE OPERATOR',\r\n value: '⫇',\r\n codepoint: 10951,\r\n },\r\n {\r\n name: 'SUPERSET OF ABOVE TILDE OPERATOR',\r\n value: '⫈',\r\n codepoint: 10952,\r\n },\r\n {\r\n name: 'SUBSET OF ABOVE ALMOST EQUAL TO',\r\n value: '⫉',\r\n codepoint: 10953,\r\n },\r\n {\r\n name: 'SUPERSET OF ABOVE ALMOST EQUAL TO',\r\n value: '⫊',\r\n codepoint: 10954,\r\n },\r\n {\r\n name: 'SUBSET OF ABOVE NOT EQUAL TO',\r\n value: '⫋',\r\n codepoint: 10955,\r\n },\r\n {\r\n name: 'SUPERSET OF ABOVE NOT EQUAL TO',\r\n value: '⫌',\r\n codepoint: 10956,\r\n },\r\n {\r\n name: 'SQUARE LEFT OPEN BOX OPERATOR',\r\n value: '⫍',\r\n codepoint: 10957,\r\n },\r\n {\r\n name: 'SQUARE RIGHT OPEN BOX OPERATOR',\r\n value: '⫎',\r\n codepoint: 10958,\r\n },\r\n {\r\n name: 'CLOSED SUBSET',\r\n value: '⫏',\r\n codepoint: 10959,\r\n },\r\n {\r\n name: 'CLOSED SUPERSET',\r\n value: '⫐',\r\n codepoint: 10960,\r\n },\r\n {\r\n name: 'CLOSED SUBSET OR EQUAL TO',\r\n value: '⫑',\r\n codepoint: 10961,\r\n },\r\n {\r\n name: 'CLOSED SUPERSET OR EQUAL TO',\r\n value: '⫒',\r\n codepoint: 10962,\r\n },\r\n {\r\n name: 'SUBSET ABOVE SUPERSET',\r\n value: '⫓',\r\n codepoint: 10963,\r\n },\r\n {\r\n name: 'SUPERSET ABOVE SUBSET',\r\n value: '⫔',\r\n codepoint: 10964,\r\n },\r\n {\r\n name: 'SUBSET ABOVE SUBSET',\r\n value: '⫕',\r\n codepoint: 10965,\r\n },\r\n {\r\n name: 'SUPERSET ABOVE SUPERSET',\r\n value: '⫖',\r\n codepoint: 10966,\r\n },\r\n {\r\n name: 'SUPERSET BESIDE SUBSET',\r\n value: '⫗',\r\n codepoint: 10967,\r\n },\r\n {\r\n name: 'SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET',\r\n value: '⫘',\r\n codepoint: 10968,\r\n },\r\n {\r\n name: 'ELEMENT OF OPENING DOWNWARDS',\r\n value: '⫙',\r\n codepoint: 10969,\r\n },\r\n {\r\n name: 'PITCHFORK WITH TEE TOP',\r\n value: '⫚',\r\n codepoint: 10970,\r\n },\r\n {\r\n name: 'TRANSVERSAL INTERSECTION',\r\n value: '⫛',\r\n codepoint: 10971,\r\n },\r\n {\r\n name: 'FORKING',\r\n value: '⫝̸',\r\n codepoint: 10972,\r\n },\r\n {\r\n name: 'NONFORKING',\r\n value: '⫝',\r\n codepoint: 10973,\r\n },\r\n {\r\n name: 'SHORT LEFT TACK',\r\n value: '⫞',\r\n codepoint: 10974,\r\n },\r\n {\r\n name: 'SHORT DOWN TACK',\r\n value: '⫟',\r\n codepoint: 10975,\r\n },\r\n {\r\n name: 'SHORT UP TACK',\r\n value: '⫠',\r\n codepoint: 10976,\r\n },\r\n {\r\n name: 'PERPENDICULAR WITH S',\r\n value: '⫡',\r\n codepoint: 10977,\r\n },\r\n {\r\n name: 'VERTICAL BAR TRIPLE RIGHT TURNSTILE',\r\n value: '⫢',\r\n codepoint: 10978,\r\n },\r\n {\r\n name: 'DOUBLE VERTICAL BAR LEFT TURNSTILE',\r\n value: '⫣',\r\n codepoint: 10979,\r\n },\r\n {\r\n name: 'VERTICAL BAR DOUBLE LEFT TURNSTILE',\r\n value: '⫤',\r\n codepoint: 10980,\r\n },\r\n {\r\n name: 'DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE',\r\n value: '⫥',\r\n codepoint: 10981,\r\n },\r\n {\r\n name: 'LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL',\r\n value: '⫦',\r\n codepoint: 10982,\r\n },\r\n {\r\n name: 'SHORT DOWN TACK WITH OVERBAR',\r\n value: '⫧',\r\n codepoint: 10983,\r\n },\r\n {\r\n name: 'SHORT UP TACK WITH UNDERBAR',\r\n value: '⫨',\r\n codepoint: 10984,\r\n },\r\n {\r\n name: 'SHORT UP TACK ABOVE SHORT DOWN TACK',\r\n value: '⫩',\r\n codepoint: 10985,\r\n },\r\n {\r\n name: 'DOUBLE DOWN TACK',\r\n value: '⫪',\r\n codepoint: 10986,\r\n },\r\n {\r\n name: 'DOUBLE UP TACK',\r\n value: '⫫',\r\n codepoint: 10987,\r\n },\r\n {\r\n name: 'DOUBLE STROKE NOT SIGN',\r\n value: '⫬',\r\n codepoint: 10988,\r\n },\r\n {\r\n name: 'REVERSED DOUBLE STROKE NOT SIGN',\r\n value: '⫭',\r\n codepoint: 10989,\r\n },\r\n {\r\n name: 'DOES NOT DIVIDE WITH REVERSED NEGATION SLASH',\r\n value: '⫮',\r\n codepoint: 10990,\r\n },\r\n {\r\n name: 'VERTICAL LINE WITH CIRCLE ABOVE',\r\n value: '⫯',\r\n codepoint: 10991,\r\n },\r\n {\r\n name: 'VERTICAL LINE WITH CIRCLE BELOW',\r\n value: '⫰',\r\n codepoint: 10992,\r\n },\r\n {\r\n name: 'DOWN TACK WITH CIRCLE BELOW',\r\n value: '⫱',\r\n codepoint: 10993,\r\n },\r\n {\r\n name: 'PARALLEL WITH HORIZONTAL STROKE',\r\n value: '⫲',\r\n codepoint: 10994,\r\n },\r\n {\r\n name: 'PARALLEL WITH TILDE OPERATOR',\r\n value: '⫳',\r\n codepoint: 10995,\r\n },\r\n {\r\n name: 'TRIPLE VERTICAL BAR BINARY RELATION',\r\n value: '⫴',\r\n codepoint: 10996,\r\n },\r\n {\r\n name: 'TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE',\r\n value: '⫵',\r\n codepoint: 10997,\r\n },\r\n {\r\n name: 'TRIPLE COLON OPERATOR',\r\n value: '⫶',\r\n codepoint: 10998,\r\n },\r\n {\r\n name: 'TRIPLE NESTED LESS-THAN',\r\n value: '⫷',\r\n codepoint: 10999,\r\n },\r\n {\r\n name: 'TRIPLE NESTED GREATER-THAN',\r\n value: '⫸',\r\n codepoint: 11000,\r\n },\r\n {\r\n name: 'DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO',\r\n value: '⫹',\r\n codepoint: 11001,\r\n },\r\n {\r\n name: 'DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO',\r\n value: '⫺',\r\n codepoint: 11002,\r\n },\r\n {\r\n name: 'TRIPLE SOLIDUS BINARY RELATION',\r\n value: '⫻',\r\n codepoint: 11003,\r\n },\r\n {\r\n name: 'LARGE TRIPLE VERTICAL BAR OPERATOR',\r\n value: '⫼',\r\n codepoint: 11004,\r\n },\r\n {\r\n name: 'DOUBLE SOLIDUS OPERATOR',\r\n value: '⫽',\r\n codepoint: 11005,\r\n },\r\n {\r\n name: 'WHITE VERTICAL BAR',\r\n value: '⫾',\r\n codepoint: 11006,\r\n },\r\n {\r\n name: 'N-ARY WHITE VERTICAL BAR',\r\n value: '⫿',\r\n codepoint: 11007,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL A',\r\n value: '𝐀',\r\n codepoint: 119808,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL B',\r\n value: '𝐁',\r\n codepoint: 119809,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL C',\r\n value: '𝐂',\r\n codepoint: 119810,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL D',\r\n value: '𝐃',\r\n codepoint: 119811,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL E',\r\n value: '𝐄',\r\n codepoint: 119812,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL F',\r\n value: '𝐅',\r\n codepoint: 119813,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL G',\r\n value: '𝐆',\r\n codepoint: 119814,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL H',\r\n value: '𝐇',\r\n codepoint: 119815,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL I',\r\n value: '𝐈',\r\n codepoint: 119816,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL J',\r\n value: '𝐉',\r\n codepoint: 119817,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL K',\r\n value: '𝐊',\r\n codepoint: 119818,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL L',\r\n value: '𝐋',\r\n codepoint: 119819,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL M',\r\n value: '𝐌',\r\n codepoint: 119820,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL N',\r\n value: '𝐍',\r\n codepoint: 119821,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL O',\r\n value: '𝐎',\r\n codepoint: 119822,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL P',\r\n value: '𝐏',\r\n codepoint: 119823,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL Q',\r\n value: '𝐐',\r\n codepoint: 119824,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL R',\r\n value: '𝐑',\r\n codepoint: 119825,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL S',\r\n value: '𝐒',\r\n codepoint: 119826,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL T',\r\n value: '𝐓',\r\n codepoint: 119827,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL U',\r\n value: '𝐔',\r\n codepoint: 119828,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL V',\r\n value: '𝐕',\r\n codepoint: 119829,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL W',\r\n value: '𝐖',\r\n codepoint: 119830,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL X',\r\n value: '𝐗',\r\n codepoint: 119831,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL Y',\r\n value: '𝐘',\r\n codepoint: 119832,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL Z',\r\n value: '𝐙',\r\n codepoint: 119833,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL A',\r\n value: '𝐚',\r\n codepoint: 119834,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL B',\r\n value: '𝐛',\r\n codepoint: 119835,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL C',\r\n value: '𝐜',\r\n codepoint: 119836,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL D',\r\n value: '𝐝',\r\n codepoint: 119837,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL E',\r\n value: '𝐞',\r\n codepoint: 119838,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL F',\r\n value: '𝐟',\r\n codepoint: 119839,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL G',\r\n value: '𝐠',\r\n codepoint: 119840,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL H',\r\n value: '𝐡',\r\n codepoint: 119841,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL I',\r\n value: '𝐢',\r\n codepoint: 119842,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL J',\r\n value: '𝐣',\r\n codepoint: 119843,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL K',\r\n value: '𝐤',\r\n codepoint: 119844,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL L',\r\n value: '𝐥',\r\n codepoint: 119845,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL M',\r\n value: '𝐦',\r\n codepoint: 119846,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL N',\r\n value: '𝐧',\r\n codepoint: 119847,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL O',\r\n value: '𝐨',\r\n codepoint: 119848,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL P',\r\n value: '𝐩',\r\n codepoint: 119849,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL Q',\r\n value: '𝐪',\r\n codepoint: 119850,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL R',\r\n value: '𝐫',\r\n codepoint: 119851,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL S',\r\n value: '𝐬',\r\n codepoint: 119852,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL T',\r\n value: '𝐭',\r\n codepoint: 119853,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL U',\r\n value: '𝐮',\r\n codepoint: 119854,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL V',\r\n value: '𝐯',\r\n codepoint: 119855,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL W',\r\n value: '𝐰',\r\n codepoint: 119856,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL X',\r\n value: '𝐱',\r\n codepoint: 119857,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL Y',\r\n value: '𝐲',\r\n codepoint: 119858,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL Z',\r\n value: '𝐳',\r\n codepoint: 119859,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL A',\r\n value: '𝐴',\r\n codepoint: 119860,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL B',\r\n value: '𝐵',\r\n codepoint: 119861,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL C',\r\n value: '𝐶',\r\n codepoint: 119862,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL D',\r\n value: '𝐷',\r\n codepoint: 119863,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL E',\r\n value: '𝐸',\r\n codepoint: 119864,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL F',\r\n value: '𝐹',\r\n codepoint: 119865,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL G',\r\n value: '𝐺',\r\n codepoint: 119866,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL H',\r\n value: '𝐻',\r\n codepoint: 119867,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL I',\r\n value: '𝐼',\r\n codepoint: 119868,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL J',\r\n value: '𝐽',\r\n codepoint: 119869,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL K',\r\n value: '𝐾',\r\n codepoint: 119870,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL L',\r\n value: '𝐿',\r\n codepoint: 119871,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL M',\r\n value: '𝑀',\r\n codepoint: 119872,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL N',\r\n value: '𝑁',\r\n codepoint: 119873,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL O',\r\n value: '𝑂',\r\n codepoint: 119874,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL P',\r\n value: '𝑃',\r\n codepoint: 119875,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL Q',\r\n value: '𝑄',\r\n codepoint: 119876,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL R',\r\n value: '𝑅',\r\n codepoint: 119877,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL S',\r\n value: '𝑆',\r\n codepoint: 119878,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL T',\r\n value: '𝑇',\r\n codepoint: 119879,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL U',\r\n value: '𝑈',\r\n codepoint: 119880,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL V',\r\n value: '𝑉',\r\n codepoint: 119881,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL W',\r\n value: '𝑊',\r\n codepoint: 119882,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL X',\r\n value: '𝑋',\r\n codepoint: 119883,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL Y',\r\n value: '𝑌',\r\n codepoint: 119884,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL Z',\r\n value: '𝑍',\r\n codepoint: 119885,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL A',\r\n value: '𝑎',\r\n codepoint: 119886,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL B',\r\n value: '𝑏',\r\n codepoint: 119887,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL C',\r\n value: '𝑐',\r\n codepoint: 119888,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL D',\r\n value: '𝑑',\r\n codepoint: 119889,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL E',\r\n value: '𝑒',\r\n codepoint: 119890,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL F',\r\n value: '𝑓',\r\n codepoint: 119891,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL G',\r\n value: '𝑔',\r\n codepoint: 119892,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL I',\r\n value: '𝑖',\r\n codepoint: 119894,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL J',\r\n value: '𝑗',\r\n codepoint: 119895,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL K',\r\n value: '𝑘',\r\n codepoint: 119896,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL L',\r\n value: '𝑙',\r\n codepoint: 119897,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL M',\r\n value: '𝑚',\r\n codepoint: 119898,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL N',\r\n value: '𝑛',\r\n codepoint: 119899,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL O',\r\n value: '𝑜',\r\n codepoint: 119900,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL P',\r\n value: '𝑝',\r\n codepoint: 119901,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL Q',\r\n value: '𝑞',\r\n codepoint: 119902,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL R',\r\n value: '𝑟',\r\n codepoint: 119903,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL S',\r\n value: '𝑠',\r\n codepoint: 119904,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL T',\r\n value: '𝑡',\r\n codepoint: 119905,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL U',\r\n value: '𝑢',\r\n codepoint: 119906,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL V',\r\n value: '𝑣',\r\n codepoint: 119907,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL W',\r\n value: '𝑤',\r\n codepoint: 119908,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL X',\r\n value: '𝑥',\r\n codepoint: 119909,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL Y',\r\n value: '𝑦',\r\n codepoint: 119910,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL Z',\r\n value: '𝑧',\r\n codepoint: 119911,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL A',\r\n value: '𝑨',\r\n codepoint: 119912,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL B',\r\n value: '𝑩',\r\n codepoint: 119913,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL C',\r\n value: '𝑪',\r\n codepoint: 119914,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL D',\r\n value: '𝑫',\r\n codepoint: 119915,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL E',\r\n value: '𝑬',\r\n codepoint: 119916,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL F',\r\n value: '𝑭',\r\n codepoint: 119917,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL G',\r\n value: '𝑮',\r\n codepoint: 119918,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL H',\r\n value: '𝑯',\r\n codepoint: 119919,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL I',\r\n value: '𝑰',\r\n codepoint: 119920,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL J',\r\n value: '𝑱',\r\n codepoint: 119921,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL K',\r\n value: '𝑲',\r\n codepoint: 119922,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL L',\r\n value: '𝑳',\r\n codepoint: 119923,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL M',\r\n value: '𝑴',\r\n codepoint: 119924,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL N',\r\n value: '𝑵',\r\n codepoint: 119925,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL O',\r\n value: '𝑶',\r\n codepoint: 119926,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL P',\r\n value: '𝑷',\r\n codepoint: 119927,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL Q',\r\n value: '𝑸',\r\n codepoint: 119928,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL R',\r\n value: '𝑹',\r\n codepoint: 119929,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL S',\r\n value: '𝑺',\r\n codepoint: 119930,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL T',\r\n value: '𝑻',\r\n codepoint: 119931,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL U',\r\n value: '𝑼',\r\n codepoint: 119932,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL V',\r\n value: '𝑽',\r\n codepoint: 119933,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL W',\r\n value: '𝑾',\r\n codepoint: 119934,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL X',\r\n value: '𝑿',\r\n codepoint: 119935,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL Y',\r\n value: '𝒀',\r\n codepoint: 119936,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL Z',\r\n value: '𝒁',\r\n codepoint: 119937,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL A',\r\n value: '𝒂',\r\n codepoint: 119938,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL B',\r\n value: '𝒃',\r\n codepoint: 119939,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL C',\r\n value: '𝒄',\r\n codepoint: 119940,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL D',\r\n value: '𝒅',\r\n codepoint: 119941,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL E',\r\n value: '𝒆',\r\n codepoint: 119942,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL F',\r\n value: '𝒇',\r\n codepoint: 119943,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL G',\r\n value: '𝒈',\r\n codepoint: 119944,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL H',\r\n value: '𝒉',\r\n codepoint: 119945,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL I',\r\n value: '𝒊',\r\n codepoint: 119946,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL J',\r\n value: '𝒋',\r\n codepoint: 119947,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL K',\r\n value: '𝒌',\r\n codepoint: 119948,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL L',\r\n value: '𝒍',\r\n codepoint: 119949,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL M',\r\n value: '𝒎',\r\n codepoint: 119950,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL N',\r\n value: '𝒏',\r\n codepoint: 119951,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL O',\r\n value: '𝒐',\r\n codepoint: 119952,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL P',\r\n value: '𝒑',\r\n codepoint: 119953,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL Q',\r\n value: '𝒒',\r\n codepoint: 119954,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL R',\r\n value: '𝒓',\r\n codepoint: 119955,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL S',\r\n value: '𝒔',\r\n codepoint: 119956,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL T',\r\n value: '𝒕',\r\n codepoint: 119957,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL U',\r\n value: '𝒖',\r\n codepoint: 119958,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL V',\r\n value: '𝒗',\r\n codepoint: 119959,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL W',\r\n value: '𝒘',\r\n codepoint: 119960,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL X',\r\n value: '𝒙',\r\n codepoint: 119961,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL Y',\r\n value: '𝒚',\r\n codepoint: 119962,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL Z',\r\n value: '𝒛',\r\n codepoint: 119963,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL A',\r\n value: '𝒜',\r\n codepoint: 119964,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL C',\r\n value: '𝒞',\r\n codepoint: 119966,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL D',\r\n value: '𝒟',\r\n codepoint: 119967,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL G',\r\n value: '𝒢',\r\n codepoint: 119970,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL J',\r\n value: '𝒥',\r\n codepoint: 119973,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL K',\r\n value: '𝒦',\r\n codepoint: 119974,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL N',\r\n value: '𝒩',\r\n codepoint: 119977,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL O',\r\n value: '𝒪',\r\n codepoint: 119978,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL P',\r\n value: '𝒫',\r\n codepoint: 119979,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL Q',\r\n value: '𝒬',\r\n codepoint: 119980,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL S',\r\n value: '𝒮',\r\n codepoint: 119982,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL T',\r\n value: '𝒯',\r\n codepoint: 119983,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL U',\r\n value: '𝒰',\r\n codepoint: 119984,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL V',\r\n value: '𝒱',\r\n codepoint: 119985,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL W',\r\n value: '𝒲',\r\n codepoint: 119986,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL X',\r\n value: '𝒳',\r\n codepoint: 119987,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL Y',\r\n value: '𝒴',\r\n codepoint: 119988,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT CAPITAL Z',\r\n value: '𝒵',\r\n codepoint: 119989,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL A',\r\n value: '𝒶',\r\n codepoint: 119990,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL B',\r\n value: '𝒷',\r\n codepoint: 119991,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL C',\r\n value: '𝒸',\r\n codepoint: 119992,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL D',\r\n value: '𝒹',\r\n codepoint: 119993,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL F',\r\n value: '𝒻',\r\n codepoint: 119995,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL H',\r\n value: '𝒽',\r\n codepoint: 119997,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL I',\r\n value: '𝒾',\r\n codepoint: 119998,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL J',\r\n value: '𝒿',\r\n codepoint: 119999,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL K',\r\n value: '𝓀',\r\n codepoint: 120000,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL L',\r\n value: '𝓁',\r\n codepoint: 120001,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL M',\r\n value: '𝓂',\r\n codepoint: 120002,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL N',\r\n value: '𝓃',\r\n codepoint: 120003,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL P',\r\n value: '𝓅',\r\n codepoint: 120005,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL Q',\r\n value: '𝓆',\r\n codepoint: 120006,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL R',\r\n value: '𝓇',\r\n codepoint: 120007,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL S',\r\n value: '𝓈',\r\n codepoint: 120008,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL T',\r\n value: '𝓉',\r\n codepoint: 120009,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL U',\r\n value: '𝓊',\r\n codepoint: 120010,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL V',\r\n value: '𝓋',\r\n codepoint: 120011,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL W',\r\n value: '𝓌',\r\n codepoint: 120012,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL X',\r\n value: '𝓍',\r\n codepoint: 120013,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL Y',\r\n value: '𝓎',\r\n codepoint: 120014,\r\n },\r\n {\r\n name: 'MATHEMATICAL SCRIPT SMALL Z',\r\n value: '𝓏',\r\n codepoint: 120015,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL A',\r\n value: '𝓐',\r\n codepoint: 120016,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL B',\r\n value: '𝓑',\r\n codepoint: 120017,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL C',\r\n value: '𝓒',\r\n codepoint: 120018,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL D',\r\n value: '𝓓',\r\n codepoint: 120019,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL E',\r\n value: '𝓔',\r\n codepoint: 120020,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL F',\r\n value: '𝓕',\r\n codepoint: 120021,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL G',\r\n value: '𝓖',\r\n codepoint: 120022,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL H',\r\n value: '𝓗',\r\n codepoint: 120023,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL I',\r\n value: '𝓘',\r\n codepoint: 120024,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL J',\r\n value: '𝓙',\r\n codepoint: 120025,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL K',\r\n value: '𝓚',\r\n codepoint: 120026,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL L',\r\n value: '𝓛',\r\n codepoint: 120027,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL M',\r\n value: '𝓜',\r\n codepoint: 120028,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL N',\r\n value: '𝓝',\r\n codepoint: 120029,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL O',\r\n value: '𝓞',\r\n codepoint: 120030,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL P',\r\n value: '𝓟',\r\n codepoint: 120031,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL Q',\r\n value: '𝓠',\r\n codepoint: 120032,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL R',\r\n value: '𝓡',\r\n codepoint: 120033,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL S',\r\n value: '𝓢',\r\n codepoint: 120034,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL T',\r\n value: '𝓣',\r\n codepoint: 120035,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL U',\r\n value: '𝓤',\r\n codepoint: 120036,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL V',\r\n value: '𝓥',\r\n codepoint: 120037,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL W',\r\n value: '𝓦',\r\n codepoint: 120038,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL X',\r\n value: '𝓧',\r\n codepoint: 120039,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL Y',\r\n value: '𝓨',\r\n codepoint: 120040,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT CAPITAL Z',\r\n value: '𝓩',\r\n codepoint: 120041,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL A',\r\n value: '𝓪',\r\n codepoint: 120042,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL B',\r\n value: '𝓫',\r\n codepoint: 120043,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL C',\r\n value: '𝓬',\r\n codepoint: 120044,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL D',\r\n value: '𝓭',\r\n codepoint: 120045,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL E',\r\n value: '𝓮',\r\n codepoint: 120046,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL F',\r\n value: '𝓯',\r\n codepoint: 120047,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL G',\r\n value: '𝓰',\r\n codepoint: 120048,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL H',\r\n value: '𝓱',\r\n codepoint: 120049,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL I',\r\n value: '𝓲',\r\n codepoint: 120050,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL J',\r\n value: '𝓳',\r\n codepoint: 120051,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL K',\r\n value: '𝓴',\r\n codepoint: 120052,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL L',\r\n value: '𝓵',\r\n codepoint: 120053,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL M',\r\n value: '𝓶',\r\n codepoint: 120054,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL N',\r\n value: '𝓷',\r\n codepoint: 120055,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL O',\r\n value: '𝓸',\r\n codepoint: 120056,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL P',\r\n value: '𝓹',\r\n codepoint: 120057,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL Q',\r\n value: '𝓺',\r\n codepoint: 120058,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL R',\r\n value: '𝓻',\r\n codepoint: 120059,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL S',\r\n value: '𝓼',\r\n codepoint: 120060,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL T',\r\n value: '𝓽',\r\n codepoint: 120061,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL U',\r\n value: '𝓾',\r\n codepoint: 120062,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL V',\r\n value: '𝓿',\r\n codepoint: 120063,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL W',\r\n value: '𝔀',\r\n codepoint: 120064,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL X',\r\n value: '𝔁',\r\n codepoint: 120065,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL Y',\r\n value: '𝔂',\r\n codepoint: 120066,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SCRIPT SMALL Z',\r\n value: '𝔃',\r\n codepoint: 120067,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL A',\r\n value: '𝔄',\r\n codepoint: 120068,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL B',\r\n value: '𝔅',\r\n codepoint: 120069,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL D',\r\n value: '𝔇',\r\n codepoint: 120071,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL E',\r\n value: '𝔈',\r\n codepoint: 120072,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL F',\r\n value: '𝔉',\r\n codepoint: 120073,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL G',\r\n value: '𝔊',\r\n codepoint: 120074,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL J',\r\n value: '𝔍',\r\n codepoint: 120077,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL K',\r\n value: '𝔎',\r\n codepoint: 120078,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL L',\r\n value: '𝔏',\r\n codepoint: 120079,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL M',\r\n value: '𝔐',\r\n codepoint: 120080,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL N',\r\n value: '𝔑',\r\n codepoint: 120081,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL O',\r\n value: '𝔒',\r\n codepoint: 120082,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL P',\r\n value: '𝔓',\r\n codepoint: 120083,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL Q',\r\n value: '𝔔',\r\n codepoint: 120084,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL S',\r\n value: '𝔖',\r\n codepoint: 120086,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL T',\r\n value: '𝔗',\r\n codepoint: 120087,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL U',\r\n value: '𝔘',\r\n codepoint: 120088,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL V',\r\n value: '𝔙',\r\n codepoint: 120089,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL W',\r\n value: '𝔚',\r\n codepoint: 120090,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL X',\r\n value: '𝔛',\r\n codepoint: 120091,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR CAPITAL Y',\r\n value: '𝔜',\r\n codepoint: 120092,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL A',\r\n value: '𝔞',\r\n codepoint: 120094,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL B',\r\n value: '𝔟',\r\n codepoint: 120095,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL C',\r\n value: '𝔠',\r\n codepoint: 120096,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL D',\r\n value: '𝔡',\r\n codepoint: 120097,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL E',\r\n value: '𝔢',\r\n codepoint: 120098,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL F',\r\n value: '𝔣',\r\n codepoint: 120099,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL G',\r\n value: '𝔤',\r\n codepoint: 120100,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL H',\r\n value: '𝔥',\r\n codepoint: 120101,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL I',\r\n value: '𝔦',\r\n codepoint: 120102,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL J',\r\n value: '𝔧',\r\n codepoint: 120103,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL K',\r\n value: '𝔨',\r\n codepoint: 120104,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL L',\r\n value: '𝔩',\r\n codepoint: 120105,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL M',\r\n value: '𝔪',\r\n codepoint: 120106,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL N',\r\n value: '𝔫',\r\n codepoint: 120107,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL O',\r\n value: '𝔬',\r\n codepoint: 120108,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL P',\r\n value: '𝔭',\r\n codepoint: 120109,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL Q',\r\n value: '𝔮',\r\n codepoint: 120110,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL R',\r\n value: '𝔯',\r\n codepoint: 120111,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL S',\r\n value: '𝔰',\r\n codepoint: 120112,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL T',\r\n value: '𝔱',\r\n codepoint: 120113,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL U',\r\n value: '𝔲',\r\n codepoint: 120114,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL V',\r\n value: '𝔳',\r\n codepoint: 120115,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL W',\r\n value: '𝔴',\r\n codepoint: 120116,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL X',\r\n value: '𝔵',\r\n codepoint: 120117,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL Y',\r\n value: '𝔶',\r\n codepoint: 120118,\r\n },\r\n {\r\n name: 'MATHEMATICAL FRAKTUR SMALL Z',\r\n value: '𝔷',\r\n codepoint: 120119,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL A',\r\n value: '𝔸',\r\n codepoint: 120120,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL B',\r\n value: '𝔹',\r\n codepoint: 120121,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL D',\r\n value: '𝔻',\r\n codepoint: 120123,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL E',\r\n value: '𝔼',\r\n codepoint: 120124,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL F',\r\n value: '𝔽',\r\n codepoint: 120125,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL G',\r\n value: '𝔾',\r\n codepoint: 120126,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL I',\r\n value: '𝕀',\r\n codepoint: 120128,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL J',\r\n value: '𝕁',\r\n codepoint: 120129,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL K',\r\n value: '𝕂',\r\n codepoint: 120130,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL L',\r\n value: '𝕃',\r\n codepoint: 120131,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL M',\r\n value: '𝕄',\r\n codepoint: 120132,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL O',\r\n value: '𝕆',\r\n codepoint: 120134,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL S',\r\n value: '𝕊',\r\n codepoint: 120138,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL T',\r\n value: '𝕋',\r\n codepoint: 120139,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL U',\r\n value: '𝕌',\r\n codepoint: 120140,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL V',\r\n value: '𝕍',\r\n codepoint: 120141,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL W',\r\n value: '𝕎',\r\n codepoint: 120142,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL X',\r\n value: '𝕏',\r\n codepoint: 120143,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK CAPITAL Y',\r\n value: '𝕐',\r\n codepoint: 120144,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL A',\r\n value: '𝕒',\r\n codepoint: 120146,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL B',\r\n value: '𝕓',\r\n codepoint: 120147,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL C',\r\n value: '𝕔',\r\n codepoint: 120148,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL D',\r\n value: '𝕕',\r\n codepoint: 120149,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL E',\r\n value: '𝕖',\r\n codepoint: 120150,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL F',\r\n value: '𝕗',\r\n codepoint: 120151,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL G',\r\n value: '𝕘',\r\n codepoint: 120152,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL H',\r\n value: '𝕙',\r\n codepoint: 120153,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL I',\r\n value: '𝕚',\r\n codepoint: 120154,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL J',\r\n value: '𝕛',\r\n codepoint: 120155,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL K',\r\n value: '𝕜',\r\n codepoint: 120156,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL L',\r\n value: '𝕝',\r\n codepoint: 120157,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL M',\r\n value: '𝕞',\r\n codepoint: 120158,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL N',\r\n value: '𝕟',\r\n codepoint: 120159,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL O',\r\n value: '𝕠',\r\n codepoint: 120160,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL P',\r\n value: '𝕡',\r\n codepoint: 120161,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL Q',\r\n value: '𝕢',\r\n codepoint: 120162,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL R',\r\n value: '𝕣',\r\n codepoint: 120163,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL S',\r\n value: '𝕤',\r\n codepoint: 120164,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL T',\r\n value: '𝕥',\r\n codepoint: 120165,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL U',\r\n value: '𝕦',\r\n codepoint: 120166,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL V',\r\n value: '𝕧',\r\n codepoint: 120167,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL W',\r\n value: '𝕨',\r\n codepoint: 120168,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL X',\r\n value: '𝕩',\r\n codepoint: 120169,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL Y',\r\n value: '𝕪',\r\n codepoint: 120170,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK SMALL Z',\r\n value: '𝕫',\r\n codepoint: 120171,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL A',\r\n value: '𝕬',\r\n codepoint: 120172,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL B',\r\n value: '𝕭',\r\n codepoint: 120173,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL C',\r\n value: '𝕮',\r\n codepoint: 120174,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL D',\r\n value: '𝕯',\r\n codepoint: 120175,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL E',\r\n value: '𝕰',\r\n codepoint: 120176,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL F',\r\n value: '𝕱',\r\n codepoint: 120177,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL G',\r\n value: '𝕲',\r\n codepoint: 120178,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL H',\r\n value: '𝕳',\r\n codepoint: 120179,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL I',\r\n value: '𝕴',\r\n codepoint: 120180,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL J',\r\n value: '𝕵',\r\n codepoint: 120181,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL K',\r\n value: '𝕶',\r\n codepoint: 120182,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL L',\r\n value: '𝕷',\r\n codepoint: 120183,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL M',\r\n value: '𝕸',\r\n codepoint: 120184,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL N',\r\n value: '𝕹',\r\n codepoint: 120185,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL O',\r\n value: '𝕺',\r\n codepoint: 120186,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL P',\r\n value: '𝕻',\r\n codepoint: 120187,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL Q',\r\n value: '𝕼',\r\n codepoint: 120188,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL R',\r\n value: '𝕽',\r\n codepoint: 120189,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL S',\r\n value: '𝕾',\r\n codepoint: 120190,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL T',\r\n value: '𝕿',\r\n codepoint: 120191,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL U',\r\n value: '𝖀',\r\n codepoint: 120192,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL V',\r\n value: '𝖁',\r\n codepoint: 120193,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL W',\r\n value: '𝖂',\r\n codepoint: 120194,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL X',\r\n value: '𝖃',\r\n codepoint: 120195,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL Y',\r\n value: '𝖄',\r\n codepoint: 120196,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR CAPITAL Z',\r\n value: '𝖅',\r\n codepoint: 120197,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL A',\r\n value: '𝖆',\r\n codepoint: 120198,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL B',\r\n value: '𝖇',\r\n codepoint: 120199,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL C',\r\n value: '𝖈',\r\n codepoint: 120200,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL D',\r\n value: '𝖉',\r\n codepoint: 120201,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL E',\r\n value: '𝖊',\r\n codepoint: 120202,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL F',\r\n value: '𝖋',\r\n codepoint: 120203,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL G',\r\n value: '𝖌',\r\n codepoint: 120204,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL H',\r\n value: '𝖍',\r\n codepoint: 120205,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL I',\r\n value: '𝖎',\r\n codepoint: 120206,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL J',\r\n value: '𝖏',\r\n codepoint: 120207,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL K',\r\n value: '𝖐',\r\n codepoint: 120208,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL L',\r\n value: '𝖑',\r\n codepoint: 120209,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL M',\r\n value: '𝖒',\r\n codepoint: 120210,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL N',\r\n value: '𝖓',\r\n codepoint: 120211,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL O',\r\n value: '𝖔',\r\n codepoint: 120212,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL P',\r\n value: '𝖕',\r\n codepoint: 120213,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL Q',\r\n value: '𝖖',\r\n codepoint: 120214,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL R',\r\n value: '𝖗',\r\n codepoint: 120215,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL S',\r\n value: '𝖘',\r\n codepoint: 120216,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL T',\r\n value: '𝖙',\r\n codepoint: 120217,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL U',\r\n value: '𝖚',\r\n codepoint: 120218,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL V',\r\n value: '𝖛',\r\n codepoint: 120219,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL W',\r\n value: '𝖜',\r\n codepoint: 120220,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL X',\r\n value: '𝖝',\r\n codepoint: 120221,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL Y',\r\n value: '𝖞',\r\n codepoint: 120222,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD FRAKTUR SMALL Z',\r\n value: '𝖟',\r\n codepoint: 120223,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL A',\r\n value: '𝖠',\r\n codepoint: 120224,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL B',\r\n value: '𝖡',\r\n codepoint: 120225,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL C',\r\n value: '𝖢',\r\n codepoint: 120226,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL D',\r\n value: '𝖣',\r\n codepoint: 120227,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL E',\r\n value: '𝖤',\r\n codepoint: 120228,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL F',\r\n value: '𝖥',\r\n codepoint: 120229,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL G',\r\n value: '𝖦',\r\n codepoint: 120230,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL H',\r\n value: '𝖧',\r\n codepoint: 120231,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL I',\r\n value: '𝖨',\r\n codepoint: 120232,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL J',\r\n value: '𝖩',\r\n codepoint: 120233,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL K',\r\n value: '𝖪',\r\n codepoint: 120234,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL L',\r\n value: '𝖫',\r\n codepoint: 120235,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL M',\r\n value: '𝖬',\r\n codepoint: 120236,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL N',\r\n value: '𝖭',\r\n codepoint: 120237,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL O',\r\n value: '𝖮',\r\n codepoint: 120238,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL P',\r\n value: '𝖯',\r\n codepoint: 120239,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL Q',\r\n value: '𝖰',\r\n codepoint: 120240,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL R',\r\n value: '𝖱',\r\n codepoint: 120241,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL S',\r\n value: '𝖲',\r\n codepoint: 120242,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL T',\r\n value: '𝖳',\r\n codepoint: 120243,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL U',\r\n value: '𝖴',\r\n codepoint: 120244,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL V',\r\n value: '𝖵',\r\n codepoint: 120245,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL W',\r\n value: '𝖶',\r\n codepoint: 120246,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL X',\r\n value: '𝖷',\r\n codepoint: 120247,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL Y',\r\n value: '𝖸',\r\n codepoint: 120248,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF CAPITAL Z',\r\n value: '𝖹',\r\n codepoint: 120249,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL A',\r\n value: '𝖺',\r\n codepoint: 120250,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL B',\r\n value: '𝖻',\r\n codepoint: 120251,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL C',\r\n value: '𝖼',\r\n codepoint: 120252,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL D',\r\n value: '𝖽',\r\n codepoint: 120253,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL E',\r\n value: '𝖾',\r\n codepoint: 120254,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL F',\r\n value: '𝖿',\r\n codepoint: 120255,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL G',\r\n value: '𝗀',\r\n codepoint: 120256,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL H',\r\n value: '𝗁',\r\n codepoint: 120257,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL I',\r\n value: '𝗂',\r\n codepoint: 120258,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL J',\r\n value: '𝗃',\r\n codepoint: 120259,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL K',\r\n value: '𝗄',\r\n codepoint: 120260,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL L',\r\n value: '𝗅',\r\n codepoint: 120261,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL M',\r\n value: '𝗆',\r\n codepoint: 120262,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL N',\r\n value: '𝗇',\r\n codepoint: 120263,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL O',\r\n value: '𝗈',\r\n codepoint: 120264,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL P',\r\n value: '𝗉',\r\n codepoint: 120265,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL Q',\r\n value: '𝗊',\r\n codepoint: 120266,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL R',\r\n value: '𝗋',\r\n codepoint: 120267,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL S',\r\n value: '𝗌',\r\n codepoint: 120268,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL T',\r\n value: '𝗍',\r\n codepoint: 120269,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL U',\r\n value: '𝗎',\r\n codepoint: 120270,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL V',\r\n value: '𝗏',\r\n codepoint: 120271,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL W',\r\n value: '𝗐',\r\n codepoint: 120272,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL X',\r\n value: '𝗑',\r\n codepoint: 120273,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL Y',\r\n value: '𝗒',\r\n codepoint: 120274,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF SMALL Z',\r\n value: '𝗓',\r\n codepoint: 120275,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL A',\r\n value: '𝗔',\r\n codepoint: 120276,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL B',\r\n value: '𝗕',\r\n codepoint: 120277,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL C',\r\n value: '𝗖',\r\n codepoint: 120278,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL D',\r\n value: '𝗗',\r\n codepoint: 120279,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL E',\r\n value: '𝗘',\r\n codepoint: 120280,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL F',\r\n value: '𝗙',\r\n codepoint: 120281,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL G',\r\n value: '𝗚',\r\n codepoint: 120282,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL H',\r\n value: '𝗛',\r\n codepoint: 120283,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL I',\r\n value: '𝗜',\r\n codepoint: 120284,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL J',\r\n value: '𝗝',\r\n codepoint: 120285,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL K',\r\n value: '𝗞',\r\n codepoint: 120286,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL L',\r\n value: '𝗟',\r\n codepoint: 120287,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL M',\r\n value: '𝗠',\r\n codepoint: 120288,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL N',\r\n value: '𝗡',\r\n codepoint: 120289,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL O',\r\n value: '𝗢',\r\n codepoint: 120290,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL P',\r\n value: '𝗣',\r\n codepoint: 120291,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL Q',\r\n value: '𝗤',\r\n codepoint: 120292,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL R',\r\n value: '𝗥',\r\n codepoint: 120293,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL S',\r\n value: '𝗦',\r\n codepoint: 120294,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL T',\r\n value: '𝗧',\r\n codepoint: 120295,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL U',\r\n value: '𝗨',\r\n codepoint: 120296,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL V',\r\n value: '𝗩',\r\n codepoint: 120297,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL W',\r\n value: '𝗪',\r\n codepoint: 120298,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL X',\r\n value: '𝗫',\r\n codepoint: 120299,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL Y',\r\n value: '𝗬',\r\n codepoint: 120300,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL Z',\r\n value: '𝗭',\r\n codepoint: 120301,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL A',\r\n value: '𝗮',\r\n codepoint: 120302,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL B',\r\n value: '𝗯',\r\n codepoint: 120303,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL C',\r\n value: '𝗰',\r\n codepoint: 120304,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL D',\r\n value: '𝗱',\r\n codepoint: 120305,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL E',\r\n value: '𝗲',\r\n codepoint: 120306,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL F',\r\n value: '𝗳',\r\n codepoint: 120307,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL G',\r\n value: '𝗴',\r\n codepoint: 120308,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL H',\r\n value: '𝗵',\r\n codepoint: 120309,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL I',\r\n value: '𝗶',\r\n codepoint: 120310,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL J',\r\n value: '𝗷',\r\n codepoint: 120311,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL K',\r\n value: '𝗸',\r\n codepoint: 120312,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL L',\r\n value: '𝗹',\r\n codepoint: 120313,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL M',\r\n value: '𝗺',\r\n codepoint: 120314,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL N',\r\n value: '𝗻',\r\n codepoint: 120315,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL O',\r\n value: '𝗼',\r\n codepoint: 120316,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL P',\r\n value: '𝗽',\r\n codepoint: 120317,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL Q',\r\n value: '𝗾',\r\n codepoint: 120318,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL R',\r\n value: '𝗿',\r\n codepoint: 120319,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL S',\r\n value: '𝘀',\r\n codepoint: 120320,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL T',\r\n value: '𝘁',\r\n codepoint: 120321,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL U',\r\n value: '𝘂',\r\n codepoint: 120322,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL V',\r\n value: '𝘃',\r\n codepoint: 120323,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL W',\r\n value: '𝘄',\r\n codepoint: 120324,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL X',\r\n value: '𝘅',\r\n codepoint: 120325,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL Y',\r\n value: '𝘆',\r\n codepoint: 120326,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL Z',\r\n value: '𝘇',\r\n codepoint: 120327,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL A',\r\n value: '𝘈',\r\n codepoint: 120328,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL B',\r\n value: '𝘉',\r\n codepoint: 120329,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL C',\r\n value: '𝘊',\r\n codepoint: 120330,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL D',\r\n value: '𝘋',\r\n codepoint: 120331,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL E',\r\n value: '𝘌',\r\n codepoint: 120332,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL F',\r\n value: '𝘍',\r\n codepoint: 120333,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL G',\r\n value: '𝘎',\r\n codepoint: 120334,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL H',\r\n value: '𝘏',\r\n codepoint: 120335,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL I',\r\n value: '𝘐',\r\n codepoint: 120336,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL J',\r\n value: '𝘑',\r\n codepoint: 120337,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL K',\r\n value: '𝘒',\r\n codepoint: 120338,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL L',\r\n value: '𝘓',\r\n codepoint: 120339,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL M',\r\n value: '𝘔',\r\n codepoint: 120340,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL N',\r\n value: '𝘕',\r\n codepoint: 120341,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL O',\r\n value: '𝘖',\r\n codepoint: 120342,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL P',\r\n value: '𝘗',\r\n codepoint: 120343,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q',\r\n value: '𝘘',\r\n codepoint: 120344,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL R',\r\n value: '𝘙',\r\n codepoint: 120345,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL S',\r\n value: '𝘚',\r\n codepoint: 120346,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL T',\r\n value: '𝘛',\r\n codepoint: 120347,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL U',\r\n value: '𝘜',\r\n codepoint: 120348,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL V',\r\n value: '𝘝',\r\n codepoint: 120349,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL W',\r\n value: '𝘞',\r\n codepoint: 120350,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL X',\r\n value: '𝘟',\r\n codepoint: 120351,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y',\r\n value: '𝘠',\r\n codepoint: 120352,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z',\r\n value: '𝘡',\r\n codepoint: 120353,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL A',\r\n value: '𝘢',\r\n codepoint: 120354,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL B',\r\n value: '𝘣',\r\n codepoint: 120355,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL C',\r\n value: '𝘤',\r\n codepoint: 120356,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL D',\r\n value: '𝘥',\r\n codepoint: 120357,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL E',\r\n value: '𝘦',\r\n codepoint: 120358,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL F',\r\n value: '𝘧',\r\n codepoint: 120359,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL G',\r\n value: '𝘨',\r\n codepoint: 120360,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL H',\r\n value: '𝘩',\r\n codepoint: 120361,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL I',\r\n value: '𝘪',\r\n codepoint: 120362,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL J',\r\n value: '𝘫',\r\n codepoint: 120363,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL K',\r\n value: '𝘬',\r\n codepoint: 120364,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL L',\r\n value: '𝘭',\r\n codepoint: 120365,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL M',\r\n value: '𝘮',\r\n codepoint: 120366,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL N',\r\n value: '𝘯',\r\n codepoint: 120367,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL O',\r\n value: '𝘰',\r\n codepoint: 120368,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL P',\r\n value: '𝘱',\r\n codepoint: 120369,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL Q',\r\n value: '𝘲',\r\n codepoint: 120370,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL R',\r\n value: '𝘳',\r\n codepoint: 120371,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL S',\r\n value: '𝘴',\r\n codepoint: 120372,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL T',\r\n value: '𝘵',\r\n codepoint: 120373,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL U',\r\n value: '𝘶',\r\n codepoint: 120374,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL V',\r\n value: '𝘷',\r\n codepoint: 120375,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL W',\r\n value: '𝘸',\r\n codepoint: 120376,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL X',\r\n value: '𝘹',\r\n codepoint: 120377,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL Y',\r\n value: '𝘺',\r\n codepoint: 120378,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF ITALIC SMALL Z',\r\n value: '𝘻',\r\n codepoint: 120379,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A',\r\n value: '𝘼',\r\n codepoint: 120380,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B',\r\n value: '𝘽',\r\n codepoint: 120381,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C',\r\n value: '𝘾',\r\n codepoint: 120382,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D',\r\n value: '𝘿',\r\n codepoint: 120383,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E',\r\n value: '𝙀',\r\n codepoint: 120384,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F',\r\n value: '𝙁',\r\n codepoint: 120385,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G',\r\n value: '𝙂',\r\n codepoint: 120386,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H',\r\n value: '𝙃',\r\n codepoint: 120387,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I',\r\n value: '𝙄',\r\n codepoint: 120388,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J',\r\n value: '𝙅',\r\n codepoint: 120389,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K',\r\n value: '𝙆',\r\n codepoint: 120390,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L',\r\n value: '𝙇',\r\n codepoint: 120391,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M',\r\n value: '𝙈',\r\n codepoint: 120392,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N',\r\n value: '𝙉',\r\n codepoint: 120393,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O',\r\n value: '𝙊',\r\n codepoint: 120394,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P',\r\n value: '𝙋',\r\n codepoint: 120395,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q',\r\n value: '𝙌',\r\n codepoint: 120396,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R',\r\n value: '𝙍',\r\n codepoint: 120397,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S',\r\n value: '𝙎',\r\n codepoint: 120398,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T',\r\n value: '𝙏',\r\n codepoint: 120399,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U',\r\n value: '𝙐',\r\n codepoint: 120400,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V',\r\n value: '𝙑',\r\n codepoint: 120401,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W',\r\n value: '𝙒',\r\n codepoint: 120402,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X',\r\n value: '𝙓',\r\n codepoint: 120403,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y',\r\n value: '𝙔',\r\n codepoint: 120404,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z',\r\n value: '𝙕',\r\n codepoint: 120405,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A',\r\n value: '𝙖',\r\n codepoint: 120406,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B',\r\n value: '𝙗',\r\n codepoint: 120407,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C',\r\n value: '𝙘',\r\n codepoint: 120408,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D',\r\n value: '𝙙',\r\n codepoint: 120409,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E',\r\n value: '𝙚',\r\n codepoint: 120410,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F',\r\n value: '𝙛',\r\n codepoint: 120411,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G',\r\n value: '𝙜',\r\n codepoint: 120412,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H',\r\n value: '𝙝',\r\n codepoint: 120413,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I',\r\n value: '𝙞',\r\n codepoint: 120414,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J',\r\n value: '𝙟',\r\n codepoint: 120415,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K',\r\n value: '𝙠',\r\n codepoint: 120416,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L',\r\n value: '𝙡',\r\n codepoint: 120417,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M',\r\n value: '𝙢',\r\n codepoint: 120418,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N',\r\n value: '𝙣',\r\n codepoint: 120419,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O',\r\n value: '𝙤',\r\n codepoint: 120420,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P',\r\n value: '𝙥',\r\n codepoint: 120421,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q',\r\n value: '𝙦',\r\n codepoint: 120422,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R',\r\n value: '𝙧',\r\n codepoint: 120423,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S',\r\n value: '𝙨',\r\n codepoint: 120424,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T',\r\n value: '𝙩',\r\n codepoint: 120425,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U',\r\n value: '𝙪',\r\n codepoint: 120426,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V',\r\n value: '𝙫',\r\n codepoint: 120427,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W',\r\n value: '𝙬',\r\n codepoint: 120428,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X',\r\n value: '𝙭',\r\n codepoint: 120429,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y',\r\n value: '𝙮',\r\n codepoint: 120430,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z',\r\n value: '𝙯',\r\n codepoint: 120431,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL A',\r\n value: '𝙰',\r\n codepoint: 120432,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL B',\r\n value: '𝙱',\r\n codepoint: 120433,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL C',\r\n value: '𝙲',\r\n codepoint: 120434,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL D',\r\n value: '𝙳',\r\n codepoint: 120435,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL E',\r\n value: '𝙴',\r\n codepoint: 120436,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL F',\r\n value: '𝙵',\r\n codepoint: 120437,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL G',\r\n value: '𝙶',\r\n codepoint: 120438,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL H',\r\n value: '𝙷',\r\n codepoint: 120439,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL I',\r\n value: '𝙸',\r\n codepoint: 120440,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL J',\r\n value: '𝙹',\r\n codepoint: 120441,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL K',\r\n value: '𝙺',\r\n codepoint: 120442,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL L',\r\n value: '𝙻',\r\n codepoint: 120443,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL M',\r\n value: '𝙼',\r\n codepoint: 120444,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL N',\r\n value: '𝙽',\r\n codepoint: 120445,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL O',\r\n value: '𝙾',\r\n codepoint: 120446,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL P',\r\n value: '𝙿',\r\n codepoint: 120447,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL Q',\r\n value: '𝚀',\r\n codepoint: 120448,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL R',\r\n value: '𝚁',\r\n codepoint: 120449,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL S',\r\n value: '𝚂',\r\n codepoint: 120450,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL T',\r\n value: '𝚃',\r\n codepoint: 120451,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL U',\r\n value: '𝚄',\r\n codepoint: 120452,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL V',\r\n value: '𝚅',\r\n codepoint: 120453,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL W',\r\n value: '𝚆',\r\n codepoint: 120454,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL X',\r\n value: '𝚇',\r\n codepoint: 120455,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL Y',\r\n value: '𝚈',\r\n codepoint: 120456,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE CAPITAL Z',\r\n value: '𝚉',\r\n codepoint: 120457,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL A',\r\n value: '𝚊',\r\n codepoint: 120458,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL B',\r\n value: '𝚋',\r\n codepoint: 120459,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL C',\r\n value: '𝚌',\r\n codepoint: 120460,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL D',\r\n value: '𝚍',\r\n codepoint: 120461,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL E',\r\n value: '𝚎',\r\n codepoint: 120462,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL F',\r\n value: '𝚏',\r\n codepoint: 120463,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL G',\r\n value: '𝚐',\r\n codepoint: 120464,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL H',\r\n value: '𝚑',\r\n codepoint: 120465,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL I',\r\n value: '𝚒',\r\n codepoint: 120466,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL J',\r\n value: '𝚓',\r\n codepoint: 120467,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL K',\r\n value: '𝚔',\r\n codepoint: 120468,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL L',\r\n value: '𝚕',\r\n codepoint: 120469,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL M',\r\n value: '𝚖',\r\n codepoint: 120470,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL N',\r\n value: '𝚗',\r\n codepoint: 120471,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL O',\r\n value: '𝚘',\r\n codepoint: 120472,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL P',\r\n value: '𝚙',\r\n codepoint: 120473,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL Q',\r\n value: '𝚚',\r\n codepoint: 120474,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL R',\r\n value: '𝚛',\r\n codepoint: 120475,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL S',\r\n value: '𝚜',\r\n codepoint: 120476,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL T',\r\n value: '𝚝',\r\n codepoint: 120477,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL U',\r\n value: '𝚞',\r\n codepoint: 120478,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL V',\r\n value: '𝚟',\r\n codepoint: 120479,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL W',\r\n value: '𝚠',\r\n codepoint: 120480,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL X',\r\n value: '𝚡',\r\n codepoint: 120481,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL Y',\r\n value: '𝚢',\r\n codepoint: 120482,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE SMALL Z',\r\n value: '𝚣',\r\n codepoint: 120483,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL DOTLESS I',\r\n value: '𝚤',\r\n codepoint: 120484,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL DOTLESS J',\r\n value: '𝚥',\r\n codepoint: 120485,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL ALPHA',\r\n value: '𝚨',\r\n codepoint: 120488,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL BETA',\r\n value: '𝚩',\r\n codepoint: 120489,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL GAMMA',\r\n value: '𝚪',\r\n codepoint: 120490,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL DELTA',\r\n value: '𝚫',\r\n codepoint: 120491,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL EPSILON',\r\n value: '𝚬',\r\n codepoint: 120492,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL ZETA',\r\n value: '𝚭',\r\n codepoint: 120493,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL ETA',\r\n value: '𝚮',\r\n codepoint: 120494,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL THETA',\r\n value: '𝚯',\r\n codepoint: 120495,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL IOTA',\r\n value: '𝚰',\r\n codepoint: 120496,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL KAPPA',\r\n value: '𝚱',\r\n codepoint: 120497,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL LAMDA',\r\n value: '𝚲',\r\n codepoint: 120498,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL MU',\r\n value: '𝚳',\r\n codepoint: 120499,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL NU',\r\n value: '𝚴',\r\n codepoint: 120500,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL XI',\r\n value: '𝚵',\r\n codepoint: 120501,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL OMICRON',\r\n value: '𝚶',\r\n codepoint: 120502,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL PI',\r\n value: '𝚷',\r\n codepoint: 120503,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL RHO',\r\n value: '𝚸',\r\n codepoint: 120504,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL THETA SYMBOL',\r\n value: '𝚹',\r\n codepoint: 120505,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL SIGMA',\r\n value: '𝚺',\r\n codepoint: 120506,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL TAU',\r\n value: '𝚻',\r\n codepoint: 120507,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL UPSILON',\r\n value: '𝚼',\r\n codepoint: 120508,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL PHI',\r\n value: '𝚽',\r\n codepoint: 120509,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL CHI',\r\n value: '𝚾',\r\n codepoint: 120510,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL PSI',\r\n value: '𝚿',\r\n codepoint: 120511,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD CAPITAL OMEGA',\r\n value: '𝛀',\r\n codepoint: 120512,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD NABLA',\r\n value: '𝛁',\r\n codepoint: 120513,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL ALPHA',\r\n value: '𝛂',\r\n codepoint: 120514,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL BETA',\r\n value: '𝛃',\r\n codepoint: 120515,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL GAMMA',\r\n value: '𝛄',\r\n codepoint: 120516,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL DELTA',\r\n value: '𝛅',\r\n codepoint: 120517,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL EPSILON',\r\n value: '𝛆',\r\n codepoint: 120518,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL ZETA',\r\n value: '𝛇',\r\n codepoint: 120519,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL ETA',\r\n value: '𝛈',\r\n codepoint: 120520,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL THETA',\r\n value: '𝛉',\r\n codepoint: 120521,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL IOTA',\r\n value: '𝛊',\r\n codepoint: 120522,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL KAPPA',\r\n value: '𝛋',\r\n codepoint: 120523,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL LAMDA',\r\n value: '𝛌',\r\n codepoint: 120524,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL MU',\r\n value: '𝛍',\r\n codepoint: 120525,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL NU',\r\n value: '𝛎',\r\n codepoint: 120526,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL XI',\r\n value: '𝛏',\r\n codepoint: 120527,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL OMICRON',\r\n value: '𝛐',\r\n codepoint: 120528,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL PI',\r\n value: '𝛑',\r\n codepoint: 120529,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL RHO',\r\n value: '𝛒',\r\n codepoint: 120530,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL FINAL SIGMA',\r\n value: '𝛓',\r\n codepoint: 120531,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL SIGMA',\r\n value: '𝛔',\r\n codepoint: 120532,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL TAU',\r\n value: '𝛕',\r\n codepoint: 120533,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL UPSILON',\r\n value: '𝛖',\r\n codepoint: 120534,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL PHI',\r\n value: '𝛗',\r\n codepoint: 120535,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL CHI',\r\n value: '𝛘',\r\n codepoint: 120536,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL PSI',\r\n value: '𝛙',\r\n codepoint: 120537,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD SMALL OMEGA',\r\n value: '𝛚',\r\n codepoint: 120538,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD PARTIAL DIFFERENTIAL',\r\n value: '𝛛',\r\n codepoint: 120539,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD EPSILON SYMBOL',\r\n value: '𝛜',\r\n codepoint: 120540,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD THETA SYMBOL',\r\n value: '𝛝',\r\n codepoint: 120541,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD KAPPA SYMBOL',\r\n value: '𝛞',\r\n codepoint: 120542,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD PHI SYMBOL',\r\n value: '𝛟',\r\n codepoint: 120543,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD RHO SYMBOL',\r\n value: '𝛠',\r\n codepoint: 120544,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD PI SYMBOL',\r\n value: '𝛡',\r\n codepoint: 120545,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL ALPHA',\r\n value: '𝛢',\r\n codepoint: 120546,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL BETA',\r\n value: '𝛣',\r\n codepoint: 120547,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL GAMMA',\r\n value: '𝛤',\r\n codepoint: 120548,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL DELTA',\r\n value: '𝛥',\r\n codepoint: 120549,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL EPSILON',\r\n value: '𝛦',\r\n codepoint: 120550,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL ZETA',\r\n value: '𝛧',\r\n codepoint: 120551,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL ETA',\r\n value: '𝛨',\r\n codepoint: 120552,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL THETA',\r\n value: '𝛩',\r\n codepoint: 120553,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL IOTA',\r\n value: '𝛪',\r\n codepoint: 120554,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL KAPPA',\r\n value: '𝛫',\r\n codepoint: 120555,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL LAMDA',\r\n value: '𝛬',\r\n codepoint: 120556,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL MU',\r\n value: '𝛭',\r\n codepoint: 120557,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL NU',\r\n value: '𝛮',\r\n codepoint: 120558,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL XI',\r\n value: '𝛯',\r\n codepoint: 120559,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL OMICRON',\r\n value: '𝛰',\r\n codepoint: 120560,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL PI',\r\n value: '𝛱',\r\n codepoint: 120561,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL RHO',\r\n value: '𝛲',\r\n codepoint: 120562,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL THETA SYMBOL',\r\n value: '𝛳',\r\n codepoint: 120563,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL SIGMA',\r\n value: '𝛴',\r\n codepoint: 120564,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL TAU',\r\n value: '𝛵',\r\n codepoint: 120565,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL UPSILON',\r\n value: '𝛶',\r\n codepoint: 120566,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL PHI',\r\n value: '𝛷',\r\n codepoint: 120567,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL CHI',\r\n value: '𝛸',\r\n codepoint: 120568,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL PSI',\r\n value: '𝛹',\r\n codepoint: 120569,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC CAPITAL OMEGA',\r\n value: '𝛺',\r\n codepoint: 120570,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC NABLA',\r\n value: '𝛻',\r\n codepoint: 120571,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL ALPHA',\r\n value: '𝛼',\r\n codepoint: 120572,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL BETA',\r\n value: '𝛽',\r\n codepoint: 120573,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL GAMMA',\r\n value: '𝛾',\r\n codepoint: 120574,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL DELTA',\r\n value: '𝛿',\r\n codepoint: 120575,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL EPSILON',\r\n value: '𝜀',\r\n codepoint: 120576,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL ZETA',\r\n value: '𝜁',\r\n codepoint: 120577,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL ETA',\r\n value: '𝜂',\r\n codepoint: 120578,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL THETA',\r\n value: '𝜃',\r\n codepoint: 120579,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL IOTA',\r\n value: '𝜄',\r\n codepoint: 120580,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL KAPPA',\r\n value: '𝜅',\r\n codepoint: 120581,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL LAMDA',\r\n value: '𝜆',\r\n codepoint: 120582,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL MU',\r\n value: '𝜇',\r\n codepoint: 120583,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL NU',\r\n value: '𝜈',\r\n codepoint: 120584,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL XI',\r\n value: '𝜉',\r\n codepoint: 120585,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL OMICRON',\r\n value: '𝜊',\r\n codepoint: 120586,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL PI',\r\n value: '𝜋',\r\n codepoint: 120587,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL RHO',\r\n value: '𝜌',\r\n codepoint: 120588,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL FINAL SIGMA',\r\n value: '𝜍',\r\n codepoint: 120589,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL SIGMA',\r\n value: '𝜎',\r\n codepoint: 120590,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL TAU',\r\n value: '𝜏',\r\n codepoint: 120591,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL UPSILON',\r\n value: '𝜐',\r\n codepoint: 120592,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL PHI',\r\n value: '𝜑',\r\n codepoint: 120593,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL CHI',\r\n value: '𝜒',\r\n codepoint: 120594,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL PSI',\r\n value: '𝜓',\r\n codepoint: 120595,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC SMALL OMEGA',\r\n value: '𝜔',\r\n codepoint: 120596,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL',\r\n value: '𝜕',\r\n codepoint: 120597,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC EPSILON SYMBOL',\r\n value: '𝜖',\r\n codepoint: 120598,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC THETA SYMBOL',\r\n value: '𝜗',\r\n codepoint: 120599,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC KAPPA SYMBOL',\r\n value: '𝜘',\r\n codepoint: 120600,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC PHI SYMBOL',\r\n value: '𝜙',\r\n codepoint: 120601,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC RHO SYMBOL',\r\n value: '𝜚',\r\n codepoint: 120602,\r\n },\r\n {\r\n name: 'MATHEMATICAL ITALIC PI SYMBOL',\r\n value: '𝜛',\r\n codepoint: 120603,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL ALPHA',\r\n value: '𝜜',\r\n codepoint: 120604,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL BETA',\r\n value: '𝜝',\r\n codepoint: 120605,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL GAMMA',\r\n value: '𝜞',\r\n codepoint: 120606,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL DELTA',\r\n value: '𝜟',\r\n codepoint: 120607,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL EPSILON',\r\n value: '𝜠',\r\n codepoint: 120608,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL ZETA',\r\n value: '𝜡',\r\n codepoint: 120609,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL ETA',\r\n value: '𝜢',\r\n codepoint: 120610,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL THETA',\r\n value: '𝜣',\r\n codepoint: 120611,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL IOTA',\r\n value: '𝜤',\r\n codepoint: 120612,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL KAPPA',\r\n value: '𝜥',\r\n codepoint: 120613,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL LAMDA',\r\n value: '𝜦',\r\n codepoint: 120614,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL MU',\r\n value: '𝜧',\r\n codepoint: 120615,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL NU',\r\n value: '𝜨',\r\n codepoint: 120616,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL XI',\r\n value: '𝜩',\r\n codepoint: 120617,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL OMICRON',\r\n value: '𝜪',\r\n codepoint: 120618,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL PI',\r\n value: '𝜫',\r\n codepoint: 120619,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL RHO',\r\n value: '𝜬',\r\n codepoint: 120620,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL',\r\n value: '𝜭',\r\n codepoint: 120621,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL SIGMA',\r\n value: '𝜮',\r\n codepoint: 120622,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL TAU',\r\n value: '𝜯',\r\n codepoint: 120623,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL UPSILON',\r\n value: '𝜰',\r\n codepoint: 120624,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL PHI',\r\n value: '𝜱',\r\n codepoint: 120625,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL CHI',\r\n value: '𝜲',\r\n codepoint: 120626,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL PSI',\r\n value: '𝜳',\r\n codepoint: 120627,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC CAPITAL OMEGA',\r\n value: '𝜴',\r\n codepoint: 120628,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC NABLA',\r\n value: '𝜵',\r\n codepoint: 120629,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL ALPHA',\r\n value: '𝜶',\r\n codepoint: 120630,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL BETA',\r\n value: '𝜷',\r\n codepoint: 120631,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL GAMMA',\r\n value: '𝜸',\r\n codepoint: 120632,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL DELTA',\r\n value: '𝜹',\r\n codepoint: 120633,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL EPSILON',\r\n value: '𝜺',\r\n codepoint: 120634,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL ZETA',\r\n value: '𝜻',\r\n codepoint: 120635,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL ETA',\r\n value: '𝜼',\r\n codepoint: 120636,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL THETA',\r\n value: '𝜽',\r\n codepoint: 120637,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL IOTA',\r\n value: '𝜾',\r\n codepoint: 120638,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL KAPPA',\r\n value: '𝜿',\r\n codepoint: 120639,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL LAMDA',\r\n value: '𝝀',\r\n codepoint: 120640,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL MU',\r\n value: '𝝁',\r\n codepoint: 120641,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL NU',\r\n value: '𝝂',\r\n codepoint: 120642,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL XI',\r\n value: '𝝃',\r\n codepoint: 120643,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL OMICRON',\r\n value: '𝝄',\r\n codepoint: 120644,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL PI',\r\n value: '𝝅',\r\n codepoint: 120645,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL RHO',\r\n value: '𝝆',\r\n codepoint: 120646,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA',\r\n value: '𝝇',\r\n codepoint: 120647,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL SIGMA',\r\n value: '𝝈',\r\n codepoint: 120648,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL TAU',\r\n value: '𝝉',\r\n codepoint: 120649,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL UPSILON',\r\n value: '𝝊',\r\n codepoint: 120650,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL PHI',\r\n value: '𝝋',\r\n codepoint: 120651,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL CHI',\r\n value: '𝝌',\r\n codepoint: 120652,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL PSI',\r\n value: '𝝍',\r\n codepoint: 120653,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC SMALL OMEGA',\r\n value: '𝝎',\r\n codepoint: 120654,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL',\r\n value: '𝝏',\r\n codepoint: 120655,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC EPSILON SYMBOL',\r\n value: '𝝐',\r\n codepoint: 120656,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC THETA SYMBOL',\r\n value: '𝝑',\r\n codepoint: 120657,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC KAPPA SYMBOL',\r\n value: '𝝒',\r\n codepoint: 120658,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC PHI SYMBOL',\r\n value: '𝝓',\r\n codepoint: 120659,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC RHO SYMBOL',\r\n value: '𝝔',\r\n codepoint: 120660,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD ITALIC PI SYMBOL',\r\n value: '𝝕',\r\n codepoint: 120661,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA',\r\n value: '𝝖',\r\n codepoint: 120662,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA',\r\n value: '𝝗',\r\n codepoint: 120663,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA',\r\n value: '𝝘',\r\n codepoint: 120664,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA',\r\n value: '𝝙',\r\n codepoint: 120665,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON',\r\n value: '𝝚',\r\n codepoint: 120666,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA',\r\n value: '𝝛',\r\n codepoint: 120667,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA',\r\n value: '𝝜',\r\n codepoint: 120668,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA',\r\n value: '𝝝',\r\n codepoint: 120669,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA',\r\n value: '𝝞',\r\n codepoint: 120670,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA',\r\n value: '𝝟',\r\n codepoint: 120671,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA',\r\n value: '𝝠',\r\n codepoint: 120672,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL MU',\r\n value: '𝝡',\r\n codepoint: 120673,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL NU',\r\n value: '𝝢',\r\n codepoint: 120674,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL XI',\r\n value: '𝝣',\r\n codepoint: 120675,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON',\r\n value: '𝝤',\r\n codepoint: 120676,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL PI',\r\n value: '𝝥',\r\n codepoint: 120677,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO',\r\n value: '𝝦',\r\n codepoint: 120678,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL',\r\n value: '𝝧',\r\n codepoint: 120679,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA',\r\n value: '𝝨',\r\n codepoint: 120680,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU',\r\n value: '𝝩',\r\n codepoint: 120681,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON',\r\n value: '𝝪',\r\n codepoint: 120682,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI',\r\n value: '𝝫',\r\n codepoint: 120683,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI',\r\n value: '𝝬',\r\n codepoint: 120684,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI',\r\n value: '𝝭',\r\n codepoint: 120685,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA',\r\n value: '𝝮',\r\n codepoint: 120686,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD NABLA',\r\n value: '𝝯',\r\n codepoint: 120687,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA',\r\n value: '𝝰',\r\n codepoint: 120688,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL BETA',\r\n value: '𝝱',\r\n codepoint: 120689,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA',\r\n value: '𝝲',\r\n codepoint: 120690,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL DELTA',\r\n value: '𝝳',\r\n codepoint: 120691,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON',\r\n value: '𝝴',\r\n codepoint: 120692,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL ZETA',\r\n value: '𝝵',\r\n codepoint: 120693,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL ETA',\r\n value: '𝝶',\r\n codepoint: 120694,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL THETA',\r\n value: '𝝷',\r\n codepoint: 120695,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL IOTA',\r\n value: '𝝸',\r\n codepoint: 120696,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA',\r\n value: '𝝹',\r\n codepoint: 120697,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA',\r\n value: '𝝺',\r\n codepoint: 120698,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL MU',\r\n value: '𝝻',\r\n codepoint: 120699,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL NU',\r\n value: '𝝼',\r\n codepoint: 120700,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL XI',\r\n value: '𝝽',\r\n codepoint: 120701,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON',\r\n value: '𝝾',\r\n codepoint: 120702,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL PI',\r\n value: '𝝿',\r\n codepoint: 120703,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL RHO',\r\n value: '𝞀',\r\n codepoint: 120704,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA',\r\n value: '𝞁',\r\n codepoint: 120705,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA',\r\n value: '𝞂',\r\n codepoint: 120706,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL TAU',\r\n value: '𝞃',\r\n codepoint: 120707,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON',\r\n value: '𝞄',\r\n codepoint: 120708,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL PHI',\r\n value: '𝞅',\r\n codepoint: 120709,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL CHI',\r\n value: '𝞆',\r\n codepoint: 120710,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL PSI',\r\n value: '𝞇',\r\n codepoint: 120711,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA',\r\n value: '𝞈',\r\n codepoint: 120712,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL',\r\n value: '𝞉',\r\n codepoint: 120713,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL',\r\n value: '𝞊',\r\n codepoint: 120714,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL',\r\n value: '𝞋',\r\n codepoint: 120715,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL',\r\n value: '𝞌',\r\n codepoint: 120716,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL',\r\n value: '𝞍',\r\n codepoint: 120717,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL',\r\n value: '𝞎',\r\n codepoint: 120718,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD PI SYMBOL',\r\n value: '𝞏',\r\n codepoint: 120719,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA',\r\n value: '𝞐',\r\n codepoint: 120720,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA',\r\n value: '𝞑',\r\n codepoint: 120721,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA',\r\n value: '𝞒',\r\n codepoint: 120722,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA',\r\n value: '𝞓',\r\n codepoint: 120723,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON',\r\n value: '𝞔',\r\n codepoint: 120724,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA',\r\n value: '𝞕',\r\n codepoint: 120725,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA',\r\n value: '𝞖',\r\n codepoint: 120726,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA',\r\n value: '𝞗',\r\n codepoint: 120727,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA',\r\n value: '𝞘',\r\n codepoint: 120728,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA',\r\n value: '𝞙',\r\n codepoint: 120729,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA',\r\n value: '𝞚',\r\n codepoint: 120730,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU',\r\n value: '𝞛',\r\n codepoint: 120731,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU',\r\n value: '𝞜',\r\n codepoint: 120732,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI',\r\n value: '𝞝',\r\n codepoint: 120733,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON',\r\n value: '𝞞',\r\n codepoint: 120734,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI',\r\n value: '𝞟',\r\n codepoint: 120735,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO',\r\n value: '𝞠',\r\n codepoint: 120736,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL',\r\n value: '𝞡',\r\n codepoint: 120737,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA',\r\n value: '𝞢',\r\n codepoint: 120738,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU',\r\n value: '𝞣',\r\n codepoint: 120739,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON',\r\n value: '𝞤',\r\n codepoint: 120740,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI',\r\n value: '𝞥',\r\n codepoint: 120741,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI',\r\n value: '𝞦',\r\n codepoint: 120742,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI',\r\n value: '𝞧',\r\n codepoint: 120743,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA',\r\n value: '𝞨',\r\n codepoint: 120744,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA',\r\n value: '𝞩',\r\n codepoint: 120745,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA',\r\n value: '𝞪',\r\n codepoint: 120746,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA',\r\n value: '𝞫',\r\n codepoint: 120747,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA',\r\n value: '𝞬',\r\n codepoint: 120748,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA',\r\n value: '𝞭',\r\n codepoint: 120749,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON',\r\n value: '𝞮',\r\n codepoint: 120750,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA',\r\n value: '𝞯',\r\n codepoint: 120751,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA',\r\n value: '𝞰',\r\n codepoint: 120752,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA',\r\n value: '𝞱',\r\n codepoint: 120753,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA',\r\n value: '𝞲',\r\n codepoint: 120754,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA',\r\n value: '𝞳',\r\n codepoint: 120755,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA',\r\n value: '𝞴',\r\n codepoint: 120756,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU',\r\n value: '𝞵',\r\n codepoint: 120757,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU',\r\n value: '𝞶',\r\n codepoint: 120758,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI',\r\n value: '𝞷',\r\n codepoint: 120759,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON',\r\n value: '𝞸',\r\n codepoint: 120760,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI',\r\n value: '𝞹',\r\n codepoint: 120761,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO',\r\n value: '𝞺',\r\n codepoint: 120762,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA',\r\n value: '𝞻',\r\n codepoint: 120763,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA',\r\n value: '𝞼',\r\n codepoint: 120764,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU',\r\n value: '𝞽',\r\n codepoint: 120765,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON',\r\n value: '𝞾',\r\n codepoint: 120766,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI',\r\n value: '𝞿',\r\n codepoint: 120767,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI',\r\n value: '𝟀',\r\n codepoint: 120768,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI',\r\n value: '𝟁',\r\n codepoint: 120769,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA',\r\n value: '𝟂',\r\n codepoint: 120770,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL',\r\n value: '𝟃',\r\n codepoint: 120771,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL',\r\n value: '𝟄',\r\n codepoint: 120772,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL',\r\n value: '𝟅',\r\n codepoint: 120773,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL',\r\n value: '𝟆',\r\n codepoint: 120774,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL',\r\n value: '𝟇',\r\n codepoint: 120775,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL',\r\n value: '𝟈',\r\n codepoint: 120776,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL',\r\n value: '𝟉',\r\n codepoint: 120777,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT ZERO',\r\n value: '𝟎',\r\n codepoint: 120782,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT ONE',\r\n value: '𝟏',\r\n codepoint: 120783,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT TWO',\r\n value: '𝟐',\r\n codepoint: 120784,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT THREE',\r\n value: '𝟑',\r\n codepoint: 120785,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT FOUR',\r\n value: '𝟒',\r\n codepoint: 120786,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT FIVE',\r\n value: '𝟓',\r\n codepoint: 120787,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT SIX',\r\n value: '𝟔',\r\n codepoint: 120788,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT SEVEN',\r\n value: '𝟕',\r\n codepoint: 120789,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT EIGHT',\r\n value: '𝟖',\r\n codepoint: 120790,\r\n },\r\n {\r\n name: 'MATHEMATICAL BOLD DIGIT NINE',\r\n value: '𝟗',\r\n codepoint: 120791,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO',\r\n value: '𝟘',\r\n codepoint: 120792,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT ONE',\r\n value: '𝟙',\r\n codepoint: 120793,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT TWO',\r\n value: '𝟚',\r\n codepoint: 120794,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT THREE',\r\n value: '𝟛',\r\n codepoint: 120795,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR',\r\n value: '𝟜',\r\n codepoint: 120796,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE',\r\n value: '𝟝',\r\n codepoint: 120797,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT SIX',\r\n value: '𝟞',\r\n codepoint: 120798,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN',\r\n value: '𝟟',\r\n codepoint: 120799,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT',\r\n value: '𝟠',\r\n codepoint: 120800,\r\n },\r\n {\r\n name: 'MATHEMATICAL DOUBLE-STRUCK DIGIT NINE',\r\n value: '𝟡',\r\n codepoint: 120801,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT ZERO',\r\n value: '𝟢',\r\n codepoint: 120802,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT ONE',\r\n value: '𝟣',\r\n codepoint: 120803,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT TWO',\r\n value: '𝟤',\r\n codepoint: 120804,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT THREE',\r\n value: '𝟥',\r\n codepoint: 120805,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT FOUR',\r\n value: '𝟦',\r\n codepoint: 120806,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT FIVE',\r\n value: '𝟧',\r\n codepoint: 120807,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT SIX',\r\n value: '𝟨',\r\n codepoint: 120808,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT SEVEN',\r\n value: '𝟩',\r\n codepoint: 120809,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT EIGHT',\r\n value: '𝟪',\r\n codepoint: 120810,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF DIGIT NINE',\r\n value: '𝟫',\r\n codepoint: 120811,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO',\r\n value: '𝟬',\r\n codepoint: 120812,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT ONE',\r\n value: '𝟭',\r\n codepoint: 120813,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT TWO',\r\n value: '𝟮',\r\n codepoint: 120814,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT THREE',\r\n value: '𝟯',\r\n codepoint: 120815,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR',\r\n value: '𝟰',\r\n codepoint: 120816,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE',\r\n value: '𝟱',\r\n codepoint: 120817,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT SIX',\r\n value: '𝟲',\r\n codepoint: 120818,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN',\r\n value: '𝟳',\r\n codepoint: 120819,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT',\r\n value: '𝟴',\r\n codepoint: 120820,\r\n },\r\n {\r\n name: 'MATHEMATICAL SANS-SERIF BOLD DIGIT NINE',\r\n value: '𝟵',\r\n codepoint: 120821,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT ZERO',\r\n value: '𝟶',\r\n codepoint: 120822,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT ONE',\r\n value: '𝟷',\r\n codepoint: 120823,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT TWO',\r\n value: '𝟸',\r\n codepoint: 120824,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT THREE',\r\n value: '𝟹',\r\n codepoint: 120825,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT FOUR',\r\n value: '𝟺',\r\n codepoint: 120826,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT FIVE',\r\n value: '𝟻',\r\n codepoint: 120827,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT SIX',\r\n value: '𝟼',\r\n codepoint: 120828,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT SEVEN',\r\n value: '𝟽',\r\n codepoint: 120829,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT EIGHT',\r\n value: '𝟾',\r\n codepoint: 120830,\r\n },\r\n {\r\n name: 'MATHEMATICAL MONOSPACE DIGIT NINE',\r\n value: '𝟿',\r\n codepoint: 120831,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Punctuation',\r\n symbols: [\r\n {\r\n name: 'HYPHEN',\r\n value: '‐',\r\n codepoint: 8208,\r\n },\r\n {\r\n name: 'NON-BREAKING HYPHEN',\r\n value: '‑',\r\n codepoint: 8209,\r\n },\r\n {\r\n name: 'FIGURE DASH',\r\n value: '‒',\r\n codepoint: 8210,\r\n },\r\n {\r\n name: 'EN DASH',\r\n value: '–',\r\n codepoint: 8211,\r\n },\r\n {\r\n name: 'EM DASH',\r\n value: '—',\r\n codepoint: 8212,\r\n },\r\n {\r\n name: 'HORIZONTAL BAR',\r\n value: '―',\r\n codepoint: 8213,\r\n },\r\n {\r\n name: 'DOUBLE VERTICAL LINE',\r\n value: '‖',\r\n codepoint: 8214,\r\n },\r\n {\r\n name: 'DOUBLE LOW LINE',\r\n value: '‗',\r\n codepoint: 8215,\r\n },\r\n {\r\n name: 'LEFT SINGLE QUOTATION MARK',\r\n value: '‘',\r\n codepoint: 8216,\r\n },\r\n {\r\n name: 'RIGHT SINGLE QUOTATION MARK',\r\n value: '’',\r\n codepoint: 8217,\r\n },\r\n {\r\n name: 'SINGLE LOW-9 QUOTATION MARK',\r\n value: '‚',\r\n codepoint: 8218,\r\n },\r\n {\r\n name: 'SINGLE HIGH-REVERSED-9 QUOTATION MARK',\r\n value: '‛',\r\n codepoint: 8219,\r\n },\r\n {\r\n name: 'LEFT DOUBLE QUOTATION MARK',\r\n value: '“',\r\n codepoint: 8220,\r\n },\r\n {\r\n name: 'RIGHT DOUBLE QUOTATION MARK',\r\n value: '”',\r\n codepoint: 8221,\r\n },\r\n {\r\n name: 'DOUBLE LOW-9 QUOTATION MARK',\r\n value: '„',\r\n codepoint: 8222,\r\n },\r\n {\r\n name: 'DOUBLE HIGH-REVERSED-9 QUOTATION MARK',\r\n value: '‟',\r\n codepoint: 8223,\r\n },\r\n {\r\n name: 'DAGGER',\r\n value: '†',\r\n codepoint: 8224,\r\n },\r\n {\r\n name: 'DOUBLE DAGGER',\r\n value: '‡',\r\n codepoint: 8225,\r\n },\r\n {\r\n name: 'BULLET',\r\n value: '•',\r\n codepoint: 8226,\r\n },\r\n {\r\n name: 'TRIANGULAR BULLET',\r\n value: '‣',\r\n codepoint: 8227,\r\n },\r\n {\r\n name: 'ONE DOT LEADER',\r\n value: '․',\r\n codepoint: 8228,\r\n },\r\n {\r\n name: 'TWO DOT LEADER',\r\n value: '‥',\r\n codepoint: 8229,\r\n },\r\n {\r\n name: 'HORIZONTAL ELLIPSIS',\r\n value: '…',\r\n codepoint: 8230,\r\n },\r\n {\r\n name: 'HYPHENATION POINT',\r\n value: '‧',\r\n codepoint: 8231,\r\n },\r\n {\r\n name: 'NARROW NO-BREAK SPACE',\r\n value: ' ',\r\n codepoint: 8239,\r\n },\r\n {\r\n name: 'PER MILLE SIGN',\r\n value: '‰',\r\n codepoint: 8240,\r\n },\r\n {\r\n name: 'PER TEN THOUSAND SIGN',\r\n value: '‱',\r\n codepoint: 8241,\r\n },\r\n {\r\n name: 'PRIME',\r\n value: '′',\r\n codepoint: 8242,\r\n },\r\n {\r\n name: 'DOUBLE PRIME',\r\n value: '″',\r\n codepoint: 8243,\r\n },\r\n {\r\n name: 'TRIPLE PRIME',\r\n value: '‴',\r\n codepoint: 8244,\r\n },\r\n {\r\n name: 'REVERSED PRIME',\r\n value: '‵',\r\n codepoint: 8245,\r\n },\r\n {\r\n name: 'REVERSED DOUBLE PRIME',\r\n value: '‶',\r\n codepoint: 8246,\r\n },\r\n {\r\n name: 'REVERSED TRIPLE PRIME',\r\n value: '‷',\r\n codepoint: 8247,\r\n },\r\n {\r\n name: 'CARET',\r\n value: '‸',\r\n codepoint: 8248,\r\n },\r\n {\r\n name: 'SINGLE LEFT-POINTING ANGLE QUOTATION MARK',\r\n value: '‹',\r\n codepoint: 8249,\r\n },\r\n {\r\n name: 'SINGLE RIGHT-POINTING ANGLE QUOTATION MARK',\r\n value: '›',\r\n codepoint: 8250,\r\n },\r\n {\r\n name: 'REFERENCE MARK',\r\n value: '※',\r\n codepoint: 8251,\r\n },\r\n {\r\n name: 'INTERROBANG',\r\n value: '‽',\r\n codepoint: 8253,\r\n },\r\n {\r\n name: 'OVERLINE',\r\n value: '‾',\r\n codepoint: 8254,\r\n },\r\n {\r\n name: 'UNDERTIE',\r\n value: '‿',\r\n codepoint: 8255,\r\n },\r\n {\r\n name: 'CHARACTER TIE',\r\n value: '⁀',\r\n codepoint: 8256,\r\n },\r\n {\r\n name: 'CARET INSERTION POINT',\r\n value: '⁁',\r\n codepoint: 8257,\r\n },\r\n {\r\n name: 'ASTERISM',\r\n value: '⁂',\r\n codepoint: 8258,\r\n },\r\n {\r\n name: 'HYPHEN BULLET',\r\n value: '⁃',\r\n codepoint: 8259,\r\n },\r\n {\r\n name: 'FRACTION SLASH',\r\n value: '⁄',\r\n codepoint: 8260,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET WITH QUILL',\r\n value: '⁅',\r\n codepoint: 8261,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET WITH QUILL',\r\n value: '⁆',\r\n codepoint: 8262,\r\n },\r\n {\r\n name: 'DOUBLE QUESTION MARK',\r\n value: '⁇',\r\n codepoint: 8263,\r\n },\r\n {\r\n name: 'QUESTION EXCLAMATION MARK',\r\n value: '⁈',\r\n codepoint: 8264,\r\n },\r\n {\r\n name: 'TIRONIAN SIGN ET',\r\n value: '⁊',\r\n codepoint: 8266,\r\n },\r\n {\r\n name: 'REVERSED PILCROW SIGN',\r\n value: '⁋',\r\n codepoint: 8267,\r\n },\r\n {\r\n name: 'BLACK LEFTWARDS BULLET',\r\n value: '⁌',\r\n codepoint: 8268,\r\n },\r\n {\r\n name: 'BLACK RIGHTWARDS BULLET',\r\n value: '⁍',\r\n codepoint: 8269,\r\n },\r\n {\r\n name: 'LOW ASTERISK',\r\n value: '⁎',\r\n codepoint: 8270,\r\n },\r\n {\r\n name: 'REVERSED SEMICOLON',\r\n value: '⁏',\r\n codepoint: 8271,\r\n },\r\n {\r\n name: 'CLOSE UP',\r\n value: '⁐',\r\n codepoint: 8272,\r\n },\r\n {\r\n name: 'TWO ASTERISKS ALIGNED VERTICALLY',\r\n value: '⁑',\r\n codepoint: 8273,\r\n },\r\n {\r\n name: 'COMMERCIAL MINUS SIGN',\r\n value: '⁒',\r\n codepoint: 8274,\r\n },\r\n {\r\n name: 'SWUNG DASH',\r\n value: '⁓',\r\n codepoint: 8275,\r\n },\r\n {\r\n name: 'INVERTED UNDERTIE',\r\n value: '⁔',\r\n codepoint: 8276,\r\n },\r\n {\r\n name: 'FLOWER PUNCTUATION MARK',\r\n value: '⁕',\r\n codepoint: 8277,\r\n },\r\n {\r\n name: 'THREE DOT PUNCTUATION',\r\n value: '⁖',\r\n codepoint: 8278,\r\n },\r\n {\r\n name: 'QUADRUPLE PRIME',\r\n value: '⁗',\r\n codepoint: 8279,\r\n },\r\n {\r\n name: 'FOUR DOT PUNCTUATION',\r\n value: '⁘',\r\n codepoint: 8280,\r\n },\r\n {\r\n name: 'FIVE DOT PUNCTUATION',\r\n value: '⁙',\r\n codepoint: 8281,\r\n },\r\n {\r\n name: 'TWO DOT PUNCTUATION',\r\n value: '⁚',\r\n codepoint: 8282,\r\n },\r\n {\r\n name: 'FOUR DOT MARK',\r\n value: '⁛',\r\n codepoint: 8283,\r\n },\r\n {\r\n name: 'DOTTED CROSS',\r\n value: '⁜',\r\n codepoint: 8284,\r\n },\r\n {\r\n name: 'TRICOLON',\r\n value: '⁝',\r\n codepoint: 8285,\r\n },\r\n {\r\n name: 'VERTICAL FOUR DOTS',\r\n value: '⁞',\r\n codepoint: 8286,\r\n },\r\n {\r\n name: 'MEDIUM MATHEMATICAL SPACE',\r\n value: ' ',\r\n codepoint: 8287,\r\n },\r\n {\r\n name: 'RIGHT ANGLE SUBSTITUTION MARKER',\r\n value: '⸀',\r\n codepoint: 11776,\r\n },\r\n {\r\n name: 'RIGHT ANGLE DOTTED SUBSTITUTION MARKER',\r\n value: '⸁',\r\n codepoint: 11777,\r\n },\r\n {\r\n name: 'LEFT SUBSTITUTION BRACKET',\r\n value: '⸂',\r\n codepoint: 11778,\r\n },\r\n {\r\n name: 'RIGHT SUBSTITUTION BRACKET',\r\n value: '⸃',\r\n codepoint: 11779,\r\n },\r\n {\r\n name: 'LEFT DOTTED SUBSTITUTION BRACKET',\r\n value: '⸄',\r\n codepoint: 11780,\r\n },\r\n {\r\n name: 'RIGHT DOTTED SUBSTITUTION BRACKET',\r\n value: '⸅',\r\n codepoint: 11781,\r\n },\r\n {\r\n name: 'RAISED INTERPOLATION MARKER',\r\n value: '⸆',\r\n codepoint: 11782,\r\n },\r\n {\r\n name: 'RAISED DOTTED INTERPOLATION MARKER',\r\n value: '⸇',\r\n codepoint: 11783,\r\n },\r\n {\r\n name: 'DOTTED TRANSPOSITION MARKER',\r\n value: '⸈',\r\n codepoint: 11784,\r\n },\r\n {\r\n name: 'LEFT TRANSPOSITION BRACKET',\r\n value: '⸉',\r\n codepoint: 11785,\r\n },\r\n {\r\n name: 'RIGHT TRANSPOSITION BRACKET',\r\n value: '⸊',\r\n codepoint: 11786,\r\n },\r\n {\r\n name: 'RAISED SQUARE',\r\n value: '⸋',\r\n codepoint: 11787,\r\n },\r\n {\r\n name: 'LEFT RAISED OMISSION BRACKET',\r\n value: '⸌',\r\n codepoint: 11788,\r\n },\r\n {\r\n name: 'RIGHT RAISED OMISSION BRACKET',\r\n value: '⸍',\r\n codepoint: 11789,\r\n },\r\n {\r\n name: 'EDITORIAL CORONIS',\r\n value: '⸎',\r\n codepoint: 11790,\r\n },\r\n {\r\n name: 'PARAGRAPHOS',\r\n value: '⸏',\r\n codepoint: 11791,\r\n },\r\n {\r\n name: 'FORKED PARAGRAPHOS',\r\n value: '⸐',\r\n codepoint: 11792,\r\n },\r\n {\r\n name: 'REVERSED FORKED PARAGRAPHOS',\r\n value: '⸑',\r\n codepoint: 11793,\r\n },\r\n {\r\n name: 'HYPODIASTOLE',\r\n value: '⸒',\r\n codepoint: 11794,\r\n },\r\n {\r\n name: 'DOTTED OBELOS',\r\n value: '⸓',\r\n codepoint: 11795,\r\n },\r\n {\r\n name: 'DOWNWARDS ANCORA',\r\n value: '⸔',\r\n codepoint: 11796,\r\n },\r\n {\r\n name: 'UPWARDS ANCORA',\r\n value: '⸕',\r\n codepoint: 11797,\r\n },\r\n {\r\n name: 'DOTTED RIGHT-POINTING ANGLE',\r\n value: '⸖',\r\n codepoint: 11798,\r\n },\r\n {\r\n name: 'DOUBLE OBLIQUE HYPHEN',\r\n value: '⸗',\r\n codepoint: 11799,\r\n },\r\n {\r\n name: 'INVERTED INTERROBANG',\r\n value: '⸘',\r\n codepoint: 11800,\r\n },\r\n {\r\n name: 'HYPHEN WITH DIAERESIS',\r\n value: '⸚',\r\n codepoint: 11802,\r\n },\r\n {\r\n name: 'TILDE WITH RING ABOVE',\r\n value: '⸛',\r\n codepoint: 11803,\r\n },\r\n {\r\n name: 'LEFT LOW PARAPHRASE BRACKET',\r\n value: '⸜',\r\n codepoint: 11804,\r\n },\r\n {\r\n name: 'RIGHT LOW PARAPHRASE BRACKET',\r\n value: '⸝',\r\n codepoint: 11805,\r\n },\r\n {\r\n name: 'TILDE WITH DOT ABOVE',\r\n value: '⸞',\r\n codepoint: 11806,\r\n },\r\n {\r\n name: 'TILDE WITH DOT BELOW',\r\n value: '⸟',\r\n codepoint: 11807,\r\n },\r\n {\r\n name: 'LEFT VERTICAL BAR WITH QUILL',\r\n value: '⸠',\r\n codepoint: 11808,\r\n },\r\n {\r\n name: 'RIGHT VERTICAL BAR WITH QUILL',\r\n value: '⸡',\r\n codepoint: 11809,\r\n },\r\n {\r\n name: 'TOP LEFT HALF BRACKET',\r\n value: '⸢',\r\n codepoint: 11810,\r\n },\r\n {\r\n name: 'TOP RIGHT HALF BRACKET',\r\n value: '⸣',\r\n codepoint: 11811,\r\n },\r\n {\r\n name: 'BOTTOM LEFT HALF BRACKET',\r\n value: '⸤',\r\n codepoint: 11812,\r\n },\r\n {\r\n name: 'BOTTOM RIGHT HALF BRACKET',\r\n value: '⸥',\r\n codepoint: 11813,\r\n },\r\n {\r\n name: 'LEFT SIDEWAYS U BRACKET',\r\n value: '⸦',\r\n codepoint: 11814,\r\n },\r\n {\r\n name: 'RIGHT SIDEWAYS U BRACKET',\r\n value: '⸧',\r\n codepoint: 11815,\r\n },\r\n {\r\n name: 'LEFT DOUBLE PARENTHESIS',\r\n value: '⸨',\r\n codepoint: 11816,\r\n },\r\n {\r\n name: 'RIGHT DOUBLE PARENTHESIS',\r\n value: '⸩',\r\n codepoint: 11817,\r\n },\r\n {\r\n name: 'TWO DOTS OVER ONE DOT PUNCTUATION',\r\n value: '⸪',\r\n codepoint: 11818,\r\n },\r\n {\r\n name: 'ONE DOT OVER TWO DOTS PUNCTUATION',\r\n value: '⸫',\r\n codepoint: 11819,\r\n },\r\n {\r\n name: 'SQUARED FOUR DOT PUNCTUATION',\r\n value: '⸬',\r\n codepoint: 11820,\r\n },\r\n {\r\n name: 'FIVE DOT MARK',\r\n value: '⸭',\r\n codepoint: 11821,\r\n },\r\n {\r\n name: 'REVERSED QUESTION MARK',\r\n value: '⸮',\r\n codepoint: 11822,\r\n },\r\n {\r\n name: 'VERTICAL TILDE',\r\n value: 'ⸯ',\r\n codepoint: 11823,\r\n },\r\n {\r\n name: 'RING POINT',\r\n value: '⸰',\r\n codepoint: 11824,\r\n },\r\n {\r\n name: 'WORD SEPARATOR MIDDLE DOT',\r\n value: '⸱',\r\n codepoint: 11825,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Technical',\r\n symbols: [\r\n {\r\n name: 'DIAMETER SIGN',\r\n value: '⌀',\r\n codepoint: 8960,\r\n },\r\n {\r\n name: 'ELECTRIC ARROW',\r\n value: '⌁',\r\n codepoint: 8961,\r\n },\r\n {\r\n name: 'HOUSE',\r\n value: '⌂',\r\n codepoint: 8962,\r\n },\r\n {\r\n name: 'UP ARROWHEAD',\r\n value: '⌃',\r\n codepoint: 8963,\r\n },\r\n {\r\n name: 'DOWN ARROWHEAD',\r\n value: '⌄',\r\n codepoint: 8964,\r\n },\r\n {\r\n name: 'PROJECTIVE',\r\n value: '⌅',\r\n codepoint: 8965,\r\n },\r\n {\r\n name: 'PERSPECTIVE',\r\n value: '⌆',\r\n codepoint: 8966,\r\n },\r\n {\r\n name: 'WAVY LINE',\r\n value: '⌇',\r\n codepoint: 8967,\r\n },\r\n {\r\n name: 'LEFT CEILING',\r\n value: '⌈',\r\n codepoint: 8968,\r\n },\r\n {\r\n name: 'RIGHT CEILING',\r\n value: '⌉',\r\n codepoint: 8969,\r\n },\r\n {\r\n name: 'LEFT FLOOR',\r\n value: '⌊',\r\n codepoint: 8970,\r\n },\r\n {\r\n name: 'RIGHT FLOOR',\r\n value: '⌋',\r\n codepoint: 8971,\r\n },\r\n {\r\n name: 'BOTTOM RIGHT CROP',\r\n value: '⌌',\r\n codepoint: 8972,\r\n },\r\n {\r\n name: 'BOTTOM LEFT CROP',\r\n value: '⌍',\r\n codepoint: 8973,\r\n },\r\n {\r\n name: 'TOP RIGHT CROP',\r\n value: '⌎',\r\n codepoint: 8974,\r\n },\r\n {\r\n name: 'TOP LEFT CROP',\r\n value: '⌏',\r\n codepoint: 8975,\r\n },\r\n {\r\n name: 'REVERSED NOT SIGN',\r\n value: '⌐',\r\n codepoint: 8976,\r\n },\r\n {\r\n name: 'SQUARE LOZENGE',\r\n value: '⌑',\r\n codepoint: 8977,\r\n },\r\n {\r\n name: 'ARC',\r\n value: '⌒',\r\n codepoint: 8978,\r\n },\r\n {\r\n name: 'SEGMENT',\r\n value: '⌓',\r\n codepoint: 8979,\r\n },\r\n {\r\n name: 'SECTOR',\r\n value: '⌔',\r\n codepoint: 8980,\r\n },\r\n {\r\n name: 'TELEPHONE RECORDER',\r\n value: '⌕',\r\n codepoint: 8981,\r\n },\r\n {\r\n name: 'POSITION INDICATOR',\r\n value: '⌖',\r\n codepoint: 8982,\r\n },\r\n {\r\n name: 'VIEWDATA SQUARE',\r\n value: '⌗',\r\n codepoint: 8983,\r\n },\r\n {\r\n name: 'PLACE OF INTEREST SIGN',\r\n value: '⌘',\r\n codepoint: 8984,\r\n },\r\n {\r\n name: 'TURNED NOT SIGN',\r\n value: '⌙',\r\n codepoint: 8985,\r\n },\r\n {\r\n name: 'TOP LEFT CORNER',\r\n value: '⌜',\r\n codepoint: 8988,\r\n },\r\n {\r\n name: 'TOP RIGHT CORNER',\r\n value: '⌝',\r\n codepoint: 8989,\r\n },\r\n {\r\n name: 'BOTTOM LEFT CORNER',\r\n value: '⌞',\r\n codepoint: 8990,\r\n },\r\n {\r\n name: 'BOTTOM RIGHT CORNER',\r\n value: '⌟',\r\n codepoint: 8991,\r\n },\r\n {\r\n name: 'TOP HALF INTEGRAL',\r\n value: '⌠',\r\n codepoint: 8992,\r\n },\r\n {\r\n name: 'BOTTOM HALF INTEGRAL',\r\n value: '⌡',\r\n codepoint: 8993,\r\n },\r\n {\r\n name: 'FROWN',\r\n value: '⌢',\r\n codepoint: 8994,\r\n },\r\n {\r\n name: 'SMILE',\r\n value: '⌣',\r\n codepoint: 8995,\r\n },\r\n {\r\n name: 'UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS',\r\n value: '⌤',\r\n codepoint: 8996,\r\n },\r\n {\r\n name: 'OPTION KEY',\r\n value: '⌥',\r\n codepoint: 8997,\r\n },\r\n {\r\n name: 'ERASE TO THE RIGHT',\r\n value: '⌦',\r\n codepoint: 8998,\r\n },\r\n {\r\n name: 'X IN A RECTANGLE BOX',\r\n value: '⌧',\r\n codepoint: 8999,\r\n },\r\n {\r\n name: 'LEFT-POINTING ANGLE BRACKET',\r\n value: '〈',\r\n codepoint: 9001,\r\n },\r\n {\r\n name: 'RIGHT-POINTING ANGLE BRACKET',\r\n value: '〉',\r\n codepoint: 9002,\r\n },\r\n {\r\n name: 'ERASE TO THE LEFT',\r\n value: '⌫',\r\n codepoint: 9003,\r\n },\r\n {\r\n name: 'BENZENE RING',\r\n value: '⌬',\r\n codepoint: 9004,\r\n },\r\n {\r\n name: 'CYLINDRICITY',\r\n value: '⌭',\r\n codepoint: 9005,\r\n },\r\n {\r\n name: 'ALL AROUND-PROFILE',\r\n value: '⌮',\r\n codepoint: 9006,\r\n },\r\n {\r\n name: 'SYMMETRY',\r\n value: '⌯',\r\n codepoint: 9007,\r\n },\r\n {\r\n name: 'TOTAL RUNOUT',\r\n value: '⌰',\r\n codepoint: 9008,\r\n },\r\n {\r\n name: 'DIMENSION ORIGIN',\r\n value: '⌱',\r\n codepoint: 9009,\r\n },\r\n {\r\n name: 'CONICAL TAPER',\r\n value: '⌲',\r\n codepoint: 9010,\r\n },\r\n {\r\n name: 'SLOPE',\r\n value: '⌳',\r\n codepoint: 9011,\r\n },\r\n {\r\n name: 'COUNTERBORE',\r\n value: '⌴',\r\n codepoint: 9012,\r\n },\r\n {\r\n name: 'COUNTERSINK',\r\n value: '⌵',\r\n codepoint: 9013,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL I-BEAM',\r\n value: '⌶',\r\n codepoint: 9014,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL SQUISH QUAD',\r\n value: '⌷',\r\n codepoint: 9015,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD EQUAL',\r\n value: '⌸',\r\n codepoint: 9016,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD DIVIDE',\r\n value: '⌹',\r\n codepoint: 9017,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD DIAMOND',\r\n value: '⌺',\r\n codepoint: 9018,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD JOT',\r\n value: '⌻',\r\n codepoint: 9019,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD CIRCLE',\r\n value: '⌼',\r\n codepoint: 9020,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL CIRCLE STILE',\r\n value: '⌽',\r\n codepoint: 9021,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL CIRCLE JOT',\r\n value: '⌾',\r\n codepoint: 9022,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL SLASH BAR',\r\n value: '⌿',\r\n codepoint: 9023,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL BACKSLASH BAR',\r\n value: '⍀',\r\n codepoint: 9024,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD SLASH',\r\n value: '⍁',\r\n codepoint: 9025,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD BACKSLASH',\r\n value: '⍂',\r\n codepoint: 9026,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD LESS-THAN',\r\n value: '⍃',\r\n codepoint: 9027,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD GREATER-THAN',\r\n value: '⍄',\r\n codepoint: 9028,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL LEFTWARDS VANE',\r\n value: '⍅',\r\n codepoint: 9029,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL RIGHTWARDS VANE',\r\n value: '⍆',\r\n codepoint: 9030,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW',\r\n value: '⍇',\r\n codepoint: 9031,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW',\r\n value: '⍈',\r\n codepoint: 9032,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH',\r\n value: '⍉',\r\n codepoint: 9033,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR',\r\n value: '⍊',\r\n codepoint: 9034,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DELTA STILE',\r\n value: '⍋',\r\n codepoint: 9035,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD DOWN CARET',\r\n value: '⍌',\r\n codepoint: 9036,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD DELTA',\r\n value: '⍍',\r\n codepoint: 9037,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DOWN TACK JOT',\r\n value: '⍎',\r\n codepoint: 9038,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL UPWARDS VANE',\r\n value: '⍏',\r\n codepoint: 9039,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW',\r\n value: '⍐',\r\n codepoint: 9040,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL UP TACK OVERBAR',\r\n value: '⍑',\r\n codepoint: 9041,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DEL STILE',\r\n value: '⍒',\r\n codepoint: 9042,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD UP CARET',\r\n value: '⍓',\r\n codepoint: 9043,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD DEL',\r\n value: '⍔',\r\n codepoint: 9044,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL UP TACK JOT',\r\n value: '⍕',\r\n codepoint: 9045,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DOWNWARDS VANE',\r\n value: '⍖',\r\n codepoint: 9046,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW',\r\n value: '⍗',\r\n codepoint: 9047,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUOTE UNDERBAR',\r\n value: '⍘',\r\n codepoint: 9048,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DELTA UNDERBAR',\r\n value: '⍙',\r\n codepoint: 9049,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR',\r\n value: '⍚',\r\n codepoint: 9050,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL JOT UNDERBAR',\r\n value: '⍛',\r\n codepoint: 9051,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR',\r\n value: '⍜',\r\n codepoint: 9052,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL UP SHOE JOT',\r\n value: '⍝',\r\n codepoint: 9053,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUOTE QUAD',\r\n value: '⍞',\r\n codepoint: 9054,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL CIRCLE STAR',\r\n value: '⍟',\r\n codepoint: 9055,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD COLON',\r\n value: '⍠',\r\n codepoint: 9056,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL UP TACK DIAERESIS',\r\n value: '⍡',\r\n codepoint: 9057,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DEL DIAERESIS',\r\n value: '⍢',\r\n codepoint: 9058,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL STAR DIAERESIS',\r\n value: '⍣',\r\n codepoint: 9059,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL JOT DIAERESIS',\r\n value: '⍤',\r\n codepoint: 9060,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS',\r\n value: '⍥',\r\n codepoint: 9061,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DOWN SHOE STILE',\r\n value: '⍦',\r\n codepoint: 9062,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL LEFT SHOE STILE',\r\n value: '⍧',\r\n codepoint: 9063,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL TILDE DIAERESIS',\r\n value: '⍨',\r\n codepoint: 9064,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS',\r\n value: '⍩',\r\n codepoint: 9065,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL COMMA BAR',\r\n value: '⍪',\r\n codepoint: 9066,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DEL TILDE',\r\n value: '⍫',\r\n codepoint: 9067,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL ZILDE',\r\n value: '⍬',\r\n codepoint: 9068,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL STILE TILDE',\r\n value: '⍭',\r\n codepoint: 9069,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR',\r\n value: '⍮',\r\n codepoint: 9070,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD NOT EQUAL',\r\n value: '⍯',\r\n codepoint: 9071,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD QUESTION',\r\n value: '⍰',\r\n codepoint: 9072,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL DOWN CARET TILDE',\r\n value: '⍱',\r\n codepoint: 9073,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL UP CARET TILDE',\r\n value: '⍲',\r\n codepoint: 9074,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL IOTA',\r\n value: '⍳',\r\n codepoint: 9075,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL RHO',\r\n value: '⍴',\r\n codepoint: 9076,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL OMEGA',\r\n value: '⍵',\r\n codepoint: 9077,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL ALPHA UNDERBAR',\r\n value: '⍶',\r\n codepoint: 9078,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL EPSILON UNDERBAR',\r\n value: '⍷',\r\n codepoint: 9079,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL IOTA UNDERBAR',\r\n value: '⍸',\r\n codepoint: 9080,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL OMEGA UNDERBAR',\r\n value: '⍹',\r\n codepoint: 9081,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL ALPHA',\r\n value: '⍺',\r\n codepoint: 9082,\r\n },\r\n {\r\n name: 'NOT CHECK MARK',\r\n value: '⍻',\r\n codepoint: 9083,\r\n },\r\n {\r\n name: 'RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW',\r\n value: '⍼',\r\n codepoint: 9084,\r\n },\r\n {\r\n name: 'SHOULDERED OPEN BOX',\r\n value: '⍽',\r\n codepoint: 9085,\r\n },\r\n {\r\n name: 'BELL SYMBOL',\r\n value: '⍾',\r\n codepoint: 9086,\r\n },\r\n {\r\n name: 'VERTICAL LINE WITH MIDDLE DOT',\r\n value: '⍿',\r\n codepoint: 9087,\r\n },\r\n {\r\n name: 'INSERTION SYMBOL',\r\n value: '⎀',\r\n codepoint: 9088,\r\n },\r\n {\r\n name: 'CONTINUOUS UNDERLINE SYMBOL',\r\n value: '⎁',\r\n codepoint: 9089,\r\n },\r\n {\r\n name: 'DISCONTINUOUS UNDERLINE SYMBOL',\r\n value: '⎂',\r\n codepoint: 9090,\r\n },\r\n {\r\n name: 'EMPHASIS SYMBOL',\r\n value: '⎃',\r\n codepoint: 9091,\r\n },\r\n {\r\n name: 'COMPOSITION SYMBOL',\r\n value: '⎄',\r\n codepoint: 9092,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH CENTRE VERTICAL LINE',\r\n value: '⎅',\r\n codepoint: 9093,\r\n },\r\n {\r\n name: 'ENTER SYMBOL',\r\n value: '⎆',\r\n codepoint: 9094,\r\n },\r\n {\r\n name: 'ALTERNATIVE KEY SYMBOL',\r\n value: '⎇',\r\n codepoint: 9095,\r\n },\r\n {\r\n name: 'HELM SYMBOL',\r\n value: '⎈',\r\n codepoint: 9096,\r\n },\r\n {\r\n name: 'CIRCLED HORIZONTAL BAR WITH NOTCH',\r\n value: '⎉',\r\n codepoint: 9097,\r\n },\r\n {\r\n name: 'CIRCLED TRIANGLE DOWN',\r\n value: '⎊',\r\n codepoint: 9098,\r\n },\r\n {\r\n name: 'BROKEN CIRCLE WITH NORTHWEST ARROW',\r\n value: '⎋',\r\n codepoint: 9099,\r\n },\r\n {\r\n name: 'UNDO SYMBOL',\r\n value: '⎌',\r\n codepoint: 9100,\r\n },\r\n {\r\n name: 'MONOSTABLE SYMBOL',\r\n value: '⎍',\r\n codepoint: 9101,\r\n },\r\n {\r\n name: 'HYSTERESIS SYMBOL',\r\n value: '⎎',\r\n codepoint: 9102,\r\n },\r\n {\r\n name: 'OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL',\r\n value: '⎏',\r\n codepoint: 9103,\r\n },\r\n {\r\n name: 'OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL',\r\n value: '⎐',\r\n codepoint: 9104,\r\n },\r\n {\r\n name: 'PASSIVE-PULL-DOWN-OUTPUT SYMBOL',\r\n value: '⎑',\r\n codepoint: 9105,\r\n },\r\n {\r\n name: 'PASSIVE-PULL-UP-OUTPUT SYMBOL',\r\n value: '⎒',\r\n codepoint: 9106,\r\n },\r\n {\r\n name: 'DIRECT CURRENT SYMBOL FORM TWO',\r\n value: '⎓',\r\n codepoint: 9107,\r\n },\r\n {\r\n name: 'SOFTWARE-FUNCTION SYMBOL',\r\n value: '⎔',\r\n codepoint: 9108,\r\n },\r\n {\r\n name: 'APL FUNCTIONAL SYMBOL QUAD',\r\n value: '⎕',\r\n codepoint: 9109,\r\n },\r\n {\r\n name: 'DECIMAL SEPARATOR KEY SYMBOL',\r\n value: '⎖',\r\n codepoint: 9110,\r\n },\r\n {\r\n name: 'PREVIOUS PAGE',\r\n value: '⎗',\r\n codepoint: 9111,\r\n },\r\n {\r\n name: 'NEXT PAGE',\r\n value: '⎘',\r\n codepoint: 9112,\r\n },\r\n {\r\n name: 'PRINT SCREEN SYMBOL',\r\n value: '⎙',\r\n codepoint: 9113,\r\n },\r\n {\r\n name: 'CLEAR SCREEN SYMBOL',\r\n value: '⎚',\r\n codepoint: 9114,\r\n },\r\n {\r\n name: 'LEFT PARENTHESIS UPPER HOOK',\r\n value: '⎛',\r\n codepoint: 9115,\r\n },\r\n {\r\n name: 'LEFT PARENTHESIS EXTENSION',\r\n value: '⎜',\r\n codepoint: 9116,\r\n },\r\n {\r\n name: 'LEFT PARENTHESIS LOWER HOOK',\r\n value: '⎝',\r\n codepoint: 9117,\r\n },\r\n {\r\n name: 'RIGHT PARENTHESIS UPPER HOOK',\r\n value: '⎞',\r\n codepoint: 9118,\r\n },\r\n {\r\n name: 'RIGHT PARENTHESIS EXTENSION',\r\n value: '⎟',\r\n codepoint: 9119,\r\n },\r\n {\r\n name: 'RIGHT PARENTHESIS LOWER HOOK',\r\n value: '⎠',\r\n codepoint: 9120,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET UPPER CORNER',\r\n value: '⎡',\r\n codepoint: 9121,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET EXTENSION',\r\n value: '⎢',\r\n codepoint: 9122,\r\n },\r\n {\r\n name: 'LEFT SQUARE BRACKET LOWER CORNER',\r\n value: '⎣',\r\n codepoint: 9123,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET UPPER CORNER',\r\n value: '⎤',\r\n codepoint: 9124,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET EXTENSION',\r\n value: '⎥',\r\n codepoint: 9125,\r\n },\r\n {\r\n name: 'RIGHT SQUARE BRACKET LOWER CORNER',\r\n value: '⎦',\r\n codepoint: 9126,\r\n },\r\n {\r\n name: 'LEFT CURLY BRACKET UPPER HOOK',\r\n value: '⎧',\r\n codepoint: 9127,\r\n },\r\n {\r\n name: 'LEFT CURLY BRACKET MIDDLE PIECE',\r\n value: '⎨',\r\n codepoint: 9128,\r\n },\r\n {\r\n name: 'LEFT CURLY BRACKET LOWER HOOK',\r\n value: '⎩',\r\n codepoint: 9129,\r\n },\r\n {\r\n name: 'CURLY BRACKET EXTENSION',\r\n value: '⎪',\r\n codepoint: 9130,\r\n },\r\n {\r\n name: 'RIGHT CURLY BRACKET UPPER HOOK',\r\n value: '⎫',\r\n codepoint: 9131,\r\n },\r\n {\r\n name: 'RIGHT CURLY BRACKET MIDDLE PIECE',\r\n value: '⎬',\r\n codepoint: 9132,\r\n },\r\n {\r\n name: 'RIGHT CURLY BRACKET LOWER HOOK',\r\n value: '⎭',\r\n codepoint: 9133,\r\n },\r\n {\r\n name: 'INTEGRAL EXTENSION',\r\n value: '⎮',\r\n codepoint: 9134,\r\n },\r\n {\r\n name: 'HORIZONTAL LINE EXTENSION',\r\n value: '⎯',\r\n codepoint: 9135,\r\n },\r\n {\r\n name: 'UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION',\r\n value: '⎰',\r\n codepoint: 9136,\r\n },\r\n {\r\n name: 'UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION',\r\n value: '⎱',\r\n codepoint: 9137,\r\n },\r\n {\r\n name: 'SUMMATION TOP',\r\n value: '⎲',\r\n codepoint: 9138,\r\n },\r\n {\r\n name: 'SUMMATION BOTTOM',\r\n value: '⎳',\r\n codepoint: 9139,\r\n },\r\n {\r\n name: 'TOP SQUARE BRACKET',\r\n value: '⎴',\r\n codepoint: 9140,\r\n },\r\n {\r\n name: 'BOTTOM SQUARE BRACKET',\r\n value: '⎵',\r\n codepoint: 9141,\r\n },\r\n {\r\n name: 'BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET',\r\n value: '⎶',\r\n codepoint: 9142,\r\n },\r\n {\r\n name: 'RADICAL SYMBOL BOTTOM',\r\n value: '⎷',\r\n codepoint: 9143,\r\n },\r\n {\r\n name: 'LEFT VERTICAL BOX LINE',\r\n value: '⎸',\r\n codepoint: 9144,\r\n },\r\n {\r\n name: 'RIGHT VERTICAL BOX LINE',\r\n value: '⎹',\r\n codepoint: 9145,\r\n },\r\n {\r\n name: 'HORIZONTAL SCAN LINE-1',\r\n value: '⎺',\r\n codepoint: 9146,\r\n },\r\n {\r\n name: 'HORIZONTAL SCAN LINE-3',\r\n value: '⎻',\r\n codepoint: 9147,\r\n },\r\n {\r\n name: 'HORIZONTAL SCAN LINE-7',\r\n value: '⎼',\r\n codepoint: 9148,\r\n },\r\n {\r\n name: 'HORIZONTAL SCAN LINE-9',\r\n value: '⎽',\r\n codepoint: 9149,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT',\r\n value: '⎾',\r\n codepoint: 9150,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT',\r\n value: '⎿',\r\n codepoint: 9151,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE',\r\n value: '⏀',\r\n codepoint: 9152,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE',\r\n value: '⏁',\r\n codepoint: 9153,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE',\r\n value: '⏂',\r\n codepoint: 9154,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE',\r\n value: '⏃',\r\n codepoint: 9155,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE',\r\n value: '⏄',\r\n codepoint: 9156,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE',\r\n value: '⏅',\r\n codepoint: 9157,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE',\r\n value: '⏆',\r\n codepoint: 9158,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE',\r\n value: '⏇',\r\n codepoint: 9159,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE',\r\n value: '⏈',\r\n codepoint: 9160,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL',\r\n value: '⏉',\r\n codepoint: 9161,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL',\r\n value: '⏊',\r\n codepoint: 9162,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT',\r\n value: '⏋',\r\n codepoint: 9163,\r\n },\r\n {\r\n name: 'DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT',\r\n value: '⏌',\r\n codepoint: 9164,\r\n },\r\n {\r\n name: 'SQUARE FOOT',\r\n value: '⏍',\r\n codepoint: 9165,\r\n },\r\n {\r\n name: 'RETURN SYMBOL',\r\n value: '⏎',\r\n codepoint: 9166,\r\n },\r\n {\r\n name: 'VERTICAL LINE EXTENSION',\r\n value: '⏐',\r\n codepoint: 9168,\r\n },\r\n {\r\n name: 'METRICAL BREVE',\r\n value: '⏑',\r\n codepoint: 9169,\r\n },\r\n {\r\n name: 'METRICAL LONG OVER SHORT',\r\n value: '⏒',\r\n codepoint: 9170,\r\n },\r\n {\r\n name: 'METRICAL SHORT OVER LONG',\r\n value: '⏓',\r\n codepoint: 9171,\r\n },\r\n {\r\n name: 'METRICAL LONG OVER TWO SHORTS',\r\n value: '⏔',\r\n codepoint: 9172,\r\n },\r\n {\r\n name: 'METRICAL TWO SHORTS OVER LONG',\r\n value: '⏕',\r\n codepoint: 9173,\r\n },\r\n {\r\n name: 'METRICAL TWO SHORTS JOINED',\r\n value: '⏖',\r\n codepoint: 9174,\r\n },\r\n {\r\n name: 'METRICAL TRISEME',\r\n value: '⏗',\r\n codepoint: 9175,\r\n },\r\n {\r\n name: 'METRICAL TETRASEME',\r\n value: '⏘',\r\n codepoint: 9176,\r\n },\r\n {\r\n name: 'METRICAL PENTASEME',\r\n value: '⏙',\r\n codepoint: 9177,\r\n },\r\n {\r\n name: 'EARTH GROUND',\r\n value: '⏚',\r\n codepoint: 9178,\r\n },\r\n {\r\n name: 'FUSE',\r\n value: '⏛',\r\n codepoint: 9179,\r\n },\r\n {\r\n name: 'TOP PARENTHESIS',\r\n value: '⏜',\r\n codepoint: 9180,\r\n },\r\n {\r\n name: 'BOTTOM PARENTHESIS',\r\n value: '⏝',\r\n codepoint: 9181,\r\n },\r\n {\r\n name: 'TOP CURLY BRACKET',\r\n value: '⏞',\r\n codepoint: 9182,\r\n },\r\n {\r\n name: 'BOTTOM CURLY BRACKET',\r\n value: '⏟',\r\n codepoint: 9183,\r\n },\r\n {\r\n name: 'TOP TORTOISE SHELL BRACKET',\r\n value: '⏠',\r\n codepoint: 9184,\r\n },\r\n {\r\n name: 'BOTTOM TORTOISE SHELL BRACKET',\r\n value: '⏡',\r\n codepoint: 9185,\r\n },\r\n {\r\n name: 'WHITE TRAPEZIUM',\r\n value: '⏢',\r\n codepoint: 9186,\r\n },\r\n {\r\n name: 'BENZENE RING WITH CIRCLE',\r\n value: '⏣',\r\n codepoint: 9187,\r\n },\r\n {\r\n name: 'STRAIGHTNESS',\r\n value: '⏤',\r\n codepoint: 9188,\r\n },\r\n {\r\n name: 'FLATNESS',\r\n value: '⏥',\r\n codepoint: 9189,\r\n },\r\n {\r\n name: 'AC CURRENT',\r\n value: '⏦',\r\n codepoint: 9190,\r\n },\r\n {\r\n name: 'ELECTRICAL INTERSECTION',\r\n value: '⏧',\r\n codepoint: 9191,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Arrows',\r\n symbols: [\r\n {\r\n name: 'UPWARDS QUADRUPLE ARROW',\r\n value: '⟰',\r\n codepoint: 10224,\r\n },\r\n {\r\n name: 'DOWNWARDS QUADRUPLE ARROW',\r\n value: '⟱',\r\n codepoint: 10225,\r\n },\r\n {\r\n name: 'ANTICLOCKWISE GAPPED CIRCLE ARROW',\r\n value: '⟲',\r\n codepoint: 10226,\r\n },\r\n {\r\n name: 'CLOCKWISE GAPPED CIRCLE ARROW',\r\n value: '⟳',\r\n codepoint: 10227,\r\n },\r\n {\r\n name: 'RIGHT ARROW WITH CIRCLED PLUS',\r\n value: '⟴',\r\n codepoint: 10228,\r\n },\r\n {\r\n name: 'LONG LEFTWARDS ARROW',\r\n value: '⟵',\r\n codepoint: 10229,\r\n },\r\n {\r\n name: 'LONG RIGHTWARDS ARROW',\r\n value: '⟶',\r\n codepoint: 10230,\r\n },\r\n {\r\n name: 'LONG LEFT RIGHT ARROW',\r\n value: '⟷',\r\n codepoint: 10231,\r\n },\r\n {\r\n name: 'LONG LEFTWARDS DOUBLE ARROW',\r\n value: '⟸',\r\n codepoint: 10232,\r\n },\r\n {\r\n name: 'LONG RIGHTWARDS DOUBLE ARROW',\r\n value: '⟹',\r\n codepoint: 10233,\r\n },\r\n {\r\n name: 'LONG LEFT RIGHT DOUBLE ARROW',\r\n value: '⟺',\r\n codepoint: 10234,\r\n },\r\n {\r\n name: 'LONG LEFTWARDS ARROW FROM BAR',\r\n value: '⟻',\r\n codepoint: 10235,\r\n },\r\n {\r\n name: 'LONG RIGHTWARDS ARROW FROM BAR',\r\n value: '⟼',\r\n codepoint: 10236,\r\n },\r\n {\r\n name: 'LONG LEFTWARDS DOUBLE ARROW FROM BAR',\r\n value: '⟽',\r\n codepoint: 10237,\r\n },\r\n {\r\n name: 'LONG RIGHTWARDS DOUBLE ARROW FROM BAR',\r\n value: '⟾',\r\n codepoint: 10238,\r\n },\r\n {\r\n name: 'LONG RIGHTWARDS SQUIGGLE ARROW',\r\n value: '⟿',\r\n codepoint: 10239,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE',\r\n value: '⤀',\r\n codepoint: 10496,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE',\r\n value: '⤁',\r\n codepoint: 10497,\r\n },\r\n {\r\n name: 'LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE',\r\n value: '⤂',\r\n codepoint: 10498,\r\n },\r\n {\r\n name: 'RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE',\r\n value: '⤃',\r\n codepoint: 10499,\r\n },\r\n {\r\n name: 'LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE',\r\n value: '⤄',\r\n codepoint: 10500,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED ARROW FROM BAR',\r\n value: '⤅',\r\n codepoint: 10501,\r\n },\r\n {\r\n name: 'LEFTWARDS DOUBLE ARROW FROM BAR',\r\n value: '⤆',\r\n codepoint: 10502,\r\n },\r\n {\r\n name: 'RIGHTWARDS DOUBLE ARROW FROM BAR',\r\n value: '⤇',\r\n codepoint: 10503,\r\n },\r\n {\r\n name: 'DOWNWARDS ARROW WITH HORIZONTAL STROKE',\r\n value: '⤈',\r\n codepoint: 10504,\r\n },\r\n {\r\n name: 'UPWARDS ARROW WITH HORIZONTAL STROKE',\r\n value: '⤉',\r\n codepoint: 10505,\r\n },\r\n {\r\n name: 'UPWARDS TRIPLE ARROW',\r\n value: '⤊',\r\n codepoint: 10506,\r\n },\r\n {\r\n name: 'DOWNWARDS TRIPLE ARROW',\r\n value: '⤋',\r\n codepoint: 10507,\r\n },\r\n {\r\n name: 'LEFTWARDS DOUBLE DASH ARROW',\r\n value: '⤌',\r\n codepoint: 10508,\r\n },\r\n {\r\n name: 'RIGHTWARDS DOUBLE DASH ARROW',\r\n value: '⤍',\r\n codepoint: 10509,\r\n },\r\n {\r\n name: 'LEFTWARDS TRIPLE DASH ARROW',\r\n value: '⤎',\r\n codepoint: 10510,\r\n },\r\n {\r\n name: 'RIGHTWARDS TRIPLE DASH ARROW',\r\n value: '⤏',\r\n codepoint: 10511,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW',\r\n value: '⤐',\r\n codepoint: 10512,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW WITH DOTTED STEM',\r\n value: '⤑',\r\n codepoint: 10513,\r\n },\r\n {\r\n name: 'UPWARDS ARROW TO BAR',\r\n value: '⤒',\r\n codepoint: 10514,\r\n },\r\n {\r\n name: 'DOWNWARDS ARROW TO BAR',\r\n value: '⤓',\r\n codepoint: 10515,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE',\r\n value: '⤔',\r\n codepoint: 10516,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE',\r\n value: '⤕',\r\n codepoint: 10517,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED ARROW WITH TAIL',\r\n value: '⤖',\r\n codepoint: 10518,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE',\r\n value: '⤗',\r\n codepoint: 10519,\r\n },\r\n {\r\n name: 'RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE',\r\n value: '⤘',\r\n codepoint: 10520,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW-TAIL',\r\n value: '⤙',\r\n codepoint: 10521,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW-TAIL',\r\n value: '⤚',\r\n codepoint: 10522,\r\n },\r\n {\r\n name: 'LEFTWARDS DOUBLE ARROW-TAIL',\r\n value: '⤛',\r\n codepoint: 10523,\r\n },\r\n {\r\n name: 'RIGHTWARDS DOUBLE ARROW-TAIL',\r\n value: '⤜',\r\n codepoint: 10524,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW TO BLACK DIAMOND',\r\n value: '⤝',\r\n codepoint: 10525,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW TO BLACK DIAMOND',\r\n value: '⤞',\r\n codepoint: 10526,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND',\r\n value: '⤟',\r\n codepoint: 10527,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND',\r\n value: '⤠',\r\n codepoint: 10528,\r\n },\r\n {\r\n name: 'NORTH WEST AND SOUTH EAST ARROW',\r\n value: '⤡',\r\n codepoint: 10529,\r\n },\r\n {\r\n name: 'NORTH EAST AND SOUTH WEST ARROW',\r\n value: '⤢',\r\n codepoint: 10530,\r\n },\r\n {\r\n name: 'NORTH WEST ARROW WITH HOOK',\r\n value: '⤣',\r\n codepoint: 10531,\r\n },\r\n {\r\n name: 'NORTH EAST ARROW WITH HOOK',\r\n value: '⤤',\r\n codepoint: 10532,\r\n },\r\n {\r\n name: 'SOUTH EAST ARROW WITH HOOK',\r\n value: '⤥',\r\n codepoint: 10533,\r\n },\r\n {\r\n name: 'SOUTH WEST ARROW WITH HOOK',\r\n value: '⤦',\r\n codepoint: 10534,\r\n },\r\n {\r\n name: 'NORTH WEST ARROW AND NORTH EAST ARROW',\r\n value: '⤧',\r\n codepoint: 10535,\r\n },\r\n {\r\n name: 'NORTH EAST ARROW AND SOUTH EAST ARROW',\r\n value: '⤨',\r\n codepoint: 10536,\r\n },\r\n {\r\n name: 'SOUTH EAST ARROW AND SOUTH WEST ARROW',\r\n value: '⤩',\r\n codepoint: 10537,\r\n },\r\n {\r\n name: 'SOUTH WEST ARROW AND NORTH WEST ARROW',\r\n value: '⤪',\r\n codepoint: 10538,\r\n },\r\n {\r\n name: 'RISING DIAGONAL CROSSING FALLING DIAGONAL',\r\n value: '⤫',\r\n codepoint: 10539,\r\n },\r\n {\r\n name: 'FALLING DIAGONAL CROSSING RISING DIAGONAL',\r\n value: '⤬',\r\n codepoint: 10540,\r\n },\r\n {\r\n name: 'SOUTH EAST ARROW CROSSING NORTH EAST ARROW',\r\n value: '⤭',\r\n codepoint: 10541,\r\n },\r\n {\r\n name: 'NORTH EAST ARROW CROSSING SOUTH EAST ARROW',\r\n value: '⤮',\r\n codepoint: 10542,\r\n },\r\n {\r\n name: 'FALLING DIAGONAL CROSSING NORTH EAST ARROW',\r\n value: '⤯',\r\n codepoint: 10543,\r\n },\r\n {\r\n name: 'RISING DIAGONAL CROSSING SOUTH EAST ARROW',\r\n value: '⤰',\r\n codepoint: 10544,\r\n },\r\n {\r\n name: 'NORTH EAST ARROW CROSSING NORTH WEST ARROW',\r\n value: '⤱',\r\n codepoint: 10545,\r\n },\r\n {\r\n name: 'NORTH WEST ARROW CROSSING NORTH EAST ARROW',\r\n value: '⤲',\r\n codepoint: 10546,\r\n },\r\n {\r\n name: 'WAVE ARROW POINTING DIRECTLY RIGHT',\r\n value: '⤳',\r\n codepoint: 10547,\r\n },\r\n {\r\n name: 'ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS',\r\n value: '⤶',\r\n codepoint: 10550,\r\n },\r\n {\r\n name: 'ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS',\r\n value: '⤷',\r\n codepoint: 10551,\r\n },\r\n {\r\n name: 'RIGHT-SIDE ARC CLOCKWISE ARROW',\r\n value: '⤸',\r\n codepoint: 10552,\r\n },\r\n {\r\n name: 'LEFT-SIDE ARC ANTICLOCKWISE ARROW',\r\n value: '⤹',\r\n codepoint: 10553,\r\n },\r\n {\r\n name: 'TOP ARC ANTICLOCKWISE ARROW',\r\n value: '⤺',\r\n codepoint: 10554,\r\n },\r\n {\r\n name: 'BOTTOM ARC ANTICLOCKWISE ARROW',\r\n value: '⤻',\r\n codepoint: 10555,\r\n },\r\n {\r\n name: 'TOP ARC CLOCKWISE ARROW WITH MINUS',\r\n value: '⤼',\r\n codepoint: 10556,\r\n },\r\n {\r\n name: 'TOP ARC ANTICLOCKWISE ARROW WITH PLUS',\r\n value: '⤽',\r\n codepoint: 10557,\r\n },\r\n {\r\n name: 'LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW',\r\n value: '⤾',\r\n codepoint: 10558,\r\n },\r\n {\r\n name: 'LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW',\r\n value: '⤿',\r\n codepoint: 10559,\r\n },\r\n {\r\n name: 'ANTICLOCKWISE CLOSED CIRCLE ARROW',\r\n value: '⥀',\r\n codepoint: 10560,\r\n },\r\n {\r\n name: 'CLOCKWISE CLOSED CIRCLE ARROW',\r\n value: '⥁',\r\n codepoint: 10561,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW',\r\n value: '⥂',\r\n codepoint: 10562,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW',\r\n value: '⥃',\r\n codepoint: 10563,\r\n },\r\n {\r\n name: 'SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW',\r\n value: '⥄',\r\n codepoint: 10564,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW WITH PLUS BELOW',\r\n value: '⥅',\r\n codepoint: 10565,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW WITH PLUS BELOW',\r\n value: '⥆',\r\n codepoint: 10566,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW THROUGH X',\r\n value: '⥇',\r\n codepoint: 10567,\r\n },\r\n {\r\n name: 'LEFT RIGHT ARROW THROUGH SMALL CIRCLE',\r\n value: '⥈',\r\n codepoint: 10568,\r\n },\r\n {\r\n name: 'UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE',\r\n value: '⥉',\r\n codepoint: 10569,\r\n },\r\n {\r\n name: 'LEFT BARB UP RIGHT BARB DOWN HARPOON',\r\n value: '⥊',\r\n codepoint: 10570,\r\n },\r\n {\r\n name: 'LEFT BARB DOWN RIGHT BARB UP HARPOON',\r\n value: '⥋',\r\n codepoint: 10571,\r\n },\r\n {\r\n name: 'UP BARB RIGHT DOWN BARB LEFT HARPOON',\r\n value: '⥌',\r\n codepoint: 10572,\r\n },\r\n {\r\n name: 'UP BARB LEFT DOWN BARB RIGHT HARPOON',\r\n value: '⥍',\r\n codepoint: 10573,\r\n },\r\n {\r\n name: 'LEFT BARB UP RIGHT BARB UP HARPOON',\r\n value: '⥎',\r\n codepoint: 10574,\r\n },\r\n {\r\n name: 'UP BARB RIGHT DOWN BARB RIGHT HARPOON',\r\n value: '⥏',\r\n codepoint: 10575,\r\n },\r\n {\r\n name: 'LEFT BARB DOWN RIGHT BARB DOWN HARPOON',\r\n value: '⥐',\r\n codepoint: 10576,\r\n },\r\n {\r\n name: 'UP BARB LEFT DOWN BARB LEFT HARPOON',\r\n value: '⥑',\r\n codepoint: 10577,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB UP TO BAR',\r\n value: '⥒',\r\n codepoint: 10578,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB UP TO BAR',\r\n value: '⥓',\r\n codepoint: 10579,\r\n },\r\n {\r\n name: 'UPWARDS HARPOON WITH BARB RIGHT TO BAR',\r\n value: '⥔',\r\n codepoint: 10580,\r\n },\r\n {\r\n name: 'DOWNWARDS HARPOON WITH BARB RIGHT TO BAR',\r\n value: '⥕',\r\n codepoint: 10581,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB DOWN TO BAR',\r\n value: '⥖',\r\n codepoint: 10582,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB DOWN TO BAR',\r\n value: '⥗',\r\n codepoint: 10583,\r\n },\r\n {\r\n name: 'UPWARDS HARPOON WITH BARB LEFT TO BAR',\r\n value: '⥘',\r\n codepoint: 10584,\r\n },\r\n {\r\n name: 'DOWNWARDS HARPOON WITH BARB LEFT TO BAR',\r\n value: '⥙',\r\n codepoint: 10585,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB UP FROM BAR',\r\n value: '⥚',\r\n codepoint: 10586,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB UP FROM BAR',\r\n value: '⥛',\r\n codepoint: 10587,\r\n },\r\n {\r\n name: 'UPWARDS HARPOON WITH BARB RIGHT FROM BAR',\r\n value: '⥜',\r\n codepoint: 10588,\r\n },\r\n {\r\n name: 'DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR',\r\n value: '⥝',\r\n codepoint: 10589,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB DOWN FROM BAR',\r\n value: '⥞',\r\n codepoint: 10590,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR',\r\n value: '⥟',\r\n codepoint: 10591,\r\n },\r\n {\r\n name: 'UPWARDS HARPOON WITH BARB LEFT FROM BAR',\r\n value: '⥠',\r\n codepoint: 10592,\r\n },\r\n {\r\n name: 'DOWNWARDS HARPOON WITH BARB LEFT FROM BAR',\r\n value: '⥡',\r\n codepoint: 10593,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN',\r\n value: '⥢',\r\n codepoint: 10594,\r\n },\r\n {\r\n name: 'UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT',\r\n value: '⥣',\r\n codepoint: 10595,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN',\r\n value: '⥤',\r\n codepoint: 10596,\r\n },\r\n {\r\n name: 'DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT',\r\n value: '⥥',\r\n codepoint: 10597,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP',\r\n value: '⥦',\r\n codepoint: 10598,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN',\r\n value: '⥧',\r\n codepoint: 10599,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP',\r\n value: '⥨',\r\n codepoint: 10600,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN',\r\n value: '⥩',\r\n codepoint: 10601,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH',\r\n value: '⥪',\r\n codepoint: 10602,\r\n },\r\n {\r\n name: 'LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH',\r\n value: '⥫',\r\n codepoint: 10603,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH',\r\n value: '⥬',\r\n codepoint: 10604,\r\n },\r\n {\r\n name: 'RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH',\r\n value: '⥭',\r\n codepoint: 10605,\r\n },\r\n {\r\n name: 'UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT',\r\n value: '⥮',\r\n codepoint: 10606,\r\n },\r\n {\r\n name: 'DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT',\r\n value: '⥯',\r\n codepoint: 10607,\r\n },\r\n {\r\n name: 'RIGHT DOUBLE ARROW WITH ROUNDED HEAD',\r\n value: '⥰',\r\n codepoint: 10608,\r\n },\r\n {\r\n name: 'EQUALS SIGN ABOVE RIGHTWARDS ARROW',\r\n value: '⥱',\r\n codepoint: 10609,\r\n },\r\n {\r\n name: 'TILDE OPERATOR ABOVE RIGHTWARDS ARROW',\r\n value: '⥲',\r\n codepoint: 10610,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW ABOVE TILDE OPERATOR',\r\n value: '⥳',\r\n codepoint: 10611,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW ABOVE TILDE OPERATOR',\r\n value: '⥴',\r\n codepoint: 10612,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO',\r\n value: '⥵',\r\n codepoint: 10613,\r\n },\r\n {\r\n name: 'LESS-THAN ABOVE LEFTWARDS ARROW',\r\n value: '⥶',\r\n codepoint: 10614,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW THROUGH LESS-THAN',\r\n value: '⥷',\r\n codepoint: 10615,\r\n },\r\n {\r\n name: 'GREATER-THAN ABOVE RIGHTWARDS ARROW',\r\n value: '⥸',\r\n codepoint: 10616,\r\n },\r\n {\r\n name: 'SUBSET ABOVE RIGHTWARDS ARROW',\r\n value: '⥹',\r\n codepoint: 10617,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW THROUGH SUBSET',\r\n value: '⥺',\r\n codepoint: 10618,\r\n },\r\n {\r\n name: 'SUPERSET ABOVE LEFTWARDS ARROW',\r\n value: '⥻',\r\n codepoint: 10619,\r\n },\r\n {\r\n name: 'LEFT FISH TAIL',\r\n value: '⥼',\r\n codepoint: 10620,\r\n },\r\n {\r\n name: 'RIGHT FISH TAIL',\r\n value: '⥽',\r\n codepoint: 10621,\r\n },\r\n {\r\n name: 'UP FISH TAIL',\r\n value: '⥾',\r\n codepoint: 10622,\r\n },\r\n {\r\n name: 'DOWN FISH TAIL',\r\n value: '⥿',\r\n codepoint: 10623,\r\n },\r\n {\r\n name: 'NORTH EAST WHITE ARROW',\r\n value: '⬀',\r\n codepoint: 11008,\r\n },\r\n {\r\n name: 'NORTH WEST WHITE ARROW',\r\n value: '⬁',\r\n codepoint: 11009,\r\n },\r\n {\r\n name: 'SOUTH EAST WHITE ARROW',\r\n value: '⬂',\r\n codepoint: 11010,\r\n },\r\n {\r\n name: 'SOUTH WEST WHITE ARROW',\r\n value: '⬃',\r\n codepoint: 11011,\r\n },\r\n {\r\n name: 'LEFT RIGHT WHITE ARROW',\r\n value: '⬄',\r\n codepoint: 11012,\r\n },\r\n {\r\n name: 'NORTH EAST BLACK ARROW',\r\n value: '⬈',\r\n codepoint: 11016,\r\n },\r\n {\r\n name: 'NORTH WEST BLACK ARROW',\r\n value: '⬉',\r\n codepoint: 11017,\r\n },\r\n {\r\n name: 'SOUTH EAST BLACK ARROW',\r\n value: '⬊',\r\n codepoint: 11018,\r\n },\r\n {\r\n name: 'SOUTH WEST BLACK ARROW',\r\n value: '⬋',\r\n codepoint: 11019,\r\n },\r\n {\r\n name: 'LEFT RIGHT BLACK ARROW',\r\n value: '⬌',\r\n codepoint: 11020,\r\n },\r\n {\r\n name: 'UP DOWN BLACK ARROW',\r\n value: '⬍',\r\n codepoint: 11021,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW WITH TIP DOWNWARDS',\r\n value: '⬎',\r\n codepoint: 11022,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW WITH TIP UPWARDS',\r\n value: '⬏',\r\n codepoint: 11023,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW WITH TIP DOWNWARDS',\r\n value: '⬐',\r\n codepoint: 11024,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW WITH TIP UPWARDS',\r\n value: '⬑',\r\n codepoint: 11025,\r\n },\r\n {\r\n name: 'SQUARE WITH TOP HALF BLACK',\r\n value: '⬒',\r\n codepoint: 11026,\r\n },\r\n {\r\n name: 'SQUARE WITH BOTTOM HALF BLACK',\r\n value: '⬓',\r\n codepoint: 11027,\r\n },\r\n {\r\n name: 'SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK',\r\n value: '⬔',\r\n codepoint: 11028,\r\n },\r\n {\r\n name: 'SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK',\r\n value: '⬕',\r\n codepoint: 11029,\r\n },\r\n {\r\n name: 'DIAMOND WITH LEFT HALF BLACK',\r\n value: '⬖',\r\n codepoint: 11030,\r\n },\r\n {\r\n name: 'DIAMOND WITH RIGHT HALF BLACK',\r\n value: '⬗',\r\n codepoint: 11031,\r\n },\r\n {\r\n name: 'DIAMOND WITH TOP HALF BLACK',\r\n value: '⬘',\r\n codepoint: 11032,\r\n },\r\n {\r\n name: 'DIAMOND WITH BOTTOM HALF BLACK',\r\n value: '⬙',\r\n codepoint: 11033,\r\n },\r\n {\r\n name: 'DOTTED SQUARE',\r\n value: '⬚',\r\n codepoint: 11034,\r\n },\r\n {\r\n name: 'BLACK VERY SMALL SQUARE',\r\n value: '⬝',\r\n codepoint: 11037,\r\n },\r\n {\r\n name: 'WHITE VERY SMALL SQUARE',\r\n value: '⬞',\r\n codepoint: 11038,\r\n },\r\n {\r\n name: 'BLACK PENTAGON',\r\n value: '⬟',\r\n codepoint: 11039,\r\n },\r\n {\r\n name: 'WHITE PENTAGON',\r\n value: '⬠',\r\n codepoint: 11040,\r\n },\r\n {\r\n name: 'WHITE HEXAGON',\r\n value: '⬡',\r\n codepoint: 11041,\r\n },\r\n {\r\n name: 'BLACK HEXAGON',\r\n value: '⬢',\r\n codepoint: 11042,\r\n },\r\n {\r\n name: 'HORIZONTAL BLACK HEXAGON',\r\n value: '⬣',\r\n codepoint: 11043,\r\n },\r\n {\r\n name: 'BLACK LARGE CIRCLE',\r\n value: '⬤',\r\n codepoint: 11044,\r\n },\r\n {\r\n name: 'BLACK MEDIUM DIAMOND',\r\n value: '⬥',\r\n codepoint: 11045,\r\n },\r\n {\r\n name: 'WHITE MEDIUM DIAMOND',\r\n value: '⬦',\r\n codepoint: 11046,\r\n },\r\n {\r\n name: 'BLACK MEDIUM LOZENGE',\r\n value: '⬧',\r\n codepoint: 11047,\r\n },\r\n {\r\n name: 'WHITE MEDIUM LOZENGE',\r\n value: '⬨',\r\n codepoint: 11048,\r\n },\r\n {\r\n name: 'BLACK SMALL DIAMOND',\r\n value: '⬩',\r\n codepoint: 11049,\r\n },\r\n {\r\n name: 'BLACK SMALL LOZENGE',\r\n value: '⬪',\r\n codepoint: 11050,\r\n },\r\n {\r\n name: 'WHITE SMALL LOZENGE',\r\n value: '⬫',\r\n codepoint: 11051,\r\n },\r\n {\r\n name: 'BLACK HORIZONTAL ELLIPSE',\r\n value: '⬬',\r\n codepoint: 11052,\r\n },\r\n {\r\n name: 'WHITE HORIZONTAL ELLIPSE',\r\n value: '⬭',\r\n codepoint: 11053,\r\n },\r\n {\r\n name: 'BLACK VERTICAL ELLIPSE',\r\n value: '⬮',\r\n codepoint: 11054,\r\n },\r\n {\r\n name: 'WHITE VERTICAL ELLIPSE',\r\n value: '⬯',\r\n codepoint: 11055,\r\n },\r\n {\r\n name: 'LEFT ARROW WITH SMALL CIRCLE',\r\n value: '⬰',\r\n codepoint: 11056,\r\n },\r\n {\r\n name: 'THREE LEFTWARDS ARROWS',\r\n value: '⬱',\r\n codepoint: 11057,\r\n },\r\n {\r\n name: 'LEFT ARROW WITH CIRCLED PLUS',\r\n value: '⬲',\r\n codepoint: 11058,\r\n },\r\n {\r\n name: 'LONG LEFTWARDS SQUIGGLE ARROW',\r\n value: '⬳',\r\n codepoint: 11059,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE',\r\n value: '⬴',\r\n codepoint: 11060,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE',\r\n value: '⬵',\r\n codepoint: 11061,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED ARROW FROM BAR',\r\n value: '⬶',\r\n codepoint: 11062,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED TRIPLE DASH ARROW',\r\n value: '⬷',\r\n codepoint: 11063,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW WITH DOTTED STEM',\r\n value: '⬸',\r\n codepoint: 11064,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE',\r\n value: '⬹',\r\n codepoint: 11065,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE',\r\n value: '⬺',\r\n codepoint: 11066,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED ARROW WITH TAIL',\r\n value: '⬻',\r\n codepoint: 11067,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE',\r\n value: '⬼',\r\n codepoint: 11068,\r\n },\r\n {\r\n name: 'LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE',\r\n value: '⬽',\r\n codepoint: 11069,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW THROUGH X',\r\n value: '⬾',\r\n codepoint: 11070,\r\n },\r\n {\r\n name: 'WAVE ARROW POINTING DIRECTLY LEFT',\r\n value: '⬿',\r\n codepoint: 11071,\r\n },\r\n {\r\n name: 'EQUALS SIGN ABOVE LEFTWARDS ARROW',\r\n value: '⭀',\r\n codepoint: 11072,\r\n },\r\n {\r\n name: 'REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW',\r\n value: '⭁',\r\n codepoint: 11073,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO',\r\n value: '⭂',\r\n codepoint: 11074,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW THROUGH GREATER-THAN',\r\n value: '⭃',\r\n codepoint: 11075,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW THROUGH SUPERSET',\r\n value: '⭄',\r\n codepoint: 11076,\r\n },\r\n {\r\n name: 'LEFTWARDS QUADRUPLE ARROW',\r\n value: '⭅',\r\n codepoint: 11077,\r\n },\r\n {\r\n name: 'RIGHTWARDS QUADRUPLE ARROW',\r\n value: '⭆',\r\n codepoint: 11078,\r\n },\r\n {\r\n name: 'REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW',\r\n value: '⭇',\r\n codepoint: 11079,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO',\r\n value: '⭈',\r\n codepoint: 11080,\r\n },\r\n {\r\n name: 'TILDE OPERATOR ABOVE LEFTWARDS ARROW',\r\n value: '⭉',\r\n codepoint: 11081,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW ABOVE ALMOST EQUAL TO',\r\n value: '⭊',\r\n codepoint: 11082,\r\n },\r\n {\r\n name: 'LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR',\r\n value: '⭋',\r\n codepoint: 11083,\r\n },\r\n {\r\n name: 'RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR',\r\n value: '⭌',\r\n codepoint: 11084,\r\n },\r\n {\r\n name: 'BLACK SMALL STAR',\r\n value: '⭑',\r\n codepoint: 11089,\r\n },\r\n {\r\n name: 'WHITE SMALL STAR',\r\n value: '⭒',\r\n codepoint: 11090,\r\n },\r\n {\r\n name: 'BLACK RIGHT-POINTING PENTAGON',\r\n value: '⭓',\r\n codepoint: 11091,\r\n },\r\n {\r\n name: 'WHITE RIGHT-POINTING PENTAGON',\r\n value: '⭔',\r\n codepoint: 11092,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Ancient',\r\n symbols: [\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE QUARTER',\r\n value: '𐅀',\r\n codepoint: 65856,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE HALF',\r\n value: '𐅁',\r\n codepoint: 65857,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE DRACHMA',\r\n value: '𐅂',\r\n codepoint: 65858,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE',\r\n value: '𐅃',\r\n codepoint: 65859,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE THOUSAND',\r\n value: '𐅆',\r\n codepoint: 65862,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIFTY THOUSAND',\r\n value: '𐅇',\r\n codepoint: 65863,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE TALENTS',\r\n value: '𐅈',\r\n codepoint: 65864,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC TEN TALENTS',\r\n value: '𐅉',\r\n codepoint: 65865,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIFTY TALENTS',\r\n value: '𐅊',\r\n codepoint: 65866,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS',\r\n value: '𐅋',\r\n codepoint: 65867,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS',\r\n value: '𐅌',\r\n codepoint: 65868,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS',\r\n value: '𐅍',\r\n codepoint: 65869,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS',\r\n value: '𐅎',\r\n codepoint: 65870,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE STATERS',\r\n value: '𐅏',\r\n codepoint: 65871,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC TEN STATERS',\r\n value: '𐅐',\r\n codepoint: 65872,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIFTY STATERS',\r\n value: '𐅑',\r\n codepoint: 65873,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS',\r\n value: '𐅒',\r\n codepoint: 65874,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS',\r\n value: '𐅓',\r\n codepoint: 65875,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS',\r\n value: '𐅔',\r\n codepoint: 65876,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS',\r\n value: '𐅕',\r\n codepoint: 65877,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS',\r\n value: '𐅖',\r\n codepoint: 65878,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC ATTIC TEN MNAS',\r\n value: '𐅗',\r\n codepoint: 65879,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC HERAEUM ONE PLETHRON',\r\n value: '𐅘',\r\n codepoint: 65880,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN ONE',\r\n value: '𐅙',\r\n codepoint: 65881,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC HERMIONIAN ONE',\r\n value: '𐅚',\r\n codepoint: 65882,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC EPIDAUREAN TWO',\r\n value: '𐅛',\r\n codepoint: 65883,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN TWO',\r\n value: '𐅜',\r\n codepoint: 65884,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC CYRENAIC TWO DRACHMAS',\r\n value: '𐅝',\r\n codepoint: 65885,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS',\r\n value: '𐅞',\r\n codepoint: 65886,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC TROEZENIAN FIVE',\r\n value: '𐅟',\r\n codepoint: 65887,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC TROEZENIAN TEN',\r\n value: '𐅠',\r\n codepoint: 65888,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM',\r\n value: '𐅡',\r\n codepoint: 65889,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC HERMIONIAN TEN',\r\n value: '𐅢',\r\n codepoint: 65890,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC MESSENIAN TEN',\r\n value: '𐅣',\r\n codepoint: 65891,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN TEN',\r\n value: '𐅤',\r\n codepoint: 65892,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN THIRTY',\r\n value: '𐅥',\r\n codepoint: 65893,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC TROEZENIAN FIFTY',\r\n value: '𐅦',\r\n codepoint: 65894,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM',\r\n value: '𐅧',\r\n codepoint: 65895,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC HERMIONIAN FIFTY',\r\n value: '𐅨',\r\n codepoint: 65896,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN FIFTY',\r\n value: '𐅩',\r\n codepoint: 65897,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN ONE HUNDRED',\r\n value: '𐅪',\r\n codepoint: 65898,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN THREE HUNDRED',\r\n value: '𐅫',\r\n codepoint: 65899,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED',\r\n value: '𐅬',\r\n codepoint: 65900,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED',\r\n value: '𐅭',\r\n codepoint: 65901,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN FIVE HUNDRED',\r\n value: '𐅮',\r\n codepoint: 65902,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED',\r\n value: '𐅯',\r\n codepoint: 65903,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC NAXIAN FIVE HUNDRED',\r\n value: '𐅰',\r\n codepoint: 65904,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN ONE THOUSAND',\r\n value: '𐅱',\r\n codepoint: 65905,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC THESPIAN FIVE THOUSAND',\r\n value: '𐅲',\r\n codepoint: 65906,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC DELPHIC FIVE MNAS',\r\n value: '𐅳',\r\n codepoint: 65907,\r\n },\r\n {\r\n name: 'GREEK ACROPHONIC STRATIAN FIFTY MNAS',\r\n value: '𐅴',\r\n codepoint: 65908,\r\n },\r\n {\r\n name: 'GREEK ONE HALF SIGN',\r\n value: '𐅵',\r\n codepoint: 65909,\r\n },\r\n {\r\n name: 'GREEK YEAR SIGN',\r\n value: '𐅹',\r\n codepoint: 65913,\r\n },\r\n {\r\n name: 'GREEK TALENT SIGN',\r\n value: '𐅺',\r\n codepoint: 65914,\r\n },\r\n {\r\n name: 'GREEK DRACHMA SIGN',\r\n value: '𐅻',\r\n codepoint: 65915,\r\n },\r\n {\r\n name: 'GREEK OBOL SIGN',\r\n value: '𐅼',\r\n codepoint: 65916,\r\n },\r\n {\r\n name: 'GREEK TWO OBOLS SIGN',\r\n value: '𐅽',\r\n codepoint: 65917,\r\n },\r\n {\r\n name: 'GREEK THREE OBOLS SIGN',\r\n value: '𐅾',\r\n codepoint: 65918,\r\n },\r\n {\r\n name: 'GREEK FOUR OBOLS SIGN',\r\n value: '𐅿',\r\n codepoint: 65919,\r\n },\r\n {\r\n name: 'GREEK FIVE OBOLS SIGN',\r\n value: '𐆀',\r\n codepoint: 65920,\r\n },\r\n {\r\n name: 'GREEK METRETES SIGN',\r\n value: '𐆁',\r\n codepoint: 65921,\r\n },\r\n {\r\n name: 'GREEK KYATHOS BASE SIGN',\r\n value: '𐆂',\r\n codepoint: 65922,\r\n },\r\n {\r\n name: 'GREEK OUNKIA SIGN',\r\n value: '𐆄',\r\n codepoint: 65924,\r\n },\r\n {\r\n name: 'GREEK XESTES SIGN',\r\n value: '𐆅',\r\n codepoint: 65925,\r\n },\r\n {\r\n name: 'GREEK ARTABE SIGN',\r\n value: '𐆆',\r\n codepoint: 65926,\r\n },\r\n {\r\n name: 'GREEK ZERO SIGN',\r\n value: '𐆊',\r\n codepoint: 65930,\r\n },\r\n {\r\n name: 'ROMAN SEXTANS SIGN',\r\n value: '𐆐',\r\n codepoint: 65936,\r\n },\r\n {\r\n name: 'ROMAN UNCIA SIGN',\r\n value: '𐆑',\r\n codepoint: 65937,\r\n },\r\n {\r\n name: 'ROMAN SEMUNCIA SIGN',\r\n value: '𐆒',\r\n codepoint: 65938,\r\n },\r\n {\r\n name: 'ROMAN SEXTULA SIGN',\r\n value: '𐆓',\r\n codepoint: 65939,\r\n },\r\n {\r\n name: 'ROMAN DIMIDIA SEXTULA SIGN',\r\n value: '𐆔',\r\n codepoint: 65940,\r\n },\r\n {\r\n name: 'ROMAN SILIQUA SIGN',\r\n value: '𐆕',\r\n codepoint: 65941,\r\n },\r\n {\r\n name: 'ROMAN DENARIUS SIGN',\r\n value: '𐆖',\r\n codepoint: 65942,\r\n },\r\n {\r\n name: 'ROMAN QUINARIUS SIGN',\r\n value: '𐆗',\r\n codepoint: 65943,\r\n },\r\n {\r\n name: 'ROMAN SESTERTIUS SIGN',\r\n value: '𐆘',\r\n codepoint: 65944,\r\n },\r\n {\r\n name: 'ROMAN DUPONDIUS SIGN',\r\n value: '𐆙',\r\n codepoint: 65945,\r\n },\r\n {\r\n name: 'ROMAN AS SIGN',\r\n value: '𐆚',\r\n codepoint: 65946,\r\n },\r\n {\r\n name: 'ROMAN CENTURIAL SIGN',\r\n value: '𐆛',\r\n codepoint: 65947,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Braille',\r\n symbols: [\r\n {\r\n name: 'BRAILLE PATTERN BLANK',\r\n value: '⠀',\r\n codepoint: 10240,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1',\r\n value: '⠁',\r\n codepoint: 10241,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2',\r\n value: '⠂',\r\n codepoint: 10242,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12',\r\n value: '⠃',\r\n codepoint: 10243,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3',\r\n value: '⠄',\r\n codepoint: 10244,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13',\r\n value: '⠅',\r\n codepoint: 10245,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23',\r\n value: '⠆',\r\n codepoint: 10246,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123',\r\n value: '⠇',\r\n codepoint: 10247,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-4',\r\n value: '⠈',\r\n codepoint: 10248,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-14',\r\n value: '⠉',\r\n codepoint: 10249,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-24',\r\n value: '⠊',\r\n codepoint: 10250,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-124',\r\n value: '⠋',\r\n codepoint: 10251,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-34',\r\n value: '⠌',\r\n codepoint: 10252,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-134',\r\n value: '⠍',\r\n codepoint: 10253,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-234',\r\n value: '⠎',\r\n codepoint: 10254,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1234',\r\n value: '⠏',\r\n codepoint: 10255,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-5',\r\n value: '⠐',\r\n codepoint: 10256,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-15',\r\n value: '⠑',\r\n codepoint: 10257,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-25',\r\n value: '⠒',\r\n codepoint: 10258,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-125',\r\n value: '⠓',\r\n codepoint: 10259,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-35',\r\n value: '⠔',\r\n codepoint: 10260,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-135',\r\n value: '⠕',\r\n codepoint: 10261,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-235',\r\n value: '⠖',\r\n codepoint: 10262,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1235',\r\n value: '⠗',\r\n codepoint: 10263,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-45',\r\n value: '⠘',\r\n codepoint: 10264,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-145',\r\n value: '⠙',\r\n codepoint: 10265,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-245',\r\n value: '⠚',\r\n codepoint: 10266,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1245',\r\n value: '⠛',\r\n codepoint: 10267,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-345',\r\n value: '⠜',\r\n codepoint: 10268,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1345',\r\n value: '⠝',\r\n codepoint: 10269,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2345',\r\n value: '⠞',\r\n codepoint: 10270,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12345',\r\n value: '⠟',\r\n codepoint: 10271,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-6',\r\n value: '⠠',\r\n codepoint: 10272,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-16',\r\n value: '⠡',\r\n codepoint: 10273,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-26',\r\n value: '⠢',\r\n codepoint: 10274,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-126',\r\n value: '⠣',\r\n codepoint: 10275,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-36',\r\n value: '⠤',\r\n codepoint: 10276,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-136',\r\n value: '⠥',\r\n codepoint: 10277,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-236',\r\n value: '⠦',\r\n codepoint: 10278,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1236',\r\n value: '⠧',\r\n codepoint: 10279,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-46',\r\n value: '⠨',\r\n codepoint: 10280,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-146',\r\n value: '⠩',\r\n codepoint: 10281,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-246',\r\n value: '⠪',\r\n codepoint: 10282,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1246',\r\n value: '⠫',\r\n codepoint: 10283,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-346',\r\n value: '⠬',\r\n codepoint: 10284,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1346',\r\n value: '⠭',\r\n codepoint: 10285,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2346',\r\n value: '⠮',\r\n codepoint: 10286,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12346',\r\n value: '⠯',\r\n codepoint: 10287,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-56',\r\n value: '⠰',\r\n codepoint: 10288,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-156',\r\n value: '⠱',\r\n codepoint: 10289,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-256',\r\n value: '⠲',\r\n codepoint: 10290,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1256',\r\n value: '⠳',\r\n codepoint: 10291,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-356',\r\n value: '⠴',\r\n codepoint: 10292,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1356',\r\n value: '⠵',\r\n codepoint: 10293,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2356',\r\n value: '⠶',\r\n codepoint: 10294,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12356',\r\n value: '⠷',\r\n codepoint: 10295,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-456',\r\n value: '⠸',\r\n codepoint: 10296,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1456',\r\n value: '⠹',\r\n codepoint: 10297,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2456',\r\n value: '⠺',\r\n codepoint: 10298,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12456',\r\n value: '⠻',\r\n codepoint: 10299,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3456',\r\n value: '⠼',\r\n codepoint: 10300,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13456',\r\n value: '⠽',\r\n codepoint: 10301,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23456',\r\n value: '⠾',\r\n codepoint: 10302,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123456',\r\n value: '⠿',\r\n codepoint: 10303,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-7',\r\n value: '⡀',\r\n codepoint: 10304,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-17',\r\n value: '⡁',\r\n codepoint: 10305,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-27',\r\n value: '⡂',\r\n codepoint: 10306,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-127',\r\n value: '⡃',\r\n codepoint: 10307,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-37',\r\n value: '⡄',\r\n codepoint: 10308,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-137',\r\n value: '⡅',\r\n codepoint: 10309,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-237',\r\n value: '⡆',\r\n codepoint: 10310,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1237',\r\n value: '⡇',\r\n codepoint: 10311,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-47',\r\n value: '⡈',\r\n codepoint: 10312,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-147',\r\n value: '⡉',\r\n codepoint: 10313,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-247',\r\n value: '⡊',\r\n codepoint: 10314,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1247',\r\n value: '⡋',\r\n codepoint: 10315,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-347',\r\n value: '⡌',\r\n codepoint: 10316,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1347',\r\n value: '⡍',\r\n codepoint: 10317,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2347',\r\n value: '⡎',\r\n codepoint: 10318,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12347',\r\n value: '⡏',\r\n codepoint: 10319,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-57',\r\n value: '⡐',\r\n codepoint: 10320,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-157',\r\n value: '⡑',\r\n codepoint: 10321,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-257',\r\n value: '⡒',\r\n codepoint: 10322,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1257',\r\n value: '⡓',\r\n codepoint: 10323,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-357',\r\n value: '⡔',\r\n codepoint: 10324,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1357',\r\n value: '⡕',\r\n codepoint: 10325,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2357',\r\n value: '⡖',\r\n codepoint: 10326,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12357',\r\n value: '⡗',\r\n codepoint: 10327,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-457',\r\n value: '⡘',\r\n codepoint: 10328,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1457',\r\n value: '⡙',\r\n codepoint: 10329,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2457',\r\n value: '⡚',\r\n codepoint: 10330,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12457',\r\n value: '⡛',\r\n codepoint: 10331,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3457',\r\n value: '⡜',\r\n codepoint: 10332,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13457',\r\n value: '⡝',\r\n codepoint: 10333,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23457',\r\n value: '⡞',\r\n codepoint: 10334,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123457',\r\n value: '⡟',\r\n codepoint: 10335,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-67',\r\n value: '⡠',\r\n codepoint: 10336,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-167',\r\n value: '⡡',\r\n codepoint: 10337,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-267',\r\n value: '⡢',\r\n codepoint: 10338,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1267',\r\n value: '⡣',\r\n codepoint: 10339,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-367',\r\n value: '⡤',\r\n codepoint: 10340,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1367',\r\n value: '⡥',\r\n codepoint: 10341,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2367',\r\n value: '⡦',\r\n codepoint: 10342,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12367',\r\n value: '⡧',\r\n codepoint: 10343,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-467',\r\n value: '⡨',\r\n codepoint: 10344,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1467',\r\n value: '⡩',\r\n codepoint: 10345,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2467',\r\n value: '⡪',\r\n codepoint: 10346,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12467',\r\n value: '⡫',\r\n codepoint: 10347,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3467',\r\n value: '⡬',\r\n codepoint: 10348,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13467',\r\n value: '⡭',\r\n codepoint: 10349,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23467',\r\n value: '⡮',\r\n codepoint: 10350,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123467',\r\n value: '⡯',\r\n codepoint: 10351,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-567',\r\n value: '⡰',\r\n codepoint: 10352,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1567',\r\n value: '⡱',\r\n codepoint: 10353,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2567',\r\n value: '⡲',\r\n codepoint: 10354,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12567',\r\n value: '⡳',\r\n codepoint: 10355,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3567',\r\n value: '⡴',\r\n codepoint: 10356,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13567',\r\n value: '⡵',\r\n codepoint: 10357,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23567',\r\n value: '⡶',\r\n codepoint: 10358,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123567',\r\n value: '⡷',\r\n codepoint: 10359,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-4567',\r\n value: '⡸',\r\n codepoint: 10360,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-14567',\r\n value: '⡹',\r\n codepoint: 10361,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-24567',\r\n value: '⡺',\r\n codepoint: 10362,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-124567',\r\n value: '⡻',\r\n codepoint: 10363,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-34567',\r\n value: '⡼',\r\n codepoint: 10364,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-134567',\r\n value: '⡽',\r\n codepoint: 10365,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-234567',\r\n value: '⡾',\r\n codepoint: 10366,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1234567',\r\n value: '⡿',\r\n codepoint: 10367,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-8',\r\n value: '⢀',\r\n codepoint: 10368,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-18',\r\n value: '⢁',\r\n codepoint: 10369,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-28',\r\n value: '⢂',\r\n codepoint: 10370,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-128',\r\n value: '⢃',\r\n codepoint: 10371,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-38',\r\n value: '⢄',\r\n codepoint: 10372,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-138',\r\n value: '⢅',\r\n codepoint: 10373,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-238',\r\n value: '⢆',\r\n codepoint: 10374,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1238',\r\n value: '⢇',\r\n codepoint: 10375,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-48',\r\n value: '⢈',\r\n codepoint: 10376,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-148',\r\n value: '⢉',\r\n codepoint: 10377,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-248',\r\n value: '⢊',\r\n codepoint: 10378,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1248',\r\n value: '⢋',\r\n codepoint: 10379,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-348',\r\n value: '⢌',\r\n codepoint: 10380,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1348',\r\n value: '⢍',\r\n codepoint: 10381,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2348',\r\n value: '⢎',\r\n codepoint: 10382,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12348',\r\n value: '⢏',\r\n codepoint: 10383,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-58',\r\n value: '⢐',\r\n codepoint: 10384,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-158',\r\n value: '⢑',\r\n codepoint: 10385,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-258',\r\n value: '⢒',\r\n codepoint: 10386,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1258',\r\n value: '⢓',\r\n codepoint: 10387,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-358',\r\n value: '⢔',\r\n codepoint: 10388,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1358',\r\n value: '⢕',\r\n codepoint: 10389,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2358',\r\n value: '⢖',\r\n codepoint: 10390,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12358',\r\n value: '⢗',\r\n codepoint: 10391,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-458',\r\n value: '⢘',\r\n codepoint: 10392,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1458',\r\n value: '⢙',\r\n codepoint: 10393,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2458',\r\n value: '⢚',\r\n codepoint: 10394,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12458',\r\n value: '⢛',\r\n codepoint: 10395,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3458',\r\n value: '⢜',\r\n codepoint: 10396,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13458',\r\n value: '⢝',\r\n codepoint: 10397,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23458',\r\n value: '⢞',\r\n codepoint: 10398,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123458',\r\n value: '⢟',\r\n codepoint: 10399,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-68',\r\n value: '⢠',\r\n codepoint: 10400,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-168',\r\n value: '⢡',\r\n codepoint: 10401,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-268',\r\n value: '⢢',\r\n codepoint: 10402,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1268',\r\n value: '⢣',\r\n codepoint: 10403,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-368',\r\n value: '⢤',\r\n codepoint: 10404,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1368',\r\n value: '⢥',\r\n codepoint: 10405,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2368',\r\n value: '⢦',\r\n codepoint: 10406,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12368',\r\n value: '⢧',\r\n codepoint: 10407,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-468',\r\n value: '⢨',\r\n codepoint: 10408,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1468',\r\n value: '⢩',\r\n codepoint: 10409,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2468',\r\n value: '⢪',\r\n codepoint: 10410,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12468',\r\n value: '⢫',\r\n codepoint: 10411,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3468',\r\n value: '⢬',\r\n codepoint: 10412,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13468',\r\n value: '⢭',\r\n codepoint: 10413,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23468',\r\n value: '⢮',\r\n codepoint: 10414,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123468',\r\n value: '⢯',\r\n codepoint: 10415,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-568',\r\n value: '⢰',\r\n codepoint: 10416,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1568',\r\n value: '⢱',\r\n codepoint: 10417,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2568',\r\n value: '⢲',\r\n codepoint: 10418,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12568',\r\n value: '⢳',\r\n codepoint: 10419,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3568',\r\n value: '⢴',\r\n codepoint: 10420,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13568',\r\n value: '⢵',\r\n codepoint: 10421,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23568',\r\n value: '⢶',\r\n codepoint: 10422,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123568',\r\n value: '⢷',\r\n codepoint: 10423,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-4568',\r\n value: '⢸',\r\n codepoint: 10424,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-14568',\r\n value: '⢹',\r\n codepoint: 10425,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-24568',\r\n value: '⢺',\r\n codepoint: 10426,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-124568',\r\n value: '⢻',\r\n codepoint: 10427,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-34568',\r\n value: '⢼',\r\n codepoint: 10428,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-134568',\r\n value: '⢽',\r\n codepoint: 10429,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-234568',\r\n value: '⢾',\r\n codepoint: 10430,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1234568',\r\n value: '⢿',\r\n codepoint: 10431,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-78',\r\n value: '⣀',\r\n codepoint: 10432,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-178',\r\n value: '⣁',\r\n codepoint: 10433,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-278',\r\n value: '⣂',\r\n codepoint: 10434,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1278',\r\n value: '⣃',\r\n codepoint: 10435,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-378',\r\n value: '⣄',\r\n codepoint: 10436,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1378',\r\n value: '⣅',\r\n codepoint: 10437,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2378',\r\n value: '⣆',\r\n codepoint: 10438,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12378',\r\n value: '⣇',\r\n codepoint: 10439,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-478',\r\n value: '⣈',\r\n codepoint: 10440,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1478',\r\n value: '⣉',\r\n codepoint: 10441,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2478',\r\n value: '⣊',\r\n codepoint: 10442,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12478',\r\n value: '⣋',\r\n codepoint: 10443,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3478',\r\n value: '⣌',\r\n codepoint: 10444,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13478',\r\n value: '⣍',\r\n codepoint: 10445,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23478',\r\n value: '⣎',\r\n codepoint: 10446,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123478',\r\n value: '⣏',\r\n codepoint: 10447,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-578',\r\n value: '⣐',\r\n codepoint: 10448,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1578',\r\n value: '⣑',\r\n codepoint: 10449,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2578',\r\n value: '⣒',\r\n codepoint: 10450,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12578',\r\n value: '⣓',\r\n codepoint: 10451,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3578',\r\n value: '⣔',\r\n codepoint: 10452,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13578',\r\n value: '⣕',\r\n codepoint: 10453,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23578',\r\n value: '⣖',\r\n codepoint: 10454,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123578',\r\n value: '⣗',\r\n codepoint: 10455,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-4578',\r\n value: '⣘',\r\n codepoint: 10456,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-14578',\r\n value: '⣙',\r\n codepoint: 10457,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-24578',\r\n value: '⣚',\r\n codepoint: 10458,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-124578',\r\n value: '⣛',\r\n codepoint: 10459,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-34578',\r\n value: '⣜',\r\n codepoint: 10460,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-134578',\r\n value: '⣝',\r\n codepoint: 10461,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-234578',\r\n value: '⣞',\r\n codepoint: 10462,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1234578',\r\n value: '⣟',\r\n codepoint: 10463,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-678',\r\n value: '⣠',\r\n codepoint: 10464,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1678',\r\n value: '⣡',\r\n codepoint: 10465,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2678',\r\n value: '⣢',\r\n codepoint: 10466,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12678',\r\n value: '⣣',\r\n codepoint: 10467,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-3678',\r\n value: '⣤',\r\n codepoint: 10468,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-13678',\r\n value: '⣥',\r\n codepoint: 10469,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-23678',\r\n value: '⣦',\r\n codepoint: 10470,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-123678',\r\n value: '⣧',\r\n codepoint: 10471,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-4678',\r\n value: '⣨',\r\n codepoint: 10472,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-14678',\r\n value: '⣩',\r\n codepoint: 10473,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-24678',\r\n value: '⣪',\r\n codepoint: 10474,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-124678',\r\n value: '⣫',\r\n codepoint: 10475,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-34678',\r\n value: '⣬',\r\n codepoint: 10476,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-134678',\r\n value: '⣭',\r\n codepoint: 10477,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-234678',\r\n value: '⣮',\r\n codepoint: 10478,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1234678',\r\n value: '⣯',\r\n codepoint: 10479,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-5678',\r\n value: '⣰',\r\n codepoint: 10480,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-15678',\r\n value: '⣱',\r\n codepoint: 10481,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-25678',\r\n value: '⣲',\r\n codepoint: 10482,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-125678',\r\n value: '⣳',\r\n codepoint: 10483,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-35678',\r\n value: '⣴',\r\n codepoint: 10484,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-135678',\r\n value: '⣵',\r\n codepoint: 10485,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-235678',\r\n value: '⣶',\r\n codepoint: 10486,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1235678',\r\n value: '⣷',\r\n codepoint: 10487,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-45678',\r\n value: '⣸',\r\n codepoint: 10488,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-145678',\r\n value: '⣹',\r\n codepoint: 10489,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-245678',\r\n value: '⣺',\r\n codepoint: 10490,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1245678',\r\n value: '⣻',\r\n codepoint: 10491,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-345678',\r\n value: '⣼',\r\n codepoint: 10492,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-1345678',\r\n value: '⣽',\r\n codepoint: 10493,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-2345678',\r\n value: '⣾',\r\n codepoint: 10494,\r\n },\r\n {\r\n name: 'BRAILLE PATTERN DOTS-12345678',\r\n value: '⣿',\r\n codepoint: 10495,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Currency',\r\n symbols: [\r\n {\r\n name: 'EURO-CURRENCY SIGN',\r\n value: '₠',\r\n codepoint: 8352,\r\n },\r\n {\r\n name: 'COLON SIGN',\r\n value: '₡',\r\n codepoint: 8353,\r\n },\r\n {\r\n name: 'CRUZEIRO SIGN',\r\n value: '₢',\r\n codepoint: 8354,\r\n },\r\n {\r\n name: 'FRENCH FRANC SIGN',\r\n value: '₣',\r\n codepoint: 8355,\r\n },\r\n {\r\n name: 'LIRA SIGN',\r\n value: '₤',\r\n codepoint: 8356,\r\n },\r\n {\r\n name: 'MILL SIGN',\r\n value: '₥',\r\n codepoint: 8357,\r\n },\r\n {\r\n name: 'NAIRA SIGN',\r\n value: '₦',\r\n codepoint: 8358,\r\n },\r\n {\r\n name: 'PESETA SIGN',\r\n value: '₧',\r\n codepoint: 8359,\r\n },\r\n {\r\n name: 'RUPEE SIGN',\r\n value: '₨',\r\n codepoint: 8360,\r\n },\r\n {\r\n name: 'WON SIGN',\r\n value: '₩',\r\n codepoint: 8361,\r\n },\r\n {\r\n name: 'NEW SHEQEL SIGN',\r\n value: '₪',\r\n codepoint: 8362,\r\n },\r\n {\r\n name: 'DONG SIGN',\r\n value: '₫',\r\n codepoint: 8363,\r\n },\r\n {\r\n name: 'EURO SIGN',\r\n value: '€',\r\n codepoint: 8364,\r\n },\r\n {\r\n name: 'KIP SIGN',\r\n value: '₭',\r\n codepoint: 8365,\r\n },\r\n {\r\n name: 'TUGRIK SIGN',\r\n value: '₮',\r\n codepoint: 8366,\r\n },\r\n {\r\n name: 'DRACHMA SIGN',\r\n value: '₯',\r\n codepoint: 8367,\r\n },\r\n {\r\n name: 'GERMAN PENNY SIGN',\r\n value: '₰',\r\n codepoint: 8368,\r\n },\r\n {\r\n name: 'PESO SIGN',\r\n value: '₱',\r\n codepoint: 8369,\r\n },\r\n {\r\n name: 'GUARANI SIGN',\r\n value: '₲',\r\n codepoint: 8370,\r\n },\r\n {\r\n name: 'AUSTRAL SIGN',\r\n value: '₳',\r\n codepoint: 8371,\r\n },\r\n {\r\n name: 'HRYVNIA SIGN',\r\n value: '₴',\r\n codepoint: 8372,\r\n },\r\n {\r\n name: 'CEDI SIGN',\r\n value: '₵',\r\n codepoint: 8373,\r\n },\r\n {\r\n name: 'LIVRE TOURNOIS SIGN',\r\n value: '₶',\r\n codepoint: 8374,\r\n },\r\n {\r\n name: 'SPESMILO SIGN',\r\n value: '₷',\r\n codepoint: 8375,\r\n },\r\n {\r\n name: 'TENGE SIGN',\r\n value: '₸',\r\n codepoint: 8376,\r\n },\r\n {\r\n name: 'INDIAN RUPEE SIGN',\r\n value: '₹',\r\n codepoint: 8377,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Game Symbols',\r\n symbols: [\r\n {\r\n name: 'MAHJONG TILE EAST WIND',\r\n value: '🀀',\r\n codepoint: 126976,\r\n },\r\n {\r\n name: 'MAHJONG TILE SOUTH WIND',\r\n value: '🀁',\r\n codepoint: 126977,\r\n },\r\n {\r\n name: 'MAHJONG TILE WEST WIND',\r\n value: '🀂',\r\n codepoint: 126978,\r\n },\r\n {\r\n name: 'MAHJONG TILE NORTH WIND',\r\n value: '🀃',\r\n codepoint: 126979,\r\n },\r\n {\r\n name: 'MAHJONG TILE GREEN DRAGON',\r\n value: '🀅',\r\n codepoint: 126981,\r\n },\r\n {\r\n name: 'MAHJONG TILE WHITE DRAGON',\r\n value: '🀆',\r\n codepoint: 126982,\r\n },\r\n {\r\n name: 'MAHJONG TILE ONE OF CHARACTERS',\r\n value: '🀇',\r\n codepoint: 126983,\r\n },\r\n {\r\n name: 'MAHJONG TILE TWO OF CHARACTERS',\r\n value: '🀈',\r\n codepoint: 126984,\r\n },\r\n {\r\n name: 'MAHJONG TILE THREE OF CHARACTERS',\r\n value: '🀉',\r\n codepoint: 126985,\r\n },\r\n {\r\n name: 'MAHJONG TILE FOUR OF CHARACTERS',\r\n value: '🀊',\r\n codepoint: 126986,\r\n },\r\n {\r\n name: 'MAHJONG TILE FIVE OF CHARACTERS',\r\n value: '🀋',\r\n codepoint: 126987,\r\n },\r\n {\r\n name: 'MAHJONG TILE SIX OF CHARACTERS',\r\n value: '🀌',\r\n codepoint: 126988,\r\n },\r\n {\r\n name: 'MAHJONG TILE SEVEN OF CHARACTERS',\r\n value: '🀍',\r\n codepoint: 126989,\r\n },\r\n {\r\n name: 'MAHJONG TILE EIGHT OF CHARACTERS',\r\n value: '🀎',\r\n codepoint: 126990,\r\n },\r\n {\r\n name: 'MAHJONG TILE NINE OF CHARACTERS',\r\n value: '🀏',\r\n codepoint: 126991,\r\n },\r\n {\r\n name: 'MAHJONG TILE ONE OF BAMBOOS',\r\n value: '🀐',\r\n codepoint: 126992,\r\n },\r\n {\r\n name: 'MAHJONG TILE TWO OF BAMBOOS',\r\n value: '🀑',\r\n codepoint: 126993,\r\n },\r\n {\r\n name: 'MAHJONG TILE THREE OF BAMBOOS',\r\n value: '🀒',\r\n codepoint: 126994,\r\n },\r\n {\r\n name: 'MAHJONG TILE FOUR OF BAMBOOS',\r\n value: '🀓',\r\n codepoint: 126995,\r\n },\r\n {\r\n name: 'MAHJONG TILE FIVE OF BAMBOOS',\r\n value: '🀔',\r\n codepoint: 126996,\r\n },\r\n {\r\n name: 'MAHJONG TILE SIX OF BAMBOOS',\r\n value: '🀕',\r\n codepoint: 126997,\r\n },\r\n {\r\n name: 'MAHJONG TILE SEVEN OF BAMBOOS',\r\n value: '🀖',\r\n codepoint: 126998,\r\n },\r\n {\r\n name: 'MAHJONG TILE EIGHT OF BAMBOOS',\r\n value: '🀗',\r\n codepoint: 126999,\r\n },\r\n {\r\n name: 'MAHJONG TILE NINE OF BAMBOOS',\r\n value: '🀘',\r\n codepoint: 127000,\r\n },\r\n {\r\n name: 'MAHJONG TILE ONE OF CIRCLES',\r\n value: '🀙',\r\n codepoint: 127001,\r\n },\r\n {\r\n name: 'MAHJONG TILE TWO OF CIRCLES',\r\n value: '🀚',\r\n codepoint: 127002,\r\n },\r\n {\r\n name: 'MAHJONG TILE THREE OF CIRCLES',\r\n value: '🀛',\r\n codepoint: 127003,\r\n },\r\n {\r\n name: 'MAHJONG TILE FOUR OF CIRCLES',\r\n value: '🀜',\r\n codepoint: 127004,\r\n },\r\n {\r\n name: 'MAHJONG TILE FIVE OF CIRCLES',\r\n value: '🀝',\r\n codepoint: 127005,\r\n },\r\n {\r\n name: 'MAHJONG TILE SIX OF CIRCLES',\r\n value: '🀞',\r\n codepoint: 127006,\r\n },\r\n {\r\n name: 'MAHJONG TILE SEVEN OF CIRCLES',\r\n value: '🀟',\r\n codepoint: 127007,\r\n },\r\n {\r\n name: 'MAHJONG TILE EIGHT OF CIRCLES',\r\n value: '🀠',\r\n codepoint: 127008,\r\n },\r\n {\r\n name: 'MAHJONG TILE NINE OF CIRCLES',\r\n value: '🀡',\r\n codepoint: 127009,\r\n },\r\n {\r\n name: 'MAHJONG TILE PLUM',\r\n value: '🀢',\r\n codepoint: 127010,\r\n },\r\n {\r\n name: 'MAHJONG TILE ORCHID',\r\n value: '🀣',\r\n codepoint: 127011,\r\n },\r\n {\r\n name: 'MAHJONG TILE BAMBOO',\r\n value: '🀤',\r\n codepoint: 127012,\r\n },\r\n {\r\n name: 'MAHJONG TILE CHRYSANTHEMUM',\r\n value: '🀥',\r\n codepoint: 127013,\r\n },\r\n {\r\n name: 'MAHJONG TILE SPRING',\r\n value: '🀦',\r\n codepoint: 127014,\r\n },\r\n {\r\n name: 'MAHJONG TILE SUMMER',\r\n value: '🀧',\r\n codepoint: 127015,\r\n },\r\n {\r\n name: 'MAHJONG TILE AUTUMN',\r\n value: '🀨',\r\n codepoint: 127016,\r\n },\r\n {\r\n name: 'MAHJONG TILE WINTER',\r\n value: '🀩',\r\n codepoint: 127017,\r\n },\r\n {\r\n name: 'MAHJONG TILE JOKER',\r\n value: '🀪',\r\n codepoint: 127018,\r\n },\r\n {\r\n name: 'MAHJONG TILE BACK',\r\n value: '🀫',\r\n codepoint: 127019,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL BACK',\r\n value: '🀰',\r\n codepoint: 127024,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-00',\r\n value: '🀱',\r\n codepoint: 127025,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-01',\r\n value: '🀲',\r\n codepoint: 127026,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-02',\r\n value: '🀳',\r\n codepoint: 127027,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-03',\r\n value: '🀴',\r\n codepoint: 127028,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-04',\r\n value: '🀵',\r\n codepoint: 127029,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-05',\r\n value: '🀶',\r\n codepoint: 127030,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-00-06',\r\n value: '🀷',\r\n codepoint: 127031,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-00',\r\n value: '🀸',\r\n codepoint: 127032,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-01',\r\n value: '🀹',\r\n codepoint: 127033,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-02',\r\n value: '🀺',\r\n codepoint: 127034,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-03',\r\n value: '🀻',\r\n codepoint: 127035,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-04',\r\n value: '🀼',\r\n codepoint: 127036,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-05',\r\n value: '🀽',\r\n codepoint: 127037,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-01-06',\r\n value: '🀾',\r\n codepoint: 127038,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-00',\r\n value: '🀿',\r\n codepoint: 127039,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-01',\r\n value: '🁀',\r\n codepoint: 127040,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-02',\r\n value: '🁁',\r\n codepoint: 127041,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-03',\r\n value: '🁂',\r\n codepoint: 127042,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-04',\r\n value: '🁃',\r\n codepoint: 127043,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-05',\r\n value: '🁄',\r\n codepoint: 127044,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-02-06',\r\n value: '🁅',\r\n codepoint: 127045,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-00',\r\n value: '🁆',\r\n codepoint: 127046,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-01',\r\n value: '🁇',\r\n codepoint: 127047,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-02',\r\n value: '🁈',\r\n codepoint: 127048,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-03',\r\n value: '🁉',\r\n codepoint: 127049,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-04',\r\n value: '🁊',\r\n codepoint: 127050,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-05',\r\n value: '🁋',\r\n codepoint: 127051,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-03-06',\r\n value: '🁌',\r\n codepoint: 127052,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-00',\r\n value: '🁍',\r\n codepoint: 127053,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-01',\r\n value: '🁎',\r\n codepoint: 127054,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-02',\r\n value: '🁏',\r\n codepoint: 127055,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-03',\r\n value: '🁐',\r\n codepoint: 127056,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-04',\r\n value: '🁑',\r\n codepoint: 127057,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-05',\r\n value: '🁒',\r\n codepoint: 127058,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-04-06',\r\n value: '🁓',\r\n codepoint: 127059,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-00',\r\n value: '🁔',\r\n codepoint: 127060,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-01',\r\n value: '🁕',\r\n codepoint: 127061,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-02',\r\n value: '🁖',\r\n codepoint: 127062,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-03',\r\n value: '🁗',\r\n codepoint: 127063,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-04',\r\n value: '🁘',\r\n codepoint: 127064,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-05',\r\n value: '🁙',\r\n codepoint: 127065,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-05-06',\r\n value: '🁚',\r\n codepoint: 127066,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-00',\r\n value: '🁛',\r\n codepoint: 127067,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-01',\r\n value: '🁜',\r\n codepoint: 127068,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-02',\r\n value: '🁝',\r\n codepoint: 127069,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-03',\r\n value: '🁞',\r\n codepoint: 127070,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-04',\r\n value: '🁟',\r\n codepoint: 127071,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-05',\r\n value: '🁠',\r\n codepoint: 127072,\r\n },\r\n {\r\n name: 'DOMINO TILE HORIZONTAL-06-06',\r\n value: '🁡',\r\n codepoint: 127073,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL BACK',\r\n value: '🁢',\r\n codepoint: 127074,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-00',\r\n value: '🁣',\r\n codepoint: 127075,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-01',\r\n value: '🁤',\r\n codepoint: 127076,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-02',\r\n value: '🁥',\r\n codepoint: 127077,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-03',\r\n value: '🁦',\r\n codepoint: 127078,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-04',\r\n value: '🁧',\r\n codepoint: 127079,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-05',\r\n value: '🁨',\r\n codepoint: 127080,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-00-06',\r\n value: '🁩',\r\n codepoint: 127081,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-00',\r\n value: '🁪',\r\n codepoint: 127082,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-01',\r\n value: '🁫',\r\n codepoint: 127083,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-02',\r\n value: '🁬',\r\n codepoint: 127084,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-03',\r\n value: '🁭',\r\n codepoint: 127085,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-04',\r\n value: '🁮',\r\n codepoint: 127086,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-05',\r\n value: '🁯',\r\n codepoint: 127087,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-01-06',\r\n value: '🁰',\r\n codepoint: 127088,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-00',\r\n value: '🁱',\r\n codepoint: 127089,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-01',\r\n value: '🁲',\r\n codepoint: 127090,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-02',\r\n value: '🁳',\r\n codepoint: 127091,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-03',\r\n value: '🁴',\r\n codepoint: 127092,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-04',\r\n value: '🁵',\r\n codepoint: 127093,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-05',\r\n value: '🁶',\r\n codepoint: 127094,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-02-06',\r\n value: '🁷',\r\n codepoint: 127095,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-00',\r\n value: '🁸',\r\n codepoint: 127096,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-01',\r\n value: '🁹',\r\n codepoint: 127097,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-02',\r\n value: '🁺',\r\n codepoint: 127098,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-03',\r\n value: '🁻',\r\n codepoint: 127099,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-04',\r\n value: '🁼',\r\n codepoint: 127100,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-05',\r\n value: '🁽',\r\n codepoint: 127101,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-03-06',\r\n value: '🁾',\r\n codepoint: 127102,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-00',\r\n value: '🁿',\r\n codepoint: 127103,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-01',\r\n value: '🂀',\r\n codepoint: 127104,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-02',\r\n value: '🂁',\r\n codepoint: 127105,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-03',\r\n value: '🂂',\r\n codepoint: 127106,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-04',\r\n value: '🂃',\r\n codepoint: 127107,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-05',\r\n value: '🂄',\r\n codepoint: 127108,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-04-06',\r\n value: '🂅',\r\n codepoint: 127109,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-00',\r\n value: '🂆',\r\n codepoint: 127110,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-01',\r\n value: '🂇',\r\n codepoint: 127111,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-02',\r\n value: '🂈',\r\n codepoint: 127112,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-03',\r\n value: '🂉',\r\n codepoint: 127113,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-04',\r\n value: '🂊',\r\n codepoint: 127114,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-05',\r\n value: '🂋',\r\n codepoint: 127115,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-05-06',\r\n value: '🂌',\r\n codepoint: 127116,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-00',\r\n value: '🂍',\r\n codepoint: 127117,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-01',\r\n value: '🂎',\r\n codepoint: 127118,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-02',\r\n value: '🂏',\r\n codepoint: 127119,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-03',\r\n value: '🂐',\r\n codepoint: 127120,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-04',\r\n value: '🂑',\r\n codepoint: 127121,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-05',\r\n value: '🂒',\r\n codepoint: 127122,\r\n },\r\n {\r\n name: 'DOMINO TILE VERTICAL-06-06',\r\n value: '🂓',\r\n codepoint: 127123,\r\n },\r\n {\r\n name: 'PLAYING CARD BACK',\r\n value: '🂠',\r\n codepoint: 127136,\r\n },\r\n {\r\n name: 'PLAYING CARD ACE OF SPADES',\r\n value: '🂡',\r\n codepoint: 127137,\r\n },\r\n {\r\n name: 'PLAYING CARD TWO OF SPADES',\r\n value: '🂢',\r\n codepoint: 127138,\r\n },\r\n {\r\n name: 'PLAYING CARD THREE OF SPADES',\r\n value: '🂣',\r\n codepoint: 127139,\r\n },\r\n {\r\n name: 'PLAYING CARD FOUR OF SPADES',\r\n value: '🂤',\r\n codepoint: 127140,\r\n },\r\n {\r\n name: 'PLAYING CARD FIVE OF SPADES',\r\n value: '🂥',\r\n codepoint: 127141,\r\n },\r\n {\r\n name: 'PLAYING CARD SIX OF SPADES',\r\n value: '🂦',\r\n codepoint: 127142,\r\n },\r\n {\r\n name: 'PLAYING CARD SEVEN OF SPADES',\r\n value: '🂧',\r\n codepoint: 127143,\r\n },\r\n {\r\n name: 'PLAYING CARD EIGHT OF SPADES',\r\n value: '🂨',\r\n codepoint: 127144,\r\n },\r\n {\r\n name: 'PLAYING CARD NINE OF SPADES',\r\n value: '🂩',\r\n codepoint: 127145,\r\n },\r\n {\r\n name: 'PLAYING CARD TEN OF SPADES',\r\n value: '🂪',\r\n codepoint: 127146,\r\n },\r\n {\r\n name: 'PLAYING CARD JACK OF SPADES',\r\n value: '🂫',\r\n codepoint: 127147,\r\n },\r\n {\r\n name: 'PLAYING CARD KNIGHT OF SPADES',\r\n value: '🂬',\r\n codepoint: 127148,\r\n },\r\n {\r\n name: 'PLAYING CARD QUEEN OF SPADES',\r\n value: '🂭',\r\n codepoint: 127149,\r\n },\r\n {\r\n name: 'PLAYING CARD KING OF SPADES',\r\n value: '🂮',\r\n codepoint: 127150,\r\n },\r\n {\r\n name: 'PLAYING CARD ACE OF HEARTS',\r\n value: '🂱',\r\n codepoint: 127153,\r\n },\r\n {\r\n name: 'PLAYING CARD TWO OF HEARTS',\r\n value: '🂲',\r\n codepoint: 127154,\r\n },\r\n {\r\n name: 'PLAYING CARD THREE OF HEARTS',\r\n value: '🂳',\r\n codepoint: 127155,\r\n },\r\n {\r\n name: 'PLAYING CARD FOUR OF HEARTS',\r\n value: '🂴',\r\n codepoint: 127156,\r\n },\r\n {\r\n name: 'PLAYING CARD FIVE OF HEARTS',\r\n value: '🂵',\r\n codepoint: 127157,\r\n },\r\n {\r\n name: 'PLAYING CARD SIX OF HEARTS',\r\n value: '🂶',\r\n codepoint: 127158,\r\n },\r\n {\r\n name: 'PLAYING CARD SEVEN OF HEARTS',\r\n value: '🂷',\r\n codepoint: 127159,\r\n },\r\n {\r\n name: 'PLAYING CARD EIGHT OF HEARTS',\r\n value: '🂸',\r\n codepoint: 127160,\r\n },\r\n {\r\n name: 'PLAYING CARD NINE OF HEARTS',\r\n value: '🂹',\r\n codepoint: 127161,\r\n },\r\n {\r\n name: 'PLAYING CARD TEN OF HEARTS',\r\n value: '🂺',\r\n codepoint: 127162,\r\n },\r\n {\r\n name: 'PLAYING CARD JACK OF HEARTS',\r\n value: '🂻',\r\n codepoint: 127163,\r\n },\r\n {\r\n name: 'PLAYING CARD KNIGHT OF HEARTS',\r\n value: '🂼',\r\n codepoint: 127164,\r\n },\r\n {\r\n name: 'PLAYING CARD QUEEN OF HEARTS',\r\n value: '🂽',\r\n codepoint: 127165,\r\n },\r\n {\r\n name: 'PLAYING CARD KING OF HEARTS',\r\n value: '🂾',\r\n codepoint: 127166,\r\n },\r\n {\r\n name: 'PLAYING CARD ACE OF DIAMONDS',\r\n value: '🃁',\r\n codepoint: 127169,\r\n },\r\n {\r\n name: 'PLAYING CARD TWO OF DIAMONDS',\r\n value: '🃂',\r\n codepoint: 127170,\r\n },\r\n {\r\n name: 'PLAYING CARD THREE OF DIAMONDS',\r\n value: '🃃',\r\n codepoint: 127171,\r\n },\r\n {\r\n name: 'PLAYING CARD FOUR OF DIAMONDS',\r\n value: '🃄',\r\n codepoint: 127172,\r\n },\r\n {\r\n name: 'PLAYING CARD FIVE OF DIAMONDS',\r\n value: '🃅',\r\n codepoint: 127173,\r\n },\r\n {\r\n name: 'PLAYING CARD SIX OF DIAMONDS',\r\n value: '🃆',\r\n codepoint: 127174,\r\n },\r\n {\r\n name: 'PLAYING CARD SEVEN OF DIAMONDS',\r\n value: '🃇',\r\n codepoint: 127175,\r\n },\r\n {\r\n name: 'PLAYING CARD EIGHT OF DIAMONDS',\r\n value: '🃈',\r\n codepoint: 127176,\r\n },\r\n {\r\n name: 'PLAYING CARD NINE OF DIAMONDS',\r\n value: '🃉',\r\n codepoint: 127177,\r\n },\r\n {\r\n name: 'PLAYING CARD TEN OF DIAMONDS',\r\n value: '🃊',\r\n codepoint: 127178,\r\n },\r\n {\r\n name: 'PLAYING CARD JACK OF DIAMONDS',\r\n value: '🃋',\r\n codepoint: 127179,\r\n },\r\n {\r\n name: 'PLAYING CARD KNIGHT OF DIAMONDS',\r\n value: '🃌',\r\n codepoint: 127180,\r\n },\r\n {\r\n name: 'PLAYING CARD QUEEN OF DIAMONDS',\r\n value: '🃍',\r\n codepoint: 127181,\r\n },\r\n {\r\n name: 'PLAYING CARD KING OF DIAMONDS',\r\n value: '🃎',\r\n codepoint: 127182,\r\n },\r\n {\r\n name: 'PLAYING CARD ACE OF CLUBS',\r\n value: '🃑',\r\n codepoint: 127185,\r\n },\r\n {\r\n name: 'PLAYING CARD TWO OF CLUBS',\r\n value: '🃒',\r\n codepoint: 127186,\r\n },\r\n {\r\n name: 'PLAYING CARD THREE OF CLUBS',\r\n value: '🃓',\r\n codepoint: 127187,\r\n },\r\n {\r\n name: 'PLAYING CARD FOUR OF CLUBS',\r\n value: '🃔',\r\n codepoint: 127188,\r\n },\r\n {\r\n name: 'PLAYING CARD FIVE OF CLUBS',\r\n value: '🃕',\r\n codepoint: 127189,\r\n },\r\n {\r\n name: 'PLAYING CARD SIX OF CLUBS',\r\n value: '🃖',\r\n codepoint: 127190,\r\n },\r\n {\r\n name: 'PLAYING CARD SEVEN OF CLUBS',\r\n value: '🃗',\r\n codepoint: 127191,\r\n },\r\n {\r\n name: 'PLAYING CARD EIGHT OF CLUBS',\r\n value: '🃘',\r\n codepoint: 127192,\r\n },\r\n {\r\n name: 'PLAYING CARD NINE OF CLUBS',\r\n value: '🃙',\r\n codepoint: 127193,\r\n },\r\n {\r\n name: 'PLAYING CARD TEN OF CLUBS',\r\n value: '🃚',\r\n codepoint: 127194,\r\n },\r\n {\r\n name: 'PLAYING CARD JACK OF CLUBS',\r\n value: '🃛',\r\n codepoint: 127195,\r\n },\r\n {\r\n name: 'PLAYING CARD KNIGHT OF CLUBS',\r\n value: '🃜',\r\n codepoint: 127196,\r\n },\r\n {\r\n name: 'PLAYING CARD QUEEN OF CLUBS',\r\n value: '🃝',\r\n codepoint: 127197,\r\n },\r\n {\r\n name: 'PLAYING CARD KING OF CLUBS',\r\n value: '🃞',\r\n codepoint: 127198,\r\n },\r\n {\r\n name: 'PLAYING CARD WHITE JOKER',\r\n value: '🃟',\r\n codepoint: 127199,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Music',\r\n symbols: [\r\n {\r\n name: 'MUSICAL SYMBOL SINGLE BARLINE',\r\n value: '𝄀',\r\n codepoint: 119040,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL DOUBLE BARLINE',\r\n value: '𝄁',\r\n codepoint: 119041,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL FINAL BARLINE',\r\n value: '𝄂',\r\n codepoint: 119042,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL REVERSE FINAL BARLINE',\r\n value: '𝄃',\r\n codepoint: 119043,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL DASHED BARLINE',\r\n value: '𝄄',\r\n codepoint: 119044,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL SHORT BARLINE',\r\n value: '𝄅',\r\n codepoint: 119045,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL LEFT REPEAT SIGN',\r\n value: '𝄆',\r\n codepoint: 119046,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL RIGHT REPEAT SIGN',\r\n value: '𝄇',\r\n codepoint: 119047,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL REPEAT DOTS',\r\n value: '𝄈',\r\n codepoint: 119048,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL FERMATA',\r\n value: '𝄐',\r\n codepoint: 119056,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL FERMATA BELOW',\r\n value: '𝄑',\r\n codepoint: 119057,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL BREATH MARK',\r\n value: '𝄒',\r\n codepoint: 119058,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL G CLEF',\r\n value: '𝄞',\r\n codepoint: 119070,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL C CLEF',\r\n value: '𝄡',\r\n codepoint: 119073,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL F CLEF',\r\n value: '𝄢',\r\n codepoint: 119074,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL DOUBLE SHARP',\r\n value: '𝄪',\r\n codepoint: 119082,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL DOUBLE FLAT',\r\n value: '𝄫',\r\n codepoint: 119083,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL CRESCENDO',\r\n value: '𝆒',\r\n codepoint: 119186,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL DECRESCENDO',\r\n value: '𝆓',\r\n codepoint: 119187,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL HAUPTSTIMME',\r\n value: '𝆦',\r\n codepoint: 119206,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL NEBENSTIMME',\r\n value: '𝆧',\r\n codepoint: 119207,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL END OF STIMME',\r\n value: '𝆨',\r\n codepoint: 119208,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA',\r\n value: '𝇇',\r\n codepoint: 119239,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA',\r\n value: '𝇈',\r\n codepoint: 119240,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1',\r\n value: '𝇉',\r\n codepoint: 119241,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA',\r\n value: '𝇊',\r\n codepoint: 119242,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA',\r\n value: '𝇋',\r\n codepoint: 119243,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1',\r\n value: '𝇌',\r\n codepoint: 119244,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2',\r\n value: '𝇍',\r\n codepoint: 119245,\r\n },\r\n {\r\n name: 'MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3',\r\n value: '𝇎',\r\n codepoint: 119246,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Geometric Shapes',\r\n symbols: [\r\n {\r\n name: 'BLACK SQUARE',\r\n value: '■',\r\n codepoint: 9632,\r\n },\r\n {\r\n name: 'WHITE SQUARE',\r\n value: '□',\r\n codepoint: 9633,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH ROUNDED CORNERS',\r\n value: '▢',\r\n codepoint: 9634,\r\n },\r\n {\r\n name: 'WHITE SQUARE CONTAINING BLACK SMALL SQUARE',\r\n value: '▣',\r\n codepoint: 9635,\r\n },\r\n {\r\n name: 'SQUARE WITH HORIZONTAL FILL',\r\n value: '▤',\r\n codepoint: 9636,\r\n },\r\n {\r\n name: 'SQUARE WITH VERTICAL FILL',\r\n value: '▥',\r\n codepoint: 9637,\r\n },\r\n {\r\n name: 'SQUARE WITH ORTHOGONAL CROSSHATCH FILL',\r\n value: '▦',\r\n codepoint: 9638,\r\n },\r\n {\r\n name: 'SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL',\r\n value: '▧',\r\n codepoint: 9639,\r\n },\r\n {\r\n name: 'SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL',\r\n value: '▨',\r\n codepoint: 9640,\r\n },\r\n {\r\n name: 'SQUARE WITH DIAGONAL CROSSHATCH FILL',\r\n value: '▩',\r\n codepoint: 9641,\r\n },\r\n {\r\n name: 'BLACK RECTANGLE',\r\n value: '▬',\r\n codepoint: 9644,\r\n },\r\n {\r\n name: 'WHITE RECTANGLE',\r\n value: '▭',\r\n codepoint: 9645,\r\n },\r\n {\r\n name: 'BLACK VERTICAL RECTANGLE',\r\n value: '▮',\r\n codepoint: 9646,\r\n },\r\n {\r\n name: 'WHITE VERTICAL RECTANGLE',\r\n value: '▯',\r\n codepoint: 9647,\r\n },\r\n {\r\n name: 'BLACK PARALLELOGRAM',\r\n value: '▰',\r\n codepoint: 9648,\r\n },\r\n {\r\n name: 'WHITE PARALLELOGRAM',\r\n value: '▱',\r\n codepoint: 9649,\r\n },\r\n {\r\n name: 'BLACK UP-POINTING TRIANGLE',\r\n value: '▲',\r\n codepoint: 9650,\r\n },\r\n {\r\n name: 'WHITE UP-POINTING TRIANGLE',\r\n value: '△',\r\n codepoint: 9651,\r\n },\r\n {\r\n name: 'BLACK UP-POINTING SMALL TRIANGLE',\r\n value: '▴',\r\n codepoint: 9652,\r\n },\r\n {\r\n name: 'WHITE UP-POINTING SMALL TRIANGLE',\r\n value: '▵',\r\n codepoint: 9653,\r\n },\r\n {\r\n name: 'WHITE RIGHT-POINTING TRIANGLE',\r\n value: '▷',\r\n codepoint: 9655,\r\n },\r\n {\r\n name: 'BLACK RIGHT-POINTING SMALL TRIANGLE',\r\n value: '▸',\r\n codepoint: 9656,\r\n },\r\n {\r\n name: 'WHITE RIGHT-POINTING SMALL TRIANGLE',\r\n value: '▹',\r\n codepoint: 9657,\r\n },\r\n {\r\n name: 'BLACK RIGHT-POINTING POINTER',\r\n value: '►',\r\n codepoint: 9658,\r\n },\r\n {\r\n name: 'WHITE RIGHT-POINTING POINTER',\r\n value: '▻',\r\n codepoint: 9659,\r\n },\r\n {\r\n name: 'BLACK DOWN-POINTING TRIANGLE',\r\n value: '▼',\r\n codepoint: 9660,\r\n },\r\n {\r\n name: 'WHITE DOWN-POINTING TRIANGLE',\r\n value: '▽',\r\n codepoint: 9661,\r\n },\r\n {\r\n name: 'BLACK DOWN-POINTING SMALL TRIANGLE',\r\n value: '▾',\r\n codepoint: 9662,\r\n },\r\n {\r\n name: 'WHITE DOWN-POINTING SMALL TRIANGLE',\r\n value: '▿',\r\n codepoint: 9663,\r\n },\r\n {\r\n name: 'WHITE LEFT-POINTING TRIANGLE',\r\n value: '◁',\r\n codepoint: 9665,\r\n },\r\n {\r\n name: 'BLACK LEFT-POINTING SMALL TRIANGLE',\r\n value: '◂',\r\n codepoint: 9666,\r\n },\r\n {\r\n name: 'WHITE LEFT-POINTING SMALL TRIANGLE',\r\n value: '◃',\r\n codepoint: 9667,\r\n },\r\n {\r\n name: 'BLACK LEFT-POINTING POINTER',\r\n value: '◄',\r\n codepoint: 9668,\r\n },\r\n {\r\n name: 'WHITE LEFT-POINTING POINTER',\r\n value: '◅',\r\n codepoint: 9669,\r\n },\r\n {\r\n name: 'BLACK DIAMOND',\r\n value: '◆',\r\n codepoint: 9670,\r\n },\r\n {\r\n name: 'WHITE DIAMOND',\r\n value: '◇',\r\n codepoint: 9671,\r\n },\r\n {\r\n name: 'WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND',\r\n value: '◈',\r\n codepoint: 9672,\r\n },\r\n {\r\n name: 'FISHEYE',\r\n value: '◉',\r\n codepoint: 9673,\r\n },\r\n {\r\n name: 'LOZENGE',\r\n value: '◊',\r\n codepoint: 9674,\r\n },\r\n {\r\n name: 'WHITE CIRCLE',\r\n value: '○',\r\n codepoint: 9675,\r\n },\r\n {\r\n name: 'DOTTED CIRCLE',\r\n value: '◌',\r\n codepoint: 9676,\r\n },\r\n {\r\n name: 'CIRCLE WITH VERTICAL FILL',\r\n value: '◍',\r\n codepoint: 9677,\r\n },\r\n {\r\n name: 'BULLSEYE',\r\n value: '◎',\r\n codepoint: 9678,\r\n },\r\n {\r\n name: 'BLACK CIRCLE',\r\n value: '●',\r\n codepoint: 9679,\r\n },\r\n {\r\n name: 'CIRCLE WITH LEFT HALF BLACK',\r\n value: '◐',\r\n codepoint: 9680,\r\n },\r\n {\r\n name: 'CIRCLE WITH RIGHT HALF BLACK',\r\n value: '◑',\r\n codepoint: 9681,\r\n },\r\n {\r\n name: 'CIRCLE WITH LOWER HALF BLACK',\r\n value: '◒',\r\n codepoint: 9682,\r\n },\r\n {\r\n name: 'CIRCLE WITH UPPER HALF BLACK',\r\n value: '◓',\r\n codepoint: 9683,\r\n },\r\n {\r\n name: 'CIRCLE WITH UPPER RIGHT QUADRANT BLACK',\r\n value: '◔',\r\n codepoint: 9684,\r\n },\r\n {\r\n name: 'CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK',\r\n value: '◕',\r\n codepoint: 9685,\r\n },\r\n {\r\n name: 'LEFT HALF BLACK CIRCLE',\r\n value: '◖',\r\n codepoint: 9686,\r\n },\r\n {\r\n name: 'RIGHT HALF BLACK CIRCLE',\r\n value: '◗',\r\n codepoint: 9687,\r\n },\r\n {\r\n name: 'INVERSE BULLET',\r\n value: '◘',\r\n codepoint: 9688,\r\n },\r\n {\r\n name: 'INVERSE WHITE CIRCLE',\r\n value: '◙',\r\n codepoint: 9689,\r\n },\r\n {\r\n name: 'UPPER HALF INVERSE WHITE CIRCLE',\r\n value: '◚',\r\n codepoint: 9690,\r\n },\r\n {\r\n name: 'LOWER HALF INVERSE WHITE CIRCLE',\r\n value: '◛',\r\n codepoint: 9691,\r\n },\r\n {\r\n name: 'UPPER LEFT QUADRANT CIRCULAR ARC',\r\n value: '◜',\r\n codepoint: 9692,\r\n },\r\n {\r\n name: 'UPPER RIGHT QUADRANT CIRCULAR ARC',\r\n value: '◝',\r\n codepoint: 9693,\r\n },\r\n {\r\n name: 'LOWER RIGHT QUADRANT CIRCULAR ARC',\r\n value: '◞',\r\n codepoint: 9694,\r\n },\r\n {\r\n name: 'LOWER LEFT QUADRANT CIRCULAR ARC',\r\n value: '◟',\r\n codepoint: 9695,\r\n },\r\n {\r\n name: 'UPPER HALF CIRCLE',\r\n value: '◠',\r\n codepoint: 9696,\r\n },\r\n {\r\n name: 'LOWER HALF CIRCLE',\r\n value: '◡',\r\n codepoint: 9697,\r\n },\r\n {\r\n name: 'BLACK LOWER RIGHT TRIANGLE',\r\n value: '◢',\r\n codepoint: 9698,\r\n },\r\n {\r\n name: 'BLACK LOWER LEFT TRIANGLE',\r\n value: '◣',\r\n codepoint: 9699,\r\n },\r\n {\r\n name: 'BLACK UPPER LEFT TRIANGLE',\r\n value: '◤',\r\n codepoint: 9700,\r\n },\r\n {\r\n name: 'BLACK UPPER RIGHT TRIANGLE',\r\n value: '◥',\r\n codepoint: 9701,\r\n },\r\n {\r\n name: 'WHITE BULLET',\r\n value: '◦',\r\n codepoint: 9702,\r\n },\r\n {\r\n name: 'SQUARE WITH LEFT HALF BLACK',\r\n value: '◧',\r\n codepoint: 9703,\r\n },\r\n {\r\n name: 'SQUARE WITH RIGHT HALF BLACK',\r\n value: '◨',\r\n codepoint: 9704,\r\n },\r\n {\r\n name: 'SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK',\r\n value: '◩',\r\n codepoint: 9705,\r\n },\r\n {\r\n name: 'SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK',\r\n value: '◪',\r\n codepoint: 9706,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH VERTICAL BISECTING LINE',\r\n value: '◫',\r\n codepoint: 9707,\r\n },\r\n {\r\n name: 'WHITE UP-POINTING TRIANGLE WITH DOT',\r\n value: '◬',\r\n codepoint: 9708,\r\n },\r\n {\r\n name: 'UP-POINTING TRIANGLE WITH LEFT HALF BLACK',\r\n value: '◭',\r\n codepoint: 9709,\r\n },\r\n {\r\n name: 'UP-POINTING TRIANGLE WITH RIGHT HALF BLACK',\r\n value: '◮',\r\n codepoint: 9710,\r\n },\r\n {\r\n name: 'LARGE CIRCLE',\r\n value: '◯',\r\n codepoint: 9711,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH UPPER LEFT QUADRANT',\r\n value: '◰',\r\n codepoint: 9712,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH LOWER LEFT QUADRANT',\r\n value: '◱',\r\n codepoint: 9713,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH LOWER RIGHT QUADRANT',\r\n value: '◲',\r\n codepoint: 9714,\r\n },\r\n {\r\n name: 'WHITE SQUARE WITH UPPER RIGHT QUADRANT',\r\n value: '◳',\r\n codepoint: 9715,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH UPPER LEFT QUADRANT',\r\n value: '◴',\r\n codepoint: 9716,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH LOWER LEFT QUADRANT',\r\n value: '◵',\r\n codepoint: 9717,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH LOWER RIGHT QUADRANT',\r\n value: '◶',\r\n codepoint: 9718,\r\n },\r\n {\r\n name: 'WHITE CIRCLE WITH UPPER RIGHT QUADRANT',\r\n value: '◷',\r\n codepoint: 9719,\r\n },\r\n {\r\n name: 'UPPER LEFT TRIANGLE',\r\n value: '◸',\r\n codepoint: 9720,\r\n },\r\n {\r\n name: 'UPPER RIGHT TRIANGLE',\r\n value: '◹',\r\n codepoint: 9721,\r\n },\r\n {\r\n name: 'LOWER LEFT TRIANGLE',\r\n value: '◺',\r\n codepoint: 9722,\r\n },\r\n {\r\n name: 'LOWER RIGHT TRIANGLE',\r\n value: '◿',\r\n codepoint: 9727,\r\n },\r\n ],\r\n },\r\n {\r\n name: 'Ideographic',\r\n symbols: [\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT',\r\n value: '⿰',\r\n codepoint: 12272,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW',\r\n value: '⿱',\r\n codepoint: 12273,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT',\r\n value: '⿲',\r\n codepoint: 12274,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW',\r\n value: '⿳',\r\n codepoint: 12275,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND',\r\n value: '⿴',\r\n codepoint: 12276,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE',\r\n value: '⿵',\r\n codepoint: 12277,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW',\r\n value: '⿶',\r\n codepoint: 12278,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT',\r\n value: '⿷',\r\n codepoint: 12279,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT',\r\n value: '⿸',\r\n codepoint: 12280,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT',\r\n value: '⿹',\r\n codepoint: 12281,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT',\r\n value: '⿺',\r\n codepoint: 12282,\r\n },\r\n {\r\n name: 'IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID',\r\n value: '⿻',\r\n codepoint: 12283,\r\n },\r\n ],\r\n },\r\n];\r\n\r\nexport default symbols;\r\n","/*\r\n * insert_symbol.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey, Transaction, EditorState } from 'prosemirror-state';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { parseCodepoint } from '../../api/unicode';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nimport { performInsertSymbol, InsertSymbolPlugin } from './insert_symbol-plugin';\r\nimport { SymbolDataProvider, SymbolCharacterGroup, SymbolCharacter } from './insert_symbol-dataprovider';\r\n\r\nimport symbolData from './symbols';\r\n\r\nconst key = new PluginKey<boolean>('insert-symbol');\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { ui, events } = context;\r\n return {\r\n commands: () => {\r\n return [new ProsemirrorCommand(EditorCommandId.Symbol, [], performInsertSymbol(key), symbolOmniInsert(ui))];\r\n },\r\n plugins: () => {\r\n return [new InsertSymbolPlugin(key, new UnicodeSymbolDataProvider(), ui, events)];\r\n },\r\n };\r\n};\r\n\r\nfunction symbolOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Symbol...'),\r\n keywords: ['unicode', 'special', 'character'],\r\n description: ui.context.translateText('Unicode symbol / special character'),\r\n group: OmniInsertGroup.Content,\r\n priority: 6,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.symbol_dark : ui.images.omni_insert?.symbol),\r\n };\r\n}\r\n\r\nclass UnicodeSymbolDataProvider implements SymbolDataProvider {\r\n constructor() {\r\n this.symbolGroups = symbolData.sort((a, b) => a.name.localeCompare(b.name));\r\n }\r\n private readonly symbolGroups: SymbolCharacterGroup[];\r\n\r\n public insertSymbolTransaction(\r\n symbolCharacter: SymbolCharacter,\r\n _searchTerm: string,\r\n state: EditorState,\r\n ): Transaction {\r\n const tr = state.tr;\r\n tr.insertText(symbolCharacter.value);\r\n return tr;\r\n }\r\n\r\n public readonly filterPlaceholderHint = 'keyword or codepoint';\r\n\r\n public readonly symbolPreviewStyle: React.CSSProperties = { fontSize: '28px' } as React.CSSProperties;\r\n\r\n public symbolGroupNames(): string[] {\r\n return [kCategoryAll, ...this.symbolGroups.map(symbolGroup => symbolGroup.name)];\r\n }\r\n\r\n public getSymbols(groupName: string | undefined) {\r\n if (groupName === undefined || groupName === kCategoryAll) {\r\n return this.symbolGroups\r\n .map(symbolGroup => symbolGroup.symbols)\r\n .flat()\r\n .sort((a, b) => a.codepoint! - b.codepoint!);\r\n }\r\n return this.symbolGroups\r\n .filter(symbolGroup => groupName === symbolGroup.name)\r\n .map(symbolGroup => symbolGroup.symbols)\r\n .flat();\r\n }\r\n\r\n public filterSymbols(filterText: string, symbols: SymbolCharacter[]): SymbolCharacter[] {\r\n const codepoint = parseCodepoint(filterText);\r\n const filteredSymbols = symbols.filter(symbol => {\r\n // Search by name\r\n if (symbol.name.includes(filterText.toUpperCase())) {\r\n return true;\r\n }\r\n\r\n // Search by codepoint\r\n if (codepoint && symbol.codepoint === codepoint) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n if (filteredSymbols.length === 0 && codepoint !== undefined) {\r\n return [\r\n {\r\n name: codepoint.toString(16),\r\n value: String.fromCodePoint(codepoint),\r\n codepoint,\r\n },\r\n ];\r\n }\r\n return filteredSymbols;\r\n }\r\n}\r\nconst kCategoryAll = 'All';\r\n\r\nexport default extension;\r\n","/*\r\n * emoji-completion.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\n\r\nimport { CompletionHandler, CompletionResult, CompletionHeaderProps } from '../../api/completion';\r\nimport { emojis, Emoji, SkinTone, emojiFromChar, emojiForAllSkinTones } from '../../api/emoji';\r\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\r\nimport { nodeForEmoji } from './emoji';\r\n\r\nimport './emoji-completion.css';\r\n\r\nexport function emojiCompletionHandler(ui: EditorUI): CompletionHandler<Emoji> {\r\n return {\r\n id: '95A133E1-968B-4D96-8849-4A325FF02C11',\r\n\r\n completions: emojiCompletions(ui),\r\n\r\n replacement(schema: Schema, emoji: Emoji | null): string | ProsemirrorNode | null {\r\n if (emoji) {\r\n return nodeForEmoji(schema, emoji, emoji.aliases[0]);\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n view: {\r\n component: EmojiView,\r\n key: emoji => emoji.emoji,\r\n width: 200,\r\n hideNoResults: true,\r\n },\r\n };\r\n}\r\n\r\nconst kMaxEmojiCompletions = 20;\r\nconst kEmojiCompletionRegEx = /(^|[^`:]):(\\w{2,})$/;\r\n\r\nfunction emojiCompletions(ui: EditorUI) {\r\n return (text: string, context: EditorState | Transaction): CompletionResult<Emoji> | null => {\r\n // look for requisite text sequence\r\n const match = text.match(kEmojiCompletionRegEx);\r\n if (match) {\r\n // determine insert position and prefix to search for\r\n const prefix = match[2].toLowerCase();\r\n const pos = context.selection.head - prefix.length - 1; // -1 for the leading :\r\n\r\n // scan for completions that match the prefix (truncate as necessary)\r\n const completions: Emoji[] = [];\r\n for (const emoji of emojis(ui.prefs.emojiSkinTone())) {\r\n const alias = emoji.aliases.find(a => a.startsWith(prefix));\r\n if (alias) {\r\n completions.push({\r\n ...emoji,\r\n aliases: [alias],\r\n });\r\n }\r\n if (completions.length >= kMaxEmojiCompletions) {\r\n break;\r\n }\r\n }\r\n\r\n // return result\r\n return {\r\n pos,\r\n token: prefix,\r\n completions: () => Promise.resolve(completions),\r\n };\r\n\r\n // no match\r\n } else {\r\n return null;\r\n }\r\n };\r\n}\r\n\r\nconst EmojiView: React.FC<Emoji> = emoji => {\r\n return (\r\n <div className={'pm-completion-list-item-text pm-emoji-font'}>\r\n {emoji.emoji} :{emoji.aliases[0]}:\r\n </div>\r\n );\r\n};\r\n\r\nexport function emojiSkintonePreferenceCompletionHandler(ui: EditorUI): CompletionHandler<Emoji> {\r\n return {\r\n id: '15E92D42-8006-40F4-8FFD-6526F6A8A7FD',\r\n\r\n completions: emojiSkintonePreferenceCompletions(ui),\r\n\r\n replacement(schema: Schema, emoji: Emoji | null): string | ProsemirrorNode | null {\r\n if (emoji) {\r\n // Save this preference and use it in the future\r\n ui.prefs.setEmojiSkinTone(emoji.skinTone);\r\n\r\n // Emit the emoji of the correct skin tone\r\n return nodeForEmoji(schema, emoji, emoji.aliases[0]);\r\n } else {\r\n // The user didn't select a skintoned emoji (e.g. pressed 'ESC'), so\r\n // just store Default and use that in the future\r\n ui.prefs.setEmojiSkinTone(SkinTone.Default);\r\n\r\n return null;\r\n }\r\n },\r\n\r\n view: {\r\n header: () => ({\r\n component: EmojiSkintonePreferenceHeaderView,\r\n height: kHeaderHeight,\r\n }),\r\n component: EmojiSkintonePreferenceView,\r\n key: pref => pref.skinTone,\r\n width: kCellWidth,\r\n height: kCellWidth,\r\n horizontal: true,\r\n horizontalItemWidths: [55],\r\n },\r\n };\r\n}\r\n\r\nconst kCellWidth = 40;\r\nconst kHeaderHeight = 20;\r\n\r\nfunction emojiSkintonePreferenceCompletions(ui: EditorUI) {\r\n return (_text: string, context: EditorState | Transaction): CompletionResult<Emoji> | null => {\r\n // The user has set a preference for skin tone\r\n if (ui.prefs.emojiSkinTone() !== SkinTone.None) {\r\n return null;\r\n }\r\n\r\n const range = getMarkRange(context.doc.resolve(context.selection.head - 1), context.doc.type.schema.marks.emoji);\r\n if (!range) {\r\n return null;\r\n }\r\n\r\n const emojiText = context.doc.textBetween(range.from, range.to);\r\n\r\n // If an attribute to suppress the prompt was explicitly set, don't prompt\r\n // the user for a skin tone\r\n const emojiAttrs = getMarkAttrs(context.doc, range, context.doc.type.schema.marks.emoji);\r\n if (!emojiAttrs.prompt) {\r\n return null;\r\n }\r\n const emoji = emojiFromChar(emojiText);\r\n\r\n // If this is an emoji that doesn't support skin tones just return\r\n if (!emoji?.supportsSkinTone) {\r\n return null;\r\n }\r\n\r\n return {\r\n pos: range.from,\r\n token: emojiText,\r\n completions: () => Promise.resolve(emojiForAllSkinTones(emoji)),\r\n };\r\n };\r\n}\r\n\r\nconst EmojiSkintonePreferenceHeaderView: React.FC<CompletionHeaderProps> = props => {\r\n return (\r\n <div className={'pm-completion-emoji-cell-header pm-light-text-color'}>\r\n {props.ui.context.translateText('Choose preferred skin tone:')}\r\n </div>\r\n );\r\n};\r\n\r\n// use outline to apply border as a separator\r\nconst EmojiSkintonePreferenceView: React.FC<Emoji> = emoji => {\r\n return <div className=\"pm-completion-list-item-text pm-completion-emoji-cell\">{emoji.emoji}</div>;\r\n};\r\n","/*\r\n * emoji.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment, Node as ProsemirrorNode, Attrs } from 'prosemirror-model';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { PandocOutput, PandocToken, PandocTokenType, ProsemirrorWriter } from '../../api/pandoc';\r\nimport { pandocAttrReadAST } from '../../api/pandoc_attr';\r\nimport { fragmentText } from '../../api/fragment';\r\n\r\nimport { FixupContext } from '../../api/fixup';\r\nimport { MarkTransaction } from '../../api/transaction';\r\nimport { mergedTextNodes } from '../../api/text';\r\nimport {\r\n emojis,\r\n emojiFromAlias,\r\n emojiFromChar,\r\n emojiForAllSkinTones,\r\n Emoji,\r\n emojiWithSkinTonePreference,\r\n kEmojiAttr,\r\n kEmojiContent,\r\n} from '../../api/emoji';\r\nimport { emojiCompletionHandler, emojiSkintonePreferenceCompletionHandler } from './emoji-completion';\r\nimport { domAttrNoSpelling, getMarkAttrs } from '../../api/mark';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'emoji',\r\n noSpelling: true,\r\n spec: {\r\n inclusive: false,\r\n noInputRules: true,\r\n attrs: {\r\n emojihint: {},\r\n prompt: { default: true },\r\n },\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='emoji']\",\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n emojihint: el.getAttribute('data-emojihint'),\r\n prompt: el.getAttribute('data-emojiprompt') || false,\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(mark: Mark) {\r\n return [\r\n 'span',\r\n domAttrNoSpelling({\r\n class: 'emoji pm-emoji-font',\r\n title: ':' + mark.attrs.emojihint + ':',\r\n 'data-emojihint': mark.attrs.emojihint,\r\n 'data-emojiprompt': mark.attrs.prompt,\r\n }),\r\n ];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Span,\r\n match: (tok: PandocToken) => {\r\n const attrs = pandocAttrReadAST(tok, kEmojiAttr);\r\n return attrs.keyvalue.length > 0 && attrs.keyvalue[0][0] === 'data-emoji';\r\n },\r\n handler: (schema: Schema) => (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n const attrs = pandocAttrReadAST(tok, kEmojiAttr);\r\n const emojihint = attrs.keyvalue[0][1];\r\n const emojiMark = schema.marks.emoji.create({ emojihint });\r\n writer.openMark(emojiMark);\r\n const emojiChar = tok.c[kEmojiContent][0].c;\r\n writer.writeText(emojiChar);\r\n writer.closeMark(emojiMark);\r\n },\r\n },\r\n ],\r\n writer: {\r\n priority: 2,\r\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\r\n // look for a matching emoji\r\n const char = fragmentText(parent);\r\n const emoji = emojiFromChar(char);\r\n if (emoji) {\r\n output.writeToken(PandocTokenType.Span, () => {\r\n // resolve which alias to use\r\n let alias = emoji.aliases[0];\r\n if (emoji.aliases.length > 1) {\r\n if (emoji.aliases.includes(mark.attrs.emojihint)) {\r\n alias = mark.attrs.emojihint;\r\n }\r\n }\r\n output.writeAttr('', ['emoji'], [['data-emoji', alias]]);\r\n output.writeArray(() => {\r\n output.writeText(emoji.emojiRaw);\r\n });\r\n });\r\n } else {\r\n output.writeInlines(parent);\r\n }\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n inputRules: () => {\r\n return [\r\n new InputRule(/(^|[^`]):(\\w+):$/, (state: EditorState, match: string[], start: number, end: number) => {\r\n const emojiName = match[2];\r\n const emoji = emojiFromAlias(emojiName.toLowerCase());\r\n if (emoji) {\r\n const emojiWithSkinTone = emojiWithSkinTonePreference(emoji, ui.prefs.emojiSkinTone());\r\n const schema = state.schema;\r\n const tr = state.tr;\r\n tr.delete(start + match[1].length, end);\r\n tr.replaceSelectionWith(nodeForEmoji(schema, emojiWithSkinTone, emojiName), false);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n }),\r\n ];\r\n },\r\n\r\n completionHandlers: () => [emojiCompletionHandler(ui), emojiSkintonePreferenceCompletionHandler(ui)],\r\n\r\n fixups: (schema: Schema) => {\r\n \r\n // Ensure that emojis are marked properly in the AST when the underying AST supports emoji \r\n // abbreviations (e.g. `:smile:`). Note that if these abbreviations are not supported its \r\n // find to leave emjois as raw characters. It would be harmless to do this when Pandoc isn't\r\n // marking up emojis, but we have found that these fixups are extremely expensive (e.g.\r\n // cause the load time of the Pandoc manual to take 3 seconds longer on an M2 MacBook).\r\n // This is a performance win for nearly all cases b/c Pandoc does not enable emjoi \r\n // abbreviations by default (they are enabled for gfm though)\r\n if (pandocExtensions.emoji) {\r\n return [\r\n (tr: Transaction, fixupContext: FixupContext) => {\r\n // only apply on save and load\r\n if (![FixupContext.Save, FixupContext.Load].includes(fixupContext)) {\r\n return tr;\r\n }\r\n \r\n // create mark transation wrapper\r\n const markTr = new MarkTransaction(tr);\r\n \r\n const textNodes = mergedTextNodes(\r\n markTr.doc,\r\n (_node: ProsemirrorNode, _pos: number, parentNode: ProsemirrorNode | null) =>\r\n !!(parentNode && parentNode.type.allowsMarkType(schema.marks.emoji))\r\n );\r\n \r\n textNodes.forEach(textNode => {\r\n // Since emoji can be composed of multiple characters (including\r\n // other emoji), we always need to prefer the longest match when inserting\r\n // a mark for any given starting position.\r\n \r\n // Find the possible emoji at each position in this text node\r\n const possibleMarks = new Map<number, Array<{ to: number; emoji: Emoji }>>();\r\n for (const emoji of emojis(ui.prefs.emojiSkinTone())) {\r\n emojiForAllSkinTones(emoji).forEach(skinToneEmoji => {\r\n let charLoc = textNode.text.indexOf(skinToneEmoji.emoji);\r\n while (charLoc !== -1) {\r\n const from = textNode.pos + charLoc;\r\n const to = from + skinToneEmoji.emoji.length;\r\n possibleMarks.set(from, (possibleMarks.get(from) || []).concat({ to, emoji: skinToneEmoji }));\r\n charLoc = textNode.text.indexOf(skinToneEmoji.emoji, charLoc + 1);\r\n }\r\n });\r\n }\r\n \r\n // For each position that has emoji, use the longest emoji match as the\r\n // emoji to be marked.\r\n possibleMarks.forEach((possibleEmojis, markFrom) => {\r\n const orderedEmojis = possibleEmojis.sort((a, b) => b.to - a.to);\r\n const to = orderedEmojis[0].to;\r\n const emoji = orderedEmojis[0].emoji;\r\n \r\n // remove any existing mark (preserving attribues if we do )\r\n let existingAttrs: Attrs | null = null;\r\n if (markTr.doc.rangeHasMark(markFrom, to, schema.marks.emoji)) {\r\n existingAttrs = getMarkAttrs(markTr.doc, { from: markFrom, to }, schema.marks.emoji);\r\n markTr.removeMark(markFrom, to, schema.marks.emoji);\r\n }\r\n \r\n // create a new mark\r\n const mark = schema.marks.emoji.create({\r\n emojihint: emoji.aliases[0],\r\n ...existingAttrs,\r\n });\r\n \r\n // on load we want to cover the entire span\r\n if (fixupContext === FixupContext.Load) {\r\n markTr.addMark(markFrom, to, mark);\r\n // on save we just want the raw emjoi character(s)\r\n } else if (fixupContext === FixupContext.Save) {\r\n markTr.addMark(markFrom, markFrom + emoji.emoji.length, mark);\r\n }\r\n });\r\n });\r\n \r\n return tr;\r\n },\r\n ];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n};\r\n\r\nexport function nodeForEmoji(schema: Schema, emoji: Emoji, hint: string, prompt?: boolean): ProsemirrorNode {\r\n const mark = schema.marks.emoji.create({ emojihint: hint, prompt });\r\n return schema.text(emoji.emoji, [mark]);\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * insert_symbol-emoji-skintone.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { TextButton } from '../../api/widgets/button';\r\n\r\nimport { SkinTone, emojiFromAlias, emojiWithSkinTonePreference, emojiForAllSkinTones, Emoji } from '../../api/emoji';\r\nimport { SymbolPreferencesProps } from './insert_symbol-dataprovider';\r\n\r\nimport './insert_symbol-emoji-skintone.css';\r\n\r\nexport const SymbolEmojiPreferencesPanel = React.forwardRef<HTMLDivElement, SymbolPreferencesProps>((props, ref) => {\r\n // The currently selected skin tone\r\n const [selectedSkinTone, setSelectedSkinTone] = React.useState<SkinTone>(props.prefs.emojiSkinTone());\r\n\r\n // Shows and hides the selection UI\r\n const [selectSkinTone, setSelectSkinTone] = React.useState<boolean>(false);\r\n\r\n const previewEmoji = React.useMemo(() => {\r\n const emojiRaw = emojiFromAlias('hand');\r\n return emojiWithSkinTonePreference(emojiRaw!, selectedSkinTone);\r\n }, [selectedSkinTone]);\r\n\r\n const previewEmojiWithSkinTones = React.useMemo(() => {\r\n return emojiForAllSkinTones(previewEmoji);\r\n }, [previewEmoji]);\r\n\r\n // If the user navigates or changes the symbol, close the picker\r\n React.useEffect(() => {\r\n setSelectSkinTone(false);\r\n }, [props.selectedSymbolIndex]);\r\n\r\n // Support navigation within the panel\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n if (selectSkinTone) {\r\n setSelectedSkinTone(nextSkinTone());\r\n }\r\n break;\r\n\r\n case 'ArrowLeft':\r\n if (selectSkinTone) {\r\n setSelectedSkinTone(previousSkinTone());\r\n }\r\n break;\r\n\r\n case 'Enter':\r\n case ' ':\r\n commitSkinTonePreference(selectedSkinTone);\r\n setSelectSkinTone(!selectSkinTone);\r\n event.preventDefault();\r\n break;\r\n }\r\n };\r\n\r\n const handleClick = (skinTone: SkinTone) => {\r\n return () => {\r\n commitSkinTonePreference(skinTone);\r\n setSelectSkinTone(false);\r\n };\r\n };\r\n\r\n const handleButtonClick = () => {\r\n setSelectSkinTone(true);\r\n };\r\n\r\n function nextSkinTone(): SkinTone {\r\n const index = getCurrentSkinToneIndex();\r\n if (index + 1 < previewEmojiWithSkinTones.length) {\r\n return previewEmojiWithSkinTones[index + 1].skinTone;\r\n }\r\n return selectedSkinTone;\r\n }\r\n\r\n function previousSkinTone(): SkinTone {\r\n const index = getCurrentSkinToneIndex();\r\n if (index - 1 >= 0) {\r\n return previewEmojiWithSkinTones[index - 1].skinTone;\r\n }\r\n return selectedSkinTone;\r\n }\r\n\r\n function getCurrentSkinToneIndex(): number {\r\n const index = previewEmojiWithSkinTones.findIndex(emoji => emoji.skinTone === selectedSkinTone);\r\n return Math.max(Math.min(index, previewEmojiWithSkinTones.length), 0);\r\n }\r\n\r\n function skinToneSelectedClass(emoji: Emoji): string {\r\n if (\r\n selectedSkinTone === emoji.skinTone ||\r\n (selectedSkinTone === SkinTone.None && emoji.skinTone === SkinTone.Default)\r\n ) {\r\n return 'pm-emoji-skintone-picker-item-selected pm-input-button';\r\n }\r\n return '';\r\n }\r\n\r\n function commitSkinTonePreference(skinTone: SkinTone) {\r\n setSelectedSkinTone(skinTone);\r\n props.prefs.setEmojiSkinTone(skinTone);\r\n props.onPreferencesChanged();\r\n }\r\n\r\n const skinTonePicker = () => {\r\n return (\r\n <div>\r\n <div className=\"pm-emoji-skintone-picker pm-input-button\">\r\n {previewEmojiWithSkinTones.map(emoji => {\r\n return (\r\n <div\r\n key={emoji.emoji}\r\n className={`pm-emoji-skintone-picker-item ${skinToneSelectedClass(emoji)}`}\r\n onClick={handleClick(emoji.skinTone)}\r\n >\r\n {emoji.emoji}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n <div className=\"pm-emoji-skintone-picker-label pm-light-text-color\">\r\n {props.context.translateText('Preferred skin tone')}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const currentSkinToneButton = () => {\r\n return (\r\n <TextButton\r\n classes={['pm-text-button', 'pm-input-button', 'pm-emoji-skintone-picker-button', 'pm-light-text-color']}\r\n title={\r\n selectedSkinTone === SkinTone.None\r\n ? props.context.translateText(`${previewEmoji.emoji} Skin tone`)\r\n : previewEmoji.emoji\r\n }\r\n onClick={handleButtonClick}\r\n tabIndex={-1}\r\n />\r\n );\r\n };\r\n\r\n return (\r\n <div className=\"pm-emoji-skintone-picker-container pm-emoji-font\" onKeyDown={handleKeyDown} tabIndex={0} ref={ref}>\r\n {selectSkinTone ? skinTonePicker() : currentSkinToneButton()}\r\n </div>\r\n );\r\n});\r\n","/*\r\n * insert_emoji.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey, EditorState } from 'prosemirror-state';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { emojiCategories, emojis, Emoji, emojiFromString, SkinTone } from '../../api/emoji';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { nodeForEmoji } from '../../marks/emoji/emoji';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nimport { performInsertSymbol, InsertSymbolPlugin } from './insert_symbol-plugin';\r\nimport { SymbolDataProvider, SymbolCharacter } from './insert_symbol-dataprovider';\r\nimport { SymbolEmojiPreferencesPanel } from './insert_symbol-emoji-skintone';\r\n\r\nconst key = new PluginKey<boolean>('insert-emoji');\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { ui, events } = context;\r\n return {\r\n commands: () => {\r\n return [new ProsemirrorCommand(EditorCommandId.Emoji, [], performInsertSymbol(key), emojiOmniInsert(ui))];\r\n },\r\n plugins: () => {\r\n return [new InsertSymbolPlugin(key, new EmojiSymbolDataProvider(ui), ui, events)];\r\n },\r\n };\r\n};\r\n\r\nfunction emojiOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Emoji...'),\r\n description: ui.context.translateText('Image expressing idea, emotion, etc.'),\r\n group: OmniInsertGroup.Content,\r\n priority: 6,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.emoji_dark : ui.images.omni_insert.emoji),\r\n };\r\n}\r\n\r\nexport class EmojiSymbolDataProvider implements SymbolDataProvider {\r\n public constructor(ui: EditorUI) {\r\n this.ui = ui;\r\n }\r\n private readonly ui: EditorUI;\r\n\r\n public readonly filterPlaceholderHint = 'emoji name';\r\n\r\n public readonly symbolPreviewStyle: React.CSSProperties = { fontSize: '36px' } as React.CSSProperties;\r\n\r\n public symbolPreferencesPanel = SymbolEmojiPreferencesPanel;\r\n\r\n public insertSymbolTransaction(symbolCharacter: SymbolCharacter, searchTerm: string, state: EditorState) {\r\n const emoji = emojiFromString(symbolCharacter.value, this.skinTone());\r\n const tr = state.tr;\r\n if (emoji) {\r\n // Try to find an alias that matches the user's search term\r\n const bestAlias = emoji.aliases.find(alias => alias.includes(searchTerm));\r\n tr.replaceSelectionWith(nodeForEmoji(state.schema, emoji, bestAlias || emoji.aliases[0], false), false);\r\n } else {\r\n // This doesn't appear to be an emoji or it doesn't have a markdown representation,\r\n // just insert the text\r\n tr.insertText(symbolCharacter.value);\r\n }\r\n return tr;\r\n }\r\n\r\n public symbolGroupNames(): string[] {\r\n return [kCategoryAll, ...emojiCategories()];\r\n }\r\n\r\n public getSymbols(groupName: string | undefined) {\r\n if (groupName === kCategoryAll || groupName === undefined) {\r\n return emojis(this.skinTone()).map(emoji => symbolForEmoji(emoji));\r\n } else {\r\n return emojis(this.skinTone())\r\n .filter(emoji => emoji.category === groupName)\r\n .map(emoji => symbolForEmoji(emoji));\r\n }\r\n }\r\n\r\n public filterSymbols(filterText: string, symbols: SymbolCharacter[]): SymbolCharacter[] {\r\n const filteredSymbols = symbols.filter(symbol => {\r\n // Search by name\r\n if (symbol.name.includes(filterText)) {\r\n return true;\r\n }\r\n\r\n // search each of the aliases\r\n if (symbol.aliases && symbol.aliases.find(alias => alias.includes(filterText))) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n return filteredSymbols;\r\n }\r\n\r\n private skinTone(): SkinTone {\r\n return this.ui.prefs.emojiSkinTone();\r\n }\r\n}\r\n\r\nconst kCategoryAll = 'All';\r\nfunction symbolForEmoji(emoji: Emoji): SymbolCharacter {\r\n return {\r\n name: emoji.description,\r\n value: emoji.emoji,\r\n markdown: emoji.hasMarkdownRepresentation ? `:${emoji.aliases[0]}:` : undefined,\r\n aliases: emoji.aliases,\r\n description: emoji.description,\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * insert_special_characters.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorCommandId, InsertCharacterCommand, ProsemirrorCommand } from '../../api/command';\r\nimport { hardBreakCommandFn } from '../../nodes/hard_break';\r\n\r\nconst extension = {\r\n commands: () => {\r\n return [\r\n new InsertCharacterCommand(EditorCommandId.EmDash, '—', []),\r\n new InsertCharacterCommand(EditorCommandId.EnDash, '–', []),\r\n new ProsemirrorCommand(EditorCommandId.HardLineBreak, ['Shift-Enter'], hardBreakCommandFn())\r\n ];\r\n },\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * nbsp.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { DecorationSet, Decoration } from 'prosemirror-view';\r\nimport { Plugin, PluginKey, EditorState, Transaction, EditorStateConfig } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { EditorCommandId, InsertCharacterCommand } from '../api/command';\r\nimport { forChangedNodes } from '../api/transaction';\r\nimport { mergedTextNodes } from '../api/text';\r\n\r\nconst kNbsp = '\\u00A0';\r\nconst kNbspRegEx = /\\xA0/g;\r\n\r\nconst extension = {\r\n commands: () => {\r\n return [new InsertCharacterCommand(EditorCommandId.NonBreakingSpace, kNbsp, ['Ctrl-Space', 'Ctrl-Shift-Space'])];\r\n },\r\n\r\n plugins: () => {\r\n return [nonBreakingSpacePastePlugin(), nonBreakingSpaceHighlightPlugin()];\r\n },\r\n};\r\n\r\nconst pastePluginKey = new PluginKey('nbsp-paste');\r\n\r\nfunction nonBreakingSpacePastePlugin() {\r\n return new Plugin({\r\n key: pastePluginKey,\r\n props: {\r\n transformPastedHTML: (html: string) => {\r\n // strips spans that contain a single non-breaking space (chrome/webkit seem to\r\n // do this for spaces surrounding marked html)\r\n // eslint-disable-next-line no-irregular-whitespace\r\n return html.replace(/<span> <\\/span>/g, ' ');\r\n },\r\n },\r\n });\r\n}\r\n\r\nconst highlightPluginKey = new PluginKey('nbsp-highlight');\r\n\r\nfunction nonBreakingSpaceHighlightPlugin() {\r\n return new Plugin<DecorationSet>({\r\n key: highlightPluginKey,\r\n state: {\r\n init(_config: EditorStateConfig, instance: EditorState) {\r\n return DecorationSet.create(instance.doc, highlightNode(instance.doc));\r\n },\r\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\r\n // map\r\n set = set.map(tr.mapping, tr.doc);\r\n\r\n // find new\r\n if (tr.docChanged) {\r\n const decorations: Decoration[] = [];\r\n forChangedNodes(\r\n oldState,\r\n newState,\r\n node => node.isTextblock && node.textContent.includes(kNbsp),\r\n (node, pos) => {\r\n decorations.push(...highlightNode(node, pos + 1));\r\n },\r\n );\r\n set = set.add(tr.doc, decorations);\r\n }\r\n\r\n // return the set\r\n return set;\r\n },\r\n },\r\n props: {\r\n decorations(state: EditorState) {\r\n return highlightPluginKey.getState(state);\r\n },\r\n },\r\n });\r\n}\r\n\r\nfunction highlightNode(node: ProsemirrorNode, nodePos = 0) {\r\n const decorations: Decoration[] = [];\r\n const textNodes = mergedTextNodes(node);\r\n textNodes.forEach(textNode => {\r\n const text = textNode.text;\r\n let m;\r\n kNbspRegEx.lastIndex = 0;\r\n // tslint:disable-next-line no-conditional-assignment\r\n while ((m = kNbspRegEx.exec(text))) {\r\n if (m[0] === '') {\r\n break;\r\n }\r\n const from = nodePos + textNode.pos + m.index;\r\n const to = nodePos + textNode.pos + m.index + m[0].length;\r\n const classes = ['pm-nbsp', 'pm-invisible-text-color'];\r\n decorations.push(Decoration.inline(from, to, { class: classes.join(' ') }));\r\n }\r\n kNbspRegEx.lastIndex = 0;\r\n });\r\n return decorations;\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * remove_section.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { Transaction, EditorState, Selection, Plugin, PluginKey } from 'prosemirror-state';\r\nimport { ReplaceStep, ReplaceAroundStep } from 'prosemirror-transform';\r\n\r\nimport { findParentNodeOfType } from 'prosemirror-utils';\r\n\r\nimport { Extension } from '../api/extension';\r\nimport { isList } from '../api/list';\r\nimport { transactionsDocChanged } from '../api/transaction';\r\n\r\nconst extension: Extension = {\r\n\r\n plugins: (schema: Schema) => {\r\n return [\r\n new Plugin({\r\n key: new PluginKey('remove-section'),\r\n appendTransaction: (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => {\r\n \r\n // skip for selection-only changes\r\n if (!transactionsDocChanged(transactions)) {\r\n return undefined;\r\n }\r\n\r\n if (isSectionRemoval(transactions, oldState)) {\r\n\r\n // if we had selected the entire contents of a div then prosemirror will remove\r\n // the div entirely -- we actually want to leave an empty div in place\r\n const fullySelectedDiv = fullySelectedDivSection(oldState); \r\n if (fullySelectedDiv) {\r\n const tr = newState.tr;\r\n tr.replaceSelectionWith(\r\n schema.nodes.div.create(fullySelectedDiv.node.attrs,\r\n schema.nodes.paragraph.create()));\r\n return tr;\r\n }\r\n \r\n \r\n // if we are left with an empty selection in an empty heading block this may\r\n // have been the removal of a section (more than 1 textBlock). in that case\r\n // remove the empty heading node\r\n else if (isEmptyHeadingSelection(newState.selection)) {\r\n const tr = newState.tr;\r\n const $head = tr.selection.$head;\r\n const start = $head.start();\r\n const end = start + 2;\r\n tr.deleteRange(start, end);\r\n return tr;\r\n } else {\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n })\r\n ];\r\n },\r\n};\r\n\r\n\r\nfunction isSectionRemoval(transactions: readonly Transaction[], oldState: EditorState) {\r\n // was this the removal of a section?\r\n let isRemoval = false;\r\n if (transactions.length === 1 && transactions[0].steps.length === 1) {\r\n // see if this is a delete step\r\n let isDeleteStep = false;\r\n const step = transactions[0].steps[0];\r\n if (step instanceof ReplaceStep) {\r\n isDeleteStep = step.slice.content.size === 0;\r\n } else if (step instanceof ReplaceAroundStep) {\r\n const { gapFrom, gapTo } = step;\r\n isDeleteStep = gapFrom === gapTo;\r\n }\r\n \r\n if (isDeleteStep) {\r\n let numBlocks = 0;\r\n const { from, to } = step as ReplaceStep;\r\n oldState.doc.nodesBetween(from, to, node => {\r\n if (isRemoval) {\r\n return false;\r\n }\r\n if (isList(node)) {\r\n isRemoval = true;\r\n return false;\r\n } else if (node.isTextblock) {\r\n if (numBlocks++ >= 1) {\r\n isRemoval = true;\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n \r\n }\r\n\r\n return isRemoval;\r\n}\r\n\r\n\r\nfunction fullySelectedDivSection(state: EditorState) {\r\n\r\n if (!state.selection.empty && state.schema.nodes.div) {\r\n\r\n const div = findParentNodeOfType(state.schema.nodes.div)(state.selection);\r\n if (div) {\r\n \r\n // calculate the inner selection of the div (accounting for container position offsets)\r\n let divSelFrom = div.start + 1; // offset to get to beginning first block text\r\n let divSelTo = div.pos + div.node.nodeSize - 2; // offset to end of last block text\r\n \r\n // if the div's first child is a list we need to push in 2 more\r\n if (isList(div.node.firstChild)) {\r\n divSelFrom += 2;\r\n }\r\n // if the div's last child is a list we need to push in 2 more\r\n if (isList(div.node.lastChild)) {\r\n divSelTo -=2;\r\n }\r\n\r\n // does the selection span the entire div?\r\n if (state.selection.from === divSelFrom && state.selection.to === divSelTo) {\r\n return div;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\n\r\nfunction isEmptyHeadingSelection(selection: Selection) {\r\n const parent = selection.$head.parent;\r\n const schema = parent.type.schema;\r\n return selection.empty && parent.type === schema.nodes.heading && parent.content.size === 0;\r\n}\r\n\r\n\r\nexport default extension;\r\n","/*\r\n * slides.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Transaction, EditorState } from \"prosemirror-state\";\r\nimport { setTextSelection, findParentNodeOfType } from \"prosemirror-utils\";\r\n\r\nimport { ExtensionContext } from \"../api/extension\";\r\nimport { kPresentationDocType } from \"../api/format\";\r\nimport { canInsertNode } from \"../api/node\";\r\nimport { ProsemirrorCommand, EditorCommandId } from \"../api/command\";\r\nimport { OmniInsertGroup } from \"../api/omni_insert\";\r\nimport { wrapIn } from \"prosemirror-commands\";\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n\r\n const { ui, format, pandocExtensions } = context;\r\n\r\n if (!format.docTypes.includes(kPresentationDocType)) {\r\n return null;\r\n }\r\n\r\n return {\r\n commands: () => {\r\n const cmds: ProsemirrorCommand[] = [\r\n new ProsemirrorCommand(EditorCommandId.InsertSlidePause, [], insertSlidePause, {\r\n name: ui.context.translateText('Slide Pause'),\r\n description: ui.context.translateText('Pause after content'),\r\n group: OmniInsertGroup.Content,\r\n priority: 2,\r\n image: () => ui.prefs.darkMode() ? ui.images.omni_insert!.slide_pause_dark! : ui.images.omni_insert!.slide_pause!\r\n })\r\n ];\r\n\r\n if (pandocExtensions.fenced_divs) {\r\n cmds.push(new ProsemirrorCommand(EditorCommandId.InsertSlideNotes, [], insertSlideNotes, {\r\n name: ui.context.translateText('Slide Notes'),\r\n description: ui.context.translateText('Slide speaker notes'),\r\n group: OmniInsertGroup.Content,\r\n priority: 2,\r\n image: () => ui.prefs.darkMode() ? ui.images.omni_insert!.slide_notes_dark! : ui.images.omni_insert!.slide_notes!\r\n }));\r\n cmds.push(new ProsemirrorCommand(EditorCommandId.InsertSlideColumns, [], insertSlideColumns, {\r\n name: ui.context.translateText('Slide Columns'),\r\n description: ui.context.translateText('Two column layout'),\r\n group: OmniInsertGroup.Content,\r\n priority: 2,\r\n image: () => ui.prefs.darkMode() ? ui.images.omni_insert!.slide_columns_dark! : ui.images.omni_insert!.slide_columns!\r\n }));\r\n }\r\n\r\n return cmds;\r\n }\r\n\r\n };\r\n};\r\n\r\n\r\nexport function insertSlideColumns(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.div)) {\r\n return false;\r\n }\r\n\r\n\r\n\r\n if (dispatch) {\r\n wrapIn(state.schema.nodes.div)(state, (tr: Transaction) => {\r\n\r\n const div = findParentNodeOfType(state.schema.nodes.div)(tr.selection)!;\r\n tr.setNodeMarkup(div.pos, div.node.type, { classes: [\"columns\"] });\r\n\r\n const columnAttrs = { classes: [\"column\"], keyvalue:[[\"width\", \"50%\"]] };\r\n const columnsContent = [\r\n state.schema.nodes.div.create(\r\n columnAttrs,\r\n state.schema.nodes.paragraph.create()\r\n ),\r\n state.schema.nodes.div.create(\r\n columnAttrs,\r\n state.schema.nodes.paragraph.create()\r\n )\r\n ];\r\n tr.replaceWith(div.start, div.start + 1, columnsContent);\r\n setTextSelection(div.start + 1)(tr);\r\n \r\n dispatch(tr);\r\n });\r\n }\r\n return true;\r\n}\r\n\r\nexport function insertSlidePause(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.paragraph)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const node = schema.nodes.paragraph.createAndFill(null, schema.text('. . .'));\r\n if (node) {\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(node);\r\n setTextSelection(tr.selection.from - 1, -1)(tr);\r\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\r\n setTextSelection(tr.selection.from - 1, -1)(tr);\r\n dispatch(tr);\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function insertSlideNotes(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.div)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const node = schema.nodes.div.createAndFill({ classes: ['notes']}, schema.nodes.paragraph.create());\r\n if (node) {\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(node);\r\n setTextSelection(state.selection.from + 1, 1)(tr);\r\n dispatch(tr);\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport default extension;","/*\r\n * strikeout.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension, extensionIfEnabled } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'strikeout',\r\n spec: {\r\n group: 'formatting',\r\n parseDOM: [\r\n { tag: 'del' },\r\n { tag: 's' },\r\n {\r\n style: 'text-decoration',\r\n getAttrs: (value: string | Node) => (value as string) === 'line-through' && null,\r\n },\r\n ],\r\n toDOM() {\r\n return ['del'];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Strikeout,\r\n mark: 'strikeout',\r\n },\r\n ],\r\n writer: {\r\n priority: 6,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.Strikeout, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Strikeout, [], schema.marks.strikeout)];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [delimiterMarkInputRule('~~', schema.marks.strikeout, filter, '`', true)];\r\n },\r\n};\r\n\r\nexport default extensionIfEnabled(extension, 'strikeout');\r\n","/*\r\n * superscript.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension, extensionIfEnabled } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'superscript',\r\n spec: {\r\n group: 'formatting',\r\n parseDOM: [{ tag: 'sup' }],\r\n toDOM() {\r\n return ['sup'];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Superscript,\r\n mark: 'superscript',\r\n },\r\n ],\r\n writer: {\r\n priority: 15,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.Superscript, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Superscript, [], schema.marks.superscript)];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [delimiterMarkInputRule('\\\\^', schema.marks.superscript, filter, '`', true)];\r\n },\r\n};\r\n\r\nexport default extensionIfEnabled(extension, 'superscript');\r\n","/*\r\n * subscript.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension, extensionIfEnabled } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\nimport { delimiterMarkInputRule, MarkInputRuleFilter } from '../api/input_rule';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'subscript',\r\n spec: {\r\n group: 'formatting',\r\n parseDOM: [{ tag: 'sub' }],\r\n toDOM() {\r\n return ['sub'];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Subscript,\r\n mark: 'subscript',\r\n },\r\n ],\r\n writer: {\r\n priority: 15,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.Subscript, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Subscript, [], schema.marks.subscript)];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [delimiterMarkInputRule('\\\\~', schema.marks.subscript, filter, '`\\\\~-', true)];\r\n },\r\n};\r\n\r\nexport default extensionIfEnabled(extension, 'subscript');\r\n","/*\r\n * smallcaps.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension, extensionIfEnabled } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\n\r\nimport './smallcaps-styles.css';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'smallcaps',\r\n spec: {\r\n group: 'formatting',\r\n parseDOM: [\r\n { tag: \"span[class*='smallcaps']\" },\r\n { style: 'font-variant', getAttrs: (value: string | Node) => (value as string) === 'small-caps' && null },\r\n ],\r\n toDOM() {\r\n return ['span', { class: 'smallcaps' }];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.SmallCaps,\r\n mark: 'smallcaps',\r\n },\r\n ],\r\n writer: {\r\n priority: 8,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.SmallCaps, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Smallcaps, [], schema.marks.smallcaps)];\r\n },\r\n};\r\n\r\nexport default extensionIfEnabled(extension, ['bracketed_spans', 'native_spans']);\r\n","/*\r\n * underline.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment } from 'prosemirror-model';\r\n\r\nimport { MarkCommand, EditorCommandId } from '../api/command';\r\nimport { Extension, extensionIfEnabled } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../api/pandoc';\r\n\r\nimport './underline-styles.css';\r\nimport { kPlatformMac } from '../api/platform';\r\n\r\nconst extension: Extension = {\r\n marks: [\r\n {\r\n name: 'underline',\r\n spec: {\r\n parseDOM: [\r\n { tag: \"span[class*='underline']\" },\r\n { tag: \"span[class*='ul']\" },\r\n { tag: \"u\" },\r\n { tag: \"ins\" }\r\n ],\r\n toDOM() {\r\n return ['span', { class: 'underline' }];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Underline,\r\n mark: 'underline',\r\n },\r\n ],\r\n writer: {\r\n priority: 7,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeMark(PandocTokenType.Underline, parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [new MarkCommand(EditorCommandId.Underline, kPlatformMac ? ['Mod-u'] : [], schema.marks.underline)];\r\n },\r\n};\r\n\r\nexport default extensionIfEnabled(extension, ['bracketed_spans', 'native_spans']);\r\n","/*\r\n * raw_inline.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Mark, Fragment, MarkType } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { ProsemirrorCommand, EditorCommandId, toggleMarkType } from '../../api/command';\r\nimport { PandocOutput, PandocToken, PandocTokenType } from '../../api/pandoc';\r\nimport { getMarkRange, markIsActive, getMarkAttrs, domAttrNoSpelling } from '../../api/mark';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { RawFormatProps } from 'editor-types';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { fragmentText } from '../../api/fragment';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nexport const kRawInlineFormat = 0;\r\nexport const kRawInlineContent = 1;\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions, pandocCapabilities, ui } = context;\r\n\r\n // always enabled so that extensions can make use of preprocessors + raw_attribute\r\n // to hoist content out of pandoc for further processing by our token handlers.\r\n // that means that users can always use the raw attribute in their markdown even\r\n // if the editing format doesn't support it (in which case it will just get echoed\r\n // back to the markdown just the way it was written).\r\n\r\n // return the extension\r\n return {\r\n marks: [\r\n {\r\n name: 'raw_inline',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n inclusive: false,\r\n excludes: 'formatting',\r\n attrs: {\r\n format: {},\r\n },\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='raw-inline']\",\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n format: el.getAttribute('data-format'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(mark: Mark) {\r\n const attr = {\r\n class: 'raw-inline pm-fixedwidth-font pm-markup-text-color',\r\n 'data-format': mark.attrs.format,\r\n };\r\n return ['span', domAttrNoSpelling(attr)];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.RawInline,\r\n mark: 'raw_inline',\r\n getAttrs: (tok: PandocToken) => {\r\n return {\r\n format: tok.c[kRawInlineFormat],\r\n };\r\n },\r\n getText: (tok: PandocToken) => {\r\n return tok.c[kRawInlineContent];\r\n },\r\n },\r\n ],\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\r\n // get raw content\r\n const raw = fragmentText(parent);\r\n\r\n // write it\r\n output.writeToken(PandocTokenType.RawInline, () => {\r\n output.write(mark.attrs.format);\r\n output.write(raw);\r\n });\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n // insert command\r\n commands: () => {\r\n if (pandocExtensions.raw_attribute) {\r\n return [new RawInlineCommand(EditorCommandId.RawInline, '', ui, pandocCapabilities.output_formats)];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n};\r\n\r\n// base class for inline commands that auto-insert content\r\nexport class RawInlineInsertCommand extends ProsemirrorCommand {\r\n private markType: MarkType;\r\n constructor(id: EditorCommandId, keymap: readonly string[], markType: MarkType, insert: (tr: Transaction) => void) {\r\n super(id, keymap, (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // if we aren't active then make sure we can insert a text node here\r\n if (!this.isActive(state) && !canInsertNode(state, markType.schema.nodes.text)) {\r\n return false;\r\n }\r\n\r\n // ensure we can apply this mark here\r\n if (!toggleMarkType(this.markType)(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n\r\n if (this.isActive(state)) {\r\n const range = getMarkRange(state.selection.$head, this.markType);\r\n if (range) {\r\n tr.removeMark(range.from, range.to, this.markType);\r\n }\r\n } else if (!tr.selection.empty) {\r\n const mark = markType.create();\r\n tr.addMark(tr.selection.from, tr.selection.to, mark);\r\n } else {\r\n insert(tr);\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n });\r\n this.markType = markType;\r\n }\r\n\r\n public isActive(state: EditorState) {\r\n return markIsActive(state, this.markType);\r\n }\r\n}\r\n\r\n// generic raw inline command (opens dialog that allows picking from among formats)\r\nexport class RawInlineCommand extends ProsemirrorCommand {\r\n constructor(id: EditorCommandId, defaultFormat: string, ui: EditorUI, outputFormats: string[]) {\r\n super(\r\n id,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n const schema = state.schema;\r\n\r\n if (!canInsertNode(state, schema.nodes.text) || !toggleMarkType(schema.marks.raw_inline)(state)) {\r\n return false;\r\n }\r\n\r\n async function asyncInlineRaw() {\r\n if (dispatch) {\r\n // check if mark is active\r\n const isActive = markIsActive(state, schema.marks.raw_inline);\r\n\r\n // get the range of the mark\r\n let range = { from: state.selection.from, to: state.selection.to };\r\n if (isActive) {\r\n range = getMarkRange(state.selection.$from, schema.marks.raw_inline) as { from: number; to: number };\r\n }\r\n\r\n // get raw attributes if we have them\r\n let raw: RawFormatProps = { content: '', format: defaultFormat };\r\n raw.content = state.doc.textBetween(range.from, range.to);\r\n if (isActive) {\r\n raw = {\r\n ...raw,\r\n ...getMarkAttrs(state.doc, state.selection, schema.marks.raw_inline),\r\n };\r\n }\r\n\r\n const result = await ui.dialogs.editRawInline(raw, outputFormats);\r\n if (result) {\r\n const tr = state.tr;\r\n tr.removeMark(range.from, range.to, schema.marks.raw_inline);\r\n if (result.action === 'edit') {\r\n const mark = schema.marks.raw_inline.create({ format: result.raw.format });\r\n const node = schema.text(result.raw.content, [mark]);\r\n // if we are editing a selection then replace it, otherwise insert\r\n if (raw.content) {\r\n tr.replaceRangeWith(range.from, range.to, node);\r\n } else {\r\n tr.replaceSelectionWith(node, false);\r\n }\r\n }\r\n dispatch(tr);\r\n }\r\n\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncInlineRaw();\r\n\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('Raw Inline...'),\r\n description: ui.context.translateText('Raw inline content'),\r\n group: OmniInsertGroup.Content,\r\n priority: 0,\r\n noFocus: true,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.raw_inline_dark : ui.images.omni_insert.raw_inline,\r\n },\r\n );\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * mark-highlight.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey, Plugin, EditorState, Transaction, EditorStateConfig } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration } from 'prosemirror-view';\r\nimport { Node as ProsemirrorNode, MarkType } from 'prosemirror-model';\r\nimport { findChildrenByMark } from 'prosemirror-utils';\r\nimport { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';\r\n\r\nimport { getMarkRange, getMarkAttrs } from './mark';\r\nimport { forChangedNodes } from './transaction';\r\n\r\nexport type MarkHighligher = (\r\n text: string,\r\n attrs: { [key: string]: unknown },\r\n range: { from: number; to: number },\r\n) => Decoration[];\r\n\r\nexport function markHighlightDecorations(\r\n markRange: { from: number; to: number },\r\n text: string,\r\n re: RegExp,\r\n className: string,\r\n) {\r\n const decorations: Decoration[] = [];\r\n re.lastIndex = 0;\r\n let match = re.exec(text);\r\n while (match) {\r\n decorations.push(\r\n Decoration.inline(markRange.from + match.index, markRange.from + re.lastIndex, { class: className }),\r\n );\r\n match = re.exec(text);\r\n }\r\n re.lastIndex = 0;\r\n return decorations;\r\n}\r\n\r\nexport function markHighlightPlugin(key: PluginKey<DecorationSet>, markType: MarkType, highlighter: MarkHighligher) {\r\n function decorationsForDoc(doc: ProsemirrorNode) {\r\n let decorations: Decoration[] = [];\r\n findChildrenByMark(doc, markType, true).forEach(markedNode => {\r\n decorations = decorations.concat(markDecorations(doc, markType, markedNode.pos, highlighter));\r\n });\r\n return DecorationSet.create(doc, decorations);\r\n }\r\n\r\n return new Plugin<DecorationSet>({\r\n key,\r\n state: {\r\n // initialize by highlighting the entire document\r\n init(_config: EditorStateConfig, instance: EditorState) {\r\n return decorationsForDoc(instance.doc);\r\n },\r\n\r\n // whenever an edit affecting this mark type occurs then update the decorations\r\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\r\n // ignore selection changes\r\n if (!tr.docChanged) {\r\n return set.map(tr.mapping, tr.doc);\r\n }\r\n\r\n // if one of the steps added or removed a mark of our type then rescan the doc.\r\n if (\r\n tr.steps.some(\r\n step =>\r\n (step instanceof AddMarkStep && step.mark.type === markType) ||\r\n (step instanceof RemoveMarkStep && step.mark.type === markType),\r\n )\r\n ) {\r\n // rehighlight entire doc\r\n return decorationsForDoc(newState.doc);\r\n\r\n // incremental rehighlighting based on presence of mark in changed regions\r\n } else {\r\n // adjust decoration positions to changes made by the transaction (decorations that apply\r\n // to removed chunks of content will be removed by this)\r\n set = set.map(tr.mapping, tr.doc);\r\n\r\n // function to rehighlight parent of specified pos\r\n const rehighlightParent = (pos: number) => {\r\n const resolvedPos = tr.doc.resolve(pos);\r\n const parent = resolvedPos.node();\r\n const from = resolvedPos.start();\r\n const marks = findChildrenByMark(parent, markType);\r\n marks.forEach(mark => {\r\n const markRange = getMarkRange(tr.doc.resolve(from + mark.pos), markType) as { from: number; to: number };\r\n const removeDecorations = set.find(markRange.from, markRange.to);\r\n set = set.remove(removeDecorations);\r\n const addDecorations = markDecorations(tr.doc, markType, markRange.from, highlighter);\r\n set = set.add(tr.doc, addDecorations);\r\n });\r\n };\r\n\r\n // rehighlight nodes that changed and have our mark type\r\n forChangedNodes(\r\n oldState,\r\n newState,\r\n node => node.type.allowsMarkType(markType),\r\n (node, pos) => {\r\n if (newState.doc.rangeHasMark(pos, pos + node.nodeSize, markType)) {\r\n rehighlightParent(pos);\r\n }\r\n },\r\n );\r\n\r\n return set;\r\n }\r\n },\r\n },\r\n props: {\r\n decorations(state: EditorState) {\r\n return key.getState(state);\r\n },\r\n },\r\n });\r\n}\r\n\r\nfunction markDecorations(doc: ProsemirrorNode, markType: MarkType, pos: number, highlighter: MarkHighligher) {\r\n const markRange = getMarkRange(doc.resolve(pos), markType);\r\n if (markRange) {\r\n const attrs = getMarkAttrs(doc, markRange, markType);\r\n const text = doc.textBetween(markRange.from, markRange.to);\r\n return highlighter(text, attrs, markRange);\r\n } else {\r\n return [];\r\n }\r\n}\r\n","/*\r\n * tex.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// Get the length of valid tex content for the passed text. return values include:\r\n// -1: Invalid tex content (starts with \\ but doesn't close braces/brackets properly)\r\n// 0: Not tex content\r\n// >1: Length of valid tex string\r\nexport function texLength(text: string) {\r\n\r\n // if tex includes newlines it's auto-valid (could be math)\r\n if (text.includes('\\n')) {\r\n return text.length;\r\n }\r\n \r\n\r\n let braceLevel = 0;\r\n let bracketLevel = 0;\r\n\r\n let i;\r\n for (i = 0; i < text.length; i++) {\r\n // next character\r\n const ch = text[i];\r\n\r\n // must start with \\{ltr}\r\n if (i === 0 && ch !== '\\\\') {\r\n return 0;\r\n }\r\n if (i === 1 && !isLetter(ch)) {\r\n return 0;\r\n }\r\n\r\n // only letters, backslashes, and open brace/bracket allowed (unless we are in braces or brackets)\r\n const inBraces = braceLevel >= 1;\r\n const inBrackets = bracketLevel >= 1;\r\n if (i > 0 && ch === ' ' && text[i+1] === '\\\\') {\r\n i++; // skip the \\\r\n continue;\r\n } if (i > 0 && !isLetter(ch) && ch !== '\\\\' && ch !== '{' && ch !== '[' && !inBraces && !inBrackets) {\r\n return i;\r\n }\r\n\r\n // manage brace and bracket levels\r\n if (ch === '{') {\r\n braceLevel++;\r\n } else if (ch === '}') {\r\n braceLevel--;\r\n } else if (ch === '[') {\r\n bracketLevel++;\r\n } else if (ch === ']') {\r\n bracketLevel--;\r\n }\r\n }\r\n\r\n if (braceLevel === 0 && bracketLevel === 0) {\r\n return i;\r\n } else {\r\n return -1; // invalid tex\r\n }\r\n}\r\n\r\n\r\nconst LetterRegex = /[A-Za-z]/;\r\nfunction isLetter(ch: string) {\r\n return LetterRegex.test(ch);\r\n}\r\n","/*\r\n * raw_tex.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Mark, Fragment, Schema } from 'prosemirror-model';\r\nimport { DecorationSet } from 'prosemirror-view';\r\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { InputRule, inputRules } from 'prosemirror-inputrules';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { PandocToken, PandocTokenType, PandocOutput } from '../../api/pandoc';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { kTexFormat } from '../../api/raw';\r\nimport { markHighlightPlugin, markHighlightDecorations } from '../../api/mark-highlight';\r\nimport { MarkTransaction } from '../../api/transaction';\r\nimport { domAttrNoSpelling, markIsActive, splitInvalidatedMarks } from '../../api/mark';\r\nimport { EditorCommandId, toggleMarkType } from '../../api/command';\r\nimport { texLength } from '../../api/tex';\r\nimport { MarkInputRuleFilter } from '../../api/input_rule';\r\n\r\nimport { kRawInlineFormat, kRawInlineContent, RawInlineInsertCommand } from './raw_inline';\r\n\r\nconst kTexPlaceholder = 'tex';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions } = context;\r\n\r\n if (!pandocExtensions.raw_tex) {\r\n return null;\r\n }\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'raw_tex',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n inclusive: true,\r\n excludes: 'formatting',\r\n attrs: {},\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='raw-tex']\",\r\n },\r\n ],\r\n toDOM() {\r\n const attr = {\r\n class: 'raw-tex pm-fixedwidth-font pm-light-text-color',\r\n };\r\n return ['span', domAttrNoSpelling(attr)];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.RawInline,\r\n mark: 'raw_tex',\r\n match: (tok: PandocToken) => {\r\n const format = tok.c[kRawInlineFormat];\r\n return format === kTexFormat;\r\n },\r\n getText: (tok: PandocToken) => {\r\n return tok.c[kRawInlineContent];\r\n },\r\n },\r\n ],\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeRawMarkdown(parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n // insert command\r\n commands: (schema: Schema) => {\r\n return [new InsertInlineLatexCommand(schema)];\r\n },\r\n\r\n appendMarkTransaction: (schema: Schema) => {\r\n return [\r\n {\r\n name: 'remove-raw-tex-marks',\r\n filter: node => node.isTextblock && node.type.allowsMarkType(schema.marks.raw_tex),\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n splitInvalidatedMarks(tr, node, pos, texLength, schema.marks.raw_tex);\r\n },\r\n },\r\n ];\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n return [texInputRule(schema, filter)];\r\n },\r\n\r\n // plugin to add highlighting decorations\r\n plugins: (schema: Schema) => {\r\n // plugins to return\r\n const plugins: Plugin[] = [];\r\n\r\n // latex equation highlighting\r\n plugins.push(latexHighlightingPlugin(schema));\r\n\r\n // latex brace matching\r\n const braces = new Map([\r\n ['{', '}'],\r\n ['[', ']'],\r\n ]);\r\n plugins.push(\r\n inputRules({\r\n rules: [\r\n new InputRule(/(^|[^^\\\\])([{[])$/, (state: EditorState, match: RegExpMatchArray, start: number) => {\r\n if (markIsActive(state, schema.marks.raw_tex)) {\r\n const tr = state.tr;\r\n tr.insertText(match[2] + braces.get(match[2]));\r\n setTextSelection(start + match[1].length + 1)(tr);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n }),\r\n ],\r\n }),\r\n );\r\n\r\n // return\r\n return plugins;\r\n },\r\n };\r\n};\r\n\r\nfunction texInputRule(schema: Schema, filter: MarkInputRuleFilter) {\r\n return new InputRule(/(^| )\\\\$/, (state: EditorState) => {\r\n const rawTexMark = schema.marks.raw_tex;\r\n\r\n if (state.selection.empty && toggleMarkType(rawTexMark)(state)) {\r\n // if there is no tex ahead of us or we don't pass the fitler (b/c marks that don't allow\r\n // input rules are active) then bail\r\n const $head = state.selection.$head;\r\n const texText = '\\\\' + $head.parent.textContent.slice($head.parentOffset);\r\n if (!texText.startsWith('\\\\ ')) {\r\n const texMatchLength = texLength(texText);\r\n if (texMatchLength === 0 || !filter(state, state.selection.from, state.selection.from + texMatchLength)) {\r\n return null;\r\n }\r\n }\r\n\r\n // create transaction\r\n const tr = state.tr;\r\n\r\n // insert tex backslash\r\n const mark = schema.marks.raw_tex.create();\r\n tr.addStoredMark(mark);\r\n tr.insertText('\\\\');\r\n\r\n // extend the mark to cover any valid tex that immediately follows the \\\r\n const { parent, parentOffset } = tr.selection.$head;\r\n const text = parent.textContent.slice(parentOffset - 1);\r\n if (text.length > 0) {\r\n const length = texLength(text);\r\n if (length > 1) {\r\n const startTex = tr.selection.from - 1;\r\n tr.addMark(startTex, startTex + length, mark);\r\n return tr;\r\n }\r\n }\r\n\r\n // insert placeholder if it's a standalone \\\r\n if (text === '\\\\' || text.startsWith('\\\\ ')) {\r\n tr.insertText(kTexPlaceholder);\r\n setTexSelectionAfterInsert(tr);\r\n return tr;\r\n }\r\n }\r\n\r\n // didn't find a valid context for a tex command\r\n return null;\r\n });\r\n}\r\n\r\nclass InsertInlineLatexCommand extends RawInlineInsertCommand {\r\n constructor(schema: Schema) {\r\n super(EditorCommandId.TexInline, [], schema.marks.raw_tex, (tr: Transaction) => {\r\n const mark = schema.marks.raw_tex.create();\r\n const tex = '\\\\' + kTexPlaceholder;\r\n const node = schema.text(tex, [mark]);\r\n tr.replaceSelectionWith(node, false);\r\n setTexSelectionAfterInsert(tr);\r\n });\r\n }\r\n}\r\n\r\nfunction setTexSelectionAfterInsert(tr: Transaction) {\r\n tr.setSelection(\r\n new TextSelection(tr.doc.resolve(tr.selection.from - kTexPlaceholder.length), tr.doc.resolve(tr.selection.from)),\r\n );\r\n}\r\n\r\nconst key = new PluginKey<DecorationSet>('latex-highlight');\r\n\r\nexport function latexHighlightingPlugin(schema: Schema) {\r\n return markHighlightPlugin(key, schema.marks.raw_tex, (text, _attrs, markRange) => {\r\n const kIdClass = 'pm-markup-text-color';\r\n return markHighlightDecorations(markRange, text, /\\\\[A-Za-z]+/g, kIdClass);\r\n });\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * raw_html.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Mark, Schema, Fragment } from 'prosemirror-model';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { EditorState } from 'prosemirror-state';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { PandocTokenType, PandocToken, ProsemirrorWriter, PandocOutput } from '../../api/pandoc';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { isRawHTMLFormat } from '../../api/raw';\r\nimport { MarkInputRuleFilter } from '../../api/input_rule';\r\n\r\nimport { kRawInlineFormat, kRawInlineContent } from './raw_inline';\r\nimport { toggleMarkType } from '../../api/command';\r\nimport { domAttrNoSpelling } from '../../api/mark';\r\nimport { fragmentText } from '../../api/fragment';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions } = context;\r\n return {\r\n marks: [\r\n {\r\n name: 'raw_html',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n inclusive: false,\r\n excludes: 'formatting',\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='raw-html']\",\r\n getAttrs() {\r\n return {};\r\n },\r\n },\r\n ],\r\n toDOM() {\r\n const attr = {\r\n class: 'raw-html pm-fixedwidth-font pm-markup-text-color',\r\n };\r\n return ['span', domAttrNoSpelling(attr)];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.RawInline,\r\n match: (tok: PandocToken) => {\r\n const format = tok.c[kRawInlineFormat];\r\n return isRawHTMLFormat(format);\r\n },\r\n handler: (schema: Schema) => {\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n const html = tok.c[kRawInlineContent];\r\n if (writer.hasInlineHTMLWriter(html)) {\r\n writer.writeInlineHTML(html);\r\n } else {\r\n writeInlneHTML(schema, html, writer);\r\n }\r\n };\r\n },\r\n },\r\n ],\r\n\r\n inlineHTMLReader: (schema: Schema, html: string, writer?: ProsemirrorWriter) => {\r\n // read single tags as inline html\r\n const isSingleTag = tagStartLoc(html, html.length - 2) === 0;\r\n if (isSingleTag && writer) {\r\n writeInlneHTML(schema, html, writer);\r\n }\r\n return isSingleTag;\r\n },\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n const raw = fragmentText(parent);\r\n if (raw.startsWith(\"<\") && raw.endsWith(\">\")) {\r\n output.writeRawMarkdown(parent);\r\n } else {\r\n output.writeToken(PandocTokenType.RawInline, () => {\r\n output.write(\"html\");\r\n output.write(raw);\r\n });\r\n }\r\n \r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n // input rules\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n if (pandocExtensions.raw_html) {\r\n return [rawHtmlInputRule(schema, filter)];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n};\r\n\r\nfunction writeInlneHTML(schema: Schema, html: string, writer: ProsemirrorWriter) {\r\n const mark = schema.marks.raw_html.create();\r\n writer.openMark(mark);\r\n writer.writeText(html);\r\n writer.closeMark(mark);\r\n}\r\n\r\nexport function rawHtmlInputRule(schema: Schema, filter: MarkInputRuleFilter) {\r\n return new InputRule(/>$/, (state: EditorState, _match: RegExpMatchArray, start: number, end: number) => {\r\n const rawhtmlMark = state.schema.marks.raw_html;\r\n\r\n // ensure we pass all conditions for html input\r\n if (state.selection.empty && toggleMarkType(rawhtmlMark)(state) && filter(state, start, end)) {\r\n // get tag info\r\n const { parent, parentOffset } = state.selection.$head;\r\n const text = parent.textContent;\r\n const endLoc = parentOffset - 1;\r\n const tag = tagInfo(text, endLoc);\r\n if (tag) {\r\n // create transaction\r\n const tr = state.tr;\r\n\r\n // insert >\r\n tr.insertText('>');\r\n\r\n // add mark\r\n start = tr.selection.from - (tag.end - tag.start + 1);\r\n tr.addMark(start, end + 1, rawhtmlMark.create());\r\n tr.removeStoredMark(rawhtmlMark);\r\n\r\n // if it wasn't an end tag and it isn't a void tag then also\r\n // insert an end tag (and leave the cursor in the middle)\r\n if (!tag.close && !tag.void) {\r\n const endTag = schema.text(`</${tag.name}>`);\r\n tr.replaceSelectionWith(endTag, false);\r\n setTextSelection(tr.selection.from - endTag.textContent.length)(tr);\r\n tr.addMark(tr.selection.from, tr.selection.from + endTag.textContent.length, rawhtmlMark.create());\r\n tr.removeStoredMark(rawhtmlMark);\r\n }\r\n\r\n // return transaction\r\n return tr;\r\n }\r\n }\r\n\r\n return null;\r\n });\r\n}\r\n\r\nfunction tagInfo(text: string, endLoc: number) {\r\n const startLoc = tagStartLoc(text, endLoc);\r\n if (startLoc !== -1) {\r\n // don't match if preceding character is a backtick\r\n // (user is attempting to write an html tag in code)\r\n if (text.charAt(startLoc - 1) === '`') {\r\n return null;\r\n }\r\n const tagText = text.substring(startLoc, endLoc + 1);\r\n const match = tagText.match(/<(\\/?)(\\w+)/);\r\n if (match) {\r\n const name = match[2];\r\n if (isHTMLTag(name)) {\r\n return {\r\n name: match[2],\r\n close: match[1].length > 0,\r\n void: isVoidTag(name),\r\n start: startLoc,\r\n end: endLoc + 1,\r\n };\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction tagStartLoc(text: string, endLoc: number) {\r\n let inSingleQuote = false;\r\n let inDoubleQuote = false;\r\n let i;\r\n for (i = endLoc; i >= 0; i--) {\r\n // next character\r\n const ch = text[i];\r\n\r\n // invalid if we see another > when not in quotes\r\n if (ch === '>' && !inSingleQuote && !inDoubleQuote) {\r\n return -1;\r\n }\r\n\r\n // > terminate on < if we aren't in quotes\r\n if (ch === '<' && !inSingleQuote && !inDoubleQuote) {\r\n return i;\r\n }\r\n\r\n // handle single quote\r\n if (ch === \"'\") {\r\n if (inSingleQuote) {\r\n inSingleQuote = false;\r\n } else if (!inDoubleQuote) {\r\n inSingleQuote = true;\r\n }\r\n\r\n // handle double quote\r\n } else if (ch === '\"') {\r\n if (inDoubleQuote) {\r\n inDoubleQuote = false;\r\n } else if (!inSingleQuote) {\r\n inDoubleQuote = true;\r\n }\r\n }\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction isHTMLTag(tag: string) {\r\n return [\r\n // structural\r\n 'a',\r\n 'article',\r\n 'aside',\r\n 'body',\r\n 'br',\r\n 'details',\r\n 'div',\r\n 'h1',\r\n 'h2',\r\n 'h3',\r\n 'h4',\r\n 'h5',\r\n 'h6',\r\n 'head',\r\n 'header',\r\n 'hgroup',\r\n 'hr',\r\n 'html',\r\n 'footer',\r\n 'nav',\r\n 'p',\r\n 'section',\r\n 'span',\r\n 'summary',\r\n\r\n // metadata\r\n 'base',\r\n 'basefont',\r\n 'link',\r\n 'meta',\r\n 'style',\r\n 'title',\r\n\r\n // form\r\n 'button',\r\n 'datalist',\r\n 'fieldset',\r\n 'form',\r\n 'input',\r\n 'keygen',\r\n 'label',\r\n 'legend',\r\n 'meter',\r\n 'optgroup',\r\n 'option',\r\n 'select',\r\n 'textarea',\r\n\r\n // formatting\r\n 'abbr',\r\n 'acronym',\r\n 'address',\r\n 'b',\r\n 'bdi',\r\n 'bdo',\r\n 'big',\r\n 'blockquote',\r\n 'center',\r\n 'cite',\r\n 'code',\r\n 'del',\r\n 'dfn',\r\n 'em',\r\n 'font',\r\n 'i',\r\n 'ins',\r\n 'kbd',\r\n 'mark',\r\n 'output',\r\n 'pre',\r\n 'progress',\r\n 'q',\r\n 'rp',\r\n 'rt',\r\n 'ruby',\r\n 's',\r\n 'samp',\r\n 'small',\r\n 'strike',\r\n 'strong',\r\n 'sub',\r\n 'sup',\r\n 'tt',\r\n 'u',\r\n 'var',\r\n 'wbr',\r\n\r\n // list\r\n 'dd',\r\n 'dir',\r\n 'dl',\r\n 'dt',\r\n 'li',\r\n 'ol',\r\n 'menu',\r\n 'ul',\r\n\r\n // table\r\n 'caption',\r\n 'col',\r\n 'colgroup',\r\n 'table',\r\n 'tbody',\r\n 'td',\r\n 'tfoot',\r\n 'thead',\r\n 'th',\r\n 'tr',\r\n\r\n // scripting\r\n 'script',\r\n 'noscript',\r\n\r\n // embedded content\r\n 'applet',\r\n 'area',\r\n 'audio',\r\n 'canvas',\r\n 'embed',\r\n 'figcaption',\r\n 'figure',\r\n 'frame',\r\n 'frameset',\r\n 'iframe',\r\n 'img',\r\n 'map',\r\n 'noframes',\r\n 'object',\r\n 'param',\r\n 'source',\r\n 'time',\r\n 'video',\r\n ].includes(tag.toLowerCase());\r\n}\r\n\r\nfunction isVoidTag(tag: string) {\r\n return [\r\n 'area',\r\n 'base',\r\n 'br',\r\n 'col',\r\n 'command',\r\n 'embed',\r\n 'hr',\r\n 'img',\r\n 'input',\r\n 'keygen',\r\n 'link',\r\n 'meta',\r\n 'param',\r\n 'source',\r\n 'track',\r\n 'wbr',\r\n ].includes(tag.toLowerCase());\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * math-commands.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction, Selection } from 'prosemirror-state';\r\nimport { setTextSelection, findParentNodeOfType } from 'prosemirror-utils';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId, toggleMarkType } from '../../api/command';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { OmniInsert, OmniInsertGroup } from '../../api/omni_insert';\r\nimport { MathType, delimiterForType } from '../../api/math';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\r\nimport { EditorFormat, kQuartoDocType } from '../../api/format';\r\n\r\nexport class InsertInlineMathCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI) {\r\n super(EditorCommandId.InlineMath, [], insertMathCommand(MathType.Inline, false), inlineMathOmniInsert(ui));\r\n }\r\n}\r\n\r\nexport class InsertDisplayMathCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI, allowNewline: boolean) {\r\n super(\r\n EditorCommandId.DisplayMath,\r\n [],\r\n insertMathCommand(MathType.Display, allowNewline),\r\n displayMathOmniInsert(ui),\r\n );\r\n }\r\n}\r\n\r\nfunction insertMathCommand(type: MathType, allowNewline: boolean) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // enable/disable command\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.text) || !toggleMarkType(schema.marks.math)(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n insertMath(state.selection, type, allowNewline, tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nfunction inlineMathOmniInsert(ui: EditorUI): OmniInsert {\r\n return {\r\n name: ui.context.translateText('Inline Math'),\r\n keywords: [ui.context.translateText('equation')],\r\n description: ui.context.translateText('Math within a line or paragraph'),\r\n group: OmniInsertGroup.Math,\r\n priority: 2,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.math_inline_dark : ui.images.omni_insert.math_inline),\r\n };\r\n}\r\n\r\nfunction displayMathOmniInsert(ui: EditorUI): OmniInsert {\r\n return {\r\n name: ui.context.translateText('Display Math'),\r\n keywords: [ui.context.translateText('equation')],\r\n description: ui.context.translateText('Math set apart from the main text'),\r\n group: OmniInsertGroup.Math,\r\n priority: 1,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.math_display_dark : ui.images.omni_insert.math_display,\r\n };\r\n}\r\n\r\nexport function insertMath(selection: Selection, type: MathType, allowNewline: boolean, tr: Transaction) {\r\n // include a newline for display math in an empty paragraph\r\n const schema = tr.doc.type.schema;\r\n let content = '';\r\n if (type === MathType.Display) {\r\n const para = findParentNodeOfType(schema.nodes.paragraph)(selection);\r\n if (allowNewline && para && !para.node.textContent.length) {\r\n content = '\\n\\n';\r\n }\r\n }\r\n const delim = delimiterForType(type);\r\n const mathText = schema.text(delim + content + delim);\r\n tr.replaceSelectionWith(mathText, false);\r\n const mathMark = schema.marks.math.create({ type });\r\n const from = tr.selection.head - content.length - delim.length * 2;\r\n const to = from + delim.length * 2 + content.length;\r\n tr.addMark(from, to, mathMark);\r\n const pos = tr.mapping.map(selection.head) - delim.length - (content ? 1 : 0);\r\n return setTextSelection(pos)(tr).scrollIntoView();\r\n}\r\n\r\nexport function editMathAttributesEnabled(\r\n format: EditorFormat, \r\n state: EditorState, \r\n range?: { from: number, to: number } | false\r\n) {\r\n if (format.docTypes.includes(kQuartoDocType)) {\r\n if (!range) {\r\n range = getMarkRange(state.selection.$from, state.schema.marks.math);\r\n }\r\n if (range) {\r\n const mathAttrs = getMarkAttrs(state.doc, range, state.schema.marks.math);\r\n return mathAttrs.type === MathType.Display;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nexport function editMathAttributes(ui: EditorUI) {\r\n \r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n \r\n // look one position ahead in case this resulted from a click on the edit attributes button\r\n const mathRange = getMarkRange(\r\n state.doc.resolve(state.selection.from+1), \r\n state.schema.marks.math\r\n ) as { from: number; to: number };\r\n if (!mathRange) {\r\n // always return true so the edit button always displays\r\n return true;\r\n }\r\n\r\n async function asyncEditMath() {\r\n if (dispatch) {\r\n \r\n const mathAttrs = getMarkAttrs(state.doc, mathRange, state.schema.marks.math);\r\n const id = await ui.dialogs.editMath(mathAttrs.id || \"\");\r\n if (id !== null) {\r\n const tr = state.tr;\r\n const mark = state.schema.marks.math.create({ ...mathAttrs, id: id.length > 0 ? id : null });\r\n tr.removeMark(mathRange.from, mathRange.to, state.schema.marks.math);\r\n tr.addMark(mathRange.from, mathRange.to, mark);\r\n dispatch(tr);\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncEditMath();\r\n\r\n return true;\r\n };\r\n}\r\n","/*\r\n * math-transaction.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { findChildrenByMark } from 'prosemirror-utils';\r\n\r\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\r\nimport { AppendMarkTransactionHandler, MarkTransaction } from '../../api/transaction';\r\nimport { delimiterForType, MathType } from '../../api/math';\r\nimport { selectionIsWithinRange } from '../../api/selection';\r\n\r\nexport function mathAppendMarkTransaction(): AppendMarkTransactionHandler {\r\n return {\r\n name: 'math-marks',\r\n\r\n filter: node => node.isTextblock && node.type.allowsMarkType(node.type.schema.marks.math),\r\n\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n // find all math blocks and convert them to text if they no longer conform\r\n const schema = node.type.schema;\r\n const maths = findChildrenByMark(node, schema.marks.math, true);\r\n for (const math of maths) {\r\n const from = pos + 1 + math.pos;\r\n const mathRange = getMarkRange(tr.doc.resolve(from), schema.marks.math);\r\n if (mathRange) {\r\n const mathAttr = getMarkAttrs(tr.doc, mathRange, schema.marks.math);\r\n if (mathAttr.type === MathType.Inline) {\r\n const mathDelim = delimiterForType(mathAttr.type);\r\n const mathText = tr.doc.textBetween(mathRange.from, mathRange.to);\r\n const charAfter = tr.doc.textBetween(mathRange.to, mathRange.to + 1);\r\n const noDelims = !mathText.startsWith(mathDelim) || !mathText.endsWith(mathDelim);\r\n const selectionIsWithin = selectionIsWithinRange(tr.selection, mathRange);\r\n const spaceAtLeft =\r\n !selectionIsWithin && mathAttr.type === MathType.Inline && mathText.startsWith(mathDelim + ' ');\r\n const spaceAtRight =\r\n !selectionIsWithin && mathAttr.type === MathType.Inline && mathText.endsWith(' ' + mathDelim);\r\n const numberAfter = mathAttr.type === MathType.Inline && /\\d/.test(charAfter);\r\n if (noDelims || spaceAtLeft || spaceAtRight || numberAfter) {\r\n tr.removeMark(mathRange.from, mathRange.to, schema.marks.math);\r\n tr.removeStoredMark(schema.marks.math);\r\n }\r\n }\r\n }\r\n }\r\n },\r\n };\r\n}\r\n","/*\r\n * math-highlight.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration } from 'prosemirror-view';\r\nimport { Schema } from 'prosemirror-model';\r\n\r\nimport { markHighlightPlugin } from '../../api/mark-highlight';\r\nimport { delimiterForType } from '../../api/math';\r\n\r\nconst key = new PluginKey<DecorationSet>('math-highlight');\r\n\r\nexport function mathHighlightPlugin(schema: Schema) {\r\n return markHighlightPlugin(key, schema.marks.math, (_text, attrs, markRange) => {\r\n const kDelimClass = 'pm-markup-text-color';\r\n const delim = delimiterForType(String(attrs.type));\r\n if (markRange.to - markRange.from === delim.length * 2) {\r\n return [Decoration.inline(markRange.from, markRange.to, { class: kDelimClass })];\r\n } else {\r\n return [\r\n Decoration.inline(markRange.from, markRange.from + delim.length, { class: kDelimClass }),\r\n Decoration.inline(markRange.to - delim.length, markRange.to, { class: kDelimClass }),\r\n ];\r\n }\r\n });\r\n}\r\n","/*\r\n * math-preview.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { ResolvedPos } from 'prosemirror-model';\r\n\r\nimport debounce from 'lodash.debounce';\r\nimport zenscroll from 'zenscroll';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { getMarkRange } from '../../api/mark';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { ScrollEvent, ResizeEvent } from '../../api/event-types';\r\nimport { applyStyles } from '../../api/css';\r\nimport { editingRootNodeClosestToPos, editingRootNode } from '../../api/node';\r\nimport { createPopup } from '../../api/widgets/widgets';\r\nimport { EditorMath } from '../../api/ui-types';\r\nimport { editorScrollContainer } from '../../api/scroll';\r\n\r\nconst kMathPopupVerticalOffset = 10;\r\nconst kMathPopupInputDebuounceMs = 250;\r\n\r\nconst key = new PluginKey('math-preview');\r\n\r\nexport class MathPopupPlugin extends Plugin {\r\n private readonly ui: EditorUI;\r\n private readonly math: EditorMath;\r\n\r\n private view: EditorView | null = null;\r\n\r\n private popup: HTMLElement | null = null;\r\n private lastRenderedMath: string | null = null;\r\n\r\n private readonly updatePopupTimer: number;\r\n\r\n private scrollUnsubscribe: VoidFunction;\r\n private resizeUnsubscribe: VoidFunction;\r\n\r\n constructor(ui: EditorUI, math: EditorMath, events: EditorEvents, onHover: boolean) {\r\n super({\r\n key,\r\n view: () => {\r\n return {\r\n update: debounce(\r\n (view: EditorView) => {\r\n this.view = view;\r\n this.updatePopup();\r\n },\r\n kMathPopupInputDebuounceMs,\r\n { leading: true, trailing: true },\r\n ),\r\n destroy: () => {\r\n clearInterval(this.updatePopupTimer);\r\n this.scrollUnsubscribe();\r\n this.resizeUnsubscribe();\r\n this.closePopup();\r\n },\r\n };\r\n },\r\n props: {\r\n handleDOMEvents: {\r\n ...(onHover\r\n ? {\r\n mousemove: debounce((view: EditorView, event: Event) => {\r\n const ev = event as MouseEvent;\r\n const pos = view.posAtCoords({ top: ev.clientY, left: ev.clientX });\r\n if (pos && pos.inside !== -1) {\r\n this.updatePopup(view.state.doc.resolve(pos.pos));\r\n }\r\n return false;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, kMathPopupInputDebuounceMs) as (view: EditorView, event: Event) => boolean,\r\n }\r\n : {}),\r\n },\r\n },\r\n });\r\n\r\n // save reference to ui and math\r\n this.ui = ui;\r\n this.math = math;\r\n\r\n // update popup for resize, scrolling, as well as every 100ms to cover reflowing\r\n // of the document as a result of latex math being shown/hidden (will effectively\r\n // be a no-op if the math text and document layout / scroll position hasn't changed)\r\n this.updatePopup = this.updatePopup.bind(this);\r\n this.updatePopupTimer = window.setInterval(this.updatePopup, 100);\r\n this.scrollUnsubscribe = events.subscribe(ScrollEvent, () => this.updatePopup());\r\n this.resizeUnsubscribe = events.subscribe(ResizeEvent, () => this.updatePopup());\r\n }\r\n\r\n private updatePopup($mousePos?: ResolvedPos) {\r\n // bail if we don't have a view\r\n if (!this.view) {\r\n return;\r\n }\r\n\r\n // capture state, etc.\r\n const state = this.view.state;\r\n const schema = state.schema;\r\n\r\n // determine math range\r\n let range: false | { from: number; to: number } = false;\r\n\r\n // if a $pos was passed (e.g. for a mouse hover) then check that first\r\n if ($mousePos) {\r\n range = getMarkRange($mousePos, schema.marks.math);\r\n }\r\n\r\n // if that didn't work try the selection\r\n if (!range) {\r\n range = getMarkRange(state.selection.$from, schema.marks.math);\r\n }\r\n\r\n // bail if we don't have a target\r\n if (!range) {\r\n this.closePopup();\r\n return;\r\n }\r\n\r\n // bail if the user has this disabled\r\n if (!this.ui.prefs.equationPreview()) {\r\n this.closePopup();\r\n return;\r\n }\r\n\r\n // get the math text. bail if it's empty\r\n const inlineMath = state.doc.textBetween(range.from, range.to);\r\n if (inlineMath.match(/^\\${1,2}\\s*\\${1,2}$/)) {\r\n this.closePopup();\r\n return;\r\n }\r\n\r\n // get the position for the range\r\n const styles = popupPositionStyles(this.view, range);\r\n\r\n // if the popup already exists just move it\r\n if (this.popup) {\r\n applyStyles(this.popup, [], styles);\r\n } else {\r\n this.popup = createPopup(this.view, ['pm-math-preview'], undefined, {\r\n ...styles,\r\n visibility: 'hidden',\r\n });\r\n this.view.dom.parentNode?.appendChild(this.popup);\r\n }\r\n\r\n // typeset the math if we haven't already\r\n if (inlineMath !== this.lastRenderedMath && this.popup) {\r\n this.math.typeset!(this.popup, inlineMath, true).then(error => {\r\n if (!error) {\r\n if (this.popup) {\r\n this.popup.style.visibility = 'visible';\r\n this.lastRenderedMath = inlineMath;\r\n // autoscroll for non-mouse triggers\r\n if (!$mousePos && range) {\r\n this.autoscollPopup(range);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n private closePopup() {\r\n this.lastRenderedMath = null;\r\n if (this.popup) {\r\n this.popup.remove();\r\n this.popup = null;\r\n }\r\n }\r\n\r\n private autoscollPopup(mathRange: { from: number; to: number }) {\r\n const editingRoot = editingRootNode(this.view!.state.selection);\r\n if (editingRoot) {\r\n const editorEl = this.view!.nodeDOM(editingRoot.pos) as HTMLElement;\r\n const editorBox = editorEl.getBoundingClientRect();\r\n const popupBox = this.popup!.getBoundingClientRect();\r\n if (popupBox.top + popupBox.height + kMathPopupVerticalOffset > editorBox.bottom) {\r\n const mathBottom = this.view!.coordsAtPos(mathRange.to);\r\n const mathScrollBottom = editorEl.scrollTop + mathBottom.bottom;\r\n const mathPopupScrollBottom = mathScrollBottom + kMathPopupVerticalOffset + popupBox.height;\r\n const scrollTop = mathPopupScrollBottom + kMathPopupVerticalOffset - editorBox.top - editorBox.height;\r\n const scroller = zenscroll.createScroller(editorScrollContainer(editorEl));\r\n scroller.toY(scrollTop, 100);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction popupPositionStyles(view: EditorView, range: { from: number; to: number }) {\r\n // get coordinates for editor view (use to offset)\r\n const editorBox = (view.dom.parentNode! as HTMLElement).getBoundingClientRect();\r\n\r\n // +1 to ensure beginning of line doesn't resolve as line before\r\n // (will subtract it back out below)\r\n const rangeStartCoords = view.coordsAtPos(range.from + 1);\r\n const rangeEndCoords = view.coordsAtPos(range.to);\r\n\r\n // default positions\r\n const top = Math.round(rangeEndCoords.bottom - editorBox.top) + kMathPopupVerticalOffset + 'px';\r\n let left = `calc(${Math.round(rangeStartCoords.left - editorBox.left)}px - 1ch)`;\r\n\r\n // if it flow across two lines then position at far left of editing root\r\n // (we give it the 5 pixels of wiggle room so that detection still works\r\n // when a mathjax preview is shown in place of math text)\r\n if (Math.abs(rangeStartCoords.bottom - rangeEndCoords.bottom) > 5) {\r\n const editingRoot = editingRootNodeClosestToPos(view.state.doc.resolve(range.from));\r\n if (editingRoot) {\r\n const editingEl = view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n if (editingEl) {\r\n const editingElStyle = window.getComputedStyle(editingEl);\r\n left = `calc(${editingEl.getBoundingClientRect().left}px + ${editingElStyle.paddingLeft} - 1ch - 2px)`;\r\n }\r\n }\r\n }\r\n\r\n // return position\r\n return { top, left };\r\n}\r\n","/*\r\n * attr_edit-decoration.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { NodeSelection } from 'prosemirror-state';\r\nimport { EditorView, Decoration } from 'prosemirror-view';\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport * as React from 'react';\r\n\r\nimport { EditorUI } from '../ui-types';\r\nimport { ImageButton } from '../../api/widgets/button';\r\nimport { CommandFn } from '../../api/command';\r\nimport { WidgetProps, reactRenderForEditorView } from '../../api/widgets/react';\r\n\r\nimport { selectionIsWithinRange } from '../../api/selection';\r\nimport './attr_edit-decoration.css';\r\nimport { GapCursor } from 'prosemirror-gapcursor';\r\n\r\nexport const kEditAttrShortcut = 'F4';\r\n\r\nexport interface AttrEditDecorationOptions {\r\n pos: number;\r\n tags: string[];\r\n editFn: CommandFn;\r\n ui: EditorUI;\r\n offset?: { top: number; right: number };\r\n preferHidden?: boolean;\r\n noSelectOnClick?: boolean;\r\n}\r\n\r\nexport function attrEditDecorationWidget(options: AttrEditDecorationOptions) {\r\n return Decoration.widget(\r\n options.pos,\r\n (view: EditorView, getPos: () => number | undefined) => {\r\n // does the offsetParent have any right padding we need to offset for?\r\n // we normally use right: 5px for positioning but that is relative to\r\n // the edge of the offsetParent. However, some offset parents (e.g. a\r\n // td or a nested div) have their own internal padding to account for\r\n // so we look for it here\r\n let rightPaddingOffset = 0;\r\n const pos = getPos();\r\n if (pos !== undefined) {\r\n const attrsNode = view.nodeDOM(pos);\r\n if (attrsNode) {\r\n const attrsEl = attrsNode as HTMLElement;\r\n if (attrsEl.offsetParent) {\r\n const offsetParentStyle = window.getComputedStyle(attrsEl.offsetParent);\r\n rightPaddingOffset = -parseInt(offsetParentStyle.paddingRight!, 10) || 0;\r\n }\r\n }\r\n }\r\n\r\n // cacculate position offsets\r\n const baseOffset = options.offset || { top: 0, right: 0 };\r\n const xOffset = baseOffset.right + rightPaddingOffset;\r\n const yOffset = baseOffset.top + 6;\r\n const cssProps: React.CSSProperties = {\r\n transform: `translate(${xOffset}px,-${yOffset}px)`,\r\n };\r\n\r\n // create attr edit react component\r\n const attrEdit = (\r\n <AttrEditDecoration\r\n tags={options.tags}\r\n editFn={options.editFn}\r\n getPos={getPos}\r\n view={view}\r\n ui={options.ui}\r\n style={cssProps}\r\n noSelectOnClick={options.noSelectOnClick}\r\n />\r\n );\r\n\r\n // create decorator and render attr editor into it\r\n const decoration = window.document.createElement('div');\r\n reactRenderForEditorView(attrEdit, decoration, view);\r\n\r\n return decoration;\r\n },\r\n {\r\n ignoreSelection: true,\r\n stopEvent: () => {\r\n return true;\r\n },\r\n preferHidden: options.preferHidden\r\n },\r\n );\r\n}\r\n\r\ninterface AttrEditDecorationProps extends WidgetProps {\r\n tags: string[];\r\n editFn: CommandFn;\r\n getPos: () => number | undefined;\r\n view: EditorView;\r\n ui: EditorUI;\r\n noSelectOnClick?: boolean;\r\n}\r\n\r\nconst AttrEditDecoration: React.FC<AttrEditDecorationProps> = props => {\r\n const buttonTitle = `${props.ui.context.translateText('Edit Attributes')} (${kEditAttrShortcut})`;\r\n\r\n const onClick = () => {\r\n // set selection before invoking function\r\n if (props.view.dispatch && !props.noSelectOnClick) {\r\n const pos = props.getPos();\r\n if (pos !== undefined) {\r\n const node = props.view.state.doc.nodeAt(pos);\r\n if (node) {\r\n const tr = props.view.state.tr;\r\n if (node.type.spec.selectable) {\r\n tr.setSelection(new NodeSelection(tr.doc.resolve(pos)));\r\n } else if (!selectionIsWithinRange(tr.selection, { from: pos, to: pos + node.nodeSize })) {\r\n setTextSelection(pos + 1)(tr);\r\n } else if (tr.selection instanceof NodeSelection) {\r\n const cursor = new GapCursor(tr.doc.resolve(pos+1));\r\n tr.setSelection(cursor);\r\n }\r\n props.view.dispatch(tr);\r\n }\r\n }\r\n \r\n }\r\n \r\n // perform edit\r\n props.editFn(props.view.state, props.view.dispatch, props.view);\r\n };\r\n\r\n return (\r\n <div className=\"pm-attr-edit-decoration pm-surface-widget-text-color \" style={props.style}>\r\n {props.tags.length\r\n ? props.tags.map(tag => {\r\n return (\r\n <span\r\n key={tag}\r\n className=\"attr-edit-tag attr-edit-widget pm-block-border-color pm-border-background-color\"\r\n onClick={onClick}\r\n >\r\n {tag}\r\n </span>\r\n );\r\n })\r\n : null}\r\n {props.editFn(props.view.state) ? (\r\n <ImageButton\r\n classes={['attr-edit-button']}\r\n image={props.ui.prefs.darkMode() ? props.ui.images.properties_deco_dark! : props.ui.images.properties_deco!}\r\n title={buttonTitle}\r\n tabIndex={-1}\r\n onClick={onClick}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n","/*\r\n * math-viewts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey, EditorState, Transaction, Selection, EditorStateConfig } from 'prosemirror-state';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { DecorationSet, EditorView, Decoration } from 'prosemirror-view';\r\nimport { keymap } from 'prosemirror-keymap';\r\nimport { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';\r\n\r\nimport { findChildrenByMark, setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { getMarkRange, getMarkAttrs } from '../../api/mark';\r\n\r\nimport { MathType } from '../../api/math';\r\nimport { EditorMath, EditorUI } from '../../api/ui-types';\r\nimport { kSetMarkdownTransaction, kThemeChangedTransaction } from '../../api/transaction';\r\nimport { attrEditDecorationWidget } from '../../api/attr_edit/attr_edit-decoration';\r\nimport { EditorFormat } from '../../api/format';\r\nimport { editMathAttributes, editMathAttributesEnabled } from './math-commands';\r\n\r\n// NOTE: rendered equations don't curently show selection background color when part\r\n// of a larger selection (in spite of a few failed attempts to get this to work)\r\n// it would be nice to figure out how to do this\r\n\r\nexport function mathViewPlugins(schema: Schema, format: EditorFormat, ui: EditorUI, math: EditorMath): Plugin[] {\r\n return [\r\n mathViewPlugin(schema, format, ui, math),\r\n keymap({\r\n ArrowUp: verticalArrowHandler('up'),\r\n ArrowDown: verticalArrowHandler('down'),\r\n }),\r\n ];\r\n}\r\n\r\nfunction mathViewPlugin(schema: Schema, format: EditorFormat, ui: EditorUI, math: EditorMath) {\r\n const key = new PluginKey<DecorationSet>('math-view');\r\n\r\n function decorationsForDoc(state: EditorState) {\r\n const decorations: Decoration[] = [];\r\n findChildrenByMark(state.doc, schema.marks.math, true).forEach(markedNode => {\r\n // get mark range and attributes\r\n const range = getMarkRange(state.doc.resolve(markedNode.pos), schema.marks.math) as { from: number; to: number };\r\n const attrs = getMarkAttrs(state.doc, range, schema.marks.math);\r\n\r\n // if the selection isn't in the mark, then show the preview\r\n const preview = state.selection.from < range.from || state.selection.from > range.to;\r\n if (preview) {\r\n // get the math text\r\n const mathText = state.doc.textBetween(range.from, range.to);\r\n\r\n // hide the code\r\n decorations.push(Decoration.inline(range.from, range.to, { style: 'display: none;' }));\r\n\r\n // show a math preview\r\n decorations.push(\r\n Decoration.widget(\r\n range.from,\r\n (view: EditorView, getPos: () => number | undefined) => {\r\n const mathjaxDiv = window.document.createElement('div');\r\n mathjaxDiv.classList.add('pm-math-mathjax');\r\n // text selection 'within' code for clicks on the preview image\r\n mathjaxDiv.onclick = () => {\r\n const tr = view.state.tr;\r\n let pos = getPos();\r\n if (pos !== undefined) {\r\n if (attrs.type === MathType.Display) {\r\n // set position to first non $, non whitespace character\r\n const match = mathText.match(/^[$\\s]+/);\r\n if (match) {\r\n pos += match[0].length;\r\n }\r\n } else {\r\n // set position to the middle of the equation\r\n pos = pos + mathText.length / 2;\r\n }\r\n setTextSelection(pos)(tr);\r\n view.dispatch(tr);\r\n view.focus();\r\n }\r\n };\r\n math.typeset(mathjaxDiv, mathText, ui.context.isActiveTab());\r\n return mathjaxDiv;\r\n },\r\n { key: mathText },\r\n ),\r\n );\r\n } \r\n\r\n // for display math in quarto, show an edit widget\r\n if (editMathAttributesEnabled(format, state, range)) {\r\n decorations.push(attrEditDecorationWidget({\r\n pos: markedNode.pos-1,\r\n tags: attrs.id ? [`#${attrs.id}`] : [],\r\n editFn: editMathAttributes(ui),\r\n ui,\r\n offset: { top: 0, right: 6 },\r\n }));\r\n }\r\n });\r\n\r\n return DecorationSet.create(state.doc, decorations);\r\n }\r\n\r\n return new Plugin<DecorationSet>({\r\n key,\r\n\r\n state: {\r\n init(_config: EditorStateConfig, instance: EditorState) {\r\n return decorationsForDoc(instance);\r\n },\r\n\r\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\r\n // replacing the entire editor triggers decorations\r\n if (tr.getMeta(kSetMarkdownTransaction) || tr.getMeta(kThemeChangedTransaction)) {\r\n return decorationsForDoc(newState);\r\n\r\n // if one of the steps added or removed a mark of our type then rescan the doc.\r\n } else if (\r\n tr.steps.some(\r\n step =>\r\n (step instanceof AddMarkStep && step.mark.type === schema.marks.math) ||\r\n (step instanceof RemoveMarkStep && step.mark.type === schema.marks.math),\r\n )\r\n ) {\r\n return decorationsForDoc(newState);\r\n\r\n // if the previous or current state is in or at the border of a math mark, then rescan\r\n } else if (\r\n oldState.doc.rangeHasMark(oldState.selection.from - 2, oldState.selection.from + 1, schema.marks.math) ||\r\n getMarkRange(newState.selection.$from, schema.marks.math)\r\n ) {\r\n return decorationsForDoc(newState);\r\n\r\n // incremental scanning based on presence of mark in changed regions\r\n } else {\r\n // adjust decoration positions to changes made by the transaction (decorations that apply\r\n // to removed chunks of content will be removed by this)\r\n return set.map(tr.mapping, tr.doc);\r\n }\r\n },\r\n },\r\n\r\n appendTransaction: (_transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => {\r\n // not currently in math\r\n if (!getMarkRange(newState.selection.$from, schema.marks.math) && newState.selection.from > 0) {\r\n // did we end up just to the right of math? if so check for navigation from a distance\r\n // (would imply an up/down arrow)\r\n const prevMathRange = getMarkRange(newState.doc.resolve(newState.selection.from - 1), schema.marks.math);\r\n if (prevMathRange) {\r\n // if the selection came from afar then treat it as an actual selection\r\n const delta = oldState.selection.from - newState.selection.from;\r\n if (Math.abs(delta) > 3) {\r\n const tr = newState.tr;\r\n const mathText = newState.doc.textBetween(prevMathRange.from, prevMathRange.to);\r\n const attrs = getMarkAttrs(newState.doc, prevMathRange, schema.marks.math);\r\n if (attrs.type === MathType.Inline) {\r\n setTextSelection(prevMathRange.from + mathText.length / 2)(tr);\r\n }\r\n return tr;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n props: {\r\n decorations(state: EditorState) {\r\n return key.getState(state);\r\n },\r\n },\r\n });\r\n}\r\n\r\nfunction verticalArrowHandler(dir: 'up' | 'down') {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n if (!view) {\r\n return false;\r\n }\r\n\r\n const schema = state.schema;\r\n\r\n // see if we need to provide up/down for inline math (it doesn't work by default, likely because\r\n // of the display: none decorator). This implementation just moves the selection before or\r\n // after the mark (better than the cursor doing nothing which is what we saw w/o this) however\r\n // it would be cool if we could fully emulate up/down\r\n const range = getMarkRange(state.selection.$head, schema.marks.math);\r\n if (range) {\r\n const attrs = getMarkAttrs(state.doc, range, schema.marks.math);\r\n if (attrs.type === MathType.Inline) {\r\n if (dispatch) {\r\n const side = dir === 'up' ? -1 : 1;\r\n const $head = state.selection.$head;\r\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\r\n const tr = state.tr;\r\n tr.setSelection(nextPos);\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n if (view.endOfTextblock(dir)) {\r\n const side = dir === 'up' ? -1 : 1;\r\n const $head = state.selection.$head;\r\n const nextPos = Selection.near(state.doc.resolve(side > 0 ? $head.after() : $head.before()), side);\r\n if (\r\n nextPos.$head &&\r\n nextPos.$head.parent.childCount === 1 &&\r\n schema.marks.math.isInSet(nextPos.$head.parent.firstChild!.marks)\r\n ) {\r\n if (dispatch) {\r\n const mathText = nextPos.$head.parent.textContent;\r\n const match = mathText.match(/^[$\\s]+/);\r\n if (match) {\r\n const tr = state.tr;\r\n const mathPos = nextPos.$head.start($head.depth);\r\n setTextSelection(mathPos + match[0].length)(tr);\r\n dispatch(tr);\r\n }\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n}\r\n","/*\r\n * math-keys.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { EditorState, Transaction } from \"prosemirror-state\";\r\nimport { setTextSelection } from \"prosemirror-utils\";\r\n\r\nimport { MathType, mathTypeIsActive } from \"../../api/math\";\r\nimport { getSelectionMarkRange } from \"../../api/mark\";\r\n\r\n// enable insertion of newlines\r\nexport function displayMathNewline(state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n // display math mark must be active\r\n if (!mathTypeIsActive(state, MathType.Display)) {\r\n return false;\r\n }\r\n\r\n // insert a newline\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.insertText('\\n');\r\n dispatch(tr);\r\n }\r\n return true;\r\n}\r\n\r\nexport function inlineMathNav(begin: boolean) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // inlne math mark must be active\r\n if (!mathTypeIsActive(state, MathType.Inline)) {\r\n return false;\r\n }\r\n const range = getSelectionMarkRange(state.selection, state.schema.marks.math);\r\n if (!range) {\r\n return false;\r\n }\r\n \r\n // insert a newline\r\n if (dispatch) {\r\n const tr = state.tr;\r\n setTextSelection(begin ? (range.from+1) : (range.to-1))(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n };\r\n}\r\n","/*\r\n * math.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, Mark, Fragment, Slice } from 'prosemirror-model';\r\nimport { Plugin, PluginKey, EditorState } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { PandocTokenType, PandocToken, PandocOutput } from '../../api/pandoc';\r\nimport { BaseKey, BaseKeyBinding } from '../../api/basekeys';\r\nimport { domAttrNoSpelling, markIsActive } from '../../api/mark';\r\nimport { kCodeText } from '../../api/code';\r\nimport { pasteTransaction } from '../../api/clipboard';\r\nimport { kQuartoDocType } from '../../api/format';\r\nimport { kMathContent, kMathType, delimiterForType, MathType, kMathId } from '../../api/math';\r\nimport { MarkInputRuleFilter } from '../../api/input_rule';\r\n\r\nimport { InsertInlineMathCommand, InsertDisplayMathCommand, insertMath } from './math-commands';\r\nimport { mathAppendMarkTransaction } from './math-transaction';\r\nimport { mathHighlightPlugin } from './math-highlight';\r\nimport { MathPopupPlugin } from './math-popup';\r\nimport { mathViewPlugins } from './math-view';\r\nimport { displayMathNewline, inlineMathNav } from './math-keys';\r\n\r\nimport './math-styles.css';\r\n\r\nconst kInlineMathPattern = '\\\\$[^ ].*?[^\\\\ ]?\\\\$';\r\nconst kInlineMathRegex = new RegExp(kInlineMathPattern);\r\n\r\nconst kSingleLineDisplayMathPattern = '\\\\$\\\\$[^\\n]*?\\\\$\\\\$';\r\nconst kSingleLineDisplayMathRegex = new RegExp(kSingleLineDisplayMathPattern);\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { ui, format, math, events } = context;\r\n\r\n // note that we always enable math (harmless as worst case it is \r\n // simply output as ascii math by pandoc) so no check is made here\r\n\r\n // special blogdown handling for markdown renderers that don't support math\r\n const blogdownMathInCode = format.rmdExtensions.blogdownMathInCode;\r\n const singleLineDisplayMath = blogdownMathInCode;\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'math',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n attrs: {\r\n type: {},\r\n id: { default: null }\r\n },\r\n inclusive: false,\r\n excludes: 'formatting',\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='math']\",\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n type: el.getAttribute('data-type'),\r\n };\r\n },\r\n preserveWhitespace: 'full',\r\n },\r\n ],\r\n\r\n toDOM(mark: Mark) {\r\n return [\r\n 'span',\r\n domAttrNoSpelling({\r\n class: 'math pm-fixedwidth-font pm-light-text-color',\r\n 'data-type': mark.attrs.type,\r\n spellcheck: 'false',\r\n }),\r\n ];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Math,\r\n mark: 'math',\r\n getAttrs: (tok: PandocToken) => {\r\n return {\r\n type: tok.c[kMathType].t,\r\n id: tok.c[kMathId] || null\r\n };\r\n },\r\n getText: (tok: PandocToken) => {\r\n const delimter = delimiterForType(tok.c[kMathType].t);\r\n return delimter + tok.c[kMathContent] + delimter;\r\n },\r\n },\r\n // extract math from backtick code for blogdown\r\n ...(blogdownMathInCode\r\n ? [\r\n {\r\n token: PandocTokenType.Code,\r\n mark: 'math',\r\n match: (tok: PandocToken) => {\r\n const text = tok.c[kCodeText];\r\n return kSingleLineDisplayMathRegex.test(text) || kInlineMathRegex.test(text);\r\n },\r\n getAttrs: (tok: PandocToken) => {\r\n const text = tok.c[kCodeText];\r\n return {\r\n type: kSingleLineDisplayMathRegex.test(text) ? MathType.Display : MathType.Inline,\r\n };\r\n },\r\n getText: (tok: PandocToken) => {\r\n return tok.c[kCodeText];\r\n },\r\n },\r\n ]\r\n : []),\r\n ],\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\r\n // collect math content\r\n let mathText = '';\r\n parent.forEach((node: ProsemirrorNode) => (mathText = mathText + node.textContent));\r\n\r\n // if this is blogdownMathInCode just write the content in a code mark\r\n if (blogdownMathInCode) {\r\n output.writeToken(PandocTokenType.Code, () => {\r\n output.writeAttr();\r\n output.write(mathText);\r\n });\r\n } else {\r\n // check for delimeter (if it's gone then write this w/o them math mark)\r\n const delimiter = delimiterForType(mark.attrs.type);\r\n if (mathText.startsWith(delimiter) && mathText.endsWith(delimiter)) {\r\n // remove delimiter\r\n mathText = mathText.substr(delimiter.length, mathText.length - 2 * delimiter.length);\r\n\r\n \r\n if (mark.attrs.type === MathType.Inline) {\r\n // trim inline math\r\n mathText = mathText.trim();\r\n } else if (mark.attrs.type === MathType.Display) {\r\n // remove blank lines from display math (but preserve enclosing whitespace)\r\n const beginMatch = mathText.match(/^\\s*/);\r\n const begin = beginMatch ? beginMatch[0].replace(/\\n{2,}/g, \"\\n\") : '';\r\n const endMatch = mathText.match(/\\s*$/);\r\n const end = endMatch ? endMatch[0].replace(/\\n{2,}/g, \"\\n\") : '';\r\n mathText = begin + mathText.trim()\r\n .split(\"\\n\")\r\n .filter(line => line.trim().length > 0)\r\n .join(\"\\n\") + end;\r\n }\r\n \r\n // if it's just whitespace then it's not actually math (we allow this state\r\n // in the editor because it's the natural starting place for new equations)\r\n if (mathText.length === 0) {\r\n output.writeText(delimiter + mathText + delimiter);\r\n } else {\r\n output.writeToken(PandocTokenType.Math, () => {\r\n // write type\r\n output.writeToken(\r\n mark.attrs.type === MathType.Inline ? PandocTokenType.InlineMath : PandocTokenType.DisplayMath,\r\n );\r\n output.write(mathText);\r\n });\r\n // write id if we have it\r\n if (mark.attrs.id) {\r\n output.writeRawMarkdown(` {#${mark.attrs.id}}`);\r\n }\r\n }\r\n } else {\r\n // user removed the delimiter so write the content literally. when it round trips\r\n // back into editor it will no longer be parsed by pandoc as math\r\n output.writeRawMarkdown(mathText);\r\n }\r\n }\r\n },\r\n },\r\n // filter for picking out id for quarto crossref\r\n tokensFilter: format.docTypes.includes(kQuartoDocType) ? (tokens: PandocToken[]) => {\r\n const pendingTokens: PandocToken[] = [];\r\n const filteredTokens: PandocToken[] = [];\r\n\r\n const clearPendingTokens = () => {\r\n pendingTokens.splice(0, pendingTokens.length);\r\n };\r\n\r\n const flushPendingTokens = () => {\r\n filteredTokens.push(...pendingTokens);\r\n clearPendingTokens();\r\n };\r\n\r\n for (const token of tokens) {\r\n switch(token.t) {\r\n case PandocTokenType.Math: \r\n flushPendingTokens();\r\n if (token.c[kMathType].t === PandocTokenType.DisplayMath) {\r\n pendingTokens.push(token);\r\n } else {\r\n filteredTokens.push(token);\r\n }\r\n break;\r\n case PandocTokenType.Space:\r\n if (pendingTokens.length > 0) {\r\n pendingTokens.push(token);\r\n } else {\r\n filteredTokens.push(token);\r\n }\r\n break;\r\n case PandocTokenType.Str:\r\n if (pendingTokens.length > 0) {\r\n const match = (token.c as string).match(/{#(eq-[^ }]+)}/);\r\n if (match) {\r\n const mathToken = pendingTokens[0];\r\n mathToken.c[kMathId] = match[1];\r\n clearPendingTokens();\r\n filteredTokens.push(mathToken);\r\n } else {\r\n flushPendingTokens();\r\n filteredTokens.push(token);\r\n }\r\n } else {\r\n filteredTokens.push(token);\r\n }\r\n break;\r\n default:\r\n flushPendingTokens();\r\n filteredTokens.push(token);\r\n break;\r\n }\r\n }\r\n flushPendingTokens();\r\n\r\n return filteredTokens;\r\n } : undefined\r\n },\r\n },\r\n ],\r\n\r\n baseKeys: () => {\r\n const keys: BaseKeyBinding[] = [\r\n { key: BaseKey.Home, command: inlineMathNav(true) },\r\n { key: BaseKey.End, command: inlineMathNav(false) }\r\n ];\r\n if (!singleLineDisplayMath) {\r\n keys.push({ key: BaseKey.Enter, command: displayMathNewline });\r\n } \r\n return keys;\r\n },\r\n\r\n inputRules: (schema: Schema, filter: MarkInputRuleFilter) => {\r\n const kInlineMathInputRulePattern = '\\\\$[^ ][^\\\\$]*?[^\\\\ ]?\\\\$';\r\n return [\r\n // inline math\r\n new InputRule(\r\n new RegExp('(^|\\\\s+)' + kInlineMathInputRulePattern + '$'),\r\n (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n if (!markIsActive(state, schema.marks.math) && filter(state) &&\r\n !state.doc.rangeHasMark(start, start+1, schema.marks.math)) {\r\n const tr = state.tr;\r\n tr.insertText('$');\r\n const mark = schema.marks.math.create({ type: MathType.Inline });\r\n tr.removeMark(start + match[1].length, end + 1, undefined);\r\n tr.addMark(start + match[1].length, end + 1, mark);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n },\r\n ),\r\n new InputRule(/(?:^|[^`])\\$$/, (state: EditorState, _match: RegExpMatchArray, start: number) => {\r\n if (!markIsActive(state, schema.marks.math)) {\r\n const { parent, parentOffset } = state.selection.$head;\r\n const text = '$' + parent.textContent.slice(parentOffset);\r\n if (text.length > 0) {\r\n const length = mathLength(text);\r\n if (length > 1) {\r\n if (filter(state, start, start + length)) {\r\n const tr = state.tr;\r\n tr.insertText('$');\r\n const startMath = tr.selection.from - 1;\r\n const mark = schema.marks.math.create({ type: MathType.Inline });\r\n tr.addMark(startMath, startMath + length, mark);\r\n return tr;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }),\r\n // display math\r\n new InputRule(/^\\$\\$$/, (state: EditorState, _match: RegExpMatchArray, start: number, end: number) => {\r\n if (filter(state, start, end)) {\r\n const tr = state.tr;\r\n tr.delete(start, end);\r\n insertMath(tr.selection, MathType.Display, !singleLineDisplayMath, tr);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n }),\r\n ];\r\n },\r\n\r\n commands: () => {\r\n return [new InsertInlineMathCommand(ui), new InsertDisplayMathCommand(ui, !singleLineDisplayMath)];\r\n },\r\n\r\n appendMarkTransaction: () => {\r\n return [mathAppendMarkTransaction()];\r\n },\r\n\r\n plugins: (schema: Schema) => {\r\n const plugins = [\r\n new Plugin({\r\n key: new PluginKey('math'),\r\n props: {\r\n // paste plain text into math blocks\r\n handlePaste: handlePasteIntoMath(),\r\n },\r\n }),\r\n mathHighlightPlugin(schema),\r\n ];\r\n if (math) {\r\n plugins.push(new MathPopupPlugin(ui, math, events, false));\r\n plugins.push(...mathViewPlugins(schema, format, ui, math));\r\n }\r\n return plugins;\r\n },\r\n };\r\n};\r\n\r\nfunction mathLength(text: string) {\r\n const match = text.match(kInlineMathRegex);\r\n if (match) {\r\n return match[0].length;\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\nfunction handlePasteIntoMath() {\r\n return (view: EditorView, _event: Event, slice: Slice) => {\r\n const schema = view.state.schema;\r\n if (markIsActive(view.state, schema.marks.math)) {\r\n const tr = pasteTransaction(view.state);\r\n let math = '';\r\n slice.content.forEach((node: ProsemirrorNode) => (math = math + node.textContent));\r\n tr.replaceSelectionWith(schema.text(math));\r\n view.dispatch(tr);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n}\r\n\r\n\r\nexport default extension;\r\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length)\n ? baseUniq(array, baseIteratee(iteratee, 2))\n : [];\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n // No operation performed.\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = uniqBy;\n","/**\n * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2022 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n totalWeight += obj.weight;\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array<String>\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array<Object>\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array<Object>\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '6.6.2';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","/*\r\n * path.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport function expandPaths(rootPath: string, paths: string[]): string[] {\r\n return paths.map(path => joinPaths(rootPath, path));\r\n}\r\n\r\nexport function joinPaths(root: string, path: string) {\r\n const mergedPath = `${root}/${path}`;\r\n\r\n // Clean out duplicate paths\r\n return mergedPath.replace(/\\/\\//g, '/');\r\n}\r\n\r\n// Ported from\r\n// https://github.com/denoland/deno_std/tree/main/path\r\nexport function isAbsolute(path: string, isWindows: boolean) {\r\n\r\n if (isWindows) {\r\n // Win32 implementation\r\n const len = path.length;\r\n if (len === 0) {\r\n return false;\r\n }\r\n\r\n const code = path.charCodeAt(0);\r\n if (isWinPathSeparator(code)) {\r\n return true;\r\n } else if (isWindowsDeviceRoot(code)) {\r\n // Possible device root\r\n\r\n if (len > 2 && path.charCodeAt(1) === CHAR_COLON) {\r\n if (isWinPathSeparator(path.charCodeAt(2))) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n\r\n } else {\r\n // posix implementation\r\n return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;\r\n }\r\n}\r\n\r\nexport function getExtension(path: string) {\r\n // Get the file out of the path\r\n const fileName = path.split(/[\\\\/]/).pop();\r\n if (fileName) {\r\n const lastDot = fileName.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n return fileName.slice(lastDot + 1);\r\n }\r\n }\r\n return '';\r\n}\r\n\r\nexport function changeExtension(path: string, extension: string) {\r\n const lastDot = path.lastIndexOf('.');\r\n const pathNoExtension = path.substr(0, lastDot + 1);\r\n return pathNoExtension + extension;\r\n}\r\n\r\nconst CHAR_UPPERCASE_A = 65; /* A */\r\nconst CHAR_LOWERCASE_A = 97; /* a */\r\nconst CHAR_UPPERCASE_Z = 90; /* Z */\r\nconst CHAR_LOWERCASE_Z = 122; /* z */\r\nconst CHAR_FORWARD_SLASH = 47; /* / */\r\nconst CHAR_BACKWARD_SLASH = 92; /* \\ */\r\nconst CHAR_COLON = 58; /* : */\r\n\r\nfunction isWinPathSeparator(code: number) {\r\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\r\n}\r\n\r\nfunction isWindowsDeviceRoot(code: number): boolean {\r\n return (\r\n (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) ||\r\n (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z)\r\n );\r\n}","\"use strict\";const e=[\"catalan\",\"croatian\",\"czech\",\"danish\",\"dutch\",\"english\",\"american\",\"finnish\",\"french\",\"german\",\"greek\",\"italian\",\"latin\",\"norwegian\",\"polish\",\"portuguese\",\"brazilian\",\"russian\",\"slovene\",\"spanish\",\"swedish\"],d={abstract:{type:\"f_long_literal\",biblatex:\"abstract\",csl:\"abstract\"},addendum:{type:\"f_literal\",biblatex:\"addendum\"},afterword:{type:\"l_name\",biblatex:\"afterword\"},annotation:{type:\"f_long_literal\",biblatex:\"annotation\"},annotator:{type:\"l_name\",biblatex:\"annotator\"},author:{type:\"l_name\",biblatex:\"author\",csl:\"author\"},bookauthor:{type:\"l_name\",biblatex:\"bookauthor\",csl:\"container-author\"},bookpagination:{type:\"f_key\",biblatex:\"bookpagination\",options:[\"page\",\"column\",\"section\",\"paragraph\",\"verse\",\"line\"]},booksubtitle:{type:\"f_title\",biblatex:\"booksubtitle\"},booktitle:{type:\"f_title\",biblatex:\"booktitle\",csl:\"container-title\"},booktitleaddon:{type:\"f_title\",biblatex:\"booktitleaddon\"},chapter:{type:\"f_literal\",biblatex:\"chapter\",csl:\"chapter-number\"},commentator:{type:\"l_name\",biblatex:\"commentator\"},date:{type:\"f_date\",biblatex:\"date\",csl:\"issued\"},doi:{type:\"f_verbatim\",biblatex:\"doi\",csl:\"DOI\"},edition:{type:\"f_integer\",biblatex:\"edition\",csl:\"edition\"},editor:{type:\"l_name\",biblatex:\"editor\",csl:\"editor\"},editora:{type:\"l_name\",biblatex:\"editora\"},editorb:{type:\"l_name\",biblatex:\"editorb\"},editorc:{type:\"l_name\",biblatex:\"editorc\"},editortype:{type:\"f_key\",biblatex:\"editortype\",options:[\"editor\",\"compiler\",\"founder\",\"continuator\",\"redactor\",\"reviser\",\"collaborator\"]},editoratype:{type:\"f_key\",biblatex:\"editoratype\",options:[\"editor\",\"compiler\",\"founder\",\"continuator\",\"redactor\",\"reviser\",\"collaborator\"]},editorbtype:{type:\"f_key\",biblatex:\"editorbtype\",options:[\"editor\",\"compiler\",\"founder\",\"continuator\",\"redactor\",\"reviser\",\"collaborator\"]},editorctype:{type:\"f_key\",biblatex:\"editorctype\",options:[\"editor\",\"compiler\",\"founder\",\"continuator\",\"redactor\",\"reviser\",\"collaborator\"]},eid:{type:\"f_literal\",biblatex:\"eid\"},entrysubtype:{type:\"f_literal\",biblatex:\"entrysubtype\"},eprint:{type:\"f_verbatim\",biblatex:\"eprint\"},eprintclass:{type:\"f_literal\",biblatex:\"eprintclass\"},eprinttype:{type:\"f_literal\",biblatex:\"eprinttype\"},eventdate:{type:\"f_date\",biblatex:\"eventdate\",csl:\"event-date\"},eventtitle:{type:\"f_title\",biblatex:\"eventtitle\",csl:\"event\"},file:{type:\"f_verbatim\",biblatex:\"file\"},foreword:{type:\"l_name\",biblatex:\"foreword\"},holder:{type:\"l_name\",biblatex:\"holder\"},howpublished:{type:\"f_literal\",biblatex:\"howpublished\",csl:\"medium\"},indextitle:{type:\"f_literal\",biblatex:\"indextitle\"},institution:{type:\"l_literal\",biblatex:\"institution\"},introduction:{type:\"l_name\",biblatex:\"introduction\"},isan:{type:\"f_literal\",biblatex:\"isan\",csl:\"number\"},isbn:{type:\"f_literal\",biblatex:\"isbn\",csl:\"ISBN\"},ismn:{type:\"f_literal\",biblatex:\"ismn\",csl:\"number\"},isrn:{type:\"f_literal\",biblatex:\"isrn\",csl:\"number\"},issn:{type:\"f_literal\",biblatex:\"issn\",csl:\"ISSN\"},issue:{type:\"f_literal\",biblatex:\"issue\",csl:\"issue\"},issuesubtitle:{type:\"f_literal\",biblatex:\"issuesubtitle\"},issuetitle:{type:\"f_literal\",biblatex:\"issuetitle\"},iswc:{type:\"f_literal\",biblatex:\"iswc\",csl:\"number\"},journalsubtitle:{type:\"f_literal\",biblatex:\"journalsubtitle\"},journaltitle:{type:\"f_title\",biblatex:\"journaltitle\",csl:\"container-title\"},keywords:{type:\"l_tag\",biblatex:\"keywords\"},label:{type:\"f_literal\",biblatex:\"label\"},language:{type:\"l_key\",biblatex:\"language\",options:e},langid:{type:\"f_key\",strict:!0,biblatex:\"langid\",csl:\"language\",options:{acadian:{csl:\"fr-CA\",biblatex:\"acadian\"},afrikaans:{csl:\"af-ZA\",biblatex:\"afrikaans\"},arabic:{csl:\"ar\",biblatex:\"arabic\"},basque:{csl:\"eu\",biblatex:\"basque\"},bulgarian:{csl:\"bg-BG\",biblatex:\"bulgarian\"},catalan:{csl:\"ca-AD\",biblatex:\"catalan\"},chinese:{csl:\"zh-CN\",biblatex:\"pinyin\"},croatian:{csl:\"hr-HR\",biblatex:\"croatian\"},czech:{csl:\"cs-CZ\",biblatex:\"czech\"},danish:{csl:\"da-DK\",biblatex:\"danish\"},dutch:{csl:\"nl-NL\",biblatex:\"dutch\"},auenglish:{csl:\"en-GB\",biblatex:\"australian\"},caenglish:{csl:\"en-US\",biblatex:\"canadian\"},nzenglish:{csl:\"en-GB\",biblatex:\"newzealand\"},ukenglish:{csl:\"en-GB\",biblatex:\"ukenglish\"},usenglish:{csl:\"en-US\",biblatex:\"usenglish\"},estonian:{csl:\"et-EE\",biblatex:\"estonian\"},finnish:{csl:\"fi-FI\",biblatex:\"finnish\"},french:{csl:\"fr-FR\",biblatex:\"french\"},cafrench:{csl:\"fr-CA\",biblatex:\"canadien\"},german:{csl:\"de-DE\",biblatex:\"ngerman\"},atgerman:{csl:\"de-AT\",biblatex:\"naustrian\"},greek:{csl:\"el-GR\",biblatex:\"greek\"},hebrew:{csl:\"he-IL\",biblatex:\"hebrew\"},hungarian:{csl:\"hu-HU\",biblatex:\"hungarian\"},icelandic:{csl:\"is-IS\",biblatex:\"icelandic\"},italian:{csl:\"it-IT\",biblatex:\"italian\"},japanese:{csl:\"ja-JP\",biblatex:\"japanese\"},latin:{csl:\"la\",biblatex:\"latin\"},latvian:{csl:\"lv-LV\",biblatex:\"latvian\"},lithuanian:{csl:\"lt-LT\",biblatex:\"lithuanian\"},magyar:{csl:\"hu-HU\",biblatex:\"magyar\"},mongolian:{csl:\"mn-MN\",biblatex:\"mongolian\"},norwegian:{csl:\"nb-NO\",biblatex:\"norsk\"},newnorwegian:{csl:\"nn-NO\",biblatex:\"nynorsk\"},farsi:{csl:\"fa-IR\",biblatex:\"farsi\"},polish:{csl:\"pl-PL\",biblatex:\"polish\"},portuguese:{csl:\"pt-PT\",biblatex:\"portuguese\"},brportuguese:{csl:\"pt-BR\",biblatex:\"brazilian\"},romanian:{csl:\"ro-RO\",biblatex:\"romanian\"},russian:{csl:\"ru-RU\",biblatex:\"russian\"},serbian:{csl:\"sr-RS\",biblatex:\"serbian\"},cyrillicserbian:{csl:\"sr-RS\",biblatex:\"serbianc\"},slovak:{csl:\"sk-SK\",biblatex:\"slovak\"},slovene:{csl:\"sl-SL\",biblatex:\"slovene\"},spanish:{csl:\"es-ES\",biblatex:\"spanish\"},swedish:{csl:\"sv-SE\",biblatex:\"swedish\"},thai:{csl:\"th-TH\",biblatex:\"thai\"},turkish:{csl:\"tr-TR\",biblatex:\"turkish\"},ukrainian:{csl:\"uk-UA\",biblatex:\"ukrainian\"},vietnamese:{csl:\"vi-VN\",biblatex:\"vietnamese\"}}},library:{type:\"f_literal\",biblatex:\"library\"},location:{type:\"l_literal\",biblatex:\"location\",csl:\"publisher-place\"},mainsubtitle:{type:\"f_title\",biblatex:\"mainsubtitle\"},maintitle:{type:\"f_title\",biblatex:\"maintitle\"},maintitleaddon:{type:\"f_title\",biblatex:\"maintitleaddon\"},nameaddon:{type:\"f_literal\",biblatex:\"nameaddon\"},note:{type:\"f_literal\",biblatex:\"note\",csl:\"note\"},number:{type:\"f_literal\",biblatex:\"number\",csl:{\"article-journal\":\"issue\",patent:\"number\",\"*\":\"collection-number\"}},organization:{type:\"l_literal\",biblatex:\"organization\"},origdate:{type:\"f_date\",biblatex:\"origdate\",csl:\"original-date\"},origlanguage:{type:\"f_key\",biblatex:\"origlanguage\",options:e},origlocation:{type:\"l_literal\",biblatex:\"origlocation\",csl:\"original-publisher-place\"},origpublisher:{type:\"l_literal\",biblatex:\"origpublisher\",csl:\"original-publisher\"},origtitle:{type:\"f_title\",biblatex:\"origtitle\",csl:\"original-title\"},pages:{type:\"l_range\",biblatex:\"pages\",csl:\"page\"},pagetotal:{type:\"f_literal\",biblatex:\"pagetotal\",csl:\"number-of-pages\"},pagination:{type:\"f_key\",biblatex:\"pagination\",options:[\"page\",\"column\",\"section\",\"paragraph\",\"verse\",\"line\"]},part:{type:\"f_literal\",biblatex:\"part\"},publisher:{type:\"l_literal\",biblatex:\"publisher\",csl:\"publisher\"},pubstate:{type:\"f_key\",biblatex:\"pubstate\",csl:\"status\",options:{inpreparation:{csl:\"in preparation\",biblatex:\"inpreparation\"},submitted:{csl:\"submitted\",biblatex:\"submitted\"},forthcoming:{csl:\"forthcoming\",biblatex:\"forthcoming\"},inpress:{csl:\"in press\",biblatex:\"inpress\"},prepublished:{csl:\"prepublished\",biblatex:\"prepublished\"}}},reprinttitle:{type:\"f_literal\",biblatex:\"reprinttitle\"},series:{type:\"f_title\",biblatex:\"series\",csl:\"collection-title\"},shortauthor:{type:\"l_name\",biblatex:\"shortauthor\"},shorteditor:{type:\"l_name\",biblatex:\"shorteditor\"},shorthand:{type:\"f_literal\",biblatex:\"shorthand\"},shorthandintro:{type:\"f_literal\",biblatex:\"shorthandintro\"},shortjournal:{type:\"f_title\",biblatex:\"shortjournal\",csl:\"container-title-short\"},shortseries:{type:\"f_literal\",biblatex:\"shortseries\"},shorttitle:{type:\"f_title\",biblatex:\"shorttitle\",csl:\"title-short\"},subtitle:{type:\"f_title\",biblatex:\"subtitle\"},title:{type:\"f_title\",biblatex:\"title\",csl:\"title\"},titleaddon:{type:\"f_title\",biblatex:\"titleaddon\"},translator:{type:\"l_name\",biblatex:\"translator\",csl:\"translator\"},type:{type:\"f_key\",biblatex:\"type\",options:[\"manual\",\"patent\",\"report\",\"thesis\",\"mathesis\",\"phdthesis\",\"candthesis\",\"techreport\",\"resreport\",\"software\",\"datacd\",\"audiocd\"]},url:{type:\"f_uri\",biblatex:\"url\",csl:\"URL\"},urldate:{type:\"f_date\",biblatex:\"urldate\",csl:\"accessed\"},venue:{type:\"f_literal\",biblatex:\"venue\",csl:\"event-place\"},version:{type:\"f_literal\",biblatex:\"version\",csl:\"version\"},volume:{type:\"f_literal\",biblatex:\"volume\",csl:\"volume\"},volumes:{type:\"f_literal\",biblatex:\"volumes\",csl:\"number-of-volumes\"}},t={\"article-journal\":{order:1,biblatex:\"article\",csl:\"article-journal\",required:[\"journaltitle\",\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"annotator\",\"commentator\",\"doi\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eid\",\"eprint\",\"eprintclass\",\"eprinttype\",\"issn\",\"issue\",\"issuesubtitle\",\"issuetitle\",\"journalsubtitle\",\"language\",\"langid\",\"note\",\"number\",\"pages\",\"pagination\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"version\",\"volume\",\"origdate\",\"origlanguage\",\"origtitle\",\"annotation\",\"keywords\"]},\"article-magazine\":{order:2,biblatex:\"article\",\"biblatex-subtype\":\"magazine\",csl:\"article-magazine\",required:[\"journaltitle\",\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"annotator\",\"commentator\",\"doi\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eid\",\"eprint\",\"eprintclass\",\"eprinttype\",\"issn\",\"issue\",\"issuesubtitle\",\"issuetitle\",\"journalsubtitle\",\"language\",\"langid\",\"note\",\"number\",\"pages\",\"pagination\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"version\",\"volume\",\"origdate\",\"origlanguage\",\"origtitle\",\"annotation\",\"keywords\"]},\"article-newspaper\":{order:3,biblatex:\"article\",\"biblatex-subtype\":\"newspaper\",csl:\"article-newspaper\",required:[\"journaltitle\",\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"annotator\",\"commentator\",\"doi\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eid\",\"eprint\",\"eprintclass\",\"eprinttype\",\"issn\",\"issue\",\"issuesubtitle\",\"issuetitle\",\"journalsubtitle\",\"language\",\"langid\",\"note\",\"number\",\"pages\",\"pagination\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"version\",\"volume\",\"origdate\",\"origlanguage\",\"origtitle\",\"annotation\",\"keywords\"]},article:{order:4,biblatex:\"article\",csl:\"article\",required:[\"journaltitle\",\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"annotator\",\"commentator\",\"doi\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eid\",\"eprint\",\"eprintclass\",\"eprinttype\",\"issn\",\"issue\",\"issuesubtitle\",\"issuetitle\",\"journalsubtitle\",\"language\",\"langid\",\"note\",\"number\",\"pages\",\"pagination\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"version\",\"volume\",\"origdate\",\"origlanguage\",\"origtitle\",\"annotation\",\"keywords\"]},\"post-weblog\":{order:5,biblatex:\"online\",csl:\"post-weblog\",required:[\"date\",\"title\",\"url\"],eitheror:[\"editor\",\"author\"],optional:[\"abstract\",\"addendum\",\"pubstate\",\"shorttitle\",\"subtitle\",\"language\",\"langid\",\"urldate\",\"titleaddon\",\"version\",\"note\",\"organization\",\"origtitle\",\"annotation\",\"keywords\"]},book:{order:10,biblatex:\"book\",csl:\"book\",required:[\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},mvbook:{order:11,biblatex:\"mvbook\",csl:\"book\",required:[\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"commentator\",\"doi\",\"edition\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"note\",\"number\",\"pagetotal\",\"bookpagination\",\"publisher\",\"pubstate\",\"series\",\"subtitle\",\"shorttitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},inbook:{order:12,biblatex:\"inbook\",csl:\"chapter\",required:[\"title\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"bookauthor\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},bookinbook:{order:13,biblatex:\"bookinbook\",csl:\"chapter\",required:[\"title\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"bookauthor\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},suppbook:{order:14,biblatex:\"suppbook\",csl:\"chapter\",required:[\"title\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"bookauthor\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},booklet:{order:15,biblatex:\"booklet\",csl:\"pamphlet\",required:[\"title\",\"date\"],eitheror:[\"editor\",\"author\"],optional:[\"abstract\",\"titleaddon\",\"addendum\",\"pages\",\"pagination\",\"howpublished\",\"type\",\"pubstate\",\"chapter\",\"doi\",\"shorttitle\",\"subtitle\",\"language\",\"langid\",\"location\",\"url\",\"urldate\",\"pagetotal\",\"bookpagination\",\"note\",\"eprint\",\"eprintclass\",\"eprinttype\",\"origlanguage\",\"origlocation\",\"origtitle\",\"annotation\",\"keywords\"]},collection:{order:20,biblatex:\"collection\",csl:\"dataset\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},mvcollection:{order:21,biblatex:\"mvcollection\",csl:\"dataset\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"note\",\"number\",\"pagetotal\",\"bookpagination\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},incollection:{order:22,biblatex:\"incollection\",csl:\"chapter\",required:[\"title\",\"editor\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},suppcollection:{order:23,biblatex:\"suppcollection\",csl:\"chapter\",required:[\"title\",\"editor\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"annotation\",\"keywords\"]},post:{order:30,biblatex:\"online\",csl:\"post\",required:[\"date\",\"title\",\"url\"],eitheror:[\"editor\",\"author\"],optional:[\"abstract\",\"addendum\",\"pubstate\",\"subtitle\",\"shorttitle\",\"language\",\"langid\",\"urldate\",\"titleaddon\",\"version\",\"note\",\"organization\",\"origtitle\",\"annotation\",\"keywords\"]},manual:{order:40,biblatex:\"manual\",csl:\"book\",required:[\"title\",\"date\"],eitheror:[\"editor\",\"author\"],optional:[\"abstract\",\"addendum\",\"chapter\",\"doi\",\"edition\",\"eprint\",\"eprintclass\",\"eprinttype\",\"isbn\",\"language\",\"langid\",\"location\",\"note\",\"number\",\"organization\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"type\",\"url\",\"urldate\",\"version\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},misc:{order:41,biblatex:\"misc\",csl:\"article\",required:[\"title\",\"date\"],eitheror:[\"editor\",\"author\"],optional:[\"abstract\",\"addendum\",\"howpublished\",\"type\",\"pubstate\",\"organization\",\"doi\",\"shorttitle\",\"subtitle\",\"language\",\"langid\",\"location\",\"url\",\"urldate\",\"titleaddon\",\"version\",\"note\",\"eprint\",\"eprintclass\",\"eprinttype\",\"origlanguage\",\"origlocation\",\"origtitle\",\"annotation\",\"keywords\"]},online:{order:42,biblatex:\"online\",csl:\"webpage\",required:[\"date\",\"title\",\"url\"],eitheror:[\"editor\",\"author\"],optional:[\"abstract\",\"addendum\",\"language\",\"langid\",\"note\",\"organization\",\"pubstate\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"urldate\",\"version\",\"origtitle\",\"annotation\",\"keywords\"]},patent:{order:43,biblatex:\"patent\",csl:\"patent\",required:[\"title\",\"number\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"holder\",\"location\",\"pubstate\",\"doi\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"type\",\"url\",\"urldate\",\"version\",\"note\",\"eprint\",\"eprintclass\",\"eprinttype\",\"annotation\",\"keywords\"]},periodical:{order:50,biblatex:\"periodical\",csl:\"book\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"volume\",\"pubstate\",\"number\",\"series\",\"issn\",\"issue\",\"issuesubtitle\",\"issuetitle\",\"doi\",\"shorttitle\",\"subtitle\",\"editora\",\"editorb\",\"editorc\",\"url\",\"urldate\",\"language\",\"langid\",\"note\",\"eprint\",\"eprintclass\",\"eprinttype\",\"origtitle\",\"annotation\",\"keywords\"]},suppperiodical:{order:51,biblatex:\"suppperiodical\",csl:\"article\",required:[\"journaltitle\",\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"annotator\",\"commentator\",\"doi\",\"editor\",\"editora\",\"editorb\",\"editorc\",\"eid\",\"eprint\",\"eprintclass\",\"eprinttype\",\"issn\",\"issue\",\"issuesubtitle\",\"issuetitle\",\"journalsubtitle\",\"language\",\"langid\",\"note\",\"number\",\"pages\",\"pagination\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"version\",\"volume\",\"origdate\",\"origlanguage\",\"origtitle\",\"annotation\",\"keywords\"]},proceedings:{order:60,biblatex:\"proceedings\",csl:\"book\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"chapter\",\"doi\",\"eprint\",\"eprintclass\",\"eprinttype\",\"eventdate\",\"eventtitle\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"organization\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"url\",\"urldate\",\"venue\",\"volume\",\"volumes\",\"annotation\",\"keywords\"]},mvproceedings:{order:61,biblatex:\"mvproceedings\",csl:\"book\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"doi\",\"eprint\",\"eprintclass\",\"eprinttype\",\"eventdate\",\"eventtitle\",\"isbn\",\"language\",\"langid\",\"location\",\"note\",\"number\",\"organization\",\"pagetotal\",\"bookpagination\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"url\",\"urldate\",\"venue\",\"volumes\",\"annotation\",\"keywords\"]},inproceedings:{order:62,biblatex:\"inproceedings\",csl:\"paper-conference\",required:[\"title\",\"editor\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"doi\",\"eprint\",\"eprintclass\",\"eprinttype\",\"eventdate\",\"eventtitle\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"organization\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"url\",\"urldate\",\"venue\",\"volume\",\"volumes\",\"annotation\",\"keywords\"]},reference:{order:70,biblatex:\"book\",csl:\"reference\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},mvreference:{order:71,biblatex:\"mvreference\",csl:\"book\",required:[\"editor\",\"title\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"note\",\"number\",\"pagetotal\",\"bookpagination\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},inreference:{order:72,biblatex:\"inreference\",csl:\"entry-encyclopedia\",required:[\"title\",\"editor\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},\"entry-encyclopedia\":{order:73,biblatex:\"inreference\",csl:\"entry-encyclopedia\",required:[\"title\",\"editor\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},\"entry-dictionary\":{order:74,biblatex:\"inreference\",csl:\"entry-dictionary\",required:[\"title\",\"editor\",\"booktitle\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"afterword\",\"annotator\",\"booksubtitle\",\"booktitleaddon\",\"chapter\",\"commentator\",\"doi\",\"edition\",\"editora\",\"editorb\",\"editorc\",\"eprint\",\"eprintclass\",\"eprinttype\",\"foreword\",\"introduction\",\"isbn\",\"language\",\"langid\",\"location\",\"mainsubtitle\",\"maintitle\",\"maintitleaddon\",\"note\",\"number\",\"pages\",\"pagination\",\"part\",\"publisher\",\"pubstate\",\"series\",\"shorttitle\",\"subtitle\",\"titleaddon\",\"translator\",\"url\",\"urldate\",\"volume\",\"volumes\",\"origdate\",\"origlanguage\",\"origlocation\",\"origpublisher\",\"origtitle\",\"annotation\",\"keywords\"]},report:{order:80,biblatex:\"report\",csl:\"report\",required:[\"author\",\"title\",\"type\",\"institution\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"pubstate\",\"number\",\"isrn\",\"chapter\",\"doi\",\"shorttitle\",\"subtitle\",\"language\",\"langid\",\"location\",\"url\",\"urldate\",\"titleaddon\",\"version\",\"note\",\"eprint\",\"eprintclass\",\"eprinttype\",\"annotation\",\"keywords\"]},thesis:{order:81,biblatex:\"thesis\",csl:\"thesis\",required:[\"author\",\"title\",\"type\",\"institution\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"pages\",\"pagination\",\"pagetotal\",\"bookpagination\",\"pubstate\",\"isbn\",\"chapter\",\"doi\",\"shorttitle\",\"subtitle\",\"language\",\"langid\",\"location\",\"url\",\"urldate\",\"titleaddon\",\"note\",\"eprint\",\"eprintclass\",\"eprinttype\",\"annotation\",\"keywords\"]},unpublished:{order:90,biblatex:\"unpublished\",csl:\"manuscript\",required:[\"title\",\"author\",\"date\"],eitheror:[],optional:[\"abstract\",\"addendum\",\"howpublished\",\"pubstate\",\"isbn\",\"date\",\"shorttitle\",\"subtitle\",\"language\",\"langid\",\"location\",\"url\",\"urldate\",\"titleaddon\",\"note\",\"annotation\",\"keywords\"]}},u={address:\"location\",annote:\"annotation\",archiveprefix:\"eprinttype\",journal:\"journaltitle\",pdf:\"file\",primaryclass:\"eprintclass\",school:\"institution\"},i={conference:[\"inproceedings\"],electronic:[\"online\"],mastersthesis:[\"thesis\"],phdthesis:[\"thesis\"],techreport:[\"report\"],www:[\"online\"],periodical:[\"article\"],suppperiodical:[\"article\"],newsarticle:[\"article\",\"newspaper\"]},c={langamerican:\"american\",langbrazilian:\"brazilian\",langcatalan:\"catalan\",langcroation:\"croation\",langczech:\"czech\",langdanish:\"danish\",langdutch:\"dutch\",langenglish:\"english\",langfinnish:\"finnish\",langfrench:\"french\",langgerman:\"german\",langgreek:\"greek\",langitalian:\"italian\",langlatin:\"latin\",langnorwegian:\"norwegian\",langpolish:\"polish\",langportuguese:\"portuguese\",langrussian:\"russian\",langslovene:\"slovene\",langspanish:\"spanish\",langswedish:\"swedish\"},n={language:c,origlanguage:c,langid:{english:\"usenglish\",american:\"usenglish\",en:\"usenglish\",eng:\"usenglish\",\"en-US\":\"usenglish\",anglais:\"usenglish\",british:\"ukenglish\",\"en-GB\":\"ukenglish\",francais:\"french\",austrian:\"naustrian\",german:\"ngerman\",germanb:\"ngerman\",polutonikogreek:\"greek\",brazil:\"brazilian\",portugues:\"portuguese\",chinese:\"pinyin\"}},a=[{tex:/\\\\\\^A|\\\\\\^\\{A\\}/,unicode:\"Â\"},{tex:/\\\\\\^a|\\\\\\^\\{a\\}/,unicode:\"â\"},{tex:/\\\\\\^C|\\\\\\^\\{C\\}/,unicode:\"Ĉ\"},{tex:/\\\\\\^c|\\\\\\^\\{c\\}/,unicode:\"ĉ\"},{tex:/\\\\\\^E|\\\\\\^\\{E\\}/,unicode:\"Ê\"},{tex:/\\\\\\^e|\\\\\\^\\{e\\}/,unicode:\"ê\"},{tex:/\\\\\\^G|\\\\\\^\\{G\\}/,unicode:\"Ĝ\"},{tex:/\\\\\\^g|\\\\\\^\\{g\\}/,unicode:\"ĝ\"},{tex:/\\\\\\^H|\\\\\\^\\{H\\}/,unicode:\"Ĥ\"},{tex:/\\\\\\^h|\\\\\\^\\{h\\}/,unicode:\"ĥ\"},{tex:/\\\\\\^I|\\\\\\^\\{I\\}/,unicode:\"Î\"},{tex:/\\\\\\^\\\\i|\\\\\\^\\{\\\\i\\}/,unicode:\"î\"},{tex:/\\\\\\^J|\\\\\\^\\{J\\}/,unicode:\"Ĵ\"},{tex:/\\\\\\^\\\\j|\\\\\\^\\{\\\\j\\}/,unicode:\"ĵ\"},{tex:/\\\\\\^O|\\\\\\^\\{O\\}/,unicode:\"Ô\"},{tex:/\\\\\\^o|\\\\\\^\\{o\\}/,unicode:\"ô\"},{tex:/\\\\\\^S|\\\\\\^\\{S\\}/,unicode:\"Ŝ\"},{tex:/\\\\\\^s|\\\\\\^\\{s\\}/,unicode:\"ŝ\"},{tex:/\\\\\\^U|\\\\\\^\\{U\\}/,unicode:\"Û\"},{tex:/\\\\\\^u|\\\\\\^\\{u\\}/,unicode:\"û\"},{tex:/\\\\\\^W|\\\\\\^\\{W\\}/,unicode:\"Ŵ\"},{tex:/\\\\\\^w|\\\\\\^\\{w\\}/,unicode:\"ŵ\"},{tex:/\\\\\\^Y|\\\\\\^\\{Y\\}/,unicode:\"Ŷ\"},{tex:/\\\\\\^y|\\\\\\^\\{y\\}/,unicode:\"ŷ\"},{tex:/\\\\\\.C|\\\\\\.\\{C\\}/,unicode:\"Ċ\"},{tex:/\\\\\\.c|\\\\\\.\\{c\\}/,unicode:\"ċ\"},{tex:/\\\\\\.E|\\\\\\.\\{E\\}/,unicode:\"Ė\"},{tex:/\\\\\\.e|\\\\\\.\\{e\\}/,unicode:\"ė\"},{tex:/\\\\\\.G|\\\\\\.\\{G\\}/,unicode:\"Ġ\"},{tex:/\\\\\\.g|\\\\\\.\\{g\\}/,unicode:\"ġ\"},{tex:/\\\\\\.I|\\\\\\.\\{I\\}/,unicode:\"İ\"},{tex:/\\\\\\.Z|\\\\\\.\\{Z\\}/,unicode:\"Ż\"},{tex:/\\\\\\.z|\\\\\\.\\{z\\}/,unicode:\"ż\"},{tex:/\\\\=A|\\\\=\\{A\\}/,unicode:\"Ā\"},{tex:/\\\\=a|\\\\=\\{a\\}/,unicode:\"ā\"},{tex:/\\\\=E|\\\\=\\{E\\}/,unicode:\"Ē\"},{tex:/\\\\=e|\\\\=\\{e\\}/,unicode:\"ē\"},{tex:/\\\\=I|\\\\=\\{I\\}/,unicode:\"Ī\"},{tex:/\\\\=\\\\i|\\\\=\\{\\\\i\\}/,unicode:\"ī\"},{tex:/\\\\=O|\\\\=\\{O\\}/,unicode:\"Ō\"},{tex:/\\\\=o|\\\\=\\{o\\}/,unicode:\"ō\"},{tex:/\\\\=U|\\\\=\\{U\\}/,unicode:\"Ū\"},{tex:/\\\\=u|\\\\=\\{u\\}/,unicode:\"ū\"},{tex:/\\\\~A|\\\\~\\{A\\}/,unicode:\"Ã\"},{tex:/\\\\~a|\\\\~\\{a\\}/,unicode:\"ã\"},{tex:/\\\\~I|\\\\~\\{I\\}/,unicode:\"Ĩ\"},{tex:/\\\\~\\\\i/,unicode:\"ĩ\"},{tex:/\\\\~N|\\\\~\\{N\\}/,unicode:\"Ñ\"},{tex:/\\\\~n|\\\\~\\{n\\}/,unicode:\"ñ\"},{tex:/\\\\~O|\\\\~\\{O\\}/,unicode:\"Õ\"},{tex:/\\\\~o|\\\\~\\{o\\}/,unicode:\"õ\"},{tex:/\\\\~U|\\\\~\\{U\\}/,unicode:\"Ũ\"},{tex:/\\\\~u|\\\\~\\{u\\}/,unicode:\"ũ\"},{tex:/\\\\`A|\\\\`\\{A\\}/,unicode:\"À\"},{tex:/\\\\`a|\\\\`\\{a\\}/,unicode:\"à\"},{tex:/\\\\`E|\\\\`\\{E\\}/,unicode:\"È\"},{tex:/\\\\`e|\\\\`\\{e\\}/,unicode:\"è\"},{tex:/\\\\`I|\\\\`\\{I\\}/,unicode:\"Ì\"},{tex:/\\\\`\\\\i|\\\\`i|\\\\`\\{\\\\i\\}|\\\\`\\{i\\}/,unicode:\"ì\"},{tex:/\\\\`O|\\\\`\\{O\\}/,unicode:\"Ò\"},{tex:/\\\\`o|\\\\`\\{o\\}/,unicode:\"ò\"},{tex:/\\\\`U|\\\\`\\{U\\}/,unicode:\"Ù\"},{tex:/\\\\`u|\\\\`\\{u\\}/,unicode:\"ù\"},{tex:/\\\\\"A|\\\\\"\\{A\\}/,unicode:\"Ä\"},{tex:/\\\\\"a|\\\\\"\\{a\\}/,unicode:\"ä\"},{tex:/\\\\\"E|\\\\\"\\{E\\}/,unicode:\"Ë\"},{tex:/\\\\\"e|\\\\\"\\{e\\}/,unicode:\"ë\"},{tex:/\\\\\"\\\\i|\\\\\"\\{\\\\i\\}|\\\\\"i|\\\\\"\\{i\\}/,unicode:\"ï\"},{tex:/\\\\\"I|\\\\\"\\{I\\}/,unicode:\"Ï\"},{tex:/\\\\\"O|\\\\\"\\{O\\}/,unicode:\"Ö\"},{tex:/\\\\\"o|\\\\\"\\{o\\}/,unicode:\"ö\"},{tex:/\\\\\"U|\\\\\"\\{U\\}/,unicode:\"Ü\"},{tex:/\\\\\"u|\\\\\"\\{u\\}/,unicode:\"ü\"},{tex:/\\\\\"Y|\\\\\"\\{Y\\}/,unicode:\"Ÿ\"},{tex:/\\\\\"y|\\\\\"\\{y\\}/,unicode:\"ÿ\"},{tex:/\\\\'A|\\\\'\\{A\\}/,unicode:\"Á\"},{tex:/\\\\'a|\\\\'\\{a\\}/,unicode:\"á\"},{tex:/\\\\'C|\\\\'\\{C\\}/,unicode:\"Ć\"},{tex:/\\\\'c|\\\\'\\{c\\}/,unicode:\"ć\"},{tex:/\\\\'E|\\\\'\\{E\\}/,unicode:\"É\"},{tex:/\\\\'e|\\\\'\\{e\\}/,unicode:\"é\"},{tex:/\\\\'g|\\\\'\\{g\\}/,unicode:\"ǵ\"},{tex:/\\\\'H|\\\\'\\{H\\}/,unicode:\"Ή\"},{tex:/\\\\'I|\\\\'\\{I\\}/,unicode:\"Í\"},{tex:/\\\\'\\\\i|\\\\'i/,unicode:\"í\"},{tex:/\\\\'L|\\\\'\\{L\\}/,unicode:\"Ĺ\"},{tex:/\\\\'l|\\\\'\\{l\\}/,unicode:\"ĺ\"},{tex:/\\\\'N|\\\\'\\{N\\}/,unicode:\"Ń\"},{tex:/\\\\'n|\\\\'\\{n\\}/,unicode:\"ń\"},{tex:/\\\\'O|\\\\'\\{O\\}/,unicode:\"Ó\"},{tex:/\\\\'o|\\\\'\\{o\\}/,unicode:\"ó\"},{tex:/\\\\'R|\\\\'\\{R\\}/,unicode:\"Ŕ\"},{tex:/\\\\'r|\\\\'\\{r\\}/,unicode:\"ŕ\"},{tex:/\\\\'S|\\\\'\\{S\\}/,unicode:\"Ś\"},{tex:/\\\\'s|\\\\'\\{s\\}/,unicode:\"ś\"},{tex:/\\\\'U|\\\\'\\{U\\}/,unicode:\"Ú\"},{tex:/\\\\'u|\\\\'\\{u\\}/,unicode:\"ú\"},{tex:/\\\\'Y|\\\\'\\{Y\\}/,unicode:\"Ý\"},{tex:/\\\\'y|\\\\'\\{y\\}/,unicode:\"ý\"},{tex:/\\\\'Z|\\\\'\\{Z\\}/,unicode:\"Ź\"},{tex:/\\\\'z|\\\\'\\{z\\}/,unicode:\"ź\"},{tex:/\\\\c C|\\\\c\\{C\\}/,unicode:\"Ç\"},{tex:/\\\\c c|\\\\c\\{c\\}/,unicode:\"ç\"},{tex:/\\\\c G|\\\\c\\{G\\}/,unicode:\"Ģ\"},{tex:/\\\\c g|\\\\c\\{g\\}/,unicode:\"ģ\"},{tex:/\\\\c K|\\\\c\\{K\\}/,unicode:\"Ķ\"},{tex:/\\\\c k|\\\\c\\{k\\}/,unicode:\"ķ\"},{tex:/\\\\c L|\\\\c\\{L\\}/,unicode:\"Ļ\"},{tex:/\\\\c l|\\\\c\\{l\\}/,unicode:\"ļ\"},{tex:/\\\\c N|\\\\c\\{N\\}/,unicode:\"Ņ\"},{tex:/\\\\c n|\\\\c\\{n\\}/,unicode:\"ņ\"},{tex:/\\\\c R|\\\\c\\{R\\}/,unicode:\"Ŗ\"},{tex:/\\\\c r|\\\\c\\{r\\}/,unicode:\"ŗ\"},{tex:/\\\\c S|\\\\c\\{S\\}/,unicode:\"Ş\"},{tex:/\\\\c s|\\\\c\\{s\\}/,unicode:\"ş\"},{tex:/\\\\c T|\\\\c\\{T\\}/,unicode:\"Ţ\"},{tex:/\\\\c t|\\\\c\\{t\\}/,unicode:\"ţ\"},{tex:/\\\\H O|\\\\H\\{O\\}/,unicode:\"Ő\"},{tex:/\\\\H o|\\\\H\\{o\\}/,unicode:\"ő\"},{tex:/\\\\H U|\\\\H\\{U\\}/,unicode:\"Ű\"},{tex:/\\\\H u|\\\\H\\{u\\}/,unicode:\"ű\"},{tex:/\\\\k A|\\\\k\\{A\\}/,unicode:\"Ą\"},{tex:/\\\\k a|\\\\k\\{a\\}/,unicode:\"ą\"},{tex:/\\\\k E|\\\\k\\{E\\}/,unicode:\"Ę\"},{tex:/\\\\k e|\\\\k\\{e\\}/,unicode:\"ę\"},{tex:/\\\\k I|\\\\k\\{I\\}/,unicode:\"Į\"},{tex:/\\\\k i|\\\\k\\{i\\}/,unicode:\"į\"},{tex:/\\\\k U|\\\\k\\{U\\}/,unicode:\"Ų\"},{tex:/\\\\k u|\\\\k\\{u\\}/,unicode:\"ų\"},{tex:/\\\\r U|\\\\r\\{U\\}/,unicode:\"Ů\"},{tex:/\\\\r u|\\\\r\\{u\\}/,unicode:\"ů\"},{tex:/\\\\u A|\\\\u\\{A\\}/,unicode:\"Ă\"},{tex:/\\\\u a|\\\\u\\{a\\}/,unicode:\"ă\"},{tex:/\\\\u E|\\\\u\\{E\\}/,unicode:\"Ĕ\"},{tex:/\\\\u e|\\\\u\\{e\\}/,unicode:\"ĕ\"},{tex:/\\\\u G|\\\\u\\{G\\}/,unicode:\"Ğ\"},{tex:/\\\\u g|\\\\u\\{g\\}/,unicode:\"ğ\"},{tex:/\\\\u I|\\\\u\\{I\\}/,unicode:\"Ĭ\"},{tex:/\\\\u \\\\i/,unicode:\"ĭ\"},{tex:/\\\\u O|\\\\u\\{O\\}/,unicode:\"Ŏ\"},{tex:/\\\\u o|\\\\u\\{o\\}/,unicode:\"ŏ\"},{tex:/\\\\u U|\\\\u\\{U\\}/,unicode:\"Ŭ\"},{tex:/\\\\u u|\\\\u\\{u\\}/,unicode:\"ŭ\"},{tex:/\\\\v A|\\\\v\\{A\\}/,unicode:\"Ǎ\"},{tex:/\\\\v a|\\\\v\\{a\\}/,unicode:\"ǎ\"},{tex:/\\\\v C|\\\\v\\{C\\}/,unicode:\"Č\"},{tex:/\\\\v c|\\\\v\\{c\\}/,unicode:\"č\"},{tex:/\\\\v D|\\\\v\\{D\\}/,unicode:\"Ď\"},{tex:/\\\\v d|\\\\v\\{d\\}/,unicode:\"ď\"},{tex:/\\\\v E|\\\\v\\{E\\}/,unicode:\"Ě\"},{tex:/\\\\v e|\\\\v\\{e\\}/,unicode:\"ě\"},{tex:/\\\\v I|\\\\v\\{I\\}/,unicode:\"Ǐ\"},{tex:/\\\\v i|\\\\v\\{i\\}/,unicode:\"ǐ\"},{tex:/\\\\v L|\\\\v\\{L\\}/,unicode:\"Ľ\"},{tex:/\\\\v l|\\\\v\\{l\\}/,unicode:\"ľ\"},{tex:/\\\\v N|\\\\v\\{N\\}/,unicode:\"Ň\"},{tex:/\\\\v n|\\\\v\\{n\\}/,unicode:\"ň\"},{tex:/\\\\v O|\\\\v\\{O\\}/,unicode:\"Ǒ\"},{tex:/\\\\v o|\\\\v\\{o\\}/,unicode:\"ǒ\"},{tex:/\\\\v R|\\\\v\\{R\\}/,unicode:\"Ř\"},{tex:/\\\\v r|\\\\v\\{r\\}/,unicode:\"ř\"},{tex:/\\\\v S|\\\\v\\{S\\}/,unicode:\"Š\"},{tex:/\\\\v s|\\\\v\\{s\\}/,unicode:\"š\"},{tex:/\\\\v T|\\\\v\\{T\\}/,unicode:\"Ť\"},{tex:/\\\\v t|\\\\v\\{t\\}/,unicode:\"ť\"},{tex:/\\\\v U|\\\\v\\{U\\}/,unicode:\"Ǔ\"},{tex:/\\\\v u|\\\\v\\{u\\}/,unicode:\"ǔ\"},{tex:/\\\\v Z|\\\\v\\{Z\\}/,unicode:\"Ž\"},{tex:/\\\\v z|\\\\v\\{z\\}/,unicode:\"ž\"},{tex:/\\\\texteuro|\\{\\\\mbox\\{\\\\texteuro\\}\\}|\\\\mbox\\{\\\\texteuro\\}/,unicode:\"€\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char220\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char220/,unicode:\"̼\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char225\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char225/,unicode:\"͡\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char201\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char201/,unicode:\"Ŀ\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char218\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char218/,unicode:\"̺\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char202\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char202/,unicode:\"ŀ\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char207\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char207/,unicode:\"̯\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char203\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char203/,unicode:\"̫\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char185\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char185/,unicode:\"̙\"},{tex:/\\{\\\\fontencoding\\{LEIP\\}\\\\selectfont\\\\char202\\}|\\\\fontencoding\\{LEIP\\}\\\\selectfont\\\\char202/,unicode:\"ɿ\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char184\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char184/,unicode:\"̘\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char177\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char177/,unicode:\"̑\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char195\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char195/,unicode:\"ƺ\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char215\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char215/,unicode:\"̷\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char216\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char216/,unicode:\"̸\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char219\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char219/,unicode:\"̻\"},{tex:/\\{\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char221\\}|\\\\fontencoding\\{LECO\\}\\\\selectfont\\\\char221/,unicode:\"̽\"},{tex:/\\{\\\\fontencoding\\{LEIP\\}\\\\selectfont\\\\char61\\}|\\\\fontencoding\\{LEIP\\}\\\\selectfont\\\\char61/,unicode:\"ɘ\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char63\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char63/,unicode:\"ŧ\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char91\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char91/,unicode:\"ĸ\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char40\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char40/,unicode:\"Ħ\"},{tex:/\\{\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char47\\}|\\\\fontencoding\\{LELA\\}\\\\selectfont\\\\char47/,unicode:\"Ŧ\"},{tex:/\\\\mathbin\\{\\{:\\}\\\\!\\\\!\\{-\\}\\\\!\\\\!\\{:\\}\\}/,unicode:\"∺\"},{tex:/\\\\mathbit\\{A\\}/,unicode:\"𝑨\"},{tex:/\\\\mathbit\\{a\\}/,unicode:\"𝒂\"},{tex:/\\\\mathbit\\{B\\}/,unicode:\"𝑩\"},{tex:/\\\\mathbit\\{b\\}/,unicode:\"𝒃\"},{tex:/\\\\mathbit\\{C\\}/,unicode:\"𝑪\"},{tex:/\\\\mathbit\\{c\\}/,unicode:\"𝒄\"},{tex:/\\\\mathbit\\{\\\\Delta\\}/,unicode:\"𝜟\"},{tex:/\\\\mathbit\\{D\\}/,unicode:\"𝑫\"},{tex:/\\\\mathbit\\{d\\}/,unicode:\"𝒅\"},{tex:/\\\\mathbit\\{E\\}/,unicode:\"𝑬\"},{tex:/\\\\mathbit\\{e\\}/,unicode:\"𝒆\"},{tex:/\\\\mathbit\\{F\\}/,unicode:\"𝑭\"},{tex:/\\\\mathbit\\{f\\}/,unicode:\"𝒇\"},{tex:/\\\\mathbit\\{\\\\Gamma\\}/,unicode:\"𝜞\"},{tex:/\\\\mathbit\\{G\\}/,unicode:\"𝑮\"},{tex:/\\\\mathbit\\{g\\}/,unicode:\"𝒈\"},{tex:/\\\\mathbit\\{H\\}/,unicode:\"𝑯\"},{tex:/\\\\mathbit\\{h\\}/,unicode:\"𝒉\"},{tex:/\\\\mathbit\\{I\\}/,unicode:\"𝑰\"},{tex:/\\\\mathbit\\{i\\}/,unicode:\"𝒊\"},{tex:/\\\\mathbit\\{J\\}/,unicode:\"𝑱\"},{tex:/\\\\mathbit\\{j\\}/,unicode:\"𝒋\"},{tex:/\\\\mathbit\\{K\\}/,unicode:\"𝑲\"},{tex:/\\\\mathbit\\{k\\}/,unicode:\"𝒌\"},{tex:/\\\\mathbit\\{\\\\Lambda\\}/,unicode:\"𝜦\"},{tex:/\\\\mathbit\\{L\\}/,unicode:\"𝑳\"},{tex:/\\\\mathbit\\{l\\}/,unicode:\"𝒍\"},{tex:/\\\\mathbit\\{M\\}/,unicode:\"𝑴\"},{tex:/\\\\mathbit\\{m\\}/,unicode:\"𝒎\"},{tex:/\\\\mathbit\\{\\\\nabla\\}/,unicode:\"𝜵\"},{tex:/\\\\mathbit\\{N\\}/,unicode:\"𝑵\"},{tex:/\\\\mathbit\\{n\\}/,unicode:\"𝒏\"},{tex:/\\\\mathbit\\{\\\\Omega\\}/,unicode:\"𝜴\"},{tex:/\\\\mathbit\\{O\\}/,unicode:\"𝑶\"},{tex:/\\\\mathbit\\{o\\}/,unicode:\"𝒐\"},{tex:/\\\\mathbit\\{\\\\Phi\\}/,unicode:\"𝜱\"},{tex:/\\\\mathbit\\{\\\\phi\\}/,unicode:\"𝝓\"},{tex:/\\\\mathbit\\{\\\\Pi\\}/,unicode:\"𝜫\"},{tex:/\\\\mathbit\\{\\\\Psi\\}/,unicode:\"𝜳\"},{tex:/\\\\mathbit\\{P\\}/,unicode:\"𝑷\"},{tex:/\\\\mathbit\\{p\\}/,unicode:\"𝒑\"},{tex:/\\\\mathbit\\{Q\\}/,unicode:\"𝑸\"},{tex:/\\\\mathbit\\{q\\}/,unicode:\"𝒒\"},{tex:/\\\\mathbit\\{R\\}/,unicode:\"𝑹\"},{tex:/\\\\mathbit\\{r\\}/,unicode:\"𝒓\"},{tex:/\\\\mathbit\\{\\\\Sigma\\}/,unicode:\"𝜮\"},{tex:/\\\\mathbit\\{S\\}/,unicode:\"𝑺\"},{tex:/\\\\mathbit\\{s\\}/,unicode:\"𝒔\"},{tex:/\\\\mathbit\\{\\\\Theta\\}/,unicode:\"𝜣\"},{tex:/\\\\mathbit\\{T\\}/,unicode:\"𝑻\"},{tex:/\\\\mathbit\\{t\\}/,unicode:\"𝒕\"},{tex:/\\\\mathbit\\{\\\\Upsilon\\}/,unicode:\"𝜰\"},{tex:/\\\\mathbit\\{U\\}/,unicode:\"𝑼\"},{tex:/\\\\mathbit\\{u\\}/,unicode:\"𝒖\"},{tex:/\\\\mathbit\\{\\\\varkappa\\}/,unicode:\"𝝒\"},{tex:/\\\\mathbit\\{\\\\varpi\\}/,unicode:\"𝝕\"},{tex:/\\\\mathbit\\{\\\\varrho\\}/,unicode:\"𝝔\"},{tex:/\\\\mathbit\\{\\\\varsigma\\}/,unicode:\"𝝇\"},{tex:/\\\\mathbit\\{\\\\vartheta\\}/,unicode:\"𝝑\"},{tex:/\\\\mathbit\\{V\\}/,unicode:\"𝑽\"},{tex:/\\\\mathbit\\{v\\}/,unicode:\"𝒗\"},{tex:/\\\\mathbit\\{W\\}/,unicode:\"𝑾\"},{tex:/\\\\mathbit\\{w\\}/,unicode:\"𝒘\"},{tex:/\\\\mathbit\\{\\\\Xi\\}/,unicode:\"𝜩\"},{tex:/\\\\mathbit\\{X\\}/,unicode:\"𝑿\"},{tex:/\\\\mathbit\\{x\\}/,unicode:\"𝒙\"},{tex:/\\\\mathbit\\{Y\\}/,unicode:\"𝒀\"},{tex:/\\\\mathbit\\{y\\}/,unicode:\"𝒚\"},{tex:/\\\\mathbit\\{Z\\}/,unicode:\"𝒁\"},{tex:/\\\\mathbit\\{z\\}/,unicode:\"𝒛\"},{tex:/\\\\mathsfbfsl\\{A\\}/,unicode:\"𝘼\"},{tex:/\\\\mathsfbfsl\\{a\\}/,unicode:\"𝙖\"},{tex:/\\\\mathsfbfsl\\{B\\}/,unicode:\"𝘽\"},{tex:/\\\\mathsfbfsl\\{b\\}/,unicode:\"𝙗\"},{tex:/\\\\mathsfbfsl\\{C\\}/,unicode:\"𝘾\"},{tex:/\\\\mathsfbfsl\\{c\\}/,unicode:\"𝙘\"},{tex:/\\\\mathsfbfsl\\{\\\\Delta\\}/,unicode:\"𝞓\"},{tex:/\\\\mathsfbfsl\\{D\\}/,unicode:\"𝘿\"},{tex:/\\\\mathsfbfsl\\{d\\}/,unicode:\"𝙙\"},{tex:/\\\\mathsfbfsl\\{E\\}/,unicode:\"𝙀\"},{tex:/\\\\mathsfbfsl\\{e\\}/,unicode:\"𝙚\"},{tex:/\\\\mathsfbfsl\\{F\\}/,unicode:\"𝙁\"},{tex:/\\\\mathsfbfsl\\{f\\}/,unicode:\"𝙛\"},{tex:/\\\\mathsfbfsl\\{\\\\Gamma\\}/,unicode:\"𝞒\"},{tex:/\\\\mathsfbfsl\\{G\\}/,unicode:\"𝙂\"},{tex:/\\\\mathsfbfsl\\{g\\}/,unicode:\"𝙜\"},{tex:/\\\\mathsfbfsl\\{H\\}/,unicode:\"𝙃\"},{tex:/\\\\mathsfbfsl\\{h\\}/,unicode:\"𝙝\"},{tex:/\\\\mathsfbfsl\\{I\\}/,unicode:\"𝙄\"},{tex:/\\\\mathsfbfsl\\{i\\}/,unicode:\"𝙞\"},{tex:/\\\\mathsfbfsl\\{J\\}/,unicode:\"𝙅\"},{tex:/\\\\mathsfbfsl\\{j\\}/,unicode:\"𝙟\"},{tex:/\\\\mathsfbfsl\\{K\\}/,unicode:\"𝙆\"},{tex:/\\\\mathsfbfsl\\{k\\}/,unicode:\"𝙠\"},{tex:/\\\\mathsfbfsl\\{\\\\Lambda\\}/,unicode:\"𝞚\"},{tex:/\\\\mathsfbfsl\\{L\\}/,unicode:\"𝙇\"},{tex:/\\\\mathsfbfsl\\{l\\}/,unicode:\"𝙡\"},{tex:/\\\\mathsfbfsl\\{M\\}/,unicode:\"𝙈\"},{tex:/\\\\mathsfbfsl\\{m\\}/,unicode:\"𝙢\"},{tex:/\\\\mathsfbfsl\\{\\\\nabla\\}/,unicode:\"𝞩\"},{tex:/\\\\mathsfbfsl\\{N\\}/,unicode:\"𝙉\"},{tex:/\\\\mathsfbfsl\\{n\\}/,unicode:\"𝙣\"},{tex:/\\\\mathsfbfsl\\{\\\\Omega\\}/,unicode:\"𝞨\"},{tex:/\\\\mathsfbfsl\\{O\\}/,unicode:\"𝙊\"},{tex:/\\\\mathsfbfsl\\{o\\}/,unicode:\"𝙤\"},{tex:/\\\\mathsfbfsl\\{\\\\Phi\\}/,unicode:\"𝞥\"},{tex:/\\\\mathsfbfsl\\{\\\\phi\\}/,unicode:\"𝟇\"},{tex:/\\\\mathsfbfsl\\{\\\\Pi\\}/,unicode:\"𝞟\"},{tex:/\\\\mathsfbfsl\\{\\\\Psi\\}/,unicode:\"𝞧\"},{tex:/\\\\mathsfbfsl\\{P\\}/,unicode:\"𝙋\"},{tex:/\\\\mathsfbfsl\\{p\\}/,unicode:\"𝙥\"},{tex:/\\\\mathsfbfsl\\{Q\\}/,unicode:\"𝙌\"},{tex:/\\\\mathsfbfsl\\{q\\}/,unicode:\"𝙦\"},{tex:/\\\\mathsfbfsl\\{R\\}/,unicode:\"𝙍\"},{tex:/\\\\mathsfbfsl\\{r\\}/,unicode:\"𝙧\"},{tex:/\\\\mathsfbfsl\\{\\\\Sigma\\}/,unicode:\"𝞢\"},{tex:/\\\\mathsfbfsl\\{S\\}/,unicode:\"𝙎\"},{tex:/\\\\mathsfbfsl\\{s\\}/,unicode:\"𝙨\"},{tex:/\\\\mathsfbfsl\\{T\\}/,unicode:\"𝙏\"},{tex:/\\\\mathsfbfsl\\{t\\}/,unicode:\"𝙩\"},{tex:/\\\\mathsfbfsl\\{\\\\Upsilon\\}/,unicode:\"𝞤\"},{tex:/\\\\mathsfbfsl\\{U\\}/,unicode:\"𝙐\"},{tex:/\\\\mathsfbfsl\\{u\\}/,unicode:\"𝙪\"},{tex:/\\\\mathsfbfsl\\{\\\\varkappa\\}/,unicode:\"𝟆\"},{tex:/\\\\mathsfbfsl\\{\\\\varpi\\}/,unicode:\"𝟉\"},{tex:/\\\\mathsfbfsl\\{\\\\varrho\\}/,unicode:\"𝟈\"},{tex:/\\\\mathsfbfsl\\{\\\\varsigma\\}/,unicode:\"𝞻\"},{tex:/\\\\mathsfbfsl\\{\\\\vartheta\\}/,unicode:\"𝞗\"},{tex:/\\\\mathsfbfsl\\{V\\}/,unicode:\"𝙑\"},{tex:/\\\\mathsfbfsl\\{v\\}/,unicode:\"𝙫\"},{tex:/\\\\mathsfbfsl\\{W\\}/,unicode:\"𝙒\"},{tex:/\\\\mathsfbfsl\\{w\\}/,unicode:\"𝙬\"},{tex:/\\\\mathsfbfsl\\{\\\\Xi\\}/,unicode:\"𝞝\"},{tex:/\\\\mathsfbfsl\\{X\\}/,unicode:\"𝙓\"},{tex:/\\\\mathsfbfsl\\{x\\}/,unicode:\"𝙭\"},{tex:/\\\\mathsfbfsl\\{Y\\}/,unicode:\"𝙔\"},{tex:/\\\\mathsfbfsl\\{y\\}/,unicode:\"𝙮\"},{tex:/\\\\mathsfbfsl\\{Z\\}/,unicode:\"𝙕\"},{tex:/\\\\mathsfbfsl\\{z\\}/,unicode:\"𝙯\"},{tex:/\\\\mathsfbf\\{0\\}/,unicode:\"𝟬\"},{tex:/\\\\mathsfbf\\{1\\}/,unicode:\"𝟭\"},{tex:/\\\\mathsfbf\\{2\\}/,unicode:\"𝟮\"},{tex:/\\\\mathsfbf\\{3\\}/,unicode:\"𝟯\"},{tex:/\\\\mathsfbf\\{4\\}/,unicode:\"𝟰\"},{tex:/\\\\mathsfbf\\{5\\}/,unicode:\"𝟱\"},{tex:/\\\\mathsfbf\\{6\\}/,unicode:\"𝟲\"},{tex:/\\\\mathsfbf\\{7\\}/,unicode:\"𝟳\"},{tex:/\\\\mathsfbf\\{8\\}/,unicode:\"𝟴\"},{tex:/\\\\mathsfbf\\{9\\}/,unicode:\"𝟵\"},{tex:/\\\\mathsfbf\\{A\\}/,unicode:\"𝗔\"},{tex:/\\\\mathsfbf\\{a\\}/,unicode:\"𝗮\"},{tex:/\\\\mathsfbf\\{B\\}/,unicode:\"𝗕\"},{tex:/\\\\mathsfbf\\{b\\}/,unicode:\"𝗯\"},{tex:/\\\\mathsfbf\\{C\\}/,unicode:\"𝗖\"},{tex:/\\\\mathsfbf\\{c\\}/,unicode:\"𝗰\"},{tex:/\\\\mathsfbf\\{\\\\Delta\\}/,unicode:\"𝝙\"},{tex:/\\\\mathsfbf\\{D\\}/,unicode:\"𝗗\"},{tex:/\\\\mathsfbf\\{d\\}/,unicode:\"𝗱\"},{tex:/\\\\mathsfbf\\{E\\}/,unicode:\"𝗘\"},{tex:/\\\\mathsfbf\\{e\\}/,unicode:\"𝗲\"},{tex:/\\\\mathsfbf\\{F\\}/,unicode:\"𝗙\"},{tex:/\\\\mathsfbf\\{f\\}/,unicode:\"𝗳\"},{tex:/\\\\mathsfbf\\{\\\\Gamma\\}/,unicode:\"𝝘\"},{tex:/\\\\mathsfbf\\{G\\}/,unicode:\"𝗚\"},{tex:/\\\\mathsfbf\\{g\\}/,unicode:\"𝗴\"},{tex:/\\\\mathsfbf\\{H\\}/,unicode:\"𝗛\"},{tex:/\\\\mathsfbf\\{h\\}/,unicode:\"𝗵\"},{tex:/\\\\mathsfbf\\{I\\}/,unicode:\"𝗜\"},{tex:/\\\\mathsfbf\\{i\\}/,unicode:\"𝗶\"},{tex:/\\\\mathsfbf\\{J\\}/,unicode:\"𝗝\"},{tex:/\\\\mathsfbf\\{j\\}/,unicode:\"𝗷\"},{tex:/\\\\mathsfbf\\{K\\}/,unicode:\"𝗞\"},{tex:/\\\\mathsfbf\\{k\\}/,unicode:\"𝗸\"},{tex:/\\\\mathsfbf\\{\\\\Lambda\\}/,unicode:\"𝝠\"},{tex:/\\\\mathsfbf\\{L\\}/,unicode:\"𝗟\"},{tex:/\\\\mathsfbf\\{l\\}/,unicode:\"𝗹\"},{tex:/\\\\mathsfbf\\{M\\}/,unicode:\"𝗠\"},{tex:/\\\\mathsfbf\\{m\\}/,unicode:\"𝗺\"},{tex:/\\\\mathsfbf\\{\\\\nabla\\}/,unicode:\"𝝯\"},{tex:/\\\\mathsfbf\\{N\\}/,unicode:\"𝗡\"},{tex:/\\\\mathsfbf\\{n\\}/,unicode:\"𝗻\"},{tex:/\\\\mathsfbf\\{\\\\Omega\\}/,unicode:\"𝝮\"},{tex:/\\\\mathsfbf\\{O\\}/,unicode:\"𝗢\"},{tex:/\\\\mathsfbf\\{o\\}/,unicode:\"𝗼\"},{tex:/\\\\mathsfbf\\{\\\\Phi\\}/,unicode:\"𝝫\"},{tex:/\\\\mathsfbf\\{\\\\phi\\}/,unicode:\"𝞍\"},{tex:/\\\\mathsfbf\\{\\\\Pi\\}/,unicode:\"𝝥\"},{tex:/\\\\mathsfbf\\{\\\\Psi\\}/,unicode:\"𝝭\"},{tex:/\\\\mathsfbf\\{P\\}/,unicode:\"𝗣\"},{tex:/\\\\mathsfbf\\{p\\}/,unicode:\"𝗽\"},{tex:/\\\\mathsfbf\\{Q\\}/,unicode:\"𝗤\"},{tex:/\\\\mathsfbf\\{q\\}/,unicode:\"𝗾\"},{tex:/\\\\mathsfbf\\{R\\}/,unicode:\"𝗥\"},{tex:/\\\\mathsfbf\\{r\\}/,unicode:\"𝗿\"},{tex:/\\\\mathsfbf\\{\\\\Sigma\\}/,unicode:\"𝝨\"},{tex:/\\\\mathsfbf\\{S\\}/,unicode:\"𝗦\"},{tex:/\\\\mathsfbf\\{s\\}/,unicode:\"𝘀\"},{tex:/\\\\mathsfbf\\{\\\\Theta\\}/,unicode:\"𝝝\"},{tex:/\\\\mathsfbf\\{T\\}/,unicode:\"𝗧\"},{tex:/\\\\mathsfbf\\{t\\}/,unicode:\"𝘁\"},{tex:/\\\\mathsfbf\\{\\\\Upsilon\\}/,unicode:\"𝝪\"},{tex:/\\\\mathsfbf\\{U\\}/,unicode:\"𝗨\"},{tex:/\\\\mathsfbf\\{u\\}/,unicode:\"𝘂\"},{tex:/\\\\mathsfbf\\{\\\\varkappa\\}/,unicode:\"𝞌\"},{tex:/\\\\mathsfbf\\{\\\\varpi\\}/,unicode:\"𝞏\"},{tex:/\\\\mathsfbf\\{\\\\varrho\\}/,unicode:\"𝞎\"},{tex:/\\\\mathsfbf\\{\\\\varsigma\\}/,unicode:\"𝞁\"},{tex:/\\\\mathsfbf\\{\\\\vartheta\\}/,unicode:\"𝝧\"},{tex:/\\\\mathsfbf\\{V\\}/,unicode:\"𝗩\"},{tex:/\\\\mathsfbf\\{v\\}/,unicode:\"𝘃\"},{tex:/\\\\mathsfbf\\{W\\}/,unicode:\"𝗪\"},{tex:/\\\\mathsfbf\\{w\\}/,unicode:\"𝘄\"},{tex:/\\\\mathsfbf\\{\\\\Xi\\}/,unicode:\"𝝣\"},{tex:/\\\\mathsfbf\\{X\\}/,unicode:\"𝗫\"},{tex:/\\\\mathsfbf\\{x\\}/,unicode:\"𝘅\"},{tex:/\\\\mathsfbf\\{Y\\}/,unicode:\"𝗬\"},{tex:/\\\\mathsfbf\\{y\\}/,unicode:\"𝘆\"},{tex:/\\\\mathsfbf\\{Z\\}/,unicode:\"𝗭\"},{tex:/\\\\mathsfbf\\{z\\}/,unicode:\"𝘇\"},{tex:/\\\\mathrm\\{\\\\ddot\\{I\\}\\}/,unicode:\"Ϊ\"},{tex:/\\\\mathrm\\{\\\\ddot\\{Y\\}\\}/,unicode:\"Ϋ\"},{tex:/\\\\mathrm\\{\\\\mu\\}/,unicode:\"µ\"},{tex:/\\\\mathrm\\{'\\\\Omega\\}/,unicode:\"Ώ\"},{tex:/\\\\mathrm\\{'Y\\}/,unicode:\"Ύ\"},{tex:/\\\\mathrm/,unicode:\"\"},{tex:/\\\\mathsl\\{A\\}/,unicode:\"𝐴\"},{tex:/\\\\mathsl\\{a\\}/,unicode:\"𝑎\"},{tex:/\\\\mathsl\\{B\\}/,unicode:\"𝐵\"},{tex:/\\\\mathsl\\{b\\}/,unicode:\"𝑏\"},{tex:/\\\\mathsl\\{C\\}/,unicode:\"𝐶\"},{tex:/\\\\mathsl\\{c\\}/,unicode:\"𝑐\"},{tex:/\\\\mathsl\\{\\\\Delta\\}/,unicode:\"𝛥\"},{tex:/\\\\mathsl\\{D\\}/,unicode:\"𝐷\"},{tex:/\\\\mathsl\\{d\\}/,unicode:\"𝑑\"},{tex:/\\\\mathsl\\{E\\}/,unicode:\"𝐸\"},{tex:/\\\\mathsl\\{e\\}/,unicode:\"𝑒\"},{tex:/\\\\mathsl\\{F\\}/,unicode:\"𝐹\"},{tex:/\\\\mathsl\\{f\\}/,unicode:\"𝑓\"},{tex:/\\\\mathsl\\{\\\\Gamma\\}/,unicode:\"𝛤\"},{tex:/\\\\mathsl\\{G\\}/,unicode:\"𝐺\"},{tex:/\\\\mathsl\\{g\\}/,unicode:\"𝑔\"},{tex:/\\\\mathsl\\{H\\}/,unicode:\"𝐻\"},{tex:/\\\\mathsl\\{I\\}/,unicode:\"𝐼\"},{tex:/\\\\mathsl\\{i\\}/,unicode:\"𝑖\"},{tex:/\\\\mathsl\\{J\\}/,unicode:\"𝐽\"},{tex:/\\\\mathsl\\{j\\}/,unicode:\"𝑗\"},{tex:/\\\\mathsl\\{K\\}/,unicode:\"𝐾\"},{tex:/\\\\mathsl\\{k\\}/,unicode:\"𝑘\"},{tex:/\\\\mathsl\\{\\\\Lambda\\}/,unicode:\"𝛬\"},{tex:/\\\\mathsl\\{L\\}/,unicode:\"𝐿\"},{tex:/\\\\mathsl\\{l\\}/,unicode:\"𝑙\"},{tex:/\\\\mathsl\\{M\\}/,unicode:\"𝑀\"},{tex:/\\\\mathsl\\{m\\}/,unicode:\"𝑚\"},{tex:/\\\\mathsl\\{\\\\nabla\\}/,unicode:\"𝛻\"},{tex:/\\\\mathsl\\{N\\}/,unicode:\"𝑁\"},{tex:/\\\\mathsl\\{n\\}/,unicode:\"𝑛\"},{tex:/\\\\mathsl\\{\\\\Omega\\}/,unicode:\"𝛺\"},{tex:/\\\\mathsl\\{O\\}/,unicode:\"𝑂\"},{tex:/\\\\mathsl\\{o\\}/,unicode:\"𝑜\"},{tex:/\\\\mathsl\\{\\\\Phi\\}/,unicode:\"𝛷\"},{tex:/\\\\mathsl\\{\\\\phi\\}/,unicode:\"𝜙\"},{tex:/\\\\mathsl\\{\\\\Pi\\}/,unicode:\"𝛱\"},{tex:/\\\\mathsl\\{\\\\Psi\\}/,unicode:\"𝛹\"},{tex:/\\\\mathsl\\{P\\}/,unicode:\"𝑃\"},{tex:/\\\\mathsl\\{p\\}/,unicode:\"𝑝\"},{tex:/\\\\mathsl\\{Q\\}/,unicode:\"𝑄\"},{tex:/\\\\mathsl\\{q\\}/,unicode:\"𝑞\"},{tex:/\\\\mathsl\\{R\\}/,unicode:\"𝑅\"},{tex:/\\\\mathsl\\{r\\}/,unicode:\"𝑟\"},{tex:/\\\\mathsl\\{\\\\Sigma\\}/,unicode:\"𝛴\"},{tex:/\\\\mathsl\\{S\\}/,unicode:\"𝑆\"},{tex:/\\\\mathsl\\{s\\}/,unicode:\"𝑠\"},{tex:/\\\\mathsl\\{\\\\Theta\\}/,unicode:\"𝛩\"},{tex:/\\\\mathsl\\{T\\}/,unicode:\"𝑇\"},{tex:/\\\\mathsl\\{t\\}/,unicode:\"𝑡\"},{tex:/\\\\mathsl\\{\\\\Upsilon\\}/,unicode:\"𝛶\"},{tex:/\\\\mathsl\\{U\\}/,unicode:\"𝑈\"},{tex:/\\\\mathsl\\{u\\}/,unicode:\"𝑢\"},{tex:/\\\\mathsl\\{\\\\varkappa\\}/,unicode:\"𝜘\"},{tex:/\\\\mathsl\\{\\\\varpi\\}/,unicode:\"𝜛\"},{tex:/\\\\mathsl\\{\\\\varrho\\}/,unicode:\"𝜚\"},{tex:/\\\\mathsl\\{\\\\varsigma\\}/,unicode:\"𝜍\"},{tex:/\\\\mathsl\\{\\\\vartheta\\}/,unicode:\"𝛳\"},{tex:/\\\\mathsl\\{V\\}/,unicode:\"𝑉\"},{tex:/\\\\mathsl\\{v\\}/,unicode:\"𝑣\"},{tex:/\\\\mathsl\\{W\\}/,unicode:\"𝑊\"},{tex:/\\\\mathsl\\{w\\}/,unicode:\"𝑤\"},{tex:/\\\\mathsl\\{\\\\Xi\\}/,unicode:\"𝛯\"},{tex:/\\\\mathsl\\{X\\}/,unicode:\"𝑋\"},{tex:/\\\\mathsl\\{x\\}/,unicode:\"𝑥\"},{tex:/\\\\mathsl\\{Y\\}/,unicode:\"𝑌\"},{tex:/\\\\mathsl\\{y\\}/,unicode:\"𝑦\"},{tex:/\\\\mathsl\\{Z\\}/,unicode:\"𝑍\"},{tex:/\\\\mathsl\\{z\\}/,unicode:\"𝑧\"},{tex:/\\\\mathbf\\{0\\}/,unicode:\"𝟎\"},{tex:/\\\\mathbf\\{1\\}/,unicode:\"𝟏\"},{tex:/\\\\mathbf\\{2\\}/,unicode:\"𝟐\"},{tex:/\\\\mathbf\\{3\\}/,unicode:\"𝟑\"},{tex:/\\\\mathbf\\{4\\}/,unicode:\"𝟒\"},{tex:/\\\\mathbf\\{5\\}/,unicode:\"𝟓\"},{tex:/\\\\mathbf\\{6\\}/,unicode:\"𝟔\"},{tex:/\\\\mathbf\\{7\\}/,unicode:\"𝟕\"},{tex:/\\\\mathbf\\{8\\}/,unicode:\"𝟖\"},{tex:/\\\\mathbf\\{9\\}/,unicode:\"𝟗\"},{tex:/\\\\mathbf\\{A\\}/,unicode:\"𝐀\"},{tex:/\\\\mathbf\\{a\\}/,unicode:\"𝐚\"},{tex:/\\\\mathbf\\{B\\}/,unicode:\"𝐁\"},{tex:/\\\\mathbf\\{b\\}/,unicode:\"𝐛\"},{tex:/\\\\mathbf\\{C\\}/,unicode:\"𝐂\"},{tex:/\\\\mathbf\\{c\\}/,unicode:\"𝐜\"},{tex:/\\\\mathbf\\{\\\\Delta\\}/,unicode:\"𝚫\"},{tex:/\\\\mathbf\\{D\\}/,unicode:\"𝐃\"},{tex:/\\\\mathbf\\{d\\}/,unicode:\"𝐝\"},{tex:/\\\\mathbf\\{E\\}/,unicode:\"𝐄\"},{tex:/\\\\mathbf\\{e\\}/,unicode:\"𝐞\"},{tex:/\\\\mathbf\\{F\\}/,unicode:\"𝐅\"},{tex:/\\\\mathbf\\{f\\}/,unicode:\"𝐟\"},{tex:/\\\\mathbf\\{\\\\Gamma\\}/,unicode:\"𝚪\"},{tex:/\\\\mathbf\\{G\\}/,unicode:\"𝐆\"},{tex:/\\\\mathbf\\{g\\}/,unicode:\"𝐠\"},{tex:/\\\\mathbf\\{H\\}/,unicode:\"𝐇\"},{tex:/\\\\mathbf\\{h\\}/,unicode:\"𝐡\"},{tex:/\\\\mathbf\\{I\\}/,unicode:\"𝐈\"},{tex:/\\\\mathbf\\{i\\}/,unicode:\"𝐢\"},{tex:/\\\\mathbf\\{J\\}/,unicode:\"𝐉\"},{tex:/\\\\mathbf\\{j\\}/,unicode:\"𝐣\"},{tex:/\\\\mathbf\\{K\\}/,unicode:\"𝐊\"},{tex:/\\\\mathbf\\{k\\}/,unicode:\"𝐤\"},{tex:/\\\\mathbf\\{\\\\Lambda\\}/,unicode:\"𝚲\"},{tex:/\\\\mathbf\\{L\\}/,unicode:\"𝐋\"},{tex:/\\\\mathbf\\{l\\}/,unicode:\"𝐥\"},{tex:/\\\\mathbf\\{M\\}/,unicode:\"𝐌\"},{tex:/\\\\mathbf\\{m\\}/,unicode:\"𝐦\"},{tex:/\\\\mathbf\\{\\\\nabla\\}/,unicode:\"𝛁\"},{tex:/\\\\mathbf\\{N\\}/,unicode:\"𝐍\"},{tex:/\\\\mathbf\\{n\\}/,unicode:\"𝐧\"},{tex:/\\\\mathbf\\{\\\\Omega\\}/,unicode:\"𝛀\"},{tex:/\\\\mathbf\\{O\\}/,unicode:\"𝐎\"},{tex:/\\\\mathbf\\{o\\}/,unicode:\"𝐨\"},{tex:/\\\\mathbf\\{\\\\Phi\\}/,unicode:\"𝚽\"},{tex:/\\\\mathbf\\{\\\\phi\\}/,unicode:\"𝛟\"},{tex:/\\\\mathbf\\{\\\\Pi\\}/,unicode:\"𝚷\"},{tex:/\\\\mathbf\\{\\\\Psi\\}/,unicode:\"𝚿\"},{tex:/\\\\mathbf\\{P\\}/,unicode:\"𝐏\"},{tex:/\\\\mathbf\\{p\\}/,unicode:\"𝐩\"},{tex:/\\\\mathbf\\{Q\\}/,unicode:\"𝐐\"},{tex:/\\\\mathbf\\{q\\}/,unicode:\"𝐪\"},{tex:/\\\\mathbf\\{R\\}/,unicode:\"𝐑\"},{tex:/\\\\mathbf\\{r\\}/,unicode:\"𝐫\"},{tex:/\\\\mathbf\\{\\\\Sigma\\}/,unicode:\"𝚺\"},{tex:/\\\\mathbf\\{S\\}/,unicode:\"𝐒\"},{tex:/\\\\mathbf\\{s\\}/,unicode:\"𝐬\"},{tex:/\\\\mathbf\\{\\\\Theta\\}/,unicode:\"𝚯\"},{tex:/\\\\mathbf\\{\\\\theta\\}/,unicode:\"𝛉\"},{tex:/\\\\mathbf\\{T\\}/,unicode:\"𝐓\"},{tex:/\\\\mathbf\\{t\\}/,unicode:\"𝐭\"},{tex:/\\\\mathbf\\{\\\\Upsilon\\}/,unicode:\"𝚼\"},{tex:/\\\\mathbf\\{U\\}/,unicode:\"𝐔\"},{tex:/\\\\mathbf\\{u\\}/,unicode:\"𝐮\"},{tex:/\\\\mathbf\\{\\\\varkappa\\}/,unicode:\"𝛞\"},{tex:/\\\\mathbf\\{\\\\varpi\\}/,unicode:\"𝛡\"},{tex:/\\\\mathbf\\{\\\\varrho\\}/,unicode:\"𝛠\"},{tex:/\\\\mathbf\\{\\\\varsigma\\}/,unicode:\"𝛓\"},{tex:/\\\\mathbf\\{\\\\vartheta\\}/,unicode:\"𝚹\"},{tex:/\\\\mathbf\\{V\\}/,unicode:\"𝐕\"},{tex:/\\\\mathbf\\{v\\}/,unicode:\"𝐯\"},{tex:/\\\\mathbf\\{W\\}/,unicode:\"𝐖\"},{tex:/\\\\mathbf\\{w\\}/,unicode:\"𝐰\"},{tex:/\\\\mathbf\\{\\\\Xi\\}/,unicode:\"𝚵\"},{tex:/\\\\mathbf\\{X\\}/,unicode:\"𝐗\"},{tex:/\\\\mathbf\\{x\\}/,unicode:\"𝐱\"},{tex:/\\\\mathbf\\{Y\\}/,unicode:\"𝐘\"},{tex:/\\\\mathbf\\{y\\}/,unicode:\"𝐲\"},{tex:/\\\\mathbf\\{Z\\}/,unicode:\"𝐙\"},{tex:/\\\\mathbf\\{z\\}/,unicode:\"𝐳\"},{tex:/\\\\mathbb\\{0\\}/,unicode:\"𝟘\"},{tex:/\\\\mathbb\\{1\\}/,unicode:\"𝟙\"},{tex:/\\\\mathbb\\{2\\}/,unicode:\"𝟚\"},{tex:/\\\\mathbb\\{3\\}/,unicode:\"𝟛\"},{tex:/\\\\mathbb\\{4\\}/,unicode:\"𝟜\"},{tex:/\\\\mathbb\\{5\\}/,unicode:\"𝟝\"},{tex:/\\\\mathbb\\{6\\}/,unicode:\"𝟞\"},{tex:/\\\\mathbb\\{7\\}/,unicode:\"𝟟\"},{tex:/\\\\mathbb\\{8\\}/,unicode:\"𝟠\"},{tex:/\\\\mathbb\\{9\\}/,unicode:\"𝟡\"},{tex:/\\\\mathbb\\{A\\}/,unicode:\"𝔸\"},{tex:/\\\\mathbb\\{a\\}/,unicode:\"𝕒\"},{tex:/\\\\mathbb\\{B\\}/,unicode:\"𝔹\"},{tex:/\\\\mathbb\\{b\\}/,unicode:\"𝕓\"},{tex:/\\\\mathbb\\{C\\}/,unicode:\"ℂ\"},{tex:/\\\\mathbb\\{c\\}/,unicode:\"𝕔\"},{tex:/\\\\mathbb\\{D\\}/,unicode:\"𝔻\"},{tex:/\\\\mathbb\\{d\\}/,unicode:\"𝕕\"},{tex:/\\\\mathbb\\{E\\}/,unicode:\"𝔼\"},{tex:/\\\\mathbb\\{e\\}/,unicode:\"𝕖\"},{tex:/\\\\mathbb\\{F\\}/,unicode:\"𝔽\"},{tex:/\\\\mathbb\\{f\\}/,unicode:\"𝕗\"},{tex:/\\\\mathbb\\{\\\\gamma\\}/,unicode:\"ℽ\"},{tex:/\\\\mathbb\\{\\\\Gamma\\}/,unicode:\"ℾ\"},{tex:/\\\\mathbb\\{G\\}/,unicode:\"𝔾\"},{tex:/\\\\mathbb\\{g\\}/,unicode:\"𝕘\"},{tex:/\\\\mathbb\\{H\\}/,unicode:\"ℍ\"},{tex:/\\\\mathbb\\{h\\}/,unicode:\"𝕙\"},{tex:/\\\\mathbb\\{I\\}/,unicode:\"𝕀\"},{tex:/\\\\mathbb\\{i\\}/,unicode:\"𝕚\"},{tex:/\\\\mathbb\\{J\\}/,unicode:\"𝕁\"},{tex:/\\\\mathbb\\{j\\}/,unicode:\"𝕛\"},{tex:/\\\\mathbb\\{K\\}/,unicode:\"𝕂\"},{tex:/\\\\mathbb\\{k\\}/,unicode:\"𝕜\"},{tex:/\\\\mathbb\\{L\\}/,unicode:\"𝕃\"},{tex:/\\\\mathbb\\{l\\}/,unicode:\"𝕝\"},{tex:/\\\\mathbb\\{M\\}/,unicode:\"𝕄\"},{tex:/\\\\mathbb\\{m\\}/,unicode:\"𝕞\"},{tex:/\\\\mathbb\\{N\\}/,unicode:\"ℕ\"},{tex:/\\\\mathbb\\{n\\}/,unicode:\"𝕟\"},{tex:/\\\\mathbb\\{O\\}/,unicode:\"𝕆\"},{tex:/\\\\mathbb\\{o\\}/,unicode:\"𝕠\"},{tex:/\\\\mathbb\\{\\\\pi\\}/,unicode:\"ℼ\"},{tex:/\\\\mathbb\\{\\\\Pi\\}/,unicode:\"ℿ\"},{tex:/\\\\mathbb\\{P\\}/,unicode:\"ℙ\"},{tex:/\\\\mathbb\\{p\\}/,unicode:\"𝕡\"},{tex:/\\\\mathbb\\{Q\\}/,unicode:\"ℚ\"},{tex:/\\\\mathbb\\{q\\}/,unicode:\"𝕢\"},{tex:/\\\\mathbb\\{R\\}/,unicode:\"ℝ\"},{tex:/\\\\mathbb\\{r\\}/,unicode:\"𝕣\"},{tex:/\\\\mathbb\\{\\\\Sigma\\}/,unicode:\"⅀\"},{tex:/\\\\mathbb\\{S\\}/,unicode:\"𝕊\"},{tex:/\\\\mathbb\\{s\\}/,unicode:\"𝕤\"},{tex:/\\\\mathbb\\{T\\}/,unicode:\"𝕋\"},{tex:/\\\\mathbb\\{t\\}/,unicode:\"𝕥\"},{tex:/\\\\mathbb\\{U\\}/,unicode:\"𝕌\"},{tex:/\\\\mathbb\\{u\\}/,unicode:\"𝕦\"},{tex:/\\\\mathbb\\{V\\}/,unicode:\"𝕍\"},{tex:/\\\\mathbb\\{v\\}/,unicode:\"𝕧\"},{tex:/\\\\mathbb\\{W\\}/,unicode:\"𝕎\"},{tex:/\\\\mathbb\\{w\\}/,unicode:\"𝕨\"},{tex:/\\\\mathbb\\{X\\}/,unicode:\"𝕏\"},{tex:/\\\\mathbb\\{x\\}/,unicode:\"𝕩\"},{tex:/\\\\mathbb\\{Y\\}/,unicode:\"𝕐\"},{tex:/\\\\mathbb\\{y\\}/,unicode:\"𝕪\"},{tex:/\\\\mathbb\\{Z\\}/,unicode:\"ℤ\"},{tex:/\\\\mathbb\\{z\\}/,unicode:\"𝕫\"},{tex:/\\\\mathslbb\\{A\\}/,unicode:\"𝕬\"},{tex:/\\\\mathslbb\\{a\\}/,unicode:\"𝖆\"},{tex:/\\\\mathslbb\\{B\\}/,unicode:\"𝕭\"},{tex:/\\\\mathslbb\\{b\\}/,unicode:\"𝖇\"},{tex:/\\\\mathslbb\\{C\\}/,unicode:\"𝕮\"},{tex:/\\\\mathslbb\\{c\\}/,unicode:\"𝖈\"},{tex:/\\\\mathslbb\\{D\\}/,unicode:\"𝕯\"},{tex:/\\\\mathslbb\\{d\\}/,unicode:\"𝖉\"},{tex:/\\\\mathslbb\\{E\\}/,unicode:\"𝕰\"},{tex:/\\\\mathslbb\\{e\\}/,unicode:\"𝖊\"},{tex:/\\\\mathslbb\\{F\\}/,unicode:\"𝕱\"},{tex:/\\\\mathslbb\\{f\\}/,unicode:\"𝖋\"},{tex:/\\\\mathslbb\\{G\\}/,unicode:\"𝕲\"},{tex:/\\\\mathslbb\\{g\\}/,unicode:\"𝖌\"},{tex:/\\\\mathslbb\\{H\\}/,unicode:\"𝕳\"},{tex:/\\\\mathslbb\\{h\\}/,unicode:\"𝖍\"},{tex:/\\\\mathslbb\\{I\\}/,unicode:\"𝕴\"},{tex:/\\\\mathslbb\\{i\\}/,unicode:\"𝖎\"},{tex:/\\\\mathslbb\\{J\\}/,unicode:\"𝕵\"},{tex:/\\\\mathslbb\\{j\\}/,unicode:\"𝖏\"},{tex:/\\\\mathslbb\\{K\\}/,unicode:\"𝕶\"},{tex:/\\\\mathslbb\\{k\\}/,unicode:\"𝖐\"},{tex:/\\\\mathslbb\\{L\\}/,unicode:\"𝕷\"},{tex:/\\\\mathslbb\\{l\\}/,unicode:\"𝖑\"},{tex:/\\\\mathslbb\\{M\\}/,unicode:\"𝕸\"},{tex:/\\\\mathslbb\\{m\\}/,unicode:\"𝖒\"},{tex:/\\\\mathslbb\\{N\\}/,unicode:\"𝕹\"},{tex:/\\\\mathslbb\\{n\\}/,unicode:\"𝖓\"},{tex:/\\\\mathslbb\\{O\\}/,unicode:\"𝕺\"},{tex:/\\\\mathslbb\\{o\\}/,unicode:\"𝖔\"},{tex:/\\\\mathslbb\\{P\\}/,unicode:\"𝕻\"},{tex:/\\\\mathslbb\\{p\\}/,unicode:\"𝖕\"},{tex:/\\\\mathslbb\\{Q\\}/,unicode:\"𝕼\"},{tex:/\\\\mathslbb\\{q\\}/,unicode:\"𝖖\"},{tex:/\\\\mathslbb\\{R\\}/,unicode:\"𝕽\"},{tex:/\\\\mathslbb\\{r\\}/,unicode:\"𝖗\"},{tex:/\\\\mathslbb\\{S\\}/,unicode:\"𝕾\"},{tex:/\\\\mathslbb\\{s\\}/,unicode:\"𝖘\"},{tex:/\\\\mathslbb\\{T\\}/,unicode:\"𝕿\"},{tex:/\\\\mathslbb\\{t\\}/,unicode:\"𝖙\"},{tex:/\\\\mathslbb\\{U\\}/,unicode:\"𝖀\"},{tex:/\\\\mathslbb\\{u\\}/,unicode:\"𝖚\"},{tex:/\\\\mathslbb\\{V\\}/,unicode:\"𝖁\"},{tex:/\\\\mathslbb\\{v\\}/,unicode:\"𝖛\"},{tex:/\\\\mathslbb\\{W\\}/,unicode:\"𝖂\"},{tex:/\\\\mathslbb\\{w\\}/,unicode:\"𝖜\"},{tex:/\\\\mathslbb\\{X\\}/,unicode:\"𝖃\"},{tex:/\\\\mathslbb\\{x\\}/,unicode:\"𝖝\"},{tex:/\\\\mathslbb\\{Y\\}/,unicode:\"𝖄\"},{tex:/\\\\mathslbb\\{y\\}/,unicode:\"𝖞\"},{tex:/\\\\mathslbb\\{Z\\}/,unicode:\"𝖅\"},{tex:/\\\\mathslbb\\{z\\}/,unicode:\"𝖟\"},{tex:/\\\\mathfrak\\{A\\}/,unicode:\"𝔄\"},{tex:/\\\\mathfrak\\{a\\}/,unicode:\"𝔞\"},{tex:/\\\\mathfrak\\{B\\}/,unicode:\"𝔅\"},{tex:/\\\\mathfrak\\{b\\}/,unicode:\"𝔟\"},{tex:/\\\\mathfrak\\{C\\}/,unicode:\"ℭ\"},{tex:/\\\\mathfrak\\{c\\}/,unicode:\"𝔠\"},{tex:/\\\\mathfrak\\{D\\}/,unicode:\"𝔇\"},{tex:/\\\\mathfrak\\{d\\}/,unicode:\"𝔡\"},{tex:/\\\\mathfrak\\{E\\}/,unicode:\"𝔈\"},{tex:/\\\\mathfrak\\{e\\}/,unicode:\"𝔢\"},{tex:/\\\\mathfrak\\{F\\}/,unicode:\"𝔉\"},{tex:/\\\\mathfrak\\{f\\}/,unicode:\"𝔣\"},{tex:/\\\\mathfrak\\{G\\}/,unicode:\"𝔊\"},{tex:/\\\\mathfrak\\{g\\}/,unicode:\"𝔤\"},{tex:/\\\\mathfrak\\{H\\}/,unicode:\"ℌ\"},{tex:/\\\\mathfrak\\{h\\}/,unicode:\"𝔥\"},{tex:/\\\\mathfrak\\{I\\}/,unicode:\"ℑ\"},{tex:/\\\\mathfrak\\{i\\}/,unicode:\"𝔦\"},{tex:/\\\\mathfrak\\{J\\}/,unicode:\"𝔍\"},{tex:/\\\\mathfrak\\{j\\}/,unicode:\"𝔧\"},{tex:/\\\\mathfrak\\{K\\}/,unicode:\"𝔎\"},{tex:/\\\\mathfrak\\{k\\}/,unicode:\"𝔨\"},{tex:/\\\\mathfrak\\{L\\}/,unicode:\"𝔏\"},{tex:/\\\\mathfrak\\{l\\}/,unicode:\"𝔩\"},{tex:/\\\\mathfrak\\{M\\}/,unicode:\"𝔐\"},{tex:/\\\\mathfrak\\{m\\}/,unicode:\"𝔪\"},{tex:/\\\\mathfrak\\{N\\}/,unicode:\"𝔑\"},{tex:/\\\\mathfrak\\{n\\}/,unicode:\"𝔫\"},{tex:/\\\\mathfrak\\{O\\}/,unicode:\"𝔒\"},{tex:/\\\\mathfrak\\{o\\}/,unicode:\"𝔬\"},{tex:/\\\\mathfrak\\{P\\}/,unicode:\"𝔓\"},{tex:/\\\\mathfrak\\{p\\}/,unicode:\"𝔭\"},{tex:/\\\\mathfrak\\{Q\\}/,unicode:\"𝔔\"},{tex:/\\\\mathfrak\\{q\\}/,unicode:\"𝔮\"},{tex:/\\\\mathfrak\\{R\\}/,unicode:\"ℜ\"},{tex:/\\\\mathfrak\\{r\\}/,unicode:\"𝔯\"},{tex:/\\\\mathfrak\\{S\\}/,unicode:\"𝔖\"},{tex:/\\\\mathfrak\\{s\\}/,unicode:\"𝔰\"},{tex:/\\\\mathfrak\\{T\\}/,unicode:\"𝔗\"},{tex:/\\\\mathfrak\\{t\\}/,unicode:\"𝔱\"},{tex:/\\\\mathfrak\\{U\\}/,unicode:\"𝔘\"},{tex:/\\\\mathfrak\\{u\\}/,unicode:\"𝔲\"},{tex:/\\\\mathfrak\\{V\\}/,unicode:\"𝔙\"},{tex:/\\\\mathfrak\\{v\\}/,unicode:\"𝔳\"},{tex:/\\\\mathfrak\\{W\\}/,unicode:\"𝔚\"},{tex:/\\\\mathfrak\\{w\\}/,unicode:\"𝔴\"},{tex:/\\\\mathfrak\\{X\\}/,unicode:\"𝔛\"},{tex:/\\\\mathfrak\\{x\\}/,unicode:\"𝔵\"},{tex:/\\\\mathfrak\\{Y\\}/,unicode:\"𝔜\"},{tex:/\\\\mathfrak\\{y\\}/,unicode:\"𝔶\"},{tex:/\\\\mathfrak\\{Z\\}/,unicode:\"ℨ\"},{tex:/\\\\mathfrak\\{z\\}/,unicode:\"𝔷\"},{tex:/\\\\mathsfsl\\{A\\}/,unicode:\"𝘈\"},{tex:/\\\\mathsfsl\\{a\\}/,unicode:\"𝘢\"},{tex:/\\\\mathsfsl\\{B\\}/,unicode:\"𝘉\"},{tex:/\\\\mathsfsl\\{b\\}/,unicode:\"𝘣\"},{tex:/\\\\mathsfsl\\{C\\}/,unicode:\"𝘊\"},{tex:/\\\\mathsfsl\\{c\\}/,unicode:\"𝘤\"},{tex:/\\\\mathsfsl\\{D\\}/,unicode:\"𝘋\"},{tex:/\\\\mathsfsl\\{d\\}/,unicode:\"𝘥\"},{tex:/\\\\mathsfsl\\{E\\}/,unicode:\"𝘌\"},{tex:/\\\\mathsfsl\\{e\\}/,unicode:\"𝘦\"},{tex:/\\\\mathsfsl\\{F\\}/,unicode:\"𝘍\"},{tex:/\\\\mathsfsl\\{f\\}/,unicode:\"𝘧\"},{tex:/\\\\mathsfsl\\{G\\}/,unicode:\"𝘎\"},{tex:/\\\\mathsfsl\\{g\\}/,unicode:\"𝘨\"},{tex:/\\\\mathsfsl\\{H\\}/,unicode:\"𝘏\"},{tex:/\\\\mathsfsl\\{h\\}/,unicode:\"𝘩\"},{tex:/\\\\mathsfsl\\{I\\}/,unicode:\"𝘐\"},{tex:/\\\\mathsfsl\\{i\\}/,unicode:\"𝘪\"},{tex:/\\\\mathsfsl\\{J\\}/,unicode:\"𝘑\"},{tex:/\\\\mathsfsl\\{j\\}/,unicode:\"𝘫\"},{tex:/\\\\mathsfsl\\{K\\}/,unicode:\"𝘒\"},{tex:/\\\\mathsfsl\\{k\\}/,unicode:\"𝘬\"},{tex:/\\\\mathsfsl\\{L\\}/,unicode:\"𝘓\"},{tex:/\\\\mathsfsl\\{l\\}/,unicode:\"𝘭\"},{tex:/\\\\mathsfsl\\{M\\}/,unicode:\"𝘔\"},{tex:/\\\\mathsfsl\\{m\\}/,unicode:\"𝘮\"},{tex:/\\\\mathsfsl\\{N\\}/,unicode:\"𝘕\"},{tex:/\\\\mathsfsl\\{n\\}/,unicode:\"𝘯\"},{tex:/\\\\mathsfsl\\{O\\}/,unicode:\"𝘖\"},{tex:/\\\\mathsfsl\\{o\\}/,unicode:\"𝘰\"},{tex:/\\\\mathsfsl\\{P\\}/,unicode:\"𝘗\"},{tex:/\\\\mathsfsl\\{p\\}/,unicode:\"𝘱\"},{tex:/\\\\mathsfsl\\{Q\\}/,unicode:\"𝘘\"},{tex:/\\\\mathsfsl\\{q\\}/,unicode:\"𝘲\"},{tex:/\\\\mathsfsl\\{R\\}/,unicode:\"𝘙\"},{tex:/\\\\mathsfsl\\{r\\}/,unicode:\"𝘳\"},{tex:/\\\\mathsfsl\\{S\\}/,unicode:\"𝘚\"},{tex:/\\\\mathsfsl\\{s\\}/,unicode:\"𝘴\"},{tex:/\\\\mathsfsl\\{T\\}/,unicode:\"𝘛\"},{tex:/\\\\mathsfsl\\{t\\}/,unicode:\"𝘵\"},{tex:/\\\\mathsfsl\\{U\\}/,unicode:\"𝘜\"},{tex:/\\\\mathsfsl\\{u\\}/,unicode:\"𝘶\"},{tex:/\\\\mathsfsl\\{V\\}/,unicode:\"𝘝\"},{tex:/\\\\mathsfsl\\{v\\}/,unicode:\"𝘷\"},{tex:/\\\\mathsfsl\\{W\\}/,unicode:\"𝘞\"},{tex:/\\\\mathsfsl\\{w\\}/,unicode:\"𝘸\"},{tex:/\\\\mathsfsl\\{X\\}/,unicode:\"𝘟\"},{tex:/\\\\mathsfsl\\{x\\}/,unicode:\"𝘹\"},{tex:/\\\\mathsfsl\\{Y\\}/,unicode:\"𝘠\"},{tex:/\\\\mathsfsl\\{y\\}/,unicode:\"𝘺\"},{tex:/\\\\mathsfsl\\{Z\\}/,unicode:\"𝘡\"},{tex:/\\\\mathsfsl\\{z\\}/,unicode:\"𝘻\"},{tex:/\\\\mathscr\\{A\\}/,unicode:\"𝒜\"},{tex:/\\\\mathscr\\{a\\}/,unicode:\"𝒶\"},{tex:/\\\\mathscr\\{B\\}/,unicode:\"ℬ\"},{tex:/\\\\mathscr\\{b\\}/,unicode:\"𝒷\"},{tex:/\\\\mathscr\\{C\\}/,unicode:\"𝒞\"},{tex:/\\\\mathscr\\{c\\}/,unicode:\"𝒸\"},{tex:/\\\\mathscr\\{D\\}/,unicode:\"𝒟\"},{tex:/\\\\mathscr\\{d\\}/,unicode:\"𝒹\"},{tex:/\\\\mathscr\\{e\\}/,unicode:\"ℯ\"},{tex:/\\\\mathscr\\{E\\}/,unicode:\"ℰ\"},{tex:/\\\\mathscr\\{F\\}/,unicode:\"ℱ\"},{tex:/\\\\mathscr\\{f\\}/,unicode:\"𝒻\"},{tex:/\\\\mathscr\\{g\\}/,unicode:\"ℊ\"},{tex:/\\\\mathscr\\{G\\}/,unicode:\"𝒢\"},{tex:/\\\\mathscr\\{H\\}/,unicode:\"ℋ\"},{tex:/\\\\mathscr\\{h\\}/,unicode:\"𝒽\"},{tex:/\\\\mathscr\\{I\\}/,unicode:\"ℐ\"},{tex:/\\\\mathscr\\{i\\}/,unicode:\"𝒾\"},{tex:/\\\\mathscr\\{J\\}/,unicode:\"𝒥\"},{tex:/\\\\mathscr\\{j\\}/,unicode:\"𝒿\"},{tex:/\\\\mathscr\\{K\\}/,unicode:\"𝒦\"},{tex:/\\\\mathscr\\{k\\}/,unicode:\"𝓀\"},{tex:/\\\\mathscr\\{L\\}/,unicode:\"ℒ\"},{tex:/\\\\mathscr\\{l\\}/,unicode:\"ℓ\"},{tex:/\\\\mathscr\\{M\\}/,unicode:\"ℳ\"},{tex:/\\\\mathscr\\{m\\}/,unicode:\"𝓂\"},{tex:/\\\\mathscr\\{N\\}/,unicode:\"𝒩\"},{tex:/\\\\mathscr\\{n\\}/,unicode:\"𝓃\"},{tex:/\\\\mathscr\\{o\\}/,unicode:\"ℴ\"},{tex:/\\\\mathscr\\{O\\}/,unicode:\"𝒪\"},{tex:/\\\\mathscr\\{P\\}/,unicode:\"𝒫\"},{tex:/\\\\mathscr\\{p\\}/,unicode:\"𝓅\"},{tex:/\\\\mathscr\\{Q\\}/,unicode:\"𝒬\"},{tex:/\\\\mathscr\\{q\\}/,unicode:\"𝓆\"},{tex:/\\\\mathscr\\{R\\}/,unicode:\"ℛ\"},{tex:/\\\\mathscr\\{r\\}/,unicode:\"𝓇\"},{tex:/\\\\mathscr\\{S\\}/,unicode:\"𝒮\"},{tex:/\\\\mathscr\\{s\\}/,unicode:\"𝓈\"},{tex:/\\\\mathscr\\{T\\}/,unicode:\"𝒯\"},{tex:/\\\\mathscr\\{t\\}/,unicode:\"𝓉\"},{tex:/\\\\mathscr\\{U\\}/,unicode:\"𝒰\"},{tex:/\\\\mathscr\\{u\\}/,unicode:\"𝓊\"},{tex:/\\\\mathscr\\{V\\}/,unicode:\"𝒱\"},{tex:/\\\\mathscr\\{v\\}/,unicode:\"𝓋\"},{tex:/\\\\mathscr\\{W\\}/,unicode:\"𝒲\"},{tex:/\\\\mathscr\\{w\\}/,unicode:\"𝓌\"},{tex:/\\\\mathscr\\{X\\}/,unicode:\"𝒳\"},{tex:/\\\\mathscr\\{x\\}/,unicode:\"𝓍\"},{tex:/\\\\mathscr\\{Y\\}/,unicode:\"𝒴\"},{tex:/\\\\mathscr\\{y\\}/,unicode:\"𝓎\"},{tex:/\\\\mathscr\\{Z\\}/,unicode:\"𝒵\"},{tex:/\\\\mathscr\\{z\\}/,unicode:\"𝓏\"},{tex:/\\\\mathmit\\{A\\}/,unicode:\"𝓐\"},{tex:/\\\\mathmit\\{a\\}/,unicode:\"𝓪\"},{tex:/\\\\mathmit\\{B\\}/,unicode:\"𝓑\"},{tex:/\\\\mathmit\\{b\\}/,unicode:\"𝓫\"},{tex:/\\\\mathmit\\{C\\}/,unicode:\"𝓒\"},{tex:/\\\\mathmit\\{c\\}/,unicode:\"𝓬\"},{tex:/\\\\mathmit\\{D\\}/,unicode:\"𝓓\"},{tex:/\\\\mathmit\\{d\\}/,unicode:\"𝓭\"},{tex:/\\\\mathmit\\{E\\}/,unicode:\"𝓔\"},{tex:/\\\\mathmit\\{e\\}/,unicode:\"𝓮\"},{tex:/\\\\mathmit\\{F\\}/,unicode:\"𝓕\"},{tex:/\\\\mathmit\\{f\\}/,unicode:\"𝓯\"},{tex:/\\\\mathmit\\{G\\}/,unicode:\"𝓖\"},{tex:/\\\\mathmit\\{g\\}/,unicode:\"𝓰\"},{tex:/\\\\mathmit\\{H\\}/,unicode:\"𝓗\"},{tex:/\\\\mathmit\\{h\\}/,unicode:\"𝓱\"},{tex:/\\\\mathmit\\{I\\}/,unicode:\"𝓘\"},{tex:/\\\\mathmit\\{i\\}/,unicode:\"𝓲\"},{tex:/\\\\mathmit\\{J\\}/,unicode:\"𝓙\"},{tex:/\\\\mathmit\\{j\\}/,unicode:\"𝓳\"},{tex:/\\\\mathmit\\{K\\}/,unicode:\"𝓚\"},{tex:/\\\\mathmit\\{k\\}/,unicode:\"𝓴\"},{tex:/\\\\mathmit\\{L\\}/,unicode:\"𝓛\"},{tex:/\\\\mathmit\\{l\\}/,unicode:\"𝓵\"},{tex:/\\\\mathmit\\{M\\}/,unicode:\"𝓜\"},{tex:/\\\\mathmit\\{m\\}/,unicode:\"𝓶\"},{tex:/\\\\mathmit\\{N\\}/,unicode:\"𝓝\"},{tex:/\\\\mathmit\\{n\\}/,unicode:\"𝓷\"},{tex:/\\\\mathmit\\{O\\}/,unicode:\"𝓞\"},{tex:/\\\\mathmit\\{o\\}/,unicode:\"𝓸\"},{tex:/\\\\mathmit\\{P\\}/,unicode:\"𝓟\"},{tex:/\\\\mathmit\\{p\\}/,unicode:\"𝓹\"},{tex:/\\\\mathmit\\{Q\\}/,unicode:\"𝓠\"},{tex:/\\\\mathmit\\{q\\}/,unicode:\"𝓺\"},{tex:/\\\\mathmit\\{R\\}/,unicode:\"𝓡\"},{tex:/\\\\mathmit\\{r\\}/,unicode:\"𝓻\"},{tex:/\\\\mathmit\\{S\\}/,unicode:\"𝓢\"},{tex:/\\\\mathmit\\{s\\}/,unicode:\"𝓼\"},{tex:/\\\\mathmit\\{T\\}/,unicode:\"𝓣\"},{tex:/\\\\mathmit\\{t\\}/,unicode:\"𝓽\"},{tex:/\\\\mathmit\\{U\\}/,unicode:\"𝓤\"},{tex:/\\\\mathmit\\{u\\}/,unicode:\"𝓾\"},{tex:/\\\\mathmit\\{V\\}/,unicode:\"𝓥\"},{tex:/\\\\mathmit\\{v\\}/,unicode:\"𝓿\"},{tex:/\\\\mathmit\\{W\\}/,unicode:\"𝓦\"},{tex:/\\\\mathmit\\{w\\}/,unicode:\"𝔀\"},{tex:/\\\\mathmit\\{X\\}/,unicode:\"𝓧\"},{tex:/\\\\mathmit\\{x\\}/,unicode:\"𝔁\"},{tex:/\\\\mathmit\\{Y\\}/,unicode:\"𝓨\"},{tex:/\\\\mathmit\\{y\\}/,unicode:\"𝔂\"},{tex:/\\\\mathmit\\{Z\\}/,unicode:\"𝓩\"},{tex:/\\\\mathmit\\{z\\}/,unicode:\"𝔃\"},{tex:/\\\\mathtt\\{0\\}/,unicode:\"𝟶\"},{tex:/\\\\mathtt\\{1\\}/,unicode:\"𝟷\"},{tex:/\\\\mathtt\\{2\\}/,unicode:\"𝟸\"},{tex:/\\\\mathtt\\{3\\}/,unicode:\"𝟹\"},{tex:/\\\\mathtt\\{4\\}/,unicode:\"𝟺\"},{tex:/\\\\mathtt\\{5\\}/,unicode:\"𝟻\"},{tex:/\\\\mathtt\\{6\\}/,unicode:\"𝟼\"},{tex:/\\\\mathtt\\{7\\}/,unicode:\"𝟽\"},{tex:/\\\\mathtt\\{8\\}/,unicode:\"𝟾\"},{tex:/\\\\mathtt\\{9\\}/,unicode:\"𝟿\"},{tex:/\\\\mathtt\\{A\\}/,unicode:\"𝙰\"},{tex:/\\\\mathtt\\{a\\}/,unicode:\"𝚊\"},{tex:/\\\\mathtt\\{B\\}/,unicode:\"𝙱\"},{tex:/\\\\mathtt\\{b\\}/,unicode:\"𝚋\"},{tex:/\\\\mathtt\\{C\\}/,unicode:\"𝙲\"},{tex:/\\\\mathtt\\{c\\}/,unicode:\"𝚌\"},{tex:/\\\\mathtt\\{D\\}/,unicode:\"𝙳\"},{tex:/\\\\mathtt\\{d\\}/,unicode:\"𝚍\"},{tex:/\\\\mathtt\\{E\\}/,unicode:\"𝙴\"},{tex:/\\\\mathtt\\{e\\}/,unicode:\"𝚎\"},{tex:/\\\\mathtt\\{F\\}/,unicode:\"𝙵\"},{tex:/\\\\mathtt\\{f\\}/,unicode:\"𝚏\"},{tex:/\\\\mathtt\\{G\\}/,unicode:\"𝙶\"},{tex:/\\\\mathtt\\{g\\}/,unicode:\"𝚐\"},{tex:/\\\\mathtt\\{H\\}/,unicode:\"𝙷\"},{tex:/\\\\mathtt\\{h\\}/,unicode:\"𝚑\"},{tex:/\\\\mathtt\\{I\\}/,unicode:\"𝙸\"},{tex:/\\\\mathtt\\{i\\}/,unicode:\"𝚒\"},{tex:/\\\\mathtt\\{J\\}/,unicode:\"𝙹\"},{tex:/\\\\mathtt\\{j\\}/,unicode:\"𝚓\"},{tex:/\\\\mathtt\\{K\\}/,unicode:\"𝙺\"},{tex:/\\\\mathtt\\{k\\}/,unicode:\"𝚔\"},{tex:/\\\\mathtt\\{L\\}/,unicode:\"𝙻\"},{tex:/\\\\mathtt\\{l\\}/,unicode:\"𝚕\"},{tex:/\\\\mathtt\\{M\\}/,unicode:\"𝙼\"},{tex:/\\\\mathtt\\{m\\}/,unicode:\"𝚖\"},{tex:/\\\\mathtt\\{N\\}/,unicode:\"𝙽\"},{tex:/\\\\mathtt\\{n\\}/,unicode:\"𝚗\"},{tex:/\\\\mathtt\\{O\\}/,unicode:\"𝙾\"},{tex:/\\\\mathtt\\{o\\}/,unicode:\"𝚘\"},{tex:/\\\\mathtt\\{P\\}/,unicode:\"𝙿\"},{tex:/\\\\mathtt\\{p\\}/,unicode:\"𝚙\"},{tex:/\\\\mathtt\\{Q\\}/,unicode:\"𝚀\"},{tex:/\\\\mathtt\\{q\\}/,unicode:\"𝚚\"},{tex:/\\\\mathtt\\{R\\}/,unicode:\"𝚁\"},{tex:/\\\\mathtt\\{r\\}/,unicode:\"𝚛\"},{tex:/\\\\mathtt\\{S\\}/,unicode:\"𝚂\"},{tex:/\\\\mathtt\\{s\\}/,unicode:\"𝚜\"},{tex:/\\\\mathtt\\{T\\}/,unicode:\"𝚃\"},{tex:/\\\\mathtt\\{t\\}/,unicode:\"𝚝\"},{tex:/\\\\mathtt\\{U\\}/,unicode:\"𝚄\"},{tex:/\\\\mathtt\\{u\\}/,unicode:\"𝚞\"},{tex:/\\\\mathtt\\{V\\}/,unicode:\"𝚅\"},{tex:/\\\\mathtt\\{v\\}/,unicode:\"𝚟\"},{tex:/\\\\mathtt\\{W\\}/,unicode:\"𝚆\"},{tex:/\\\\mathtt\\{w\\}/,unicode:\"𝚠\"},{tex:/\\\\mathtt\\{X\\}/,unicode:\"𝚇\"},{tex:/\\\\mathtt\\{x\\}/,unicode:\"𝚡\"},{tex:/\\\\mathtt\\{Y\\}/,unicode:\"𝚈\"},{tex:/\\\\mathtt\\{y\\}/,unicode:\"𝚢\"},{tex:/\\\\mathtt\\{Z\\}/,unicode:\"𝚉\"},{tex:/\\\\mathtt\\{z\\}/,unicode:\"𝚣\"},{tex:/\\\\mathsf\\{0\\}/,unicode:\"𝟢\"},{tex:/\\\\mathsf\\{1\\}/,unicode:\"𝟣\"},{tex:/\\\\mathsf\\{2\\}/,unicode:\"𝟤\"},{tex:/\\\\mathsf\\{3\\}/,unicode:\"𝟥\"},{tex:/\\\\mathsf\\{4\\}/,unicode:\"𝟦\"},{tex:/\\\\mathsf\\{5\\}/,unicode:\"𝟧\"},{tex:/\\\\mathsf\\{6\\}/,unicode:\"𝟨\"},{tex:/\\\\mathsf\\{7\\}/,unicode:\"𝟩\"},{tex:/\\\\mathsf\\{8\\}/,unicode:\"𝟪\"},{tex:/\\\\mathsf\\{9\\}/,unicode:\"𝟫\"},{tex:/\\\\mathsf\\{A\\}/,unicode:\"𝖠\"},{tex:/\\\\mathsf\\{a\\}/,unicode:\"𝖺\"},{tex:/\\\\mathsf\\{B\\}/,unicode:\"𝖡\"},{tex:/\\\\mathsf\\{b\\}/,unicode:\"𝖻\"},{tex:/\\\\mathsf\\{C\\}/,unicode:\"𝖢\"},{tex:/\\\\mathsf\\{c\\}/,unicode:\"𝖼\"},{tex:/\\\\mathsf\\{D\\}/,unicode:\"𝖣\"},{tex:/\\\\mathsf\\{d\\}/,unicode:\"𝖽\"},{tex:/\\\\mathsf\\{E\\}/,unicode:\"𝖤\"},{tex:/\\\\mathsf\\{e\\}/,unicode:\"𝖾\"},{tex:/\\\\mathsf\\{F\\}/,unicode:\"𝖥\"},{tex:/\\\\mathsf\\{f\\}/,unicode:\"𝖿\"},{tex:/\\\\mathsf\\{G\\}/,unicode:\"𝖦\"},{tex:/\\\\mathsf\\{g\\}/,unicode:\"𝗀\"},{tex:/\\\\mathsf\\{H\\}/,unicode:\"𝖧\"},{tex:/\\\\mathsf\\{h\\}/,unicode:\"𝗁\"},{tex:/\\\\mathsf\\{I\\}/,unicode:\"𝖨\"},{tex:/\\\\mathsf\\{i\\}/,unicode:\"𝗂\"},{tex:/\\\\mathsf\\{J\\}/,unicode:\"𝖩\"},{tex:/\\\\mathsf\\{j\\}/,unicode:\"𝗃\"},{tex:/\\\\mathsf\\{K\\}/,unicode:\"𝖪\"},{tex:/\\\\mathsf\\{k\\}/,unicode:\"𝗄\"},{tex:/\\\\mathsf\\{L\\}/,unicode:\"𝖫\"},{tex:/\\\\mathsf\\{l\\}/,unicode:\"𝗅\"},{tex:/\\\\mathsf\\{M\\}/,unicode:\"𝖬\"},{tex:/\\\\mathsf\\{m\\}/,unicode:\"𝗆\"},{tex:/\\\\mathsf\\{N\\}/,unicode:\"𝖭\"},{tex:/\\\\mathsf\\{n\\}/,unicode:\"𝗇\"},{tex:/\\\\mathsf\\{O\\}/,unicode:\"𝖮\"},{tex:/\\\\mathsf\\{o\\}/,unicode:\"𝗈\"},{tex:/\\\\mathsf\\{P\\}/,unicode:\"𝖯\"},{tex:/\\\\mathsf\\{p\\}/,unicode:\"𝗉\"},{tex:/\\\\mathsf\\{Q\\}/,unicode:\"𝖰\"},{tex:/\\\\mathsf\\{q\\}/,unicode:\"𝗊\"},{tex:/\\\\mathsf\\{R\\}/,unicode:\"𝖱\"},{tex:/\\\\mathsf\\{r\\}/,unicode:\"𝗋\"},{tex:/\\\\mathsf\\{S\\}/,unicode:\"𝖲\"},{tex:/\\\\mathsf\\{s\\}/,unicode:\"𝗌\"},{tex:/\\\\mathsf\\{T\\}/,unicode:\"𝖳\"},{tex:/\\\\mathsf\\{t\\}/,unicode:\"𝗍\"},{tex:/\\\\mathsf\\{U\\}/,unicode:\"𝖴\"},{tex:/\\\\mathsf\\{u\\}/,unicode:\"𝗎\"},{tex:/\\\\mathsf\\{V\\}/,unicode:\"𝖵\"},{tex:/\\\\mathsf\\{v\\}/,unicode:\"𝗏\"},{tex:/\\\\mathsf\\{W\\}/,unicode:\"𝖶\"},{tex:/\\\\mathsf\\{w\\}/,unicode:\"𝗐\"},{tex:/\\\\mathsf\\{X\\}/,unicode:\"𝖷\"},{tex:/\\\\mathsf\\{x\\}/,unicode:\"𝗑\"},{tex:/\\\\mathsf\\{Y\\}/,unicode:\"𝖸\"},{tex:/\\\\mathsf\\{y\\}/,unicode:\"𝗒\"},{tex:/\\\\mathsf\\{Z\\}/,unicode:\"𝖹\"},{tex:/\\\\mathsf\\{z\\}/,unicode:\"𝗓\"},{tex:/\\\\mathchar\"2208/,unicode:\"⌖\"},{tex:/\\\\cyrchar\\\\C/,unicode:\"̏\"},{tex:/\\\\cyrchar\\\\CYRABHCHDSC/,unicode:\"Ҿ\"},{tex:/\\\\cyrchar\\\\cyrabhchdsc/,unicode:\"ҿ\"},{tex:/\\\\cyrchar\\\\CYRABHCH/,unicode:\"Ҽ\"},{tex:/\\\\cyrchar\\\\cyrabhch/,unicode:\"ҽ\"},{tex:/\\\\cyrchar\\\\CYRABHDZE/,unicode:\"Ӡ\"},{tex:/\\\\cyrchar\\\\cyrabhdze/,unicode:\"ӡ\"},{tex:/\\\\cyrchar\\\\CYRABHHA/,unicode:\"Ҩ\"},{tex:/\\\\cyrchar\\\\cyrabhha/,unicode:\"ҩ\"},{tex:/\\\\cyrchar\\\\CYRAE/,unicode:\"Ӕ\"},{tex:/\\\\cyrchar\\\\cyrae/,unicode:\"ӕ\"},{tex:/\\\\cyrchar\\\\CYRA/,unicode:\"А\"},{tex:/\\\\cyrchar\\\\cyra/,unicode:\"а\"},{tex:/\\\\cyrchar\\\\CYRB/,unicode:\"Б\"},{tex:/\\\\cyrchar\\\\cyrb/,unicode:\"б\"},{tex:/\\\\cyrchar\\\\CYRBYUS/,unicode:\"Ѫ\"},{tex:/\\\\cyrchar\\\\CYRCHLDSC/,unicode:\"Ӌ\"},{tex:/\\\\cyrchar\\\\cyrchldsc/,unicode:\"ӌ\"},{tex:/\\\\cyrchar\\\\CYRCHRDSC/,unicode:\"Ҷ\"},{tex:/\\\\cyrchar\\\\cyrchrdsc/,unicode:\"ҷ\"},{tex:/\\\\cyrchar\\\\CYRCH/,unicode:\"Ч\"},{tex:/\\\\cyrchar\\\\cyrch/,unicode:\"ч\"},{tex:/\\\\cyrchar\\\\CYRCHVCRS/,unicode:\"Ҹ\"},{tex:/\\\\cyrchar\\\\cyrchvcrs/,unicode:\"ҹ\"},{tex:/\\\\cyrchar\\\\CYRC/,unicode:\"Ц\"},{tex:/\\\\cyrchar\\\\cyrc/,unicode:\"ц\"},{tex:/\\\\cyrchar\\\\CYRDJE/,unicode:\"Ђ\"},{tex:/\\\\cyrchar\\\\cyrdje/,unicode:\"ђ\"},{tex:/\\\\cyrchar\\\\CYRD/,unicode:\"Д\"},{tex:/\\\\cyrchar\\\\cyrd/,unicode:\"д\"},{tex:/\\\\cyrchar\\\\CYRDZE/,unicode:\"Ѕ\"},{tex:/\\\\cyrchar\\\\cyrdze/,unicode:\"ѕ\"},{tex:/\\\\cyrchar\\\\CYRDZHE/,unicode:\"Џ\"},{tex:/\\\\cyrchar\\\\cyrdzhe/,unicode:\"џ\"},{tex:/\\\\cyrchar\\\\CYREREV/,unicode:\"Э\"},{tex:/\\\\cyrchar\\\\cyrerev/,unicode:\"э\"},{tex:/\\\\cyrchar\\\\CYRERY/,unicode:\"Ы\"},{tex:/\\\\cyrchar\\\\cyrery/,unicode:\"ы\"},{tex:/\\\\cyrchar\\\\CYRE/,unicode:\"Е\"},{tex:/\\\\cyrchar\\\\cyre/,unicode:\"е\"},{tex:/\\\\cyrchar\\\\CYRFITA/,unicode:\"Ѳ\"},{tex:/\\\\cyrchar\\\\CYRF/,unicode:\"Ф\"},{tex:/\\\\cyrchar\\\\cyrf/,unicode:\"ф\"},{tex:/\\\\cyrchar\\\\CYRGHCRS/,unicode:\"Ғ\"},{tex:/\\\\cyrchar\\\\cyrghcrs/,unicode:\"ғ\"},{tex:/\\\\cyrchar\\\\CYRGHK/,unicode:\"Ҕ\"},{tex:/\\\\cyrchar\\\\cyrghk/,unicode:\"ҕ\"},{tex:/\\\\cyrchar\\{\\\\'\\\\CYRG\\}/,unicode:\"Ѓ\"},{tex:/\\\\cyrchar\\\\CYRG/,unicode:\"Г\"},{tex:/\\\\cyrchar\\\\cyrg/,unicode:\"г\"},{tex:/\\\\cyrchar\\{\\\\'\\\\cyrg\\}/,unicode:\"ѓ\"},{tex:/\\\\cyrchar\\\\CYRGUP/,unicode:\"Ґ\"},{tex:/\\\\cyrchar\\\\cyrgup/,unicode:\"ґ\"},{tex:/\\\\cyrchar\\\\CYRHDSC/,unicode:\"Ҳ\"},{tex:/\\\\cyrchar\\\\cyrhdsc/,unicode:\"ҳ\"},{tex:/\\\\cyrchar\\\\CYRHRDSN/,unicode:\"Ъ\"},{tex:/\\\\cyrchar\\\\cyrhrdsn/,unicode:\"ъ\"},{tex:/\\\\cyrchar\\\\cyrhundredthousands/,unicode:\"҈\"},{tex:/\\\\cyrchar\\\\CYRH/,unicode:\"Х\"},{tex:/\\\\cyrchar\\\\cyrh/,unicode:\"х\"},{tex:/\\\\cyrchar\\\\CYRIE/,unicode:\"Є\"},{tex:/\\\\cyrchar\\\\cyrie/,unicode:\"є\"},{tex:/\\\\cyrchar\\\\CYRII/,unicode:\"І\"},{tex:/\\\\cyrchar\\\\cyrii/,unicode:\"і\"},{tex:/\\\\cyrchar\\\\CYRIOTBYUS/,unicode:\"Ѭ\"},{tex:/\\\\cyrchar\\\\cyriotbyus/,unicode:\"ѭ\"},{tex:/\\\\cyrchar\\\\CYRIOTE/,unicode:\"Ѥ\"},{tex:/\\\\cyrchar\\\\cyriote/,unicode:\"ѥ\"},{tex:/\\\\cyrchar\\\\CYRIOTLYUS/,unicode:\"Ѩ\"},{tex:/\\\\cyrchar\\\\cyriotlyus/,unicode:\"ѩ\"},{tex:/\\\\cyrchar\\\\CYRISHRT/,unicode:\"Й\"},{tex:/\\\\cyrchar\\\\cyrishrt/,unicode:\"й\"},{tex:/\\\\cyrchar\\\\CYRI/,unicode:\"И\"},{tex:/\\\\cyrchar\\\\cyri/,unicode:\"и\"},{tex:/\\\\cyrchar\\\\CYRIZH/,unicode:\"Ѵ\"},{tex:/\\\\cyrchar\\\\CYRJE/,unicode:\"Ј\"},{tex:/\\\\cyrchar\\\\cyrje/,unicode:\"ј\"},{tex:/\\\\cyrchar\\\\CYRKBEAK/,unicode:\"Ҡ\"},{tex:/\\\\cyrchar\\\\cyrkbeak/,unicode:\"ҡ\"},{tex:/\\\\cyrchar\\\\CYRKDSC/,unicode:\"Қ\"},{tex:/\\\\cyrchar\\\\cyrkdsc/,unicode:\"қ\"},{tex:/\\\\cyrchar\\\\CYRKHCRS/,unicode:\"Ҟ\"},{tex:/\\\\cyrchar\\\\cyrkhcrs/,unicode:\"ҟ\"},{tex:/\\\\cyrchar\\\\CYRKHK/,unicode:\"Ӄ\"},{tex:/\\\\cyrchar\\\\cyrkhk/,unicode:\"ӄ\"},{tex:/\\\\cyrchar\\\\CYRKOPPA/,unicode:\"Ҁ\"},{tex:/\\\\cyrchar\\\\cyrkoppa/,unicode:\"ҁ\"},{tex:/\\\\cyrchar\\\\CYRKSI/,unicode:\"Ѯ\"},{tex:/\\\\cyrchar\\\\cyrksi/,unicode:\"ѯ\"},{tex:/\\\\cyrchar\\{\\\\'\\\\CYRK\\}/,unicode:\"Ќ\"},{tex:/\\\\cyrchar\\\\CYRK/,unicode:\"К\"},{tex:/\\\\cyrchar\\\\cyrk/,unicode:\"к\"},{tex:/\\\\cyrchar\\{\\\\'\\\\cyrk\\}/,unicode:\"ќ\"},{tex:/\\\\cyrchar\\\\CYRKVCRS/,unicode:\"Ҝ\"},{tex:/\\\\cyrchar\\\\cyrkvcrs/,unicode:\"ҝ\"},{tex:/\\\\cyrchar\\\\CYRLJE/,unicode:\"Љ\"},{tex:/\\\\cyrchar\\\\cyrlje/,unicode:\"љ\"},{tex:/\\\\cyrchar\\\\CYRL/,unicode:\"Л\"},{tex:/\\\\cyrchar\\\\cyrl/,unicode:\"л\"},{tex:/\\\\cyrchar\\\\CYRLYUS/,unicode:\"Ѧ\"},{tex:/\\\\cyrchar\\\\cyrlyus/,unicode:\"ѧ\"},{tex:/\\\\cyrchar\\\\cyrmillions/,unicode:\"҉\"},{tex:/\\\\cyrchar\\\\CYRM/,unicode:\"М\"},{tex:/\\\\cyrchar\\\\cyrm/,unicode:\"м\"},{tex:/\\\\cyrchar\\\\CYRNDSC/,unicode:\"Ң\"},{tex:/\\\\cyrchar\\\\cyrndsc/,unicode:\"ң\"},{tex:/\\\\cyrchar\\\\CYRNG/,unicode:\"Ҥ\"},{tex:/\\\\cyrchar\\\\cyrng/,unicode:\"ҥ\"},{tex:/\\\\cyrchar\\\\CYRNHK/,unicode:\"Ӈ\"},{tex:/\\\\cyrchar\\\\cyrnhk/,unicode:\"ӈ\"},{tex:/\\\\cyrchar\\\\CYRNJE/,unicode:\"Њ\"},{tex:/\\\\cyrchar\\\\cyrnje/,unicode:\"њ\"},{tex:/\\\\cyrchar\\\\CYRN/,unicode:\"Н\"},{tex:/\\\\cyrchar\\\\cyrn/,unicode:\"н\"},{tex:/\\\\cyrchar\\\\CYROMEGARND/,unicode:\"Ѻ\"},{tex:/\\\\cyrchar\\\\cyromegarnd/,unicode:\"ѻ\"},{tex:/\\\\cyrchar\\\\CYROMEGATITLO/,unicode:\"Ѽ\"},{tex:/\\\\cyrchar\\\\cyromegatitlo/,unicode:\"ѽ\"},{tex:/\\\\cyrchar\\\\CYROMEGA/,unicode:\"Ѡ\"},{tex:/\\\\cyrchar\\\\cyromega/,unicode:\"ѡ\"},{tex:/\\\\cyrchar\\\\CYROTLD/,unicode:\"Ө\"},{tex:/\\\\cyrchar\\\\cyrotld/,unicode:\"ө\"},{tex:/\\\\cyrchar\\\\CYROT/,unicode:\"Ѿ\"},{tex:/\\\\cyrchar\\\\cyrot/,unicode:\"ѿ\"},{tex:/\\\\cyrchar\\\\CYRO/,unicode:\"О\"},{tex:/\\\\cyrchar\\\\cyro/,unicode:\"о\"},{tex:/\\\\cyrchar\\\\CYRpalochka/,unicode:\"Ӏ\"},{tex:/\\\\cyrchar\\\\CYRPHK/,unicode:\"Ҧ\"},{tex:/\\\\cyrchar\\\\cyrphk/,unicode:\"ҧ\"},{tex:/\\\\cyrchar\\\\CYRPSI/,unicode:\"Ѱ\"},{tex:/\\\\cyrchar\\\\cyrpsi/,unicode:\"ѱ\"},{tex:/\\\\cyrchar\\\\CYRP/,unicode:\"П\"},{tex:/\\\\cyrchar\\\\cyrp/,unicode:\"п\"},{tex:/\\\\cyrchar\\\\CYRRTICK/,unicode:\"Ҏ\"},{tex:/\\\\cyrchar\\\\cyrrtick/,unicode:\"ҏ\"},{tex:/\\\\cyrchar\\\\CYRR/,unicode:\"Р\"},{tex:/\\\\cyrchar\\\\cyrr/,unicode:\"р\"},{tex:/\\\\cyrchar\\\\CYRSCHWA/,unicode:\"Ә\"},{tex:/\\\\cyrchar\\\\cyrschwa/,unicode:\"ә\"},{tex:/\\\\cyrchar\\\\CYRSDSC/,unicode:\"Ҫ\"},{tex:/\\\\cyrchar\\\\cyrsdsc/,unicode:\"ҫ\"},{tex:/\\\\cyrchar\\\\CYRSEMISFTSN/,unicode:\"Ҍ\"},{tex:/\\\\cyrchar\\\\cyrsemisftsn/,unicode:\"ҍ\"},{tex:/\\\\cyrchar\\\\CYRSFTSN/,unicode:\"Ь\"},{tex:/\\\\cyrchar\\\\cyrsftsn/,unicode:\"ь\"},{tex:/\\\\cyrchar\\\\CYRSHCH/,unicode:\"Щ\"},{tex:/\\\\cyrchar\\\\cyrshch/,unicode:\"щ\"},{tex:/\\\\cyrchar\\\\CYRSHHA/,unicode:\"Һ\"},{tex:/\\\\cyrchar\\\\cyrshha/,unicode:\"һ\"},{tex:/\\\\cyrchar\\\\CYRSH/,unicode:\"Ш\"},{tex:/\\\\cyrchar\\\\cyrsh/,unicode:\"ш\"},{tex:/\\\\cyrchar\\\\CYRS/,unicode:\"С\"},{tex:/\\\\cyrchar\\\\cyrs/,unicode:\"с\"},{tex:/\\\\cyrchar\\\\CYRTDSC/,unicode:\"Ҭ\"},{tex:/\\\\cyrchar\\\\cyrtdsc/,unicode:\"ҭ\"},{tex:/\\\\cyrchar\\\\CYRTETSE/,unicode:\"Ҵ\"},{tex:/\\\\cyrchar\\\\cyrtetse/,unicode:\"ҵ\"},{tex:/\\\\cyrchar\\\\cyrthousands/,unicode:\"҂\"},{tex:/\\\\cyrchar\\\\CYRTSHE/,unicode:\"Ћ\"},{tex:/\\\\cyrchar\\\\cyrtshe/,unicode:\"ћ\"},{tex:/\\\\cyrchar\\\\CYRT/,unicode:\"Т\"},{tex:/\\\\cyrchar\\\\cyrt/,unicode:\"т\"},{tex:/\\\\cyrchar\\\\CYRUK/,unicode:\"Ѹ\"},{tex:/\\\\cyrchar\\\\cyruk/,unicode:\"ѹ\"},{tex:/\\\\cyrchar\\\\CYRUSHRT/,unicode:\"Ў\"},{tex:/\\\\cyrchar\\\\cyrushrt/,unicode:\"ў\"},{tex:/\\\\cyrchar\\\\CYRU/,unicode:\"У\"},{tex:/\\\\cyrchar\\\\cyru/,unicode:\"у\"},{tex:/\\\\cyrchar\\\\CYRV/,unicode:\"В\"},{tex:/\\\\cyrchar\\\\cyrv/,unicode:\"в\"},{tex:/\\\\cyrchar\\\\CYRYAT/,unicode:\"Ѣ\"},{tex:/\\\\cyrchar\\\\CYRYA/,unicode:\"Я\"},{tex:/\\\\cyrchar\\\\cyrya/,unicode:\"я\"},{tex:/\\\\cyrchar\\\\CYRYHCRS/,unicode:\"Ұ\"},{tex:/\\\\cyrchar\\\\cyryhcrs/,unicode:\"ұ\"},{tex:/\\\\cyrchar\\\\CYRYI/,unicode:\"Ї\"},{tex:/\\\\cyrchar\\\\cyryi/,unicode:\"ї\"},{tex:/\\\\cyrchar\\\\CYRYO/,unicode:\"Ё\"},{tex:/\\\\cyrchar\\\\cyryo/,unicode:\"ё\"},{tex:/\\\\cyrchar\\\\CYRY/,unicode:\"Ү\"},{tex:/\\\\cyrchar\\\\cyry/,unicode:\"ү\"},{tex:/\\\\cyrchar\\\\CYRYU/,unicode:\"Ю\"},{tex:/\\\\cyrchar\\\\cyryu/,unicode:\"ю\"},{tex:/\\\\cyrchar\\\\CYRZDSC/,unicode:\"Ҙ\"},{tex:/\\\\cyrchar\\\\cyrzdsc/,unicode:\"ҙ\"},{tex:/\\\\cyrchar\\\\CYRZHDSC/,unicode:\"Җ\"},{tex:/\\\\cyrchar\\\\cyrzhdsc/,unicode:\"җ\"},{tex:/\\\\cyrchar\\\\CYRZH/,unicode:\"Ж\"},{tex:/\\\\cyrchar\\\\cyrzh/,unicode:\"ж\"},{tex:/\\\\cyrchar\\\\CYRZ/,unicode:\"З\"},{tex:/\\\\cyrchar\\\\cyrz/,unicode:\"з\"},{tex:/\\\\cyrchar\\\\textnumero/,unicode:\"№\"},{tex:/\\\\acute\\{\\\\ddot\\{\\\\iota\\}\\}/,unicode:\"ΐ\"},{tex:/\\\\acute\\{\\\\ddot\\{\\\\upsilon\\}\\}/,unicode:\"ΰ\"},{tex:/\\\\acute\\{\\\\epsilon\\}/,unicode:\"έ\"},{tex:/\\\\acute\\{\\\\eta\\}/,unicode:\"ή\"},{tex:/\\\\acute\\{\\\\iota\\}/,unicode:\"ί\"},{tex:/\\\\acute\\{\\\\omega\\}/,unicode:\"ώ\"},{tex:/\\\\acute\\{\\\\upsilon\\}/,unicode:\"ύ\"},{tex:/\\\\AA|\\\\A\\{A\\}/,unicode:\"Å\"},{tex:/\\\\AC|\\\\A\\{C\\}/,unicode:\"∿\"},{tex:/\\\\accurrent/,unicode:\"⏦\"},{tex:/\\\\acidfree/,unicode:\"♾\"},{tex:/\\\\acwgapcirclearrow/,unicode:\"⟲\"},{tex:/\\\\acwleftarcarrow/,unicode:\"⤹\"},{tex:/\\\\acwoverarcarrow/,unicode:\"⤺\"},{tex:/\\\\acwunderarcarrow/,unicode:\"⤻\"},{tex:/\\\\AE|\\\\A\\{E\\}/,unicode:\"Æ\"},{tex:/\\\\allequal/,unicode:\"≌\"},{tex:/\\\\'\\$\\\\alpha\\$/,unicode:\"ά\"},{tex:/\\\\angdnr/,unicode:\"⦟\"},{tex:/\\\\angles/,unicode:\"⦞\"},{tex:/\\\\angleubar/,unicode:\"⦤\"},{tex:/\\\\annuity/,unicode:\"⃧\"},{tex:/\\\\APLboxquestion/,unicode:\"⍰\"},{tex:/\\\\APLboxupcaret/,unicode:\"⍓\"},{tex:/\\\\APLcomment/,unicode:\"⍝\"},{tex:/\\\\APLdownarrowbox/,unicode:\"⍗\"},{tex:/\\\\APLinput/,unicode:\"⍞\"},{tex:/\\\\APLleftarrowbox/,unicode:\"⍇\"},{tex:/\\\\APLrightarrowbox/,unicode:\"⍈\"},{tex:/\\\\APLuparrowbox/,unicode:\"⍐\"},{tex:/\\\\approxeqq/,unicode:\"⩰\"},{tex:/\\\\approxeq/,unicode:\"≊\"},{tex:/\\\\approxnotequal/,unicode:\"≆\"},{tex:/\\\\approx/,unicode:\"≈\"},{tex:/\\\\aquarius/,unicode:\"♒\"},{tex:/\\\\arrowwaveleft|\\\\arrowwaveright/,unicode:\"↜\"},{tex:/\\\\assert/,unicode:\"⊦\"},{tex:/\\\\asteraccent/,unicode:\"⃰\"},{tex:/\\\\backdprime/,unicode:\"‶\"},{tex:/\\\\backepsilon/,unicode:\"϶\"},{tex:/\\\\backprime/,unicode:\"‵\"},{tex:/\\\\backsimeq/,unicode:\"⋍\"},{tex:/\\\\backsim/,unicode:\"∽\"},{tex:/\\\\backtrprime/,unicode:\"‷\"},{tex:/\\\\bagmember/,unicode:\"⋿\"},{tex:/\\\\barcap/,unicode:\"⩃\"},{tex:/\\\\barcup/,unicode:\"⩂\"},{tex:/\\\\barleftarrowrightarrowba/,unicode:\"↹\"},{tex:/\\\\barleftharpoon/,unicode:\"⥫\"},{tex:/\\\\barovernorthwestarrow/,unicode:\"↸\"},{tex:/\\\\barrightarrowdiamond/,unicode:\"⤠\"},{tex:/\\\\barrightharpoon/,unicode:\"⥭\"},{tex:/\\\\barvee/,unicode:\"⊽\"},{tex:/\\\\barwedge/,unicode:\"⊼\"},{tex:/\\\\bbrktbrk/,unicode:\"⎶\"},{tex:/\\\\because/,unicode:\"∵\"},{tex:/\\\\benzenr/,unicode:\"⏣\"},{tex:/\\\\between/,unicode:\"≬\"},{tex:/\\\\bigcap/,unicode:\"⋂\"},{tex:/\\\\bigcirc/,unicode:\"○\"},{tex:/\\\\bigcupdot/,unicode:\"⨃\"},{tex:/\\\\bigcup/,unicode:\"⋃\"},{tex:/\\\\biginterleave/,unicode:\"⫼\"},{tex:/\\\\bigodot/,unicode:\"⨀\"},{tex:/\\\\bigoplus/,unicode:\"⨁\"},{tex:/\\\\bigotimes/,unicode:\"⨂\"},{tex:/\\\\bigslopedvee/,unicode:\"⩗\"},{tex:/\\\\bigslopedwedge/,unicode:\"⩘\"},{tex:/\\\\bigtalloblong/,unicode:\"⫿\"},{tex:/\\\\bigtop/,unicode:\"⟙\"},{tex:/\\\\bigtriangledown/,unicode:\"▽\"},{tex:/\\\\bigtriangleleft/,unicode:\"⨞\"},{tex:/\\\\bigtriangleup/,unicode:\"△\"},{tex:/\\\\biohazard/,unicode:\"☣\"},{tex:/\\\\blackcircledownarrow/,unicode:\"⧭\"},{tex:/\\\\blackcircledrightdot/,unicode:\"⚈\"},{tex:/\\\\blackcircledtwodots/,unicode:\"⚉\"},{tex:/\\\\blackcircleulquadwhite/,unicode:\"◕\"},{tex:/\\\\blackdiamonddownarrow/,unicode:\"⧪\"},{tex:/\\\\blackhourglass/,unicode:\"⧗\"},{tex:/\\\\blackinwhitediamond/,unicode:\"◈\"},{tex:/\\\\blackinwhitesquare/,unicode:\"▣\"},{tex:/\\\\blacklozenge/,unicode:\"⧫\"},{tex:/\\\\blackpointerleft/,unicode:\"◄\"},{tex:/\\\\blackpointerright/,unicode:\"►\"},{tex:/\\\\blacksmiley/,unicode:\"☻\"},{tex:/\\\\blacksquare/,unicode:\"▪\"},{tex:/\\\\blacktriangledown/,unicode:\"▾\"},{tex:/\\\\blacktriangleleft/,unicode:\"◂\"},{tex:/\\\\blacktriangleright/,unicode:\"▸\"},{tex:/\\\\blacktriangle/,unicode:\"▴\"},{tex:/\\\\blkhorzoval/,unicode:\"⬬\"},{tex:/\\\\blkvertoval/,unicode:\"⬮\"},{tex:/\\\\blockfull/,unicode:\"█\"},{tex:/\\\\blockhalfshaded/,unicode:\"▒\"},{tex:/\\\\blocklefthalf/,unicode:\"▌\"},{tex:/\\\\blocklowhalf/,unicode:\"▄\"},{tex:/\\\\blockqtrshaded/,unicode:\"░\"},{tex:/\\\\blockrighthalf/,unicode:\"▐\"},{tex:/\\\\blockthreeqtrshaded/,unicode:\"▓\"},{tex:/\\\\blockuphalf/,unicode:\"▀\"},{tex:/\\\\botsemicircle/,unicode:\"◡\"},{tex:/\\\\boxast/,unicode:\"⧆\"},{tex:/\\\\boxbox/,unicode:\"⧈\"},{tex:/\\\\boxbslash/,unicode:\"⧅\"},{tex:/\\\\boxcircle/,unicode:\"⧇\"},{tex:/\\\\boxdot/,unicode:\"⊡\"},{tex:/\\\\boxminus/,unicode:\"⊟\"},{tex:/\\\\boxonbox/,unicode:\"⧉\"},{tex:/\\\\boxplus/,unicode:\"⊞\"},{tex:/\\\\boxslash/,unicode:\"⧄\"},{tex:/\\\\boxtimes/,unicode:\"⊠\"},{tex:/\\\\bsimilarleftarrow/,unicode:\"⭁\"},{tex:/\\\\bsimilarrightarrow/,unicode:\"⭇\"},{tex:/\\\\bsolhsub/,unicode:\"⟈\"},{tex:/\\\\btimes/,unicode:\"⨲\"},{tex:/\\\\bullet/,unicode:\"∙\"},{tex:/\\\\bullseye/,unicode:\"◎\"},{tex:/\\\\bumpeqq/,unicode:\"⪮\"},{tex:/\\\\candra/,unicode:\"̐\"},{tex:/\\\\capbarcup/,unicode:\"⩉\"},{tex:/\\\\capdot/,unicode:\"⩀\"},{tex:/\\\\CapitalDifferentialD/,unicode:\"ⅅ\"},{tex:/\\\\capovercup/,unicode:\"⩇\"},{tex:/\\\\capricornus/,unicode:\"♑\"},{tex:/\\\\capwedge/,unicode:\"⩄\"},{tex:/\\\\caretinsert/,unicode:\"‸\"},{tex:/\\\\carriagereturn/,unicode:\"↵\"},{tex:/\\\\ccwundercurvearrow/,unicode:\"⤿\"},{tex:/\\\\CheckedBox/,unicode:\"☑\"},{tex:/\\\\circlearrowleft/,unicode:\"↺\"},{tex:/\\\\circlearrowright/,unicode:\"↻\"},{tex:/\\\\circledast/,unicode:\"⊛\"},{tex:/\\\\circledbslash/,unicode:\"⦸\"},{tex:/\\\\circledbullet/,unicode:\"⦿\"},{tex:/\\\\circledcirc/,unicode:\"⊚\"},{tex:/\\\\circleddash/,unicode:\"⊝\"},{tex:/\\\\circledequal/,unicode:\"⊜\"},{tex:/\\\\circledgtr/,unicode:\"⧁\"},{tex:/\\\\circledless/,unicode:\"⧀\"},{tex:/\\\\circledownarrow/,unicode:\"⧬\"},{tex:/\\\\circledparallel/,unicode:\"⦷\"},{tex:/\\\\circledrightdot/,unicode:\"⚆\"},{tex:/\\\\circledS/,unicode:\"Ⓢ\"},{tex:/\\\\circledtwodots/,unicode:\"⚇\"},{tex:/\\\\circledwhitebullet/,unicode:\"⦾\"},{tex:/\\\\circlellquad/,unicode:\"◵\"},{tex:/\\\\circlelrquad/,unicode:\"◶\"},{tex:/\\\\circleonleftarrow/,unicode:\"⬰\"},{tex:/\\\\circleonrightarrow/,unicode:\"⇴\"},{tex:/\\\\circletophalfblack/,unicode:\"◓\"},{tex:/\\\\circleulquad/,unicode:\"◴\"},{tex:/\\\\circleurquadblack/,unicode:\"◔\"},{tex:/\\\\circleurquad/,unicode:\"◷\"},{tex:/\\\\circlevertfill/,unicode:\"◍\"},{tex:/\\^\\\\circ|\\\\textdegree/,unicode:\"°\"},{tex:/\\\\cirmid/,unicode:\"⫯\"},{tex:/\\\\cirscir/,unicode:\"⧂\"},{tex:/\\\\clockoint/,unicode:\"⨏\"},{tex:/\\\\closedvarcap/,unicode:\"⩍\"},{tex:/\\\\closedvarcupsmashprod/,unicode:\"⩐\"},{tex:/\\\\closedvarcup/,unicode:\"⩌\"},{tex:/\\\\closure/,unicode:\"⁐\"},{tex:/\\\\clwintegral/,unicode:\"∱\"},{tex:/\\\\Coloneqq/,unicode:\"⩴\"},{tex:/\\\\commaminus/,unicode:\"⨩\"},{tex:/\\\\complement/,unicode:\"∁\"},{tex:/\\\\ComplexI/,unicode:\"ⅈ\"},{tex:/\\\\ComplexJ/,unicode:\"ⅉ\"},{tex:/\\\\concavediamondtickleft/,unicode:\"⟢\"},{tex:/\\\\concavediamondtickright/,unicode:\"⟣\"},{tex:/\\\\concavediamond/,unicode:\"⟡\"},{tex:/\\\\congdot/,unicode:\"⩭\"},{tex:/\\\\conictaper/,unicode:\"⌲\"},{tex:/\\\\coprod/,unicode:\"∐\"},{tex:/\\\\cupbarcap/,unicode:\"⩈\"},{tex:/\\\\cupdot/,unicode:\"⊍\"},{tex:/\\\\cupleftarrow/,unicode:\"⊌\"},{tex:/\\\\cupovercap/,unicode:\"⩆\"},{tex:/\\\\cupvee/,unicode:\"⩅\"},{tex:/\\\\curlyeqprec/,unicode:\"⋞\"},{tex:/\\\\curlyeqsucc/,unicode:\"⋟\"},{tex:/\\\\curlyvee/,unicode:\"⋎\"},{tex:/\\\\curlywedge/,unicode:\"⋏\"},{tex:/\\\\curvearrowleftplus/,unicode:\"⤽\"},{tex:/\\\\curvearrowleft/,unicode:\"↶\"},{tex:/\\\\curvearrowrightminus/,unicode:\"⤼\"},{tex:/\\\\curvearrowright/,unicode:\"↷\"},{tex:/\\\\cwgapcirclearrow/,unicode:\"⟳\"},{tex:/\\\\cwrightarcarrow/,unicode:\"⤸\"},{tex:/\\\\cwundercurvearrow/,unicode:\"⤾\"},{tex:/\\\\dashleftarrow/,unicode:\"⇠\"},{tex:/\\\\dashrightarrow/,unicode:\"⇢\"},{tex:/\\\\DashVDash/,unicode:\"⟚\"},{tex:/\\\\dashVdash/,unicode:\"⟛\"},{tex:/\\\\dbkarow/,unicode:\"⤏\"},{tex:/\\\\dblarrowupdown/,unicode:\"⇅\"},{tex:/\\\\ddot\\{\\\\iota\\}/,unicode:\"ϊ\"},{tex:/\\\\ddotseq/,unicode:\"⩷\"},{tex:/\\\\ddot\\{\\\\upsilon\\}/,unicode:\"ϋ\"},{tex:/\\\\DDownarrow/,unicode:\"⟱\"},{tex:/\\\\Ddownarrow/,unicode:\"⤋\"},{tex:/\\\\DH|\\\\D\\{H\\}/,unicode:\"Ð\"},{tex:/\\\\diameter/,unicode:\"⌀\"},{tex:/\\\\diamondbotblack/,unicode:\"⬙\"},{tex:/\\\\Diamonddot/,unicode:\"⟐\"},{tex:/\\\\diamondleftarrowbar/,unicode:\"⤟\"},{tex:/\\\\diamondleftarrow/,unicode:\"⤝\"},{tex:/\\\\diamondleftblack/,unicode:\"⬖\"},{tex:/\\\\diamondrightblack/,unicode:\"⬗\"},{tex:/\\\\diamondtopblack/,unicode:\"⬘\"},{tex:/\\\\diamond/,unicode:\"⋄\"},{tex:/\\\\Diamond/,unicode:\"◇\"},{tex:/\\\\diceiii/,unicode:\"⚂\"},{tex:/\\\\DifferentialD/,unicode:\"ⅆ\"},{tex:/\\\\Digamma/,unicode:\"Ϝ\"},{tex:/\\\\digamma/,unicode:\"ϝ\"},{tex:/\\\\ding\\{100\\}/,unicode:\"❄\"},{tex:/\\\\ding\\{101\\}/,unicode:\"❅\"},{tex:/\\\\ding\\{102\\}/,unicode:\"❆\"},{tex:/\\\\ding\\{103\\}/,unicode:\"❇\"},{tex:/\\\\ding\\{104\\}/,unicode:\"❈\"},{tex:/\\\\ding\\{105\\}/,unicode:\"❉\"},{tex:/\\\\ding\\{106\\}/,unicode:\"❊\"},{tex:/\\\\ding\\{107\\}/,unicode:\"❋\"},{tex:/\\\\ding\\{108\\}/,unicode:\"●\"},{tex:/\\\\ding\\{109\\}/,unicode:\"❍\"},{tex:/\\\\ding\\{110\\}/,unicode:\"■\"},{tex:/\\\\ding\\{111\\}/,unicode:\"❏\"},{tex:/\\\\ding\\{112\\}/,unicode:\"❐\"},{tex:/\\\\ding\\{113\\}/,unicode:\"❑\"},{tex:/\\\\ding\\{114\\}/,unicode:\"❒\"},{tex:/\\\\ding\\{115\\}/,unicode:\"▲\"},{tex:/\\\\ding\\{116\\}/,unicode:\"▼\"},{tex:/\\\\ding\\{117\\}/,unicode:\"◆\"},{tex:/\\\\ding\\{118\\}/,unicode:\"❖\"},{tex:/\\\\ding\\{119\\}/,unicode:\"◗\"},{tex:/\\\\ding\\{120\\}/,unicode:\"❘\"},{tex:/\\\\ding\\{121\\}/,unicode:\"❙\"},{tex:/\\\\ding\\{122\\}/,unicode:\"❚\"},{tex:/\\\\ding\\{123\\}/,unicode:\"❛\"},{tex:/\\\\ding\\{124\\}/,unicode:\"❜\"},{tex:/\\\\ding\\{125\\}/,unicode:\"❝\"},{tex:/\\\\ding\\{126\\}/,unicode:\"❞\"},{tex:/\\\\ding\\{161\\}/,unicode:\"❡\"},{tex:/\\\\ding\\{162\\}/,unicode:\"❢\"},{tex:/\\\\ding\\{163\\}/,unicode:\"❣\"},{tex:/\\\\ding\\{164\\}/,unicode:\"❤\"},{tex:/\\\\ding\\{165\\}/,unicode:\"❥\"},{tex:/\\\\ding\\{166\\}/,unicode:\"❦\"},{tex:/\\\\ding\\{167\\}/,unicode:\"❧\"},{tex:/\\\\ding\\{168\\}/,unicode:\"♣\"},{tex:/\\\\ding\\{169\\}/,unicode:\"♦\"},{tex:/\\\\ding\\{170\\}/,unicode:\"♥\"},{tex:/\\\\ding\\{171\\}/,unicode:\"♠\"},{tex:/\\\\ding\\{172\\}/,unicode:\"①\"},{tex:/\\\\ding\\{173\\}/,unicode:\"②\"},{tex:/\\\\ding\\{174\\}/,unicode:\"③\"},{tex:/\\\\ding\\{175\\}/,unicode:\"④\"},{tex:/\\\\ding\\{176\\}/,unicode:\"⑤\"},{tex:/\\\\ding\\{177\\}/,unicode:\"⑥\"},{tex:/\\\\ding\\{178\\}/,unicode:\"⑦\"},{tex:/\\\\ding\\{179\\}/,unicode:\"⑧\"},{tex:/\\\\ding\\{180\\}/,unicode:\"⑨\"},{tex:/\\\\ding\\{181\\}/,unicode:\"⑩\"},{tex:/\\\\ding\\{182\\}/,unicode:\"❶\"},{tex:/\\\\ding\\{183\\}/,unicode:\"❷\"},{tex:/\\\\ding\\{184\\}/,unicode:\"❸\"},{tex:/\\\\ding\\{185\\}/,unicode:\"❹\"},{tex:/\\\\ding\\{186\\}/,unicode:\"❺\"},{tex:/\\\\ding\\{187\\}/,unicode:\"❻\"},{tex:/\\\\ding\\{188\\}/,unicode:\"❼\"},{tex:/\\\\ding\\{189\\}/,unicode:\"❽\"},{tex:/\\\\ding\\{190\\}/,unicode:\"❾\"},{tex:/\\\\ding\\{191\\}/,unicode:\"❿\"},{tex:/\\\\ding\\{192\\}/,unicode:\"➀\"},{tex:/\\\\ding\\{193\\}/,unicode:\"➁\"},{tex:/\\\\ding\\{194\\}/,unicode:\"➂\"},{tex:/\\\\ding\\{195\\}/,unicode:\"➃\"},{tex:/\\\\ding\\{196\\}/,unicode:\"➄\"},{tex:/\\\\ding\\{197\\}/,unicode:\"➅\"},{tex:/\\\\ding\\{198\\}/,unicode:\"➆\"},{tex:/\\\\ding\\{199\\}/,unicode:\"➇\"},{tex:/\\\\ding\\{200\\}/,unicode:\"➈\"},{tex:/\\\\ding\\{201\\}/,unicode:\"➉\"},{tex:/\\\\ding\\{202\\}/,unicode:\"➊\"},{tex:/\\\\ding\\{203\\}/,unicode:\"➋\"},{tex:/\\\\ding\\{204\\}/,unicode:\"➌\"},{tex:/\\\\ding\\{205\\}/,unicode:\"➍\"},{tex:/\\\\ding\\{206\\}/,unicode:\"➎\"},{tex:/\\\\ding\\{207\\}/,unicode:\"➏\"},{tex:/\\\\ding\\{208\\}/,unicode:\"➐\"},{tex:/\\\\ding\\{209\\}/,unicode:\"➑\"},{tex:/\\\\ding\\{210\\}/,unicode:\"➒\"},{tex:/\\\\ding\\{211\\}/,unicode:\"➓\"},{tex:/\\\\ding\\{212\\}/,unicode:\"➔\"},{tex:/\\\\ding\\{216\\}/,unicode:\"➘\"},{tex:/\\\\ding\\{217\\}/,unicode:\"➙\"},{tex:/\\\\ding\\{218\\}/,unicode:\"➚\"},{tex:/\\\\ding\\{219\\}/,unicode:\"➛\"},{tex:/\\\\ding\\{220\\}/,unicode:\"➜\"},{tex:/\\\\ding\\{221\\}/,unicode:\"➝\"},{tex:/\\\\ding\\{222\\}/,unicode:\"➞\"},{tex:/\\\\ding\\{223\\}/,unicode:\"➟\"},{tex:/\\\\ding\\{224\\}/,unicode:\"➠\"},{tex:/\\\\ding\\{225\\}/,unicode:\"➡\"},{tex:/\\\\ding\\{226\\}/,unicode:\"➢\"},{tex:/\\\\ding\\{227\\}/,unicode:\"➣\"},{tex:/\\\\ding\\{228\\}/,unicode:\"➤\"},{tex:/\\\\ding\\{229\\}/,unicode:\"➥\"},{tex:/\\\\ding\\{230\\}/,unicode:\"➦\"},{tex:/\\\\ding\\{231\\}/,unicode:\"➧\"},{tex:/\\\\ding\\{232\\}/,unicode:\"➨\"},{tex:/\\\\ding\\{233\\}/,unicode:\"➩\"},{tex:/\\\\ding\\{234\\}/,unicode:\"➪\"},{tex:/\\\\ding\\{235\\}/,unicode:\"➫\"},{tex:/\\\\ding\\{236\\}/,unicode:\"➬\"},{tex:/\\\\ding\\{237\\}/,unicode:\"➭\"},{tex:/\\\\ding\\{238\\}/,unicode:\"➮\"},{tex:/\\\\ding\\{239\\}/,unicode:\"➯\"},{tex:/\\\\ding\\{241\\}/,unicode:\"➱\"},{tex:/\\\\ding\\{242\\}/,unicode:\"➲\"},{tex:/\\\\ding\\{243\\}/,unicode:\"➳\"},{tex:/\\\\ding\\{244\\}/,unicode:\"➴\"},{tex:/\\\\ding\\{245\\}/,unicode:\"➵\"},{tex:/\\\\ding\\{246\\}/,unicode:\"➶\"},{tex:/\\\\ding\\{247\\}/,unicode:\"➷\"},{tex:/\\\\ding\\{248\\}/,unicode:\"➸\"},{tex:/\\\\ding\\{249\\}/,unicode:\"➹\"},{tex:/\\\\ding\\{250\\}/,unicode:\"➺\"},{tex:/\\\\ding\\{251\\}/,unicode:\"➻\"},{tex:/\\\\ding\\{252\\}/,unicode:\"➼\"},{tex:/\\\\ding\\{253\\}/,unicode:\"➽\"},{tex:/\\\\ding\\{254\\}/,unicode:\"➾\"},{tex:/\\\\ding\\{33\\}/,unicode:\"✁\"},{tex:/\\\\ding\\{34\\}/,unicode:\"✂\"},{tex:/\\\\ding\\{35\\}/,unicode:\"✃\"},{tex:/\\\\ding\\{36\\}/,unicode:\"✄\"},{tex:/\\\\ding\\{37\\}/,unicode:\"☎\"},{tex:/\\\\ding\\{38\\}/,unicode:\"✆\"},{tex:/\\\\ding\\{39\\}/,unicode:\"✇\"},{tex:/\\\\ding\\{40\\}/,unicode:\"✈\"},{tex:/\\\\ding\\{41\\}/,unicode:\"✉\"},{tex:/\\\\ding\\{42\\}/,unicode:\"☛\"},{tex:/\\\\ding\\{43\\}/,unicode:\"☞\"},{tex:/\\\\ding\\{44\\}/,unicode:\"✌\"},{tex:/\\\\ding\\{45\\}/,unicode:\"✍\"},{tex:/\\\\ding\\{46\\}/,unicode:\"✎\"},{tex:/\\\\ding\\{47\\}/,unicode:\"✏\"},{tex:/\\\\ding\\{48\\}/,unicode:\"✐\"},{tex:/\\\\ding\\{49\\}/,unicode:\"✑\"},{tex:/\\\\ding\\{50\\}/,unicode:\"✒\"},{tex:/\\\\ding\\{51\\}/,unicode:\"✓\"},{tex:/\\\\ding\\{52\\}/,unicode:\"✔\"},{tex:/\\\\ding\\{53\\}/,unicode:\"✕\"},{tex:/\\\\ding\\{54\\}/,unicode:\"✖\"},{tex:/\\\\ding\\{55\\}/,unicode:\"✗\"},{tex:/\\\\ding\\{56\\}/,unicode:\"✘\"},{tex:/\\\\ding\\{57\\}/,unicode:\"✙\"},{tex:/\\\\ding\\{58\\}/,unicode:\"✚\"},{tex:/\\\\ding\\{59\\}/,unicode:\"✛\"},{tex:/\\\\ding\\{60\\}/,unicode:\"✜\"},{tex:/\\\\ding\\{61\\}/,unicode:\"✝\"},{tex:/\\\\ding\\{62\\}/,unicode:\"✞\"},{tex:/\\\\ding\\{63\\}/,unicode:\"✟\"},{tex:/\\\\ding\\{64\\}/,unicode:\"✠\"},{tex:/\\\\ding\\{65\\}/,unicode:\"✡\"},{tex:/\\\\ding\\{66\\}/,unicode:\"✢\"},{tex:/\\\\ding\\{67\\}/,unicode:\"✣\"},{tex:/\\\\ding\\{68\\}/,unicode:\"✤\"},{tex:/\\\\ding\\{69\\}/,unicode:\"✥\"},{tex:/\\\\ding\\{70\\}/,unicode:\"✦\"},{tex:/\\\\ding\\{71\\}/,unicode:\"✧\"},{tex:/\\\\ding\\{72\\}/,unicode:\"★\"},{tex:/\\\\ding\\{73\\}/,unicode:\"☆\"},{tex:/\\\\ding\\{74\\}/,unicode:\"✪\"},{tex:/\\\\ding\\{75\\}/,unicode:\"✫\"},{tex:/\\\\ding\\{76\\}/,unicode:\"✬\"},{tex:/\\\\ding\\{77\\}/,unicode:\"✭\"},{tex:/\\\\ding\\{78\\}/,unicode:\"✮\"},{tex:/\\\\ding\\{79\\}/,unicode:\"✯\"},{tex:/\\\\ding\\{80\\}/,unicode:\"✰\"},{tex:/\\\\ding\\{81\\}/,unicode:\"✱\"},{tex:/\\\\ding\\{82\\}/,unicode:\"✲\"},{tex:/\\\\ding\\{83\\}/,unicode:\"✳\"},{tex:/\\\\ding\\{84\\}/,unicode:\"✴\"},{tex:/\\\\ding\\{85\\}/,unicode:\"✵\"},{tex:/\\\\ding\\{86\\}/,unicode:\"✶\"},{tex:/\\\\ding\\{87\\}/,unicode:\"✷\"},{tex:/\\\\ding\\{88\\}/,unicode:\"✸\"},{tex:/\\\\ding\\{89\\}/,unicode:\"✹\"},{tex:/\\\\ding\\{90\\}/,unicode:\"✺\"},{tex:/\\\\ding\\{91\\}/,unicode:\"✻\"},{tex:/\\\\ding\\{92\\}/,unicode:\"✼\"},{tex:/\\\\ding\\{93\\}/,unicode:\"✽\"},{tex:/\\\\ding\\{94\\}/,unicode:\"✾\"},{tex:/\\\\ding\\{95\\}/,unicode:\"✿\"},{tex:/\\\\ding\\{96\\}/,unicode:\"❀\"},{tex:/\\\\ding\\{97\\}/,unicode:\"❁\"},{tex:/\\\\ding\\{98\\}/,unicode:\"❂\"},{tex:/\\\\ding\\{99\\}/,unicode:\"❃\"},{tex:/\\\\divideontimes/,unicode:\"⋇\"},{tex:/\\\\doteqdot/,unicode:\"≑\"},{tex:/\\\\dotequiv/,unicode:\"⩧\"},{tex:/\\\\dotplus/,unicode:\"∔\"},{tex:/\\\\dotsim/,unicode:\"⩪\"},{tex:/\\\\dottedcircle/,unicode:\"◌\"},{tex:/\\\\dottedsquare/,unicode:\"⬚\"},{tex:/\\\\dottimes/,unicode:\"⨰\"},{tex:/\\\\doublebarvee/,unicode:\"⩢\"},{tex:/\\\\doubleplus/,unicode:\"⧺\"},{tex:/\\\\downarrowbarred/,unicode:\"⤈\"},{tex:/\\\\DownArrowBar/,unicode:\"⤓\"},{tex:/\\\\downarrow/,unicode:\"↓\"},{tex:/\\\\Downarrow/,unicode:\"⇓\"},{tex:/\\\\DownArrowUpArrow/,unicode:\"⇵\"},{tex:/\\\\downdasharrow/,unicode:\"⇣\"},{tex:/\\\\downdownarrows/,unicode:\"⇊\"},{tex:/\\\\downdownharpoons/,unicode:\"⥥\"},{tex:/\\\\downfishtail/,unicode:\"⥿\"},{tex:/\\\\downharpoonleft/,unicode:\"⇃\"},{tex:/\\\\downharpoonright/,unicode:\"⇂\"},{tex:/\\\\DownLeftRightVector/,unicode:\"⥐\"},{tex:/\\\\DownLeftTeeVector/,unicode:\"⥞\"},{tex:/\\\\DownLeftVectorBar/,unicode:\"⥖\"},{tex:/\\\\downrightcurvedarrow/,unicode:\"⤵\"},{tex:/\\\\DownRightTeeVector/,unicode:\"⥟\"},{tex:/\\\\DownRightVectorBar/,unicode:\"⥗\"},{tex:/\\\\downslopeellipsis/,unicode:\"⋱\"},{tex:/\\\\downtriangleleftblack/,unicode:\"⧨\"},{tex:/\\\\downtrianglerightblack/,unicode:\"⧩\"},{tex:/\\\\downwhitearrow/,unicode:\"⇩\"},{tex:/\\\\drbkarow/,unicode:\"⤐\"},{tex:/\\\\droang/,unicode:\"̚\"},{tex:/\\\\egsdot/,unicode:\"⪘\"},{tex:/\\\\eighthnote/,unicode:\"♪\"},{tex:/\\\\elinters/,unicode:\"⏧\"},{tex:/\\\\Elolarr/,unicode:\"⥀\"},{tex:/\\\\Elorarr/,unicode:\"⥁\"},{tex:/\\\\Elroang/,unicode:\"⦆\"},{tex:/\\\\elsdot/,unicode:\"⪗\"},{tex:/\\\\ElsevierGlyph\\{2129\\}/,unicode:\"℩\"},{tex:/\\\\ElsevierGlyph\\{21B3\\}/,unicode:\"↳\"},{tex:/\\\\ElsevierGlyph\\{2232\\}/,unicode:\"∲\"},{tex:/\\\\ElsevierGlyph\\{2233\\}/,unicode:\"∳\"},{tex:/\\\\ElsevierGlyph\\{2238\\}/,unicode:\"∸\"},{tex:/\\\\ElsevierGlyph\\{2242\\}/,unicode:\"≂\"},{tex:/\\\\ElsevierGlyph\\{225A\\}/,unicode:\"≚\"},{tex:/\\\\ElsevierGlyph\\{225F\\}/,unicode:\"≟\"},{tex:/\\\\ElsevierGlyph\\{2274\\}/,unicode:\"≴\"},{tex:/\\\\ElsevierGlyph\\{2275\\}/,unicode:\"≵\"},{tex:/\\\\ElsevierGlyph\\{22C0\\}/,unicode:\"⋀\"},{tex:/\\\\ElsevierGlyph\\{22C1\\}/,unicode:\"⋁\"},{tex:/\\\\ElsevierGlyph\\{300A\\}/,unicode:\"《\"},{tex:/\\\\ElsevierGlyph\\{300B\\}/,unicode:\"》\"},{tex:/\\\\ElsevierGlyph\\{3018\\}/,unicode:\"⦅\"},{tex:/\\\\ElsevierGlyph\\{3019\\}/,unicode:\"〙\"},{tex:/\\\\ElsevierGlyph\\{E20A\\}/,unicode:\"⤦\"},{tex:/\\\\ElsevierGlyph\\{E20B\\}/,unicode:\"⤥\"},{tex:/\\\\ElsevierGlyph\\{E20C\\}/,unicode:\"⤣\"},{tex:/\\\\ElsevierGlyph\\{E20D\\}/,unicode:\"⤤\"},{tex:/\\\\ElsevierGlyph\\{E20E\\}/,unicode:\"⤨\"},{tex:/\\\\ElsevierGlyph\\{E20F\\}/,unicode:\"⤩\"},{tex:/\\\\ElsevierGlyph\\{E210\\}/,unicode:\"⤪\"},{tex:/\\\\ElsevierGlyph\\{E211\\}/,unicode:\"⤧\"},{tex:/\\\\ElsevierGlyph\\{E212\\}/,unicode:\"⤅\"},{tex:/\\\\ElsevierGlyph\\{E214\\}/,unicode:\"⥼\"},{tex:/\\\\ElsevierGlyph\\{E215\\}/,unicode:\"⥽\"},{tex:/\\\\ElsevierGlyph\\{E219\\}/,unicode:\"⤷\"},{tex:/\\\\ElsevierGlyph\\{E21A\\}/,unicode:\"⤶\"},{tex:/\\\\ElsevierGlyph\\{E21C\\}/,unicode:\"⤳\"},{tex:/\\\\ElsevierGlyph\\{E259\\}/,unicode:\"⨼\"},{tex:/\\\\ElsevierGlyph\\{E25A\\}/,unicode:\"⨥\"},{tex:/\\\\ElsevierGlyph\\{E25B\\}/,unicode:\"⨪\"},{tex:/\\\\ElsevierGlyph\\{E25C\\}/,unicode:\"⨭\"},{tex:/\\\\ElsevierGlyph\\{E25D\\}/,unicode:\"⨮\"},{tex:/\\\\ElsevierGlyph\\{E25E\\}/,unicode:\"⨴\"},{tex:/\\\\ElsevierGlyph\\{E260\\}/,unicode:\"⦵\"},{tex:/\\\\ElsevierGlyph\\{E291\\}/,unicode:\"⦔\"},{tex:/\\\\ElsevierGlyph\\{E30D\\}/,unicode:\"⫫\"},{tex:/\\\\ElsevierGlyph\\{E36E\\}/,unicode:\"⩕\"},{tex:/\\\\ElsevierGlyph\\{E372\\}/,unicode:\"⧜\"},{tex:/\\\\ElsevierGlyph\\{E381\\}/,unicode:\"▱\"},{tex:/\\\\ElsevierGlyph\\{E395\\}/,unicode:\"⨐\"},{tex:/\\\\ElsevierGlyph\\{E61B\\}/,unicode:\"⦶\"},{tex:/\\\\ElsevierGlyph\\{E838\\}/,unicode:\"⌽\"},{tex:/\\\\Elxsqcup/,unicode:\"⨆\"},{tex:/\\\\Elxuplus/,unicode:\"⨄\"},{tex:/\\\\ElzAnd/,unicode:\"⩓\"},{tex:/\\\\Elzbar/,unicode:\"̶\"},{tex:/\\\\Elzbtdl/,unicode:\"ɬ\"},{tex:/\\\\ElzCint/,unicode:\"⨍\"},{tex:/\\\\Elzcirfb/,unicode:\"◒\"},{tex:/\\\\Elzcirfl/,unicode:\"◐\"},{tex:/\\\\Elzcirfr/,unicode:\"◑\"},{tex:/\\\\Elzclomeg/,unicode:\"ɷ\"},{tex:/\\\\Elzddfnc/,unicode:\"⦙\"},{tex:/\\\\Elzdefas/,unicode:\"⧋\"},{tex:/\\\\Elzdlcorn/,unicode:\"⎣\"},{tex:/\\\\Elzdshfnc/,unicode:\"┆\"},{tex:/\\\\Elzdyogh/,unicode:\"ʤ\"},{tex:/\\\\Elzesh/,unicode:\"ʃ\"},{tex:/\\\\Elzfhr/,unicode:\"ɾ\"},{tex:/\\\\Elzglst/,unicode:\"ʔ\"},{tex:/\\\\Elzhlmrk/,unicode:\"ˑ\"},{tex:/\\\\ElzInf/,unicode:\"⨇\"},{tex:/\\\\Elzinglst/,unicode:\"ʖ\"},{tex:/\\\\Elzinvv/,unicode:\"ʌ\"},{tex:/\\\\Elzinvw/,unicode:\"ʍ\"},{tex:/\\\\ElzLap/,unicode:\"⧊\"},{tex:/\\\\Elzlmrk/,unicode:\"ː\"},{tex:/\\\\Elzlow/,unicode:\"˕\"},{tex:/\\\\Elzlpargt/,unicode:\"⦠\"},{tex:/\\\\Elzltlmr/,unicode:\"ɱ\"},{tex:/\\\\Elzltln/,unicode:\"ɲ\"},{tex:/\\\\Elzminhat/,unicode:\"⩟\"},{tex:/\\\\Elzopeno/,unicode:\"ɔ\"},{tex:/\\\\Elzpalh/,unicode:\"̡\"},{tex:/\\\\Elzpbgam/,unicode:\"ɤ\"},{tex:/\\\\Elzpgamma/,unicode:\"ɣ\"},{tex:/\\\\Elzpscrv/,unicode:\"ʋ\"},{tex:/\\\\Elzpupsil/,unicode:\"ʊ\"},{tex:/\\\\Elzrais/,unicode:\"˔\"},{tex:/\\\\Elzrarrx/,unicode:\"⥇\"},{tex:/\\\\Elzreapos/,unicode:\"‛\"},{tex:/\\\\Elzreglst/,unicode:\"ʕ\"},{tex:/\\\\ElzRlarr/,unicode:\"⥂\"},{tex:/\\\\ElzrLarr/,unicode:\"⥄\"},{tex:/\\\\Elzrtld/,unicode:\"ɖ\"},{tex:/\\\\Elzrtll/,unicode:\"ɭ\"},{tex:/\\\\Elzrtln/,unicode:\"ɳ\"},{tex:/\\\\Elzrtlr/,unicode:\"ɽ\"},{tex:/\\\\Elzrtls/,unicode:\"ʂ\"},{tex:/\\\\Elzrtlt/,unicode:\"ʈ\"},{tex:/\\\\Elzrtlz/,unicode:\"ʐ\"},{tex:/\\\\Elzrttrnr/,unicode:\"ɻ\"},{tex:/\\\\Elzrvbull/,unicode:\"◘\"},{tex:/\\\\Elzsbbrg/,unicode:\"̪\"},{tex:/\\\\Elzsblhr/,unicode:\"˓\"},{tex:/\\\\Elzsbrhr/,unicode:\"˒\"},{tex:/\\\\Elzschwa/,unicode:\"ə\"},{tex:/\\\\Elzsqfl/,unicode:\"◧\"},{tex:/\\\\Elzsqfnw/,unicode:\"┙\"},{tex:/\\\\Elzsqfr/,unicode:\"◨\"},{tex:/\\\\Elzsqfse/,unicode:\"◪\"},{tex:/\\\\Elzsqspne/,unicode:\"⋥\"},{tex:/\\\\ElzSup/,unicode:\"⨈\"},{tex:/\\\\Elztdcol/,unicode:\"⫶\"},{tex:/\\\\Elztesh/,unicode:\"ʧ\"},{tex:/\\\\Elztfnc/,unicode:\"⦀\"},{tex:/\\\\ElzThr/,unicode:\"⨅\"},{tex:/\\\\ElzTimes/,unicode:\"⨯\"},{tex:/\\\\Elztrna/,unicode:\"ɐ\"},{tex:/\\\\Elztrnh/,unicode:\"ɥ\"},{tex:/\\\\Elztrnmlr/,unicode:\"ɰ\"},{tex:/\\\\Elztrnm/,unicode:\"ɯ\"},{tex:/\\\\Elztrnrl/,unicode:\"ɺ\"},{tex:/\\\\Elztrnr/,unicode:\"ɹ\"},{tex:/\\\\Elztrnsa/,unicode:\"ɒ\"},{tex:/\\\\Elztrnt/,unicode:\"ʇ\"},{tex:/\\\\Elztrny/,unicode:\"ʎ\"},{tex:/\\\\Elzverti/,unicode:\"ˌ\"},{tex:/\\\\Elzverts/,unicode:\"ˈ\"},{tex:/\\\\Elzvrecto/,unicode:\"▯\"},{tex:/\\\\Elzxrat/,unicode:\"℞\"},{tex:/\\\\Elzyogh/,unicode:\"ʒ\"},{tex:/\\\\emptysetoarrl/,unicode:\"⦴\"},{tex:/\\\\emptysetoarr/,unicode:\"⦳\"},{tex:/\\\\emptysetobar/,unicode:\"⦱\"},{tex:/\\\\emptysetocirc/,unicode:\"⦲\"},{tex:/\\\\enclosecircle/,unicode:\"⃝\"},{tex:/\\\\enclosediamond/,unicode:\"⃟\"},{tex:/\\\\enclosesquare/,unicode:\"⃞\"},{tex:/\\\\enclosetriangle/,unicode:\"⃤\"},{tex:/\\\\ensuremath\\{\\\\Elzpes\\}/,unicode:\"₧\"},{tex:/\\\\eparsl/,unicode:\"⧣\"},{tex:/\\\\epsilon/,unicode:\"ε\"},{tex:/\\\\eqcolon/,unicode:\"∹\"},{tex:/\\\\eqqgtr/,unicode:\"⪚\"},{tex:/\\\\eqqless/,unicode:\"⪙\"},{tex:/\\\\eqqplus/,unicode:\"⩱\"},{tex:/\\\\eqqsim/,unicode:\"⩳\"},{tex:/\\\\eqqslantgtr/,unicode:\"⪜\"},{tex:/\\\\eqqslantless/,unicode:\"⪛\"},{tex:/\\\\eqslantgtr/,unicode:\"⪖\"},{tex:/\\\\eqslantless/,unicode:\"⪕\"},{tex:/\\\\equalleftarrow/,unicode:\"⭀\"},{tex:/\\\\equalrightarrow/,unicode:\"⥱\"},{tex:/\\\\equivDD/,unicode:\"⩸\"},{tex:/\\\\equivVert/,unicode:\"⩨\"},{tex:/\\\\equivVvert/,unicode:\"⩩\"},{tex:/\\\\eqvparsl/,unicode:\"⧥\"},{tex:/\\\\errbarblackcircle/,unicode:\"⧳\"},{tex:/\\\\errbarblackdiamond/,unicode:\"⧱\"},{tex:/\\\\errbarblacksquare/,unicode:\"⧯\"},{tex:/\\\\errbarcircle/,unicode:\"⧲\"},{tex:/\\\\errbardiamond/,unicode:\"⧰\"},{tex:/\\\\errbarsquare/,unicode:\"⧮\"},{tex:/\\\\estimates/,unicode:\"≙\"},{tex:/\\\\exists/,unicode:\"∃\"},{tex:/\\\\ExponetialE/,unicode:\"ⅇ\"},{tex:/\\\\fallingdotseq/,unicode:\"≒\"},{tex:/\\\\fbowtie/,unicode:\"⧓\"},{tex:/\\\\fbox\\{~~\\}/,unicode:\"▭\"},{tex:/\\\\fdiagovnearrow/,unicode:\"⤯\"},{tex:/\\\\fdiagovrdiag/,unicode:\"⤬\"},{tex:/\\\\fisheye/,unicode:\"◉\"},{tex:/\\\\forall/,unicode:\"∀\"},{tex:/\\\\forcesextra/,unicode:\"⊨\"},{tex:/\\\\forksnot/,unicode:\"⫝\"},{tex:/\\\\fracslash/,unicode:\"⁄\"},{tex:/\\\\frownie/,unicode:\"☹\"},{tex:/\\\\fullouterjoin/,unicode:\"⟗\"},{tex:/\\\\geqqslant/,unicode:\"⫺\"},{tex:/\\\\geqslant/,unicode:\"⩾\"},{tex:/\\\\gesdotol/,unicode:\"⪄\"},{tex:/\\\\gesdoto/,unicode:\"⪂\"},{tex:/\\\\gesdot/,unicode:\"⪀\"},{tex:/\\\\gesles/,unicode:\"⪔\"},{tex:/\\\\ggcurly/,unicode:\"⪼\"},{tex:/\\\\gggnest/,unicode:\"⫸\"},{tex:/\\\\gleichstark/,unicode:\"⧦\"},{tex:/\\\\gnapprox/,unicode:\"⪊\"},{tex:/\\\\greaterequivlnt/,unicode:\"≳\"},{tex:/\\\\gtquest/,unicode:\"⩼\"},{tex:/\\\\gtrapprox/,unicode:\"⪆\"},{tex:/\\\\gtrarr/,unicode:\"⥸\"},{tex:/\\\\gtreqless/,unicode:\"⋛\"},{tex:/\\\\gtreqqless/,unicode:\"⪌\"},{tex:/\\\\gtrless/,unicode:\"≷\"},{tex:/\\\\guillemotleft/,unicode:\"«\"},{tex:/\\\\guillemotright/,unicode:\"»\"},{tex:/\\\\guilsinglleft/,unicode:\"‹\"},{tex:/\\\\guilsinglright/,unicode:\"›\"},{tex:/\\\\harrowextender/,unicode:\"⎯\"},{tex:/\\\\hatapprox/,unicode:\"⩯\"},{tex:/\\\\heartsuit/,unicode:\"♡\"},{tex:/\\\\Hermaphrodite/,unicode:\"⚥\"},{tex:/\\\\hermitconjmatrix/,unicode:\"⊹\"},{tex:/\\\\hexagonblack/,unicode:\"⬣\"},{tex:/\\\\hexagon/,unicode:\"⎔\"},{tex:/\\\\homothetic/,unicode:\"∻\"},{tex:/\\\\hookleftarrow/,unicode:\"↩\"},{tex:/\\\\hookrightarrow/,unicode:\"↪\"},{tex:/\\\\hourglass/,unicode:\"⧖\"},{tex:/\\\\hphantom\\{0\\}/,unicode:\" \"},{tex:/\\\\hphantom\\{,\\}/,unicode:\" \"},{tex:/\\\\hrectangleblack/,unicode:\"▬\"},{tex:/\\\\hspace\\{0\\.166em\\}/,unicode:\" \"},{tex:/\\\\,|\\\\hspace\\{0\\.167em\\}/,unicode:\" \"},{tex:/\\\\hspace\\{0\\.25em\\}/,unicode:\" \"},{tex:/\\\\hspace\\{0\\.33em\\}/,unicode:\" \"},{tex:/\\\\hspace\\{0\\.6em\\}/,unicode:\" \"},{tex:/\\\\hspace\\{1em\\}/,unicode:\" \"},{tex:/\\\\hyphenbullet/,unicode:\"⁃\"},{tex:/\\\\hzigzag/,unicode:\"〰\"},{tex:/\\\\iiiint/,unicode:\"⨌\"},{tex:/\\\\increment/,unicode:\"∆\"},{tex:/\\\\intBar/,unicode:\"⨎\"},{tex:/\\\\intbottom/,unicode:\"⌡\"},{tex:/\\\\intcap/,unicode:\"⨙\"},{tex:/\\\\intcup/,unicode:\"⨚\"},{tex:/\\\\intercal/,unicode:\"⊺\"},{tex:/\\\\interleave/,unicode:\"⫴\"},{tex:/\\\\intextender/,unicode:\"⎮\"},{tex:/\\\\int\\\\!\\\\int\\\\!\\\\int/,unicode:\"∭\"},{tex:/\\\\int\\\\!\\\\int/,unicode:\"∬\"},{tex:/\\\\intlarhk/,unicode:\"⨗\"},{tex:/\\\\intprodr/,unicode:\"⨽\"},{tex:/\\\\inversewhitecircle/,unicode:\"◙\"},{tex:/\\\\invwhitelowerhalfcircle/,unicode:\"◛\"},{tex:/\\\\invwhiteupperhalfcircle/,unicode:\"◚\"},{tex:/\\\\isindot/,unicode:\"⋵\"},{tex:/\\\\isinobar/,unicode:\"⋷\"},{tex:/\\\\'\\{\\}\\{I\\}/,unicode:\"Ί\"},{tex:/\\\\jupiter/,unicode:\"♃\"},{tex:/<\\\\kern-0\\.58em\\(/,unicode:\"⦓\"},{tex:/\\\\Lambda/,unicode:\"Λ\"},{tex:/\\\\lambda/,unicode:\"λ\"},{tex:/\\\\langledot/,unicode:\"⦑\"},{tex:/\\\\laplac/,unicode:\"⧠\"},{tex:/\\\\lazysinv/,unicode:\"∾\"},{tex:/\\\\lblkbrbrak/,unicode:\"⦗\"},{tex:/\\\\lbracelend/,unicode:\"⎩\"},{tex:/\\\\lbracemid/,unicode:\"⎨\"},{tex:/\\\\lbraceuend/,unicode:\"⎧\"},{tex:/\\\\lbrace/,unicode:\"\\\\{\"},{tex:/\\\\lBrace/,unicode:\"⦃\"},{tex:/\\\\lbrackextender/,unicode:\"⎢\"},{tex:/\\\\lbracklltick/,unicode:\"⦏\"},{tex:/\\\\lbrackubar/,unicode:\"⦋\"},{tex:/\\\\lbrackuend/,unicode:\"⎡\"},{tex:/\\\\lbrackultick/,unicode:\"⦍\"},{tex:/\\\\lbrbrak/,unicode:\"❲\"},{tex:/\\\\Lbrbrak/,unicode:\"⟬\"},{tex:/\\\\lcurvyangle/,unicode:\"⧼\"},{tex:/\\\\leftarrowapprox/,unicode:\"⭊\"},{tex:/\\\\leftarrowbackapprox/,unicode:\"⭂\"},{tex:/\\\\LeftArrowBar/,unicode:\"⇤\"},{tex:/\\\\leftarrowbsimilar/,unicode:\"⭋\"},{tex:/\\\\leftarrowless/,unicode:\"⥷\"},{tex:/\\\\leftarrowonoplus/,unicode:\"⬲\"},{tex:/\\\\leftarrowplus/,unicode:\"⥆\"},{tex:/\\\\leftarrowshortrightarrow/,unicode:\"⥃\"},{tex:/\\\\leftarrowsimilar/,unicode:\"⥳\"},{tex:/\\\\leftarrowsubset/,unicode:\"⥺\"},{tex:/\\\\leftarrowtail/,unicode:\"↢\"},{tex:/\\\\leftarrowtriangle/,unicode:\"⇽\"},{tex:/\\\\leftarrow/,unicode:\"←\"},{tex:/\\\\Leftarrow/,unicode:\"⇐\"},{tex:/\\\\leftarrowx/,unicode:\"⬾\"},{tex:/\\\\leftbarharpoon/,unicode:\"⥪\"},{tex:/\\\\leftbkarrow/,unicode:\"⤌\"},{tex:/\\\\LEFTCIRCLE/,unicode:\"◖\"},{tex:/\\\\leftcurvedarrow/,unicode:\"⬿\"},{tex:/\\\\leftdbkarrow/,unicode:\"⤎\"},{tex:/\\\\leftdbltail/,unicode:\"⤛\"},{tex:/\\\\leftdotarrow/,unicode:\"⬸\"},{tex:/\\\\LeftDownTeeVector/,unicode:\"⥡\"},{tex:/\\\\LeftDownVectorBar/,unicode:\"⥙\"},{tex:/\\\\leftharpoondown/,unicode:\"↽\"},{tex:/\\\\leftharpoonup/,unicode:\"↼\"},{tex:/\\\\leftleftarrows/,unicode:\"⇇\"},{tex:/\\\\leftleftharpoons/,unicode:\"⥢\"},{tex:/\\\\leftouterjoin/,unicode:\"⟕\"},{tex:/\\\\leftrightarrowcircle/,unicode:\"⥈\"},{tex:/\\\\leftrightarrows/,unicode:\"⇆\"},{tex:/\\\\leftrightarrowtriangle/,unicode:\"⇿\"},{tex:/\\\\leftrightarrow/,unicode:\"↔\"},{tex:/\\\\Leftrightarrow/,unicode:\"⇔\"},{tex:/\\\\leftrightharpoonsdown/,unicode:\"⥧\"},{tex:/\\\\leftrightharpoons/,unicode:\"⇋\"},{tex:/\\\\leftrightharpoonsup/,unicode:\"⥦\"},{tex:/\\\\leftrightharpoon/,unicode:\"⥊\"},{tex:/\\\\leftrightsquigarrow/,unicode:\"↭\"},{tex:/\\\\LeftRightVector/,unicode:\"⥎\"},{tex:/\\\\leftslice/,unicode:\"⪦\"},{tex:/\\\\leftsquigarrow/,unicode:\"⇜\"},{tex:/\\\\lefttail/,unicode:\"⤙\"},{tex:/\\\\LeftTeeVector/,unicode:\"⥚\"},{tex:/\\\\leftthreearrows/,unicode:\"⬱\"},{tex:/\\\\leftthreetimes/,unicode:\"⋋\"},{tex:/\\\\LeftTriangleBar/,unicode:\"⧏\"},{tex:/\\\\LeftUpDownVector/,unicode:\"⥑\"},{tex:/\\\\LeftUpTeeVector/,unicode:\"⥠\"},{tex:/\\\\LeftUpVectorBar/,unicode:\"⥘\"},{tex:/\\\\LeftVectorBar/,unicode:\"⥒\"},{tex:/\\\\leftwhitearrow/,unicode:\"⇦\"},{tex:/\\\\leqqslant/,unicode:\"⫹\"},{tex:/\\\\leqslant/,unicode:\"⩽\"},{tex:/\\\\lesdotor/,unicode:\"⪃\"},{tex:/\\\\lesdoto/,unicode:\"⪁\"},{tex:/\\\\lesdot/,unicode:\"⩿\"},{tex:/\\\\lesges/,unicode:\"⪓\"},{tex:/\\\\lessapprox/,unicode:\"⪅\"},{tex:/\\\\lessdot/,unicode:\"⋖\"},{tex:/\\\\lesseqgtr/,unicode:\"⋚\"},{tex:/\\\\lesseqqgtr/,unicode:\"⪋\"},{tex:/\\\\lessequivlnt/,unicode:\"≲\"},{tex:/\\\\lessgtr/,unicode:\"≶\"},{tex:/\\\\lfbowtie/,unicode:\"⧑\"},{tex:/\\\\lftimes/,unicode:\"⧔\"},{tex:/\\\\lgblkcircle/,unicode:\"⬤\"},{tex:/\\\\lgroup/,unicode:\"⟮\"},{tex:/\\\\lightning/,unicode:\"↯\"},{tex:/\\\\linefeed/,unicode:\"↴\"},{tex:/\\\\llblacktriangle/,unicode:\"◣\"},{tex:/\\\\llbracket/,unicode:\"⟦\"},{tex:/\\\\llcorner/,unicode:\"⌞\"},{tex:/\\\\llcurly/,unicode:\"⪻\"},{tex:/\\\\Lleftarrow/,unicode:\"⇚\"},{tex:/\\\\LLeftarrow/,unicode:\"⭅\"},{tex:/\\\\lllnest/,unicode:\"⫷\"},{tex:/\\\\lltriangle/,unicode:\"◺\"},{tex:/\\\\lmoustache/,unicode:\"⎰\"},{tex:/\\\\lnapprox/,unicode:\"⪉\"},{tex:/\\\\longdashv/,unicode:\"⟞\"},{tex:/\\\\longdivision/,unicode:\"⟌\"},{tex:/\\\\longleftarrow/,unicode:\"⟵\"},{tex:/\\\\Longleftarrow/,unicode:\"⟸\"},{tex:/\\\\longleftrightarrow/,unicode:\"⟷\"},{tex:/\\\\Longleftrightarrow/,unicode:\"⟺\"},{tex:/\\\\longleftsquigarrow/,unicode:\"⬳\"},{tex:/\\\\longmapsfrom/,unicode:\"⟻\"},{tex:/\\\\Longmapsfrom/,unicode:\"⟽\"},{tex:/\\\\longmapsto/,unicode:\"⟼\"},{tex:/\\\\Longmapsto/,unicode:\"⟾\"},{tex:/\\\\longrightarrow/,unicode:\"⟶\"},{tex:/\\\\Longrightarrow/,unicode:\"⟹\"},{tex:/\\\\looparrowleft/,unicode:\"↫\"},{tex:/\\\\looparrowright/,unicode:\"↬\"},{tex:/\\\\lowint/,unicode:\"⨜\"},{tex:/\\\\lozengeminus/,unicode:\"⟠\"},{tex:/\\\\lozenge/,unicode:\"◊\"},{tex:/\\\\lparenextender/,unicode:\"⎜\"},{tex:/\\\\Lparengtr/,unicode:\"⦕\"},{tex:/\\\\lparenlend/,unicode:\"⎝\"},{tex:/\\\\lparenuend/,unicode:\"⎛\"},{tex:/\\\\lrblacktriangle/,unicode:\"◢\"},{tex:/\\\\lrcorner/,unicode:\"⌟\"},{tex:/\\\\lrtriangleeq/,unicode:\"⧡\"},{tex:/\\\\lrtriangle/,unicode:\"◿\"},{tex:/\\\\lsqhook/,unicode:\"⫍\"},{tex:/\\\\ltlarr/,unicode:\"⥶\"},{tex:/\\\\ltquest/,unicode:\"⩻\"},{tex:/\\\\lvboxline/,unicode:\"⎸\"},{tex:/\\\\lvzigzag/,unicode:\"⧘\"},{tex:/\\\\Lvzigzag/,unicode:\"⧚\"},{tex:/\\\\MapsDown/,unicode:\"↧\"},{tex:/\\\\mapsfrom/,unicode:\"↤\"},{tex:/\\\\Mapsfrom/,unicode:\"⤆\"},{tex:/\\\\Mapsto/,unicode:\"⤇\"},{tex:/\\\\mbfDigamma/,unicode:\"𝟊\"},{tex:/\\\\mbfdigamma/,unicode:\"𝟋\"},{tex:/\\\\mdblkdiamond/,unicode:\"⬥\"},{tex:/\\\\mdblklozenge/,unicode:\"⬧\"},{tex:/\\\\mdsmblksquare/,unicode:\"◾\"},{tex:/\\\\mdsmwhtcircle/,unicode:\"⚬\"},{tex:/\\\\mdsmwhtsquare/,unicode:\"◽\"},{tex:/\\\\mdwhtdiamond/,unicode:\"⬦\"},{tex:/\\\\mdwhtlozenge/,unicode:\"⬨\"},{tex:/\\\\measangledltosw/,unicode:\"⦯\"},{tex:/\\\\measangledrtose/,unicode:\"⦮\"},{tex:/\\\\measangleldtosw/,unicode:\"⦫\"},{tex:/\\\\measanglelutonw/,unicode:\"⦩\"},{tex:/\\\\measanglerdtose/,unicode:\"⦪\"},{tex:/\\\\measanglerutone/,unicode:\"⦨\"},{tex:/\\\\measangleultonw/,unicode:\"⦭\"},{tex:/\\\\measangleurtone/,unicode:\"⦬\"},{tex:/\\\\measeq/,unicode:\"≞\"},{tex:/\\\\measuredangleleft/,unicode:\"⦛\"},{tex:/\\\\measuredangle/,unicode:\"∡\"},{tex:/\\\\medblackstar/,unicode:\"⭑\"},{tex:/\\\\medbullet/,unicode:\"⚫\"},{tex:/\\\\medcirc/,unicode:\"⚪\"},{tex:/\\\\medwhitestar/,unicode:\"⭐\"},{tex:/\\\\mercury/,unicode:\"☿\"},{tex:/\\\\midbarvee/,unicode:\"⩝\"},{tex:/\\\\midbarwedge/,unicode:\"⩜\"},{tex:/\\\\midcir/,unicode:\"⫰\"},{tex:/\\\\minusfdots/,unicode:\"⨫\"},{tex:/\\\\minusrdots/,unicode:\"⨬\"},{tex:/\\\\mkern1mu/,unicode:\" \"},{tex:/\\\\:|\\\\mkern4mu/,unicode:\" \"},{tex:/\\\\modtwosum/,unicode:\"⨊\"},{tex:/\\\\multimapboth/,unicode:\"⧟\"},{tex:/\\\\multimapinv/,unicode:\"⟜\"},{tex:/\\\\multimap/,unicode:\"⊸\"},{tex:/\\\\natural/,unicode:\"♮\"},{tex:/\\\\nearrow/,unicode:\"↗\"},{tex:/\\\\Nearrow/,unicode:\"⇗\"},{tex:/\\\\neovnwarrow/,unicode:\"⤱\"},{tex:/\\\\neovsearrow/,unicode:\"⤮\"},{tex:/\\\\neptune/,unicode:\"♆\"},{tex:/\\\\NestedGreaterGreater/,unicode:\"⪢\"},{tex:/\\\\NestedLessLess/,unicode:\"⪡\"},{tex:/\\\\neswarrow/,unicode:\"⤢\"},{tex:/\\\\nexists/,unicode:\"∄\"},{tex:/\\\\nHdownarrow/,unicode:\"⇟\"},{tex:/\\\\nHuparrow/,unicode:\"⇞\"},{tex:/\\\\nhVvert/,unicode:\"⫵\"},{tex:/\\\\nleftarrow/,unicode:\"↚\"},{tex:/\\\\nLeftarrow/,unicode:\"⇍\"},{tex:/\\\\nleftrightarrow/,unicode:\"↮\"},{tex:/\\\\nLeftrightarrow/,unicode:\"⇎\"},{tex:/\\\\nolinebreak/,unicode:\"\"},{tex:/\\\\not\\\\approx/,unicode:\"≉\"},{tex:/\\\\notbackslash/,unicode:\"⍀\"},{tex:/\\\\not\\\\cong/,unicode:\"≇\"},{tex:/\\\\not\\\\equiv/,unicode:\"≢\"},{tex:/\\\\not\\\\geq/,unicode:\"≱\"},{tex:/\\\\notgreaterless/,unicode:\"≹\"},{tex:/\\\\not\\\\in/,unicode:\"∉\"},{tex:/\\\\not\\\\kern-0\\.3em\\\\times/,unicode:\"≭\"},{tex:/\\\\not\\\\leq/,unicode:\"≰\"},{tex:/\\\\notlessgreater/,unicode:\"≸\"},{tex:/\\\\not\\\\ni/,unicode:\"∌\"},{tex:/\\\\not\\\\prec/,unicode:\"⊀\"},{tex:/\\\\not\\\\simeq/,unicode:\"≄\"},{tex:/\\\\not\\\\sim/,unicode:\"≁\"},{tex:/\\\\notslash/,unicode:\"⌿\"},{tex:/\\\\not\\\\sqsubseteq/,unicode:\"⋢\"},{tex:/\\\\not\\\\sqsupseteq/,unicode:\"⋣\"},{tex:/\\\\not\\\\subseteq/,unicode:\"⊈\"},{tex:/\\\\not\\\\subset/,unicode:\"⊄\"},{tex:/\\\\not\\\\succ/,unicode:\"⊁\"},{tex:/\\\\not\\\\supseteq/,unicode:\"⊉\"},{tex:/\\\\not\\\\supset/,unicode:\"⊅\"},{tex:/\\\\not =/,unicode:\"≠\"},{tex:/\\\\nparallel/,unicode:\"∦\"},{tex:/\\\\npolint/,unicode:\"⨔\"},{tex:/\\\\npreceq/,unicode:\"⋠\"},{tex:/\\\\nrightarrow/,unicode:\"↛\"},{tex:/\\\\nRightarrow/,unicode:\"⇏\"},{tex:/\\\\nsucceq/,unicode:\"⋡\"},{tex:/\\\\ntrianglelefteq/,unicode:\"⋬\"},{tex:/\\\\ntriangleleft/,unicode:\"⋪\"},{tex:/\\\\ntrianglerighteq/,unicode:\"⋭\"},{tex:/\\\\ntriangleright/,unicode:\"⋫\"},{tex:/\\\\nvdash/,unicode:\"⊬\"},{tex:/\\\\nvDash/,unicode:\"⊭\"},{tex:/\\\\nVdash/,unicode:\"⊮\"},{tex:/\\\\nVDash/,unicode:\"⊯\"},{tex:/\\\\nvinfty/,unicode:\"⧞\"},{tex:/\\\\nvleftarrowtail/,unicode:\"⬹\"},{tex:/\\\\nVleftarrowtail/,unicode:\"⬺\"},{tex:/\\\\nvleftarrow/,unicode:\"⇷\"},{tex:/\\\\nVleftarrow/,unicode:\"⇺\"},{tex:/\\\\nvLeftarrow/,unicode:\"⤂\"},{tex:/\\\\nvleftrightarrow/,unicode:\"⇹\"},{tex:/\\\\nVleftrightarrow/,unicode:\"⇼\"},{tex:/\\\\nvLeftrightarrow/,unicode:\"⤄\"},{tex:/\\\\nvRightarrow/,unicode:\"⤃\"},{tex:/\\\\nvtwoheadleftarrowtail/,unicode:\"⬼\"},{tex:/\\\\nVtwoheadleftarrowtail/,unicode:\"⬽\"},{tex:/\\\\nvtwoheadleftarrow/,unicode:\"⬴\"},{tex:/\\\\nVtwoheadleftarrow/,unicode:\"⬵\"},{tex:/\\\\nvtwoheadrightarrowtail/,unicode:\"⤗\"},{tex:/\\\\nVtwoheadrightarrowtail/,unicode:\"⤘\"},{tex:/\\\\nVtwoheadrightarrow/,unicode:\"⤁\"},{tex:/\\\\nwarrow/,unicode:\"↖\"},{tex:/\\\\Nwarrow/,unicode:\"⇖\"},{tex:/\\\\nwovnearrow/,unicode:\"⤲\"},{tex:/\\\\nwsearrow/,unicode:\"⤡\"},{tex:/\\\\obrbrak/,unicode:\"⏠\"},{tex:/\\\\ocommatopright/,unicode:\"̕\"},{tex:/\\\\odotslashdot/,unicode:\"⦼\"},{tex:/\\\\olcross/,unicode:\"⦻\"},{tex:/\\\\ominus/,unicode:\"⊖\"},{tex:/\\{\\\\'\\{\\}O\\}|\\\\'\\{\\}O/,unicode:\"Ό\"},{tex:/\\\\openbracketleft/,unicode:\"〚\"},{tex:/\\\\openbracketright/,unicode:\"〛\"},{tex:/\\\\original/,unicode:\"⊶\"},{tex:/\\\\oslash/,unicode:\"⊘\"},{tex:/\\\\otimeshat/,unicode:\"⨶\"},{tex:/\\\\otimes/,unicode:\"⊗\"},{tex:/\\\\Otimes/,unicode:\"⨷\"},{tex:/\\\\oturnedcomma/,unicode:\"̒\"},{tex:/\\\\overbrace/,unicode:\"⏞\"},{tex:/\\\\overbracket/,unicode:\"⎴\"},{tex:/\\\\overleftrightarrow/,unicode:\"⃡\"},{tex:/\\\\overline/,unicode:\"̅\"},{tex:/\\\\overparen/,unicode:\"⏜\"},{tex:/\\\\ovhook/,unicode:\"̉\"},{tex:/\\\\parallelogramblack/,unicode:\"▰\"},{tex:/\\\\parallel/,unicode:\"∥\"},{tex:/\\\\parsim/,unicode:\"⫳\"},{tex:/\\\\partialmeetcontraction/,unicode:\"⪣\"},{tex:/\\\\partial/,unicode:\"∂\"},{tex:/\\\\pentagonblack/,unicode:\"⬟\"},{tex:/\\\\pentagon/,unicode:\"⬠\"},{tex:/\\\\perspcorrespond/,unicode:\"⌆\"},{tex:/\\\\Pi|\\\\P\\{i\\}/,unicode:\"Π\"},{tex:/\\\\Pisymbol\\{ppi020\\}\\{105\\}/,unicode:\"⪞\"},{tex:/\\\\Pisymbol\\{ppi020\\}\\{117\\}/,unicode:\"⪝\"},{tex:/\\\\Pisymbol\\{ppi022\\}\\{87\\}/,unicode:\"ϐ\"},{tex:/\\\\pitchfork/,unicode:\"⋔\"},{tex:/\\\\Planckconst/,unicode:\"ℎ\"},{tex:/\\\\pluseqq/,unicode:\"⩲\"},{tex:/\\\\plushat/,unicode:\"⨣\"},{tex:/\\\\plussim/,unicode:\"⨦\"},{tex:/\\\\plussubtwo/,unicode:\"⨧\"},{tex:/\\\\plustrif/,unicode:\"⨨\"},{tex:/\\\\pointint/,unicode:\"⨕\"},{tex:/\\\\postalmark/,unicode:\"〒\"},{tex:/\\\\precapprox/,unicode:\"≾\"},{tex:/\\\\preccurlyeq/,unicode:\"≼\"},{tex:/\\\\precedesnotsimilar/,unicode:\"⋨\"},{tex:/\\\\preceqq/,unicode:\"⪳\"},{tex:/\\\\preceq/,unicode:\"⪯\"},{tex:/\\\\precnapprox/,unicode:\"⪹\"},{tex:/\\\\precneqq/,unicode:\"⪵\"},{tex:/\\\\precneq/,unicode:\"⪱\"},{tex:/\\\\profline/,unicode:\"⌒\"},{tex:/\\\\profsurf/,unicode:\"⌓\"},{tex:/\\\\PropertyLine/,unicode:\"⅊\"},{tex:/\\\\propto/,unicode:\"∝\"},{tex:/\\\\prurel/,unicode:\"⊰\"},{tex:/\\\\pullback/,unicode:\"⟓\"},{tex:/\\\\pushout/,unicode:\"⟔\"},{tex:/\\\\quarternote/,unicode:\"♩\"},{tex:/\\\\Question/,unicode:\"⁇\"},{tex:/\\\\radiation/,unicode:\"☢\"},{tex:/\\\\rangledot/,unicode:\"⦒\"},{tex:/\\\\rangledownzigzagarrow/,unicode:\"⍼\"},{tex:/\\\\rblkbrbrak/,unicode:\"⦘\"},{tex:/\\\\rbracelend/,unicode:\"⎭\"},{tex:/\\\\rbracemid/,unicode:\"⎬\"},{tex:/\\\\rbraceuend/,unicode:\"⎫\"},{tex:/\\\\rbrace/,unicode:\"\\\\}\"},{tex:/\\\\rBrace/,unicode:\"⦄\"},{tex:/\\\\rbrackextender/,unicode:\"⎥\"},{tex:/\\\\rbracklend/,unicode:\"⎦\"},{tex:/\\\\rbracklrtick/,unicode:\"⦎\"},{tex:/\\\\rbrackubar/,unicode:\"⦌\"},{tex:/\\\\rbrackuend/,unicode:\"⎤\"},{tex:/\\\\rbrackurtick/,unicode:\"⦐\"},{tex:/\\\\rbrbrak/,unicode:\"❳\"},{tex:/\\\\Rbrbrak/,unicode:\"⟭\"},{tex:/\\\\rcurvyangle/,unicode:\"⧽\"},{tex:/\\\\rdiagovfdiag/,unicode:\"⤫\"},{tex:/\\\\rdiagovsearrow/,unicode:\"⤰\"},{tex:/\\\\recorder/,unicode:\"⌕\"},{tex:/\\\\recycle/,unicode:\"♻\"},{tex:/\\\\revangleubar/,unicode:\"⦥\"},{tex:/\\\\revangle/,unicode:\"⦣\"},{tex:/\\\\revemptyset/,unicode:\"⦰\"},{tex:/\\\\ReverseUpEquilibrium/,unicode:\"⥯\"},{tex:/\\\\revnmid/,unicode:\"⫮\"},{tex:/\\\\rfbowtie/,unicode:\"⧒\"},{tex:/\\\\rftimes/,unicode:\"⧕\"},{tex:/\\\\rgroup/,unicode:\"⟯\"},{tex:/\\\\rightanglearc/,unicode:\"⊾\"},{tex:/\\\\rightanglemdot/,unicode:\"⦝\"},{tex:/\\\\rightangle/,unicode:\"∟\"},{tex:/\\\\rightarrowapprox/,unicode:\"⥵\"},{tex:/\\\\rightarrowbackapprox/,unicode:\"⭈\"},{tex:/\\\\RightArrowBar/,unicode:\"⇥\"},{tex:/\\\\rightarrowbsimilar/,unicode:\"⭌\"},{tex:/\\\\rightarrowdiamond/,unicode:\"⤞\"},{tex:/\\\\rightarrowgtr/,unicode:\"⭃\"},{tex:/\\\\rightarrowonoplus/,unicode:\"⟴\"},{tex:/\\\\rightarrowplus/,unicode:\"⥅\"},{tex:/\\\\rightarrowsimilar/,unicode:\"⥴\"},{tex:/\\\\rightarrowsupset/,unicode:\"⭄\"},{tex:/\\\\rightarrowtail/,unicode:\"↣\"},{tex:/\\\\rightarrowtriangle/,unicode:\"⇾\"},{tex:/\\\\rightarrow/,unicode:\"→\"},{tex:/\\\\Rightarrow/,unicode:\"⇒\"},{tex:/\\\\rightbarharpoon/,unicode:\"⥬\"},{tex:/\\\\rightbkarrow/,unicode:\"⤍\"},{tex:/\\\\rightdbltail/,unicode:\"⤜\"},{tex:/\\\\rightdotarrow/,unicode:\"⤑\"},{tex:/\\\\RightDownTeeVector/,unicode:\"⥝\"},{tex:/\\\\RightDownVectorBar/,unicode:\"⥕\"},{tex:/\\\\rightharpoondown/,unicode:\"⇁\"},{tex:/\\\\rightharpoonup/,unicode:\"⇀\"},{tex:/\\\\rightleftarrows/,unicode:\"⇄\"},{tex:/\\\\rightleftharpoonsdown/,unicode:\"⥩\"},{tex:/\\\\rightleftharpoons/,unicode:\"⇌\"},{tex:/\\\\rightleftharpoonsup/,unicode:\"⥨\"},{tex:/\\\\rightleftharpoon/,unicode:\"⥋\"},{tex:/\\\\rightmoon/,unicode:\"☽\"},{tex:/\\\\rightouterjoin/,unicode:\"⟖\"},{tex:/\\\\rightpentagonblack/,unicode:\"⭓\"},{tex:/\\\\rightpentagon/,unicode:\"⭔\"},{tex:/\\\\rightrightarrows/,unicode:\"⇉\"},{tex:/\\\\rightrightharpoons/,unicode:\"⥤\"},{tex:/\\\\rightslice/,unicode:\"⪧\"},{tex:/\\\\rightsquigarrow/,unicode:\"⇝\"},{tex:/\\\\righttail/,unicode:\"⤚\"},{tex:/\\\\RightTeeVector/,unicode:\"⥛\"},{tex:/\\\\rightthreearrows/,unicode:\"⇶\"},{tex:/\\\\rightthreetimes/,unicode:\"⋌\"},{tex:/\\\\RightTriangleBar/,unicode:\"⧐\"},{tex:/\\\\RightUpDownVector/,unicode:\"⥏\"},{tex:/\\\\RightUpTeeVector/,unicode:\"⥜\"},{tex:/\\\\RightUpVectorBar/,unicode:\"⥔\"},{tex:/\\\\RightVectorBar/,unicode:\"⥓\"},{tex:/\\\\rightwhitearrow/,unicode:\"⇨\"},{tex:/\\\\ringplus/,unicode:\"⨢\"},{tex:/\\\\risingdotseq/,unicode:\"≓\"},{tex:/\\\\rmoustache/,unicode:\"⎱\"},{tex:/\\\\RoundImplies/,unicode:\"⥰\"},{tex:/\\\\rparenextender/,unicode:\"⎟\"},{tex:/\\\\rparenlend/,unicode:\"⎠\"},{tex:/\\\\Rparenless/,unicode:\"⦖\"},{tex:/\\\\rparenuend/,unicode:\"⎞\"},{tex:/\\\\rppolint/,unicode:\"⨒\"},{tex:/\\\\rrbracket/,unicode:\"⟧\"},{tex:/\\\\Rrightarrow/,unicode:\"⇛\"},{tex:/\\\\RRightarrow/,unicode:\"⭆\"},{tex:/\\\\rsolbar/,unicode:\"⧷\"},{tex:/\\\\rsqhook/,unicode:\"⫎\"},{tex:/\\\\rtriltri/,unicode:\"⧎\"},{tex:/\\\\rule\\{1em\\}\\{1pt\\}/,unicode:\"―\"},{tex:/\\\\RuleDelayed/,unicode:\"⧴\"},{tex:/\\\\rvboxline/,unicode:\"⎹\"},{tex:/\\\\rvzigzag/,unicode:\"⧙\"},{tex:/\\\\Rvzigzag/,unicode:\"⧛\"},{tex:/\\\\sagittarius/,unicode:\"♐\"},{tex:/\\\\sansLmirrored/,unicode:\"⅃\"},{tex:/\\\\sansLturned/,unicode:\"⅂\"},{tex:/\\\\scorpio/,unicode:\"♏\"},{tex:/\\\\scpolint/,unicode:\"⨓\"},{tex:/\\\\scurel/,unicode:\"⊱\"},{tex:/\\\\searrow/,unicode:\"↘\"},{tex:/\\\\Searrow/,unicode:\"⇘\"},{tex:/\\\\seovnearrow/,unicode:\"⤭\"},{tex:/\\\\setminus/,unicode:\"∖\"},{tex:/\\\\shortdowntack/,unicode:\"⫟\"},{tex:/\\\\shortlefttack/,unicode:\"⫞\"},{tex:/\\\\shortuptack/,unicode:\"⫠\"},{tex:/\\\\shuffle/,unicode:\"⧢\"},{tex:/\\\\similarleftarrow/,unicode:\"⭉\"},{tex:/\\\\similarrightarrow/,unicode:\"⥲\"},{tex:/\\\\sim\\\\joinrel\\\\leadsto/,unicode:\"⟿\"},{tex:/\\\\simminussim/,unicode:\"⩬\"},{tex:/\\\\simplus/,unicode:\"⨤\"},{tex:/\\\\simrdots/,unicode:\"⩫\"},{tex:/\\\\sixteenthnote/,unicode:\"♬\"},{tex:/\\\\smallin/,unicode:\"∊\"},{tex:/\\\\smallni/,unicode:\"∍\"},{tex:/\\\\smashtimes/,unicode:\"⨳\"},{tex:/\\\\smblkdiamond/,unicode:\"⬩\"},{tex:/\\\\smblklozenge/,unicode:\"⬪\"},{tex:/\\\\smeparsl/,unicode:\"⧤\"},{tex:/\\\\smwhitestar/,unicode:\"⭒\"},{tex:/\\\\smwhtcircle/,unicode:\"◦\"},{tex:/\\\\smwhtlozenge/,unicode:\"⬫\"},{tex:/\\\\smwhtsquare/,unicode:\"▫\"},{tex:/\\\\sphericalangle/,unicode:\"∢\"},{tex:/\\\\sphericalangleup/,unicode:\"⦡\"},{tex:/\\\\sqrint/,unicode:\"⨖\"},{tex:/\\\\sqrt\\[3\\]/,unicode:\"∛\"},{tex:/\\\\sqrt\\[4\\]/,unicode:\"∜\"},{tex:/\\\\sqrtbottom/,unicode:\"⎷\"},{tex:/\\\\sqsubseteq/,unicode:\"⊑\"},{tex:/\\\\sqsubsetneq/,unicode:\"⋤\"},{tex:/\\\\sqsubset/,unicode:\"⊏\"},{tex:/\\\\sqsupseteq/,unicode:\"⊒\"},{tex:/\\\\sqsupset/,unicode:\"⊐\"},{tex:/\\\\squarebotblack/,unicode:\"⬓\"},{tex:/\\\\squarecrossfill/,unicode:\"▩\"},{tex:/\\\\squarehfill/,unicode:\"▤\"},{tex:/\\\\squarehvfill/,unicode:\"▦\"},{tex:/\\\\squarellblack/,unicode:\"⬕\"},{tex:/\\\\squarellquad/,unicode:\"◱\"},{tex:/\\\\squarelrquad/,unicode:\"◲\"},{tex:/\\\\squareneswfill/,unicode:\"▨\"},{tex:/\\\\squarenwsefill/,unicode:\"▧\"},{tex:/\\\\squaretopblack/,unicode:\"⬒\"},{tex:/\\\\squareulblack/,unicode:\"◩\"},{tex:/\\\\squareulquad/,unicode:\"◰\"},{tex:/\\\\squareurblack/,unicode:\"⬔\"},{tex:/\\\\squareurquad/,unicode:\"◳\"},{tex:/\\\\squarevfill/,unicode:\"▥\"},{tex:/\\\\squoval/,unicode:\"▢\"},{tex:/\\\\stackrel\\{\\*\\}\\{=\\}/,unicode:\"⩮\"},{tex:/\\\\starequal/,unicode:\"≛\"},{tex:/\\\\steaming/,unicode:\"☕\"},{tex:/\\\\Stigma/,unicode:\"Ϛ\"},{tex:/\\\\stigma/,unicode:\"ϛ\"},{tex:/\\\\subedot/,unicode:\"⫃\"},{tex:/\\\\submult/,unicode:\"⫁\"},{tex:/\\\\subrarr/,unicode:\"⥹\"},{tex:/\\\\subsetapprox/,unicode:\"⫉\"},{tex:/\\\\subsetcirc/,unicode:\"⟃\"},{tex:/\\\\subsetdot/,unicode:\"⪽\"},{tex:/\\\\subseteqq/,unicode:\"⫅\"},{tex:/\\\\subseteq/,unicode:\"⊆\"},{tex:/\\\\subsetneqq/,unicode:\"⫋\"},{tex:/\\\\subsetneq/,unicode:\"⊊\"},{tex:/\\\\subsetplus/,unicode:\"⪿\"},{tex:/\\\\subset/,unicode:\"⊂\"},{tex:/\\\\subsim/,unicode:\"⫇\"},{tex:/\\\\subsub/,unicode:\"⫕\"},{tex:/\\\\subsup/,unicode:\"⫓\"},{tex:/\\\\succapprox/,unicode:\"≿\"},{tex:/\\\\succcurlyeq/,unicode:\"≽\"},{tex:/\\\\succeqq/,unicode:\"⪴\"},{tex:/\\\\succeq/,unicode:\"⪰\"},{tex:/\\\\succnapprox/,unicode:\"⪺\"},{tex:/\\\\succneqq/,unicode:\"⪶\"},{tex:/\\\\succneq/,unicode:\"⪲\"},{tex:/\\\\succnsim/,unicode:\"⋩\"},{tex:/\\\\sumbottom/,unicode:\"⎳\"},{tex:/\\\\sumint/,unicode:\"⨋\"},{tex:/\\\\supdsub/,unicode:\"⫘\"},{tex:/\\\\supedot/,unicode:\"⫄\"},{tex:/\\\\suphsol/,unicode:\"⟉\"},{tex:/\\\\suphsub/,unicode:\"⫗\"},{tex:/\\\\suplarr/,unicode:\"⥻\"},{tex:/\\\\supmult/,unicode:\"⫂\"},{tex:/\\\\supsetapprox/,unicode:\"⫊\"},{tex:/\\\\supsetcirc/,unicode:\"⟄\"},{tex:/\\\\supsetdot/,unicode:\"⪾\"},{tex:/\\\\supseteqq/,unicode:\"⫆\"},{tex:/\\\\supseteq/,unicode:\"⊇\"},{tex:/\\\\supsetneqq/,unicode:\"⫌\"},{tex:/\\\\supsetneq/,unicode:\"⊋\"},{tex:/\\\\supsetplus/,unicode:\"⫀\"},{tex:/\\\\supset/,unicode:\"⊃\"},{tex:/\\\\supsim/,unicode:\"⫈\"},{tex:/\\\\supsub/,unicode:\"⫔\"},{tex:/\\\\supsup/,unicode:\"⫖\"},{tex:/\\\\surfintegral/,unicode:\"∯\"},{tex:/\\\\swarrow/,unicode:\"↙\"},{tex:/\\\\Swarrow/,unicode:\"⇙\"},{tex:/\\\\talloblong/,unicode:\"⫾\"},{tex:/\\\\textasciiacute/,unicode:\"´\"},{tex:/\\\\textasciibreve/,unicode:\"˘\"},{tex:/\\\\textasciicaron/,unicode:\"ˇ\"},{tex:/\\\\textasciidieresis/,unicode:\"¨\"},{tex:/\\\\textasciigrave/,unicode:\"`\"},{tex:/\\\\textasciimacron/,unicode:\"¯\"},{tex:/\\\\textbrokenbar/,unicode:\"¦\"},{tex:/\\\\textbullet/,unicode:\"•\"},{tex:/\\\\textcent/,unicode:\"¢\"},{tex:/\\\\textcopyright/,unicode:\"©\"},{tex:/\\\\textcurrency/,unicode:\"¤\"},{tex:/\\\\textdaggerdbl/,unicode:\"‡\"},{tex:/\\\\textdagger/,unicode:\"†\"},{tex:/\\\\textdollar/,unicode:\"\\\\$\"},{tex:/\\\\textdoublepipe/,unicode:\"ǂ\"},{tex:/\\\\textemdash/,unicode:\"—\"},{tex:/\\\\textendash/,unicode:\"–\"},{tex:/\\\\textexclamdown/,unicode:\"¡\"},{tex:/\\\\textfrac\\{1\\}\\{3\\}/,unicode:\"⅓\"},{tex:/\\\\textfrac\\{1\\}\\{5\\}/,unicode:\"⅕\"},{tex:/\\\\textfrac\\{1\\}\\{6\\}/,unicode:\"⅙\"},{tex:/\\\\textfrac\\{1\\}\\{8\\}/,unicode:\"⅛\"},{tex:/\\\\textfrac\\{2\\}\\{3\\}/,unicode:\"⅔\"},{tex:/\\\\textfrac\\{2\\}\\{5\\}/,unicode:\"⅖\"},{tex:/\\\\textfrac\\{3\\}\\{5\\}/,unicode:\"⅗\"},{tex:/\\\\textfrac\\{3\\}\\{8\\}/,unicode:\"⅜\"},{tex:/\\\\textfrac\\{4\\}\\{5\\}/,unicode:\"⅘\"},{tex:/\\\\textfrac\\{5\\}\\{6\\}/,unicode:\"⅚\"},{tex:/\\\\textfrac\\{5\\}\\{8\\}/,unicode:\"⅝\"},{tex:/\\\\textfrac\\{7\\}\\{8\\}/,unicode:\"⅞\"},{tex:/\\\\texthvlig/,unicode:\"ƕ\"},{tex:/\\\\textmu/,unicode:\"μ\"},{tex:/\\\\textnrleg/,unicode:\"ƞ\"},{tex:/\\\\textonehalf/,unicode:\"½\"},{tex:/\\\\textonequarter/,unicode:\"¼\"},{tex:/\\\\textordfeminine/,unicode:\"ª\"},{tex:/\\\\textordmasculine/,unicode:\"º\"},{tex:/\\\\textparagraph/,unicode:\"¶\"},{tex:/\\\\textperiodcentered/,unicode:\"˙\"},{tex:/\\\\textpertenthousand/,unicode:\"‱\"},{tex:/\\\\textperthousand/,unicode:\"‰\"},{tex:/\\\\textphi/,unicode:\"ɸ\"},{tex:/\\\\textquestiondown/,unicode:\"¿\"},{tex:/\\\\textquotedblleft/,unicode:\"“\"},{tex:/\\\\textquotedblright/,unicode:\"”\"},{tex:/\\\\textquotesingle/,unicode:\"'\"},{tex:/\\\\textregistered/,unicode:\"®\"},{tex:/\\\\textsection/,unicode:\"§\"},{tex:/\\\\textsterling/,unicode:\"£\"},{tex:/\\\\texttheta/,unicode:\"θ\"},{tex:/\\\\textTheta/,unicode:\"ϴ\"},{tex:/\\\\textthreequarters/,unicode:\"¾\"},{tex:/\\\\texttildelow/,unicode:\"˜\"},{tex:/\\\\texttimes/,unicode:\"×\"},{tex:/\\\\texttrademark/,unicode:\"™\"},{tex:/\\\\textturnk/,unicode:\"ʞ\"},{tex:/\\\\textvartheta/,unicode:\"ϑ\"},{tex:/\\\\textvisiblespace/,unicode:\"␣\"},{tex:/\\\\textyen/,unicode:\"¥\"},{tex:/\\\\therefore/,unicode:\"∴\"},{tex:/\\\\thermod/,unicode:\"⧧\"},{tex:/\\\\threedangle/,unicode:\"⟀\"},{tex:/\\\\threeunderdot/,unicode:\"⃨\"},{tex:/\\\\TH|\\\\T\\{H\\}/,unicode:\"Þ\"},{tex:/\\\\tieinfty/,unicode:\"⧝\"},{tex:/\\\\tildetrpl/,unicode:\"≋\"},{tex:/\\\\timesbar/,unicode:\"⨱\"},{tex:/\\\\tminus/,unicode:\"⧿\"},{tex:/\\\\tone\\{11\\}/,unicode:\"˩\"},{tex:/\\\\tone\\{22\\}/,unicode:\"˨\"},{tex:/\\\\tone\\{33\\}/,unicode:\"˧\"},{tex:/\\\\tone\\{44\\}/,unicode:\"˦\"},{tex:/\\\\tone\\{55\\}/,unicode:\"˥\"},{tex:/\\\\topcir/,unicode:\"⫱\"},{tex:/\\\\topfork/,unicode:\"⫚\"},{tex:/\\\\topsemicircle/,unicode:\"◠\"},{tex:/\\\\trapezium/,unicode:\"⏢\"},{tex:/\\\\trianglecdot/,unicode:\"◬\"},{tex:/\\\\triangledown/,unicode:\"▿\"},{tex:/\\\\triangleleftblack/,unicode:\"◭\"},{tex:/\\\\trianglelefteq/,unicode:\"⊴\"},{tex:/\\\\triangleleft/,unicode:\"◃\"},{tex:/\\\\triangleminus/,unicode:\"⨺\"},{tex:/\\\\triangleplus/,unicode:\"⨹\"},{tex:/\\\\triangleq/,unicode:\"≜\"},{tex:/\\\\trianglerightblack/,unicode:\"◮\"},{tex:/\\\\trianglerighteq/,unicode:\"⊵\"},{tex:/\\\\triangleright/,unicode:\"▹\"},{tex:/\\\\triangleserifs/,unicode:\"⧍\"},{tex:/\\\\triangles/,unicode:\"⧌\"},{tex:/\\\\triangletimes/,unicode:\"⨻\"},{tex:/\\\\tripleplus/,unicode:\"⧻\"},{tex:/\\\\trslash/,unicode:\"⫻\"},{tex:/\\\\truestate/,unicode:\"⊧\"},{tex:/\\\\turnangle/,unicode:\"⦢\"},{tex:/\\\\turnednot/,unicode:\"⌙\"},{tex:/\\\\twocaps/,unicode:\"⩋\"},{tex:/\\\\twocups/,unicode:\"⩊\"},{tex:/\\\\twoheaddownarrow/,unicode:\"↡\"},{tex:/\\\\twoheadleftarrowtail/,unicode:\"⬻\"},{tex:/\\\\twoheadleftarrow/,unicode:\"↞\"},{tex:/\\\\twoheadleftdbkarrow/,unicode:\"⬷\"},{tex:/\\\\twoheadmapsfrom/,unicode:\"⬶\"},{tex:/\\\\twoheadrightarrow/,unicode:\"↠\"},{tex:/\\\\twoheaduparrowcircle/,unicode:\"⥉\"},{tex:/\\\\twoheaduparrow/,unicode:\"↟\"},{tex:/\\\\twolowline/,unicode:\"‗\"},{tex:/\\\\twonotes/,unicode:\"♫\"},{tex:/\\\\typecolon/,unicode:\"⦂\"},{tex:/\\\\ubrbrak/,unicode:\"⏡\"},{tex:/\\\\ulblacktriangle/,unicode:\"◤\"},{tex:/\\\\ulcorner/,unicode:\"⌜\"},{tex:/\\\\ultriangle/,unicode:\"◸\"},{tex:/\\\\uminus/,unicode:\"⩁\"},{tex:/\\\\underbar/,unicode:\"̱\"},{tex:/\\\\underbrace/,unicode:\"⏟\"},{tex:/\\\\underbracket/,unicode:\"⎵\"},{tex:/\\\\underleftarrow/,unicode:\"⃮\"},{tex:/\\\\underleftharpoondown/,unicode:\"⃭\"},{tex:/\\\\underline/,unicode:\"̲\"},{tex:/\\\\underparen/,unicode:\"⏝\"},{tex:/\\\\underrightarrow/,unicode:\"⃯\"},{tex:/\\\\underrightharpoondown/,unicode:\"⃬\"},{tex:/\\{\\{\\/\\}\\\\!\\\\!\\{\\/\\}\\}/,unicode:\"⫽\"},{tex:/\\\\uparrowbarred/,unicode:\"⤉\"},{tex:/\\\\UpArrowBar/,unicode:\"⤒\"},{tex:/\\\\uparrowoncircle/,unicode:\"⦽\"},{tex:/\\\\uparrow/,unicode:\"↑\"},{tex:/\\\\Uparrow/,unicode:\"⇑\"},{tex:/\\\\updasharrow/,unicode:\"⇡\"},{tex:/\\\\updownarrowbar/,unicode:\"↨\"},{tex:/\\\\updownarrow/,unicode:\"↕\"},{tex:/\\\\Updownarrow/,unicode:\"⇕\"},{tex:/\\\\updownharpoonleftright/,unicode:\"⥍\"},{tex:/\\\\updownharpoonrightleft/,unicode:\"⥌\"},{tex:/\\\\UpEquilibrium/,unicode:\"⥮\"},{tex:/\\\\upfishtail/,unicode:\"⥾\"},{tex:/\\\\upharpoonleft/,unicode:\"↿\"},{tex:/\\\\upharpoonright/,unicode:\"↾\"},{tex:/\\\\uprightcurvearrow/,unicode:\"⤴\"},{tex:/\\\\Upsilon/,unicode:\"Υ\"},{tex:/\\\\upsilon/,unicode:\"υ\"},{tex:/\\\\upslopeellipsis/,unicode:\"⋰\"},{tex:/\\\\upuparrows/,unicode:\"⇈\"},{tex:/\\\\upupharpoons/,unicode:\"⥣\"},{tex:/\\\\upwhitearrow/,unicode:\"⇧\"},{tex:/\\\\urblacktriangle/,unicode:\"◥\"},{tex:/\\\\urcorner/,unicode:\"⌝\"},{tex:/\\\\urtriangle/,unicode:\"◹\"},{tex:/\\\\utilde/,unicode:\"̰\"},{tex:/\\\\UUparrow/,unicode:\"⟰\"},{tex:/\\\\Uuparrow/,unicode:\"⤊\"},{tex:/\\\\varcarriagereturn/,unicode:\"⏎\"},{tex:/\\\\varclubsuit/,unicode:\"♧\"},{tex:/\\\\varepsilon/,unicode:\"ɛ\"},{tex:/\\\\varhexagonblack/,unicode:\"⬢\"},{tex:/\\\\varhexagonlrbonds/,unicode:\"⌬\"},{tex:/\\\\varhexagon/,unicode:\"⬡\"},{tex:/\\\\varisins/,unicode:\"⋳\"},{tex:/\\\\varkappa/,unicode:\"ϰ\"},{tex:/\\\\varlrtriangle/,unicode:\"⊿\"},{tex:/\\\\varniobar/,unicode:\"⋽\"},{tex:/\\\\varnothing/,unicode:\"∅\"},{tex:/\\\\varphi/,unicode:\"φ\"},{tex:/\\\\varprod/,unicode:\"⨉\"},{tex:/\\\\varrho/,unicode:\"ϱ\"},{tex:/\\\\varsigma/,unicode:\"ς\"},{tex:/\\\\varspadesuit/,unicode:\"♤\"},{tex:/\\\\vartriangleleft/,unicode:\"⊲\"},{tex:/\\\\vartriangleright/,unicode:\"⊳\"},{tex:/\\\\vartriangle/,unicode:\"▵\"},{tex:/\\\\varVdash/,unicode:\"⫦\"},{tex:/\\\\varveebar/,unicode:\"⩡\"},{tex:/\\\\vbraceextender/,unicode:\"⎪\"},{tex:/\\\\vDdash/,unicode:\"⫢\"},{tex:/\\\\veebar/,unicode:\"⊻\"},{tex:/\\\\veemidvert/,unicode:\"⩛\"},{tex:/\\\\veeodot/,unicode:\"⩒\"},{tex:/\\\\veeonwedge/,unicode:\"⩙\"},{tex:/\\\\vertoverlay/,unicode:\"⃒\"},{tex:/\\\\verymuchgreater/,unicode:\"⋙\"},{tex:/\\\\verymuchless/,unicode:\"⋘\"},{tex:/\\\\viewdata/,unicode:\"⌗\"},{tex:/\\\\vlongdash/,unicode:\"⟝\"},{tex:/\\\\volintegral/,unicode:\"∰\"},{tex:/\\\\vphantom\\\\{/,unicode:\"\"},{tex:/\\\\vrectangleblack/,unicode:\"▮\"},{tex:/\\\\Vvdash/,unicode:\"⊪\"},{tex:/\\\\vysmblksquare/,unicode:\"⬝\"},{tex:/\\\\vysmwhtsquare/,unicode:\"⬞\"},{tex:/\\\\vzigzag/,unicode:\"⦚\"},{tex:/\\\\warning/,unicode:\"⚠\"},{tex:/\\\\wasylozenge/,unicode:\"⌑\"},{tex:/\\\\wedgedot/,unicode:\"⟑\"},{tex:/\\\\wedgedoublebar/,unicode:\"⩠\"},{tex:/\\\\wedgemidvert/,unicode:\"⩚\"},{tex:/\\\\wedgeodot/,unicode:\"⩑\"},{tex:/\\\\whitearrowupfrombar/,unicode:\"⇪\"},{tex:/\\\\whiteinwhitetriangle/,unicode:\"⟁\"},{tex:/\\\\whitepointerleft/,unicode:\"◅\"},{tex:/\\\\whitepointerright/,unicode:\"▻\"},{tex:/\\\\whitesquaretickleft/,unicode:\"⟤\"},{tex:/\\\\whitesquaretickright/,unicode:\"⟥\"},{tex:/\\\\whthorzoval/,unicode:\"⬭\"},{tex:/\\\\whtvertoval/,unicode:\"⬯\"},{tex:/\\\\wideangledown/,unicode:\"⦦\"},{tex:/\\\\wideangleup/,unicode:\"⦧\"},{tex:/\\\\widebridgeabove/,unicode:\"⃩\"},{tex:/\\\\Xi|\\\\X\\{i\\}/,unicode:\"Ξ\"},{tex:/\\\\yinyang/,unicode:\"☯\"},{tex:/\\\\zproject/,unicode:\"⨡\"},{tex:/\\\\circeq/,unicode:\"≗\"},{tex:/\\\\OE|\\\\O\\{E\\}/,unicode:\"Œ\"},{tex:/\\\\NG|\\\\N\\{G\\}/,unicode:\"Ŋ\"},{tex:/\\\\eqcirc/,unicode:\"≖\"},{tex:/\\\\lfloor/,unicode:\"⌊\"},{tex:/\\\\rfloor/,unicode:\"⌋\"},{tex:/\\\\invneg/,unicode:\"⌐\"},{tex:/\\\\niobar/,unicode:\"⋾\"},{tex:/\\\\varnis/,unicode:\"⋻\"},{tex:/\\\\invamp/,unicode:\"⅋\"},{tex:/\\\\inttop/,unicode:\"⌠\"},{tex:/\\\\isinvb/,unicode:\"⋸\"},{tex:/\\\\langle/,unicode:\"〈\"},{tex:/\\\\rangle/,unicode:\"〉\"},{tex:/\\\\topbot/,unicode:\"⌶\"},{tex:/\\\\APLinv/,unicode:\"⌹\"},{tex:/\\\\MapsUp/,unicode:\"↥\"},{tex:/\\\\mapsto/,unicode:\"↦\"},{tex:/\\\\APLlog/,unicode:\"⍟\"},{tex:/\\\\daleth/,unicode:\"ℸ\"},{tex:/\\\\sumtop/,unicode:\"⎲\"},{tex:/\\\\diagup/,unicode:\"╱\"},{tex:/\\\\square/,unicode:\"□\"},{tex:/\\\\hslash/,unicode:\"ℏ\"},{tex:/\\\\bumpeq/,unicode:\"≏\"},{tex:/\\\\boxbar/,unicode:\"◫\"},{tex:/\\\\Square/,unicode:\"☐\"},{tex:/\\\\danger/,unicode:\"☡\"},{tex:/\\\\Bumpeq/,unicode:\"≎\"},{tex:/\\\\ddddot/,unicode:\"⃜\"},{tex:/\\\\smiley/,unicode:\"☺\"},{tex:/\\\\eqless/,unicode:\"⋜\"},{tex:/\\\\gtrdot/,unicode:\"⋗\"},{tex:/\\\\Exclam/,unicode:\"‼\"},{tex:/\\\\saturn/,unicode:\"♄\"},{tex:/\\\\uranus/,unicode:\"♅\"},{tex:/\\\\taurus/,unicode:\"♉\"},{tex:/\\\\gemini/,unicode:\"♊\"},{tex:/\\\\cancer/,unicode:\"♋\"},{tex:/\\\\pisces/,unicode:\"♓\"},{tex:/\\\\Supset/,unicode:\"⋑\"},{tex:/\\\\Subset/,unicode:\"⋐\"},{tex:/\\\\diceii/,unicode:\"⚁\"},{tex:/\\\\diceiv/,unicode:\"⚃\"},{tex:/\\\\dicevi/,unicode:\"⚅\"},{tex:/\\\\anchor/,unicode:\"⚓\"},{tex:/\\\\swords/,unicode:\"⚔\"},{tex:/\\\\DJ|\\\\D\\{J\\}/,unicode:\"Đ\"},{tex:/\\\\neuter/,unicode:\"⚲\"},{tex:/\\\\veedot/,unicode:\"⟇\"},{tex:/\\\\rtimes/,unicode:\"⋊\"},{tex:/\\\\ltimes/,unicode:\"⋉\"},{tex:/\\\\bowtie/,unicode:\"⋈\"},{tex:/\\\\bigbot/,unicode:\"⟘\"},{tex:/\\\\cirbot/,unicode:\"⟟\"},{tex:/\\\\LaTeX/,unicode:\"L$^A$T$_E$X\"},{tex:/\\\\delta/,unicode:\"δ\"},{tex:/\\\\image/,unicode:\"⊷\"},{tex:/\\\\llarc/,unicode:\"◟\"},{tex:/\\\\simeq/,unicode:\"≃\"},{tex:/\\\\eqdef/,unicode:\"≝\"},{tex:/\\\\vBarv/,unicode:\"⫩\"},{tex:/\\\\ElzOr/,unicode:\"⩔\"},{tex:/\\\\equiv/,unicode:\"≡\"},{tex:/\\\\space/,unicode:\" \"},{tex:/\\\\isins/,unicode:\"⋴\"},{tex:/\\\\lnsim/,unicode:\"⋦\"},{tex:/\\\\Elzxl/,unicode:\"̵\"},{tex:/\\\\Theta/,unicode:\"Θ\"},{tex:/\\\\barin/,unicode:\"⋶\"},{tex:/\\\\kappa/,unicode:\"κ\"},{tex:/\\\\lblot/,unicode:\"⦉\"},{tex:/\\\\rblot/,unicode:\"⦊\"},{tex:/\\\\frown/,unicode:\"⌢\"},{tex:/\\\\earth/,unicode:\"♁\"},{tex:/\\\\Angle/,unicode:\"⦜\"},{tex:/\\\\Sqcup/,unicode:\"⩏\"},{tex:/\\\\Sqcap/,unicode:\"⩎\"},{tex:/\\\\nhpar/,unicode:\"⫲\"},{tex:/\\\\operp/,unicode:\"⦹\"},{tex:/\\\\sigma/,unicode:\"σ\"},{tex:/\\\\csube/,unicode:\"⫑\"},{tex:/\\\\csupe/,unicode:\"⫒\"},{tex:/\\\\house/,unicode:\"⌂\"},{tex:/\\\\forks/,unicode:\"⫝̸\"},{tex:/\\\\Elzxh/,unicode:\"ħ\"},{tex:/\\\\strns/,unicode:\"⏤\"},{tex:/\\\\eqgtr/,unicode:\"⋝\"},{tex:/\\\\forkv/,unicode:\"⫙\"},{tex:/\\\\relax/,unicode:\"\"},{tex:/\\\\amalg/,unicode:\"⨿\"},{tex:/\\\\infty/,unicode:\"∞\"},{tex:/\\\\VDash/,unicode:\"⊫\"},{tex:/\\\\fltns/,unicode:\"⏥\"},{tex:/\\\\disin/,unicode:\"⋲\"},{tex:/\\\\uplus/,unicode:\"⊎\"},{tex:/\\\\angle/,unicode:\"∠\"},{tex:/\\\\pluto/,unicode:\"♇\"},{tex:/\\\\Vdash/,unicode:\"⊩\"},{tex:/\\\\cdots/,unicode:\"⋯\"},{tex:/\\\\lceil/,unicode:\"⌈\"},{tex:/\\\\sqcap/,unicode:\"⊓\"},{tex:/\\\\smile/,unicode:\"⌣\"},{tex:/\\\\omega/,unicode:\"ω\"},{tex:/\\\\vdots/,unicode:\"⋮\"},{tex:/\\\\arceq/,unicode:\"≘\"},{tex:/\\\\dashv/,unicode:\"⊣\"},{tex:/\\\\vdash/,unicode:\"⊢\"},{tex:/\\\\skull/,unicode:\"☠\"},{tex:/\\\\rceil/,unicode:\"⌉\"},{tex:/\\\\virgo/,unicode:\"♍\"},{tex:/\\\\perps/,unicode:\"⫡\"},{tex:/\\\\zhide/,unicode:\"⧹\"},{tex:/\\\\tplus/,unicode:\"⧾\"},{tex:/\\\\ldots/,unicode:\"…\"},{tex:/\\\\zpipe/,unicode:\"⨠\"},{tex:/\\\\dicei/,unicode:\"⚀\"},{tex:/\\\\venus/,unicode:\"♀\"},{tex:/\\\\varpi/,unicode:\"ϖ\"},{tex:/\\\\Elzrh/,unicode:\"̢\"},{tex:/\\\\Qoppa/,unicode:\"Ϙ\"},{tex:/\\\\aries/,unicode:\"♈\"},{tex:/\\\\upint/,unicode:\"⨛\"},{tex:/\\\\dddot/,unicode:\"⃛\"},{tex:/\\\\sqcup/,unicode:\"⊔\"},{tex:/\\\\qoppa/,unicode:\"ϙ\"},{tex:/\\\\Koppa/,unicode:\"Ϟ\"},{tex:/\\\\awint/,unicode:\"⨑\"},{tex:/\\\\koppa/,unicode:\"ϟ\"},{tex:/\\\\Colon/,unicode:\"∷\"},{tex:/\\\\gescc/,unicode:\"⪩\"},{tex:/\\\\oplus/,unicode:\"⊕\"},{tex:/\\\\asymp/,unicode:\"≍\"},{tex:/\\\\isinE/,unicode:\"⋹\"},{tex:/\\\\Elzrl/,unicode:\"ɼ\"},{tex:/\\\\Sampi/,unicode:\"Ϡ\"},{tex:/\\\\sampi/,unicode:\"ϡ\"},{tex:/\\\\doteq/,unicode:\"≐\"},{tex:/\\\\slash/,unicode:\"∕\"},{tex:/\\\\gnsim/,unicode:\"⋧\"},{tex:/\\\\libra/,unicode:\"♎\"},{tex:/\\\\gsiml/,unicode:\"⪐\"},{tex:/\\\\wedge/,unicode:\"∧\"},{tex:/\\\\dbend/,unicode:\"�\"},{tex:/\\\\dashV/,unicode:\"⫣\"},{tex:/\\\\Dashv/,unicode:\"⫤\"},{tex:/\\\\DashV/,unicode:\"⫥\"},{tex:/\\\\Sigma/,unicode:\"Σ\"},{tex:/\\\\lsimg/,unicode:\"⪏\"},{tex:/\\\\gsime/,unicode:\"⪎\"},{tex:/\\\\lsime/,unicode:\"⪍\"},{tex:/\\\\Equiv/,unicode:\"≣\"},{tex:/\\\\dicev/,unicode:\"⚄\"},{tex:/\\\\Gamma/,unicode:\"Γ\"},{tex:/\\\\gtcir/,unicode:\"⩺\"},{tex:/\\\\ltcir/,unicode:\"⩹\"},{tex:/\\\\jmath/,unicode:\"ȷ\"},{tex:/\\\\ularc/,unicode:\"◜\"},{tex:/\\\\gneqq/,unicode:\"≩\"},{tex:/\\\\gimel/,unicode:\"ℷ\"},{tex:/\\\\lneqq/,unicode:\"≨\"},{tex:/\\\\Omega/,unicode:\"Ω\"},{tex:/\\\\Equal/,unicode:\"⩵\"},{tex:/\\\\aleph/,unicode:\"ℵ\"},{tex:/\\\\nabla/,unicode:\"∇\"},{tex:/\\\\lescc/,unicode:\"⪨\"},{tex:/\\\\simgE/,unicode:\"⪠\"},{tex:/\\\\sharp/,unicode:\"♯\"},{tex:/\\\\imath/,unicode:\"𝚤\"},{tex:/\\\\simlE/,unicode:\"⪟\"},{tex:/\\\\Delta/,unicode:\"Δ\"},{tex:/\\\\urarc/,unicode:\"◝\"},{tex:/\\\\alpha/,unicode:\"α\"},{tex:/\\\\gamma/,unicode:\"γ\"},{tex:/\\\\eqdot/,unicode:\"⩦\"},{tex:/\\\\Euler/,unicode:\"ℇ\"},{tex:/\\\\lrarc/,unicode:\"◞\"},{tex:/\\\\late/,unicode:\"⪭\"},{tex:/\\\\hash/,unicode:\"⋕\"},{tex:/\\\\circ/,unicode:\"∘\"},{tex:/\\\\Game/,unicode:\"⅁\"},{tex:/\\\\surd/,unicode:\"√\"},{tex:/\\\\Lbag/,unicode:\"⟅\"},{tex:/\\\\beth/,unicode:\"ℶ\"},{tex:/\\\\lnot/,unicode:\"¬\"},{tex:/\\\\Finv/,unicode:\"Ⅎ\"},{tex:/\\\\csub/,unicode:\"⫏\"},{tex:/\\\\csup/,unicode:\"⫐\"},{tex:/\\\\succ/,unicode:\"≻\"},{tex:/\\\\prec/,unicode:\"≺\"},{tex:/\\\\Vert/,unicode:\"‖\"},{tex:/\\\\nmid/,unicode:\"∤\"},{tex:/\\\\not</,unicode:\"≮\"},{tex:/\\\\dlsh/,unicode:\"↲\"},{tex:/\\\\Barv/,unicode:\"⫧\"},{tex:/\\\\cdot/,unicode:\"·\"},{tex:/\\\\vBar/,unicode:\"⫨\"},{tex:/\\\\lang/,unicode:\"⟪\"},{tex:/\\\\rang/,unicode:\"⟫\"},{tex:/\\\\Zbar/,unicode:\"Ƶ\"},{tex:/\\\\star/,unicode:\"⋆\"},{tex:/\\\\psur/,unicode:\"⤀\"},{tex:/\\\\pinj/,unicode:\"⤔\"},{tex:/\\\\finj/,unicode:\"⤕\"},{tex:/\\\\bNot/,unicode:\"⫭\"},{tex:/\\\\spot/,unicode:\"⦁\"},{tex:/\\\\limg/,unicode:\"⦇\"},{tex:/\\\\rimg/,unicode:\"⦈\"},{tex:/\\\\obot/,unicode:\"⦺\"},{tex:/\\\\cirE/,unicode:\"⧃\"},{tex:/\\\\XBox/,unicode:\"☒\"},{tex:/\\\\perp/,unicode:\"⊥\"},{tex:/\\\\leqq/,unicode:\"≦\"},{tex:/\\\\dsol/,unicode:\"⧶\"},{tex:/\\\\Rbag/,unicode:\"⟆\"},{tex:/\\\\xsol/,unicode:\"⧸\"},{tex:/\\\\odot/,unicode:\"⊙\"},{tex:/\\\\flat/,unicode:\"♭\"},{tex:/\\\\LVec/,unicode:\"⃖\"},{tex:/\\\\intx/,unicode:\"⨘\"},{tex:/\\\\lvec/,unicode:\"⃐\"},{tex:/\\\\Join/,unicode:\"⨝\"},{tex:/\\\\zcmp/,unicode:\"⨟\"},{tex:/\\\\pfun/,unicode:\"⇸\"},{tex:/\\\\cong/,unicode:\"≅\"},{tex:/\\\\smte/,unicode:\"⪬\"},{tex:/\\\\ffun/,unicode:\"⇻\"},{tex:/\\\\odiv/,unicode:\"⨸\"},{tex:/\\\\fcmp/,unicode:\"⨾\"},{tex:/\\\\mlcp/,unicode:\"⫛\"},{tex:/\\\\ElOr/,unicode:\"⩖\"},{tex:/\\\\dsub/,unicode:\"⩤\"},{tex:/\\\\rsub/,unicode:\"⩥\"},{tex:/\\\\oint/,unicode:\"∮\"},{tex:/\\\\Same/,unicode:\"⩶\"},{tex:/\\\\geqq/,unicode:\"≧\"},{tex:/\\\\prod/,unicode:\"∏\"},{tex:/\\\\lneq/,unicode:\"⪇\"},{tex:/\\\\gneq/,unicode:\"⪈\"},{tex:/\\\\upin/,unicode:\"⟒\"},{tex:/\\\\not>/,unicode:\"≯\"},{tex:/_\\\\ast/,unicode:\"∗\"},{tex:/\\\\iota/,unicode:\"ι\"},{tex:/\\\\zeta/,unicode:\"ζ\"},{tex:/\\\\beta/,unicode:\"β\"},{tex:/\\\\male/,unicode:\"♂\"},{tex:/\\\\nisd/,unicode:\"⋺\"},{tex:/\\\\quad/,unicode:\" \"},{tex:/\\\\text/,unicode:\"\"},{tex:/\\\\glj/,unicode:\"⪤\"},{tex:/\\\\int/,unicode:\"∫\"},{tex:/\\\\cup/,unicode:\"∪\"},{tex:/\\\\QED/,unicode:\"∎\"},{tex:/\\\\cap/,unicode:\"∩\"},{tex:/\\\\gla/,unicode:\"⪥\"},{tex:/\\\\Psi/,unicode:\"Ψ\"},{tex:/\\\\Phi/,unicode:\"Φ\"},{tex:/\\\\sum/,unicode:\"∑\"},{tex:/\\\\Rsh/,unicode:\"↱\"},{tex:/\\\\vee/,unicode:\"∨\"},{tex:/\\\\Lsh/,unicode:\"↰\"},{tex:/\\\\sim/,unicode:\"∼\"},{tex:/\\\\lhd/,unicode:\"◁\"},{tex:/\\\\LHD/,unicode:\"◀\"},{tex:/\\\\rhd/,unicode:\"▷\"},{tex:/\\\\phi/,unicode:\"ϕ\"},{tex:/\\\\lgE/,unicode:\"⪑\"},{tex:/\\\\glE/,unicode:\"⪒\"},{tex:/\\\\RHD/,unicode:\"▶\"},{tex:/\\\\cat/,unicode:\"⁀\"},{tex:/\\\\Yup/,unicode:\"⅄\"},{tex:/\\\\vec/,unicode:\"⃑\"},{tex:/\\\\div/,unicode:\"÷\"},{tex:/\\\\mid/,unicode:\"∣\"},{tex:/\\\\mho/,unicode:\"℧\"},{tex:/\\\\psi/,unicode:\"ψ\"},{tex:/\\\\chi/,unicode:\"χ\"},{tex:/\\\\top/,unicode:\"⊤\"},{tex:/\\\\Not/,unicode:\"⫬\"},{tex:/\\\\tau/,unicode:\"τ\"},{tex:/\\\\smt/,unicode:\"⪪\"},{tex:/\\\\rho/,unicode:\"ρ\"},{tex:/\\\\sun/,unicode:\"☼\"},{tex:/\\\\Cap/,unicode:\"⋒\"},{tex:/\\\\lat/,unicode:\"⪫\"},{tex:/\\\\leo/,unicode:\"♌\"},{tex:/\\\\Sun/,unicode:\"☉\"},{tex:/\\\\Cup/,unicode:\"⋓\"},{tex:/\\\\eta/,unicode:\"η\"},{tex:/\\\\Top/,unicode:\"⫪\"},{tex:/\\\\bij/,unicode:\"⤖\"},{tex:/\\\\eth/,unicode:\"ƪ\"},{tex:/\\\\geq/,unicode:\"≥\"},{tex:/\\\\nis/,unicode:\"⋼\"},{tex:/\\\\leq/,unicode:\"≤\"},{tex:/\\\\le/,unicode:\"≤\"},{tex:/\\\\ll/,unicode:\"≪\"},{tex:/\\\\dj/,unicode:\"đ\"},{tex:/\\\\in/,unicode:\"∈\"},{tex:/\\\\-/,unicode:\"\"},{tex:/\\\\th/,unicode:\"þ\"},{tex:/\\\\wp/,unicode:\"℘\"},{tex:/\\\\aa/,unicode:\"å\"},{tex:/\\\\ss/,unicode:\"ß\"},{tex:/\\\\ae/,unicode:\"æ\"},{tex:/\\\\ng/,unicode:\"ŋ\"},{tex:/\\\\mu/,unicode:\"μ\"},{tex:/''''/,unicode:\"⁗\"},{tex:/\\\\pi/,unicode:\"π\"},{tex:/\\\\gg/,unicode:\"≫\"},{tex:/\\\\xi/,unicode:\"ξ\"},{tex:/\\\\ni/,unicode:\"∋\"},{tex:/\\\\nu/,unicode:\"ν\"},{tex:/\\\\pm/,unicode:\"±\"},{tex:/\\\\mp/,unicode:\"∓\"},{tex:/\\\\wr/,unicode:\"≀\"},{tex:/\\\\\\./,unicode:\"̇\"},{tex:/\\\\dh/,unicode:\"ð\"},{tex:/\\\\oe/,unicode:\"œ\"},{tex:/\\\\url/,unicode:\"\\\\XXurl\"},{tex:/\\\\u/,unicode:\"̆\"},{tex:/\\\\XXurl/,unicode:\"\\\\url\"},{tex:/\\\\L/,unicode:\"Ł\"},{tex:/\\\\c/,unicode:\"¸\"},{tex:/\\\\i/,unicode:\"ı\"},{tex:/\\\\k/,unicode:\"˛\"},{tex:/\\\\H/,unicode:\"˝\"},{tex:/\\\\\"/,unicode:\"̈\"},{tex:/\\\\v/,unicode:\"̌\"},{tex:/\\\\o/,unicode:\"ø\"},{tex:/\\\\`/,unicode:\"̀\"},{tex:/\\\\'/,unicode:\"́\"},{tex:/\\\\~/,unicode:\"̃\"},{tex:/\\\\r/,unicode:\"˚\"},{tex:/\\\\O/,unicode:\"Ø\"},{tex:/\\\\=/,unicode:\"̄\"},{tex:/\\\\l/,unicode:\"ł\"},{tex:/'''/,unicode:\"‴\"},{tex:/\\\\textasciitilde/,unicode:\"\\\\~\"},{tex:/\\\\backslash|\\\\textbackslash/,unicode:\"ࡱ\"}].map((e=>{const d=e.tex.source;return{tex:/^[a-zA-Z\\\\]+$/.test(d)?new RegExp(`{(${d})}|${d}\\\\s|${d}(?=\\\\W|\\\\_)`,\"g\"):new RegExp(`{(${d})}|${d}{}|${d}`,\"g\"),unicode:e.unicode}})),o=[{source:[\"mvbook\",\"book\"],target:[\"inbook\",\"bookinbook\",\"suppbook\"],fields:[{source:\"author\",target:\"author\"},{source:\"author\",target:\"bookauthor\"}]},{source:[\"mvbook\"],target:[\"book\",\"inbook\",\"bookinbook\",\"suppbook\"],fields:[{source:\"title\",target:\"maintitle\"},{source:\"subtitle\",target:\"mainsubtitle\"},{source:\"titleaddon\",target:\"maintitleaddon\"}]},{source:[\"mvcollection\",\"mvreference\"],target:[\"collection\",\"reference\",\"incollection\",\"inreference\",\"suppcollection\"],fields:[{source:\"title\",target:\"maintitle\"},{source:\"subtitle\",target:\"mainsubtitle\"},{source:\"titleaddon\",target:\"maintitleaddon\"}]},{source:[\"mvproceedings\"],target:[\"proceedings\",\"inproceedings\"],fields:[{source:\"title\",target:\"maintitle\"},{source:\"subtitle\",target:\"mainsubtitle\"},{source:\"titleaddon\",target:\"maintitleaddon\"}]},{source:[\"book\"],target:[\"inbook\",\"bookinbook\",\"suppbook\"],fields:[{source:\"title\",target:\"booktitle\"},{source:\"subtitle\",target:\"booksubtitle\"},{source:\"titleaddon\",target:\"booktitleaddon\"}]},{source:[\"collection\",\"reference\"],target:[\"incollection\",\"inreference\",\"suppcollection\"],fields:[{source:\"title\",target:\"booktitle\"},{source:\"subtitle\",target:\"booksubtitle\"},{source:\"titleaddon\",target:\"booktitleaddon\"}]},{source:[\"proceedings\"],target:[\"inproceedings\"],fields:[{source:\"title\",target:\"booktitle\"},{source:\"subtitle\",target:\"booksubtitle\"},{source:\"titleaddon\",target:\"booktitleaddon\"}]},{source:[\"periodical\"],target:[\"article\",\"suppperiodical\"],fields:[{source:\"title\",target:\"journaltitle\"},{source:\"subtitle\",target:\"journalsubtitle\"}]}],r=[[\"\\\\textbf{\",\"strong\"],[\"\\\\mkbibbold{\",\"strong\"],[\"\\\\mkbibitalic{\",\"em\"],[\"\\\\mkbibemph{\",\"em\"],[\"\\\\textit{\",\"em\"],[\"\\\\emph{\",\"em\"],[\"\\\\textsc{\",\"smallcaps\"],[\"\\\\enquote{\",\"enquote\"],[\"\\\\mkbibquote{\",\"enquote\"],[\"\\\\textsubscript{\",\"sub\"],[\"\\\\textsuperscript{\",\"sup\"]],s=[[\"\\\\scshape\",\"smallcaps\"],[\"\\\\sc\",\"smallcaps\"],[\"\\\\bfseries\",\"strong\"],[\"\\\\bf\",\"strong\"],[\"\\\\itshape\",\"em\"],[\"\\\\it\",\"em\"]],f=[[\"\\\\url{\",\"url\"]],l={\"&\":\"&\",\"%\":\"%\",$:\"$\",\"#\":\"#\",_:\"_\",\"{\":\"{\",\"}\":\"}\",\",\":\",\",\"~\":\"~\",\"^\":\"^\",\"'\":\"'\",\";\":\" \",\"\\\\\":\"\\n\"};class x{constructor(e,d,t=!1){this.string=e,this.config=d,this.cpMode=t,this.braceLevel=0,this.slen=e.length,this.si=0,this.json=[],this.braceClosings=[],this.currentMarks=[],this.inCasePreserve=null,this.addNewTextNode()}removeIfEmptyTextNode(){this.textNode&&(0===this.textNode.text.length?this.json.pop():this.config.includeUnusedNocase||this.removeUnusedNocase())}checkAndAddNewTextNode(){this.textNode&&this.textNode.text.length>0&&(this.config.includeUnusedNocase||this.removeUnusedNocase(),this.addNewTextNode())}removeUnusedNocase(){var e;if((null===(e=this.textNode)||void 0===e?void 0:e.marks)&&this.textNode.text===this.textNode.text.toLowerCase()){const e=this.textNode.marks.filter((e=>\"nocase\"!==e.type));e.length?this.textNode.marks=e:delete this.textNode.marks}}addNewTextNode(){const e={type:\"text\",text:\"\"};this.json.push(e),this.textNode=e}stringParser(){let e,d;e:for(;this.si<this.slen;)switch(this.string[this.si]){case\"\\\\\":for(let e of r)if(this.string.substring(this.si,this.si+e[0].length)===e[0]){this.braceLevel++,this.si+=e[0].length,this.checkAndAddNewTextNode(),this.cpMode&&(this.inCasePreserve===this.braceLevel-1&&\"{\"===this.string[this.si-1]&&\"nocase\"===this.currentMarks[this.currentMarks.length-1].type?(this.currentMarks.pop(),this.inCasePreserve=null):this.currentMarks.find((e=>\"nocase\"===e.type))||(this.currentMarks.push({type:\"nocase\"}),this.inCasePreserve=this.braceLevel)),this.currentMarks.find((d=>d.type===e[1]))?this.braceClosings.push(!1):(this.currentMarks.push({type:e[1]}),this.textNode.marks=this.currentMarks.slice(),this.braceClosings.push(!0));continue e}for(let e of s)if(this.string.substring(this.si,this.si+e[0].length)===e[0]&&[\" \",\"\\\\\"].includes(this.string.substring(this.si+e[0].length,this.si+e[0].length+1))){this.si+=e[0].length,\" \"===this.string.substring(this.si,this.si+1)&&this.si++,this.currentMarks.find((d=>d.type===e[1]))||this.currentMarks.push({type:e[1]}),this.textNode.marks=this.currentMarks.slice();continue e}for(let e of f)if(this.string.substring(this.si,this.si+e[0].length)===e[0]){this.checkAndAddNewTextNode(),this.textNode.marks=this.currentMarks.slice(),this.textNode.marks.push({type:e[1]}),this.si+=e[0].length;let d=this.si,t=0;for(;d<this.slen&&(\"}\"!==this.string[d]||t>0);){switch(this.string[d]){case\"{\":t++;break;case\"}\":t--}d++}this.textNode.text=this.string.substring(this.si,d),this.addNewTextNode(),this.si=d+1;continue e}if(l[this.string[this.si+1]])this.textNode.text+=l[this.string[this.si+1]],this.si+=2;else{for(this.si++;this.si<this.slen&&this.string[this.si].match(\"[a-zA-Z0-9]\");)this.si++;\"{\"===this.string[this.si]&&(this.braceLevel++,this.braceClosings.push(!1),this.si++)}break;case\"_\":switch(this.string[this.si+1]){case\"{\":this.checkAndAddNewTextNode(),this.braceLevel++,this.si+=2,this.currentMarks.find((e=>\"sub\"===e.type))?this.braceClosings.push(!1):(this.currentMarks.push({type:\"sub\"}),this.textNode.marks=this.currentMarks.slice(),this.braceClosings.push(!0));break;case\"\\\\\":this.si++;break;default:this.checkAndAddNewTextNode(),this.textNode.marks=this.currentMarks.slice(),this.textNode.marks.push({type:\"sub\"}),this.textNode.text=this.string[this.si+1],this.addNewTextNode(),this.currentMarks.length&&(this.textNode.marks=this.currentMarks.slice()),this.si+=2}break;case\"`\":\"`\"===this.string[this.si+1]?(this.checkAndAddNewTextNode(),this.braceLevel++,this.si+=2,this.currentMarks.find((e=>\"enquote\"===e.type))?this.braceClosings.push(!1):(this.currentMarks.push({type:\"enquote\"}),this.textNode.marks=this.currentMarks.slice(),this.braceClosings.push(!0))):(this.textNode.text+=this.string[this.si],this.si++);break;case\"'\":if(\"'\"===this.string[this.si+1]){if(this.braceLevel--,!(this.braceLevel>-1))return[{type:\"text\",text:this.string}];this.braceClosings.pop()&&(this.checkAndAddNewTextNode(),this.currentMarks.pop(),this.currentMarks.length?this.textNode.marks=this.currentMarks.slice():delete this.textNode.marks),this.si+=2}else this.textNode.text+=this.string[this.si],this.si++;break;case\"^\":switch(this.string[this.si+1]){case\"{\":this.checkAndAddNewTextNode(),this.braceLevel++,this.si+=2,this.currentMarks.find((e=>\"sup\"===e.type))?this.braceClosings.push(!1):(this.currentMarks.push({type:\"sup\"}),this.textNode.marks=this.currentMarks.slice(),this.braceClosings.push(!0));break;case\"\\\\\":this.si++;break;default:this.checkAndAddNewTextNode(),this.textNode.marks=this.currentMarks.slice(),this.textNode.marks.push({type:\"sup\"}),this.textNode.text=this.string[this.si+1],this.addNewTextNode(),this.currentMarks.length&&(this.textNode.marks=this.currentMarks.slice()),this.si+=2}break;case\"{\":if(\"}\"===this.string[this.si+1]){this.si+=2;continue}this.braceLevel++,this.inCasePreserve||!this.cpMode?this.braceClosings.push(!1):(this.inCasePreserve=this.braceLevel,this.checkAndAddNewTextNode(),this.currentMarks.push({type:\"nocase\"}),this.textNode.marks=this.currentMarks.slice(),this.braceClosings.push(!0)),this.si++;break;case\"}\":if(this.braceLevel--,!(this.braceLevel>-1))return[{type:\"text\",text:this.string}];if(this.braceClosings.pop()){this.checkAndAddNewTextNode();let e=this.currentMarks.pop();if(this.inCasePreserve===this.braceLevel+1)for(this.inCasePreserve=null;\"nocase\"!==e.type&&this.currentMarks.length;)e=this.currentMarks.pop();this.currentMarks.length?this.textNode.marks=this.currentMarks.slice():delete this.textNode.marks}this.si++;break;case\"$\":case\"\\r\":this.si++;break;case\"~\":this.textNode.text+=\" \",this.si++;break;case\"ࡰ\":for(this.removeIfEmptyTextNode(),d=this.si+1;d<this.slen&&\"ࡰ\"!==this.string[d];)d++;e=this.string.substring(this.si+1,d),this.json.push({type:\"variable\",attrs:{variable:e}}),this.addNewTextNode(),this.si=d+1;break;case\"ࡱ\":this.textNode.text+=\"\\\\\",this.si++;break;case\"\\n\":[\"\\r\",\"\\n\"].includes(this.string[this.si+1])&&\"\\n\"!==this.string[this.si-1]?this.textNode.text+=\"\\n\\n\":/\\S/.test(this.string[this.si-1])&&/\\S/.test(this.string[this.si+1])&&(this.textNode.text+=\" \"),this.si++;break;default:this.textNode.text+=this.string[this.si],this.si++}return this.braceLevel>0?[{type:\"text\",text:this.string}]:(this.removeIfEmptyTextNode(),this.json)}get output(){return this.stringParser()}}class h{constructor(e,d){this.nameString=e.trim(),this.config=d,this.nameDict={},this._particle=[],this._suffix=[]}parseName(){let e=this.splitTexString(this.nameString,\",\");if(e.length>1&&this.nameString.includes(\"=\"))this.parseExtendedName(e);else if(3===e.length)this.processVonLast(this.splitTexString(e[0].replace(/[{}]/g,\"\")),this.splitTexString(e[1])),this.processFirstMiddle(this.splitTexString(e[2]));else if(2===e.length)this.processVonLast(this.splitTexString(e[0].replace(/[{}]/g,\"\"))),this.processFirstMiddle(this.splitTexString(e[1]));else if(1===e.length){let d=this.splitTexString(this.nameString);if(1===d.length)if(\"{\"===this.nameString[0]&&\"}\"===this.nameString[this.nameString.length-1]&&this.nameString.includes(\"=\")&&this.nameString.includes(\",\")&&this.nameString.includes(\" \")&&(this.nameString.includes(\"given\")||this.nameString.includes(\"family\")))e=this.splitTexString(this.nameString.slice(1,this.nameString.length-1),\",\"),this.parseExtendedName(e);else{let e=this._reformLiteral(d[0]);e.length&&(this.nameDict.literal=e)}else{let e=this.splitAt(d),t=e[0],u=e[1];if(0===u.length&&t.length>1){let e=t.pop();u.push(e)}this.processFirstMiddle(t),this.processVonLast(u)}}else this.nameDict.literal=this._reformLiteral(this.nameString.trim())}parseExtendedName(e){e.forEach((e=>{let d=e.trim().replace(/^\"|\"$/g,\"\").split(\"=\"),t=d.shift().trim().toLowerCase();[\"family\",\"given\",\"prefix\",\"suffix\"].includes(t)?this.nameDict[t]=this._reformLiteral(d.join(\"=\").trim()):\"useprefix\"===t&&(\"true\"===d.join(\"\").trim().toLowerCase()?this.nameDict.useprefix=!0:this.nameDict.useprefix=!1)}))}get output(){return this.parseName(),!!Object.keys(this.nameDict).length&&this.nameDict}splitTexString(e,d=\"[\\\\s~]+\"){let t=0,u=!1,i=0,c=[],n=e.length,a=0;for(;a<n;){switch(e.charAt(a)){case\"{\":t+=1;break;case\"}\":t-=1;break;case'\"':u=!u;break;case\"\\\\\":a++;break;default:if(0===t&&!1===u&&a>0){let t=e.slice(a).match(RegExp(`^${d}`));if(t){let d=t[0].length;a+d<n&&(c.push(e.slice(i,a)),i=a+d)}}}a++}return i<n&&c.push(e.slice(i)),c}processFirstMiddle(e){this.nameDict.given=this._reformLiteral(e.join(\" \").trim())}processVonLast(e,d=[]){let t=this.rsplitAt(e),u=t[0],i=t[1];u.length>0&&0===i.length&&i.push(u.pop()),u.length&&(this.nameDict.prefix=this._reformLiteral(u.join(\" \").trim()),this.nameDict.useprefix=!0),d.length&&(this.nameDict.suffix=this._reformLiteral(d.join(\" \").trim())),this.nameDict.family=this._reformLiteral(i.join(\" \").trim())}findFirstLowerCaseWord(e){for(let d=0;d<e.length;d++){let t=e[d];if(t===t.toLowerCase())return d}return e.length}splitAt(e){const d=this.findFirstLowerCaseWord(e);return[e.slice(0,d),e.slice(d)]}rsplitAt(e){const d=this.findFirstLowerCaseWord(e.slice().reverse()),t=e.length-d;return[e.slice(0,t),e.slice(t)]}_reformLiteral(e){return new x(e,this.config).output}}class b{constructor(e){this.groups=[],this.groupType=\"jabref4\",this.warnings=[],this.entries=e,this.pos=0,this.fileDirectory=\"\",this.input=\"\",this.stringStarts=[[\"jabref-meta: databaseType:bibtex;\",()=>{this.groupType=\"jabref4\"}],[\"jabref-meta: databaseType:biblatex;\",()=>{this.groupType=\"jabref4\"}],[\"jabref-meta: groupsversion:3;\",()=>{this.groupType=\"jabref3\"}],[\"jabref-meta: grouping:\",()=>this.readGroupInfo(\"jabref4.1\")],[\"jabref-meta: groupstree:\",()=>this.readGroupInfo(\"\")],[\"jabref-meta: fileDirectory:\",()=>this.readFileDirectory()]]}checkString(e){this.input=e,this.pos=0,this.stringStarts.find((d=>{let t=e.indexOf(d[0],this.pos);return!(t<0)&&(this.pos=t+d[0].length,d[1](),!0)}))}readGroupInfo(e){switch(e&&(this.groupType=e),this.groupType){case\"jabref3\":this.readJabref3();break;case\"jabref4\":case\"jabref4.1\":this.readJabref4()}}readFileDirectory(){let e=\"\",d=this.input?this.input:\"\",t=this.pos;for(;d.length>t&&\";\"!==d[t];)e+=d[t],t++;this.fileDirectory=e,this.pos=t}readJabref3(){for(;this.input.length>this.pos&&\"\\r\\n \".indexOf(this.input[this.pos])>=0;)this.pos++;let e=this.input.substring(this.pos).replace(/[\\r\\n]/g,\"\").replace(/\\\\\\\\\\\\;/g,\" \").replace(/\\\\;/g,\" \").split(\";\");e=e.map((e=>e.replace(/\\u2005/g,\";\")));let d={0:{name:\"\",references:[],groups:[]}};for(let t of e){if(\"\"===t)continue;let e=t.match(/^([0-9])\\s+([^:]+):(.*)/);if(!e)return;let u=parseInt(e[1]),i=e[2],c=e[3];const n=c?c.split(\" \").filter((e=>e)):[];let a=n.shift(),o=n.shift();if(0!==u)switch(d[u]={name:a,groups:[],references:n},d[u-1].groups.push(d[u]),\"ExplicitGroup\"!=i&&this.warnings.push({type:\"unsupported_jabref_group\",group_type:i}),o){case\"0\":break;case\"1\":d[u].references=d[u].references.filter((e=>d[u-1].references.includes(e)));break;case\"2\":d[u].references=[...new Set([...d[u].references,...d[u-1].references])]}}this.groups=d[0].groups}clearGroups(e){for(const d of e)d.references=[],this.clearGroups(d.groups||[])}readJabref4(){this.readJabref3(),\"jabref4.1\"===this.groupType&&this.clearGroups(this.groups),this.entries.forEach((e=>{if(!e.unknown_fields||!e.unknown_fields.groups||!e.entry_key)return;let d=e.unknown_fields.groups.reduce(((e,d)=>{if(\"text\"in d){const t=d.text;e+=((d.marks||[]).find((e=>\"sub\"===e.type))?\"_\":\"\")+t}return e}),\"\").trim();e.unknown_fields&&delete e.unknown_fields.groups,d.length&&d.split(/\\s*,\\s*/).forEach((d=>{let t=this.find(d);t&&t.references.push(e.entry_key)}))}))}find(e,d){if(!(d=d||this.groups))return!1;for(let t=0;t<d.length;t++){if(d[t].name===e)return d[t];let u=this.find(e,d[t].groups);if(u)return u}return!1}}function p(e,d=\"and\"){let t,u=[],i=/([^\\s{}]+|\\s|{|})/g,c=0,n=0;for(;null!==(t=i.exec(e));){const e=!(!t||!t.length)&&t[0];if(!1===e)break;switch(n===u.length&&u.push(\"\"),e){case\"{\":c+=1,u[n]+=e;break;case\"}\":c-=1,u[n]+=e;break;case d:0===c?n++:u[n]+=e;break;default:u[n]+=e}}return u}class m{constructor(e){\"string\"!=typeof e&&(console.warn(\"Wrong format for EDTFParser\",e),e=\"\"),this.string=e,this.type=\"None\",this.valid=!0,this.values=[],this.uncertain=!1,this.approximate=!1,this.parts=[]}init(){return this.checkCertainty(),this.splitInterval(),{type:this.type,valid:this.valid,values:\"Interval\"===this.type?this.getPartValues():this.values,cleanedString:this.cleanString(),uncertain:this.uncertain,approximate:this.approximate}}getPartValues(){if(0===this.parts.length){return[]}if(1===this.parts.length){return this.parts[0].values}return[this.parts[0].values,this.parts[1].values]}cleanString(){let e=\"\";return this.parts.length?e=this.parts.map((e=>e.cleanString())).join(\"/\"):this.values&&(e=this.values.reduce(((e,d,t)=>0===t?\"number\"==typeof d&&d>0?String(d).padStart(4,\"0\"):String(d):t<3?`${e}-${String(d).padStart(2,\"0\")}`:3===t?`${e}T${String(d).padStart(2,\"0\")}`:t<6?`${e}:${String(d).padStart(2,\"0\")}`:`${e}${d}`),\"\")),this.uncertain&&(e+=\"?\"),this.approximate&&(e+=\"~\"),e}checkCertainty(){\"~\"===this.string.slice(-1)&&(this.approximate=!0,this.string=this.string.slice(0,-1)),\"?\"===this.string.slice(-1)&&(this.uncertain=!0,this.string=this.string.slice(0,-1))}splitInterval(){let e=this.string.split(\"/\");if(e.length>2)this.valid=!1;else if(2===e.length){this.type=\"Interval\";let d=!1;e.forEach((e=>{let t=new m(e);t.init(),t.valid||\"Open\"===t.type?(this.parts.push(t),t.valid&&(d=!0)):this.valid=!1})),d||(this.valid=!1)}else this.splitDateParts()}splitDateParts(){if([\"\",\"..\"].includes(this.string))return this.valid=!1,this.values=[],void(this.type=\"Open\");let e=this.string.replace(/^y/,\"\").split(/(?!^)-/);if(e.length>3)return void(this.valid=!1);let d=!0,t=e[0];if(!/^-?[0-9]*u{0,4}$/.test(t))return void(this.valid=!1);if(\"u\"===t.slice(-1)){d=!1,this.type=\"Interval\";let e=new m(t.replace(/u/g,\"0\"));e.init();let u=new m(t.replace(/u/g,\"9\"));u.init(),this.parts=[e,u],e.valid&&u.valid||(this.valid=!1)}else this.values=[parseInt(t)],this.type=\"Date\";if(e.length<2)return;let u=e[1];if(!d&&\"uu\"!==u)return void(this.valid=!1);let i=parseInt(u.replace(\"uu\",\"01\"));if(!/^[0-2][0-9]|uu$/.test(u)||i<1||i>12&&i<21||i>24)return void(this.valid=!1);if(\"uu\"===u&&(d=!1),d&&this.values.push(i),e.length<3)return void(i>12&&(this.type=\"Season\"));if(i>12)return void(this.valid=!1);let c=e[2].split(\"T\"),n=c[0];if(!d&&\"uu\"!==n)return void(this.valid=!1);let a=parseInt(n.replace(\"uu\",\"01\"));if(!/^[0-3][0-9]$|uu/.test(u)||a<1||a>31)return void(this.valid=!1);if(\"uu\"===n&&(d=!1),d){let e=new Date(`${t}/${u}/${n}`);if(e.getFullYear()!==parseInt(t)||e.getMonth()+1!==i||e.getDate()!==a)return void(this.valid=!1);this.values.push(a)}if(c.length<2)return;if(!d)return void(this.valid=!1);let o=c[1].slice(0,8).split(\":\").map((e=>parseInt(e)));if(3!==o.length||o[0]<0||o[0]>23||o[1]<0||o[1]>59||o[2]<0||o[2]>59)return void(this.valid=!1);if(this.values=this.values.concat(o),8===c[1].length)return;let r=c[1].slice(8);if(\"Z\"===r)return void this.values.push(\"Z\");let s=RegExp(\"^[+-][0-1][0-9]:[0-1][0-9]$\"),f=r.split(\":\").map((e=>parseInt(e)));!s.test(r)||f[0]<-11||f[0]>14||f[1]<0||f[1]>59?this.valid=!1:this.values.push(r)}}function g(e){return new m(e).init()}const y=/\\\\/;class k{constructor(e,d={}){this.startPosition=-1,this.endPosition=-1,this.input=e,this.config=d,this.pos=0,this.entries=[],this.bibDB={},this.currentKey=!1,this.currentType=\"\",this.errors=[],this.warnings=[],this.comments=[],this.strings={},this.months={JAN:\"01\",FEB:\"02\",MAR:\"03\",APR:\"04\",MAY:\"05\",JUN:\"06\",JUL:\"07\",AUG:\"08\",SEP:\"09\",OCT:\"10\",NOV:\"11\",DEC:\"12\"},this.groupParser=new b(this.entries),this.groups=!1,this.jabrefMeta={},this.crossrefs={}}isWhitespace(e){return\" \"==e||\"\\r\"==e||\"\\t\"==e||\"\\n\"==e}error(e){this.errors.push(Object.assign({},e,{line:this.input.slice(0,this.pos).split(\"\\n\").length}))}warning(e){this.warnings.push(Object.assign({},e,{line:this.input.slice(0,this.pos).split(\"\\n\").length}))}match(e,d={skipWhitespace:!0}){!0!==d.skipWhitespace&&\"leading\"!==d.skipWhitespace||this.skipWhitespace(),this.input.substring(this.pos,this.pos+e.length)==e?this.pos+=e.length:this.error({type:\"token_mismatch\",expected:e,found:this.input.substring(this.pos,this.pos+e.length)}),!0!==d.skipWhitespace&&\"trailing\"!==d.skipWhitespace||this.skipWhitespace()}tryMatch(e){return this.skipWhitespace(),this.input.substring(this.pos,this.pos+e.length)==e}skipWhitespace(){for(;this.isWhitespace(this.input[this.pos]);)this.pos++;if(\"%\"==this.input[this.pos]){for(;\"\\n\"!=this.input[this.pos];)this.pos++;this.skipWhitespace()}}skipToNext(){for(;this.input.length>this.pos&&\"@\"!=this.input[this.pos];)this.pos++;return this.input.length!=this.pos}valueBraces(){let e=0;this.match(\"{\",{skipWhitespace:\"leading\"});let d=\"\";for(;this.pos<this.input.length;){switch(this.input[this.pos]){case\"\\\\\":d+=this.input.substring(this.pos,this.pos+2),this.pos++;break;case\"}\":if(0===e)return this.match(\"}\"),d;d+=\"}\",e--;break;case\"{\":d+=\"{\",e++;break;default:d+=this.input[this.pos]}this.pos++}return this.errors.push({type:\"unexpected_eof\"}),d}valueQuotes(){this.match('\"',{skipWhitespace:\"leading\"});let e=\"\";for(;this.pos<this.input.length;){switch(this.input[this.pos]){case\"\\\\\":e+=this.input.substring(this.pos,this.pos+2),this.pos++;break;case'\"':return this.match('\"'),e;default:e+=this.input[this.pos]}this.pos++}return this.errors.push({type:\"unexpected_eof\"}),e}singleValue(){if(this.tryMatch(\"{\"))return this.valueBraces();if(this.tryMatch('\"'))return this.valueQuotes();{let e=this.key();const d=e.toUpperCase();if(this.strings[e.toUpperCase()])return this.strings[e.toUpperCase()];if(d in this.months)return this.months[d];if(e.match(\"^[0-9]+$\"))return e;{const d={type:\"undefined_variable\",variable:e};return this.currentEntry&&(d.entry=this.currentEntry.entry_key),this.currentKey&&(d.key=this.currentKey),this.warning(d),`ࡰ${e}ࡰ`}}}value(e=!1){let d=[];for(d.push(this.singleValue());this.tryMatch(\"#\");)this.match(\"#\"),d.push(this.singleValue());let t=d.join(\"\");return e||(t=t.replace(/[\\t ]+/g,\" \").trim()),t}key(e=!1){let d=this.pos;for(;;){if(this.pos==this.input.length){this.error({type:\"runaway_key\"});break}if([\"(\",\")\",\",\",\"{\",\"}\",\" \",\"=\",\"\\t\",\"\\n\"].includes(this.input[this.pos])){let t=this.input.substring(d,this.pos);return e&&\",\"!=this.input[this.pos]&&(this.skipWhitespace(),\",\"!=this.input[this.pos])?(this.pos=d,\"\"):t}this.pos++}return\"\"}keyEqualsValue(e=!1){let d=this.key();if(!d.length){const e={type:\"cut_off_citation\"};return this.currentEntry&&(e.entry=this.currentEntry.entry_key,this.currentEntry.incomplete=!0),this.error(e),!1}if(this.currentKey=d.toLowerCase(),this.tryMatch(\"=\")){this.match(\"=\");const d=this.value(e);return!!this.currentKey&&[this.currentKey,d]}{const e={type:\"missing_equal_sign\"};this.currentEntry&&(e.entry=this.currentEntry.entry_key),this.currentKey&&(e.key=this.currentKey),this.error(e)}return!1}keyValueList(){let e=this.keyEqualsValue();if(!e||!this.currentRawFields)return void this.entries.pop();let d=this.currentRawFields;for(d[e[0]]=e[1];this.tryMatch(\",\")&&(this.match(\",\"),!this.tryMatch(\"}\")&&!this.tryMatch(\")\"));){if(e=this.keyEqualsValue(),!e){const e={type:\"key_value_error\"};this.currentEntry&&(e.entry=this.currentEntry.entry_key),this.error(e);break}d[e[0]]=e[1]}}processFields(){if(!this.currentEntry)return;let e,i,c=this.currentRawFields,n=this.currentEntry.fields;if(\"crossref\"in c&&(this.crossrefs[this.currentEntry.entry_key]=c.crossref,delete c.crossref),c.date?e=c.date:c.year&&c.month?(i=c.month,isNaN(parseInt(i))&&i.toUpperCase()in this.months?i=this.months[i.toUpperCase()]:void 0===i.split(\"~\").find((e=>isNaN(parseInt(e))))&&(i=i.replace(/~/g,\"-\")),e=`${c.year}-${i}`):c.year&&(e=`${c.year}`),e){let d=g(e);if(d.valid)n.date=d.cleanedString,delete c.year,delete c.month;else{let e,d,t;c.date?(e=\"date\",d=c.date,t=this.errors):c.year&&c.month?(e=\"year,month\",d=[c.year,c.month],t=this.warnings):(e=\"year\",d=c.year,t=this.warnings);const u={type:\"unknown_date\",field_name:e,value:d};this.currentEntry&&(u.entry=this.currentEntry.entry_key),t.push(u)}}let a=!0;if(c.langid&&c.langid.length){let e=c.langid.toLowerCase().trim();[\"english\",\"american\",\"british\",\"usenglish\",\"ukenglish\",\"canadian\",\"australian\",\"newzealand\"].some((d=>e===d))||(a=!1)}else if(c.language){let e=this._reformKey(c.language,\"langid\");e.length&&(n.langid=e,\"string\"!=typeof e||[\"usenglish\",\"ukenglish\",\"caenglish\",\"auenglish\",\"nzenglish\"].includes(e)||(a=!1))}e:for(let e in c){if(\"date\"===e||[\"year\",\"month\"].includes(e)&&!this.config.processUnknown)continue e;let i;e in u&&(i=u[e]);let o,r,s=\"\";if(i){if(c[i]){const d={type:\"alias_creates_duplicate_field\",field:e,alias_of:i,value:c[e],alias_of_value:c[i]};this.currentEntry&&(d.entry=this.currentEntry.entry_key),this.warning(d);continue e}s=Object.keys(d).find((e=>d[e].biblatex===i))||\"\"}else s=Object.keys(d).find((t=>d[t].biblatex===e))||\"\";let f=t[this.currentEntry.bib_type];if(s.length)if(f.required.includes(s)||f.optional.includes(s)||f.eitheror.includes(s))o=n,r=d[s].type;else{if(\"entrysubtype\"===s&&f[\"biblatex-subtype\"]){r=d[s].type,o={};continue e}{const t={type:\"unexpected_field\",field_name:e};if(this.currentEntry&&(t.entry=this.currentEntry.entry_key),this.warning(t),!this.config.processUnexpected)continue e;this.currentEntry&&!this.currentEntry.unexpected_fields&&(this.currentEntry.unexpected_fields={}),o=this.currentEntry&&this.currentEntry.unexpected_fields?this.currentEntry.unexpected_fields:{},r=d[s].type}}else{const d={type:\"unknown_field\",field_name:e};if(this.currentEntry&&(d.entry=this.currentEntry.entry_key),this.warning(d),!this.config.processUnknown)continue e;this.currentEntry&&!this.currentEntry.unknown_fields&&(this.currentEntry.unknown_fields={}),o=this.currentEntry&&this.currentEntry.unknown_fields?this.currentEntry.unknown_fields:{},r=this.config.processUnknown&&\"object\"==typeof this.config.processUnknown&&this.config.processUnknown[e]?this.config.processUnknown[e]:\"f_literal\",s=e}let l,x=c[e];switch(r){case\"f_date\":l=g(x),l.valid?o[s]=l.cleanedString:this.currentEntry&&this.error({type:\"unknown_date\",entry:this.currentEntry.entry_key,field_name:s,value:x});break;case\"f_integer\":case\"f_literal\":case\"f_long_literal\":o[s]=this._reformLiteral(x);break;case\"f_key\":l=this._reformKey(x,s),l.length&&(o[s]=l);break;case\"l_range\":o[s]=this._reformRange(x);break;case\"f_title\":o[s]=this._reformLiteral(x,a);break;case\"f_uri\":if(this.config.processInvalidURIs||this._checkURI(x))o[s]=this._reformURI(x);else{const e={type:\"unknown_uri\",field_name:s,value:x};this.currentEntry&&(e.entry=this.currentEntry.entry_key),this.error(e)}break;case\"f_verbatim\":o[s]=x;break;case\"l_key\":o[s]=p(x).map((e=>this._reformKey(e,s)));break;case\"l_tag\":o[s]=x.split(/[,;]/).map((e=>e.trim()));break;case\"l_literal\":o[s]=p(x).map((e=>this._reformLiteral(e.trim())));break;case\"l_name\":o[s]=this._reformNameList(x);break;default:console.warn(`Unrecognized type: ${r}!`)}}}_reformKey(e,t){let u=e.trim().toLowerCase(),i=d[t];if(n[t]&&n[t][u]&&(u=n[t][u]),\"options\"in i){if(!Array.isArray(i.options)){let e=Object.keys(i.options).find((e=>i.options[e].biblatex===u));return e||\"\"}if(i.options.includes(u))return u}if(\"strict\"in i&&i.strict){const d={type:\"unknown_key\",field_name:t,value:e};return this.currentEntry&&(d.entry=this.currentEntry.entry_key),this.warning(d),\"\"}return this._reformLiteral(e)}_checkURI(e){return/^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(e)}_reformURI(e){return e.replace(/\\\\/g,\"\")}_reformNameList(e){return p(e).map((e=>{const d=new h(e,this.config).output;return d||!1})).filter((e=>\"object\"==typeof e))}_reformRange(e){return e.split(\",\").map((e=>{let d=e.split(\"--\");return d.length>1?[this._reformLiteral(d.shift().trim()),this._reformLiteral(d.join(\"--\").trim())]:(d=e.split(\"-\"),d.length>1?[this._reformLiteral(d.shift().trim()),this._reformLiteral(d.join(\"-\").trim())]:[this._reformLiteral(e.trim())])}))}_reformLiteral(e,d=!1){return new x(e,this.config,d).output}bibType(){var e;let d=this.currentType,u=(null===(e=this.currentRawFields)||void 0===e?void 0:e.entrysubtype)||!1;if(d in i){const e=i[d];d=e[0],e.length>1&&(u=e[1])}let c=Object.keys(t).find((e=>t[e].biblatex===d&&(!u||t[e][\"biblatex-subtype\"]===u)));return void 0===c&&(this.warning({type:\"unknown_type\",type_name:d}),c=\"misc\"),c}createNewEntry(){const e={bib_type:\"\",entry_key:this.key(!0),fields:{}};this.currentRawFields={},this.entries.push(e),e&&e.entry_key.length&&this.match(\",\"),this.keyValueList(),this.endPosition=this.pos,e.bib_type=this.bibType(),this.config.includeLocation&&(e.location={start:this.startPosition,end:this.endPosition}),this.config.includeRawText&&(e.raw_text=this.input.substring(this.startPosition,this.endPosition+1)),this.currentEntry=e,this.processFields()}directive(){return this.match(\"@\"),this.currentType=this.key(),this.currentType.length?(this.currentType=this.currentType.toLowerCase(),\"@\"+this.currentType):null}string(){const e=this.keyEqualsValue(!0);e&&(this.strings[e[0].toUpperCase()]=e[1])}preamble(){this.value()}replaceTeXChars(){let e=this.input,d=a.length;for(let t=0;t<d&&y.test(e);t++){let d=a[t];e=e.replace(d.tex,d.unicode)}this.input=e.replace(/ +(?= )/g,\"\")}stepThroughBibtex(){for(;this.skipToNext();)this.parseNext()}stepThroughBibtexAsync(){return this.skipToNext()?new Promise((e=>e(this.parseNext()))).then((()=>this.stepThroughBibtexAsync())):Promise.resolve(null)}parseNext(){let e;this.startPosition=this.pos;let d=this.directive();d&&(this.tryMatch(\"{\")?(this.match(\"{\"),e=\"}\"):this.tryMatch(\"(\")?(this.match(\"(\"),e=\")\"):\"@comment\"===d?e=null:(this.match(\"{\"),e=\"}\"),\"@string\"==d?this.string():\"@preamble\"==d?this.preamble():\"@comment\"==d?this.parseComment(!e):this.createNewEntry(),e&&this.match(e))}parseComment(e){let d=this.pos,t=1;if(e)for(;this.input.length>this.pos&&\"\\n\"!=this.input[this.pos];)this.pos++;else for(;this.input.length>this.pos&&t>0;){switch(this.input[this.pos]){case\"{\":t+=1;break;case\"}\":t-=1}this.pos++}if(e||0!==t)return;this.pos--;let u=this.input.substring(d,this.pos);if(this.groupParser.checkString(u),this.groupParser.groups.length)this.groups=this.groupParser.groups;else{u=u.trim();const e=u.match(/^jabref-meta: ([a-zA-Z]+):(.*);$/);e&&\"groupsversion\"!==e[1]?this.jabrefMeta[e[1]]=e[2].replace(/\\\\(.)/g,\"$1\"):u&&this.config.processComments&&this.comments.push(u)}}createBibDB(){this.entries.forEach(((e,d)=>{this.bibDB[d+1]=e}))}cleanDB(){this.bibDB=JSON.parse(JSON.stringify(this.bibDB).replace(/\\u0871/,\"\\\\\\\\\").replace(/\\u0870/,\"\"))}get output(){return console.warn(\"BibLatexParser.output will be deprecated in biblatex-csl-converter 2.x. Use BibLatexParser.parse() instead.\"),this.replaceTeXChars(),this.stepThroughBibtex(),this.createBibDB(),this.cleanDB(),this.bibDB}_resolveCrossRef(e,d){var u;const i=this.entries.find((d=>d.entry_key===e)),c=this.entries.find((e=>e.entry_key===d)),{fields:n,bib_type:a}=i,{fields:r,bib_type:s}=c,f={},l=null!==(u=this.config.crossRefInheritance)&&void 0!==u?u:o;for(const e of l)if(e.source.includes(s)&&e.target.includes(a))for(const d of e.fields){const e=d.target,u=t[a];(u.required.includes(e)||u.optional.includes(e)||u.eitheror.includes(e))&&(f[e]=r[d.source])}const x={...r,...f,...n};i.fields=x}_resoveAllCrossRefs(){const e=new Set(Object.keys(this.crossrefs));for(;e.size>0;){const d=new Set([...e.values()].filter((d=>!e.has(this.crossrefs[d]))));if(0===d.size){const d=e.values().next().value;return void this.errors.push({type:\"circular_crossref\",entry:d})}const t=d.values().next().value,u=this.crossrefs[t];if(!this.entries.some((e=>e.entry_key===u)))return void this.errors.push({type:\"unknown_crossref\",entry:t,value:u});this._resolveCrossRef(t,u),d.delete(t),e.delete(t)}}parsed(){return this.createBibDB(),this._resoveAllCrossRefs(),this.cleanDB(),{entries:this.bibDB,errors:this.errors,warnings:this.warnings,comments:this.comments,strings:this.strings,jabref:{groups:this.groups,meta:this.jabrefMeta}}}parse(){return this.replaceTeXChars(),this.stepThroughBibtex(),this.parsed()}async parseAsync(){return this.replaceTeXChars(),await this.stepThroughBibtexAsync(),this.parsed()}}const w=[[/\\\\/g,\"\\\\textbackslash \"],[/\\{/g,\"\\\\{ \"],[/\\}/g,\"\\\\} \"],[/&/g,\"{\\\\&}\"],[/%/g,\"{\\\\%}\"],[/\\$/g,\"{\\\\$}\"],[/#/g,\"{\\\\#}\"],[/_/g,\"{\\\\_}\"],[/~/g,\"{\\\\textasciitilde}\"],[/\\^/g,\"{\\\\textasciicircum}\"],[/ and /g,\" {and} \"],[/\\uFFFD/g,\"\"]],v={strong:{open:\"\\\\mkbibbold{\",close:\"}\",verbatim:!1},em:{open:\"\\\\mkbibitalic{\",close:\"}\",verbatim:!1},smallcaps:{open:\"\\\\textsc{\",close:\"}\",verbatim:!1},enquote:{open:\"\\\\enquote{\",close:\"}\",verbatim:!1},nocase:{open:\"{{\",close:\"}}\",verbatim:!1},sub:{open:\"_{\",close:\"}\",verbatim:!1},sup:{open:\"^{\",close:\"}\",verbatim:!1},math:{open:\"$\",close:\"$\",verbatim:!1},url:{open:\"\\\\url{\",close:\"}\",verbatim:!0}};\n/*!\n * XRegExp 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2007-present MIT License\n */\nconst E={astral:!1,namespacing:!0},_={};let C={},q={};const L=[],S={default:/\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|\\(\\?(?:[:=!]|<[=!])|[?*+]\\?|{\\d+(?:,\\d*)?}\\??|[\\s\\S]/,class:/\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|[\\s\\S]/},R=/\\$(?:\\{([^\\}]+)\\}|<([^>]+)>|(\\d\\d?|[\\s\\S]?))/g,A=void 0===/()??/.exec(\"\")[1],N=void 0!==/x/.flags;function T(e){let d=!0;try{if(new RegExp(\"\",e),\"y\"===e){\"..\"===\".a\".replace(new RegExp(\"a\",\"gy\"),\".\")&&(d=!1)}}catch(e){d=!1}return d}const z=T(\"d\"),$=T(\"s\"),D=T(\"u\"),I=T(\"y\"),O={d:z,g:!0,i:!0,m:!0,s:$,u:D,y:I},P=$?/[^dgimsuy]+/g:/[^dgimuy]+/g;function Y(e,d,t,u,i){if(e.xregexp={captureNames:d},i)return e;if(e.__proto__)e.__proto__=Q.prototype;else for(const d in Q.prototype)e[d]=Q.prototype[d];return e.xregexp.source=t,e.xregexp.flags=u?u.split(\"\").sort().join(\"\"):u,e}function U(e){return e.replace(/([\\s\\S])(?=[\\s\\S]*\\1)/g,\"\")}function j(e,d){if(!Q.isRegExp(e))throw new TypeError(\"Type RegExp expected\");const t=e.xregexp||{};let u=function(e){return N?e.flags:/\\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(e))[1]}(e),i=\"\",c=\"\",n=null,a=null;return(d=d||{}).removeG&&(c+=\"g\"),d.removeY&&(c+=\"y\"),c&&(u=u.replace(new RegExp(`[${c}]+`,\"g\"),\"\")),d.addG&&(i+=\"g\"),d.addY&&(i+=\"y\"),i&&(u=U(u+i)),d.isInternalOnly||(void 0!==t.source&&(n=t.source),null!=t.flags&&(a=i?U(t.flags+i):t.flags)),e=Y(new RegExp(d.source||e.source,u),function(e){return!(!e.xregexp||!e.xregexp.captureNames)}(e)?t.captureNames.slice(0):null,n,a,d.isInternalOnly)}function B(e){return parseInt(e,16)}function G(e,d,t){const u=e.index+e[0].length,i=e.input[e.index-1],c=e.input[u];return/^[()|]$/.test(i)||/^[()|]$/.test(c)||0===e.index||u===e.input.length||/\\(\\?(?:[:=!]|<[=!])$/.test(e.input.substring(e.index-4,e.index))||function(e,d,t){const u=\"\\\\(\\\\?#[^)]*\\\\)\",i=\"#[^#\\\\n]*\",c=\"[?*+]|{\\\\d+(?:,\\\\d*)?}\";return(t.includes(\"x\")?new RegExp(`^(?:\\\\s|${i}|${u})*(?:${c})`):new RegExp(`^(?:${u})*(?:${c})`)).test(e.slice(d))}(e.input,u,t)?\"\":\"(?:)\"}function M(e){return parseInt(e,10).toString(16)}function H(e,d){return Object.prototype.toString.call(e)===`[object ${d}]`}function V(e){if(null==e)throw new TypeError(\"Cannot convert null or undefined to object\");return e}function F(e){for(;e.length<4;)e=`0${e}`;return e}function K(e){const d={};return H(e,\"String\")?(Q.forEach(e,/[^\\s,]+/,(e=>{d[e]=!0})),d):e}function Z(e){if(!/^[\\w$]$/.test(e))throw new Error(\"Flag must be a single character A-Za-z0-9_$\");O[e]=!0}function W(e,d,t,u,i){let c=L.length;const n=e[t];let a,o,r=null;for(;c--;)if(o=L[c],!(o.leadChar&&o.leadChar!==n||o.scope!==u&&\"all\"!==o.scope||o.flag&&!d.includes(o.flag))&&(a=Q.exec(e,o.regex,t,\"sticky\"),a)){r={matchLength:a[0].length,output:o.handler.call(i,a,u,d),reparse:o.reparse};break}return r}function X(e){E.astral=e}function J(e){E.namespacing=e}function Q(e,d){if(Q.isRegExp(e)){if(void 0!==d)throw new TypeError(\"Cannot supply flags when copying a RegExp\");return j(e)}if(e=void 0===e?\"\":String(e),d=void 0===d?\"\":String(d),Q.isInstalled(\"astral\")&&!d.includes(\"A\")&&(d+=\"A\"),q[e]||(q[e]={}),!q[e][d]){const t={hasNamedCapture:!1,captureNames:[]};let u,i=\"default\",c=\"\",n=0;const a=function(e,d){if(U(d)!==d)throw new SyntaxError(`Invalid duplicate regex flag ${d}`);e=e.replace(/^\\(\\?([\\w$]+)\\)/,((e,t)=>{if(/[dgy]/.test(t))throw new SyntaxError(`Cannot use flags dgy in mode modifier ${e}`);return d=U(d+t),\"\"}));for(const e of d)if(!O[e])throw new SyntaxError(`Unknown regex flag ${e}`);return{pattern:e,flags:d}}(e,d);let o=a.pattern;const r=a.flags;for(;n<o.length;){do{u=W(o,r,n,i,t),u&&u.reparse&&(o=o.slice(0,n)+u.output+o.slice(n+u.matchLength))}while(u&&u.reparse);if(u)c+=u.output,n+=u.matchLength||1;else{const[e]=Q.exec(o,S[i],n,\"sticky\");c+=e,n+=e.length,\"[\"===e&&\"default\"===i?i=\"class\":\"]\"===e&&\"class\"===i&&(i=\"default\")}}q[e][d]={pattern:c.replace(/(?:\\(\\?:\\))+/g,\"(?:)\"),flags:r.replace(P,\"\"),captures:t.hasNamedCapture?t.captureNames:null}}const t=q[e][d];return Y(new RegExp(t.pattern,t.flags),t.captures,e,d)}Q.prototype=new RegExp,Q.version=\"5.1.1\",Q._clipDuplicates=U,Q._hasNativeFlag=T,Q._dec=B,Q._hex=M,Q._pad4=F,Q.addToken=(e,d,t)=>{t=t||{};let{optionalFlags:u}=t;if(t.flag&&Z(t.flag),u){u=u.split(\"\");for(const e of u)Z(e)}L.push({regex:j(e,{addG:!0,addY:I,isInternalOnly:!0}),handler:d,scope:t.scope||\"default\",flag:t.flag,reparse:t.reparse,leadChar:t.leadChar}),Q.cache.flush(\"patterns\")},Q.cache=(e,d)=>(C[e]||(C[e]={}),C[e][d]||(C[e][d]=Q(e,d))),Q.cache.flush=e=>{\"patterns\"===e?q={}:C={}},Q.escape=e=>String(V(e)).replace(/[\\\\\\[\\]{}()*+?.^$|]/g,\"\\\\$&\").replace(/[\\s#\\-,]/g,(e=>`\\\\u${F(M(e.charCodeAt(0)))}`)),Q.exec=(e,d,t,u)=>{let i,c=\"g\",n=!1,a=!1;n=I&&!!(u||d.sticky&&!1!==u),n?c+=\"y\":u&&(a=!0,c+=\"FakeY\"),d.xregexp=d.xregexp||{};const o=d.xregexp[c]||(d.xregexp[c]=j(d,{addG:!0,addY:n,source:a?`${d.source}|()`:void 0,removeY:!1===u,isInternalOnly:!0}));return t=t||0,o.lastIndex=t,i=_.exec.call(o,e),a&&i&&\"\"===i.pop()&&(i=null),d.global&&(d.lastIndex=i?o.lastIndex:0),i},Q.forEach=(e,d,t)=>{let u,i=0,c=-1;for(;u=Q.exec(e,d,i);)t(u,++c,e,d),i=u.index+(u[0].length||1)},Q.globalize=e=>j(e,{addG:!0}),Q.install=e=>{e=K(e),!E.astral&&e.astral&&X(!0),!E.namespacing&&e.namespacing&&J(!0)},Q.isInstalled=e=>!!E[e],Q.isRegExp=e=>\"[object RegExp]\"===Object.prototype.toString.call(e),Q.match=(e,d,t)=>{const u=d.global&&\"one\"!==t||\"all\"===t,i=(u?\"g\":\"\")+(d.sticky?\"y\":\"\")||\"noGY\";d.xregexp=d.xregexp||{};const c=d.xregexp[i]||(d.xregexp[i]=j(d,{addG:!!u,removeG:\"one\"===t,isInternalOnly:!0})),n=String(V(e)).match(c);return d.global&&(d.lastIndex=\"one\"===t&&n?n.index+n[0].length:0),u?n||[]:n&&n[0]},Q.matchChain=(e,d)=>function e(t,u){const i=d[u].regex?d[u]:{regex:d[u]},c=[];function n(e){if(i.backref){const d=`Backreference to undefined group: ${i.backref}`,t=isNaN(i.backref);if(t&&Q.isInstalled(\"namespacing\")){if(!e.groups||!(i.backref in e.groups))throw new ReferenceError(d)}else if(!e.hasOwnProperty(i.backref))throw new ReferenceError(d);const u=t&&Q.isInstalled(\"namespacing\")?e.groups[i.backref]:e[i.backref];c.push(u||\"\")}else c.push(e[0])}for(const e of t)Q.forEach(e,i.regex,n);return u!==d.length-1&&c.length?e(c,u+1):c}([e],0),Q.replace=(e,d,t,u)=>{const i=Q.isRegExp(d),c=d.global&&\"one\"!==u||\"all\"===u,n=(c?\"g\":\"\")+(d.sticky?\"y\":\"\")||\"noGY\";let a=d;i?(d.xregexp=d.xregexp||{},a=d.xregexp[n]||(d.xregexp[n]=j(d,{addG:!!c,removeG:\"one\"===u,isInternalOnly:!0}))):c&&(a=new RegExp(Q.escape(String(d)),\"g\"));const o=_.replace.call(V(e),a,t);return i&&d.global&&(d.lastIndex=0),o},Q.replaceEach=(e,d)=>{for(const t of d)e=Q.replace(e,t[0],t[1],t[2]);return e},Q.split=(e,d,t)=>_.split.call(V(e),d,t),Q.test=(e,d,t,u)=>!!Q.exec(e,d,t,u),Q.uninstall=e=>{e=K(e),E.astral&&e.astral&&X(!1),E.namespacing&&e.namespacing&&J(!1)},Q.union=(e,d,t)=>{const u=(t=t||{}).conjunction||\"or\";let i,c,n=0;function a(e,d,t){const u=c[n-i];if(d){if(++n,u)return`(?<${u}>`}else if(t)return`\\\\${+t+i}`;return e}if(!H(e,\"Array\")||!e.length)throw new TypeError(\"Must provide a nonempty array of patterns to merge\");const o=/(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/g,r=[];for(const d of e)Q.isRegExp(d)?(i=n,c=d.xregexp&&d.xregexp.captureNames||[],r.push(Q(d.source).source.replace(o,a))):r.push(Q.escape(d));const s=\"none\"===u?\"\":\"|\";return Q(r.join(s),d)},_.exec=function(e){const d=this.lastIndex,t=RegExp.prototype.exec.apply(this,arguments);if(t){if(!A&&t.length>1&&t.includes(\"\")){const d=j(this,{removeG:!0,isInternalOnly:!0});String(e).slice(t.index).replace(d,((...e)=>{const d=e.length;for(let u=1;u<d-2;++u)void 0===e[u]&&(t[u]=void 0)}))}if(this.xregexp&&this.xregexp.captureNames){let e=t;Q.isInstalled(\"namespacing\")&&(t.groups=Object.create(null),e=t.groups);for(let d=1;d<t.length;++d){const u=this.xregexp.captureNames[d-1];u&&(e[u]=t[d])}}else!t.groups&&Q.isInstalled(\"namespacing\")&&(t.groups=void 0);this.global&&!t[0].length&&this.lastIndex>t.index&&(this.lastIndex=t.index)}return this.global||(this.lastIndex=d),t},_.test=function(e){return!!_.exec.call(this,e)},_.match=function(e){if(Q.isRegExp(e)){if(e.global){const d=String.prototype.match.apply(this,arguments);return e.lastIndex=0,d}}else e=new RegExp(e);return _.exec.call(e,V(this))},_.replace=function(e,d){const t=Q.isRegExp(e);let u,i,c;return t?(e.xregexp&&({captureNames:i}=e.xregexp),u=e.lastIndex):e+=\"\",c=H(d,\"Function\")?String(this).replace(e,((...e)=>{if(i){let d;Q.isInstalled(\"namespacing\")?(d=Object.create(null),e.push(d)):(e[0]=new String(e[0]),[d]=e);for(let t=0;t<i.length;++t)i[t]&&(d[i[t]]=e[t+1])}return d(...e)})):String(V(this)).replace(e,((...e)=>String(d).replace(R,(function(d,t,u,c){t=t||u;const n=H(e[e.length-1],\"Object\")?4:3,a=e.length-n;if(t){if(/^\\d+$/.test(t)){const d=+t;if(d<=a)return e[d]||\"\"}const u=i?i.indexOf(t):-1;if(u<0)throw new SyntaxError(`Backreference to undefined group ${d}`);return e[u+1]||\"\"}if(\"\"===c||\" \"===c)throw new SyntaxError(`Invalid token ${d}`);if(\"&\"===c||0==+c)return e[0];if(\"$\"===c)return\"$\";if(\"`\"===c)return e[e.length-1].slice(0,e[e.length-2]);if(\"'\"===c)return e[e.length-1].slice(e[e.length-2]+e[0].length);if(c=+c,!isNaN(c)){if(c>a)throw new SyntaxError(`Backreference to undefined group ${d}`);return e[c]||\"\"}throw new SyntaxError(`Invalid token ${d}`)})))),t&&(e.global?e.lastIndex=0:e.lastIndex=u),c},_.split=function(e,d){if(!Q.isRegExp(e))return String.prototype.split.apply(this,arguments);const t=String(this),u=[],i=e.lastIndex;let c,n=0;return d=(void 0===d?-1:d)>>>0,Q.forEach(t,e,(e=>{e.index+e[0].length>n&&(u.push(t.slice(n,e.index)),e.length>1&&e.index<t.length&&Array.prototype.push.apply(u,e.slice(1)),c=e[0].length,n=e.index+c)})),n===t.length?e.test(\"\")&&!c||u.push(\"\"):u.push(t.slice(n)),e.lastIndex=i,u.length>d?u.slice(0,d):u},Q.addToken(/\\\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|x(?![\\dA-Fa-f]{2}))/,((e,d)=>{if(\"B\"===e[1]&&\"default\"===d)return e[0];throw new SyntaxError(`Invalid escape ${e[0]}`)}),{scope:\"all\",leadChar:\"\\\\\"}),Q.addToken(/\\\\u{([\\dA-Fa-f]+)}/,((e,d,t)=>{const u=B(e[1]);if(u>1114111)throw new SyntaxError(`Invalid Unicode code point ${e[0]}`);if(u<=65535)return`\\\\u${F(M(u))}`;if(D&&t.includes(\"u\"))return e[0];throw new SyntaxError(\"Cannot use Unicode code point above \\\\u{FFFF} without flag u\")}),{scope:\"all\",leadChar:\"\\\\\"}),Q.addToken(/\\(\\?#[^)]*\\)/,G,{leadChar:\"(\"}),Q.addToken(/\\s+|#[^\\n]*\\n?/,G,{flag:\"x\"}),$||Q.addToken(/\\./,(()=>\"[\\\\s\\\\S]\"),{flag:\"s\",leadChar:\".\"}),Q.addToken(/\\\\k<([^>]+)>/,(function(e){const d=isNaN(e[1])?this.captureNames.indexOf(e[1])+1:+e[1],t=e.index+e[0].length;if(!d||d>this.captureNames.length)throw new SyntaxError(`Backreference to undefined group ${e[0]}`);return`\\\\${d}${t===e.input.length||isNaN(e.input[t])?\"\":\"(?:)\"}`}),{leadChar:\"\\\\\"}),Q.addToken(/\\\\(\\d+)/,(function(e,d){if(!(\"default\"===d&&/^[1-9]/.test(e[1])&&+e[1]<=this.captureNames.length)&&\"0\"!==e[1])throw new SyntaxError(`Cannot use octal escape or backreference to undefined group ${e[0]}`);return e[0]}),{scope:\"all\",leadChar:\"\\\\\"}),Q.addToken(/\\(\\?P?<([\\p{ID_Start}$_][\\p{ID_Continue}$_\\u200C\\u200D]*)>/u,(function(e){if(!Q.isInstalled(\"namespacing\")&&(\"length\"===e[1]||\"__proto__\"===e[1]))throw new SyntaxError(`Cannot use reserved word as capture name ${e[0]}`);if(this.captureNames.includes(e[1]))throw new SyntaxError(`Cannot use same name for multiple groups ${e[0]}`);return this.captureNames.push(e[1]),this.hasNamedCapture=!0,\"(\"}),{leadChar:\"(\"}),Q.addToken(/\\((?!\\?)/,(function(e,d,t){return t.includes(\"n\")?\"(?:\":(this.captureNames.push(null),\"(\")}),{optionalFlags:\"n\",leadChar:\"(\"});\n/*!\n * XRegExp.build 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2012-present MIT License\n */\nvar ee=[{name:\"C\",alias:\"Other\",isBmpLast:!0,bmp:\"\\0-\u001f------------------------------------ೳ---------໎------------------------------------------------------------------------------------------\",astral:\"\\ud800[\\udc0c\\udc27\\udc3b\\udc3e\\udc4e\\udc4f\\udc5e-\\udc7f\\udcfb-\\udcff\\udd03-\\udd06\\udd34-\\udd36\\udd8f\\udd9d-\\udd9f\\udda1-\\uddcf\\uddfe-\\ude7f\\ude9d-\\ude9f\\uded1-\\udedf\\udefc-\\udeff\\udf24-\\udf2c\\udf4b-\\udf4f\\udf7b-\\udf7f\\udf9e\\udfc4-\\udfc7\\udfd6-\\udfff]|\\ud801[\\udc9e\\udc9f\\udcaa-\\udcaf\\udcd4-\\udcd7\\udcfc-\\udcff\\udd28-\\udd2f\\udd64-\\udd6e\\udd7b\\udd8b\\udd93\\udd96\\udda2\\uddb2\\uddba\\uddbd-\\uddff\\udf37-\\udf3f\\udf56-\\udf5f\\udf68-\\udf7f\\udf86\\udfb1\\udfbb-\\udfff]|\\ud802[\\udc06\\udc07\\udc09\\udc36\\udc39-\\udc3b\\udc3d\\udc3e\\udc56\\udc9f-\\udca6\\udcb0-\\udcdf\\udcf3\\udcf6-\\udcfa\\udd1c-\\udd1e\\udd3a-\\udd3e\\udd40-\\udd7f\\uddb8-\\uddbb\\uddd0\\uddd1\\ude04\\ude07-\\ude0b\\ude14\\ude18\\ude36\\ude37\\ude3b-\\ude3e\\ude49-\\ude4f\\ude59-\\ude5f\\udea0-\\udebf\\udee7-\\udeea\\udef7-\\udeff\\udf36-\\udf38\\udf56\\udf57\\udf73-\\udf77\\udf92-\\udf98\\udf9d-\\udfa8\\udfb0-\\udfff]|\\ud803[\\udc49-\\udc7f\\udcb3-\\udcbf\\udcf3-\\udcf9\\udd28-\\udd2f\\udd3a-\\ude5f\\ude7f\\udeaa\\udeae\\udeaf\\udeb2-\\udeff\\udf28-\\udf2f\\udf5a-\\udf6f\\udf8a-\\udfaf\\udfcc-\\udfdf\\udff7-\\udfff]|\\ud804[\\udc4e-\\udc51\\udc76-\\udc7e\\udcbd\\udcc3-\\udccf\\udce9-\\udcef\\udcfa-\\udcff\\udd35\\udd48-\\udd4f\\udd77-\\udd7f\\udde0\\uddf5-\\uddff\\ude12\\ude3f-\\ude7f\\ude87\\ude89\\ude8e\\ude9e\\udeaa-\\udeaf\\udeeb-\\udeef\\udefa-\\udeff\\udf04\\udf0d\\udf0e\\udf11\\udf12\\udf29\\udf31\\udf34\\udf3a\\udf45\\udf46\\udf49\\udf4a\\udf4e\\udf4f\\udf51-\\udf56\\udf58-\\udf5c\\udf64\\udf65\\udf6d-\\udf6f\\udf75-\\udfff]|\\ud805[\\udc5c\\udc62-\\udc7f\\udcc8-\\udccf\\udcda-\\udd7f\\uddb6\\uddb7\\uddde-\\uddff\\ude45-\\ude4f\\ude5a-\\ude5f\\ude6d-\\ude7f\\udeba-\\udebf\\udeca-\\udeff\\udf1b\\udf1c\\udf2c-\\udf2f\\udf47-\\udfff]|\\ud806[\\udc3c-\\udc9f\\udcf3-\\udcfe\\udd07\\udd08\\udd0a\\udd0b\\udd14\\udd17\\udd36\\udd39\\udd3a\\udd47-\\udd4f\\udd5a-\\udd9f\\udda8\\udda9\\uddd8\\uddd9\\udde5-\\uddff\\ude48-\\ude4f\\udea3-\\udeaf\\udef9-\\udfff]|\\ud807[\\udc09\\udc37\\udc46-\\udc4f\\udc6d-\\udc6f\\udc90\\udc91\\udca8\\udcb7-\\udcff\\udd07\\udd0a\\udd37-\\udd39\\udd3b\\udd3e\\udd48-\\udd4f\\udd5a-\\udd5f\\udd66\\udd69\\udd8f\\udd92\\udd99-\\udd9f\\uddaa-\\udedf\\udef9-\\udfaf\\udfb1-\\udfbf\\udff2-\\udffe]|\\ud808[\\udf9a-\\udfff]|\\ud809[\\udc6f\\udc75-\\udc7f\\udd44-\\udfff]|[\\ud80a\\ud80e-\\ud810\\ud812-\\ud819\\ud824-\\ud82a\\ud82d\\ud82e\\ud830-\\ud832\\ud83f\\ud87b-\\ud87d\\ud87f\\ud885-\\udb3f\\udb41-\\udbff][\\udc00-\\udfff]|\\ud80b[\\udc00-\\udf8f\\udff3-\\udfff]|\\ud80d[\\udc2f-\\udfff]|\\ud811[\\ude47-\\udfff]|\\ud81a[\\ude39-\\ude3f\\ude5f\\ude6a-\\ude6d\\udebf\\udeca-\\udecf\\udeee\\udeef\\udef6-\\udeff\\udf46-\\udf4f\\udf5a\\udf62\\udf78-\\udf7c\\udf90-\\udfff]|\\ud81b[\\udc00-\\ude3f\\ude9b-\\udeff\\udf4b-\\udf4e\\udf88-\\udf8e\\udfa0-\\udfdf\\udfe5-\\udfef\\udff2-\\udfff]|\\ud821[\\udff8-\\udfff]|\\ud823[\\udcd6-\\udcff\\udd09-\\udfff]|\\ud82b[\\udc00-\\udfef\\udff4\\udffc\\udfff]|\\ud82c[\\udd23-\\udd4f\\udd53-\\udd63\\udd68-\\udd6f\\udefc-\\udfff]|\\ud82f[\\udc6b-\\udc6f\\udc7d-\\udc7f\\udc89-\\udc8f\\udc9a\\udc9b\\udca0-\\udfff]|\\ud833[\\udc00-\\udeff\\udf2e\\udf2f\\udf47-\\udf4f\\udfc4-\\udfff]|\\ud834[\\udcf6-\\udcff\\udd27\\udd28\\udd73-\\udd7a\\uddeb-\\uddff\\ude46-\\udedf\\udef4-\\udeff\\udf57-\\udf5f\\udf79-\\udfff]|\\ud835[\\udc55\\udc9d\\udca0\\udca1\\udca3\\udca4\\udca7\\udca8\\udcad\\udcba\\udcbc\\udcc4\\udd06\\udd0b\\udd0c\\udd15\\udd1d\\udd3a\\udd3f\\udd45\\udd47-\\udd49\\udd51\\udea6\\udea7\\udfcc\\udfcd]|\\ud836[\\ude8c-\\ude9a\\udea0\\udeb0-\\udfff]|\\ud837[\\udc00-\\udeff\\udf1f-\\udfff]|\\ud838[\\udc07\\udc19\\udc1a\\udc22\\udc25\\udc2b-\\udcff\\udd2d-\\udd2f\\udd3e\\udd3f\\udd4a-\\udd4d\\udd50-\\ude8f\\udeaf-\\udebf\\udefa-\\udefe\\udf00-\\udfff]|\\ud839[\\udc00-\\udfdf\\udfe7\\udfec\\udfef\\udfff]|\\ud83a[\\udcc5\\udcc6\\udcd7-\\udcff\\udd4c-\\udd4f\\udd5a-\\udd5d\\udd60-\\udfff]|\\ud83b[\\udc00-\\udc70\\udcb5-\\udd00\\udd3e-\\uddff\\ude04\\ude20\\ude23\\ude25\\ude26\\ude28\\ude33\\ude38\\ude3a\\ude3c-\\ude41\\ude43-\\ude46\\ude48\\ude4a\\ude4c\\ude50\\ude53\\ude55\\ude56\\ude58\\ude5a\\ude5c\\ude5e\\ude60\\ude63\\ude65\\ude66\\ude6b\\ude73\\ude78\\ude7d\\ude7f\\ude8a\\ude9c-\\udea0\\udea4\\udeaa\\udebc-\\udeef\\udef2-\\udfff]|\\ud83c[\\udc2c-\\udc2f\\udc94-\\udc9f\\udcaf\\udcb0\\udcc0\\udcd0\\udcf6-\\udcff\\uddae-\\udde5\\ude03-\\ude0f\\ude3c-\\ude3f\\ude49-\\ude4f\\ude52-\\ude5f\\ude66-\\udeff]|\\ud83d[\\uded8-\\udedc\\udeed-\\udeef\\udefd-\\udeff\\udf74-\\udf7f\\udfd9-\\udfdf\\udfec-\\udfef\\udff1-\\udfff]|\\ud83e[\\udc0c-\\udc0f\\udc48-\\udc4f\\udc5a-\\udc5f\\udc88-\\udc8f\\udcae\\udcaf\\udcb2-\\udcff\\ude54-\\ude5f\\ude6e\\ude6f\\ude75-\\ude77\\ude7d-\\ude7f\\ude87-\\ude8f\\udead-\\udeaf\\udebb-\\udebf\\udec6-\\udecf\\udeda-\\udedf\\udee8-\\udeef\\udef7-\\udeff\\udf93\\udfcb-\\udfef\\udffa-\\udfff]|\\ud869[\\udee0-\\udeff]|\\ud86d[\\udf39-\\udf3f]|\\ud86e[\\udc1e\\udc1f]|\\ud873[\\udea2-\\udeaf]|\\ud87a[\\udfe1-\\udfff]|\\ud87e[\\ude1e-\\udfff]|\\ud884[\\udf4b-\\udfff]|\\udb40[\\udc00-\\udcff\\uddf0-\\udfff]\"},{name:\"Cc\",alias:\"Control\",bmp:\"\\0-\u001f-\"},{name:\"Cf\",alias:\"Format\",bmp:\"-----\\ufeff-\",astral:\"\\ud804[\\udcbd\\udccd]|\\ud80d[\\udc30-\\udc38]|\\ud82f[\\udca0-\\udca3]|\\ud834[\\udd73-\\udd7a]|\\udb40[\\udc01\\udc20-\\udc7f]\"},{name:\"Cn\",alias:\"Unassigned\",bmp:\"-----------------------------------ೳ---------໎--------------------------------------------------------------------------------------\",astral:\"\\ud800[\\udc0c\\udc27\\udc3b\\udc3e\\udc4e\\udc4f\\udc5e-\\udc7f\\udcfb-\\udcff\\udd03-\\udd06\\udd34-\\udd36\\udd8f\\udd9d-\\udd9f\\udda1-\\uddcf\\uddfe-\\ude7f\\ude9d-\\ude9f\\uded1-\\udedf\\udefc-\\udeff\\udf24-\\udf2c\\udf4b-\\udf4f\\udf7b-\\udf7f\\udf9e\\udfc4-\\udfc7\\udfd6-\\udfff]|\\ud801[\\udc9e\\udc9f\\udcaa-\\udcaf\\udcd4-\\udcd7\\udcfc-\\udcff\\udd28-\\udd2f\\udd64-\\udd6e\\udd7b\\udd8b\\udd93\\udd96\\udda2\\uddb2\\uddba\\uddbd-\\uddff\\udf37-\\udf3f\\udf56-\\udf5f\\udf68-\\udf7f\\udf86\\udfb1\\udfbb-\\udfff]|\\ud802[\\udc06\\udc07\\udc09\\udc36\\udc39-\\udc3b\\udc3d\\udc3e\\udc56\\udc9f-\\udca6\\udcb0-\\udcdf\\udcf3\\udcf6-\\udcfa\\udd1c-\\udd1e\\udd3a-\\udd3e\\udd40-\\udd7f\\uddb8-\\uddbb\\uddd0\\uddd1\\ude04\\ude07-\\ude0b\\ude14\\ude18\\ude36\\ude37\\ude3b-\\ude3e\\ude49-\\ude4f\\ude59-\\ude5f\\udea0-\\udebf\\udee7-\\udeea\\udef7-\\udeff\\udf36-\\udf38\\udf56\\udf57\\udf73-\\udf77\\udf92-\\udf98\\udf9d-\\udfa8\\udfb0-\\udfff]|\\ud803[\\udc49-\\udc7f\\udcb3-\\udcbf\\udcf3-\\udcf9\\udd28-\\udd2f\\udd3a-\\ude5f\\ude7f\\udeaa\\udeae\\udeaf\\udeb2-\\udeff\\udf28-\\udf2f\\udf5a-\\udf6f\\udf8a-\\udfaf\\udfcc-\\udfdf\\udff7-\\udfff]|\\ud804[\\udc4e-\\udc51\\udc76-\\udc7e\\udcc3-\\udccc\\udcce\\udccf\\udce9-\\udcef\\udcfa-\\udcff\\udd35\\udd48-\\udd4f\\udd77-\\udd7f\\udde0\\uddf5-\\uddff\\ude12\\ude3f-\\ude7f\\ude87\\ude89\\ude8e\\ude9e\\udeaa-\\udeaf\\udeeb-\\udeef\\udefa-\\udeff\\udf04\\udf0d\\udf0e\\udf11\\udf12\\udf29\\udf31\\udf34\\udf3a\\udf45\\udf46\\udf49\\udf4a\\udf4e\\udf4f\\udf51-\\udf56\\udf58-\\udf5c\\udf64\\udf65\\udf6d-\\udf6f\\udf75-\\udfff]|\\ud805[\\udc5c\\udc62-\\udc7f\\udcc8-\\udccf\\udcda-\\udd7f\\uddb6\\uddb7\\uddde-\\uddff\\ude45-\\ude4f\\ude5a-\\ude5f\\ude6d-\\ude7f\\udeba-\\udebf\\udeca-\\udeff\\udf1b\\udf1c\\udf2c-\\udf2f\\udf47-\\udfff]|\\ud806[\\udc3c-\\udc9f\\udcf3-\\udcfe\\udd07\\udd08\\udd0a\\udd0b\\udd14\\udd17\\udd36\\udd39\\udd3a\\udd47-\\udd4f\\udd5a-\\udd9f\\udda8\\udda9\\uddd8\\uddd9\\udde5-\\uddff\\ude48-\\ude4f\\udea3-\\udeaf\\udef9-\\udfff]|\\ud807[\\udc09\\udc37\\udc46-\\udc4f\\udc6d-\\udc6f\\udc90\\udc91\\udca8\\udcb7-\\udcff\\udd07\\udd0a\\udd37-\\udd39\\udd3b\\udd3e\\udd48-\\udd4f\\udd5a-\\udd5f\\udd66\\udd69\\udd8f\\udd92\\udd99-\\udd9f\\uddaa-\\udedf\\udef9-\\udfaf\\udfb1-\\udfbf\\udff2-\\udffe]|\\ud808[\\udf9a-\\udfff]|\\ud809[\\udc6f\\udc75-\\udc7f\\udd44-\\udfff]|[\\ud80a\\ud80e-\\ud810\\ud812-\\ud819\\ud824-\\ud82a\\ud82d\\ud82e\\ud830-\\ud832\\ud83f\\ud87b-\\ud87d\\ud87f\\ud885-\\udb3f\\udb41-\\udb7f][\\udc00-\\udfff]|\\ud80b[\\udc00-\\udf8f\\udff3-\\udfff]|\\ud80d[\\udc2f\\udc39-\\udfff]|\\ud811[\\ude47-\\udfff]|\\ud81a[\\ude39-\\ude3f\\ude5f\\ude6a-\\ude6d\\udebf\\udeca-\\udecf\\udeee\\udeef\\udef6-\\udeff\\udf46-\\udf4f\\udf5a\\udf62\\udf78-\\udf7c\\udf90-\\udfff]|\\ud81b[\\udc00-\\ude3f\\ude9b-\\udeff\\udf4b-\\udf4e\\udf88-\\udf8e\\udfa0-\\udfdf\\udfe5-\\udfef\\udff2-\\udfff]|\\ud821[\\udff8-\\udfff]|\\ud823[\\udcd6-\\udcff\\udd09-\\udfff]|\\ud82b[\\udc00-\\udfef\\udff4\\udffc\\udfff]|\\ud82c[\\udd23-\\udd4f\\udd53-\\udd63\\udd68-\\udd6f\\udefc-\\udfff]|\\ud82f[\\udc6b-\\udc6f\\udc7d-\\udc7f\\udc89-\\udc8f\\udc9a\\udc9b\\udca4-\\udfff]|\\ud833[\\udc00-\\udeff\\udf2e\\udf2f\\udf47-\\udf4f\\udfc4-\\udfff]|\\ud834[\\udcf6-\\udcff\\udd27\\udd28\\uddeb-\\uddff\\ude46-\\udedf\\udef4-\\udeff\\udf57-\\udf5f\\udf79-\\udfff]|\\ud835[\\udc55\\udc9d\\udca0\\udca1\\udca3\\udca4\\udca7\\udca8\\udcad\\udcba\\udcbc\\udcc4\\udd06\\udd0b\\udd0c\\udd15\\udd1d\\udd3a\\udd3f\\udd45\\udd47-\\udd49\\udd51\\udea6\\udea7\\udfcc\\udfcd]|\\ud836[\\ude8c-\\ude9a\\udea0\\udeb0-\\udfff]|\\ud837[\\udc00-\\udeff\\udf1f-\\udfff]|\\ud838[\\udc07\\udc19\\udc1a\\udc22\\udc25\\udc2b-\\udcff\\udd2d-\\udd2f\\udd3e\\udd3f\\udd4a-\\udd4d\\udd50-\\ude8f\\udeaf-\\udebf\\udefa-\\udefe\\udf00-\\udfff]|\\ud839[\\udc00-\\udfdf\\udfe7\\udfec\\udfef\\udfff]|\\ud83a[\\udcc5\\udcc6\\udcd7-\\udcff\\udd4c-\\udd4f\\udd5a-\\udd5d\\udd60-\\udfff]|\\ud83b[\\udc00-\\udc70\\udcb5-\\udd00\\udd3e-\\uddff\\ude04\\ude20\\ude23\\ude25\\ude26\\ude28\\ude33\\ude38\\ude3a\\ude3c-\\ude41\\ude43-\\ude46\\ude48\\ude4a\\ude4c\\ude50\\ude53\\ude55\\ude56\\ude58\\ude5a\\ude5c\\ude5e\\ude60\\ude63\\ude65\\ude66\\ude6b\\ude73\\ude78\\ude7d\\ude7f\\ude8a\\ude9c-\\udea0\\udea4\\udeaa\\udebc-\\udeef\\udef2-\\udfff]|\\ud83c[\\udc2c-\\udc2f\\udc94-\\udc9f\\udcaf\\udcb0\\udcc0\\udcd0\\udcf6-\\udcff\\uddae-\\udde5\\ude03-\\ude0f\\ude3c-\\ude3f\\ude49-\\ude4f\\ude52-\\ude5f\\ude66-\\udeff]|\\ud83d[\\uded8-\\udedc\\udeed-\\udeef\\udefd-\\udeff\\udf74-\\udf7f\\udfd9-\\udfdf\\udfec-\\udfef\\udff1-\\udfff]|\\ud83e[\\udc0c-\\udc0f\\udc48-\\udc4f\\udc5a-\\udc5f\\udc88-\\udc8f\\udcae\\udcaf\\udcb2-\\udcff\\ude54-\\ude5f\\ude6e\\ude6f\\ude75-\\ude77\\ude7d-\\ude7f\\ude87-\\ude8f\\udead-\\udeaf\\udebb-\\udebf\\udec6-\\udecf\\udeda-\\udedf\\udee8-\\udeef\\udef7-\\udeff\\udf93\\udfcb-\\udfef\\udffa-\\udfff]|\\ud869[\\udee0-\\udeff]|\\ud86d[\\udf39-\\udf3f]|\\ud86e[\\udc1e\\udc1f]|\\ud873[\\udea2-\\udeaf]|\\ud87a[\\udfe1-\\udfff]|\\ud87e[\\ude1e-\\udfff]|\\ud884[\\udf4b-\\udfff]|\\udb40[\\udc00\\udc02-\\udc1f\\udc80-\\udcff\\uddf0-\\udfff]|[\\udbbf\\udbff][\\udffe\\udfff]\"},{name:\"Co\",alias:\"Private_Use\",bmp:\"-\",astral:\"[\\udb80-\\udbbe\\udbc0-\\udbfe][\\udc00-\\udfff]|[\\udbbf\\udbff][\\udc00-\\udffd]\"},{name:\"Cs\",alias:\"Surrogate\",bmp:\"\\ud800-\\udfff\"},{name:\"L\",alias:\"Letter\",bmp:\"A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ\",astral:\"\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf40\\udf42-\\udf49\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\udd70-\\udd7a\\udd7c-\\udd8a\\udd8c-\\udd92\\udd94\\udd95\\udd97-\\udda1\\udda3-\\uddb1\\uddb3-\\uddb9\\uddbb\\uddbc\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67\\udf80-\\udf85\\udf87-\\udfb0\\udfb2-\\udfba]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd23\\ude80-\\udea9\\udeb0\\udeb1\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udf70-\\udf81\\udfb0-\\udfc4\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc71\\udc72\\udc75\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd47\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f-\\udc61\\udc80-\\udcaf\\udcc4\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a\\udf40-\\udf46]|\\ud806[\\udc00-\\udc2b\\udca0-\\udcdf\\udcff-\\udd06\\udd09\\udd0c-\\udd13\\udd15\\udd16\\udd18-\\udd2f\\udd3f\\udd41\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udeb0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2\\udfb0]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc80-\\udd43]|\\ud80b[\\udf90-\\udff0]|[\\ud80c\\ud81c-\\ud820\\ud822\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872\\ud874-\\ud879\\ud880-\\ud883][\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude70-\\udebe\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf50\\udf93-\\udf9f\\udfe0\\udfe1\\udfe3]|\\ud821[\\udc00-\\udff7]|\\ud823[\\udc00-\\udcd5\\udd00-\\udd08]|\\ud82b[\\udff0-\\udff3\\udff5-\\udffb\\udffd\\udffe]|\\ud82c[\\udc00-\\udd22\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud837[\\udf00-\\udf1e]|\\ud838[\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\ude90-\\udead\\udec0-\\udeeb]|\\ud839[\\udfe0-\\udfe6\\udfe8-\\udfeb\\udfed\\udfee\\udff0-\\udffe]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud869[\\udc00-\\udedf\\udf00-\\udfff]|\\ud86d[\\udc00-\\udf38\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\ud884[\\udc00-\\udf4a]\"},{name:\"LC\",alias:\"Cased_Letter\",bmp:\"A-Za-zµÀ-ÖØ-öø-ƺƼ-ƿDŽ-ʓʕ-ʯͰ-ͳͶͷͻ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՠ-ֈႠ-ჅჇჍა-ჺჽ-ჿᎠ-Ᏽᏸ-ᏽᲀ-ᲈᲐ-ᲺᲽ-Ჿᴀ-ᴫᵫ-ᵷᵹ-ᶚḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℴℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-ⱻⱾ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭꙀ-ꙭꚀ-ꚛꜢ-ꝯꝱ-ꞇꞋ-ꞎꞐ-ꟊꟐꟑꟓꟕ-ꟙꟵꟶꟺꬰ-ꭚꭠ-ꭨꭰ-ꮿff-stﬓ-ﬗA-Za-z\",astral:\"\\ud801[\\udc00-\\udc4f\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd70-\\udd7a\\udd7c-\\udd8a\\udd8c-\\udd92\\udd94\\udd95\\udd97-\\udda1\\udda3-\\uddb1\\uddb3-\\uddb9\\uddbb\\uddbc]|\\ud803[\\udc80-\\udcb2\\udcc0-\\udcf2]|\\ud806[\\udca0-\\udcdf]|\\ud81b[\\ude40-\\ude7f]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud837[\\udf00-\\udf09\\udf0b-\\udf1e]|\\ud83a[\\udd00-\\udd43]\"},{name:\"Ll\",alias:\"Lowercase_Letter\",bmp:\"a-zµß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌƍƒƕƙ-ƛƞơƣƥƨƪƫƭưƴƶƹƺƽ-ƿdžljnjǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿɀɂɇɉɋɍɏ-ʓʕ-ʯͱͳͷͻ-ͽΐά-ώϐϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯՠ-ֈა-ჺჽ-ჿᏸ-ᏽᲀ-ᲈᴀ-ᴫᵫ-ᵷᵹ-ᶚḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷιῂ-ῄῆῇῐ-ΐῖῗῠ-ῧῲ-ῴῶῷℊℎℏℓℯℴℹℼℽⅆ-ⅉⅎↄⰰ-ⱟⱡⱥⱦⱨⱪⱬⱱⱳⱴⱶ-ⱻⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯꝱ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓ-ꞕꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩꞯꞵꞷꞹꞻꞽꞿꟁꟃꟈꟊꟑꟓꟕꟗꟙꟶꟺꬰ-ꭚꭠ-ꭨꭰ-ꮿff-stﬓ-ﬗa-z\",astral:\"\\ud801[\\udc28-\\udc4f\\udcd8-\\udcfb\\udd97-\\udda1\\udda3-\\uddb1\\uddb3-\\uddb9\\uddbb\\uddbc]|\\ud803[\\udcc0-\\udcf2]|\\ud806[\\udcc0-\\udcdf]|\\ud81b[\\ude60-\\ude7f]|\\ud835[\\udc1a-\\udc33\\udc4e-\\udc54\\udc56-\\udc67\\udc82-\\udc9b\\udcb6-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udccf\\udcea-\\udd03\\udd1e-\\udd37\\udd52-\\udd6b\\udd86-\\udd9f\\uddba-\\uddd3\\uddee-\\ude07\\ude22-\\ude3b\\ude56-\\ude6f\\ude8a-\\udea5\\udec2-\\udeda\\udedc-\\udee1\\udefc-\\udf14\\udf16-\\udf1b\\udf36-\\udf4e\\udf50-\\udf55\\udf70-\\udf88\\udf8a-\\udf8f\\udfaa-\\udfc2\\udfc4-\\udfc9\\udfcb]|\\ud837[\\udf00-\\udf09\\udf0b-\\udf1e]|\\ud83a[\\udd22-\\udd43]\"},{name:\"Lm\",alias:\"Modifier_Letter\",bmp:\"ʰ-ˁˆ-ˑˠ-ˤˬˮʹͺՙـۥۦߴߵߺࠚࠤࠨࣉॱๆໆჼៗᡃᪧᱸ-ᱽᴬ-ᵪᵸᶛ-ᶿⁱⁿₐ-ₜⱼⱽⵯⸯ々〱-〵〻ゝゞー-ヾꀕꓸ-ꓽꘌꙿꚜꚝꜗ-ꜟꝰꞈꟲ-ꟴꟸꟹꧏꧦꩰꫝꫳꫴꭜ-ꭟꭩー゙゚\",astral:\"\\ud801[\\udf80-\\udf85\\udf87-\\udfb0\\udfb2-\\udfba]|\\ud81a[\\udf40-\\udf43]|\\ud81b[\\udf93-\\udf9f\\udfe0\\udfe1\\udfe3]|\\ud82b[\\udff0-\\udff3\\udff5-\\udffb\\udffd\\udffe]|\\ud838[\\udd37-\\udd3d]|𞥋\"},{name:\"Lo\",alias:\"Other_Letter\",bmp:\"ªºƻǀ-ǃʔא-תׯ-ײؠ-ؿف-يٮٯٱ-ۓەۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪࠀ-ࠕࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣈऄ-हऽॐक़-ॡॲ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๅກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎᄀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛱ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៜᠠ-ᡂᡄ-ᡸᢀ-ᢄᢇ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱷᳩ-ᳬᳮ-ᳳᳵᳶᳺℵ-ℸⴰ-ⵧⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ〆〼ぁ-ゖゟァ-ヺヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꀔꀖ-ꒌꓐ-ꓷꔀ-ꘋꘐ-ꘟꘪꘫꙮꚠ-ꛥꞏꟷꟻ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧠ-ꧤꧧ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩯꩱ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛꫜꫠ-ꫪꫲꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎יִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼヲ-ッア-ンᅠ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ\",astral:\"\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf40\\udf42-\\udf49\\udf50-\\udf75\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf]|\\ud801[\\udc50-\\udc9d\\udd00-\\udd27\\udd30-\\udd63\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00\\ude10-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udd00-\\udd23\\ude80-\\udea9\\udeb0\\udeb1\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udf70-\\udf81\\udfb0-\\udfc4\\udfe0-\\udff6]|\\ud804[\\udc03-\\udc37\\udc71\\udc72\\udc75\\udc83-\\udcaf\\udcd0-\\udce8\\udd03-\\udd26\\udd44\\udd47\\udd50-\\udd72\\udd76\\udd83-\\uddb2\\uddc1-\\uddc4\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude2b\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udede\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3d\\udf50\\udf5d-\\udf61]|\\ud805[\\udc00-\\udc34\\udc47-\\udc4a\\udc5f-\\udc61\\udc80-\\udcaf\\udcc4\\udcc5\\udcc7\\udd80-\\uddae\\uddd8-\\udddb\\ude00-\\ude2f\\ude44\\ude80-\\udeaa\\udeb8\\udf00-\\udf1a\\udf40-\\udf46]|\\ud806[\\udc00-\\udc2b\\udcff-\\udd06\\udd09\\udd0c-\\udd13\\udd15\\udd16\\udd18-\\udd2f\\udd3f\\udd41\\udda0-\\udda7\\uddaa-\\uddd0\\udde1\\udde3\\ude00\\ude0b-\\ude32\\ude3a\\ude50\\ude5c-\\ude89\\ude9d\\udeb0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc2e\\udc40\\udc72-\\udc8f\\udd00-\\udd06\\udd08\\udd09\\udd0b-\\udd30\\udd46\\udd60-\\udd65\\udd67\\udd68\\udd6a-\\udd89\\udd98\\udee0-\\udef2\\udfb0]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc80-\\udd43]|\\ud80b[\\udf90-\\udff0]|[\\ud80c\\ud81c-\\ud820\\ud822\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872\\ud874-\\ud879\\ud880-\\ud883][\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude70-\\udebe\\uded0-\\udeed\\udf00-\\udf2f\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\udf00-\\udf4a\\udf50]|\\ud821[\\udc00-\\udff7]|\\ud823[\\udc00-\\udcd5\\udd00-\\udd08]|\\ud82c[\\udc00-\\udd22\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99]|𝼊|\\ud838[\\udd00-\\udd2c\\udd4e\\ude90-\\udead\\udec0-\\udeeb]|\\ud839[\\udfe0-\\udfe6\\udfe8-\\udfeb\\udfed\\udfee\\udff0-\\udffe]|\\ud83a[\\udc00-\\udcc4]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud869[\\udc00-\\udedf\\udf00-\\udfff]|\\ud86d[\\udc00-\\udf38\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\ud884[\\udc00-\\udf4a]\"},{name:\"Lt\",alias:\"Titlecase_Letter\",bmp:\"DžLjNjDzᾈ-ᾏᾘ-ᾟᾨ-ᾯᾼῌῼ\"},{name:\"Lu\",alias:\"Uppercase_Letter\",bmp:\"A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉ-ƋƎ-ƑƓƔƖ-ƘƜƝƟƠƢƤƦƧƩƬƮƯƱ-ƳƵƷƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃ-ɆɈɊɌɎͰͲͶͿΆΈ-ΊΌΎΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԨԪԬԮԱ-ՖႠ-ჅჇჍᎠ-ᏵᲐ-ᲺᲽ-ᲿḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾℿⅅↃⰀ-ⰯⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꚘꚚꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒꞖꞘꞚꞜꞞꞠꞢꞤꞦꞨꞪ-ꞮꞰ-ꞴꞶꞸꞺꞼꞾꟀꟂꟄ-ꟇꟉꟐꟖꟘꟵA-Z\",astral:\"\\ud801[\\udc00-\\udc27\\udcb0-\\udcd3\\udd70-\\udd7a\\udd7c-\\udd8a\\udd8c-\\udd92\\udd94\\udd95]|\\ud803[\\udc80-\\udcb2]|\\ud806[\\udca0-\\udcbf]|\\ud81b[\\ude40-\\ude5f]|\\ud835[\\udc00-\\udc19\\udc34-\\udc4d\\udc68-\\udc81\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb5\\udcd0-\\udce9\\udd04\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd38\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd6c-\\udd85\\udda0-\\uddb9\\uddd4-\\udded\\ude08-\\ude21\\ude3c-\\ude55\\ude70-\\ude89\\udea8-\\udec0\\udee2-\\udefa\\udf1c-\\udf34\\udf56-\\udf6e\\udf90-\\udfa8\\udfca]|\\ud83a[\\udd00-\\udd21]\"},{name:\"M\",alias:\"Mark\",bmp:\"̀-ͯ҃-҉֑-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࢘-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣঁ-ঃ়া-ৄেৈো-্ৗৢৣ৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑੰੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣஂா-ூெ-ைொ-்ௗఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣඁ-ඃ්ා-ුූෘ-ෟෲෳัิ-ฺ็-๎ັິ-ຼ່-ໍ༹༘༙༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏႚ-ႝ፝-፟ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝᠋-᠍᠏ᢅᢆᢩᤠ-ᤫᤰ-᤻ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼᪰-ᫎᬀ-ᬄ᬴-᭄᭫-᭳ᮀ-ᮂᮡ-ᮭ᯦-᯳ᰤ-᰷᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿⃐-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꙯-꙲ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣠-꣱ꣿꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀ꧥꨩ-ꨶꩃꩌꩍꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭ﬞ︀-️︠-︯\",astral:\"\\ud800[\\uddfd\\udee0\\udf76-\\udf7a]|\\ud802[\\ude01-\\ude03\\ude05\\ude06\\ude0c-\\ude0f\\ude38-\\ude3a\\ude3f\\udee5\\udee6]|\\ud803[\\udd24-\\udd27\\udeab\\udeac\\udf46-\\udf50\\udf82-\\udf85]|\\ud804[\\udc00-\\udc02\\udc38-\\udc46\\udc70\\udc73\\udc74\\udc7f-\\udc82\\udcb0-\\udcba\\udcc2\\udd00-\\udd02\\udd27-\\udd34\\udd45\\udd46\\udd73\\udd80-\\udd82\\uddb3-\\uddc0\\uddc9-\\uddcc\\uddce\\uddcf\\ude2c-\\ude37\\ude3e\\udedf-\\udeea\\udf00-\\udf03\\udf3b\\udf3c\\udf3e-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf62\\udf63\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc35-\\udc46\\udc5e\\udcb0-\\udcc3\\uddaf-\\uddb5\\uddb8-\\uddc0\\udddc\\udddd\\ude30-\\ude40\\udeab-\\udeb7\\udf1d-\\udf2b]|\\ud806[\\udc2c-\\udc3a\\udd30-\\udd35\\udd37\\udd38\\udd3b-\\udd3e\\udd40\\udd42\\udd43\\uddd1-\\uddd7\\uddda-\\udde0\\udde4\\ude01-\\ude0a\\ude33-\\ude39\\ude3b-\\ude3e\\ude47\\ude51-\\ude5b\\ude8a-\\ude99]|\\ud807[\\udc2f-\\udc36\\udc38-\\udc3f\\udc92-\\udca7\\udca9-\\udcb6\\udd31-\\udd36\\udd3a\\udd3c\\udd3d\\udd3f-\\udd45\\udd47\\udd8a-\\udd8e\\udd90\\udd91\\udd93-\\udd97\\udef3-\\udef6]|\\ud81a[\\udef0-\\udef4\\udf30-\\udf36]|\\ud81b[\\udf4f\\udf51-\\udf87\\udf8f-\\udf92\\udfe4\\udff0\\udff1]|\\ud82f[\\udc9d\\udc9e]|\\ud833[\\udf00-\\udf2d\\udf30-\\udf46]|\\ud834[\\udd65-\\udd69\\udd6d-\\udd72\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23\\udc24\\udc26-\\udc2a\\udd30-\\udd36\\udeae\\udeec-\\udeef]|\\ud83a[\\udcd0-\\udcd6\\udd44-\\udd4a]|\\udb40[\\udd00-\\uddef]\"},{name:\"Mc\",alias:\"Spacing_Mark\",bmp:\"ःऻा-ीॉ-ौॎॏংঃা-ীেৈোৌৗਃਾ-ੀઃા-ીૉોૌଂଃାୀେୈୋୌୗாிுூெ-ைொ-ௌௗఁ-ఃు-ౄಂಃಾೀ-ೄೇೈೊೋೕೖംഃാ-ീെ-ൈൊ-ൌൗංඃා-ෑෘ-ෟෲෳ༾༿ཿါာေးျြၖၗၢ-ၤၧ-ၭႃႄႇ-ႌႏႚ-ႜ᜕᜴ាើ-ៅះៈᤣ-ᤦᤩ-ᤫᤰᤱᤳ-ᤸᨙᨚᩕᩗᩡᩣᩤᩭ-ᩲᬄᬵᬻᬽ-ᭁᭃ᭄ᮂᮡᮦᮧ᮪ᯧᯪ-ᯬᯮ᯲᯳ᰤ-ᰫᰴᰵ᳡᳷〮〯ꠣꠤꠧꢀꢁꢴ-ꣃꥒ꥓ꦃꦴꦵꦺꦻꦾ-꧀ꨯꨰꨳꨴꩍꩻꩽꫫꫮꫯꫵꯣꯤꯦꯧꯩꯪ꯬\",astral:\"\\ud804[\\udc00\\udc02\\udc82\\udcb0-\\udcb2\\udcb7\\udcb8\\udd2c\\udd45\\udd46\\udd82\\uddb3-\\uddb5\\uddbf\\uddc0\\uddce\\ude2c-\\ude2e\\ude32\\ude33\\ude35\\udee0-\\udee2\\udf02\\udf03\\udf3e\\udf3f\\udf41-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf57\\udf62\\udf63]|\\ud805[\\udc35-\\udc37\\udc40\\udc41\\udc45\\udcb0-\\udcb2\\udcb9\\udcbb-\\udcbe\\udcc1\\uddaf-\\uddb1\\uddb8-\\uddbb\\uddbe\\ude30-\\ude32\\ude3b\\ude3c\\ude3e\\udeac\\udeae\\udeaf\\udeb6\\udf20\\udf21\\udf26]|\\ud806[\\udc2c-\\udc2e\\udc38\\udd30-\\udd35\\udd37\\udd38\\udd3d\\udd40\\udd42\\uddd1-\\uddd3\\udddc-\\udddf\\udde4\\ude39\\ude57\\ude58\\ude97]|\\ud807[\\udc2f\\udc3e\\udca9\\udcb1\\udcb4\\udd8a-\\udd8e\\udd93\\udd94\\udd96\\udef5\\udef6]|\\ud81b[\\udf51-\\udf87\\udff0\\udff1]|\\ud834[\\udd65\\udd66\\udd6d-\\udd72]\"},{name:\"Me\",alias:\"Enclosing_Mark\",bmp:\"҈҉᪾⃝-⃠⃢-⃤꙰-꙲\"},{name:\"Mn\",alias:\"Nonspacing_Mark\",bmp:\"̀-ͯ҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ܑۭܰ-݊ަ-ް߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࢘-࢟࣊-ࣣ࣡-ंऺ़ु-ै्॑-ॗॢॣঁ়ু-ৄ্ৢৣ৾ਁਂ਼ੁੂੇੈੋ-੍ੑੰੱੵઁં઼ુ-ૅેૈ્ૢૣૺ-૿ଁ଼ିୁ-ୄ୍୕ୖୢୣஂீ்ఀఄ఼ా-ీె-ైొ-్ౕౖౢౣಁ಼ಿೆೌ್ೢೣഀഁ഻഼ു-ൄ്ൢൣඁ්ි-ුූัิ-ฺ็-๎ັິ-ຼ່-ໍཱ༹༘༙༵༷-ཾྀ-྄྆྇ྍ-ྗྙ-ྼ࿆ိ-ူဲ-့္်ွှၘၙၞ-ၠၱ-ၴႂႅႆႍႝ፝-፟ᜒ-᜔ᜲᜳᝒᝓᝲᝳ឴឵ិ-ួំ៉-៓៝᠋-᠍᠏ᢅᢆᢩᤠ-ᤢᤧᤨᤲ᤹-᤻ᨘᨗᨛᩖᩘ-ᩞ᩠ᩢᩥ-ᩬᩳ-᩿᩼᪰-᪽ᪿ-ᫎᬀ-ᬃ᬴ᬶ-ᬺᬼᭂ᭫-᭳ᮀᮁᮢ-ᮥᮨᮩ᮫-ᮭ᯦ᯨᯩᯭᯯ-ᯱᰬ-ᰳᰶ᰷᳐-᳔᳒-᳢᳠-᳨᳭᳴᳸᳹᷀-᷿⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〭꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠥꠦ꠬꣄ꣅ꣠-꣱ꣿꤦ-꤭ꥇ-ꥑꦀ-ꦂ꦳ꦶ-ꦹꦼꦽꧥꨩ-ꨮꨱꨲꨵꨶꩃꩌꩼꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫬꫭ꫶ꯥꯨ꯭ﬞ︀-️︠-︯\",astral:\"\\ud800[\\uddfd\\udee0\\udf76-\\udf7a]|\\ud802[\\ude01-\\ude03\\ude05\\ude06\\ude0c-\\ude0f\\ude38-\\ude3a\\ude3f\\udee5\\udee6]|\\ud803[\\udd24-\\udd27\\udeab\\udeac\\udf46-\\udf50\\udf82-\\udf85]|\\ud804[\\udc01\\udc38-\\udc46\\udc70\\udc73\\udc74\\udc7f-\\udc81\\udcb3-\\udcb6\\udcb9\\udcba\\udcc2\\udd00-\\udd02\\udd27-\\udd2b\\udd2d-\\udd34\\udd73\\udd80\\udd81\\uddb6-\\uddbe\\uddc9-\\uddcc\\uddcf\\ude2f-\\ude31\\ude34\\ude36\\ude37\\ude3e\\udedf\\udee3-\\udeea\\udf00\\udf01\\udf3b\\udf3c\\udf40\\udf66-\\udf6c\\udf70-\\udf74]|\\ud805[\\udc38-\\udc3f\\udc42-\\udc44\\udc46\\udc5e\\udcb3-\\udcb8\\udcba\\udcbf\\udcc0\\udcc2\\udcc3\\uddb2-\\uddb5\\uddbc\\uddbd\\uddbf\\uddc0\\udddc\\udddd\\ude33-\\ude3a\\ude3d\\ude3f\\ude40\\udeab\\udead\\udeb0-\\udeb5\\udeb7\\udf1d-\\udf1f\\udf22-\\udf25\\udf27-\\udf2b]|\\ud806[\\udc2f-\\udc37\\udc39\\udc3a\\udd3b\\udd3c\\udd3e\\udd43\\uddd4-\\uddd7\\uddda\\udddb\\udde0\\ude01-\\ude0a\\ude33-\\ude38\\ude3b-\\ude3e\\ude47\\ude51-\\ude56\\ude59-\\ude5b\\ude8a-\\ude96\\ude98\\ude99]|\\ud807[\\udc30-\\udc36\\udc38-\\udc3d\\udc3f\\udc92-\\udca7\\udcaa-\\udcb0\\udcb2\\udcb3\\udcb5\\udcb6\\udd31-\\udd36\\udd3a\\udd3c\\udd3d\\udd3f-\\udd45\\udd47\\udd90\\udd91\\udd95\\udd97\\udef3\\udef4]|\\ud81a[\\udef0-\\udef4\\udf30-\\udf36]|\\ud81b[\\udf4f\\udf8f-\\udf92\\udfe4]|\\ud82f[\\udc9d\\udc9e]|\\ud833[\\udf00-\\udf2d\\udf30-\\udf46]|\\ud834[\\udd67-\\udd69\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad\\ude42-\\ude44]|\\ud836[\\ude00-\\ude36\\ude3b-\\ude6c\\ude75\\ude84\\ude9b-\\ude9f\\udea1-\\udeaf]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23\\udc24\\udc26-\\udc2a\\udd30-\\udd36\\udeae\\udeec-\\udeef]|\\ud83a[\\udcd0-\\udcd6\\udd44-\\udd4a]|\\udb40[\\udd00-\\uddef]\"},{name:\"N\",alias:\"Number\",bmp:\"0-9²³¹¼-¾٠-٩۰-۹߀-߉०-९০-৯৴-৹੦-੯૦-૯୦-୯୲-୷௦-௲౦-౯౸-౾೦-೯൘-൞൦-൸෦-෯๐-๙໐-໙༠-༳၀-၉႐-႙፩-፼ᛮ-ᛰ០-៩៰-៹᠐-᠙᥆-᥏᧐-᧚᪀-᪉᪐-᪙᭐-᭙᮰-᮹᱀-᱉᱐-᱙⁰⁴-⁹₀-₉⅐-ↂↅ-↉①-⒛⓪-⓿❶-➓⳽〇〡-〩〸-〺㆒-㆕㈠-㈩㉈-㉏㉑-㉟㊀-㊉㊱-㊿꘠-꘩ꛦ-ꛯ꠰-꠵꣐-꣙꤀-꤉꧐-꧙꧰-꧹꩐-꩙꯰-꯹0-9\",astral:\"\\ud800[\\udd07-\\udd33\\udd40-\\udd78\\udd8a\\udd8b\\udee1-\\udefb\\udf20-\\udf23\\udf41\\udf4a\\udfd1-\\udfd5]|\\ud801[\\udca0-\\udca9]|\\ud802[\\udc58-\\udc5f\\udc79-\\udc7f\\udca7-\\udcaf\\udcfb-\\udcff\\udd16-\\udd1b\\uddbc\\uddbd\\uddc0-\\uddcf\\uddd2-\\uddff\\ude40-\\ude48\\ude7d\\ude7e\\ude9d-\\ude9f\\udeeb-\\udeef\\udf58-\\udf5f\\udf78-\\udf7f\\udfa9-\\udfaf]|\\ud803[\\udcfa-\\udcff\\udd30-\\udd39\\ude60-\\ude7e\\udf1d-\\udf26\\udf51-\\udf54\\udfc5-\\udfcb]|\\ud804[\\udc52-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udde1-\\uddf4\\udef0-\\udef9]|\\ud805[\\udc50-\\udc59\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9\\udf30-\\udf3b]|\\ud806[\\udce0-\\udcf2\\udd50-\\udd59]|\\ud807[\\udc50-\\udc6c\\udd50-\\udd59\\udda0-\\udda9\\udfc0-\\udfd4]|\\ud809[\\udc00-\\udc6e]|\\ud81a[\\ude60-\\ude69\\udec0-\\udec9\\udf50-\\udf59\\udf5b-\\udf61]|\\ud81b[\\ude80-\\ude96]|\\ud834[\\udee0-\\udef3\\udf60-\\udf78]|\\ud835[\\udfce-\\udfff]|\\ud838[\\udd40-\\udd49\\udef0-\\udef9]|\\ud83a[\\udcc7-\\udccf\\udd50-\\udd59]|\\ud83b[\\udc71-\\udcab\\udcad-\\udcaf\\udcb1-\\udcb4\\udd01-\\udd2d\\udd2f-\\udd3d]|\\ud83c[\\udd00-\\udd0c]|\\ud83e[\\udff0-\\udff9]\"},{name:\"Nd\",alias:\"Decimal_Number\",bmp:\"0-9٠-٩۰-۹߀-߉०-९০-৯੦-੯૦-૯୦-୯௦-௯౦-౯೦-೯൦-൯෦-෯๐-๙໐-໙༠-༩၀-၉႐-႙០-៩᠐-᠙᥆-᥏᧐-᧙᪀-᪉᪐-᪙᭐-᭙᮰-᮹᱀-᱉᱐-᱙꘠-꘩꣐-꣙꤀-꤉꧐-꧙꧰-꧹꩐-꩙꯰-꯹0-9\",astral:\"\\ud801[\\udca0-\\udca9]|\\ud803[\\udd30-\\udd39]|\\ud804[\\udc66-\\udc6f\\udcf0-\\udcf9\\udd36-\\udd3f\\uddd0-\\uddd9\\udef0-\\udef9]|\\ud805[\\udc50-\\udc59\\udcd0-\\udcd9\\ude50-\\ude59\\udec0-\\udec9\\udf30-\\udf39]|\\ud806[\\udce0-\\udce9\\udd50-\\udd59]|\\ud807[\\udc50-\\udc59\\udd50-\\udd59\\udda0-\\udda9]|\\ud81a[\\ude60-\\ude69\\udec0-\\udec9\\udf50-\\udf59]|\\ud835[\\udfce-\\udfff]|\\ud838[\\udd40-\\udd49\\udef0-\\udef9]|\\ud83a[\\udd50-\\udd59]|\\ud83e[\\udff0-\\udff9]\"},{name:\"Nl\",alias:\"Letter_Number\",bmp:\"ᛮ-ᛰⅠ-ↂↅ-ↈ〇〡-〩〸-〺ꛦ-ꛯ\",astral:\"\\ud800[\\udd40-\\udd74\\udf41\\udf4a\\udfd1-\\udfd5]|\\ud809[\\udc00-\\udc6e]\"},{name:\"No\",alias:\"Other_Number\",bmp:\"²³¹¼-¾৴-৹୲-୷௰-௲౸-౾൘-൞൰-൸༪-༳፩-፼៰-៹᧚⁰⁴-⁹₀-₉⅐-⅟↉①-⒛⓪-⓿❶-➓⳽㆒-㆕㈠-㈩㉈-㉏㉑-㉟㊀-㊉㊱-㊿꠰-꠵\",astral:\"\\ud800[\\udd07-\\udd33\\udd75-\\udd78\\udd8a\\udd8b\\udee1-\\udefb\\udf20-\\udf23]|\\ud802[\\udc58-\\udc5f\\udc79-\\udc7f\\udca7-\\udcaf\\udcfb-\\udcff\\udd16-\\udd1b\\uddbc\\uddbd\\uddc0-\\uddcf\\uddd2-\\uddff\\ude40-\\ude48\\ude7d\\ude7e\\ude9d-\\ude9f\\udeeb-\\udeef\\udf58-\\udf5f\\udf78-\\udf7f\\udfa9-\\udfaf]|\\ud803[\\udcfa-\\udcff\\ude60-\\ude7e\\udf1d-\\udf26\\udf51-\\udf54\\udfc5-\\udfcb]|\\ud804[\\udc52-\\udc65\\udde1-\\uddf4]|\\ud805[\\udf3a\\udf3b]|\\ud806[\\udcea-\\udcf2]|\\ud807[\\udc5a-\\udc6c\\udfc0-\\udfd4]|\\ud81a[\\udf5b-\\udf61]|\\ud81b[\\ude80-\\ude96]|\\ud834[\\udee0-\\udef3\\udf60-\\udf78]|\\ud83a[\\udcc7-\\udccf]|\\ud83b[\\udc71-\\udcab\\udcad-\\udcaf\\udcb1-\\udcb4\\udd01-\\udd2d\\udd2f-\\udd3d]|\\ud83c[\\udd00-\\udd0c]\"},{name:\"P\",alias:\"Punctuation\",bmp:\"!-#%-\\\\*,-\\\\/:;\\\\?@\\\\[-\\\\]_\\\\{\\\\}¡§«¶·»¿;·՚-՟։֊־׀׃׆׳״؉؊،؍؛؝-؟٪-٭۔܀-܍߷-߹࠰-࠾࡞।॥॰৽੶૰౷಄෴๏๚๛༄-༒༔༺-༽྅࿐-࿔࿙࿚၊-၏჻፠-፨᐀᙮᚛᚜᛫-᛭᜵᜶។-៖៘-៚᠀-᠊᥄᥅᨞᨟᪠-᪦᪨-᪭᭚-᭠᭽᭾᯼-᯿᰻-᰿᱾᱿᳀-᳇᳓‐-‧‰-⁃⁅-⁑⁓-⁞⁽⁾₍₎⌈-⌋〈〉❨-❵⟅⟆⟦-⟯⦃-⦘⧘-⧛⧼⧽⳹-⳼⳾⳿⵰⸀-⸮⸰-⹏⹒-⹝、-〃〈-】〔-〟〰〽゠・꓾꓿꘍-꘏꙳꙾꛲-꛷꡴-꡷꣎꣏꣸-꣺꣼꤮꤯꥟꧁-꧍꧞꧟꩜-꩟꫞꫟꫰꫱꯫﴾﴿︐-︙︰-﹒﹔-﹡﹣﹨﹪﹫!-#%-*,-/:;?@[-]_{}⦅-・\",astral:\"\\ud800[\\udd00-\\udd02\\udf9f\\udfd0]|𐕯|\\ud802[\\udc57\\udd1f\\udd3f\\ude50-\\ude58\\ude7f\\udef0-\\udef6\\udf39-\\udf3f\\udf99-\\udf9c]|\\ud803[\\udead\\udf55-\\udf59\\udf86-\\udf89]|\\ud804[\\udc47-\\udc4d\\udcbb\\udcbc\\udcbe-\\udcc1\\udd40-\\udd43\\udd74\\udd75\\uddc5-\\uddc8\\uddcd\\udddb\\udddd-\\udddf\\ude38-\\ude3d\\udea9]|\\ud805[\\udc4b-\\udc4f\\udc5a\\udc5b\\udc5d\\udcc6\\uddc1-\\uddd7\\ude41-\\ude43\\ude60-\\ude6c\\udeb9\\udf3c-\\udf3e]|\\ud806[\\udc3b\\udd44-\\udd46\\udde2\\ude3f-\\ude46\\ude9a-\\ude9c\\ude9e-\\udea2]|\\ud807[\\udc41-\\udc45\\udc70\\udc71\\udef7\\udef8\\udfff]|\\ud809[\\udc70-\\udc74]|\\ud80b[\\udff1\\udff2]|\\ud81a[\\ude6e\\ude6f\\udef5\\udf37-\\udf3b\\udf44]|\\ud81b[\\ude97-\\ude9a\\udfe2]|𛲟|\\ud836[\\ude87-\\ude8b]|\\ud83a[\\udd5e\\udd5f]\"},{name:\"Pc\",alias:\"Connector_Punctuation\",bmp:\"_‿⁀⁔︳︴﹍-﹏_\"},{name:\"Pd\",alias:\"Dash_Punctuation\",bmp:\"\\\\-֊־᐀᠆‐-―⸗⸚⸺⸻⹀⹝〜〰゠︱︲﹘﹣-\",astral:\"𐺭\"},{name:\"Pe\",alias:\"Close_Punctuation\",bmp:\"\\\\)\\\\]\\\\}༻༽᚜⁆⁾₎⌉⌋〉❩❫❭❯❱❳❵⟆⟧⟩⟫⟭⟯⦄⦆⦈⦊⦌⦎⦐⦒⦔⦖⦘⧙⧛⧽⸣⸥⸧⸩⹖⹘⹚⹜〉》」』】〕〗〙〛〞〟﴾︘︶︸︺︼︾﹀﹂﹄﹈﹚﹜﹞)]}⦆」\"},{name:\"Pf\",alias:\"Final_Punctuation\",bmp:\"»’”›⸃⸅⸊⸍⸝⸡\"},{name:\"Pi\",alias:\"Initial_Punctuation\",bmp:\"«‘‛“‟‹⸂⸄⸉⸌⸜⸠\"},{name:\"Po\",alias:\"Other_Punctuation\",bmp:\"!-#%-'\\\\*,\\\\.\\\\/:;\\\\?@\\\\¡§¶·¿;·՚-՟։׀׃׆׳״؉؊،؍؛؝-؟٪-٭۔܀-܍߷-߹࠰-࠾࡞।॥॰৽੶૰౷಄෴๏๚๛༄-༒༔྅࿐-࿔࿙࿚၊-၏჻፠-፨᙮᛫-᛭᜵᜶។-៖៘-៚᠀-᠅᠇-᠊᥄᥅᨞᨟᪠-᪦᪨-᪭᭚-᭠᭽᭾᯼-᯿᰻-᰿᱾᱿᳀-᳇᳓‖‗†-‧‰-‸※-‾⁁-⁃⁇-⁑⁓⁕-⁞⳹-⳼⳾⳿⵰⸀⸁⸆-⸈⸋⸎-⸖⸘⸙⸛⸞⸟⸪-⸮⸰-⸹⸼-⸿⹁⹃-⹏⹒-⹔、-〃〽・꓾꓿꘍-꘏꙳꙾꛲-꛷꡴-꡷꣎꣏꣸-꣺꣼꤮꤯꥟꧁-꧍꧞꧟꩜-꩟꫞꫟꫰꫱꯫︐-︖︙︰﹅﹆﹉-﹌﹐-﹒﹔-﹗﹟-﹡﹨﹪﹫!-#%-'*,./:;?@\。、・\",astral:\"\\ud800[\\udd00-\\udd02\\udf9f\\udfd0]|𐕯|\\ud802[\\udc57\\udd1f\\udd3f\\ude50-\\ude58\\ude7f\\udef0-\\udef6\\udf39-\\udf3f\\udf99-\\udf9c]|\\ud803[\\udf55-\\udf59\\udf86-\\udf89]|\\ud804[\\udc47-\\udc4d\\udcbb\\udcbc\\udcbe-\\udcc1\\udd40-\\udd43\\udd74\\udd75\\uddc5-\\uddc8\\uddcd\\udddb\\udddd-\\udddf\\ude38-\\ude3d\\udea9]|\\ud805[\\udc4b-\\udc4f\\udc5a\\udc5b\\udc5d\\udcc6\\uddc1-\\uddd7\\ude41-\\ude43\\ude60-\\ude6c\\udeb9\\udf3c-\\udf3e]|\\ud806[\\udc3b\\udd44-\\udd46\\udde2\\ude3f-\\ude46\\ude9a-\\ude9c\\ude9e-\\udea2]|\\ud807[\\udc41-\\udc45\\udc70\\udc71\\udef7\\udef8\\udfff]|\\ud809[\\udc70-\\udc74]|\\ud80b[\\udff1\\udff2]|\\ud81a[\\ude6e\\ude6f\\udef5\\udf37-\\udf3b\\udf44]|\\ud81b[\\ude97-\\ude9a\\udfe2]|𛲟|\\ud836[\\ude87-\\ude8b]|\\ud83a[\\udd5e\\udd5f]\"},{name:\"Ps\",alias:\"Open_Punctuation\",bmp:\"\\\\(\\\\[\\\\{༺༼᚛‚„⁅⁽₍⌈⌊〈❨❪❬❮❰❲❴⟅⟦⟨⟪⟬⟮⦃⦅⦇⦉⦋⦍⦏⦑⦓⦕⦗⧘⧚⧼⸢⸤⸦⸨⹂⹕⹗⹙⹛〈《「『【〔〖〘〚〝﴿︗︵︷︹︻︽︿﹁﹃﹇﹙﹛﹝([{⦅「\"},{name:\"S\",alias:\"Symbol\",bmp:\"\\\\$\\\\+<->\\\\^`\\\\|~¢-¦¨©¬®-±´¸×÷˂-˅˒-˟˥-˫˭˯-˿͵΄΅϶҂֍-֏؆-؈؋؎؏۞۩۽۾߶߾߿࢈৲৳৺৻૱୰௳-௺౿൏൹฿༁-༃༓༕-༗༚-༟༴༶༸྾-࿅࿇-࿌࿎࿏࿕-࿘႞႟᎐-᎙᙭៛᥀᧞-᧿᭡-᭪᭴-᭼᾽᾿-῁῍-῏῝-῟῭-`´῾⁄⁒⁺-⁼₊-₌₠-⃀℀℁℃-℆℈℉℔№-℘℞-℣℥℧℩℮℺℻⅀-⅄⅊-⅍⅏↊↋←-⌇⌌-⌨⌫-␦⑀-⑊⒜-ⓩ─-❧➔-⟄⟇-⟥⟰-⦂⦙-⧗⧜-⧻⧾-⭳⭶-⮕⮗-⯿⳥-⳪⹐⹑⺀-⺙⺛-⻳⼀-⿕⿰-⿻〄〒〓〠〶〷〾〿゛゜㆐㆑㆖-㆟㇀-㇣㈀-㈞㈪-㉇㉐㉠-㉿㊊-㊰㋀-㏿䷀-䷿꒐-꓆꜀-꜖꜠꜡꞉꞊꠨-꠫꠶-꠹꩷-꩹꭛꭪꭫﬩﮲-﯂﵀-﵏﷏﷼-﷿﹢﹤-﹦﹩$+<->^`|~¢-₩│-○�\",astral:\"\\ud800[\\udd37-\\udd3f\\udd79-\\udd89\\udd8c-\\udd8e\\udd90-\\udd9c\\udda0\\uddd0-\\uddfc]|\\ud802[\\udc77\\udc78\\udec8]|𑜿|\\ud807[\\udfd5-\\udff1]|\\ud81a[\\udf3c-\\udf3f\\udf45]|𛲜|\\ud833[\\udf50-\\udfc3]|\\ud834[\\udc00-\\udcf5\\udd00-\\udd26\\udd29-\\udd64\\udd6a-\\udd6c\\udd83\\udd84\\udd8c-\\udda9\\uddae-\\uddea\\ude00-\\ude41\\ude45\\udf00-\\udf56]|\\ud835[\\udec1\\udedb\\udefb\\udf15\\udf35\\udf4f\\udf6f\\udf89\\udfa9\\udfc3]|\\ud836[\\udc00-\\uddff\\ude37-\\ude3a\\ude6d-\\ude74\\ude76-\\ude83\\ude85\\ude86]|\\ud838[\\udd4f\\udeff]|\\ud83b[\\udcac\\udcb0\\udd2e\\udef0\\udef1]|\\ud83c[\\udc00-\\udc2b\\udc30-\\udc93\\udca0-\\udcae\\udcb1-\\udcbf\\udcc1-\\udccf\\udcd1-\\udcf5\\udd0d-\\uddad\\udde6-\\ude02\\ude10-\\ude3b\\ude40-\\ude48\\ude50\\ude51\\ude60-\\ude65\\udf00-\\udfff]|\\ud83d[\\udc00-\\uded7\\udedd-\\udeec\\udef0-\\udefc\\udf00-\\udf73\\udf80-\\udfd8\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udc00-\\udc0b\\udc10-\\udc47\\udc50-\\udc59\\udc60-\\udc87\\udc90-\\udcad\\udcb0\\udcb1\\udd00-\\ude53\\ude60-\\ude6d\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec5\\uded0-\\uded9\\udee0-\\udee7\\udef0-\\udef6\\udf00-\\udf92\\udf94-\\udfca]\"},{name:\"Sc\",alias:\"Currency_Symbol\",bmp:\"\\\\$¢-¥֏؋߾߿৲৳৻૱௹฿៛₠-⃀꠸﷼﹩$¢£¥₩\",astral:\"\\ud807[\\udfdd-\\udfe0]|𞋿|𞲰\"},{name:\"Sk\",alias:\"Modifier_Symbol\",bmp:\"\\\\^`¨¯´¸˂-˅˒-˟˥-˫˭˯-˿͵΄΅࢈᾽᾿-῁῍-῏῝-῟῭-`´῾゛゜꜀-꜖꜠꜡꞉꞊꭛꭪꭫﮲-﯂^` ̄\",astral:\"\\ud83c[\\udffb-\\udfff]\"},{name:\"Sm\",alias:\"Math_Symbol\",bmp:\"\\\\+<->\\\\|~¬±×÷϶؆-؈⁄⁒⁺-⁼₊-₌℘⅀-⅄⅋←-↔↚↛↠↣↦↮⇎⇏⇒⇔⇴-⋿⌠⌡⍼⎛-⎳⏜-⏡▷◁◸-◿♯⟀-⟄⟇-⟥⟰-⟿⤀-⦂⦙-⧗⧜-⧻⧾-⫿⬰-⭄⭇-⭌﬩﹢﹤-﹦+<->|~¬←-↓\",astral:\"\\ud835[\\udec1\\udedb\\udefb\\udf15\\udf35\\udf4f\\udf6f\\udf89\\udfa9\\udfc3]|\\ud83b[\\udef0\\udef1]\"},{name:\"So\",alias:\"Other_Symbol\",bmp:\"¦©®°҂֍֎؎؏۞۩۽۾߶৺୰௳-௸௺౿൏൹༁-༃༓༕-༗༚-༟༴༶༸྾-࿅࿇-࿌࿎࿏࿕-࿘႞႟᎐-᎙᙭᥀᧞-᧿᭡-᭪᭴-᭼℀℁℃-℆℈℉℔№℗℞-℣℥℧℩℮℺℻⅊⅌⅍⅏↊↋↕-↙↜-↟↡↢↤↥↧-↭↯-⇍⇐⇑⇓⇕-⇳⌀-⌇⌌-⌟⌢-⌨⌫-⍻⍽-⎚⎴-⏛⏢-␦⑀-⑊⒜-ⓩ─-▶▸-◀◂-◷☀-♮♰-❧➔-➿⠀-⣿⬀-⬯⭅⭆⭍-⭳⭶-⮕⮗-⯿⳥-⳪⹐⹑⺀-⺙⺛-⻳⼀-⿕⿰-⿻〄〒〓〠〶〷〾〿㆐㆑㆖-㆟㇀-㇣㈀-㈞㈪-㉇㉐㉠-㉿㊊-㊰㋀-㏿䷀-䷿꒐-꓆꠨-꠫꠶꠷꠹꩷-꩹﵀-﵏﷏﷽-﷿¦│■○�\",astral:\"\\ud800[\\udd37-\\udd3f\\udd79-\\udd89\\udd8c-\\udd8e\\udd90-\\udd9c\\udda0\\uddd0-\\uddfc]|\\ud802[\\udc77\\udc78\\udec8]|𑜿|\\ud807[\\udfd5-\\udfdc\\udfe1-\\udff1]|\\ud81a[\\udf3c-\\udf3f\\udf45]|𛲜|\\ud833[\\udf50-\\udfc3]|\\ud834[\\udc00-\\udcf5\\udd00-\\udd26\\udd29-\\udd64\\udd6a-\\udd6c\\udd83\\udd84\\udd8c-\\udda9\\uddae-\\uddea\\ude00-\\ude41\\ude45\\udf00-\\udf56]|\\ud836[\\udc00-\\uddff\\ude37-\\ude3a\\ude6d-\\ude74\\ude76-\\ude83\\ude85\\ude86]|𞅏|\\ud83b[\\udcac\\udd2e]|\\ud83c[\\udc00-\\udc2b\\udc30-\\udc93\\udca0-\\udcae\\udcb1-\\udcbf\\udcc1-\\udccf\\udcd1-\\udcf5\\udd0d-\\uddad\\udde6-\\ude02\\ude10-\\ude3b\\ude40-\\ude48\\ude50\\ude51\\ude60-\\ude65\\udf00-\\udffa]|\\ud83d[\\udc00-\\uded7\\udedd-\\udeec\\udef0-\\udefc\\udf00-\\udf73\\udf80-\\udfd8\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udc00-\\udc0b\\udc10-\\udc47\\udc50-\\udc59\\udc60-\\udc87\\udc90-\\udcad\\udcb0\\udcb1\\udd00-\\ude53\\ude60-\\ude6d\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec5\\uded0-\\uded9\\udee0-\\udee7\\udef0-\\udef6\\udf00-\\udf92\\udf94-\\udfca]\"},{name:\"Z\",alias:\"Separator\",bmp:\" - \\u2028\\u2029 \"},{name:\"Zl\",alias:\"Line_Separator\",bmp:\"\\u2028\"},{name:\"Zp\",alias:\"Paragraph_Separator\",bmp:\"\\u2029\"},{name:\"Zs\",alias:\"Space_Separator\",bmp:\" - \"}],de=[{name:\"ASCII\",bmp:\"\\0-\"},{name:\"Alphabetic\",bmp:\"A-Za-zªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͅͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈְ-ׇֽֿׁׂׅׄא-תׯ-ײؐ-ؚؠ-ٗٙ-ٟٮ-ۓە-ۜۡ-ۭۨ-ۯۺ-ۼۿܐ-ܿݍ-ޱߊ-ߪߴߵߺࠀ-ࠗࠚ-ࠬࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉࣔ-ࣣࣟ-ࣰࣩ-ऻऽ-ौॎ-ॐॕ-ॣॱ-ঃঅ-ঌএঐও-নপ-রলশ-হঽ-ৄেৈোৌৎৗড়ঢ়য়-ৣৰৱৼਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਾ-ੂੇੈੋੌੑਖ਼-ੜਫ਼ੰ-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽ-ૅે-ૉોૌૐૠ-ૣૹ-ૼଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽ-ୄେୈୋୌୖୗଡ଼ଢ଼ୟ-ୣୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-ௌௐௗఀ-ఃఅ-ఌఎ-ఐఒ-నప-హఽ-ౄె-ైొ-ౌౕౖౘ-ౚౝౠ-ౣಀ-ಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽ-ೄೆ-ೈೊ-ೌೕೖೝೞೠ-ೣೱೲഀ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൌൎൔ-ൗൟ-ൣൺ-ൿඁ-ඃඅ-ඖක-නඳ-රලව-ෆා-ුූෘ-ෟෲෳก-ฺเ-ๆํກຂຄຆ-ຊຌ-ຣລວ-ູົ-ຽເ-ໄໆໍໜ-ໟༀཀ-ཇཉ-ཬཱ-ཱྀྈ-ྗྙ-ྼက-ံးျ-ဿၐ-ႏႚ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜓᜟ-ᜳᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-ឳា-ៈៗៜᠠ-ᡸᢀ-ᢪᢰ-ᣵᤀ-ᤞᤠ-ᤫᤰ-ᤸᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨛᨠ-ᩞᩡ-ᩴᪧᪿᫀᫌ-ᫎᬀ-ᬳᬵ-ᭃᭅ-ᭌᮀ-ᮩᮬ-ᮯᮺ-ᯥᯧ-ᯱᰀ-ᰶᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿᷧ-ᷴḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⒶ-ⓩⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙴ-ꙻꙿ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠅꠇ-ꠧꡀ-ꡳꢀ-ꣃꣅꣲ-ꣷꣻꣽ-ꣿꤊ-ꤪꤰ-ꥒꥠ-ꥼꦀ-ꦲꦴ-ꦿꧏꧠ-ꧯꧺ-ꧾꨀ-ꨶꩀ-ꩍꩠ-ꩶꩺ-ꪾꫀꫂꫛ-ꫝꫠ-ꫯꫲ-ꫵꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯪ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ\",astral:\"\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa\\udd40-\\udd74\\ude80-\\ude9c\\udea0-\\uded0\\udf00-\\udf1f\\udf2d-\\udf4a\\udf50-\\udf7a\\udf80-\\udf9d\\udfa0-\\udfc3\\udfc8-\\udfcf\\udfd1-\\udfd5]|\\ud801[\\udc00-\\udc9d\\udcb0-\\udcd3\\udcd8-\\udcfb\\udd00-\\udd27\\udd30-\\udd63\\udd70-\\udd7a\\udd7c-\\udd8a\\udd8c-\\udd92\\udd94\\udd95\\udd97-\\udda1\\udda3-\\uddb1\\uddb3-\\uddb9\\uddbb\\uddbc\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67\\udf80-\\udf85\\udf87-\\udfb0\\udfb2-\\udfba]|\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f-\\udc55\\udc60-\\udc76\\udc80-\\udc9e\\udce0-\\udcf2\\udcf4\\udcf5\\udd00-\\udd15\\udd20-\\udd39\\udd80-\\uddb7\\uddbe\\uddbf\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude60-\\ude7c\\ude80-\\ude9c\\udec0-\\udec7\\udec9-\\udee4\\udf00-\\udf35\\udf40-\\udf55\\udf60-\\udf72\\udf80-\\udf91]|\\ud803[\\udc00-\\udc48\\udc80-\\udcb2\\udcc0-\\udcf2\\udd00-\\udd27\\ude80-\\udea9\\udeab\\udeac\\udeb0\\udeb1\\udf00-\\udf1c\\udf27\\udf30-\\udf45\\udf70-\\udf81\\udfb0-\\udfc4\\udfe0-\\udff6]|\\ud804[\\udc00-\\udc45\\udc71-\\udc75\\udc82-\\udcb8\\udcc2\\udcd0-\\udce8\\udd00-\\udd32\\udd44-\\udd47\\udd50-\\udd72\\udd76\\udd80-\\uddbf\\uddc1-\\uddc4\\uddce\\uddcf\\uddda\\udddc\\ude00-\\ude11\\ude13-\\ude34\\ude37\\ude3e\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea8\\udeb0-\\udee8\\udf00-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3d-\\udf44\\udf47\\udf48\\udf4b\\udf4c\\udf50\\udf57\\udf5d-\\udf63]|\\ud805[\\udc00-\\udc41\\udc43-\\udc45\\udc47-\\udc4a\\udc5f-\\udc61\\udc80-\\udcc1\\udcc4\\udcc5\\udcc7\\udd80-\\uddb5\\uddb8-\\uddbe\\uddd8-\\udddd\\ude00-\\ude3e\\ude40\\ude44\\ude80-\\udeb5\\udeb8\\udf00-\\udf1a\\udf1d-\\udf2a\\udf40-\\udf46]|\\ud806[\\udc00-\\udc38\\udca0-\\udcdf\\udcff-\\udd06\\udd09\\udd0c-\\udd13\\udd15\\udd16\\udd18-\\udd35\\udd37\\udd38\\udd3b\\udd3c\\udd3f-\\udd42\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udddf\\udde1\\udde3\\udde4\\ude00-\\ude32\\ude35-\\ude3e\\ude50-\\ude97\\ude9d\\udeb0-\\udef8]|\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc3e\\udc40\\udc72-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6\\udd00-\\udd06\\udd08\\udd09\\udd0b-\\udd36\\udd3a\\udd3c\\udd3d\\udd3f-\\udd41\\udd43\\udd46\\udd47\\udd60-\\udd65\\udd67\\udd68\\udd6a-\\udd8e\\udd90\\udd91\\udd93-\\udd96\\udd98\\udee0-\\udef6\\udfb0]|\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc80-\\udd43]|\\ud80b[\\udf90-\\udff0]|[\\ud80c\\ud81c-\\ud820\\ud822\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872\\ud874-\\ud879\\ud880-\\ud883][\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e]|\\ud811[\\udc00-\\ude46]|\\ud81a[\\udc00-\\ude38\\ude40-\\ude5e\\ude70-\\udebe\\uded0-\\udeed\\udf00-\\udf2f\\udf40-\\udf43\\udf63-\\udf77\\udf7d-\\udf8f]|\\ud81b[\\ude40-\\ude7f\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f\\udfe0\\udfe1\\udfe3\\udff0\\udff1]|\\ud821[\\udc00-\\udff7]|\\ud823[\\udc00-\\udcd5\\udd00-\\udd08]|\\ud82b[\\udff0-\\udff3\\udff5-\\udffb\\udffd\\udffe]|\\ud82c[\\udc00-\\udd22\\udd50-\\udd52\\udd64-\\udd67\\udd70-\\udefb]|\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9e]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udec0\\udec2-\\udeda\\udedc-\\udefa\\udefc-\\udf14\\udf16-\\udf34\\udf36-\\udf4e\\udf50-\\udf6e\\udf70-\\udf88\\udf8a-\\udfa8\\udfaa-\\udfc2\\udfc4-\\udfcb]|\\ud837[\\udf00-\\udf1e]|\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23\\udc24\\udc26-\\udc2a\\udd00-\\udd2c\\udd37-\\udd3d\\udd4e\\ude90-\\udead\\udec0-\\udeeb]|\\ud839[\\udfe0-\\udfe6\\udfe8-\\udfeb\\udfed\\udfee\\udff0-\\udffe]|\\ud83a[\\udc00-\\udcc4\\udd00-\\udd43\\udd47\\udd4b]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb]|\\ud83c[\\udd30-\\udd49\\udd50-\\udd69\\udd70-\\udd89]|\\ud869[\\udc00-\\udedf\\udf00-\\udfff]|\\ud86d[\\udc00-\\udf38\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\ud884[\\udc00-\\udf4a]\"},{name:\"Any\",isBmpLast:!0,bmp:\"\\0-\",astral:\"[\\ud800-\\udbff][\\udc00-\\udfff]\"},{name:\"Default_Ignorable_Code_Point\",bmp:\"͏ᅟᅠ឴឵᠋-᠏---ㅤ︀-️\\ufeffᅠ-\",astral:\"\\ud82f[\\udca0-\\udca3]|\\ud834[\\udd73-\\udd7a]|[\\udb40-\\udb43][\\udc00-\\udfff]\"},{name:\"Lowercase\",bmp:\"a-zªµºß-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıijĵķĸĺļľŀłńņňʼnŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž-ƀƃƅƈƌƍƒƕƙ-ƛƞơƣƥƨƪƫƭưƴƶƹƺƽ-ƿdžljnjǎǐǒǔǖǘǚǜǝǟǡǣǥǧǩǫǭǯǰdzǵǹǻǽǿȁȃȅȇȉȋȍȏȑȓȕȗșțȝȟȡȣȥȧȩȫȭȯȱȳ-ȹȼȿɀɂɇɉɋɍɏ-ʓʕ-ʸˀˁˠ-ˤͅͱͳͷͺ-ͽΐά-ώϐϑϕ-ϗϙϛϝϟϡϣϥϧϩϫϭϯ-ϳϵϸϻϼа-џѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӂӄӆӈӊӌӎӏӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӷӹӻӽӿԁԃԅԇԉԋԍԏԑԓԕԗԙԛԝԟԡԣԥԧԩԫԭԯՠ-ֈა-ჺჽ-ჿᏸ-ᏽᲀ-ᲈᴀ-ᶿḁḃḅḇḉḋḍḏḑḓḕḗḙḛḝḟḡḣḥḧḩḫḭḯḱḳḵḷḹḻḽḿṁṃṅṇṉṋṍṏṑṓṕṗṙṛṝṟṡṣṥṧṩṫṭṯṱṳṵṷṹṻṽṿẁẃẅẇẉẋẍẏẑẓẕ-ẝẟạảấầẩẫậắằẳẵặẹẻẽếềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹỻỽỿ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷιῂ-ῄῆῇῐ-ΐῖῗῠ-ῧῲ-ῴῶῷⁱⁿₐ-ₜℊℎℏℓℯℴℹℼℽⅆ-ⅉⅎⅰ-ⅿↄⓐ-ⓩⰰ-ⱟⱡⱥⱦⱨⱪⱬⱱⱳⱴⱶ-ⱽⲁⲃⲅⲇⲉⲋⲍⲏⲑⲓⲕⲗⲙⲛⲝⲟⲡⲣⲥⲧⲩⲫⲭⲯⲱⲳⲵⲷⲹⲻⲽⲿⳁⳃⳅⳇⳉⳋⳍⳏⳑⳓⳕⳗⳙⳛⳝⳟⳡⳣⳤⳬⳮⳳⴀ-ⴥⴧⴭꙁꙃꙅꙇꙉꙋꙍꙏꙑꙓꙕꙗꙙꙛꙝꙟꙡꙣꙥꙧꙩꙫꙭꚁꚃꚅꚇꚉꚋꚍꚏꚑꚓꚕꚗꚙꚛ-ꚝꜣꜥꜧꜩꜫꜭꜯ-ꜱꜳꜵꜷꜹꜻꜽꜿꝁꝃꝅꝇꝉꝋꝍꝏꝑꝓꝕꝗꝙꝛꝝꝟꝡꝣꝥꝧꝩꝫꝭꝯ-ꝸꝺꝼꝿꞁꞃꞅꞇꞌꞎꞑꞓ-ꞕꞗꞙꞛꞝꞟꞡꞣꞥꞧꞩꞯꞵꞷꞹꞻꞽꞿꟁꟃꟈꟊꟑꟓꟕꟗꟙꟶꟸ-ꟺꬰ-ꭚꭜ-ꭨꭰ-ꮿff-stﬓ-ﬗa-z\",astral:\"\\ud801[\\udc28-\\udc4f\\udcd8-\\udcfb\\udd97-\\udda1\\udda3-\\uddb1\\uddb3-\\uddb9\\uddbb\\uddbc\\udf80\\udf83-\\udf85\\udf87-\\udfb0\\udfb2-\\udfba]|\\ud803[\\udcc0-\\udcf2]|\\ud806[\\udcc0-\\udcdf]|\\ud81b[\\ude60-\\ude7f]|\\ud835[\\udc1a-\\udc33\\udc4e-\\udc54\\udc56-\\udc67\\udc82-\\udc9b\\udcb6-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udccf\\udcea-\\udd03\\udd1e-\\udd37\\udd52-\\udd6b\\udd86-\\udd9f\\uddba-\\uddd3\\uddee-\\ude07\\ude22-\\ude3b\\ude56-\\ude6f\\ude8a-\\udea5\\udec2-\\udeda\\udedc-\\udee1\\udefc-\\udf14\\udf16-\\udf1b\\udf36-\\udf4e\\udf50-\\udf55\\udf70-\\udf88\\udf8a-\\udf8f\\udfaa-\\udfc2\\udfc4-\\udfc9\\udfcb]|\\ud837[\\udf00-\\udf09\\udf0b-\\udf1e]|\\ud83a[\\udd22-\\udd43]\"},{name:\"Noncharacter_Code_Point\",bmp:\"-\",astral:\"[\\ud83f\\ud87f\\ud8bf\\ud8ff\\ud93f\\ud97f\\ud9bf\\ud9ff\\uda3f\\uda7f\\udabf\\udaff\\udb3f\\udb7f\\udbbf\\udbff][\\udffe\\udfff]\"},{name:\"Uppercase\",bmp:\"A-ZÀ-ÖØ-ÞĀĂĄĆĈĊČĎĐĒĔĖĘĚĜĞĠĢĤĦĨĪĬĮİIJĴĶĹĻĽĿŁŃŅŇŊŌŎŐŒŔŖŘŚŜŞŠŢŤŦŨŪŬŮŰŲŴŶŸŹŻŽƁƂƄƆƇƉ-ƋƎ-ƑƓƔƖ-ƘƜƝƟƠƢƤƦƧƩƬƮƯƱ-ƳƵƷƸƼDŽLJNJǍǏǑǓǕǗǙǛǞǠǢǤǦǨǪǬǮDZǴǶ-ǸǺǼǾȀȂȄȆȈȊȌȎȐȒȔȖȘȚȜȞȠȢȤȦȨȪȬȮȰȲȺȻȽȾɁɃ-ɆɈɊɌɎͰͲͶͿΆΈ-ΊΌΎΏΑ-ΡΣ-ΫϏϒ-ϔϘϚϜϞϠϢϤϦϨϪϬϮϴϷϹϺϽ-ЯѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӀӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӶӸӺӼӾԀԂԄԆԈԊԌԎԐԒԔԖԘԚԜԞԠԢԤԦԨԪԬԮԱ-ՖႠ-ჅჇჍᎠ-ᏵᲐ-ᲺᲽ-ᲿḀḂḄḆḈḊḌḎḐḒḔḖḘḚḜḞḠḢḤḦḨḪḬḮḰḲḴḶḸḺḼḾṀṂṄṆṈṊṌṎṐṒṔṖṘṚṜṞṠṢṤṦṨṪṬṮṰṲṴṶṸṺṼṾẀẂẄẆẈẊẌẎẐẒẔẞẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼẾỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴỶỸỺỼỾἈ-ἏἘ-ἝἨ-ἯἸ-ἿὈ-ὍὙὛὝὟὨ-ὯᾸ-ΆῈ-ΉῘ-ΊῨ-ῬῸ-Ώℂℇℋ-ℍℐ-ℒℕℙ-ℝℤΩℨK-ℭℰ-ℳℾℿⅅⅠ-ⅯↃⒶ-ⓏⰀ-ⰯⱠⱢ-ⱤⱧⱩⱫⱭ-ⱰⱲⱵⱾ-ⲀⲂⲄⲆⲈⲊⲌⲎⲐⲒⲔⲖⲘⲚⲜⲞⲠⲢⲤⲦⲨⲪⲬⲮⲰⲲⲴⲶⲸⲺⲼⲾⳀⳂⳄⳆⳈⳊⳌⳎⳐⳒⳔⳖⳘⳚⳜⳞⳠⳢⳫⳭⳲꙀꙂꙄꙆꙈꙊꙌꙎꙐꙒꙔꙖꙘꙚꙜꙞꙠꙢꙤꙦꙨꙪꙬꚀꚂꚄꚆꚈꚊꚌꚎꚐꚒꚔꚖꚘꚚꜢꜤꜦꜨꜪꜬꜮꜲꜴꜶꜸꜺꜼꜾꝀꝂꝄꝆꝈꝊꝌꝎꝐꝒꝔꝖꝘꝚꝜꝞꝠꝢꝤꝦꝨꝪꝬꝮꝹꝻꝽꝾꞀꞂꞄꞆꞋꞍꞐꞒꞖꞘꞚꞜꞞꞠꞢꞤꞦꞨꞪ-ꞮꞰ-ꞴꞶꞸꞺꞼꞾꟀꟂꟄ-ꟇꟉꟐꟖꟘꟵA-Z\",astral:\"\\ud801[\\udc00-\\udc27\\udcb0-\\udcd3\\udd70-\\udd7a\\udd7c-\\udd8a\\udd8c-\\udd92\\udd94\\udd95]|\\ud803[\\udc80-\\udcb2]|\\ud806[\\udca0-\\udcbf]|\\ud81b[\\ude40-\\ude5f]|\\ud835[\\udc00-\\udc19\\udc34-\\udc4d\\udc68-\\udc81\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb5\\udcd0-\\udce9\\udd04\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd38\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd6c-\\udd85\\udda0-\\uddb9\\uddd4-\\udded\\ude08-\\ude21\\ude3c-\\ude55\\ude70-\\ude89\\udea8-\\udec0\\udee2-\\udefa\\udf1c-\\udf34\\udf56-\\udf6e\\udf90-\\udfa8\\udfca]|\\ud83a[\\udd00-\\udd21]|\\ud83c[\\udd30-\\udd49\\udd50-\\udd69\\udd70-\\udd89]\"},{name:\"White_Space\",bmp:\"\\t-\\r - \\u2028\\u2029 \"}],te=[{name:\"Adlam\",astral:\"\\ud83a[\\udd00-\\udd4b\\udd50-\\udd59\\udd5e\\udd5f]\"},{name:\"Ahom\",astral:\"\\ud805[\\udf00-\\udf1a\\udf1d-\\udf2b\\udf30-\\udf46]\"},{name:\"Anatolian_Hieroglyphs\",astral:\"\\ud811[\\udc00-\\ude46]\"},{name:\"Arabic\",bmp:\"-؆-؋؍-ؚ-؞ؠ-ؿف-يٖ-ٯٱ-ۜ۞-ۿݐ-ݿࡰ-ࢎ࢘-ࣣ࣡-ࣿﭐ-﯂ﯓ-ﴽ﵀-ﶏﶒ-ﷇ﷏ﷰ-﷿ﹰ-ﹴﹶ-ﻼ\",astral:\"\\ud803[\\ude60-\\ude7e]|\\ud83b[\\ude00-\\ude03\\ude05-\\ude1f\\ude21\\ude22\\ude24\\ude27\\ude29-\\ude32\\ude34-\\ude37\\ude39\\ude3b\\ude42\\ude47\\ude49\\ude4b\\ude4d-\\ude4f\\ude51\\ude52\\ude54\\ude57\\ude59\\ude5b\\ude5d\\ude5f\\ude61\\ude62\\ude64\\ude67-\\ude6a\\ude6c-\\ude72\\ude74-\\ude77\\ude79-\\ude7c\\ude7e\\ude80-\\ude89\\ude8b-\\ude9b\\udea1-\\udea3\\udea5-\\udea9\\udeab-\\udebb\\udef0\\udef1]\"},{name:\"Armenian\",bmp:\"Ա-Ֆՙ-֊֍-֏ﬓ-ﬗ\"},{name:\"Avestan\",astral:\"\\ud802[\\udf00-\\udf35\\udf39-\\udf3f]\"},{name:\"Balinese\",bmp:\"ᬀ-ᭌ᭐-᭾\"},{name:\"Bamum\",bmp:\"ꚠ-꛷\",astral:\"\\ud81a[\\udc00-\\ude38]\"},{name:\"Bassa_Vah\",astral:\"\\ud81a[\\uded0-\\udeed\\udef0-\\udef5]\"},{name:\"Batak\",bmp:\"ᯀ-᯳᯼-᯿\"},{name:\"Bengali\",bmp:\"ঀ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-৾\"},{name:\"Bhaiksuki\",astral:\"\\ud807[\\udc00-\\udc08\\udc0a-\\udc36\\udc38-\\udc45\\udc50-\\udc6c]\"},{name:\"Bopomofo\",bmp:\"˪˫ㄅ-ㄯㆠ-ㆿ\"},{name:\"Brahmi\",astral:\"\\ud804[\\udc00-\\udc4d\\udc52-\\udc75\\udc7f]\"},{name:\"Braille\",bmp:\"⠀-⣿\"},{name:\"Buginese\",bmp:\"ᨀ-ᨛ᨞᨟\"},{name:\"Buhid\",bmp:\"ᝀ-ᝓ\"},{name:\"Canadian_Aboriginal\",bmp:\"᐀-ᙿᢰ-ᣵ\",astral:\"\\ud806[\\udeb0-\\udebf]\"},{name:\"Carian\",astral:\"\\ud800[\\udea0-\\uded0]\"},{name:\"Caucasian_Albanian\",astral:\"\\ud801[\\udd30-\\udd63\\udd6f]\"},{name:\"Chakma\",astral:\"\\ud804[\\udd00-\\udd34\\udd36-\\udd47]\"},{name:\"Cham\",bmp:\"ꨀ-ꨶꩀ-ꩍ꩐-꩙꩜-꩟\"},{name:\"Cherokee\",bmp:\"Ꭰ-Ᏽᏸ-ᏽꭰ-ꮿ\"},{name:\"Chorasmian\",astral:\"\\ud803[\\udfb0-\\udfcb]\"},{name:\"Common\",bmp:\"\\0-@\\\\[-`\\\\{-©«-¹»-¿×÷ʹ-˟˥-˩ˬ-˿ʹ;΅·،؛؟ـ।॥฿࿕-࿘჻᛫-᛭᜵᜶᠂᠃᠅᳓᳡ᳩ-ᳬᳮ-ᳳᳵ-᳷ᳺ ---⁰⁴-⁾₀-₎₠-⃀℀-℥℧-℩ℬ-ℱℳ-⅍⅏-⅟↉-↋←-␦⑀-⑊①-⟿⤀-⭳⭶-⮕⮗-⯿⸀-⹝⿰-⿻ -〄〆〈-〠〰-〷〼-〿゛゜゠・ー㆐-㆟㇀-㇣㈠-㉟㉿-㋏㋿㍘-㏿䷀-䷿꜀-꜡ꞈ-꞊꠰-꠹꤮ꧏ꭛꭪꭫﴾﴿︐-︙︰-﹒﹔-﹦﹨-﹫\\ufeff!-@[-`{-・ー゙゚¢-₩│-○-�\",astral:\"\\ud800[\\udd00-\\udd02\\udd07-\\udd33\\udd37-\\udd3f\\udd90-\\udd9c\\uddd0-\\uddfc\\udee1-\\udefb]|\\ud82f[\\udca0-\\udca3]|\\ud833[\\udf50-\\udfc3]|\\ud834[\\udc00-\\udcf5\\udd00-\\udd26\\udd29-\\udd66\\udd6a-\\udd7a\\udd83\\udd84\\udd8c-\\udda9\\uddae-\\uddea\\udee0-\\udef3\\udf00-\\udf56\\udf60-\\udf78]|\\ud835[\\udc00-\\udc54\\udc56-\\udc9c\\udc9e\\udc9f\\udca2\\udca5\\udca6\\udca9-\\udcac\\udcae-\\udcb9\\udcbb\\udcbd-\\udcc3\\udcc5-\\udd05\\udd07-\\udd0a\\udd0d-\\udd14\\udd16-\\udd1c\\udd1e-\\udd39\\udd3b-\\udd3e\\udd40-\\udd44\\udd46\\udd4a-\\udd50\\udd52-\\udea5\\udea8-\\udfcb\\udfce-\\udfff]|\\ud83b[\\udc71-\\udcb4\\udd01-\\udd3d]|\\ud83c[\\udc00-\\udc2b\\udc30-\\udc93\\udca0-\\udcae\\udcb1-\\udcbf\\udcc1-\\udccf\\udcd1-\\udcf5\\udd00-\\uddad\\udde6-\\uddff\\ude01\\ude02\\ude10-\\ude3b\\ude40-\\ude48\\ude50\\ude51\\ude60-\\ude65\\udf00-\\udfff]|\\ud83d[\\udc00-\\uded7\\udedd-\\udeec\\udef0-\\udefc\\udf00-\\udf73\\udf80-\\udfd8\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udc00-\\udc0b\\udc10-\\udc47\\udc50-\\udc59\\udc60-\\udc87\\udc90-\\udcad\\udcb0\\udcb1\\udd00-\\ude53\\ude60-\\ude6d\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec5\\uded0-\\uded9\\udee0-\\udee7\\udef0-\\udef6\\udf00-\\udf92\\udf94-\\udfca\\udff0-\\udff9]|\\udb40[\\udc01\\udc20-\\udc7f]\"},{name:\"Coptic\",bmp:\"Ϣ-ϯⲀ-ⳳ⳹-⳿\"},{name:\"Cuneiform\",astral:\"\\ud808[\\udc00-\\udf99]|\\ud809[\\udc00-\\udc6e\\udc70-\\udc74\\udc80-\\udd43]\"},{name:\"Cypriot\",astral:\"\\ud802[\\udc00-\\udc05\\udc08\\udc0a-\\udc35\\udc37\\udc38\\udc3c\\udc3f]\"},{name:\"Cypro_Minoan\",astral:\"\\ud80b[\\udf90-\\udff2]\"},{name:\"Cyrillic\",bmp:\"Ѐ-҄҇-ԯᲀ-ᲈᴫᵸⷠ-ⷿꙀ-ꚟ︮︯\"},{name:\"Deseret\",astral:\"\\ud801[\\udc00-\\udc4f]\"},{name:\"Devanagari\",bmp:\"ऀ-ॐॕ-ॣ०-ॿ꣠-ꣿ\"},{name:\"Dives_Akuru\",astral:\"\\ud806[\\udd00-\\udd06\\udd09\\udd0c-\\udd13\\udd15\\udd16\\udd18-\\udd35\\udd37\\udd38\\udd3b-\\udd46\\udd50-\\udd59]\"},{name:\"Dogra\",astral:\"\\ud806[\\udc00-\\udc3b]\"},{name:\"Duployan\",astral:\"\\ud82f[\\udc00-\\udc6a\\udc70-\\udc7c\\udc80-\\udc88\\udc90-\\udc99\\udc9c-\\udc9f]\"},{name:\"Egyptian_Hieroglyphs\",astral:\"\\ud80c[\\udc00-\\udfff]|\\ud80d[\\udc00-\\udc2e\\udc30-\\udc38]\"},{name:\"Elbasan\",astral:\"\\ud801[\\udd00-\\udd27]\"},{name:\"Elymaic\",astral:\"\\ud803[\\udfe0-\\udff6]\"},{name:\"Ethiopic\",bmp:\"ሀ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፼ᎀ-᎙ⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮ\",astral:\"\\ud839[\\udfe0-\\udfe6\\udfe8-\\udfeb\\udfed\\udfee\\udff0-\\udffe]\"},{name:\"Georgian\",bmp:\"Ⴀ-ჅჇჍა-ჺჼ-ჿᲐ-ᲺᲽ-Ჿⴀ-ⴥⴧⴭ\"},{name:\"Glagolitic\",bmp:\"Ⰰ-ⱟ\",astral:\"\\ud838[\\udc00-\\udc06\\udc08-\\udc18\\udc1b-\\udc21\\udc23\\udc24\\udc26-\\udc2a]\"},{name:\"Gothic\",astral:\"\\ud800[\\udf30-\\udf4a]\"},{name:\"Grantha\",astral:\"\\ud804[\\udf00-\\udf03\\udf05-\\udf0c\\udf0f\\udf10\\udf13-\\udf28\\udf2a-\\udf30\\udf32\\udf33\\udf35-\\udf39\\udf3c-\\udf44\\udf47\\udf48\\udf4b-\\udf4d\\udf50\\udf57\\udf5d-\\udf63\\udf66-\\udf6c\\udf70-\\udf74]\"},{name:\"Greek\",bmp:\"Ͱ-ͳ͵-ͷͺ-ͽͿ΄ΆΈ-ΊΌΎ-ΡΣ-ϡϰ-Ͽᴦ-ᴪᵝ-ᵡᵦ-ᵪᶿἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ῄῆ-ΐῖ-Ί῝-`ῲ-ῴῶ-῾Ωꭥ\",astral:\"\\ud800[\\udd40-\\udd8e\\udda0]|\\ud834[\\ude00-\\ude45]\"},{name:\"Gujarati\",bmp:\"ઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૱ૹ-૿\"},{name:\"Gunjala_Gondi\",astral:\"\\ud807[\\udd60-\\udd65\\udd67\\udd68\\udd6a-\\udd8e\\udd90\\udd91\\udd93-\\udd98\\udda0-\\udda9]\"},{name:\"Gurmukhi\",bmp:\"ਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-੶\"},{name:\"Han\",bmp:\"⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〻㐀-䶿一-鿿豈-舘並-龎\",astral:\"\\ud81b[\\udfe2\\udfe3\\udff0\\udff1]|[\\ud840-\\ud868\\ud86a-\\ud86c\\ud86f-\\ud872\\ud874-\\ud879\\ud880-\\ud883][\\udc00-\\udfff]|\\ud869[\\udc00-\\udedf\\udf00-\\udfff]|\\ud86d[\\udc00-\\udf38\\udf40-\\udfff]|\\ud86e[\\udc00-\\udc1d\\udc20-\\udfff]|\\ud873[\\udc00-\\udea1\\udeb0-\\udfff]|\\ud87a[\\udc00-\\udfe0]|\\ud87e[\\udc00-\\ude1d]|\\ud884[\\udc00-\\udf4a]\"},{name:\"Hangul\",bmp:\"ᄀ-ᇿ〮〯ㄱ-ㆎ㈀-㈞㉠-㉾ꥠ-ꥼ가-힣ힰ-ퟆퟋ-ퟻᅠ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ\"},{name:\"Hanifi_Rohingya\",astral:\"\\ud803[\\udd00-\\udd27\\udd30-\\udd39]\"},{name:\"Hanunoo\",bmp:\"ᜠ-᜴\"},{name:\"Hatran\",astral:\"\\ud802[\\udce0-\\udcf2\\udcf4\\udcf5\\udcfb-\\udcff]\"},{name:\"Hebrew\",bmp:\"֑-ׇא-תׯ-״יִ-זּטּ-לּמּנּסּףּפּצּ-ﭏ\"},{name:\"Hiragana\",bmp:\"ぁ-ゖゝ-ゟ\",astral:\"\\ud82c[\\udc01-\\udd1f\\udd50-\\udd52]|🈀\"},{name:\"Imperial_Aramaic\",astral:\"\\ud802[\\udc40-\\udc55\\udc57-\\udc5f]\"},{name:\"Inherited\",bmp:\"̀-ًͯ҅҆-ٰٕ॑-॔᪰-ᫎ᳐-᳔᳒-᳢᳠-᳨᳭᳴᳸᳹᷀-᷿⃐-〪⃰-゙゚〭︀-️︠-︭\",astral:\"\\ud800[\\uddfd\\udee0]|𑌻|\\ud833[\\udf00-\\udf2d\\udf30-\\udf46]|\\ud834[\\udd67-\\udd69\\udd7b-\\udd82\\udd85-\\udd8b\\uddaa-\\uddad]|\\udb40[\\udd00-\\uddef]\"},{name:\"Inscriptional_Pahlavi\",astral:\"\\ud802[\\udf60-\\udf72\\udf78-\\udf7f]\"},{name:\"Inscriptional_Parthian\",astral:\"\\ud802[\\udf40-\\udf55\\udf58-\\udf5f]\"},{name:\"Javanese\",bmp:\"ꦀ-꧍꧐-꧙꧞꧟\"},{name:\"Kaithi\",astral:\"\\ud804[\\udc80-\\udcc2\\udccd]\"},{name:\"Kannada\",bmp:\"ಀ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೝೞೠ-ೣ೦-೯ೱೲ\"},{name:\"Katakana\",bmp:\"ァ-ヺヽ-ヿㇰ-ㇿ㋐-㋾㌀-㍗ヲ-ッア-ン\",astral:\"\\ud82b[\\udff0-\\udff3\\udff5-\\udffb\\udffd\\udffe]|\\ud82c[\\udc00\\udd20-\\udd22\\udd64-\\udd67]\"},{name:\"Kayah_Li\",bmp:\"꤀-꤭꤯\"},{name:\"Kharoshthi\",astral:\"\\ud802[\\ude00-\\ude03\\ude05\\ude06\\ude0c-\\ude13\\ude15-\\ude17\\ude19-\\ude35\\ude38-\\ude3a\\ude3f-\\ude48\\ude50-\\ude58]\"},{name:\"Khitan_Small_Script\",astral:\"𖿤|\\ud822[\\udf00-\\udfff]|\\ud823[\\udc00-\\udcd5]\"},{name:\"Khmer\",bmp:\"ក-៝០-៩៰-៹᧠-᧿\"},{name:\"Khojki\",astral:\"\\ud804[\\ude00-\\ude11\\ude13-\\ude3e]\"},{name:\"Khudawadi\",astral:\"\\ud804[\\udeb0-\\udeea\\udef0-\\udef9]\"},{name:\"Lao\",bmp:\"ກຂຄຆ-ຊຌ-ຣລວ-ຽເ-ໄໆ່-ໍ໐-໙ໜ-ໟ\"},{name:\"Latin\",bmp:\"A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꟿꬰ-ꭚꭜ-ꭤꭦ-ꭩff-stA-Za-z\",astral:\"\\ud801[\\udf80-\\udf85\\udf87-\\udfb0\\udfb2-\\udfba]|\\ud837[\\udf00-\\udf1e]\"},{name:\"Lepcha\",bmp:\"ᰀ-᰷᰻-᱉ᱍ-ᱏ\"},{name:\"Limbu\",bmp:\"ᤀ-ᤞᤠ-ᤫᤰ-᤻᥀᥄-᥏\"},{name:\"Linear_A\",astral:\"\\ud801[\\ude00-\\udf36\\udf40-\\udf55\\udf60-\\udf67]\"},{name:\"Linear_B\",astral:\"\\ud800[\\udc00-\\udc0b\\udc0d-\\udc26\\udc28-\\udc3a\\udc3c\\udc3d\\udc3f-\\udc4d\\udc50-\\udc5d\\udc80-\\udcfa]\"},{name:\"Lisu\",bmp:\"ꓐ-꓿\",astral:\"𑾰\"},{name:\"Lycian\",astral:\"\\ud800[\\ude80-\\ude9c]\"},{name:\"Lydian\",astral:\"\\ud802[\\udd20-\\udd39\\udd3f]\"},{name:\"Mahajani\",astral:\"\\ud804[\\udd50-\\udd76]\"},{name:\"Makasar\",astral:\"\\ud807[\\udee0-\\udef8]\"},{name:\"Malayalam\",bmp:\"ഀ-ഌഎ-ഐഒ-ൄെ-ൈൊ-൏ൔ-ൣ൦-ൿ\"},{name:\"Mandaic\",bmp:\"ࡀ-࡛࡞\"},{name:\"Manichaean\",astral:\"\\ud802[\\udec0-\\udee6\\udeeb-\\udef6]\"},{name:\"Marchen\",astral:\"\\ud807[\\udc70-\\udc8f\\udc92-\\udca7\\udca9-\\udcb6]\"},{name:\"Masaram_Gondi\",astral:\"\\ud807[\\udd00-\\udd06\\udd08\\udd09\\udd0b-\\udd36\\udd3a\\udd3c\\udd3d\\udd3f-\\udd47\\udd50-\\udd59]\"},{name:\"Medefaidrin\",astral:\"\\ud81b[\\ude40-\\ude9a]\"},{name:\"Meetei_Mayek\",bmp:\"ꫠ-꫶ꯀ-꯭꯰-꯹\"},{name:\"Mende_Kikakui\",astral:\"\\ud83a[\\udc00-\\udcc4\\udcc7-\\udcd6]\"},{name:\"Meroitic_Cursive\",astral:\"\\ud802[\\udda0-\\uddb7\\uddbc-\\uddcf\\uddd2-\\uddff]\"},{name:\"Meroitic_Hieroglyphs\",astral:\"\\ud802[\\udd80-\\udd9f]\"},{name:\"Miao\",astral:\"\\ud81b[\\udf00-\\udf4a\\udf4f-\\udf87\\udf8f-\\udf9f]\"},{name:\"Modi\",astral:\"\\ud805[\\ude00-\\ude44\\ude50-\\ude59]\"},{name:\"Mongolian\",bmp:\"᠀᠁᠄᠆-᠙ᠠ-ᡸᢀ-ᢪ\",astral:\"\\ud805[\\ude60-\\ude6c]\"},{name:\"Mro\",astral:\"\\ud81a[\\ude40-\\ude5e\\ude60-\\ude69\\ude6e\\ude6f]\"},{name:\"Multani\",astral:\"\\ud804[\\ude80-\\ude86\\ude88\\ude8a-\\ude8d\\ude8f-\\ude9d\\ude9f-\\udea9]\"},{name:\"Myanmar\",bmp:\"က-႟ꧠ-ꧾꩠ-ꩿ\"},{name:\"Nabataean\",astral:\"\\ud802[\\udc80-\\udc9e\\udca7-\\udcaf]\"},{name:\"Nandinagari\",astral:\"\\ud806[\\udda0-\\udda7\\uddaa-\\uddd7\\uddda-\\udde4]\"},{name:\"New_Tai_Lue\",bmp:\"ᦀ-ᦫᦰ-ᧉ᧐-᧚᧞᧟\"},{name:\"Newa\",astral:\"\\ud805[\\udc00-\\udc5b\\udc5d-\\udc61]\"},{name:\"Nko\",bmp:\"߀-ߺ߽-߿\"},{name:\"Nushu\",astral:\"𖿡|\\ud82c[\\udd70-\\udefb]\"},{name:\"Nyiakeng_Puachue_Hmong\",astral:\"\\ud838[\\udd00-\\udd2c\\udd30-\\udd3d\\udd40-\\udd49\\udd4e\\udd4f]\"},{name:\"Ogham\",bmp:\" -᚜\"},{name:\"Ol_Chiki\",bmp:\"᱐-᱿\"},{name:\"Old_Hungarian\",astral:\"\\ud803[\\udc80-\\udcb2\\udcc0-\\udcf2\\udcfa-\\udcff]\"},{name:\"Old_Italic\",astral:\"\\ud800[\\udf00-\\udf23\\udf2d-\\udf2f]\"},{name:\"Old_North_Arabian\",astral:\"\\ud802[\\ude80-\\ude9f]\"},{name:\"Old_Permic\",astral:\"\\ud800[\\udf50-\\udf7a]\"},{name:\"Old_Persian\",astral:\"\\ud800[\\udfa0-\\udfc3\\udfc8-\\udfd5]\"},{name:\"Old_Sogdian\",astral:\"\\ud803[\\udf00-\\udf27]\"},{name:\"Old_South_Arabian\",astral:\"\\ud802[\\ude60-\\ude7f]\"},{name:\"Old_Turkic\",astral:\"\\ud803[\\udc00-\\udc48]\"},{name:\"Old_Uyghur\",astral:\"\\ud803[\\udf70-\\udf89]\"},{name:\"Oriya\",bmp:\"ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍୕-ୗଡ଼ଢ଼ୟ-ୣ୦-୷\"},{name:\"Osage\",astral:\"\\ud801[\\udcb0-\\udcd3\\udcd8-\\udcfb]\"},{name:\"Osmanya\",astral:\"\\ud801[\\udc80-\\udc9d\\udca0-\\udca9]\"},{name:\"Pahawh_Hmong\",astral:\"\\ud81a[\\udf00-\\udf45\\udf50-\\udf59\\udf5b-\\udf61\\udf63-\\udf77\\udf7d-\\udf8f]\"},{name:\"Palmyrene\",astral:\"\\ud802[\\udc60-\\udc7f]\"},{name:\"Pau_Cin_Hau\",astral:\"\\ud806[\\udec0-\\udef8]\"},{name:\"Phags_Pa\",bmp:\"ꡀ-꡷\"},{name:\"Phoenician\",astral:\"\\ud802[\\udd00-\\udd1b\\udd1f]\"},{name:\"Psalter_Pahlavi\",astral:\"\\ud802[\\udf80-\\udf91\\udf99-\\udf9c\\udfa9-\\udfaf]\"},{name:\"Rejang\",bmp:\"ꤰ-꥓꥟\"},{name:\"Runic\",bmp:\"ᚠ-ᛪᛮ-ᛸ\"},{name:\"Samaritan\",bmp:\"ࠀ-࠭࠰-࠾\"},{name:\"Saurashtra\",bmp:\"ꢀ-ꣅ꣎-꣙\"},{name:\"Sharada\",astral:\"\\ud804[\\udd80-\\udddf]\"},{name:\"Shavian\",astral:\"\\ud801[\\udc50-\\udc7f]\"},{name:\"Siddham\",astral:\"\\ud805[\\udd80-\\uddb5\\uddb8-\\udddd]\"},{name:\"SignWriting\",astral:\"\\ud836[\\udc00-\\ude8b\\ude9b-\\ude9f\\udea1-\\udeaf]\"},{name:\"Sinhala\",bmp:\"ඁ-ඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟ෦-෯ෲ-෴\",astral:\"\\ud804[\\udde1-\\uddf4]\"},{name:\"Sogdian\",astral:\"\\ud803[\\udf30-\\udf59]\"},{name:\"Sora_Sompeng\",astral:\"\\ud804[\\udcd0-\\udce8\\udcf0-\\udcf9]\"},{name:\"Soyombo\",astral:\"\\ud806[\\ude50-\\udea2]\"},{name:\"Sundanese\",bmp:\"ᮀ-ᮿ᳀-᳇\"},{name:\"Syloti_Nagri\",bmp:\"ꠀ-꠬\"},{name:\"Syriac\",bmp:\"܀-܍-݊ݍ-ݏࡠ-ࡪ\"},{name:\"Tagalog\",bmp:\"ᜀ-᜕ᜟ\"},{name:\"Tagbanwa\",bmp:\"ᝠ-ᝬᝮ-ᝰᝲᝳ\"},{name:\"Tai_Le\",bmp:\"ᥐ-ᥭᥰ-ᥴ\"},{name:\"Tai_Tham\",bmp:\"ᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪠-᪭\"},{name:\"Tai_Viet\",bmp:\"ꪀ-ꫂꫛ-꫟\"},{name:\"Takri\",astral:\"\\ud805[\\ude80-\\udeb9\\udec0-\\udec9]\"},{name:\"Tamil\",bmp:\"ஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௺\",astral:\"\\ud807[\\udfc0-\\udff1\\udfff]\"},{name:\"Tangsa\",astral:\"\\ud81a[\\ude70-\\udebe\\udec0-\\udec9]\"},{name:\"Tangut\",astral:\"𖿠|[\\ud81c-\\ud820][\\udc00-\\udfff]|\\ud821[\\udc00-\\udff7]|\\ud822[\\udc00-\\udeff]|\\ud823[\\udd00-\\udd08]\"},{name:\"Telugu\",bmp:\"ఀ-ఌఎ-ఐఒ-నప-హ఼-ౄె-ైొ-్ౕౖౘ-ౚౝౠ-ౣ౦-౯౷-౿\"},{name:\"Thaana\",bmp:\"ހ-ޱ\"},{name:\"Thai\",bmp:\"ก-ฺเ-๛\"},{name:\"Tibetan\",bmp:\"ༀ-ཇཉ-ཬཱ-ྗྙ-ྼ྾-࿌࿎-࿔࿙࿚\"},{name:\"Tifinagh\",bmp:\"ⴰ-ⵧⵯ⵰⵿\"},{name:\"Tirhuta\",astral:\"\\ud805[\\udc80-\\udcc7\\udcd0-\\udcd9]\"},{name:\"Toto\",astral:\"\\ud838[\\ude90-\\udeae]\"},{name:\"Ugaritic\",astral:\"\\ud800[\\udf80-\\udf9d\\udf9f]\"},{name:\"Vai\",bmp:\"ꔀ-ꘫ\"},{name:\"Vithkuqi\",astral:\"\\ud801[\\udd70-\\udd7a\\udd7c-\\udd8a\\udd8c-\\udd92\\udd94\\udd95\\udd97-\\udda1\\udda3-\\uddb1\\uddb3-\\uddb9\\uddbb\\uddbc]\"},{name:\"Wancho\",astral:\"\\ud838[\\udec0-\\udef9\\udeff]\"},{name:\"Warang_Citi\",astral:\"\\ud806[\\udca0-\\udcf2\\udcff]\"},{name:\"Yezidi\",astral:\"\\ud803[\\ude80-\\udea9\\udeab-\\udead\\udeb0\\udeb1]\"},{name:\"Yi\",bmp:\"ꀀ-ꒌ꒐-꓆\"},{name:\"Zanabazar_Square\",astral:\"\\ud806[\\ude00-\\ude47]\"}];\n/*!\n * XRegExp.matchRecursive 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2009-present MIT License\n */(e=>{const d=/(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/g,t=e.union([/\\({{([\\w$]+)}}\\)|{{([\\w$]+)}}/,d],\"g\",{conjunction:\"or\"});function u(e){const d=/^(?:\\(\\?:\\))*\\^/,t=/\\$(?:\\(\\?:\\))*$/;return d.test(e)&&t.test(e)&&t.test(e.replace(/\\\\[\\s\\S]/g,\"\"))?e.replace(d,\"\").replace(t,\"\"):e}function i(d,t){const u=t?\"x\":\"\";return e.isRegExp(d)?d.xregexp&&d.xregexp.captureNames?d:e(d.source,u):e(d,u)}function c(d){return d instanceof RegExp?d:e.escape(d)}function n(e,d,t){return e[`subpattern${t}`]=d,e}function a(e,d,t){return e+(d<t.length-1?`{{subpattern${d}}}`:\"\")}e.tag=d=>(t,...u)=>{const i=u.map(c).reduce(n,{}),o=t.raw.map(a).join(\"\");return e.build(o,i,d)},e.build=(c,n,a)=>{const o=(a=a||\"\").includes(\"x\"),r=/^\\(\\?([\\w$]+)\\)/.exec(c);r&&(a=e._clipDuplicates(a+r[1]));const s={};for(const e in n)if(n.hasOwnProperty(e)){const d=i(n[e],o);s[e]={pattern:u(d.source),names:d.xregexp.captureNames||[]}}const f=i(c,o);let l,x=0,h=0;const b=[0],p=f.xregexp.captureNames||[],m=f.source.replace(t,((e,t,u,i,c)=>{const n=t||u;let a,o,r;if(n){if(!s.hasOwnProperty(n))throw new ReferenceError(`Undefined property ${e}`);t?(a=p[h],b[++h]=++x,o=`(?<${a||n}>`):o=\"(?:\",l=x;return`${o}${s[n].pattern.replace(d,((e,d,t)=>{if(d){if(a=s[n].names[x-l],++x,a)return`(?<${a}>`}else if(t)return r=+t-1,s[n].names[r]?`\\\\k<${s[n].names[r]}>`:`\\\\${+t+l}`;return e}))})`}if(i){if(a=p[h],b[++h]=++x,a)return`(?<${a}>`}else if(c)return r=+c-1,p[r]?`\\\\k<${p[r]}>`:`\\\\${b[+c]}`;return e}));return e(m,a)}})(Q),(e=>{function d(e,d,t,u){return{name:e,value:d,start:t,end:u}}e.matchRecursive=(t,u,i,c,n)=>{n=n||{};const a=(c=c||\"\").includes(\"g\"),o=c.includes(\"y\"),r=c.replace(/y/g,\"\");let s;u=e(u,r),i=e(i,r);let{escapeChar:f}=n;if(f){if(f.length>1)throw new Error(\"Cannot use more than one escape character\");f=e.escape(f),s=new RegExp(`(?:${f}[\\\\S\\\\s]|(?:(?!${e.union([u,i],\"\",{conjunction:\"or\"}).source})[^${f}])+)+`,c.replace(e._hasNativeFlag(\"s\")?/[^imsu]/g:/[^imu]/g,\"\"))}let l,x,h,b,p=0,m=0,g=0,y=0;const k=n.valueNames,w=[];for(;;){if(f&&(g+=(e.exec(t,s,g,\"sticky\")||[\"\"])[0].length),h=e.exec(t,u,g),b=e.exec(t,i,g),h&&b&&(h.index<=b.index?b=null:h=null),h||b)m=(h||b).index,g=m+(h||b)[0].length;else if(!p)break;if(o&&!p&&m>y)break;if(h)p||(l=m,x=g),p+=1;else if(b&&p){if(p-=1,!p&&(k?(k[0]&&l>y&&w.push(d(k[0],t.slice(y,l),y,l)),k[1]&&w.push(d(k[1],t.slice(l,x),l,x)),k[2]&&w.push(d(k[2],t.slice(x,m),x,m)),k[3]&&w.push(d(k[3],t.slice(m,g),m,g))):w.push(t.slice(x,m)),y=g,!a))break}else{const d=n.unbalanced||\"error\";if(\"skip\"!==d&&\"skip-lazy\"!==d){if(\"error\"===d){throw new Error(`Unbalanced ${b?\"right\":\"left\"} delimiter found in string at position ${b?m:l}`)}throw new Error(`Unsupported value for unbalanced: ${d}`)}if(b)b=null;else{if(\"skip\"===d){g=l+(e.exec(t,u,l,\"sticky\")[0].length||1)}else g=l+1;p=0}}m===g&&(g+=1)}return a&&w.length>0&&!o&&k&&k[0]&&t.length>y&&w.push(d(k[0],t.slice(y),y,t.length)),w}})(Q),(e=>{const d={},t={},u=e._dec,i=e._hex,c=e._pad4;function n(e){return e.replace(/[- _]+/g,\"\").toLowerCase()}function a(e){const d=/^\\\\[xu](.+)/.exec(e);return d?u(d[1]):e.charCodeAt(\"\\\\\"===e[0]?1:0)}function o(t){return d[t][\"b!\"]||(d[t][\"b!\"]=function(d){let t=\"\",u=-1;return e.forEach(d,/(\\\\x..|\\\\u....|\\\\?[\\s\\S])(?:-(\\\\x..|\\\\u....|\\\\?[\\s\\S]))?/,(e=>{const d=a(e[1]);d>u+1&&(t+=`\\\\u${c(i(u+1))}`,d>u+2&&(t+=`-\\\\u${c(i(d-1))}`)),u=a(e[2]||e[1])})),u<65535&&(t+=`\\\\u${c(i(u+1))}`,u<65534&&(t+=\"-\\\\uFFFF\")),t}(d[t].bmp))}function r(e,t){const u=t?\"a!\":\"a=\";return d[e][u]||(d[e][u]=function(e,t){const u=d[e];let i=\"\";return u.bmp&&!u.isBmpLast&&(i=`[${u.bmp}]${u.astral?\"|\":\"\"}`),u.astral&&(i+=u.astral),u.isBmpLast&&u.bmp&&(i+=`${u.astral?\"|\":\"\"}[${u.bmp}]`),t?`(?:(?!${i})(?:[\\ud800-\\udbff][\\udc00-\\udfff]|[\\0-]))`:`(?:${i})`}(e,t))}e.addToken(/\\\\([pP])(?:{(\\^?)(?:(\\w+)=)?([^}]*)}|([A-Za-z]))/,((e,u,i)=>{const c=\"Unknown Unicode token \",[a,s,f,l,x,h]=e;let b=\"P\"===s||!!f;const p=i.includes(\"A\");let m=n(h||x),g=d[m];if(\"P\"===s&&f)throw new SyntaxError(\"Invalid double negation \"+a);if(!d.hasOwnProperty(m))throw new SyntaxError(c+a);if(l&&(!t[l]||!t[l][m]))throw new SyntaxError(c+a);if(g.inverseOf){if(m=n(g.inverseOf),!d.hasOwnProperty(m))throw new ReferenceError(`${\"Unicode token missing data \"+a} -> ${g.inverseOf}`);g=d[m],b=!b}if(!g.bmp&&!p)throw new SyntaxError(\"Astral mode required for Unicode token \"+a);if(p){if(\"class\"===u)throw new SyntaxError(\"Astral mode does not support Unicode tokens within character classes\");return r(m,b)}return\"class\"===u?b?o(m):g.bmp:(b?\"[^\":\"[\")+g.bmp+\"]\"}),{scope:\"all\",optionalFlags:\"A\",leadChar:\"\\\\\"}),e.addUnicodeData=(u,i)=>{i&&(t[i]={});for(const e of u){if(!e.name)throw new Error(\"Unicode token requires name\");if(!(e.inverseOf||e.bmp||e.astral))throw new Error(\"Unicode token has no character data \"+e.name);const u=n(e.name);if(d[u]=e,i&&(t[i][u]=!0),e.alias){const u=n(e.alias);d[u]=e,i&&(t[i][u]=!0)}}e.cache.flush(\"patterns\")},e._getUnicodeProperty=e=>{const t=n(e);return d[t]}})(Q),(e=>{if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Categories\");e.addUnicodeData(ee)})(Q),(e=>{if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Properties\");const d=de;d.push({name:\"Assigned\",inverseOf:\"Cn\"}),e.addUnicodeData(d)})(Q),(e=>{if(!e.addUnicodeData)throw new ReferenceError(\"Unicode Base must be loaded before Unicode Scripts\");e.addUnicodeData(te,\"Script\")})(Q);const ue=new class{constructor(){this.input=\"\",this.result=\"\",this.sentenceStart=!1,this.acronym=Q(\"^(\\\\p{Lu}[.])+(?=$|[\\\\P{L}])\"),this.quoted=Q('^\"[^\"]+\"(?=$|[\\\\P{L}])'),this.innerCaps=Q(\"\\\\p{Ll}\\\\p{Lu}\"),this.allCaps=Q(\"^\\\\p{Lu}+$\"),this.aint=Q(\"^\\\\p{L}n't(?=$|[\\\\P{L}])\"),this.word=Q(\"^\\\\p{L}+(-\\\\p{L}+)*\"),this.and=Q(\"^\\\\p{Lu}&\\\\p{Lu}(?=$|[\\\\P{L}])\")}convert(e){this.input=e,this.result=\"\",this.sentenceStart=!0;let d;for(this.input=this.input.replace(/[;:]\\s+A\\s/g,(e=>e.toLowerCase())),this.input=this.input.replace(/[–—]\\s*A\\s/g,(e=>e.toLowerCase()));this.input;)(d=Q.exec(this.input,this.quoted))||(d=Q.exec(this.input,this.acronym))?this.add(d[0],\"\",!0):(d=Q.exec(this.input,this.aint))?this.add(d[0],\"\",!1):(d=Q.exec(this.input,this.word))?this.add(d[0],\"-\",!1):(d=Q.exec(this.input,this.and))?this.add(d[0],\"\",!0):this.add(this.input[0],\"\",!1);return function(e,d,t){for(const{start:u,end:i}of t)e=e.substring(0,u)+d.substring(u,i)+e.substring(i);return e}(this.result,e,[])}add(e,d,t){d?e=e.split(d).map(((e,d)=>(t||this.sentenceStart)&&0===d||Q.exec(e,this.innerCaps)||Q.exec(e,this.allCaps)?e:e.toLowerCase())).join(d):t||(e=e.toLowerCase()),this.result+=e,this.input=this.input.substr(e.length),e.match(/^\\s+$/)||(this.sentenceStart=Boolean(e.match(/^[.?!]$/))||2===e.length&&\".\"===e[1])}};const ie={strong:{open:\"<b>\",close:\"</b>\"},em:{open:\"<i>\",close:\"</i>\"},sub:{open:\"<sub>\",close:\"</sub>\"},sup:{open:\"<sup>\",close:\"</sup>\"},smallcaps:{open:'<span style=\"font-variant:small-caps;\">',close:\"</span>\"},nocase:{open:'<span class=\"nocase\">',close:\"</span>\"},enquote:{open:\"“\",close:\"”\"},url:{open:\"\",close:\"\"},undefined:{open:\"[\",close:\"]\"}};exports.BibFieldTypes=d,exports.BibLatexExporter=class{constructor(e,d=!1,t={}){this.bibDB=e,this.pks=d||Object.keys(e),this.config=t,this.warnings=[],this.bibtexArray=[],this.bibtexStr=\"\"}get output(){return console.warn(\"BibLatexExporter.output will be deprecated in biblatex-csl-converter 2.x. Use BibLatexExporter.parse() instead.\"),this.parse()}parse(){return this.pks.forEach((e=>{let u=this.bibDB[e],i={type:t[u.bib_type].biblatex,key:u.entry_key.length?u.entry_key:\"Undefined\"},c={};t[u.bib_type][\"biblatex-subtype\"]&&(c.entrysubtype=t[u.bib_type][\"biblatex-subtype\"]);const n=this.config.exportUnexpectedFields?{...u.fields,...u.unexpected_fields}:u.fields;for(let e in n){if(!(e in d))continue;let t=n[e],u=d[e].type,i=d[e].biblatex;switch(u){case\"f_date\":c[i]=t;break;case\"f_integer\":case\"f_literal\":case\"f_long_literal\":case\"f_title\":c[i]=this._reformText(t);break;case\"f_key\":c[i]=this._reformKey(t,e);break;case\"l_range\":c[i]=this._reformRange(t);break;case\"f_uri\":case\"f_verbatim\":c[i]=t.replace(/{|}/g,\"\");break;case\"l_key\":c[i]=this._escapeTeX(t.map((d=>this._reformKey(d,e))).join(\" and \"));break;case\"l_literal\":c[i]=t.map((e=>this._reformText(e))).join(\" and \");break;case\"l_name\":c[i]=this._reformName(t);break;case\"l_tag\":c[i]=this._escapeTeX(t.join(\", \"));break;default:console.warn(`Unrecognized type: ${u}!`)}}i.values=c,this.bibtexArray[this.bibtexArray.length]=i})),this.bibtexStr=this._getBibtexString(this.bibtexArray),this.bibtexStr}_reformKey(e,t){var u,i;if(\"string\"==typeof e){let c=d[t];return Array.isArray(c.options)?this._escapeTeX(e):this._escapeTeX(null!==(i=null===(u=c.options)||void 0===u?void 0:u[e].biblatex)&&void 0!==i?i:\"\")}return this._reformText(e)}_reformRange(e){return Array.isArray(e)?e.map((e=>this._reformInterval(e))).filter((e=>e.length)).join(\",\"):(console.warn(\"Wrong format for reformRange\",e),\"\")}_reformInterval(e){return Array.isArray(e)?e.map((e=>this._reformText(e))).join(\"--\"):(console.warn(\"Wrong format for reformInterval\",e),\"\")}_reformName(e){if(!Array.isArray(e))return console.warn(\"Wrong format for reformName\",e),\"\";let d=[];return e.forEach((e=>{if(e.literal){let t=this._reformText(e.literal);t.length&&d.push(`{${t}}`)}else{let t=e.family?this._reformText(e.family):\"\",u=e.given?this._reformText(e.given):\"\",i=!!e.suffix&&this._reformText(e.suffix),c=!!e.prefix&&this._reformText(e.prefix),n=!!e.useprefix&&e.useprefix;if(this.config.traditionalNames)i&&c?d.push(`{${c} ${t}}, {${i}}, {${u}}`):i?d.push(`{${t}}, {${i}}, {${u}}`):c?d.push(`{${c} ${t}}, {${u}}`):d.push(`{${t}}, {${u}}`);else{let e=[];u.length&&e.push(this._protectNamePart(`given={${u}}`)),t.length&&e.push(this._protectNamePart(`family={${t}}`)),i&&e.push(this._protectNamePart(`suffix={${i}}`)),c&&(e.push(this._protectNamePart(`prefix={${c}}`)),e.push(`useprefix=${String(n)}`)),d.push(e.join(\", \"))}}})),d.join(\" and \")}_protectNamePart(e){return e.includes(\",\")?`\"${e}\"`:e}_escapeTeX(e){if(\"string\"!=typeof e)return console.warn(\"Wrong format for escapeTeX\",e),\"\";let d=w.length;for(let t=0;t<d;t++)e=e.replace(w[t][0],w[t][1]);return e}_reformText(e){let d=\"\",t=[];return Array.isArray(e)?(e.concat({type:\"text\",text:\"\"}).forEach((e=>{if(\"variable\"===e.type)return d+=`} # ${e.attrs.variable} # {`,void this.warnings.push({type:\"undefined_variable\",variable:e.attrs.variable});let u=[];if(e.marks){let d=!1;e.marks.forEach((e=>{\"sup\"!==e.type&&\"sub\"!==e.type||d?\"nocase\"===e.type?u.unshift(e.type):u.push(e.type):(u.push(\"math\"),u.push(e.type),d=!0)}))}let i=!1,c=[];t.forEach(((e,d)=>{if(e!=u[d]&&(i=!0),i){let d=v[e].close;\"nocase\"!==t[0]&&\"\\\\\"===v[e].open[0]&&(d+=\"}\"),c.push(d)}})),c.reverse(),d+=c.join(\"\");let n=!1,a=!1;u.forEach(((e,i)=>{e!=t[i]&&(n=!0),n&&(\"nocase\"!==u[0]&&\"\\\\\"===v[e].open[0]&&(d+=\"{\"),d+=v[e].open,v[e].verbatim&&(a=!0))})),\"text\"in e&&(d+=a?e.text:this._escapeTeX(e.text)),t=u})),d):(console.warn(\"Wrong format for reformText\",e),d)}_getBibtexString(e){const d=e.length;let t=\"\";for(let u=0;u<d;u++){0<u&&(t+=\"\\n\\n\");const d=e[u];t+=`@${d.type}{${d.key}`;for(let e in d.values){t+=`,\\n${e} = ${`{${d.values[e]}}`.replace(/\\{\\} # /g,\"\").replace(/# \\{\\}/g,\"\")}`}t+=\"\\n}\"}return t}},exports.BibLatexParser=k,exports.BibTypes=t,exports.CSLExporter=class{constructor(e,d=!1,t={}){this.bibDB=e,this.pks=d||Object.keys(e),this.config=t,this.cslDB={},this.errors=[]}get output(){return console.warn(\"CSLExporter.output will be deprecated in biblatex-csl-converter 2.x. Use CSLExporter.parse() instead.\"),this.parse()}parse(){for(let e in this.bibDB)-1!==this.pks.indexOf(e)&&(this.cslDB[e]=this.getCSLEntry(e),this.cslDB[e].id=e);return this.cslDB}getCSLEntry(e){let u=this.bibDB[e],i={};if(!u.fields||!u.bib_type||!t[u.bib_type])return i;for(let e in u.fields)if(\"\"!==u.fields[e]&&e in d&&\"csl\"in d[e]){let t,c=u.fields[e],n=d[e].type;const a=d[e].csl;let o;switch(t=\"string\"==typeof a?a:a[u.bib_type]?a[u.bib_type]:a[\"*\"],n){case\"f_date\":o=this._reformDate(c),o&&(i[t]=o);break;case\"f_integer\":i[t]=this._reformInteger(c);break;case\"f_key\":i[t]=this._reformKey(c,e);break;case\"f_literal\":case\"f_long_literal\":i[t]=this._reformText(c);break;case\"l_range\":i[t]=this._reformRange(c);break;case\"f_title\":i[t]=this._reformTitle(c);break;case\"f_uri\":case\"f_verbatim\":i[t]=c;break;case\"l_key\":i[t]=c.map((d=>this._reformKey(d,e))).join(\" and \");break;case\"l_literal\":i[t]=c.map((e=>this._reformText(e))).join(\", \");break;case\"l_name\":i[t]=this._reformName(c);break;case\"l_tag\":i[t]=c.join(\", \");break;default:console.warn(`Unrecognized field type: ${n}!`)}}return i.type=t[u.bib_type].csl,i}_reformKey(e,t){if(\"string\"==typeof e){let u=d[t];return Array.isArray(u.options)?e:u.options[e].csl}return this._reformText(e)}_reformRange(e){return Array.isArray(e)?e.map((e=>this._reformInterval(e))).filter((e=>e.length)).join(\",\"):(console.warn(\"Wrong format for range\",e),\"\")}_reformInterval(e){return Array.isArray(e)?e.map((e=>this._reformText(e))).join(\"-\"):(console.warn(\"Wrong format for interval\",e),\"\")}_reformInteger(e){let d=this._reformText(e),t=parseInt(d);return d!==String(t)?d:t}_escapeText(e){return\"string\"!=typeof e?(console.warn(\"Wrong format for escapeText\",e),\"\"):e.replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/'/g,\"'\").replace(/\"/g,\""\")}_reformTitle(e){let d=\"\",t=[];if(!Array.isArray(e))return console.warn(\"Wrong format for reformTitle\",e),d;let u=(i=e.reduce(((e,d)=>\"text\"in d?e+d.text:e),\"\"),ue.convert(i));var i;return e.forEach((e=>{if(\"variable\"===e.type)return d+=`${ie.undefined.open}${e.attrs.variable}${ie.undefined.close}`,void this.errors.push({type:\"undefined_variable\",variable:e.attrs.variable});let i=e.marks?e.marks.map((e=>e.type)):[],c=!1,n=[];t.forEach(((e,d)=>{e!=i[d]&&(c=!0),c&&n.push(ie[e].close)})),n.reverse(),d+=n.join(\"\");let a=!1;if(i.forEach(((e,u)=>{e!=t[u]&&(a=!0),a&&(d+=ie[e].open)})),\"text\"in e){const t=u.substr(0,e.text.length);u=u.slice(e.text.length);const c=i.find((e=>\"nocase\"===e))?e.text:t;d+=this.config.escapeText?this._escapeText(c):c}t=i})),t.slice().reverse().forEach((e=>{d+=ie[e].close})),d}_reformText(e){let d=\"\",t=[];return Array.isArray(e)?(e.forEach((e=>{if(\"variable\"===e.type)return d+=`${ie.undefined.open}${e.attrs.variable}${ie.undefined.close}`,void this.errors.push({type:\"undefined_variable\",variable:e.attrs.variable});let u=e.marks?e.marks.map((e=>e.type)):[],i=!1,c=[];t.forEach(((e,d)=>{e!=u[d]&&(i=!0),i&&c.push(ie[e].close)})),c.reverse(),d+=c.join(\"\");let n=!1;u.forEach(((e,u)=>{e!=t[u]&&(n=!0),n&&(d+=ie[e].open)})),\"text\"in e&&(d+=this.config.escapeText?this._escapeText(e.text):e.text),t=u})),t.slice().reverse().forEach((e=>{d+=ie[e].close})),d):(console.warn(\"Wrong format for reformText\",e),d)}_reformDate(e){let d=g(e);const t={};if(!d.valid)return!1;if(d.values.length>1&&Array.isArray(d.values[0])&&Array.isArray(d.values[1])){if(0===d.values[0][0]&&!String(d.values[1]).replace(/9/g,\"\").length)return!1;const e=d.values[0],u=d.values[1],i=[e.slice(0,3).map((e=>parseInt(e))),u.slice(0,3).map((e=>parseInt(e)))];t[\"date-parts\"]=i}else{const e=d.values.slice(0,3).map((e=>parseInt(e)));t[\"date-parts\"]=[e],\"Interval\"===d.type&&(t.circa=!0)}return(d.uncertain||d.approximate)&&(t.circa=!0),t}_reformName(e){return e.map((e=>{const d={};if(e.literal){let t=this._reformText(e.literal);if(!t.length)return!1;d.literal=t}else d.given=this._reformText(e.given),d.family=this._reformText(e.family),e.suffix&&(d.suffix=this._reformText(e.suffix)),e.prefix&&(e.useprefix?d[\"non-dropping-particle\"]=this._reformText(e.prefix):d[\"dropping-particle\"]=this._reformText(e.prefix)),d.family=this._reformText(e.family);return d})).filter((e=>e))}},exports.edtfParse=g,exports.parse=function(e,d={}){return new k(e,d).parse()},exports.parseAsync=function(e,d={}){return new k(e,d).parseAsync()},exports.unescapeCSL=function(e){return e.replace(/&amp;/g,\"&\").replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&apos;/g,\"'\").replace(/&quot;/g,\""\")};\n//# sourceMappingURL=index.js.map\n","/*\r\n * crossref.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorUI } from './ui-types';\r\nimport { cslTypes } from './csl';\r\n\r\nexport function imageForCrossrefType(ui: EditorUI, type: string): [string?, string?] {\r\n switch (type) {\r\n case crossRefTypes.monograph:\r\n case crossRefTypes.report:\r\n case crossRefTypes.journalArticle:\r\n case crossRefTypes.journalVolume:\r\n case crossRefTypes.journal:\r\n case crossRefTypes.journalIssue:\r\n case crossRefTypes.proceedingsArticle:\r\n case crossRefTypes.dissertation:\r\n case crossRefTypes.reportSeries:\r\n return [ui.images.citations?.article, ui.images.citations?.article_dark];\r\n case crossRefTypes.bookSection:\r\n case crossRefTypes.bookPart:\r\n case crossRefTypes.bookSeries:\r\n case crossRefTypes.editedBook:\r\n case crossRefTypes.bookChapter:\r\n case crossRefTypes.book:\r\n case crossRefTypes.bookSet:\r\n case crossRefTypes.bookTrack:\r\n case crossRefTypes.referenceBook:\r\n return [ui.images.citations?.book, ui.images.citations?.book_dark];\r\n case crossRefTypes.dataset:\r\n return [ui.images.citations?.data, ui.images.citations?.data_dark];\r\n case crossRefTypes.referenceEntry:\r\n return [ui.images.citations?.entry, ui.images.citations?.entry_dark];\r\n case crossRefTypes.postedContent:\r\n return [ui.images.citations?.web, ui.images.citations?.web_dark];\r\n case crossRefTypes.other:\r\n case crossRefTypes.standard:\r\n case crossRefTypes.standardSeries:\r\n case crossRefTypes.peerReview:\r\n case crossRefTypes.component:\r\n case crossRefTypes.proceedingsSeries:\r\n case crossRefTypes.proceedings:\r\n default:\r\n return [ui.images.citations?.other, ui.images.citations?.other_dark];\r\n }\r\n}\r\n\r\nexport function prettyType(ui: EditorUI, type: string): string {\r\n switch (type) {\r\n case crossRefTypes.monograph:\r\n return ui.context.translateText('Monograph');\r\n case crossRefTypes.report:\r\n return ui.context.translateText('Report');\r\n case crossRefTypes.journalArticle:\r\n return ui.context.translateText('Journal');\r\n case crossRefTypes.journalVolume:\r\n return ui.context.translateText('Journal Volume');\r\n case crossRefTypes.journal:\r\n return ui.context.translateText('Journal');\r\n case crossRefTypes.journalIssue:\r\n return ui.context.translateText('Journal Issue');\r\n case crossRefTypes.proceedingsArticle:\r\n case crossRefTypes.proceedingsSeries:\r\n case crossRefTypes.proceedings:\r\n return ui.context.translateText('Proceedings');\r\n case crossRefTypes.dissertation:\r\n return ui.context.translateText('Dissertation');\r\n case crossRefTypes.reportSeries:\r\n return ui.context.translateText('Series');\r\n case crossRefTypes.bookSection:\r\n return ui.context.translateText('Book Section');\r\n case crossRefTypes.bookPart:\r\n return ui.context.translateText('Book Part');\r\n case crossRefTypes.bookSeries:\r\n return ui.context.translateText('Book Series');\r\n case crossRefTypes.bookChapter:\r\n return ui.context.translateText('Book Chapter');\r\n case crossRefTypes.editedBook:\r\n case crossRefTypes.bookSet:\r\n case crossRefTypes.bookTrack:\r\n case crossRefTypes.referenceBook:\r\n return ui.context.translateText('Book');\r\n case crossRefTypes.dataset:\r\n return ui.context.translateText('Dataset');\r\n case crossRefTypes.referenceEntry:\r\n return ui.context.translateText('Entry');\r\n case crossRefTypes.postedContent:\r\n return ui.context.translateText('Content');\r\n case crossRefTypes.other:\r\n case crossRefTypes.standard:\r\n case crossRefTypes.standardSeries:\r\n case crossRefTypes.peerReview:\r\n case crossRefTypes.component:\r\n return ui.context.translateText('Other');\r\n default:\r\n return type;\r\n }\r\n}\r\n\r\nexport function crossRefTypeToCSLType(type: string): string {\r\n // This isn't a valid type, try to map it to a valid type\r\n switch (type) {\r\n case crossRefTypes.bookSection:\r\n case crossRefTypes.bookChapter:\r\n case crossRefTypes.bookPart:\r\n return cslTypes.chapter;\r\n case crossRefTypes.book:\r\n case crossRefTypes.bookSet:\r\n case crossRefTypes.bookTrack:\r\n case crossRefTypes.referenceBook:\r\n case crossRefTypes.bookSeries:\r\n case crossRefTypes.editedBook:\r\n return cslTypes.book;\r\n case crossRefTypes.report:\r\n return cslTypes.report;\r\n case crossRefTypes.peerReview:\r\n return cslTypes.review;\r\n case crossRefTypes.journalArticle:\r\n case crossRefTypes.journalVolume:\r\n case crossRefTypes.journal:\r\n case crossRefTypes.journalIssue:\r\n return cslTypes.articleJournal;\r\n case crossRefTypes.referenceEntry:\r\n return cslTypes.entry;\r\n case crossRefTypes.monograph:\r\n case crossRefTypes.proceedingsArticle:\r\n case crossRefTypes.component:\r\n case crossRefTypes.other:\r\n return cslTypes.article;\r\n case crossRefTypes.proceedings:\r\n case crossRefTypes.proceedingsSeries:\r\n return cslTypes.paperConference;\r\n case crossRefTypes.reportSeries:\r\n return cslTypes.report;\r\n case crossRefTypes.standard:\r\n case crossRefTypes.standardSeries:\r\n return cslTypes.patent;\r\n case crossRefTypes.postedContent:\r\n return cslTypes.webpage;\r\n case crossRefTypes.dissertation:\r\n return cslTypes.thesis;\r\n case crossRefTypes.dataset:\r\n return cslTypes.dataset;\r\n default:\r\n return cslTypes.article;\r\n }\r\n}\r\n\r\nexport const crossRefTypes = {\r\n bookSection: 'book-section',\r\n monograph: 'monograph',\r\n report: 'report',\r\n peerReview: 'peer-review',\r\n bookTrack: 'book-track',\r\n journalArticle: 'journal-article',\r\n bookPart: 'book-part',\r\n other: 'other',\r\n book: 'book',\r\n journalVolume: 'journal-volume',\r\n bookSet: 'book-set',\r\n referenceEntry: 'reference-entry',\r\n proceedingsArticle: 'proceedings-article',\r\n journal: 'journal',\r\n component: 'component',\r\n bookChapter: 'book-chapter',\r\n proceedingsSeries: 'proceedings-series',\r\n reportSeries: 'report-series',\r\n proceedings: 'proceedings',\r\n standard: 'standard',\r\n referenceBook: 'reference-book',\r\n postedContent: 'posted-content',\r\n journalIssue: 'journal-issue',\r\n dissertation: 'dissertation',\r\n dataset: 'dataset',\r\n bookSeries: 'book-series',\r\n editedBook: 'edited-book',\r\n standardSeries: 'standard-series',\r\n};\r\n","/*\r\n * csl.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { CSL, CSLDate, CSLName } from 'editor-types';\r\nexport type { CSL, CSLDate, CSLName } from 'editor-types';\r\n\r\nimport { parseYamlNodes } from './yaml';\r\nimport { crossRefTypeToCSLType } from './crossref';\r\nimport { EditorUIImages } from './ui-images';\r\n\r\n\r\n// Crossref sends some items back with invalid data types in the CSL JSON\r\n// This appears to tend to happen the most frequently with fields that CrossRef\r\n// stores as Arrays which are not properly flatted to strings as Pandoc cite-proc expects.\r\n// This will flatten any of these fields to the first element of the array\r\nexport function sanitizeForCiteproc(csl: CSL): CSL {\r\n // This field list was create speculatively, so may contain fields that do not require\r\n // sanitization (or may omit fields that require it).\r\n const sanitizeProperties = [\r\n 'ISSN',\r\n 'ISBN',\r\n 'title',\r\n 'subject',\r\n 'archive',\r\n 'original-title',\r\n 'short-title',\r\n 'subtitle',\r\n 'container-title',\r\n 'short-container-title',\r\n 'license'\r\n ];\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const cslAny: { [key: string]: any } = {\r\n ...csl,\r\n };\r\n const keys = Object.keys(cslAny);\r\n keys\r\n .filter(key => sanitizeProperties.includes(key))\r\n .forEach(property => {\r\n const value = cslAny[property];\r\n if (value && Array.isArray(value)) {\r\n if (value.length > 0) {\r\n cslAny[property] = value[0];\r\n } else {\r\n cslAny[property] = undefined;\r\n }\r\n }\r\n return cslAny;\r\n });\r\n\r\n // Strip any raw date representations\r\n if (cslAny.issued?.raw) {\r\n delete cslAny.issued.raw;\r\n }\r\n\r\n // Pubmed and others may included license information (including date ranges and more)\r\n // which will not be properly parsed by Pandoc (when writing to the bibliography). Remove\r\n if (cslAny.license) {\r\n delete cslAny.license;\r\n }\r\n\r\n // Datacite and others may include a 'contributor' field which should be an array of author types\r\n // however, pandoc can't properly process contributor field\r\n if (cslAny.contributor) {\r\n delete cslAny.contributor;\r\n }\r\n\r\n // pandoc-citeproc performance is extremely poor with large abstracts. As a result, purge this property\r\n delete cslAny.abstract;\r\n delete cslAny.id;\r\n\r\n // Ensure only valid CSL types make it through\r\n cslAny.type = ensureValidCSLType(cslAny.type);\r\n\r\n return cslAny as CSL;\r\n}\r\n\r\n// Crossref and other sources may allow invalid types to leak through\r\n// (for example, this DOI 10.5962/bhl.title.5326 is of a monograph)\r\n// and the type will leak through as monograph. This function will verify\r\n// that the type is a CSL type and if it not, do its best to map the type\r\n// to a valid CSL type\r\nexport function ensureValidCSLType(type: string): string {\r\n if (Object.values(cslTypes).includes(type)) {\r\n // This is a valid type\r\n return type;\r\n } else {\r\n return crossRefTypeToCSLType(type);\r\n }\r\n}\r\n\r\nexport function cslFromDoc(doc: ProsemirrorNode): string | undefined {\r\n // read the Yaml blocks from the document\r\n const parsedYamlNodes = parseYamlNodes(doc);\r\n\r\n const cslParsedYamls = parsedYamlNodes.filter(\r\n parsedYaml => parsedYaml.yaml !== null && typeof parsedYaml.yaml === 'object' && parsedYaml.yaml.csl,\r\n );\r\n\r\n // Look through any yaml nodes to see whether any contain csl information\r\n if (cslParsedYamls.length > 0) {\r\n // Pandoc uses the last csl block (whether or not it shares a yaml block with the\r\n // bibliographies element that pandoc will ultimately use) so just pick the last csl\r\n // block.\r\n const cslParsedYaml = cslParsedYamls[cslParsedYamls.length - 1];\r\n const cslFile = cslParsedYaml.yaml.csl;\r\n return cslFile;\r\n }\r\n return undefined;\r\n}\r\n\r\n// Converts a csl date to an EDTF date.\r\n// See https://www.loc.gov/standards/datetime/\r\n// Currently omits time component so this isn't truly level 0\r\nexport function cslDateToEDTFDate(date: CSLDate) {\r\n if (date['date-parts']) {\r\n const paddedParts = date['date-parts'][0].map(part => {\r\n const partStr = part?.toString();\r\n if (partStr?.length === 1) {\r\n return `0${partStr}`;\r\n }\r\n return partStr;\r\n });\r\n return paddedParts.join('-');\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function joinAuthorNames(cslName: CSLName) {\r\n const names: string[] = [];\r\n if (cslName.family) {\r\n names.push(cslName.family);\r\n }\r\n if (cslName.given) {\r\n names.push(cslName.given);\r\n }\r\n if (cslName.literal) {\r\n names.push(cslName.literal);\r\n }\r\n return names.join(\" \");\r\n}\r\n\r\nexport function imageForType(images: EditorUIImages, type: string): [string?, string?] {\r\n switch (type) {\r\n case cslTypes.article:\r\n case cslTypes.articleJournal:\r\n case cslTypes.articleMagazine:\r\n case cslTypes.articleNewspaper:\r\n case cslTypes.paperConference:\r\n case cslTypes.review:\r\n case cslTypes.reviewBook:\r\n return [images.citations?.article, images.citations?.article_dark];\r\n case cslTypes.bill:\r\n case cslTypes.legislation:\r\n case cslTypes.legalCase:\r\n case cslTypes.treaty:\r\n return [images.citations?.legal, images.citations?.legal_dark];\r\n case cslTypes.book:\r\n case cslTypes.chapter:\r\n case cslTypes.manuscript:\r\n case cslTypes.thesis:\r\n return [images.citations?.book, images.citations?.book_dark];\r\n case cslTypes.broadcast:\r\n return [images.citations?.broadcast, images.citations?.broadcast_dark];\r\n case cslTypes.dataset:\r\n return [images.citations?.data, images.citations?.data_dark];\r\n case cslTypes.entry:\r\n case cslTypes.entryDictionary:\r\n case cslTypes.entryEncylopedia:\r\n return [images.citations?.entry, images.citations?.entry_dark];\r\n case cslTypes.figure:\r\n case cslTypes.graphic:\r\n return [images.citations?.image, images.citations?.image_dark];\r\n case cslTypes.map:\r\n return [images.citations?.map, images.citations?.map_dark];\r\n case cslTypes.motionPicture:\r\n return [images.citations?.movie, images.citations?.movie_dark];\r\n case cslTypes.musicalScore:\r\n case cslTypes.song:\r\n return [images.citations?.song, images.citations?.song_dark];\r\n case cslTypes.post:\r\n case cslTypes.postWeblog:\r\n case cslTypes.webpage:\r\n return [images.citations?.web, images.citations?.web_dark];\r\n case cslTypes.interview:\r\n case cslTypes.pamphlet:\r\n case cslTypes.personalCommunication:\r\n case cslTypes.report:\r\n case cslTypes.speech:\r\n default:\r\n return [images.citations?.other, images.citations?.other_dark];\r\n }\r\n}\r\n\r\nexport const cslTypes = {\r\n article: 'article',\r\n articleMagazine: 'article-magazine',\r\n articleNewspaper: 'article-newspaper',\r\n articleJournal: 'article-journal',\r\n bill: 'bill',\r\n book: 'book',\r\n broadcast: 'broadcast',\r\n chapter: 'chapter',\r\n dataset: 'dataset',\r\n entry: 'entry',\r\n entryDictionary: 'entry-dictionary',\r\n entryEncylopedia: 'entry-encyclopedia',\r\n figure: 'figure',\r\n graphic: 'graphic',\r\n interview: 'interview',\r\n legislation: 'legislation',\r\n legalCase: 'legal_case',\r\n manuscript: 'manuscript',\r\n map: 'map',\r\n motionPicture: 'motion_picture',\r\n musicalScore: 'musical_score',\r\n pamphlet: 'pamphlet',\r\n paperConference: 'paper-conference',\r\n patent: 'patent',\r\n post: 'post',\r\n postWeblog: 'post-weblog',\r\n personalCommunication: 'personal_communication',\r\n report: 'report',\r\n review: 'review',\r\n reviewBook: 'review-book',\r\n song: 'song',\r\n speech: 'speech',\r\n thesis: 'thesis',\r\n treaty: 'treaty',\r\n webpage: 'webpage',\r\n};\r\n","import { Schema, NodeSpec, MarkSpec, DOMParser, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nconst kCslDOMParser = cslDOMParser();\r\n\r\nexport function cslTextToProsemirrorNode(text: string): ProsemirrorNode | null {\r\n const domParser = new window.DOMParser();\r\n const doc = domParser.parseFromString(text, 'text/html');\r\n if (doc) {\r\n const pmNode = kCslDOMParser.parse(doc.body, { preserveWhitespace: 'full' });\r\n return pmNode;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nexport function cslDOMParser(): DOMParser {\r\n return DOMParser.fromSchema(cslSchema());\r\n}\r\n\r\nfunction cslSchema() {\r\n const nodes: { [name: string]: NodeSpec } = {\r\n doc: {\r\n content: 'inline*',\r\n },\r\n text: {\r\n group: 'inline',\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n toDOM(node: ProsemirrorNode) : any {\r\n return node.text;\r\n },\r\n },\r\n };\r\n const marks: { [name: string]: MarkSpec } = {};\r\n marks.strong = tagSpec('b');\r\n marks.em = tagSpec('i');\r\n marks.sup = tagSpec('sup');\r\n marks.sub = tagSpec('sub');\r\n marks.smallcaps = spanSpec('smallcaps');\r\n marks.nocase = spanSpec('nocase');\r\n\r\n // return schema\r\n return new Schema({\r\n nodes,\r\n marks,\r\n });\r\n}\r\n\r\nfunction tagSpec(tag: string): MarkSpec {\r\n return {\r\n parseDOM: [{ tag }],\r\n toDOM() {\r\n return [tag];\r\n },\r\n };\r\n}\r\n\r\nfunction spanSpec(clz: string): MarkSpec {\r\n return {\r\n parseDOM: [{ tag: `span[class*='${clz}']` }],\r\n toDOM() {\r\n return ['span', { class: clz }];\r\n },\r\n };\r\n}\r\n","/*\r\n * language.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// Support emitting languages using 'babel' names\r\n// This isn't strictly supported by pure BibTex\r\n// but this seems likely to helpful to include\r\nexport const lanagugeMappings = {\r\n acadian: {\r\n csl: 'fr-CA',\r\n bibtex: 'acadian',\r\n },\r\n afrikaans: {\r\n csl: 'af-ZA',\r\n bibtex: 'afrikaans',\r\n },\r\n arabic: {\r\n csl: 'ar',\r\n bibtex: 'arabic',\r\n },\r\n basque: {\r\n csl: 'eu',\r\n bibtex: 'basque',\r\n },\r\n bulgarian: {\r\n csl: 'bg-BG',\r\n bibtex: 'bulgarian',\r\n },\r\n catalan: {\r\n csl: 'ca-AD',\r\n bibtex: 'catalan',\r\n },\r\n chinese: {\r\n csl: 'zh-CN',\r\n bibtex: 'pinyin',\r\n },\r\n croatian: {\r\n csl: 'hr-HR',\r\n bibtex: 'croatian',\r\n },\r\n czech: {\r\n csl: 'cs-CZ',\r\n bibtex: 'czech',\r\n },\r\n danish: {\r\n csl: 'da-DK',\r\n bibtex: 'danish',\r\n },\r\n dutch: {\r\n csl: 'nl-NL',\r\n bibtex: 'dutch',\r\n },\r\n auenglish: {\r\n csl: 'en-GB',\r\n bibtex: 'australian',\r\n },\r\n caenglish: {\r\n csl: 'en-US',\r\n bibtex: 'canadian',\r\n },\r\n nzenglish: {\r\n csl: 'en-GB',\r\n bibtex: 'newzealand',\r\n },\r\n ukenglish: {\r\n csl: 'en-GB',\r\n bibtex: 'ukenglish',\r\n },\r\n usenglish: {\r\n csl: 'en-US',\r\n bibtex: 'usenglish',\r\n },\r\n estonian: {\r\n csl: 'et-EE',\r\n bibtex: 'estonian',\r\n },\r\n finnish: {\r\n csl: 'fi-FI',\r\n bibtex: 'finnish',\r\n },\r\n french: {\r\n csl: 'fr-FR',\r\n bibtex: 'french',\r\n },\r\n cafrench: {\r\n csl: 'fr-CA',\r\n bibtex: 'canadien',\r\n },\r\n german: {\r\n csl: 'de-DE',\r\n bibtex: 'ngerman',\r\n },\r\n atgerman: {\r\n csl: 'de-AT',\r\n bibtex: 'naustrian',\r\n },\r\n greek: {\r\n csl: 'el-GR',\r\n bibtex: 'greek',\r\n },\r\n hebrew: {\r\n csl: 'he-IL',\r\n bibtex: 'hebrew',\r\n },\r\n hungarian: {\r\n csl: 'hu-HU',\r\n bibtex: 'hungarian',\r\n },\r\n icelandic: {\r\n csl: 'is-IS',\r\n bibtex: 'icelandic',\r\n },\r\n italian: {\r\n csl: 'it-IT',\r\n bibtex: 'italian',\r\n },\r\n japanese: {\r\n csl: 'ja-JP',\r\n bibtex: 'japanese',\r\n },\r\n latin: {\r\n csl: 'la',\r\n bibtex: 'latin',\r\n },\r\n latvian: {\r\n csl: 'lv-LV',\r\n bibtex: 'latvian',\r\n },\r\n lithuanian: {\r\n csl: 'lt-LT',\r\n bibtex: 'lithuanian',\r\n },\r\n magyar: {\r\n csl: 'hu-HU',\r\n bibtex: 'magyar',\r\n },\r\n mongolian: {\r\n csl: 'mn-MN',\r\n bibtex: 'mongolian',\r\n },\r\n norwegian: {\r\n csl: 'nb-NO',\r\n bibtex: 'norsk',\r\n },\r\n newnorwegian: {\r\n csl: 'nn-NO',\r\n bibtex: 'nynorsk',\r\n },\r\n farsi: {\r\n csl: 'fa-IR',\r\n bibtex: 'farsi',\r\n },\r\n polish: {\r\n csl: 'pl-PL',\r\n bibtex: 'polish',\r\n },\r\n portuguese: {\r\n csl: 'pt-PT',\r\n bibtex: 'portuguese',\r\n },\r\n brportuguese: {\r\n csl: 'pt-BR',\r\n bibtex: 'brazilian',\r\n },\r\n romanian: {\r\n csl: 'ro-RO',\r\n bibtex: 'romanian',\r\n },\r\n russian: {\r\n csl: 'ru-RU',\r\n bibtex: 'russian',\r\n },\r\n serbian: {\r\n csl: 'sr-RS',\r\n bibtex: 'serbian',\r\n },\r\n cyrillicserbian: {\r\n csl: 'sr-RS',\r\n bibtex: 'serbianc',\r\n },\r\n slovak: {\r\n csl: 'sk-SK',\r\n bibtex: 'slovak',\r\n },\r\n slovene: {\r\n csl: 'sl-SL',\r\n bibtex: 'slovene',\r\n },\r\n spanish: {\r\n csl: 'es-ES',\r\n bibtex: 'spanish',\r\n },\r\n swedish: {\r\n csl: 'sv-SE',\r\n bibtex: 'swedish',\r\n },\r\n thai: {\r\n csl: 'th-TH',\r\n bibtex: 'thai',\r\n },\r\n turkish: {\r\n csl: 'tr-TR',\r\n bibtex: 'turkish',\r\n },\r\n ukrainian: {\r\n csl: 'uk-UA',\r\n bibtex: 'ukrainian',\r\n },\r\n vietnamese: {\r\n csl: 'vi-VN',\r\n bibtex: 'vietnamese',\r\n },\r\n};\r\n","/*\r\n * fields.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { lanagugeMappings } from './language';\r\n\r\nexport interface Field {\r\n type: string;\r\n bibtex: ((bibTexType: string) => string) | string;\r\n csl: string | undefined;\r\n options?: string[] | { [key: string]: { bibtex: string } } | undefined;\r\n}\r\n\r\n// CSL Field (variable) definitions from\r\n// https://docs.citationstyles.org/en/stable/specification.html#appendix-iv-variables\r\n\r\n// TODO: bibtex: string | (type: string) => string\r\n//\r\n\r\nexport const FieldMap: { [key: string]: Field } = {\r\n abstract: {\r\n type: 'f_long_literal',\r\n bibtex: 'abstract',\r\n csl: 'abstract',\r\n },\r\n author: {\r\n type: 'l_name',\r\n bibtex: 'author',\r\n csl: 'author',\r\n },\r\n bookauthor: {\r\n type: 'l_name',\r\n bibtex: 'author',\r\n csl: 'container-author',\r\n },\r\n containerTitle: {\r\n type: 'f_title',\r\n bibtex: (bibTexType: string) => {\r\n switch (bibTexType) {\r\n case 'conference':\r\n case 'inproceedings':\r\n case 'incollection':\r\n return 'booktitle';\r\n default:\r\n return 'journal';\r\n }\r\n },\r\n csl: 'container-title',\r\n },\r\n chapter: {\r\n type: 'f_literal',\r\n bibtex: 'chapter',\r\n csl: 'chapter-number',\r\n },\r\n date: {\r\n type: 'f_date',\r\n bibtex: 'date',\r\n csl: 'issued',\r\n },\r\n doi: {\r\n type: 'f_verbatim',\r\n bibtex: 'doi',\r\n csl: 'DOI',\r\n },\r\n edition: {\r\n type: 'f_integer',\r\n bibtex: 'edition',\r\n csl: 'edition',\r\n },\r\n editor: {\r\n type: 'l_name',\r\n bibtex: 'editor',\r\n csl: 'editor',\r\n },\r\n eventdate: {\r\n type: 'f_date',\r\n bibtex: 'date',\r\n csl: 'event-date',\r\n },\r\n eventtitle: {\r\n type: 'f_title',\r\n bibtex: 'title',\r\n csl: 'event',\r\n },\r\n howpublished: {\r\n type: 'f_literal',\r\n bibtex: 'howpublished',\r\n csl: 'medium',\r\n },\r\n issue: {\r\n type: 'f_literal',\r\n bibtex: 'issue',\r\n csl: 'issue',\r\n },\r\n journaltitle: {\r\n type: 'f_literal',\r\n bibtex: 'journal',\r\n csl: 'container-title',\r\n },\r\n // Special - not really in CSL or BibTeX\r\n langid: {\r\n type: 'f_key',\r\n bibtex: 'langid',\r\n csl: 'language',\r\n options: lanagugeMappings,\r\n },\r\n location: {\r\n type: 'l_literal',\r\n bibtex: 'address',\r\n csl: 'publisher-place',\r\n },\r\n note: {\r\n type: 'f_literal',\r\n bibtex: 'note',\r\n csl: 'note',\r\n },\r\n number: {\r\n type: 'f_literal',\r\n bibtex: 'number',\r\n csl: 'collection-number',\r\n },\r\n pages: {\r\n type: 'l_range',\r\n bibtex: 'pages',\r\n csl: 'page',\r\n },\r\n publisher: {\r\n type: 'l_literal',\r\n bibtex: 'publisher',\r\n csl: 'publisher',\r\n },\r\n series: {\r\n type: 'f_literal',\r\n bibtex: 'series',\r\n csl: 'collection-title',\r\n },\r\n title: {\r\n type: 'f_title',\r\n bibtex: 'title',\r\n csl: 'title',\r\n },\r\n url: {\r\n type: 'f_uri',\r\n bibtex: 'url',\r\n csl: 'URL',\r\n },\r\n volume: {\r\n type: 'f_literal',\r\n bibtex: 'volume',\r\n csl: 'volume',\r\n },\r\n};\r\n","/*\r\n * types.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { cslTypes } from '../csl';\r\n\r\nexport interface Type {\r\n bibtex: string;\r\n fieldsRequired: string[];\r\n fieldsOptional: string[];\r\n fieldsEitherOr: string[];\r\n}\r\n\r\n// Maps CSL Types to the equivalent BibTeX types.\r\n// Mapping derived from:\r\n// https://github.com/citation-style-language/styles/blob/master/bibtex.csl\r\nexport function typeMapping(cslType: string): Type {\r\n switch (cslType) {\r\n case cslTypes.article:\r\n case cslTypes.articleJournal:\r\n case cslTypes.articleMagazine:\r\n case cslTypes.articleNewspaper:\r\n return {\r\n bibtex: BibTextTypes.article.type,\r\n ...BibTextTypes.article.fields,\r\n };\r\n\r\n case cslTypes.book:\r\n return {\r\n bibtex: BibTextTypes.book.type,\r\n ...BibTextTypes.book.fields,\r\n };\r\n\r\n case cslTypes.chapter:\r\n return {\r\n bibtex: BibTextTypes.inbook.type,\r\n ...BibTextTypes.inbook.fields,\r\n };\r\n\r\n case cslTypes.thesis:\r\n return {\r\n bibtex: BibTextTypes.phdthesis.type,\r\n ...BibTextTypes.phdthesis.fields,\r\n };\r\n\r\n case cslTypes.manuscript:\r\n return {\r\n bibtex: BibTextTypes.unpublished.type,\r\n ...BibTextTypes.unpublished.fields,\r\n };\r\n\r\n case cslTypes.paperConference:\r\n return {\r\n bibtex: BibTextTypes.inproceedings.type,\r\n ...BibTextTypes.inproceedings.fields,\r\n };\r\n\r\n case cslTypes.report:\r\n return {\r\n bibtex: BibTextTypes.techreport.type,\r\n ...BibTextTypes.techreport.fields,\r\n };\r\n\r\n case cslTypes.bill:\r\n case cslTypes.graphic:\r\n case cslTypes.legalCase:\r\n case cslTypes.legislation:\r\n case cslTypes.motionPicture:\r\n case cslTypes.song:\r\n default:\r\n return {\r\n bibtex: BibTextTypes.misc.type,\r\n ...BibTextTypes.misc.fields,\r\n };\r\n }\r\n}\r\n\r\nexport function bibtextTypeToCSLType(bibtexType: string) {\r\n switch (bibtexType) {\r\n case BibTextTypes.article.type:\r\n return cslTypes.articleJournal;\r\n\r\n case BibTextTypes.proceedings.type:\r\n case BibTextTypes.manual.type:\r\n case BibTextTypes.book.type:\r\n return cslTypes.book;\r\n\r\n case BibTextTypes.booklet.type:\r\n return cslTypes.pamphlet;\r\n\r\n case BibTextTypes.inbook.type:\r\n case BibTextTypes.incollection.type:\r\n return cslTypes.chapter;\r\n\r\n case BibTextTypes.conference.type:\r\n case BibTextTypes.inproceedings.type:\r\n return cslTypes.paperConference;\r\n\r\n case BibTextTypes.mastersthesis.type:\r\n case BibTextTypes.phdthesis.type:\r\n return cslTypes.thesis;\r\n\r\n case BibTextTypes.techreport.type:\r\n return cslTypes.report;\r\n\r\n case BibTextTypes.unpublished.type:\r\n return cslTypes.manuscript;\r\n\r\n case BibTextTypes.misc.type:\r\n default:\r\n return cslTypes.article;\r\n }\r\n}\r\n\r\n// BibTeX types and their fields\r\n// See https://www.openoffice.org/bibliographic/bibtex-defs.html\r\n// (a corrected version of Appendix B.2 of the LATEX book [2], © 1986, by Addison-Wesley.)\r\nexport const BibTextTypes = {\r\n // An article from a journal or magazine.\r\n article: {\r\n type: 'article',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'journal', 'year'],\r\n fieldsOptional: ['volume', 'number', 'pages', 'month', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n // A book with an explicit publisher.\r\n book: {\r\n type: 'book',\r\n fields: {\r\n fieldsRequired: ['title', 'publisher', 'year'],\r\n fieldsOptional: ['volume', 'number', 'series', 'address', 'edition', 'month', 'note'],\r\n fieldsEitherOr: ['author', 'editor'],\r\n },\r\n },\r\n\r\n // A work that is printed and bound, but without a named publisher or sponsoring institution.\r\n booklet: {\r\n type: 'booklet',\r\n fields: {\r\n fieldsRequired: ['title'],\r\n fieldsOptional: ['author', 'howpublished', 'address', 'month', 'year', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // The same as inproceedings, included for Scribe compatibility.\r\n conference: {\r\n type: 'conference',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'booktitle', 'year'],\r\n fieldsOptional: [\r\n 'editor',\r\n 'volume',\r\n 'number',\r\n 'series',\r\n 'pages',\r\n 'address',\r\n 'month',\r\n 'organization',\r\n 'publisher',\r\n 'note',\r\n ],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // A part of a book, which may be a chapter (or section or whatever) and/or a range of pages.\r\n inbook: {\r\n type: 'inbook',\r\n fields: {\r\n fieldsRequired: ['title', 'chapter', 'pages', 'publisher', 'year'],\r\n fieldsOptional: ['volume', 'number', 'series', 'type', 'address', 'edition', 'month', 'note'],\r\n fieldsEitherOr: ['author', 'editor'],\r\n },\r\n },\r\n\r\n // A part of a book having its own title.\r\n incollection: {\r\n type: 'incollection',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'booktitle', 'publisher', 'year'],\r\n fieldsOptional: [\r\n 'editor',\r\n 'volume',\r\n 'number',\r\n 'series',\r\n 'type',\r\n 'chapter',\r\n 'pages',\r\n 'address',\r\n 'edition',\r\n 'month',\r\n 'note',\r\n ],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // An article in a conference proceedings.\r\n inproceedings: {\r\n type: 'inproceedings',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'booktitle', 'year'],\r\n fieldsOptional: [\r\n 'editor',\r\n 'volume',\r\n 'number',\r\n 'series',\r\n 'pages',\r\n 'address',\r\n 'month',\r\n 'organization',\r\n 'publisher',\r\n 'note',\r\n ],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // Technical documentation\r\n manual: {\r\n type: 'manual',\r\n fields: {\r\n fieldsRequired: ['title'],\r\n fieldsOptional: ['author', 'organization', 'address', 'edition', 'month', 'year', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // A Master's thesis.\r\n mastersthesis: {\r\n type: 'mastersthesis',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'school', 'year'],\r\n fieldsOptional: ['type', 'address', 'month', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // Use this type when nothing else fits.\r\n misc: {\r\n type: 'misc',\r\n fields: {\r\n fieldsRequired: [],\r\n fieldsOptional: ['author', 'title', 'howpublished', 'month', 'year', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // A PhD thesis.\r\n phdthesis: {\r\n type: 'phdthesis',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'school', 'year'],\r\n fieldsOptional: ['type', 'address', 'month', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // The proceedings of a conference.\r\n proceedings: {\r\n type: 'proceedings',\r\n fields: {\r\n fieldsRequired: ['title', 'year'],\r\n fieldsOptional: ['editor', 'volume', 'number', 'series', 'address', 'month', 'organization', 'publisher', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // A report published by a school or other institution, usually numbered within a series.\r\n techreport: {\r\n type: 'techreport',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'institution', 'year'],\r\n fieldsOptional: ['type', 'number', 'address', 'month', 'note'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n\r\n // A document having an author and title, but not formally published.\r\n unpublished: {\r\n type: 'unpublished',\r\n fields: {\r\n fieldsRequired: ['author', 'title', 'note'],\r\n fieldsOptional: ['month', 'year'],\r\n fieldsEitherOr: [],\r\n },\r\n },\r\n};\r\n","/*\r\n * formatting.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport interface FormattingTag {\r\n open: string;\r\n close: string;\r\n verbatim: boolean;\r\n}\r\n\r\n// Maps formatting tags/marks to the LaTeX replacements\r\n// When marks are applied to text nodes, these will be emitted in place of those marks\r\nexport const FormattingTags: { [key: string]: FormattingTag } = {\r\n strong: { open: '\\\\textbf{', close: '}', verbatim: false },\r\n em: { open: '\\\\emph{', close: '}', verbatim: false },\r\n sub: { open: '\\\\textsubscript{', close: '}', verbatim: false },\r\n sup: { open: '\\\\textsuperscript{', close: '}', verbatim: false },\r\n nocase: { open: '{{', close: '}}', verbatim: false },\r\n smallcaps: { open: '\\\\textsc{', close: '}', verbatim: false },\r\n enquote: { open: '\\\\enquote{', close: '}', verbatim: false },\r\n math: { open: '$', close: '$', verbatim: false },\r\n url: { open: '\\\\url{', close: '}', verbatim: true },\r\n};\r\n","/*\r\n * character.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n// Maps unicode characters to their latex equivalent.\r\n// Generated from:\r\n// https://www.w3.org/2003/entities/2007xml/unicode.xml\r\n// and\r\n// http://www.w3.org/Math/characters/unicode.xml\r\n//\r\n// When both xml files contained entries for a unicode character,\r\n// the definition provided by entities/2007xml was preferred\r\nexport interface CharacterMap {\r\n id: string;\r\n decimal: number;\r\n character: string;\r\n latex: string;\r\n ungrouped?: boolean;\r\n}\r\n\r\nconst characters: { [key: number]: CharacterMap } = {\r\n 34: { id: 'U00022', decimal: 34, character: '\"', latex: '\"' },\r\n 35: { id: 'U00023', decimal: 35, character: '#', latex: '\\\\#' },\r\n 36: { id: 'U00024', decimal: 36, character: '$', latex: '\\\\$' },\r\n 94: { id: 'U0005e', decimal: 94, character: '^', latex: '\\\\textasciicircum' },\r\n 95: { id: 'U0005f', decimal: 95, character: '_', latex: '\\\\_' },\r\n 123: { id: 'U0007b', decimal: 123, character: '{', latex: '\\\\textbraceleft' },\r\n 125: { id: 'U0007d', decimal: 125, character: '}', latex: '\\\\textbraceright' },\r\n 256: {\r\n id: 'U00100',\r\n decimal: 256,\r\n character: 'Ā',\r\n latex: '\\\\={A}',\r\n },\r\n 257: {\r\n id: 'U00101',\r\n decimal: 257,\r\n character: 'ā',\r\n latex: '\\\\={a}',\r\n },\r\n 258: {\r\n id: 'U00102',\r\n decimal: 258,\r\n character: 'Ă',\r\n latex: '\\\\u{A}',\r\n },\r\n 259: {\r\n id: 'U00103',\r\n decimal: 259,\r\n character: 'ă',\r\n latex: '\\\\u{a}',\r\n },\r\n 260: {\r\n id: 'U00104',\r\n decimal: 260,\r\n character: 'Ą',\r\n latex: '\\\\k{A}',\r\n },\r\n 261: {\r\n id: 'U00105',\r\n decimal: 261,\r\n character: 'ą',\r\n latex: '\\\\k{a}',\r\n },\r\n 262: {\r\n id: 'U00106',\r\n decimal: 262,\r\n character: 'Ć',\r\n latex: \"\\\\'{C}\",\r\n },\r\n 263: {\r\n id: 'U00107',\r\n decimal: 263,\r\n character: 'ć',\r\n latex: \"\\\\'{c}\",\r\n },\r\n 264: {\r\n id: 'U00108',\r\n decimal: 264,\r\n character: 'Ĉ',\r\n latex: '\\\\^{C}',\r\n },\r\n 265: {\r\n id: 'U00109',\r\n decimal: 265,\r\n character: 'ĉ',\r\n latex: '\\\\^{c}',\r\n },\r\n 266: {\r\n id: 'U0010A',\r\n decimal: 266,\r\n character: 'Ċ',\r\n latex: '\\\\.{C}',\r\n },\r\n 267: {\r\n id: 'U0010B',\r\n decimal: 267,\r\n character: 'ċ',\r\n latex: '\\\\.{c}',\r\n },\r\n 268: {\r\n id: 'U0010C',\r\n decimal: 268,\r\n character: 'Č',\r\n latex: '\\\\v{C}',\r\n },\r\n 269: {\r\n id: 'U0010D',\r\n decimal: 269,\r\n character: 'č',\r\n latex: '\\\\v{c}',\r\n },\r\n 270: {\r\n id: 'U0010E',\r\n decimal: 270,\r\n character: 'Ď',\r\n latex: '\\\\v{D}',\r\n },\r\n 271: {\r\n id: 'U0010F',\r\n decimal: 271,\r\n character: 'ď',\r\n latex: '\\\\v{d}',\r\n },\r\n 272: {\r\n id: 'U00110',\r\n decimal: 272,\r\n character: 'Đ',\r\n latex: '\\\\DJ',\r\n },\r\n 273: {\r\n id: 'U00111',\r\n decimal: 273,\r\n character: 'đ',\r\n latex: '\\\\dj',\r\n },\r\n 274: {\r\n id: 'U00112',\r\n decimal: 274,\r\n character: 'Ē',\r\n latex: '\\\\={E}',\r\n },\r\n 275: {\r\n id: 'U00113',\r\n decimal: 275,\r\n character: 'ē',\r\n latex: '\\\\={e}',\r\n },\r\n 276: {\r\n id: 'U00114',\r\n decimal: 276,\r\n character: 'Ĕ',\r\n latex: '\\\\u{E}',\r\n },\r\n 277: {\r\n id: 'U00115',\r\n decimal: 277,\r\n character: 'ĕ',\r\n latex: '\\\\u{e}',\r\n },\r\n 278: {\r\n id: 'U00116',\r\n decimal: 278,\r\n character: 'Ė',\r\n latex: '\\\\.{E}',\r\n },\r\n 279: {\r\n id: 'U00117',\r\n decimal: 279,\r\n character: 'ė',\r\n latex: '\\\\.{e}',\r\n },\r\n 280: {\r\n id: 'U00118',\r\n decimal: 280,\r\n character: 'Ę',\r\n latex: '\\\\k{E}',\r\n },\r\n 281: {\r\n id: 'U00119',\r\n decimal: 281,\r\n character: 'ę',\r\n latex: '\\\\k{e}',\r\n },\r\n 282: {\r\n id: 'U0011A',\r\n decimal: 282,\r\n character: 'Ě',\r\n latex: '\\\\v{E}',\r\n },\r\n 283: {\r\n id: 'U0011B',\r\n decimal: 283,\r\n character: 'ě',\r\n latex: '\\\\v{e}',\r\n },\r\n 284: {\r\n id: 'U0011C',\r\n decimal: 284,\r\n character: 'Ĝ',\r\n latex: '\\\\^{G}',\r\n },\r\n 285: {\r\n id: 'U0011D',\r\n decimal: 285,\r\n character: 'ĝ',\r\n latex: '\\\\^{g}',\r\n },\r\n 286: {\r\n id: 'U0011E',\r\n decimal: 286,\r\n character: 'Ğ',\r\n latex: '\\\\u{G}',\r\n },\r\n 287: {\r\n id: 'U0011F',\r\n decimal: 287,\r\n character: 'ğ',\r\n latex: '\\\\u{g}',\r\n },\r\n 288: {\r\n id: 'U00120',\r\n decimal: 288,\r\n character: 'Ġ',\r\n latex: '\\\\.{G}',\r\n },\r\n 289: {\r\n id: 'U00121',\r\n decimal: 289,\r\n character: 'ġ',\r\n latex: '\\\\.{g}',\r\n },\r\n 290: {\r\n id: 'U00122',\r\n decimal: 290,\r\n character: 'Ģ',\r\n latex: '\\\\c{G}',\r\n },\r\n 291: {\r\n id: 'U00123',\r\n decimal: 291,\r\n character: 'ģ',\r\n latex: '\\\\c{g}',\r\n },\r\n 292: {\r\n id: 'U00124',\r\n decimal: 292,\r\n character: 'Ĥ',\r\n latex: '\\\\^{H}',\r\n },\r\n 293: {\r\n id: 'U00125',\r\n decimal: 293,\r\n character: 'ĥ',\r\n latex: '\\\\^{h}',\r\n },\r\n 296: {\r\n id: 'U00128',\r\n decimal: 296,\r\n character: 'Ĩ',\r\n latex: '\\\\~{I}',\r\n },\r\n 297: {\r\n id: 'U00129',\r\n decimal: 297,\r\n character: 'ĩ',\r\n latex: '\\\\~{\\\\i}',\r\n },\r\n 298: {\r\n id: 'U0012A',\r\n decimal: 298,\r\n character: 'Ī',\r\n latex: '\\\\={I}',\r\n },\r\n 299: {\r\n id: 'U0012B',\r\n decimal: 299,\r\n character: 'ī',\r\n latex: '\\\\={\\\\i}',\r\n },\r\n 300: {\r\n id: 'U0012C',\r\n decimal: 300,\r\n character: 'Ĭ',\r\n latex: '\\\\u{I}',\r\n },\r\n 301: {\r\n id: 'U0012D',\r\n decimal: 301,\r\n character: 'ĭ',\r\n latex: '\\\\u{\\\\i}',\r\n },\r\n 302: {\r\n id: 'U0012E',\r\n decimal: 302,\r\n character: 'Į',\r\n latex: '\\\\k{I}',\r\n },\r\n 303: {\r\n id: 'U0012F',\r\n decimal: 303,\r\n character: 'į',\r\n latex: '\\\\k{i}',\r\n },\r\n 304: {\r\n id: 'U00130',\r\n decimal: 304,\r\n character: 'İ',\r\n latex: '\\\\.{I}',\r\n },\r\n 305: {\r\n id: 'U00131',\r\n decimal: 305,\r\n character: 'ı',\r\n latex: '\\\\i',\r\n },\r\n 306: {\r\n id: 'U00132',\r\n decimal: 306,\r\n character: 'IJ',\r\n latex: 'IJ',\r\n },\r\n 307: {\r\n id: 'U00133',\r\n decimal: 307,\r\n character: 'ij',\r\n latex: 'ij',\r\n },\r\n 308: {\r\n id: 'U00134',\r\n decimal: 308,\r\n character: 'Ĵ',\r\n latex: '\\\\^{J}',\r\n },\r\n 309: {\r\n id: 'U00135',\r\n decimal: 309,\r\n character: 'ĵ',\r\n latex: '\\\\^{\\\\j}',\r\n },\r\n 310: {\r\n id: 'U00136',\r\n decimal: 310,\r\n character: 'Ķ',\r\n latex: '\\\\c{K}',\r\n },\r\n 311: {\r\n id: 'U00137',\r\n decimal: 311,\r\n character: 'ķ',\r\n latex: '\\\\c{k}',\r\n },\r\n 313: {\r\n id: 'U00139',\r\n decimal: 313,\r\n character: 'Ĺ',\r\n latex: \"\\\\'{L}\",\r\n },\r\n 314: {\r\n id: 'U0013A',\r\n decimal: 314,\r\n character: 'ĺ',\r\n latex: \"\\\\'{l}\",\r\n },\r\n 315: {\r\n id: 'U0013B',\r\n decimal: 315,\r\n character: 'Ļ',\r\n latex: '\\\\c{L}',\r\n },\r\n 316: {\r\n id: 'U0013C',\r\n decimal: 316,\r\n character: 'ļ',\r\n latex: '\\\\c{l}',\r\n },\r\n 317: {\r\n id: 'U0013D',\r\n decimal: 317,\r\n character: 'Ľ',\r\n latex: '\\\\v{L}',\r\n },\r\n 318: {\r\n id: 'U0013E',\r\n decimal: 318,\r\n character: 'ľ',\r\n latex: '\\\\v{l}',\r\n },\r\n 321: {\r\n id: 'U00141',\r\n decimal: 321,\r\n character: 'Ł',\r\n latex: '\\\\L',\r\n },\r\n 322: {\r\n id: 'U00142',\r\n decimal: 322,\r\n character: 'ł',\r\n latex: '\\\\l',\r\n },\r\n 323: {\r\n id: 'U00143',\r\n decimal: 323,\r\n character: 'Ń',\r\n latex: \"\\\\'{N}\",\r\n },\r\n 324: {\r\n id: 'U00144',\r\n decimal: 324,\r\n character: 'ń',\r\n latex: \"\\\\'{n}\",\r\n },\r\n 325: {\r\n id: 'U00145',\r\n decimal: 325,\r\n character: 'Ņ',\r\n latex: '\\\\c{N}',\r\n },\r\n 326: {\r\n id: 'U00146',\r\n decimal: 326,\r\n character: 'ņ',\r\n latex: '\\\\c{n}',\r\n },\r\n 327: {\r\n id: 'U00147',\r\n decimal: 327,\r\n character: 'Ň',\r\n latex: '\\\\v{N}',\r\n },\r\n 328: {\r\n id: 'U00148',\r\n decimal: 328,\r\n character: 'ň',\r\n latex: '\\\\v{n}',\r\n },\r\n 329: {\r\n id: 'U00149',\r\n decimal: 329,\r\n character: 'ʼn',\r\n latex: \"'n\",\r\n },\r\n 330: {\r\n id: 'U0014A',\r\n decimal: 330,\r\n character: 'Ŋ',\r\n latex: '\\\\NG',\r\n },\r\n 331: {\r\n id: 'U0014B',\r\n decimal: 331,\r\n character: 'ŋ',\r\n latex: '\\\\ng',\r\n },\r\n 332: {\r\n id: 'U0014C',\r\n decimal: 332,\r\n character: 'Ō',\r\n latex: '\\\\={O}',\r\n },\r\n 333: {\r\n id: 'U0014D',\r\n decimal: 333,\r\n character: 'ō',\r\n latex: '\\\\={o}',\r\n },\r\n 334: {\r\n id: 'U0014E',\r\n decimal: 334,\r\n character: 'Ŏ',\r\n latex: '\\\\u{O}',\r\n },\r\n 335: {\r\n id: 'U0014F',\r\n decimal: 335,\r\n character: 'ŏ',\r\n latex: '\\\\u{o}',\r\n },\r\n 336: {\r\n id: 'U00150',\r\n decimal: 336,\r\n character: 'Ő',\r\n latex: '{\\\\H O}',\r\n },\r\n 337: {\r\n id: 'U00151',\r\n decimal: 337,\r\n character: 'ő',\r\n latex: '{\\\\H o}',\r\n },\r\n 338: {\r\n id: 'U00152',\r\n decimal: 338,\r\n character: 'Œ',\r\n latex: '\\\\OE',\r\n },\r\n 339: {\r\n id: 'U00153',\r\n decimal: 339,\r\n character: 'œ',\r\n latex: '\\\\oe',\r\n },\r\n 340: {\r\n id: 'U00154',\r\n decimal: 340,\r\n character: 'Ŕ',\r\n latex: \"\\\\'{R}\",\r\n },\r\n 341: {\r\n id: 'U00155',\r\n decimal: 341,\r\n character: 'ŕ',\r\n latex: \"\\\\'{r}\",\r\n },\r\n 342: {\r\n id: 'U00156',\r\n decimal: 342,\r\n character: 'Ŗ',\r\n latex: '\\\\c{R}',\r\n },\r\n 343: {\r\n id: 'U00157',\r\n decimal: 343,\r\n character: 'ŗ',\r\n latex: '\\\\c{r}',\r\n },\r\n 344: {\r\n id: 'U00158',\r\n decimal: 344,\r\n character: 'Ř',\r\n latex: '\\\\v{R}',\r\n },\r\n 345: {\r\n id: 'U00159',\r\n decimal: 345,\r\n character: 'ř',\r\n latex: '\\\\v{r}',\r\n },\r\n 346: {\r\n id: 'U0015A',\r\n decimal: 346,\r\n character: 'Ś',\r\n latex: \"\\\\'{S}\",\r\n },\r\n 347: {\r\n id: 'U0015B',\r\n decimal: 347,\r\n character: 'ś',\r\n latex: \"\\\\'{s}\",\r\n },\r\n 348: {\r\n id: 'U0015C',\r\n decimal: 348,\r\n character: 'Ŝ',\r\n latex: '\\\\^{S}',\r\n },\r\n 349: {\r\n id: 'U0015D',\r\n decimal: 349,\r\n character: 'ŝ',\r\n latex: '\\\\^{s}',\r\n },\r\n 350: {\r\n id: 'U0015E',\r\n decimal: 350,\r\n character: 'Ş',\r\n latex: '\\\\c{S}',\r\n },\r\n 351: {\r\n id: 'U0015F',\r\n decimal: 351,\r\n character: 'ş',\r\n latex: '\\\\c{s}',\r\n },\r\n 352: {\r\n id: 'U00160',\r\n decimal: 352,\r\n character: 'Š',\r\n latex: '\\\\v{S}',\r\n },\r\n 353: {\r\n id: 'U00161',\r\n decimal: 353,\r\n character: 'š',\r\n latex: '\\\\v{s}',\r\n },\r\n 354: {\r\n id: 'U00162',\r\n decimal: 354,\r\n character: 'Ţ',\r\n latex: '\\\\c{T}',\r\n },\r\n 355: {\r\n id: 'U00163',\r\n decimal: 355,\r\n character: 'ţ',\r\n latex: '\\\\c{t}',\r\n },\r\n 356: {\r\n id: 'U00164',\r\n decimal: 356,\r\n character: 'Ť',\r\n latex: '\\\\v{T}',\r\n },\r\n 357: {\r\n id: 'U00165',\r\n decimal: 357,\r\n character: 'ť',\r\n latex: '\\\\v{t}',\r\n },\r\n 360: {\r\n id: 'U00168',\r\n decimal: 360,\r\n character: 'Ũ',\r\n latex: '\\\\~{U}',\r\n },\r\n 361: {\r\n id: 'U00169',\r\n decimal: 361,\r\n character: 'ũ',\r\n latex: '\\\\~{u}',\r\n },\r\n 362: {\r\n id: 'U0016A',\r\n decimal: 362,\r\n character: 'Ū',\r\n latex: '\\\\={U}',\r\n },\r\n 363: {\r\n id: 'U0016B',\r\n decimal: 363,\r\n character: 'ū',\r\n latex: '\\\\={u}',\r\n },\r\n 364: {\r\n id: 'U0016C',\r\n decimal: 364,\r\n character: 'Ŭ',\r\n latex: '\\\\u{U}',\r\n },\r\n 365: {\r\n id: 'U0016D',\r\n decimal: 365,\r\n character: 'ŭ',\r\n latex: '\\\\u{u}',\r\n },\r\n 366: {\r\n id: 'U0016E',\r\n decimal: 366,\r\n character: 'Ů',\r\n latex: '\\\\r{U}',\r\n },\r\n 367: {\r\n id: 'U0016F',\r\n decimal: 367,\r\n character: 'ů',\r\n latex: '\\\\r{u}',\r\n },\r\n 368: {\r\n id: 'U00170',\r\n decimal: 368,\r\n character: 'Ű',\r\n latex: '{\\\\H U}',\r\n },\r\n 369: {\r\n id: 'U00171',\r\n decimal: 369,\r\n character: 'ű',\r\n latex: '{\\\\H u}',\r\n },\r\n 370: {\r\n id: 'U00172',\r\n decimal: 370,\r\n character: 'Ų',\r\n latex: '\\\\k{U}',\r\n },\r\n 371: {\r\n id: 'U00173',\r\n decimal: 371,\r\n character: 'ų',\r\n latex: '\\\\k{u}',\r\n },\r\n 372: {\r\n id: 'U00174',\r\n decimal: 372,\r\n character: 'Ŵ',\r\n latex: '\\\\^{W}',\r\n },\r\n 373: {\r\n id: 'U00175',\r\n decimal: 373,\r\n character: 'ŵ',\r\n latex: '\\\\^{w}',\r\n },\r\n 374: {\r\n id: 'U00176',\r\n decimal: 374,\r\n character: 'Ŷ',\r\n latex: '\\\\^{Y}',\r\n },\r\n 375: {\r\n id: 'U00177',\r\n decimal: 375,\r\n character: 'ŷ',\r\n latex: '\\\\^{y}',\r\n },\r\n 376: {\r\n id: 'U00178',\r\n decimal: 376,\r\n character: 'Ÿ',\r\n latex: '\\\\\"{Y}',\r\n },\r\n 377: {\r\n id: 'U00179',\r\n decimal: 377,\r\n character: 'Ź',\r\n latex: \"\\\\'{Z}\",\r\n },\r\n 378: {\r\n id: 'U0017A',\r\n decimal: 378,\r\n character: 'ź',\r\n latex: \"\\\\'{z}\",\r\n },\r\n 379: {\r\n id: 'U0017B',\r\n decimal: 379,\r\n character: 'Ż',\r\n latex: '\\\\.{Z}',\r\n },\r\n 380: {\r\n id: 'U0017C',\r\n decimal: 380,\r\n character: 'ż',\r\n latex: '\\\\.{z}',\r\n },\r\n 381: {\r\n id: 'U0017D',\r\n decimal: 381,\r\n character: 'Ž',\r\n latex: '\\\\v{Z}',\r\n },\r\n 382: {\r\n id: 'U0017E',\r\n decimal: 382,\r\n character: 'ž',\r\n latex: '\\\\v{z}',\r\n },\r\n 402: {\r\n id: 'U00192',\r\n decimal: 402,\r\n character: 'ƒ',\r\n latex: '\\\\textflorin',\r\n },\r\n 501: {\r\n id: 'U001F5',\r\n decimal: 501,\r\n character: 'ǵ',\r\n latex: \"\\\\'{g}\",\r\n },\r\n 609: {\r\n id: 'U00261',\r\n decimal: 609,\r\n character: 'ɡ',\r\n latex: 'g',\r\n },\r\n 700: {\r\n id: 'U002BC',\r\n decimal: 700,\r\n character: 'ʼ',\r\n latex: \"'\",\r\n },\r\n 711: {\r\n id: 'U002C7',\r\n decimal: 711,\r\n character: 'ˇ',\r\n latex: '\\\\textasciicaron',\r\n },\r\n 714: {\r\n id: 'U002ca',\r\n decimal: 714,\r\n character: 'ˊ',\r\n latex: '\\\\textasciitilde',\r\n },\r\n 728: {\r\n id: 'U002D8',\r\n decimal: 728,\r\n character: '˘',\r\n latex: '\\\\textasciibreve',\r\n },\r\n 729: {\r\n id: 'U002D9',\r\n decimal: 729,\r\n character: '˙',\r\n latex: '\\\\textperiodcentered',\r\n },\r\n 730: {\r\n id: 'U002DA',\r\n decimal: 730,\r\n character: '˚',\r\n latex: '\\\\r{}',\r\n },\r\n 731: {\r\n id: 'U002DB',\r\n decimal: 731,\r\n character: '˛',\r\n latex: '\\\\k{}',\r\n },\r\n 732: {\r\n id: 'U002DC',\r\n decimal: 732,\r\n character: '˜',\r\n latex: '\\\\texttildelow',\r\n },\r\n 733: {\r\n id: 'U002dd',\r\n decimal: 733,\r\n character: '˝',\r\n latex: '\\\\textacutedbl',\r\n },\r\n 768: {\r\n id: 'U00300',\r\n decimal: 768,\r\n character: '̀',\r\n latex: '\\\\`',\r\n ungrouped: true,\r\n },\r\n 769: {\r\n id: 'U00301',\r\n decimal: 769,\r\n character: '́',\r\n latex: \"\\\\'\",\r\n ungrouped: true,\r\n },\r\n 770: {\r\n id: 'U00302',\r\n decimal: 770,\r\n character: '̂',\r\n latex: '\\\\^',\r\n ungrouped: true,\r\n },\r\n 771: {\r\n id: 'U00303',\r\n decimal: 771,\r\n character: '̃',\r\n latex: '\\\\~',\r\n ungrouped: true,\r\n },\r\n 772: {\r\n id: 'U00304',\r\n decimal: 772,\r\n character: '̄',\r\n latex: '\\\\=',\r\n ungrouped: true,\r\n },\r\n 774: {\r\n id: 'U00306',\r\n decimal: 774,\r\n character: '̆',\r\n latex: '\\\\u',\r\n ungrouped: true,\r\n },\r\n 775: {\r\n id: 'U00307',\r\n decimal: 775,\r\n character: '̇',\r\n latex: '\\\\.',\r\n ungrouped: true,\r\n },\r\n 776: {\r\n id: 'U00308',\r\n decimal: 776,\r\n character: '̈',\r\n latex: '\\\\\"',\r\n ungrouped: true,\r\n },\r\n 778: {\r\n id: 'U0030A',\r\n decimal: 778,\r\n character: '̊',\r\n latex: '\\\\r',\r\n ungrouped: true,\r\n },\r\n 780: {\r\n id: 'U0030C',\r\n decimal: 780,\r\n character: '̌',\r\n latex: '\\\\v',\r\n ungrouped: true,\r\n },\r\n 807: {\r\n id: 'U00327',\r\n decimal: 807,\r\n character: '̧',\r\n latex: '\\\\c',\r\n ungrouped: true,\r\n },\r\n 808: {\r\n id: 'U00328',\r\n decimal: 808,\r\n character: '̨',\r\n latex: '\\\\k',\r\n ungrouped: true,\r\n },\r\n 902: {\r\n id: 'U00386',\r\n decimal: 902,\r\n character: 'Ά',\r\n latex: \"\\\\'{A}\",\r\n },\r\n 904: {\r\n id: 'U00388',\r\n decimal: 904,\r\n character: 'Έ',\r\n latex: \"\\\\'{E}\",\r\n },\r\n 905: {\r\n id: 'U00389',\r\n decimal: 905,\r\n character: 'Ή',\r\n latex: \"\\\\'{H}\",\r\n },\r\n 906: {\r\n id: 'U0038A',\r\n decimal: 906,\r\n character: 'Ί',\r\n latex: \"\\\\'{}{I}\",\r\n },\r\n 908: {\r\n id: 'U0038C',\r\n decimal: 908,\r\n character: 'Ό',\r\n latex: \"\\\\'{}O\",\r\n },\r\n 910: {\r\n id: 'U0038E',\r\n decimal: 910,\r\n character: 'Ύ',\r\n latex: \"$\\\\mathrm{'Y}$\",\r\n },\r\n 911: {\r\n id: 'U0038F',\r\n decimal: 911,\r\n character: 'Ώ',\r\n latex: \"$\\\\mathrm{'\\\\Omega}$\",\r\n },\r\n 924: {\r\n id: 'U0039C',\r\n decimal: 924,\r\n character: 'Μ',\r\n latex: 'M',\r\n },\r\n 925: {\r\n id: 'U0039D',\r\n decimal: 925,\r\n character: 'Ν',\r\n latex: 'N',\r\n },\r\n 927: {\r\n id: 'U0039F',\r\n decimal: 927,\r\n character: 'Ο',\r\n latex: 'O',\r\n },\r\n 938: {\r\n id: 'U003AA',\r\n decimal: 938,\r\n character: 'Ϊ',\r\n latex: '$\\\\mathrm{\\\\ddot{I}}$',\r\n },\r\n 939: {\r\n id: 'U003AB',\r\n decimal: 939,\r\n character: 'Ϋ',\r\n latex: '$\\\\mathrm{\\\\ddot{Y}}$',\r\n },\r\n 940: {\r\n id: 'U003AC',\r\n decimal: 940,\r\n character: 'ά',\r\n latex: \"\\\\'{$\\\\alpha$}\",\r\n },\r\n 959: {\r\n id: 'U003BF',\r\n decimal: 959,\r\n character: 'ο',\r\n latex: 'o',\r\n },\r\n 972: {\r\n id: 'U003CC',\r\n decimal: 972,\r\n character: 'ό',\r\n latex: \"\\\\'{o}\",\r\n },\r\n 8194: {\r\n id: 'U02002',\r\n decimal: 8194,\r\n character: ' ',\r\n latex: '\\\\hspace{0.6em}',\r\n },\r\n 8195: {\r\n id: 'U02003',\r\n decimal: 8195,\r\n character: ' ',\r\n latex: '\\\\hspace{1em}',\r\n },\r\n 8196: {\r\n id: 'U02004',\r\n decimal: 8196,\r\n character: ' ',\r\n latex: '\\\\hspace{0.33em}',\r\n },\r\n 8197: {\r\n id: 'U02005',\r\n decimal: 8197,\r\n character: ' ',\r\n latex: '\\\\hspace{0.25em}',\r\n },\r\n 8198: {\r\n id: 'U02006',\r\n decimal: 8198,\r\n character: ' ',\r\n latex: '\\\\hspace{0.166em}',\r\n },\r\n 8199: {\r\n id: 'U02007',\r\n decimal: 8199,\r\n character: ' ',\r\n latex: '\\\\hphantom{0}',\r\n },\r\n 8200: {\r\n id: 'U02008',\r\n decimal: 8200,\r\n character: ' ',\r\n latex: '\\\\hphantom{,}',\r\n },\r\n 8201: {\r\n id: 'U02009',\r\n decimal: 8201,\r\n character: ' ',\r\n latex: '\\\\hspace{0.167em}',\r\n },\r\n 8204: {\r\n id: 'U00200c',\r\n decimal: 8204,\r\n character: '',\r\n latex: '\\\\textcompwordmark',\r\n },\r\n 8208: {\r\n id: 'U02010',\r\n decimal: 8208,\r\n character: '‐',\r\n latex: '-',\r\n },\r\n 8209: {\r\n id: 'U2011',\r\n decimal: 8209,\r\n character: '‑',\r\n latex: '\\\\nobreakdash-'\r\n },\r\n 8211: {\r\n id: 'U02013',\r\n decimal: 8211,\r\n character: '–',\r\n latex: '\\\\textendash',\r\n },\r\n 8212: {\r\n id: 'U02014',\r\n decimal: 8212,\r\n character: '—',\r\n latex: '\\\\textemdash',\r\n },\r\n 8213: {\r\n id: 'U02015',\r\n decimal: 8213,\r\n character: '―',\r\n latex: '\\\\rule{1em}{1pt}',\r\n },\r\n 8216: {\r\n id: 'U02018',\r\n decimal: 8216,\r\n character: '‘',\r\n latex: '\\\\textquoteleft',\r\n },\r\n 8217: {\r\n id: 'U02019',\r\n decimal: 8217,\r\n character: '’',\r\n latex: '\\\\textquoteright',\r\n },\r\n 8218: {\r\n id: 'U0201A',\r\n decimal: 8218,\r\n character: '‚',\r\n latex: ',',\r\n },\r\n 8220: {\r\n id: 'U0201C',\r\n decimal: 8220,\r\n character: '“',\r\n latex: '\\\\textquotedblleft',\r\n },\r\n 8221: {\r\n id: 'U0201D',\r\n decimal: 8221,\r\n character: '”',\r\n latex: '\\\\textquotedblright',\r\n },\r\n 8222: {\r\n id: 'U0201E',\r\n decimal: 8222,\r\n character: '„',\r\n latex: ',,',\r\n },\r\n 8224: {\r\n id: 'U02020',\r\n decimal: 8224,\r\n character: '†',\r\n latex: '\\\\textdagger',\r\n },\r\n 8225: {\r\n id: 'U02021',\r\n decimal: 8225,\r\n character: '‡',\r\n latex: '\\\\textdaggerdbl',\r\n },\r\n 8226: {\r\n id: 'U02022',\r\n decimal: 8226,\r\n character: '•',\r\n latex: '\\\\textbullet',\r\n },\r\n 8228: {\r\n id: 'U02024',\r\n decimal: 8228,\r\n character: '․',\r\n latex: '.',\r\n },\r\n 8229: {\r\n id: 'U02025',\r\n decimal: 8229,\r\n character: '‥',\r\n latex: '..',\r\n },\r\n 8230: {\r\n id: 'U02026',\r\n decimal: 8230,\r\n character: '…',\r\n latex: '\\\\ldots',\r\n },\r\n 8240: {\r\n id: 'U02030',\r\n decimal: 8240,\r\n character: '‰',\r\n latex: '\\\\textperthousand',\r\n },\r\n 8241: {\r\n id: 'U02031',\r\n decimal: 8241,\r\n character: '‱',\r\n latex: '\\\\textpertenthousand',\r\n },\r\n 8242: {\r\n id: 'U02032',\r\n decimal: 8242,\r\n character: '′',\r\n latex: \"{'}\",\r\n },\r\n 8243: {\r\n id: 'U02033',\r\n decimal: 8243,\r\n character: '″',\r\n latex: \"{''}\",\r\n },\r\n 8244: {\r\n id: 'U02034',\r\n decimal: 8244,\r\n character: '‴',\r\n latex: \"{'''}\",\r\n },\r\n 8249: {\r\n id: 'U02039',\r\n decimal: 8249,\r\n character: '‹',\r\n latex: '\\\\guilsinglleft',\r\n },\r\n 8250: {\r\n id: 'U0203A',\r\n decimal: 8250,\r\n character: '›',\r\n latex: '\\\\guilsinglright',\r\n },\r\n 8279: {\r\n id: 'U02057',\r\n decimal: 8279,\r\n character: '⁗',\r\n latex: \"''''\",\r\n },\r\n 8288: {\r\n id: 'U02060',\r\n decimal: 8288,\r\n character: '',\r\n latex: '\\\\nolinebreak',\r\n },\r\n 8364: {\r\n id: 'U020AC',\r\n decimal: 8364,\r\n character: '€',\r\n latex: '\\\\mbox{\\\\texteuro}',\r\n },\r\n 8450: {\r\n id: 'U02102',\r\n decimal: 8450,\r\n character: 'ℂ',\r\n latex: '$\\\\mathbb{C}$',\r\n },\r\n 8460: {\r\n id: 'U0210C',\r\n decimal: 8460,\r\n character: 'ℌ',\r\n latex: '$\\\\mathfrak{H}$',\r\n },\r\n 8461: {\r\n id: 'U0210D',\r\n decimal: 8461,\r\n character: 'ℍ',\r\n latex: '$\\\\mathbb{H}$',\r\n },\r\n 8465: {\r\n id: 'U02111',\r\n decimal: 8465,\r\n character: 'ℑ',\r\n latex: '$\\\\mathfrak{I}$',\r\n },\r\n 8469: {\r\n id: 'U02115',\r\n decimal: 8469,\r\n character: 'ℕ',\r\n latex: '$\\\\mathbb{N}$',\r\n },\r\n 8473: {\r\n id: 'U02119',\r\n decimal: 8473,\r\n character: 'ℙ',\r\n latex: '$\\\\mathbb{P}$',\r\n },\r\n 8474: {\r\n id: 'U0211A',\r\n decimal: 8474,\r\n character: 'ℚ',\r\n latex: '$\\\\mathbb{Q}$',\r\n },\r\n 8476: {\r\n id: 'U0211C',\r\n decimal: 8476,\r\n character: 'ℜ',\r\n latex: '$\\\\mathfrak{R}$',\r\n },\r\n 8477: {\r\n id: 'U0211D',\r\n decimal: 8477,\r\n character: 'ℝ',\r\n latex: '$\\\\mathbb{R}$',\r\n },\r\n 8482: {\r\n id: 'U02122',\r\n decimal: 8482,\r\n character: '™',\r\n latex: '\\\\texttrademark',\r\n },\r\n 8484: {\r\n id: 'U02124',\r\n decimal: 8484,\r\n character: 'ℤ',\r\n latex: '$\\\\mathbb{Z}$',\r\n },\r\n 8488: {\r\n id: 'U02128',\r\n decimal: 8488,\r\n character: 'ℨ',\r\n latex: '$\\\\mathfrak{Z}$',\r\n },\r\n 8491: {\r\n id: 'U0212B',\r\n decimal: 8491,\r\n character: 'Å',\r\n latex: '\\\\AA',\r\n },\r\n 8493: {\r\n id: 'U0212D',\r\n decimal: 8493,\r\n character: 'ℭ',\r\n latex: '$\\\\mathfrak{C}$',\r\n },\r\n 8722: {\r\n id: 'U02212',\r\n decimal: 8722,\r\n character: '−',\r\n latex: '-',\r\n },\r\n 8762: {\r\n id: 'U0223A',\r\n decimal: 8762,\r\n character: '∺',\r\n latex: '$\\\\mathbin{{:}\\\\!\\\\!{-}\\\\!\\\\!{:}}$',\r\n },\r\n 8788: {\r\n id: 'U02254',\r\n decimal: 8788,\r\n character: '≔',\r\n latex: ':=',\r\n },\r\n 8789: {\r\n id: 'U02255',\r\n decimal: 8789,\r\n character: '≕',\r\n latex: '=:',\r\n },\r\n 8942: {\r\n id: 'U022EE',\r\n decimal: 8942,\r\n character: '⋮',\r\n latex: '\\\\vdots',\r\n },\r\n 8982: {\r\n id: 'U02316',\r\n decimal: 8982,\r\n character: '⌖',\r\n latex: '$\\\\mathchar\"2208$',\r\n },\r\n 9251: {\r\n id: 'U02423',\r\n decimal: 9251,\r\n character: '␣',\r\n latex: '\\\\textvisiblespace',\r\n },\r\n 9645: {\r\n id: 'U025AD',\r\n decimal: 9645,\r\n character: '▭',\r\n latex: '\\\\fbox{~~}',\r\n },\r\n 11005: {\r\n id: 'U02AFD-020E5',\r\n decimal: 11005,\r\n character: '⫽',\r\n latex: '{\\\\rlap{\\\\textbackslash}{{/}\\\\!\\\\!{/}}}',\r\n },\r\n 64256: {\r\n id: 'U0FB00',\r\n decimal: 64256,\r\n character: 'ff',\r\n latex: 'ff',\r\n },\r\n 64257: {\r\n id: 'U0FB01',\r\n decimal: 64257,\r\n character: 'fi',\r\n latex: 'fi',\r\n },\r\n 64258: {\r\n id: 'U0FB02',\r\n decimal: 64258,\r\n character: 'fl',\r\n latex: 'fl',\r\n },\r\n 64259: {\r\n id: 'U0FB03',\r\n decimal: 64259,\r\n character: 'ffi',\r\n latex: 'ffi',\r\n },\r\n 64260: {\r\n id: 'U0FB04',\r\n decimal: 64260,\r\n character: 'ffl',\r\n latex: 'ffl',\r\n },\r\n 119808: {\r\n id: 'U1D400',\r\n decimal: 119808,\r\n character: '퐀',\r\n latex: '$\\\\mathbf{A}$',\r\n },\r\n 119809: {\r\n id: 'U1D401',\r\n decimal: 119809,\r\n character: '퐁',\r\n latex: '$\\\\mathbf{B}$',\r\n },\r\n 119810: {\r\n id: 'U1D402',\r\n decimal: 119810,\r\n character: '퐂',\r\n latex: '$\\\\mathbf{C}$',\r\n },\r\n 119811: {\r\n id: 'U1D403',\r\n decimal: 119811,\r\n character: '퐃',\r\n latex: '$\\\\mathbf{D}$',\r\n },\r\n 119812: {\r\n id: 'U1D404',\r\n decimal: 119812,\r\n character: '퐄',\r\n latex: '$\\\\mathbf{E}$',\r\n },\r\n 119813: {\r\n id: 'U1D405',\r\n decimal: 119813,\r\n character: '퐅',\r\n latex: '{$\\\\mathbf{F}$}',\r\n },\r\n 119814: {\r\n id: 'U1D406',\r\n decimal: 119814,\r\n character: '퐆',\r\n latex: '$\\\\mathbf{G}$',\r\n },\r\n 119815: {\r\n id: 'U1D407',\r\n decimal: 119815,\r\n character: '퐇',\r\n latex: '$\\\\mathbf{H}$',\r\n },\r\n 119816: {\r\n id: 'U1D408',\r\n decimal: 119816,\r\n character: '퐈',\r\n latex: '$\\\\mathbf{I}$',\r\n },\r\n 119817: {\r\n id: 'U1D409',\r\n decimal: 119817,\r\n character: '퐉',\r\n latex: '$\\\\mathbf{J}$',\r\n },\r\n 119818: {\r\n id: 'U1D40A',\r\n decimal: 119818,\r\n character: '퐊',\r\n latex: '$\\\\mathbf{K}$',\r\n },\r\n 119819: {\r\n id: 'U1D40B',\r\n decimal: 119819,\r\n character: '퐋',\r\n latex: '$\\\\mathbf{L}$',\r\n },\r\n 119820: {\r\n id: 'U1D40C',\r\n decimal: 119820,\r\n character: '퐌',\r\n latex: '$\\\\mathbf{M}$',\r\n },\r\n 119821: {\r\n id: 'U1D40D',\r\n decimal: 119821,\r\n character: '퐍',\r\n latex: '$\\\\mathbf{N}$',\r\n },\r\n 119822: {\r\n id: 'U1D40E',\r\n decimal: 119822,\r\n character: '퐎',\r\n latex: '$\\\\mathbf{O}$',\r\n },\r\n 119823: {\r\n id: 'U1D40F',\r\n decimal: 119823,\r\n character: '퐏',\r\n latex: '$\\\\mathbf{P}$',\r\n },\r\n 119824: {\r\n id: 'U1D410',\r\n decimal: 119824,\r\n character: '퐐',\r\n latex: '$\\\\mathbf{Q}$',\r\n },\r\n 119825: {\r\n id: 'U1D411',\r\n decimal: 119825,\r\n character: '퐑',\r\n latex: '$\\\\mathbf{R}$',\r\n },\r\n 119826: {\r\n id: 'U1D412',\r\n decimal: 119826,\r\n character: '퐒',\r\n latex: '$\\\\mathbf{S}$',\r\n },\r\n 119827: {\r\n id: 'U1D413',\r\n decimal: 119827,\r\n character: '퐓',\r\n latex: '$\\\\mathbf{T}$',\r\n },\r\n 119828: {\r\n id: 'U1D414',\r\n decimal: 119828,\r\n character: '퐔',\r\n latex: '$\\\\mathbf{U}$',\r\n },\r\n 119829: {\r\n id: 'U1D415',\r\n decimal: 119829,\r\n character: '퐕',\r\n latex: '$\\\\mathbf{V}$',\r\n },\r\n 119830: {\r\n id: 'U1D416',\r\n decimal: 119830,\r\n character: '퐖',\r\n latex: '$\\\\mathbf{W}$',\r\n },\r\n 119831: {\r\n id: 'U1D417',\r\n decimal: 119831,\r\n character: '퐗',\r\n latex: '$\\\\mathbf{X}$',\r\n },\r\n 119832: {\r\n id: 'U1D418',\r\n decimal: 119832,\r\n character: '퐘',\r\n latex: '$\\\\mathbf{Y}$',\r\n },\r\n 119833: {\r\n id: 'U1D419',\r\n decimal: 119833,\r\n character: '퐙',\r\n latex: '$\\\\mathbf{Z}$',\r\n },\r\n 119834: {\r\n id: 'U1D41A',\r\n decimal: 119834,\r\n character: '퐚',\r\n latex: '$\\\\mathbf{a}$',\r\n },\r\n 119835: {\r\n id: 'U1D41B',\r\n decimal: 119835,\r\n character: '퐛',\r\n latex: '$\\\\mathbf{b}$',\r\n },\r\n 119836: {\r\n id: 'U1D41C',\r\n decimal: 119836,\r\n character: '퐜',\r\n latex: '$\\\\mathbf{c}$',\r\n },\r\n 119837: {\r\n id: 'U1D41D',\r\n decimal: 119837,\r\n character: '퐝',\r\n latex: '$\\\\mathbf{d}$',\r\n },\r\n 119838: {\r\n id: 'U1D41E',\r\n decimal: 119838,\r\n character: '퐞',\r\n latex: '$\\\\mathbf{e}$',\r\n },\r\n 119839: {\r\n id: 'U1D41F',\r\n decimal: 119839,\r\n character: '퐟',\r\n latex: '{$\\\\mathbf{f}$}',\r\n },\r\n 119840: {\r\n id: 'U1D420',\r\n decimal: 119840,\r\n character: '퐠',\r\n latex: '$\\\\mathbf{g}$',\r\n },\r\n 119841: {\r\n id: 'U1D421',\r\n decimal: 119841,\r\n character: '퐡',\r\n latex: '$\\\\mathbf{h}$',\r\n },\r\n 119842: {\r\n id: 'U1D422',\r\n decimal: 119842,\r\n character: '퐢',\r\n latex: '$\\\\mathbf{i}$',\r\n },\r\n 119843: {\r\n id: 'U1D423',\r\n decimal: 119843,\r\n character: '퐣',\r\n latex: '$\\\\mathbf{j}$',\r\n },\r\n 119844: {\r\n id: 'U1D424',\r\n decimal: 119844,\r\n character: '퐤',\r\n latex: '$\\\\mathbf{k}$',\r\n },\r\n 119845: {\r\n id: 'U1D425',\r\n decimal: 119845,\r\n character: '퐥',\r\n latex: '$\\\\mathbf{l}$',\r\n },\r\n 119846: {\r\n id: 'U1D426',\r\n decimal: 119846,\r\n character: '퐦',\r\n latex: '$\\\\mathbf{m}$',\r\n },\r\n 119847: {\r\n id: 'U1D427',\r\n decimal: 119847,\r\n character: '퐧',\r\n latex: '$\\\\mathbf{n}$',\r\n },\r\n 119848: {\r\n id: 'U1D428',\r\n decimal: 119848,\r\n character: '퐨',\r\n latex: '$\\\\mathbf{o}$',\r\n },\r\n 119849: {\r\n id: 'U1D429',\r\n decimal: 119849,\r\n character: '퐩',\r\n latex: '$\\\\mathbf{p}$',\r\n },\r\n 119850: {\r\n id: 'U1D42A',\r\n decimal: 119850,\r\n character: '퐪',\r\n latex: '$\\\\mathbf{q}$',\r\n },\r\n 119851: {\r\n id: 'U1D42B',\r\n decimal: 119851,\r\n character: '퐫',\r\n latex: '$\\\\mathbf{r}$',\r\n },\r\n 119852: {\r\n id: 'U1D42C',\r\n decimal: 119852,\r\n character: '퐬',\r\n latex: '$\\\\mathbf{s}$',\r\n },\r\n 119853: {\r\n id: 'U1D42D',\r\n decimal: 119853,\r\n character: '퐭',\r\n latex: '$\\\\mathbf{t}$',\r\n },\r\n 119854: {\r\n id: 'U1D42E',\r\n decimal: 119854,\r\n character: '퐮',\r\n latex: '$\\\\mathbf{u}$',\r\n },\r\n 119855: {\r\n id: 'U1D42F',\r\n decimal: 119855,\r\n character: '퐯',\r\n latex: '$\\\\mathbf{v}$',\r\n },\r\n 119856: {\r\n id: 'U1D430',\r\n decimal: 119856,\r\n character: '퐰',\r\n latex: '$\\\\mathbf{w}$',\r\n },\r\n 119857: {\r\n id: 'U1D431',\r\n decimal: 119857,\r\n character: '퐱',\r\n latex: '$\\\\mathbf{x}$',\r\n },\r\n 119858: {\r\n id: 'U1D432',\r\n decimal: 119858,\r\n character: '퐲',\r\n latex: '$\\\\mathbf{y}$',\r\n },\r\n 119859: {\r\n id: 'U1D433',\r\n decimal: 119859,\r\n character: '퐳',\r\n latex: '$\\\\mathbf{z}$',\r\n },\r\n 120068: {\r\n id: 'U1D504',\r\n decimal: 120068,\r\n character: '프',\r\n latex: '$\\\\mathfrak{A}$',\r\n },\r\n 120069: {\r\n id: 'U1D505',\r\n decimal: 120069,\r\n character: '픅',\r\n latex: '$\\\\mathfrak{B}$',\r\n },\r\n 120071: {\r\n id: 'U1D507',\r\n decimal: 120071,\r\n character: '픇',\r\n latex: '$\\\\mathfrak{D}$',\r\n },\r\n 120072: {\r\n id: 'U1D508',\r\n decimal: 120072,\r\n character: '픈',\r\n latex: '$\\\\mathfrak{E}$',\r\n },\r\n 120073: {\r\n id: 'U1D509',\r\n decimal: 120073,\r\n character: '픉',\r\n latex: '$\\\\mathfrak{F}$',\r\n },\r\n 120074: {\r\n id: 'U1D50A',\r\n decimal: 120074,\r\n character: '픊',\r\n latex: '$\\\\mathfrak{G}$',\r\n },\r\n 120077: {\r\n id: 'U1D50D',\r\n decimal: 120077,\r\n character: '픍',\r\n latex: '$\\\\mathfrak{J}$',\r\n },\r\n 120078: {\r\n id: 'U1D50E',\r\n decimal: 120078,\r\n character: '픎',\r\n latex: '$\\\\mathfrak{K}$',\r\n },\r\n 120079: {\r\n id: 'U1D50F',\r\n decimal: 120079,\r\n character: '픏',\r\n latex: '$\\\\mathfrak{L}$',\r\n },\r\n 120080: {\r\n id: 'U1D510',\r\n decimal: 120080,\r\n character: '픐',\r\n latex: '$\\\\mathfrak{M}$',\r\n },\r\n 120081: {\r\n id: 'U1D511',\r\n decimal: 120081,\r\n character: '픑',\r\n latex: '$\\\\mathfrak{N}$',\r\n },\r\n 120082: {\r\n id: 'U1D512',\r\n decimal: 120082,\r\n character: '픒',\r\n latex: '$\\\\mathfrak{O}$',\r\n },\r\n 120083: {\r\n id: 'U1D513',\r\n decimal: 120083,\r\n character: '픓',\r\n latex: '$\\\\mathfrak{P}$',\r\n },\r\n 120084: {\r\n id: 'U1D514',\r\n decimal: 120084,\r\n character: '픔',\r\n latex: '$\\\\mathfrak{Q}$',\r\n },\r\n 120086: {\r\n id: 'U1D516',\r\n decimal: 120086,\r\n character: '픖',\r\n latex: '$\\\\mathfrak{S}$',\r\n },\r\n 120087: {\r\n id: 'U1D517',\r\n decimal: 120087,\r\n character: '픗',\r\n latex: '$\\\\mathfrak{T}$',\r\n },\r\n 120088: {\r\n id: 'U1D518',\r\n decimal: 120088,\r\n character: '픘',\r\n latex: '$\\\\mathfrak{U}$',\r\n },\r\n 120089: {\r\n id: 'U1D519',\r\n decimal: 120089,\r\n character: '픙',\r\n latex: '$\\\\mathfrak{V}$',\r\n },\r\n 120090: {\r\n id: 'U1D51A',\r\n decimal: 120090,\r\n character: '픚',\r\n latex: '$\\\\mathfrak{W}$',\r\n },\r\n 120091: {\r\n id: 'U1D51B',\r\n decimal: 120091,\r\n character: '픛',\r\n latex: '$\\\\mathfrak{X}$',\r\n },\r\n 120092: {\r\n id: 'U1D51C',\r\n decimal: 120092,\r\n character: '픜',\r\n latex: '$\\\\mathfrak{Y}$',\r\n },\r\n 120094: {\r\n id: 'U1D51E',\r\n decimal: 120094,\r\n character: '픞',\r\n latex: '$\\\\mathfrak{a}$',\r\n },\r\n 120095: {\r\n id: 'U1D51F',\r\n decimal: 120095,\r\n character: '픟',\r\n latex: '$\\\\mathfrak{b}$',\r\n },\r\n 120096: {\r\n id: 'U1D520',\r\n decimal: 120096,\r\n character: '픠',\r\n latex: '$\\\\mathfrak{c}$',\r\n },\r\n 120097: {\r\n id: 'U1D521',\r\n decimal: 120097,\r\n character: '픡',\r\n latex: '$\\\\mathfrak{d}$',\r\n },\r\n 120098: {\r\n id: 'U1D522',\r\n decimal: 120098,\r\n character: '픢',\r\n latex: '$\\\\mathfrak{e}$',\r\n },\r\n 120099: {\r\n id: 'U1D523',\r\n decimal: 120099,\r\n character: '픣',\r\n latex: '$\\\\mathfrak{f}$',\r\n },\r\n 120100: {\r\n id: 'U1D524',\r\n decimal: 120100,\r\n character: '픤',\r\n latex: '$\\\\mathfrak{g}$',\r\n },\r\n 120101: {\r\n id: 'U1D525',\r\n decimal: 120101,\r\n character: '픥',\r\n latex: '$\\\\mathfrak{h}$',\r\n },\r\n 120102: {\r\n id: 'U1D526',\r\n decimal: 120102,\r\n character: '픦',\r\n latex: '$\\\\mathfrak{i}$',\r\n },\r\n 120103: {\r\n id: 'U1D527',\r\n decimal: 120103,\r\n character: '픧',\r\n latex: '$\\\\mathfrak{j}$',\r\n },\r\n 120104: {\r\n id: 'U1D528',\r\n decimal: 120104,\r\n character: '픨',\r\n latex: '$\\\\mathfrak{k}$',\r\n },\r\n 120105: {\r\n id: 'U1D529',\r\n decimal: 120105,\r\n character: '픩',\r\n latex: '$\\\\mathfrak{l}$',\r\n },\r\n 120106: {\r\n id: 'U1D52A',\r\n decimal: 120106,\r\n character: '픪',\r\n latex: '$\\\\mathfrak{m}$',\r\n },\r\n 120107: {\r\n id: 'U1D52B',\r\n decimal: 120107,\r\n character: '픫',\r\n latex: '$\\\\mathfrak{n}$',\r\n },\r\n 120108: {\r\n id: 'U1D52C',\r\n decimal: 120108,\r\n character: '픬',\r\n latex: '$\\\\mathfrak{o}$',\r\n },\r\n 120109: {\r\n id: 'U1D52D',\r\n decimal: 120109,\r\n character: '픭',\r\n latex: '$\\\\mathfrak{p}$',\r\n },\r\n 120110: {\r\n id: 'U1D52E',\r\n decimal: 120110,\r\n character: '픮',\r\n latex: '$\\\\mathfrak{q}$',\r\n },\r\n 120111: {\r\n id: 'U1D52F',\r\n decimal: 120111,\r\n character: '픯',\r\n latex: '$\\\\mathfrak{r}$',\r\n },\r\n 120112: {\r\n id: 'U1D530',\r\n decimal: 120112,\r\n character: '픰',\r\n latex: '$\\\\mathfrak{s}$',\r\n },\r\n 120113: {\r\n id: 'U1D531',\r\n decimal: 120113,\r\n character: '픱',\r\n latex: '$\\\\mathfrak{t}$',\r\n },\r\n 120114: {\r\n id: 'U1D532',\r\n decimal: 120114,\r\n character: '픲',\r\n latex: '$\\\\mathfrak{u}$',\r\n },\r\n 120115: {\r\n id: 'U1D533',\r\n decimal: 120115,\r\n character: '픳',\r\n latex: '$\\\\mathfrak{v}$',\r\n },\r\n 120116: {\r\n id: 'U1D534',\r\n decimal: 120116,\r\n character: '픴',\r\n latex: '$\\\\mathfrak{w}$',\r\n },\r\n 120117: {\r\n id: 'U1D535',\r\n decimal: 120117,\r\n character: '픵',\r\n latex: '$\\\\mathfrak{x}$',\r\n },\r\n 120118: {\r\n id: 'U1D536',\r\n decimal: 120118,\r\n character: '픶',\r\n latex: '$\\\\mathfrak{y}$',\r\n },\r\n 120119: {\r\n id: 'U1D537',\r\n decimal: 120119,\r\n character: '픷',\r\n latex: '$\\\\mathfrak{z}$',\r\n },\r\n 120120: {\r\n id: 'U1D538',\r\n decimal: 120120,\r\n character: '픸',\r\n latex: '$\\\\mathbb{A}$',\r\n },\r\n 120121: {\r\n id: 'U1D539',\r\n decimal: 120121,\r\n character: '픹',\r\n latex: '$\\\\mathbb{B}$',\r\n },\r\n 120123: {\r\n id: 'U1D53B',\r\n decimal: 120123,\r\n character: '픻',\r\n latex: '$\\\\mathbb{D}$',\r\n },\r\n 120124: {\r\n id: 'U1D53C',\r\n decimal: 120124,\r\n character: '피',\r\n latex: '$\\\\mathbb{E}$',\r\n },\r\n 120125: {\r\n id: 'U1D53D',\r\n decimal: 120125,\r\n character: '픽',\r\n latex: '$\\\\mathbb{F}$',\r\n },\r\n 120126: {\r\n id: 'U1D53E',\r\n decimal: 120126,\r\n character: '픾',\r\n latex: '$\\\\mathbb{G}$',\r\n },\r\n 120128: {\r\n id: 'U1D540',\r\n decimal: 120128,\r\n character: '핀',\r\n latex: '$\\\\mathbb{I}$',\r\n },\r\n 120129: {\r\n id: 'U1D541',\r\n decimal: 120129,\r\n character: '핁',\r\n latex: '$\\\\mathbb{J}$',\r\n },\r\n 120130: {\r\n id: 'U1D542',\r\n decimal: 120130,\r\n character: '핂',\r\n latex: '$\\\\mathbb{K}$',\r\n },\r\n 120131: {\r\n id: 'U1D543',\r\n decimal: 120131,\r\n character: '핃',\r\n latex: '$\\\\mathbb{L}$',\r\n },\r\n 120132: {\r\n id: 'U1D544',\r\n decimal: 120132,\r\n character: '필',\r\n latex: '$\\\\mathbb{M}$',\r\n },\r\n 120134: {\r\n id: 'U1D546',\r\n decimal: 120134,\r\n character: '핆',\r\n latex: '$\\\\mathbb{O}$',\r\n },\r\n 120138: {\r\n id: 'U1D54A',\r\n decimal: 120138,\r\n character: '핊',\r\n latex: '$\\\\mathbb{S}$',\r\n },\r\n 120139: {\r\n id: 'U1D54B',\r\n decimal: 120139,\r\n character: '핋',\r\n latex: '$\\\\mathbb{T}$',\r\n },\r\n 120140: {\r\n id: 'U1D54C',\r\n decimal: 120140,\r\n character: '핌',\r\n latex: '$\\\\mathbb{U}$',\r\n },\r\n 120141: {\r\n id: 'U1D54D',\r\n decimal: 120141,\r\n character: '핍',\r\n latex: '$\\\\mathbb{V}$',\r\n },\r\n 120142: {\r\n id: 'U1D54E',\r\n decimal: 120142,\r\n character: '핎',\r\n latex: '$\\\\mathbb{W}$',\r\n },\r\n 120143: {\r\n id: 'U1D54F',\r\n decimal: 120143,\r\n character: '핏',\r\n latex: '$\\\\mathbb{X}$',\r\n },\r\n 120144: {\r\n id: 'U1D550',\r\n decimal: 120144,\r\n character: '핐',\r\n latex: '$\\\\mathbb{Y}$',\r\n },\r\n 120146: {\r\n id: 'U1D552',\r\n decimal: 120146,\r\n character: '핒',\r\n latex: '$\\\\mathbb{a}$',\r\n },\r\n 120147: {\r\n id: 'U1D553',\r\n decimal: 120147,\r\n character: '핓',\r\n latex: '$\\\\mathbb{b}$',\r\n },\r\n 120148: {\r\n id: 'U1D554',\r\n decimal: 120148,\r\n character: '핔',\r\n latex: '$\\\\mathbb{c}$',\r\n },\r\n 120149: {\r\n id: 'U1D555',\r\n decimal: 120149,\r\n character: '핕',\r\n latex: '$\\\\mathbb{d}$',\r\n },\r\n 120150: {\r\n id: 'U1D556',\r\n decimal: 120150,\r\n character: '핖',\r\n latex: '$\\\\mathbb{e}$',\r\n },\r\n 120151: {\r\n id: 'U1D557',\r\n decimal: 120151,\r\n character: '핗',\r\n latex: '$\\\\mathbb{f}$',\r\n },\r\n 120152: {\r\n id: 'U1D558',\r\n decimal: 120152,\r\n character: '하',\r\n latex: '$\\\\mathbb{g}$',\r\n },\r\n 120153: {\r\n id: 'U1D559',\r\n decimal: 120153,\r\n character: '학',\r\n latex: '$\\\\mathbb{h}$',\r\n },\r\n 120154: {\r\n id: 'U1D55A',\r\n decimal: 120154,\r\n character: '핚',\r\n latex: '$\\\\mathbb{i}$',\r\n },\r\n 120155: {\r\n id: 'U1D55B',\r\n decimal: 120155,\r\n character: '핛',\r\n latex: '$\\\\mathbb{j}$',\r\n },\r\n 120156: {\r\n id: 'U1D55C',\r\n decimal: 120156,\r\n character: '한',\r\n latex: '$\\\\mathbb{k}$',\r\n },\r\n 120157: {\r\n id: 'U1D55D',\r\n decimal: 120157,\r\n character: '핝',\r\n latex: '$\\\\mathbb{l}$',\r\n },\r\n 120158: {\r\n id: 'U1D55E',\r\n decimal: 120158,\r\n character: '핞',\r\n latex: '$\\\\mathbb{m}$',\r\n },\r\n 120159: {\r\n id: 'U1D55F',\r\n decimal: 120159,\r\n character: '핟',\r\n latex: '$\\\\mathbb{n}$',\r\n },\r\n 120160: {\r\n id: 'U1D560',\r\n decimal: 120160,\r\n character: '할',\r\n latex: '$\\\\mathbb{o}$',\r\n },\r\n 120161: {\r\n id: 'U1D561',\r\n decimal: 120161,\r\n character: '핡',\r\n latex: '$\\\\mathbb{p}$',\r\n },\r\n 120162: {\r\n id: 'U1D562',\r\n decimal: 120162,\r\n character: '핢',\r\n latex: '$\\\\mathbb{q}$',\r\n },\r\n 120163: {\r\n id: 'U1D563',\r\n decimal: 120163,\r\n character: '핣',\r\n latex: '$\\\\mathbb{r}$',\r\n },\r\n 120164: {\r\n id: 'U1D564',\r\n decimal: 120164,\r\n character: '핤',\r\n latex: '$\\\\mathbb{s}$',\r\n },\r\n 120165: {\r\n id: 'U1D565',\r\n decimal: 120165,\r\n character: '핥',\r\n latex: '$\\\\mathbb{t}$',\r\n },\r\n 120166: {\r\n id: 'U1D566',\r\n decimal: 120166,\r\n character: '핦',\r\n latex: '$\\\\mathbb{u}$',\r\n },\r\n 120167: {\r\n id: 'U1D567',\r\n decimal: 120167,\r\n character: '핧',\r\n latex: '$\\\\mathbb{v}$',\r\n },\r\n 120168: {\r\n id: 'U1D568',\r\n decimal: 120168,\r\n character: '함',\r\n latex: '$\\\\mathbb{w}$',\r\n },\r\n 120169: {\r\n id: 'U1D569',\r\n decimal: 120169,\r\n character: '합',\r\n latex: '$\\\\mathbb{x}$',\r\n },\r\n 120170: {\r\n id: 'U1D56A',\r\n decimal: 120170,\r\n character: '핪',\r\n latex: '$\\\\mathbb{y}$',\r\n },\r\n 120171: {\r\n id: 'U1D56B',\r\n decimal: 120171,\r\n character: '핫',\r\n latex: '$\\\\mathbb{z}$',\r\n },\r\n 120224: {\r\n id: 'U1D5A0',\r\n decimal: 120224,\r\n character: '햠',\r\n latex: '$\\\\mathsf{A}$',\r\n },\r\n 120225: {\r\n id: 'U1D5A1',\r\n decimal: 120225,\r\n character: '햡',\r\n latex: '$\\\\mathsf{B}$',\r\n },\r\n 120226: {\r\n id: 'U1D5A2',\r\n decimal: 120226,\r\n character: '햢',\r\n latex: '$\\\\mathsf{C}$',\r\n },\r\n 120227: {\r\n id: 'U1D5A3',\r\n decimal: 120227,\r\n character: '햣',\r\n latex: '$\\\\mathsf{D}$',\r\n },\r\n 120228: {\r\n id: 'U1D5A4',\r\n decimal: 120228,\r\n character: '햤',\r\n latex: '$\\\\mathsf{E}$',\r\n },\r\n 120229: {\r\n id: 'U1D5A5',\r\n decimal: 120229,\r\n character: '향',\r\n latex: '$\\\\mathsf{F}$',\r\n },\r\n 120230: {\r\n id: 'U1D5A6',\r\n decimal: 120230,\r\n character: '햦',\r\n latex: '$\\\\mathsf{G}$',\r\n },\r\n 120231: {\r\n id: 'U1D5A7',\r\n decimal: 120231,\r\n character: '햧',\r\n latex: '$\\\\mathsf{H}$',\r\n },\r\n 120232: {\r\n id: 'U1D5A8',\r\n decimal: 120232,\r\n character: '햨',\r\n latex: '$\\\\mathsf{I}$',\r\n },\r\n 120233: {\r\n id: 'U1D5A9',\r\n decimal: 120233,\r\n character: '햩',\r\n latex: '$\\\\mathsf{J}$',\r\n },\r\n 120234: {\r\n id: 'U1D5AA',\r\n decimal: 120234,\r\n character: '햪',\r\n latex: '$\\\\mathsf{K}$',\r\n },\r\n 120235: {\r\n id: 'U1D5AB',\r\n decimal: 120235,\r\n character: '햫',\r\n latex: '$\\\\mathsf{L}$',\r\n },\r\n 120236: {\r\n id: 'U1D5AC',\r\n decimal: 120236,\r\n character: '햬',\r\n latex: '$\\\\mathsf{M}$',\r\n },\r\n 120237: {\r\n id: 'U1D5AD',\r\n decimal: 120237,\r\n character: '햭',\r\n latex: '$\\\\mathsf{N}$',\r\n },\r\n 120238: {\r\n id: 'U1D5AE',\r\n decimal: 120238,\r\n character: '햮',\r\n latex: '$\\\\mathsf{O}$',\r\n },\r\n 120239: {\r\n id: 'U1D5AF',\r\n decimal: 120239,\r\n character: '햯',\r\n latex: '$\\\\mathsf{P}$',\r\n },\r\n 120240: {\r\n id: 'U1D5B0',\r\n decimal: 120240,\r\n character: '햰',\r\n latex: '$\\\\mathsf{Q}$',\r\n },\r\n 120241: {\r\n id: 'U1D5B1',\r\n decimal: 120241,\r\n character: '햱',\r\n latex: '$\\\\mathsf{R}$',\r\n },\r\n 120242: {\r\n id: 'U1D5B2',\r\n decimal: 120242,\r\n character: '햲',\r\n latex: '$\\\\mathsf{S}$',\r\n },\r\n 120243: {\r\n id: 'U1D5B3',\r\n decimal: 120243,\r\n character: '햳',\r\n latex: '$\\\\mathsf{T}$',\r\n },\r\n 120244: {\r\n id: 'U1D5B4',\r\n decimal: 120244,\r\n character: '햴',\r\n latex: '$\\\\mathsf{U}$',\r\n },\r\n 120245: {\r\n id: 'U1D5B5',\r\n decimal: 120245,\r\n character: '햵',\r\n latex: '$\\\\mathsf{V}$',\r\n },\r\n 120246: {\r\n id: 'U1D5B6',\r\n decimal: 120246,\r\n character: '햶',\r\n latex: '$\\\\mathsf{W}$',\r\n },\r\n 120247: {\r\n id: 'U1D5B7',\r\n decimal: 120247,\r\n character: '햷',\r\n latex: '$\\\\mathsf{X}$',\r\n },\r\n 120248: {\r\n id: 'U1D5B8',\r\n decimal: 120248,\r\n character: '햸',\r\n latex: '$\\\\mathsf{Y}$',\r\n },\r\n 120249: {\r\n id: 'U1D5B9',\r\n decimal: 120249,\r\n character: '햹',\r\n latex: '$\\\\mathsf{Z}$',\r\n },\r\n 120250: {\r\n id: 'U1D5BA',\r\n decimal: 120250,\r\n character: '햺',\r\n latex: '$\\\\mathsf{a}$',\r\n },\r\n 120251: {\r\n id: 'U1D5BB',\r\n decimal: 120251,\r\n character: '햻',\r\n latex: '$\\\\mathsf{b}$',\r\n },\r\n 120252: {\r\n id: 'U1D5BC',\r\n decimal: 120252,\r\n character: '햼',\r\n latex: '$\\\\mathsf{c}$',\r\n },\r\n 120253: {\r\n id: 'U1D5BD',\r\n decimal: 120253,\r\n character: '햽',\r\n latex: '$\\\\mathsf{d}$',\r\n },\r\n 120254: {\r\n id: 'U1D5BE',\r\n decimal: 120254,\r\n character: '햾',\r\n latex: '$\\\\mathsf{e}$',\r\n },\r\n 120255: {\r\n id: 'U1D5BF',\r\n decimal: 120255,\r\n character: '햿',\r\n latex: '$\\\\mathsf{f}$',\r\n },\r\n 120256: {\r\n id: 'U1D5C0',\r\n decimal: 120256,\r\n character: '헀',\r\n latex: '$\\\\mathsf{g}$',\r\n },\r\n 120257: {\r\n id: 'U1D5C1',\r\n decimal: 120257,\r\n character: '헁',\r\n latex: '$\\\\mathsf{h}$',\r\n },\r\n 120258: {\r\n id: 'U1D5C2',\r\n decimal: 120258,\r\n character: '헂',\r\n latex: '$\\\\mathsf{i}$',\r\n },\r\n 120259: {\r\n id: 'U1D5C3',\r\n decimal: 120259,\r\n character: '헃',\r\n latex: '$\\\\mathsf{j}$',\r\n },\r\n 120260: {\r\n id: 'U1D5C4',\r\n decimal: 120260,\r\n character: '헄',\r\n latex: '$\\\\mathsf{k}$',\r\n },\r\n 120261: {\r\n id: 'U1D5C5',\r\n decimal: 120261,\r\n character: '헅',\r\n latex: '$\\\\mathsf{l}$',\r\n },\r\n 120262: {\r\n id: 'U1D5C6',\r\n decimal: 120262,\r\n character: '헆',\r\n latex: '$\\\\mathsf{m}$',\r\n },\r\n 120263: {\r\n id: 'U1D5C7',\r\n decimal: 120263,\r\n character: '헇',\r\n latex: '$\\\\mathsf{n}$',\r\n },\r\n 120264: {\r\n id: 'U1D5C8',\r\n decimal: 120264,\r\n character: '허',\r\n latex: '$\\\\mathsf{o}$',\r\n },\r\n 120265: {\r\n id: 'U1D5C9',\r\n decimal: 120265,\r\n character: '헉',\r\n latex: '$\\\\mathsf{p}$',\r\n },\r\n 120266: {\r\n id: 'U1D5CA',\r\n decimal: 120266,\r\n character: '헊',\r\n latex: '$\\\\mathsf{q}$',\r\n },\r\n 120267: {\r\n id: 'U1D5CB',\r\n decimal: 120267,\r\n character: '헋',\r\n latex: '$\\\\mathsf{r}$',\r\n },\r\n 120268: {\r\n id: 'U1D5CC',\r\n decimal: 120268,\r\n character: '헌',\r\n latex: '$\\\\mathsf{s}$',\r\n },\r\n 120269: {\r\n id: 'U1D5CD',\r\n decimal: 120269,\r\n character: '헍',\r\n latex: '$\\\\mathsf{t}$',\r\n },\r\n 120270: {\r\n id: 'U1D5CE',\r\n decimal: 120270,\r\n character: '헎',\r\n latex: '$\\\\mathsf{u}$',\r\n },\r\n 120271: {\r\n id: 'U1D5CF',\r\n decimal: 120271,\r\n character: '헏',\r\n latex: '$\\\\mathsf{v}$',\r\n },\r\n 120272: {\r\n id: 'U1D5D0',\r\n decimal: 120272,\r\n character: '헐',\r\n latex: '$\\\\mathsf{w}$',\r\n },\r\n 120273: {\r\n id: 'U1D5D1',\r\n decimal: 120273,\r\n character: '헑',\r\n latex: '$\\\\mathsf{x}$',\r\n },\r\n 120274: {\r\n id: 'U1D5D2',\r\n decimal: 120274,\r\n character: '헒',\r\n latex: '$\\\\mathsf{y}$',\r\n },\r\n 120275: {\r\n id: 'U1D5D3',\r\n decimal: 120275,\r\n character: '헓',\r\n latex: '$\\\\mathsf{z}$',\r\n },\r\n 120432: {\r\n id: 'U1D670',\r\n decimal: 120432,\r\n character: '홰',\r\n latex: '$\\\\mathtt{A}$',\r\n },\r\n 120433: {\r\n id: 'U1D671',\r\n decimal: 120433,\r\n character: '홱',\r\n latex: '$\\\\mathtt{B}$',\r\n },\r\n 120434: {\r\n id: 'U1D672',\r\n decimal: 120434,\r\n character: '홲',\r\n latex: '$\\\\mathtt{C}$',\r\n },\r\n 120435: {\r\n id: 'U1D673',\r\n decimal: 120435,\r\n character: '홳',\r\n latex: '$\\\\mathtt{D}$',\r\n },\r\n 120436: {\r\n id: 'U1D674',\r\n decimal: 120436,\r\n character: '홴',\r\n latex: '$\\\\mathtt{E}$',\r\n },\r\n 120437: {\r\n id: 'U1D675',\r\n decimal: 120437,\r\n character: '홵',\r\n latex: '$\\\\mathtt{F}$',\r\n },\r\n 120438: {\r\n id: 'U1D676',\r\n decimal: 120438,\r\n character: '홶',\r\n latex: '$\\\\mathtt{G}$',\r\n },\r\n 120439: {\r\n id: 'U1D677',\r\n decimal: 120439,\r\n character: '홷',\r\n latex: '$\\\\mathtt{H}$',\r\n },\r\n 120440: {\r\n id: 'U1D678',\r\n decimal: 120440,\r\n character: '홸',\r\n latex: '$\\\\mathtt{I}$',\r\n },\r\n 120441: {\r\n id: 'U1D679',\r\n decimal: 120441,\r\n character: '홹',\r\n latex: '$\\\\mathtt{J}$',\r\n },\r\n 120442: {\r\n id: 'U1D67A',\r\n decimal: 120442,\r\n character: '홺',\r\n latex: '$\\\\mathtt{K}$',\r\n },\r\n 120443: {\r\n id: 'U1D67B',\r\n decimal: 120443,\r\n character: '홻',\r\n latex: '$\\\\mathtt{L}$',\r\n },\r\n 120444: {\r\n id: 'U1D67C',\r\n decimal: 120444,\r\n character: '홼',\r\n latex: '$\\\\mathtt{M}$',\r\n },\r\n 120445: {\r\n id: 'U1D67D',\r\n decimal: 120445,\r\n character: '홽',\r\n latex: '$\\\\mathtt{N}$',\r\n },\r\n 120446: {\r\n id: 'U1D67E',\r\n decimal: 120446,\r\n character: '홾',\r\n latex: '$\\\\mathtt{O}$',\r\n },\r\n 120447: {\r\n id: 'U1D67F',\r\n decimal: 120447,\r\n character: '홿',\r\n latex: '$\\\\mathtt{P}$',\r\n },\r\n 120448: {\r\n id: 'U1D680',\r\n decimal: 120448,\r\n character: '횀',\r\n latex: '$\\\\mathtt{Q}$',\r\n },\r\n 120449: {\r\n id: 'U1D681',\r\n decimal: 120449,\r\n character: '횁',\r\n latex: '$\\\\mathtt{R}$',\r\n },\r\n 120450: {\r\n id: 'U1D682',\r\n decimal: 120450,\r\n character: '횂',\r\n latex: '$\\\\mathtt{S}$',\r\n },\r\n 120451: {\r\n id: 'U1D683',\r\n decimal: 120451,\r\n character: '횃',\r\n latex: '$\\\\mathtt{T}$',\r\n },\r\n 120452: {\r\n id: 'U1D684',\r\n decimal: 120452,\r\n character: '횄',\r\n latex: '$\\\\mathtt{U}$',\r\n },\r\n 120453: {\r\n id: 'U1D685',\r\n decimal: 120453,\r\n character: '횅',\r\n latex: '$\\\\mathtt{V}$',\r\n },\r\n 120454: {\r\n id: 'U1D686',\r\n decimal: 120454,\r\n character: '횆',\r\n latex: '$\\\\mathtt{W}$',\r\n },\r\n 120455: {\r\n id: 'U1D687',\r\n decimal: 120455,\r\n character: '횇',\r\n latex: '$\\\\mathtt{X}$',\r\n },\r\n 120456: {\r\n id: 'U1D688',\r\n decimal: 120456,\r\n character: '횈',\r\n latex: '$\\\\mathtt{Y}$',\r\n },\r\n 120457: {\r\n id: 'U1D689',\r\n decimal: 120457,\r\n character: '횉',\r\n latex: '$\\\\mathtt{Z}$',\r\n },\r\n 120458: {\r\n id: 'U1D68A',\r\n decimal: 120458,\r\n character: '횊',\r\n latex: '$\\\\mathtt{a}$',\r\n },\r\n 120459: {\r\n id: 'U1D68B',\r\n decimal: 120459,\r\n character: '횋',\r\n latex: '$\\\\mathtt{b}$',\r\n },\r\n 120460: {\r\n id: 'U1D68C',\r\n decimal: 120460,\r\n character: '회',\r\n latex: '$\\\\mathtt{c}$',\r\n },\r\n 120461: {\r\n id: 'U1D68D',\r\n decimal: 120461,\r\n character: '획',\r\n latex: '$\\\\mathtt{d}$',\r\n },\r\n 120462: {\r\n id: 'U1D68E',\r\n decimal: 120462,\r\n character: '횎',\r\n latex: '$\\\\mathtt{e}$',\r\n },\r\n 120463: {\r\n id: 'U1D68F',\r\n decimal: 120463,\r\n character: '횏',\r\n latex: '$\\\\mathtt{f}$',\r\n },\r\n 120464: {\r\n id: 'U1D690',\r\n decimal: 120464,\r\n character: '횐',\r\n latex: '$\\\\mathtt{g}$',\r\n },\r\n 120465: {\r\n id: 'U1D691',\r\n decimal: 120465,\r\n character: '횑',\r\n latex: '$\\\\mathtt{h}$',\r\n },\r\n 120466: {\r\n id: 'U1D692',\r\n decimal: 120466,\r\n character: '횒',\r\n latex: '$\\\\mathtt{i}$',\r\n },\r\n 120467: {\r\n id: 'U1D693',\r\n decimal: 120467,\r\n character: '횓',\r\n latex: '$\\\\mathtt{j}$',\r\n },\r\n 120468: {\r\n id: 'U1D694',\r\n decimal: 120468,\r\n character: '횔',\r\n latex: '$\\\\mathtt{k}$',\r\n },\r\n 120469: {\r\n id: 'U1D695',\r\n decimal: 120469,\r\n character: '횕',\r\n latex: '$\\\\mathtt{l}$',\r\n },\r\n 120470: {\r\n id: 'U1D696',\r\n decimal: 120470,\r\n character: '횖',\r\n latex: '$\\\\mathtt{m}$',\r\n },\r\n 120471: {\r\n id: 'U1D697',\r\n decimal: 120471,\r\n character: '횗',\r\n latex: '$\\\\mathtt{n}$',\r\n },\r\n 120472: {\r\n id: 'U1D698',\r\n decimal: 120472,\r\n character: '횘',\r\n latex: '$\\\\mathtt{o}$',\r\n },\r\n 120473: {\r\n id: 'U1D699',\r\n decimal: 120473,\r\n character: '횙',\r\n latex: '$\\\\mathtt{p}$',\r\n },\r\n 120474: {\r\n id: 'U1D69A',\r\n decimal: 120474,\r\n character: '횚',\r\n latex: '$\\\\mathtt{q}$',\r\n },\r\n 120475: {\r\n id: 'U1D69B',\r\n decimal: 120475,\r\n character: '횛',\r\n latex: '$\\\\mathtt{r}$',\r\n },\r\n 120476: {\r\n id: 'U1D69C',\r\n decimal: 120476,\r\n character: '횜',\r\n latex: '$\\\\mathtt{s}$',\r\n },\r\n 120477: {\r\n id: 'U1D69D',\r\n decimal: 120477,\r\n character: '횝',\r\n latex: '$\\\\mathtt{t}$',\r\n },\r\n 120478: {\r\n id: 'U1D69E',\r\n decimal: 120478,\r\n character: '횞',\r\n latex: '$\\\\mathtt{u}$',\r\n },\r\n 120479: {\r\n id: 'U1D69F',\r\n decimal: 120479,\r\n character: '횟',\r\n latex: '$\\\\mathtt{v}$',\r\n },\r\n 120480: {\r\n id: 'U1D6A0',\r\n decimal: 120480,\r\n character: '횠',\r\n latex: '$\\\\mathtt{w}$',\r\n },\r\n 120481: {\r\n id: 'U1D6A1',\r\n decimal: 120481,\r\n character: '횡',\r\n latex: '$\\\\mathtt{x}$',\r\n },\r\n 120482: {\r\n id: 'U1D6A2',\r\n decimal: 120482,\r\n character: '횢',\r\n latex: '$\\\\mathtt{y}$',\r\n },\r\n 120483: {\r\n id: 'U1D6A3',\r\n decimal: 120483,\r\n character: '횣',\r\n latex: '$\\\\mathtt{z}$',\r\n },\r\n 120490: {\r\n id: 'U1D6AA',\r\n decimal: 120490,\r\n character: '횪',\r\n latex: '$\\\\mathbf{\\\\Gamma}$',\r\n },\r\n 120491: {\r\n id: 'U1D6AB',\r\n decimal: 120491,\r\n character: '횫',\r\n latex: '$\\\\mathbf{\\\\Delta}$',\r\n },\r\n 120495: {\r\n id: 'U1D6AF',\r\n decimal: 120495,\r\n character: '횯',\r\n latex: '$\\\\mathbf{\\\\Theta}$',\r\n },\r\n 120498: {\r\n id: 'U1D6B2',\r\n decimal: 120498,\r\n character: '횲',\r\n latex: '$\\\\mathbf{\\\\Lambda}$',\r\n },\r\n 120499: {\r\n id: 'U1D6B3',\r\n decimal: 120499,\r\n character: '횳',\r\n latex: '$\\\\mathbf{M}$',\r\n },\r\n 120500: {\r\n id: 'U1D6B4',\r\n decimal: 120500,\r\n character: '횴',\r\n latex: 'N',\r\n },\r\n 120501: {\r\n id: 'U1D6B5',\r\n decimal: 120501,\r\n character: '횵',\r\n latex: '$\\\\mathbf{\\\\Xi}$',\r\n },\r\n 120502: {\r\n id: 'U1D6B6',\r\n decimal: 120502,\r\n character: '횶',\r\n latex: 'O',\r\n },\r\n 120503: {\r\n id: 'U1D6B7',\r\n decimal: 120503,\r\n character: '횷',\r\n latex: '$\\\\mathbf{\\\\Pi}$',\r\n },\r\n 120505: {\r\n id: 'U1D6B9',\r\n decimal: 120505,\r\n character: '횹',\r\n latex: '$\\\\mathbf{\\\\vartheta}$',\r\n },\r\n 120506: {\r\n id: 'U1D6BA',\r\n decimal: 120506,\r\n character: '횺',\r\n latex: '$\\\\mathbf{\\\\Sigma}$',\r\n },\r\n 120508: {\r\n id: 'U1D6BC',\r\n decimal: 120508,\r\n character: '횼',\r\n latex: '$\\\\mathbf{\\\\Upsilon}$',\r\n },\r\n 120509: {\r\n id: 'U1D6BD',\r\n decimal: 120509,\r\n character: '횽',\r\n latex: '$\\\\mathbf{\\\\Phi}$',\r\n },\r\n 120511: {\r\n id: 'U1D6BF',\r\n decimal: 120511,\r\n character: '횿',\r\n latex: '$\\\\mathbf{\\\\Psi}$',\r\n },\r\n 120512: {\r\n id: 'U1D6C0',\r\n decimal: 120512,\r\n character: '훀',\r\n latex: '$\\\\mathbf{\\\\Omega}$',\r\n },\r\n 120513: {\r\n id: 'U1D6C1',\r\n decimal: 120513,\r\n character: '훁',\r\n latex: '$\\\\mathbf{\\\\nabla}$',\r\n },\r\n 120514: {\r\n id: 'U1D6C2',\r\n decimal: 120514,\r\n character: '훂',\r\n latex: '$\\\\mathbf{\\\\alpha}$',\r\n },\r\n 120515: {\r\n id: 'U1D6C3',\r\n decimal: 120515,\r\n character: '훃',\r\n latex: '$\\\\mathbf{\\\\beta}$',\r\n },\r\n 120516: {\r\n id: 'U1D6C4',\r\n decimal: 120516,\r\n character: '후',\r\n latex: '$\\\\mathbf{\\\\gamma}$',\r\n },\r\n 120517: {\r\n id: 'U1D6C5',\r\n decimal: 120517,\r\n character: '훅',\r\n latex: '$\\\\mathbf{\\\\delta}$',\r\n },\r\n 120518: {\r\n id: 'U1D6C6',\r\n decimal: 120518,\r\n character: '훆',\r\n latex: '$\\\\mathbf{\\\\epsilon}$',\r\n },\r\n 120519: {\r\n id: 'U1D6C7',\r\n decimal: 120519,\r\n character: '훇',\r\n latex: '$\\\\mathbf{\\\\zeta}$',\r\n },\r\n 120520: {\r\n id: 'U1D6C8',\r\n decimal: 120520,\r\n character: '훈',\r\n latex: '$\\\\mathbf{\\\\eta}$',\r\n },\r\n 120521: {\r\n id: 'U1D6C9',\r\n decimal: 120521,\r\n character: '훉',\r\n latex: '$\\\\mathbf{\\\\theta}$',\r\n },\r\n 120522: {\r\n id: 'U1D6CA',\r\n decimal: 120522,\r\n character: '훊',\r\n latex: '$\\\\mathbf{\\\\iota}$',\r\n },\r\n 120523: {\r\n id: 'U1D6CB',\r\n decimal: 120523,\r\n character: '훋',\r\n latex: '$\\\\mathbf{\\\\kappa}$',\r\n },\r\n 120524: {\r\n id: 'U1D6CC',\r\n decimal: 120524,\r\n character: '훌',\r\n latex: '$\\\\mathbf{\\\\lambda}$',\r\n },\r\n 120525: {\r\n id: 'U1D6CD',\r\n decimal: 120525,\r\n character: '훍',\r\n latex: '$\\\\mathbf{\\\\mu}$',\r\n },\r\n 120526: {\r\n id: 'U1D6CE',\r\n decimal: 120526,\r\n character: '훎',\r\n latex: '$\\\\mathbf{\\\\nu}$',\r\n },\r\n 120527: {\r\n id: 'U1D6CF',\r\n decimal: 120527,\r\n character: '훏',\r\n latex: '$\\\\mathbf{\\\\xi}$',\r\n },\r\n 120528: {\r\n id: 'U1D6D0',\r\n decimal: 120528,\r\n character: '훐',\r\n latex: '$\\\\mathbf{o}$',\r\n },\r\n 120529: {\r\n id: 'U1D6D1',\r\n decimal: 120529,\r\n character: '훑',\r\n latex: '$\\\\mathbf{\\\\pi}$',\r\n },\r\n 120530: {\r\n id: 'U1D6D2',\r\n decimal: 120530,\r\n character: '훒',\r\n latex: '$\\\\mathbf{\\\\rho}$',\r\n },\r\n 120531: {\r\n id: 'U1D6D3',\r\n decimal: 120531,\r\n character: '훓',\r\n latex: '$\\\\mathbf{\\\\varsigma}$',\r\n },\r\n 120532: {\r\n id: 'U1D6D4',\r\n decimal: 120532,\r\n character: '훔',\r\n latex: '$\\\\mathbf{\\\\sigma}$',\r\n },\r\n 120533: {\r\n id: 'U1D6D5',\r\n decimal: 120533,\r\n character: '훕',\r\n latex: '$\\\\mathbf{\\\\tau}$',\r\n },\r\n 120534: {\r\n id: 'U1D6D6',\r\n decimal: 120534,\r\n character: '훖',\r\n latex: '$\\\\mathbf{\\\\upsilon}$',\r\n },\r\n 120535: {\r\n id: 'U1D6D7',\r\n decimal: 120535,\r\n character: '훗',\r\n latex: '$\\\\mathbf{\\\\phi}$',\r\n },\r\n 120536: {\r\n id: 'U1D6D8',\r\n decimal: 120536,\r\n character: '훘',\r\n latex: '$\\\\mathbf{\\\\chi}$',\r\n },\r\n 120537: {\r\n id: 'U1D6D9',\r\n decimal: 120537,\r\n character: '훙',\r\n latex: '$\\\\mathbf{\\\\psi}$',\r\n },\r\n 120538: {\r\n id: 'U1D6DA',\r\n decimal: 120538,\r\n character: '훚',\r\n latex: '$\\\\mathbf{\\\\omega}$',\r\n },\r\n 120540: {\r\n id: 'U1D6DC',\r\n decimal: 120540,\r\n character: '훜',\r\n latex: '$\\\\mathbf{\\\\varepsilon}$',\r\n },\r\n 120541: {\r\n id: 'U1D6DD',\r\n decimal: 120541,\r\n character: '훝',\r\n latex: '$\\\\mathbf{\\\\vartheta}$',\r\n },\r\n 120542: {\r\n id: 'U1D6DE',\r\n decimal: 120542,\r\n character: '훞',\r\n latex: '$\\\\mathbf{\\\\varkappa}$',\r\n },\r\n 120543: {\r\n id: 'U1D6DF',\r\n decimal: 120543,\r\n character: '훟',\r\n latex: '$\\\\mathbf{\\\\phi}$',\r\n },\r\n 120544: {\r\n id: 'U1D6E0',\r\n decimal: 120544,\r\n character: '훠',\r\n latex: '$\\\\mathbf{\\\\varrho}$',\r\n },\r\n 120545: {\r\n id: 'U1D6E1',\r\n decimal: 120545,\r\n character: '훡',\r\n latex: '$\\\\mathbf{\\\\varpi}$',\r\n },\r\n 120558: {\r\n id: 'U1D6EE',\r\n decimal: 120558,\r\n character: '훮',\r\n latex: 'N',\r\n },\r\n 120560: {\r\n id: 'U1D6F0',\r\n decimal: 120560,\r\n character: '훰',\r\n latex: 'O',\r\n },\r\n 120618: {\r\n id: 'U1D72A',\r\n decimal: 120618,\r\n character: '휪',\r\n latex: 'O',\r\n },\r\n 120676: {\r\n id: 'U1D764',\r\n decimal: 120676,\r\n character: '흤',\r\n latex: 'O',\r\n },\r\n 120734: {\r\n id: 'U1D79E',\r\n decimal: 120734,\r\n character: '힞',\r\n latex: 'O',\r\n },\r\n 120782: {\r\n id: 'U1D7CE',\r\n decimal: 120782,\r\n character: 'ퟎ',\r\n latex: '$\\\\mathbf{0}$',\r\n },\r\n 120783: {\r\n id: 'U1D7CF',\r\n decimal: 120783,\r\n character: 'ퟏ',\r\n latex: '$\\\\mathbf{1}$',\r\n },\r\n 120784: {\r\n id: 'U1D7D0',\r\n decimal: 120784,\r\n character: 'ퟐ',\r\n latex: '$\\\\mathbf{2}$',\r\n },\r\n 120785: {\r\n id: 'U1D7D1',\r\n decimal: 120785,\r\n character: 'ퟑ',\r\n latex: '$\\\\mathbf{3}$',\r\n },\r\n 120786: {\r\n id: 'U1D7D2',\r\n decimal: 120786,\r\n character: 'ퟒ',\r\n latex: '$\\\\mathbf{4}$',\r\n },\r\n 120787: {\r\n id: 'U1D7D3',\r\n decimal: 120787,\r\n character: 'ퟓ',\r\n latex: '$\\\\mathbf{5}$',\r\n },\r\n 120788: {\r\n id: 'U1D7D4',\r\n decimal: 120788,\r\n character: 'ퟔ',\r\n latex: '$\\\\mathbf{6}$',\r\n },\r\n 120789: {\r\n id: 'U1D7D5',\r\n decimal: 120789,\r\n character: 'ퟕ',\r\n latex: '$\\\\mathbf{7}$',\r\n },\r\n 120790: {\r\n id: 'U1D7D6',\r\n decimal: 120790,\r\n character: 'ퟖ',\r\n latex: '$\\\\mathbf{8}$',\r\n },\r\n 120791: {\r\n id: 'U1D7D7',\r\n decimal: 120791,\r\n character: 'ퟗ',\r\n latex: '$\\\\mathbf{9}$',\r\n },\r\n 120792: {\r\n id: 'U1D7D8',\r\n decimal: 120792,\r\n character: 'ퟘ',\r\n latex: '$\\\\mathbb{0}$',\r\n },\r\n 120793: {\r\n id: 'U1D7D9',\r\n decimal: 120793,\r\n character: 'ퟙ',\r\n latex: '$\\\\mathbb{1}$',\r\n },\r\n 120794: {\r\n id: 'U1D7DA',\r\n decimal: 120794,\r\n character: 'ퟚ',\r\n latex: '$\\\\mathbb{2}$',\r\n },\r\n 120795: {\r\n id: 'U1D7DB',\r\n decimal: 120795,\r\n character: 'ퟛ',\r\n latex: '$\\\\mathbb{3}$',\r\n },\r\n 120796: {\r\n id: 'U1D7DC',\r\n decimal: 120796,\r\n character: 'ퟜ',\r\n latex: '$\\\\mathbb{4}$',\r\n },\r\n 120797: {\r\n id: 'U1D7DD',\r\n decimal: 120797,\r\n character: 'ퟝ',\r\n latex: '$\\\\mathbb{5}$',\r\n },\r\n 120798: {\r\n id: 'U1D7DE',\r\n decimal: 120798,\r\n character: 'ퟞ',\r\n latex: '$\\\\mathbb{6}$',\r\n },\r\n 120799: {\r\n id: 'U1D7DF',\r\n decimal: 120799,\r\n character: 'ퟟ',\r\n latex: '$\\\\mathbb{7}$',\r\n },\r\n 120800: {\r\n id: 'U1D7E0',\r\n decimal: 120800,\r\n character: 'ퟠ',\r\n latex: '$\\\\mathbb{8}$',\r\n },\r\n 120801: {\r\n id: 'U1D7E1',\r\n decimal: 120801,\r\n character: 'ퟡ',\r\n latex: '$\\\\mathbb{9}$',\r\n },\r\n 120802: {\r\n id: 'U1D7E2',\r\n decimal: 120802,\r\n character: 'ퟢ',\r\n latex: '$\\\\mathsf{0}$',\r\n },\r\n 120803: {\r\n id: 'U1D7E3',\r\n decimal: 120803,\r\n character: 'ퟣ',\r\n latex: '$\\\\mathsf{1}$',\r\n },\r\n 120804: {\r\n id: 'U1D7E4',\r\n decimal: 120804,\r\n character: 'ퟤ',\r\n latex: '$\\\\mathsf{2}$',\r\n },\r\n 120805: {\r\n id: 'U1D7E5',\r\n decimal: 120805,\r\n character: 'ퟥ',\r\n latex: '$\\\\mathsf{3}$',\r\n },\r\n 120806: {\r\n id: 'U1D7E6',\r\n decimal: 120806,\r\n character: 'ퟦ',\r\n latex: '$\\\\mathsf{4}$',\r\n },\r\n 120807: {\r\n id: 'U1D7E7',\r\n decimal: 120807,\r\n character: 'ퟧ',\r\n latex: '$\\\\mathsf{5}$',\r\n },\r\n 120808: {\r\n id: 'U1D7E8',\r\n decimal: 120808,\r\n character: 'ퟨ',\r\n latex: '$\\\\mathsf{6}$',\r\n },\r\n 120809: {\r\n id: 'U1D7E9',\r\n decimal: 120809,\r\n character: 'ퟩ',\r\n latex: '$\\\\mathsf{7}$',\r\n },\r\n 120810: {\r\n id: 'U1D7EA',\r\n decimal: 120810,\r\n character: 'ퟪ',\r\n latex: '$\\\\mathsf{8}$',\r\n },\r\n 120811: {\r\n id: 'U1D7EB',\r\n decimal: 120811,\r\n character: 'ퟫ',\r\n latex: '$\\\\mathsf{9}$',\r\n },\r\n 120822: {\r\n id: 'U1D7F6',\r\n decimal: 120822,\r\n character: 'ퟶ',\r\n latex: '$\\\\mathtt{0}$',\r\n },\r\n 120823: {\r\n id: 'U1D7F7',\r\n decimal: 120823,\r\n character: 'ퟷ',\r\n latex: '$\\\\mathtt{1}$',\r\n },\r\n 120824: {\r\n id: 'U1D7F8',\r\n decimal: 120824,\r\n character: 'ퟸ',\r\n latex: '$\\\\mathtt{2}$',\r\n },\r\n 120825: {\r\n id: 'U1D7F9',\r\n decimal: 120825,\r\n character: 'ퟹ',\r\n latex: '$\\\\mathtt{3}$',\r\n },\r\n 120826: {\r\n id: 'U1D7FA',\r\n decimal: 120826,\r\n character: 'ퟺ',\r\n latex: '$\\\\mathtt{4}$',\r\n },\r\n 120827: {\r\n id: 'U1D7FB',\r\n decimal: 120827,\r\n character: 'ퟻ',\r\n latex: '$\\\\mathtt{5}$',\r\n },\r\n 120828: {\r\n id: 'U1D7FC',\r\n decimal: 120828,\r\n character: '',\r\n latex: '$\\\\mathtt{6}$',\r\n },\r\n 120829: {\r\n id: 'U1D7FD',\r\n decimal: 120829,\r\n character: '',\r\n latex: '$\\\\mathtt{7}$',\r\n },\r\n 120830: {\r\n id: 'U1D7FE',\r\n decimal: 120830,\r\n character: '',\r\n latex: '$\\\\mathtt{8}$',\r\n },\r\n 120831: {\r\n id: 'U1D7FF',\r\n decimal: 120831,\r\n character: '',\r\n latex: '$\\\\mathtt{9}$',\r\n },\r\n};\r\n\r\nexport default characters;\r\n","/*\r\n * bibtex.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { NodeArray, RangeArray, NameDictObject, TextNodeObject, NodeObject, MarkObject } from 'biblatex-csl-converter';\r\nimport { FieldMap } from './fields';\r\nimport { typeMapping } from './types';\r\nimport { FormattingTags } from './formatting';\r\nimport characters from './characters';\r\nimport { BibDB, EntryObject } from '../bibliography/bibDB';\r\n\r\nexport interface Config {\r\n traditionalNames?: boolean;\r\n exportUnexpectedFields?: boolean;\r\n}\r\n\r\nexport interface Entry {\r\n type: string;\r\n key: string;\r\n values?: { [key: string]: string };\r\n}\r\n\r\nexport function bibDbToBibTeX(bibDB: BibDB) {\r\n // Keys of items to export\r\n const keysToExport = Object.keys(bibDB);\r\n\r\n // The final entries\r\n const bibtexEntries: Entry[] = [];\r\n\r\n // Go through each item and compose the entry and\r\n // append all the fields with BibTeX specific formatting\r\n keysToExport?.forEach(key => {\r\n const entryObject: EntryObject = bibDB[key];\r\n\r\n const cslType = entryObject.csl_type;\r\n const bibTexType = cslType ? typeMapping(cslType).bibtex : entryObject.bib_type;\r\n\r\n const bibtexEntry: Entry = {\r\n type: bibTexType,\r\n key: entryObject.entry_key,\r\n };\r\n\r\n // The formatted output fields for this entry\r\n const outputFields: { [key: string]: string } = {};\r\n\r\n // All the fields for this entry\r\n const fieldsForExport: Record<string, unknown> = entryObject.fields;\r\n Object.keys(fieldsForExport).forEach(fieldKey => {\r\n // Lookup the field information in the mapping\r\n // (maps CSL fields names to their peer BibTeX types)\r\n const fieldType = FieldMap[fieldKey];\r\n\r\n // This is a well understood field type\r\n if (fieldType) {\r\n const type = fieldType.type;\r\n\r\n // Read the type (either as raw value or passing the type to look it up)\r\n const typeReader = fieldType.bibtex;\r\n const bibtexKey = typeof typeReader === 'string' ? typeReader : typeReader(bibTexType);\r\n const bibtexValue = fieldsForExport[fieldKey];\r\n\r\n switch (type) {\r\n case 'f_date': {\r\n // Output the raw date value\r\n outputFields[bibtexKey] = String(bibtexValue);\r\n\r\n // Also output the year and month, if possible\r\n // The value being parsed is a EDTF 1.0 level 0/1 compliant string. (2000-12-31)\r\n const parts: string[] = String(bibtexValue).split('-');\r\n if (parts.length > 0) {\r\n outputFields.year = parts[0];\r\n if (parts.length > 1) {\r\n outputFields.month = parts[1];\r\n }\r\n }\r\n }\r\n break;\r\n case 'f_integer':\r\n outputFields[bibtexKey] = formatText(bibtexValue as NodeArray);\r\n break;\r\n case 'f_key':\r\n outputFields[bibtexKey] = formatKey(bibtexValue as string | NodeArray, bibtexKey);\r\n break;\r\n case 'f_literal':\r\n case 'f_long_literal':\r\n outputFields[bibtexKey] = formatText(bibtexValue as NodeArray);\r\n break;\r\n case 'l_range':\r\n outputFields[bibtexKey] = formatRange(bibtexValue as RangeArray[]);\r\n break;\r\n case 'f_title':\r\n outputFields[bibtexKey] = formatText(bibtexValue as NodeArray);\r\n break;\r\n case 'f_uri':\r\n case 'f_verbatim':\r\n // Strip any braces from verbatims\r\n outputFields[bibtexKey] = (bibtexValue as string).replace(/{|}/g, '');\r\n break;\r\n case 'l_key':\r\n outputFields[bibtexKey] = escapeNonAscii(\r\n (bibtexValue as string[]).map((k: string) => formatKey(k, bibtexKey)).join(' and '),\r\n );\r\n break;\r\n case 'l_literal':\r\n outputFields[bibtexKey] = (bibtexValue as NodeArray[]).map((text: NodeArray) => formatText(text)).join(' and ');\r\n break;\r\n case 'l_name':\r\n outputFields[bibtexKey] = formatNames(bibtexValue as NameDictObject[]);\r\n break;\r\n case 'l_tag':\r\n outputFields[bibtexKey] = escapeNonAscii((bibtexValue as string[]).join(', '));\r\n break;\r\n default:\r\n // This is a field type that we don't understand, skip it\r\n break;\r\n }\r\n }\r\n });\r\n\r\n bibtexEntry.values = outputFields;\r\n bibtexEntries.push(bibtexEntry);\r\n });\r\n return toBibtex(bibtexEntries);\r\n}\r\n\r\n// Writes BibTex\r\nconst toBibtex = (entries: Entry[]): string => {\r\n const length = entries.length;\r\n let bibTexStr = '';\r\n for (let i = 0; i < length; i++) {\r\n // The entry we're writing\r\n const entry = entries[i];\r\n\r\n // Write the key and open the entry\r\n bibTexStr = bibTexStr + `@${entry.type}{${entry.key}`;\r\n\r\n // The fields for this item\r\n if (entry.values && Object.keys(entry.values).length > 0) {\r\n sortedKeys(entry.values).forEach(key => {\r\n if (entry.values) {\r\n const rawValue = entry.values[key];\r\n const value = `{${rawValue}}`;\r\n\r\n // Strip empty braces\r\n // TODO: If we support variables, we may need to clean this\r\n // const cleanedValue = value.replace(/\\{\\} # /g, '').replace(/# \\{\\}/g, '');\r\n bibTexStr = bibTexStr + `,\\n\\t${key} = ${value}`;\r\n }\r\n });\r\n } else {\r\n // There are no values, we need to minimally place a ',' at the end of the id\r\n // If we omit this, pandoc cannot parse the bibliography\r\n bibTexStr = bibTexStr + \",\";\r\n }\r\n\r\n // Close the entry\r\n bibTexStr = bibTexStr + '\\n}';\r\n }\r\n return bibTexStr;\r\n};\r\n\r\nconst sortedKeys = (fields: { [key: string]: string }) => {\r\n let pos = 1;\r\n const keySortOrder: { [id: string]: number } = {};\r\n keySortOrder.title = pos++;\r\n keySortOrder.author = pos++;\r\n keySortOrder.editor = pos++;\r\n keySortOrder.year = pos++;\r\n keySortOrder.month = pos++;\r\n keySortOrder.date = pos++;\r\n keySortOrder.journal = pos++;\r\n keySortOrder.booktitle = pos++;\r\n keySortOrder.publisher = pos++;\r\n keySortOrder.howpublished = pos++;\r\n keySortOrder.pages = pos++;\r\n keySortOrder.series = pos++;\r\n keySortOrder.volume = pos++;\r\n keySortOrder.chapter = pos++;\r\n keySortOrder.number = pos++;\r\n keySortOrder.edition = pos++;\r\n keySortOrder.issue = pos++;\r\n keySortOrder.doi = pos++;\r\n keySortOrder.url = pos++;\r\n keySortOrder.abstract = pos++;\r\n keySortOrder.note = pos++;\r\n\r\n const keys = Object.keys(fields);\r\n const sorted = keys.sort((a, b) => {\r\n const aOrder = keySortOrder[a.toLowerCase()];\r\n const bOrder = keySortOrder[b.toLowerCase()];\r\n if (aOrder && bOrder) {\r\n return aOrder - bOrder;\r\n } else if (aOrder !== undefined) {\r\n return -1;\r\n } else if (bOrder !== undefined) {\r\n return 1;\r\n }\r\n return a.localeCompare(b);\r\n });\r\n return sorted;\r\n};\r\n\r\n// Converts any non asciii characters to their LaTeX representations\r\nconst escapeNonAscii = (value: string): string => {\r\n let result = '';\r\n\r\n // Split the string in a way that will maintain unicode characters\r\n const chars = Array.from(value);\r\n chars.forEach(c => {\r\n const char = c.codePointAt(0);\r\n // Look for a LaTeX replace in the character mapping\r\n if (char) {\r\n const characterMap = characters[char];\r\n if (characterMap) {\r\n // Found one, emit the LaTeX\r\n // Use the braces to group the expression, unless the character replacement explicitly\r\n // doesn't want to be grouped\r\n result = result + (characterMap.ungrouped ? characterMap.latex : `{${characterMap.latex}}`);\r\n } else {\r\n // No LaTeX replacement, just emit the character\r\n result = result + String.fromCodePoint(char);\r\n }\r\n } else {\r\n // A position which has no codepoint. what on earth is this?\r\n result = result + '?';\r\n }\r\n });\r\n return result;\r\n};\r\n\r\n// Formats keys\r\nconst formatKey = (value: string | NodeArray, fieldKey: string) => {\r\n if (typeof value === 'string') {\r\n const fieldType = FieldMap[fieldKey];\r\n // If the field is an array, we can just emit the value\r\n // Otherwise, we should treat options as a keyed object and lookup\r\n // the bibtex value for this value\r\n if (Array.isArray(fieldType.options)) {\r\n return escapeNonAscii(value);\r\n } else if (fieldType.options) {\r\n return escapeNonAscii(fieldType.options[value].bibtex);\r\n } else {\r\n return escapeNonAscii(value);\r\n }\r\n } else {\r\n return formatText(value);\r\n }\r\n};\r\n\r\n// Formats text\r\nconst formatText = (nodes: NodeArray): string => {\r\n let formattedText = '';\r\n let lastNodeMarks: string[] = [];\r\n\r\n // This empty node at the end will cause us to go through the loop\r\n // after the last 'real' node and close out any open marks.\r\n const textNodes = nodes.concat({ type: 'text', text: '' });\r\n\r\n textNodes.forEach((node: NodeObject) => {\r\n /*\r\n // TODO: Do we need to deal with this (and if so, we need to re-add that escape routine)\r\n if (node.type === 'variable') {\r\n // This is an undefined variable\r\n // This should usually not happen, as CSL doesn't know what to\r\n // do with these. We'll put them into an unsupported tag.\r\n latex += `} # ${node.attrs.variable} # {`\r\n this.warnings.push({\r\n type: 'undefined_variable',\r\n variable: node.attrs.variable\r\n })\r\n return\r\n }\r\n */\r\n\r\n const thisNodeMarks: string[] = [];\r\n if (node.marks) {\r\n // Figure out the new marks for this node\r\n // TODO: Do we need to re-enable math mode for these low level sup/sub nodes?\r\n // let mathEnabled = false;\r\n node.marks.forEach((mark: MarkObject) => {\r\n // We need to activate mathmode for the lowest level sub/sup node.\r\n // Don't activate math mode for the lowest level node\r\n /*\r\n if ((mark.type === 'sup' || mark.type === 'sub') && !mathEnabled) {\r\n thisNodeMarks.push('math');\r\n thisNodeMarks.push(mark.type);\r\n mathEnabled = true;\r\n } else \r\n */\r\n\r\n if (mark.type === 'nocase') {\r\n // No case should be the outer mark\r\n thisNodeMarks.unshift(mark.type);\r\n } else {\r\n // regular old mark\r\n thisNodeMarks.push(mark.type);\r\n }\r\n });\r\n }\r\n\r\n // Close any marks that aren't still open in this node\r\n let closing = false;\r\n const closeTags: string[] = [];\r\n lastNodeMarks.forEach((mark, index) => {\r\n if (mark !== thisNodeMarks[index]) {\r\n closing = true;\r\n }\r\n if (closing) {\r\n const closeTag =\r\n lastNodeMarks[0] !== 'nocase' && FormattingTags[mark].open[0] === '\\\\'\r\n ? `${FormattingTags[mark].close}}`\r\n : FormattingTags[mark].close;\r\n closeTags.push(closeTag);\r\n }\r\n });\r\n\r\n // Emit the close tags for the previous (last to first)\r\n closeTags.reverse();\r\n formattedText = formattedText + closeTags.join('');\r\n\r\n // Emit the open tags\r\n let opening = false;\r\n let doNotEscape = false;\r\n thisNodeMarks.forEach((mark, index) => {\r\n if (mark !== lastNodeMarks[index]) {\r\n opening = true;\r\n }\r\n if (opening) {\r\n // If not in a nocase, we can add protective brace\r\n if (thisNodeMarks[0] !== 'nocase' && FormattingTags[mark].open[0] === '\\\\') {\r\n formattedText = formattedText + '{';\r\n }\r\n formattedText = formattedText + FormattingTags[mark].open;\r\n if (FormattingTags[mark].verbatim) {\r\n doNotEscape = true;\r\n }\r\n }\r\n });\r\n\r\n const textNode = node as TextNodeObject;\r\n if (doNotEscape) {\r\n formattedText = formattedText + textNode.text;\r\n } else {\r\n formattedText = formattedText + escapeNonAscii(textNode.text);\r\n }\r\n lastNodeMarks = thisNodeMarks;\r\n });\r\n return formattedText;\r\n};\r\n\r\n// Formats ranges\r\nconst formatRange = (value: RangeArray[]): string => {\r\n // The correct symbol for a range of numbers is an en-dash, which in LaTeX is usually input as --.\r\n return value.map(range => range.map((text: NodeArray) => formatText(text)).join('--')).join(',');\r\n};\r\n\r\n// Formats author values\r\nconst formatNames = (names: NameDictObject[]): string => {\r\n const formattedNames: string[] = [];\r\n names.forEach(name => {\r\n if (name.literal) {\r\n // Use the literal\r\n const literal = formatText(name.literal);\r\n if (literal.length) {\r\n formattedNames.push(`{${literal}}`);\r\n }\r\n } else {\r\n // Compose the name\r\n // http://www.texfaq.org/FAQ-manyauthor\r\n const family = name.family ? formatText(name.family) : '';\r\n const given = name.given ? formatText(name.given) : '';\r\n const suffix = name.suffix ? formatText(name.suffix) : false;\r\n const prefix = name.prefix ? formatText(name.prefix) : false;\r\n\r\n if (suffix && prefix) {\r\n formattedNames.push(`${protect(`${prefix} ${family}`)}, ${protect(suffix)}, ${protect(given)}`);\r\n } else if (suffix) {\r\n formattedNames.push(`${protect(family)}, ${protect(suffix)}, ${protect(given)}`);\r\n } else if (prefix) {\r\n formattedNames.push(`${protect(`${prefix} ${family}`)}, ${protect(given)}`);\r\n } else {\r\n formattedNames.push(`${protect(family)}, ${protect(given)}`);\r\n }\r\n }\r\n });\r\n return formattedNames.join(' and ');\r\n};\r\n\r\nconst kBibtexSafeRegex = /^[a-zA-Z0-9 .-]*$/;\r\nfunction protect(str: string) {\r\n if (str.match(kBibtexSafeRegex)) {\r\n return str;\r\n } else {\r\n return `{${str}}`;\r\n }\r\n}","/*\r\n * BibDB.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport {\r\n BibFieldTypes,\r\n NodeArray,\r\n NameDictObject,\r\n RangeArray,\r\n BibField,\r\n BibLatexExporter,\r\n BibTypes,\r\n BibType,\r\n} from 'biblatex-csl-converter';\r\n\r\nimport { Mark, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { CSL, CSLDate, cslDateToEDTFDate, CSLName } from '../csl';\r\nimport { cslTextToProsemirrorNode } from '../csl-text';\r\nimport { bibDbToBibTeX } from '../bibtex/bibtex';\r\n\r\nexport type BibDB = Record<string, EntryObject>;\r\n\r\nexport interface EntryObject {\r\n csl_type?: string;\r\n bib_type: string;\r\n entry_key: string;\r\n fields: Record<string, unknown>;\r\n incomplete?: boolean;\r\n unexpected_fields?: Record<string, unknown>;\r\n unknown_fields?: Record<string, unknown>;\r\n}\r\n\r\n// This is our wrapper of a typescript BibLaTeX exporter\r\n// https://github.com/fiduswriter/biblatex-csl-converter\r\n\r\n// Traditional Form Looks Like:\r\n// author = {{Abbas}, {Osma Ahmed} and {Ibrahim}, {Issa Ghada} and {Ismail}, {Abdel-Gawad Eman}}\r\n//\r\n// Non traditional form looks like:\r\n// author = {given={Osma Ahmed}, family={Abbas} and given={Issa Ghada}, family={Ibrahim} and given={Abdel-Gawad Eman}, family={Ismail}}\r\nconst kUseTraditionalNameForm = false;\r\n\r\n// Generates bibLaTeX for a given CSL object / id\r\nexport function toBibLaTeX(id: string, csl: CSL): string | undefined {\r\n // A BibDB is basically a map of key / EntryObject[] that is\r\n // used by the exporter to generate BibLaTeX\r\n const bibDB = cslToBibDB(id, csl);\r\n if (bibDB) {\r\n // Use the exported to parse the bibDB and generate bibLaTeX\r\n const exporter: BibLatexExporter = new BibLatexExporter(bibDB, false, {\r\n traditionalNames: kUseTraditionalNameForm,\r\n });\r\n const sourceAsBibLaTeX = exporter.parse();\r\n\r\n // Indent any , new lines\r\n return sourceAsBibLaTeX.replace(/,\\n/g, ',\\n\\t');\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function toBibTeX(id: string, csl: CSL): string | undefined {\r\n // A BibDB is basically a map of key / EntryObject[] that is\r\n // used by the exporter to generate BibLaTeX\r\n const bibDB = cslToBibDB(id, csl);\r\n if (bibDB) {\r\n // Use the exported to parse the bibDB and generate bibLaTeX\r\n const sourceAsBibTeX = bibDbToBibTeX(bibDB);\r\n\r\n // Indent any , new lines\r\n return sourceAsBibTeX;\r\n }\r\n return undefined;\r\n}\r\n\r\n// Converts a single CSL item to a bibDB containing\r\n// a single EntryObject representing that CSL item\r\nfunction cslToBibDB(id: string, csl: CSL): BibDB | undefined {\r\n const bibType = bibTypeForCSL(csl.type);\r\n const bibObject: EntryObject = {\r\n bib_type: bibType[0],\r\n csl_type: bibType[1].csl,\r\n entry_key: id,\r\n fields: {},\r\n };\r\n\r\n const enumerableCSL = csl as Record<string,string | unknown>;\r\n sortedKeys(csl).forEach(key => {\r\n const value: unknown = enumerableCSL[key];\r\n\r\n const bibFieldDatas = bibFieldForValue(key, csl.type);\r\n\r\n bibFieldDatas?.forEach(bibFieldData => {\r\n if (bibFieldData) {\r\n const bibFieldKey = bibFieldData[0];\r\n const bibField = bibFieldData[1];\r\n const type = bibField.type;\r\n let nodeValue: unknown;\r\n switch (type) {\r\n case 'f_date': {\r\n // f_date = // EDTF 1.0 level 0/1 compliant string. (2000-12-31)\r\n const cslDate = value as CSLDate;\r\n if (cslDate) {\r\n const edtfDate = cslDateToEDTFDate(cslDate);\r\n if (edtfDate) {\r\n nodeValue = edtfDate;\r\n }\r\n }\r\n break;\r\n }\r\n case 'f_integer':\r\n case 'f_literal':\r\n case 'f_long_literal':\r\n case 'f_title':\r\n // f_integer, f_literal, f_long_literal, f_title = [nodeValue]\r\n // l_literal = [nodeValue]\r\n if (typeof(value) === \"string\" && value.length > 0) {\r\n nodeValue = textNodes(value);\r\n }\r\n break;\r\n case 'l_literal':\r\n // l_literal = [NodeArray]\r\n if (typeof(value) === \"string\" && value.length > 0) {\r\n nodeValue = [textNodes(value)];\r\n }\r\n break;\r\n case 'f_key':\r\n // f_key: string | NodeArray (string points to another key\r\n // name in BibObject whose value is used for this key)\r\n if (bibField.options) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const options = bibField.options as any;\r\n Object.keys(options).find(optionKey => {\r\n const optionValue = options[optionKey] as Record<string,unknown>;\r\n if (optionValue.csl === value) {\r\n nodeValue = optionKey;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n if (!nodeValue) {\r\n nodeValue = textNodes(String(value));\r\n }\r\n }\r\n\r\n break;\r\n case 'l_key':\r\n // l_key, list of [string | NodeArray]\r\n if (bibField.options) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const options = bibField.options as any;\r\n Object.keys(options).find(optionKey => {\r\n const optionValue = options[optionKey];\r\n if (optionValue.csl === value) {\r\n nodeValue = [optionKey];\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n if (!nodeValue && typeof(value) === \"string\" && value.length > 0) {\r\n nodeValue = textNodes(value);\r\n }\r\n }\r\n break;\r\n case 'l_range': {\r\n // l_range Array<RangeArray>\r\n const valueStr = value as string;\r\n const parts = valueStr.split('-');\r\n const range = rangeArray(parts);\r\n if (range) {\r\n nodeValue = [range];\r\n }\r\n break;\r\n }\r\n case 'f_uri':\r\n case 'f_verbatim':\r\n // f_uri, f_verbatim: string\r\n nodeValue = value;\r\n break;\r\n case 'l_name': {\r\n // l_name Array<NameDictObject>\r\n const names = value as CSLName[];\r\n nodeValue = names.map(name => {\r\n const nameDict: NameDictObject = {\r\n family: name.family ? textNodes(name.family) : undefined,\r\n given: name.given ? textNodes(name.given) : undefined,\r\n literal: name.literal ? textNodes(name.literal) : undefined,\r\n };\r\n return nameDict;\r\n });\r\n\r\n break;\r\n }\r\n case 'l_tag':\r\n // l_tag: string[]\r\n nodeValue = [value];\r\n break;\r\n }\r\n\r\n if (nodeValue) {\r\n if (shouldIncludeField(bibFieldKey, bibType[1])) {\r\n bibObject.fields[bibFieldKey] = nodeValue;\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n const bibDB: BibDB = {\r\n item: bibObject,\r\n };\r\n return bibDB;\r\n}\r\n\r\n// For a given type, we filter out any fields that aren't required,\r\n// eitheror, or optional.\r\nfunction shouldIncludeField(bibDBFieldName: string, bibType: BibType) {\r\n // Special case:\r\n // For datasets, allow author \r\n // Fixes https://github.com/rstudio/rstudio/issues/9059\r\n if (bibType.csl === 'dataset' && bibDBFieldName === 'author') {\r\n return true;\r\n }\r\n\r\n return (\r\n bibType.required.includes(bibDBFieldName) ||\r\n bibType.optional.includes(bibDBFieldName) ||\r\n bibType.eitheror.includes(bibDBFieldName)\r\n );\r\n}\r\n\r\n// Returns text nodes for a given CSL string. This implements\r\n// support for the basic CSL marks that are outlined here:\r\n// https://citeproc-js.readthedocs.io/en/latest/csl-json/markup.html#html-like-formatting-tags\r\nfunction textNodes(str: string): NodeArray {\r\n const pmNode = cslTextToProsemirrorNode(str);\r\n if (pmNode) {\r\n const nodes: NodeArray = [];\r\n pmNode.forEach((node: ProsemirrorNode) => {\r\n nodes.push({\r\n type: 'text',\r\n text: node.textContent,\r\n marks: node.marks.map((mark: Mark) => ({ type: mark.type.name })),\r\n });\r\n });\r\n return nodes;\r\n } else {\r\n return [\r\n {\r\n type: 'text',\r\n text: str,\r\n marks: [],\r\n attrs: {},\r\n },\r\n ];\r\n }\r\n}\r\n\r\n// Useful for things like page ranges\r\nfunction rangeArray(parts: string[]): RangeArray | undefined {\r\n if (parts.length === 1) {\r\n return [textNodes(parts[0])];\r\n } else if (parts.length === 2) {\r\n return [textNodes(parts[0]), textNodes(parts[1])];\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n// Returns the bibDB type for a given CSL type.\r\nfunction bibTypeForCSL(cslType: string): [string, BibType] {\r\n const key = Object.keys(BibTypes).find(bibTypeKey => {\r\n const bibType = BibTypes[bibTypeKey];\r\n return bibType.csl === cslType;\r\n });\r\n\r\n if (key) {\r\n const bibType = BibTypes[key];\r\n return [key, bibType];\r\n } else {\r\n const bibType = BibTypes.misc;\r\n return ['misc', bibType];\r\n }\r\n}\r\n\r\nfunction bibFieldForValue(cslKey: string, cslType: string): Array<[string, BibField]> | undefined {\r\n // Special case the following fields:\r\n // article-journal issue\r\n // patent number\r\n // * collection-number\r\n // See https://discourse.citationstyles.org/t/issue-number-and-bibtex/1072\r\n // https://github.com/fiduswriter/biblatex-csl-converter/blob/35d152935eba253ebadd00e285fb13c5828f167f/src/const.js#L561\r\n if (\r\n (cslType === 'article-journal' && cslKey === 'issue') ||\r\n (cslType === 'patent' && cslKey === 'number') ||\r\n cslKey === 'collection-number'\r\n ) {\r\n const bibField = {\r\n type: 'f_literal',\r\n biblatex: 'number',\r\n csl: cslKey,\r\n };\r\n return [['number', bibField]];\r\n }\r\n\r\n // Find the key that corresponds to this CSL key\r\n const keys = Object.keys(BibFieldTypes).filter(bibFieldKey => {\r\n const bibField = BibFieldTypes[bibFieldKey];\r\n const cslFieldName = bibField.csl;\r\n return cslFieldName && cslFieldName === cslKey;\r\n });\r\n\r\n // Get the field and return\r\n if (keys) {\r\n return keys.map(key => {\r\n const bibField = BibFieldTypes[key];\r\n return [key, bibField];\r\n });\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction sortedKeys(csl: CSL) {\r\n let pos = 1;\r\n const keySortOrder: { [id: string]: number } = {};\r\n keySortOrder.title = pos++;\r\n\r\n keySortOrder.author = pos++;\r\n keySortOrder.editor = pos++;\r\n keySortOrder.director = pos++;\r\n keySortOrder.illustrator = pos++;\r\n keySortOrder['collection-editor'] = pos++;\r\n keySortOrder.translator = pos++;\r\n\r\n keySortOrder.doi = pos++;\r\n\r\n keySortOrder.issued = pos++;\r\n keySortOrder['event-date'] = pos++;\r\n\r\n keySortOrder['container-title'] = pos++;\r\n keySortOrder['collection-title'] = pos++;\r\n\r\n keySortOrder.url = pos++;\r\n\r\n keySortOrder.page = pos++;\r\n keySortOrder.publisher = pos++;\r\n\r\n const enumerableCSL = csl as Record<string,unknown>;\r\n const keys = Object.keys(enumerableCSL);\r\n const sorted = keys.sort((a, b) => {\r\n const aOrder = keySortOrder[a.toLowerCase()];\r\n const bOrder = keySortOrder[b.toLowerCase()];\r\n if (aOrder && bOrder) {\r\n return aOrder - bOrder;\r\n } else if (aOrder !== undefined) {\r\n return -1;\r\n } else if (bOrder !== undefined) {\r\n return 1;\r\n }\r\n return a.localeCompare(b);\r\n });\r\n return sorted;\r\n}\r\n","/*\r\n * bibliography-provider_local.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { Transaction } from 'prosemirror-state';\r\n\r\nimport { PandocServer } from '../pandoc';\r\n\r\nimport { getExtension, joinPaths, isAbsolute } from '../path';\r\nimport { EditorUI } from '../ui-types';\r\n\r\nimport {\r\n BibliographyDataProvider,\r\n BibliographyFile,\r\n BibliographyCollection,\r\n BibliographySourceWithCollections,\r\n} from './bibliography';\r\nimport { ParsedYaml, parseYamlNodes, valueFromYamlText } from '../yaml';\r\nimport { toBibTeX } from './bibDB';\r\nimport { CSL } from '../csl';\r\nimport { Bibliography } from 'editor-types';\r\n\r\n\r\nexport const kLocalBibliographyProviderKey = 'E06068FE-45DA-4D88-ABDA-0DF290624950';\r\n\r\nexport class BibliographyDataProviderLocal implements BibliographyDataProvider {\r\n private etag: string;\r\n private bibliography?: Bibliography;\r\n private readonly server: PandocServer;\r\n\r\n public constructor(server: PandocServer) {\r\n this.server = server;\r\n this.etag = '';\r\n }\r\n public name = 'Bibliography';\r\n public key: string = kLocalBibliographyProviderKey;\r\n public requiresWritable = false;\r\n\r\n // Always enabled;\r\n public isEnabled(): boolean {\r\n return true;\r\n }\r\n\r\n public prime(): Promise<void> {\r\n return Promise.resolve();\r\n }\r\n\r\n public async load(ui: EditorUI, docPath: string | null, resourcePath: string, yamlBlocks: ParsedYaml[]): Promise<boolean> {\r\n // Gather the biblography files from the document\r\n const bibliographiesRelative = bibliographyFilesFromDoc(yamlBlocks);\r\n const bibliographiesAbsolute = bibliographiesRelative?.map(path => {\r\n if (isAbsolute(path, ui.context.isWindowsDesktop())) {\r\n return path;\r\n } else {\r\n return joinPaths(resourcePath, path);\r\n }\r\n }) || [];\r\n\r\n // Gather the reference block\r\n const refBlock = referenceBlockFromYaml(yamlBlocks);\r\n\r\n let updateIndex = false;\r\n if (docPath || bibliographiesAbsolute.length > 0 || refBlock) {\r\n // get the bibliography\r\n try {\r\n const result = await this.server.getBibliography(docPath, bibliographiesAbsolute, refBlock, this.etag);\r\n\r\n // Read bibliography data from files (via server)\r\n if (!this.bibliography || result.etag !== this.etag) {\r\n this.bibliography = result.bibliography;\r\n updateIndex = true;\r\n }\r\n\r\n // record the etag for future queries\r\n this.etag = result.etag;\r\n } catch (e) {\r\n // ignore error\r\n }\r\n }\r\n return updateIndex;\r\n }\r\n\r\n public collections(): BibliographyCollection[] {\r\n return [];\r\n\r\n // NOTE: If we can make the 'itemsForCollections' call work, we can begin emitting the various\r\n // bibliography files here. Right now, the server generates the CSL for all the bibligraphy runs\r\n // in a single call, meaning that the items lose context of which bibliography file that they\r\n // come from.\r\n /*\r\n if (!this.bibliography || !this.bibliography.sources) {\r\n return [];\r\n }\r\n\r\n if (this.projectBiblios().length > 0) {\r\n return this.projectBiblios().map(biblio => ({ name: biblio, key: biblio }));\r\n }\r\n\r\n const bibliographies = bibliographyFilesFromDocument(doc, ui);\r\n return bibliographies ? bibliographies.map(biblio => ({ name: biblio, key: biblio })) : [];\r\n */\r\n }\r\n\r\n public items(): BibliographySourceWithCollections[] {\r\n if (!this.bibliography || !this.bibliography.sources) {\r\n return [];\r\n }\r\n\r\n return this.bibliography.sources.map(source => ({\r\n ...source,\r\n id: source.id!, // Local CSL always has an id\r\n providerKey: this.key,\r\n collectionKeys: [],\r\n }));\r\n }\r\n\r\n public itemsForCollection(): BibliographySourceWithCollections[] {\r\n // NOTE: IF we add support, need to filter by biblio file\r\n return [];\r\n }\r\n\r\n public projectBiblios(): string[] {\r\n return this.bibliography?.project_biblios || [];\r\n }\r\n\r\n public generateBibTeX(_ui: EditorUI, id: string, csl: CSL): Promise<string | undefined> {\r\n return Promise.resolve(toBibTeX(id, csl));\r\n }\r\n\r\n public warningMessage(): string | undefined {\r\n return undefined;\r\n }\r\n\r\n public bibliographyPaths(doc: ProsemirrorNode, ui: EditorUI): BibliographyFile[] {\r\n const kPermissableFileExtensions = ['bibtex', 'bib', 'yaml', 'yml', 'json'];\r\n if (this.bibliography?.project_biblios && this.bibliography.project_biblios.length > 0) {\r\n return this.bibliography?.project_biblios.map(projectBiblio => {\r\n return {\r\n displayPath: projectBiblio,\r\n fullPath: projectBiblio,\r\n isProject: true,\r\n writable: kPermissableFileExtensions.includes(getExtension(projectBiblio)),\r\n };\r\n });\r\n }\r\n return (\r\n bibliographyFilesFromDocument(doc)?.map(path => {\r\n return {\r\n displayPath: path,\r\n fullPath: isAbsolute(path, ui.context.isWindowsDesktop()) ? path : joinPaths(ui.context.getDefaultResourceDir(), path),\r\n isProject: false,\r\n writable: kPermissableFileExtensions.includes(getExtension(path)),\r\n };\r\n }) || []\r\n );\r\n }\r\n}\r\n\r\nfunction bibliographyFilesFromDocument(doc: ProsemirrorNode): string[] | undefined {\r\n // Gather the files from the document\r\n return bibliographyFilesFromDoc(parseYamlNodes(doc));\r\n}\r\n\r\nfunction bibliographyFilesFromDoc(parsedYamls: ParsedYaml[]): string[] | undefined {\r\n // Read the values of any yaml blocks that include bibliography headers\r\n // filter out blocks that don't include such headers\r\n const bibliographyValues = parsedYamls\r\n .map(parsedYaml => {\r\n return valueFromYamlText('bibliography', parsedYaml.yamlCode);\r\n })\r\n .filter(val => val !== null);\r\n\r\n if (bibliographyValues.length > 0) {\r\n // Pandoc will use the last biblography node when generating a bibliography.\r\n // So replicate this and use the last biblography node that we find\r\n const bibliographyFiles = bibliographyValues[bibliographyValues.length - 1];\r\n if (\r\n Array.isArray(bibliographyFiles) &&\r\n bibliographyFiles.every(bibliographyFile => typeof bibliographyFile === 'string')\r\n ) {\r\n return bibliographyFiles as string[];\r\n } else if (typeof bibliographyFiles === \"string\") {\r\n // A single bibliography\r\n return [bibliographyFiles as string];\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction referenceBlockFromYaml(parsedYamls: ParsedYaml[]): string {\r\n const refBlockParsedYamls = parsedYamls.filter(\r\n parsedYaml => parsedYaml.yaml !== null && typeof parsedYaml.yaml === 'object' && parsedYaml.yaml.references,\r\n );\r\n\r\n // Pandoc will use the last references node when generating a bibliography.\r\n // So replicate this and use the last biblography node that we find\r\n if (refBlockParsedYamls.length > 0) {\r\n const lastReferenceParsedYaml = refBlockParsedYamls[refBlockParsedYamls.length - 1];\r\n if (lastReferenceParsedYaml) {\r\n return `---\\n${lastReferenceParsedYaml.yamlCode}\\n---\\n`;\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nconst kSpaceOrColonRegex = /[\\s:]/;\r\nfunction bibliographyLine(bibliographyFile: string): string {\r\n const sketchyCharMatch = bibliographyFile.match(kSpaceOrColonRegex);\r\n if (sketchyCharMatch) {\r\n return `bibliography: \"${bibliographyFile}\"`;\r\n } else {\r\n return `bibliography: ${bibliographyFile}`;\r\n }\r\n}\r\n\r\nexport function ensureBibliographyFileForDoc(tr: Transaction, bibliographyFile: string) {\r\n // read the Yaml blocks from the document\r\n const parsedYamlNodes = parseYamlNodes(tr.doc);\r\n\r\n // Gather the biblography files from the document\r\n const bibliographiesRelative = bibliographyFilesFromDoc(parsedYamlNodes);\r\n if (bibliographiesRelative && bibliographiesRelative.length > 0) {\r\n // The user selected bibliography is already in the document OR\r\n // There is a bibliography entry, but it doesn't include the user\r\n // selected bibliography. In either case, we're not going to write\r\n // a bibliography entry to any YAML node.\r\n return bibliographiesRelative.includes(bibliographyFile);\r\n } else {\r\n // There aren't any bibliographies declared for this document yet either because\r\n // there are no yaml metadata blocks or the yaml metadata blocks that exist omit\r\n // the bibliography property\r\n if (parsedYamlNodes.length === 0) {\r\n // There aren't any yaml nodes in this document, need to create one\r\n const biblioNode = createBiblographyYamlNode(tr.doc.type.schema, bibliographyFile);\r\n tr.insert(1, biblioNode);\r\n } else {\r\n // We found at least one node in the document, add to the first node that we found\r\n const firstBlock = parsedYamlNodes[0];\r\n const updatedNode = addBibliographyToYamlNode(tr.doc.type.schema, bibliographyFile, firstBlock);\r\n tr.replaceRangeWith(firstBlock.node.pos, firstBlock.node.pos + firstBlock.node.node.nodeSize, updatedNode);\r\n }\r\n return true;\r\n }\r\n}\r\n\r\nfunction addBibliographyToYamlNode(schema: Schema, bibliographyFile: string, parsedYaml: ParsedYaml) {\r\n // Add this to the first node\r\n const yamlCode = parsedYaml.yamlCode;\r\n const yamlWithBib = `---\\n${yamlCode}\\n${bibliographyLine(bibliographyFile)}\\n---`;\r\n const yamlText = schema.text(yamlWithBib);\r\n return schema.nodes.yaml_metadata.create({}, yamlText);\r\n}\r\n\r\nfunction createBiblographyYamlNode(schema: Schema, bibliographyFile: string) {\r\n const yamlText = schema.text(`---\\n${bibliographyLine(bibliographyFile)}\\n---`);\r\n return schema.nodes.yaml_metadata.create({}, yamlText);\r\n}\r\n","/*\r\n * bibliography-provider_zotero.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { ParsedYaml, valueFromYamlText } from '../yaml';\r\nimport { suggestCiteId } from '../cite';\r\n\r\nimport {\r\n BibliographyDataProvider,\r\n BibliographyFile,\r\n BibliographySourceWithCollections,\r\n BibliographyCollection,\r\n} from './bibliography';\r\nimport { EditorUI } from '../ui-types';\r\nimport { CSL } from '../csl';\r\nimport { toBibTeX } from './bibDB';\r\nimport { ZoteroCollection, ZoteroCollectionSpec, ZoteroCSL, ZoteroServer } from 'editor-types';\r\n\r\nexport const kZoteroProviderKey = '2509FBBE-5BB0-44C4-B119-6083A81ED673';\r\n\r\n// https://github.com/retorquere/zotero-better-bibtex/blob/master/translators/Better%20BibTeX.json\r\nexport const kZoteroBibTeXTranslator = 'ca65189f-8815-4afe-8c8b-8c7c15f0edca';\r\n\r\n\r\nexport class BibliographyDataProviderZotero implements BibliographyDataProvider {\r\n private allCollections: ZoteroCollection[] = [];\r\n private allCollectionSpecs: BibliographyCollection[] = [];\r\n private server: ZoteroServer;\r\n private warning: string | undefined;\r\n private enabled = true;\r\n\r\n private docPath: string | undefined;\r\n private zoteroConfig: boolean | string[] | undefined;\r\n\r\n public constructor(server: ZoteroServer) {\r\n this.server = server;\r\n }\r\n\r\n public name = 'Zotero';\r\n public key: string = kZoteroProviderKey;\r\n public requiresWritable = true;\r\n\r\n public async load(\r\n _ui: EditorUI,\r\n docPath: string,\r\n _resourcePath: string,\r\n yamlBlocks: ParsedYaml[],\r\n refreshCollectionData: boolean,\r\n ): Promise<boolean> {\r\n let hasUpdates = false;\r\n this.docPath = docPath;\r\n this.zoteroConfig = zoteroConfig(yamlBlocks);\r\n if (this.zoteroConfig) {\r\n // Enabled\r\n this.enabled = true;\r\n try {\r\n // Don't send the items back through to the server\r\n const collectionSpecs = this.allCollections.map(({ ...rest }) => rest);\r\n\r\n // If there is a warning, stop using the cache and force a fresh trip\r\n // through the whole pipeline to be sure we're trying to clear that warning\r\n const useCache = this.warning === undefined || this.warning.length === 0;\r\n\r\n // The collection specified in the document header\r\n const collections = Array.isArray(this.zoteroConfig) ? this.zoteroConfig : [];\r\n const result = await this.server.getCollections(docPath, collections, collectionSpecs || [], useCache);\r\n this.warning = result.warning;\r\n if (result.status === 'ok') {\r\n if (result.message) {\r\n const newCollections = (result.message as ZoteroCollection[]).map(collection => {\r\n const existingCollection = this.allCollections.find(col => col.name === collection.name);\r\n // If the version is 0 this is a local instance that isn't incrementing version numbers, do not cache\r\n if (useCache && existingCollection && existingCollection.version === collection.version && existingCollection.version !== 0) {\r\n collection.items = existingCollection.items;\r\n } else {\r\n hasUpdates = true;\r\n }\r\n return collection;\r\n });\r\n hasUpdates = hasUpdates || newCollections.length !== this.collections.length;\r\n this.allCollections = newCollections;\r\n }\r\n } else {\r\n // console.log(result.status);\r\n }\r\n } catch (err) {\r\n // console.log(err);\r\n }\r\n\r\n if (refreshCollectionData) {\r\n // Lookup the collection specs\r\n const specResult = await this.server.getActiveCollectionSpecs(\r\n this.docPath || null,\r\n Array.isArray(this.zoteroConfig) ? this.zoteroConfig : [],\r\n );\r\n if (specResult && specResult.status === 'ok') {\r\n this.allCollectionSpecs = (specResult.message as ZoteroCollectionSpec[]).map((spec: ZoteroCollectionSpec) =>\r\n this.toBibliographyCollection(spec),\r\n );\r\n } else {\r\n this.allCollectionSpecs = [];\r\n }\r\n }\r\n } else {\r\n // Zotero is disabled, clear any already loaded bibliography\r\n if (this.collections.length > 0) {\r\n hasUpdates = true;\r\n }\r\n // Disabled\r\n this.enabled = false;\r\n this.allCollections = [];\r\n this.allCollectionSpecs = [];\r\n }\r\n return hasUpdates;\r\n }\r\n\r\n // Respect enabled;\r\n public isEnabled(): boolean {\r\n return this.enabled && (this.allCollections.length > 0 || this.allCollectionSpecs.length > 0);\r\n }\r\n\r\n public collections(): BibliographyCollection[] {\r\n return this.allCollectionSpecs || [];\r\n }\r\n\r\n private toBibliographyCollection(zoteroSpec: ZoteroCollectionSpec) {\r\n return {\r\n name: zoteroSpec.name,\r\n key: zoteroSpec.key,\r\n parentKey: zoteroSpec.parentKey,\r\n provider: kZoteroProviderKey,\r\n };\r\n }\r\n\r\n public items(): BibliographySourceWithCollections[] {\r\n const entryArrays = this.allCollections?.map(collection => this.bibliographySources(collection)) || [];\r\n const zoteroEntries = ([] as BibliographySourceWithCollections[]).concat(...entryArrays);\r\n return zoteroEntries;\r\n }\r\n\r\n public itemsForCollection(collectionKey?: string): BibliographySourceWithCollections[] {\r\n if (!collectionKey) {\r\n return this.items();\r\n }\r\n\r\n return this.items().filter((item: { collectionKeys?: string[] }) => {\r\n if (item.collectionKeys) {\r\n return item.collectionKeys.includes(collectionKey);\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n public bibliographyPaths(): BibliographyFile[] {\r\n return [];\r\n }\r\n\r\n public async generateBibTeX(ui: EditorUI, id: string, csl: CSL): Promise<string | undefined> {\r\n if (csl.key && ui.prefs.zoteroUseBetterBibtex()) {\r\n const bibTeX = await this.server.betterBibtexExport(\r\n [csl.key],\r\n kZoteroBibTeXTranslator,\r\n parseInt((csl as ZoteroCSL).libraryID, 10),\r\n );\r\n if (bibTeX) {\r\n return Promise.resolve(bibTeX.message as string);\r\n }\r\n }\r\n return Promise.resolve(toBibTeX(id, csl));\r\n }\r\n\r\n public warningMessage(): string | undefined {\r\n return this.warning;\r\n }\r\n\r\n private bibliographySources(collection: ZoteroCollection): BibliographySourceWithCollections[] {\r\n const items = collection.items?.map(item => {\r\n return {\r\n ...item,\r\n id: item.id || suggestCiteId([], item),\r\n providerKey: this.key,\r\n collectionKeys: item.collectionKeys,\r\n };\r\n });\r\n return items || [];\r\n }\r\n}\r\n\r\n// The Zotero header allows the following:\r\n// zotero: true | false Globally enables or disables the zotero integration\r\n// If true, uses all collections. If false uses none.\r\n//\r\n// By default, zotero integration is enabled. Add this header to disable integration\r\n//\r\nfunction zoteroConfig(parsedYamls: ParsedYaml[]): boolean | string[] {\r\n // Read the values of any yaml blocks that include bibliography headers\r\n // filter out blocks that don't include such headers\r\n const zoteroValues = parsedYamls\r\n .map(parsedYaml => {\r\n return valueFromYamlText('zotero', parsedYaml.yamlCode);\r\n })\r\n .filter(val => val !== null);\r\n\r\n if (zoteroValues.length > 0) {\r\n // Pandoc will use the last biblography node when generating a bibliography.\r\n // Take the same approach to the Zotero header and use the last node\r\n const zoteroConfigValue = zoteroValues[zoteroValues.length - 1];\r\n if (typeof zoteroConfigValue === 'boolean') {\r\n return zoteroConfigValue;\r\n } else if (typeof zoteroConfigValue === 'string') {\r\n return [zoteroConfigValue];\r\n } else if (Array.isArray(zoteroConfigValue)) {\r\n return zoteroConfigValue.map(String);\r\n } else {\r\n return true;\r\n }\r\n }\r\n return true;\r\n}\r\n","/*\r\n * bibliography.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport Fuse from 'fuse.js';\r\nimport { PandocServer } from '../pandoc';\r\n\r\nimport { EditorUI } from '../ui-types';\r\nimport { ParsedYaml, parseYamlNodes } from '../yaml';\r\nimport { CSL } from '../csl';\r\nimport { BibliographyDataProviderLocal, kLocalBibliographyProviderKey } from './bibliography-provider_local';\r\nimport { BibliographyDataProviderZotero } from './bibliography-provider_zotero';\r\nimport { toBibTeX } from './bibDB';\r\nimport { joinPaths, isAbsolute } from '../path';\r\nimport { ZoteroServer } from 'editor-types';\r\n\r\nexport interface BibliographyFile {\r\n displayPath: string;\r\n fullPath: string;\r\n isProject: boolean;\r\n writable: boolean;\r\n}\r\n\r\nexport function bibliographyFileForPath(path: string, ui: EditorUI): BibliographyFile {\r\n return {\r\n displayPath: path,\r\n fullPath: isAbsolute(path, ui.context.isWindowsDesktop()) ? path : joinPaths(ui.context.getDefaultResourceDir(), path),\r\n isProject: false,\r\n writable: true,\r\n };\r\n}\r\n\r\nexport interface BibliographyType {\r\n extension: string;\r\n displayName: string;\r\n default: boolean;\r\n}\r\n\r\n// The types of bibliography files and the default value\r\nexport function bibliographyTypes(ui: EditorUI): BibliographyType[] {\r\n const defaultBiblioType = ui.prefs.bibliographyDefaultType();\r\n return [\r\n {\r\n displayName: ui.context.translateText('BibTeX'),\r\n extension: 'bib',\r\n default: defaultBiblioType === 'bib',\r\n },\r\n {\r\n displayName: ui.context.translateText('CSL-YAML'),\r\n extension: 'yaml',\r\n default: defaultBiblioType === 'yaml',\r\n },\r\n {\r\n displayName: ui.context.translateText('CSL-JSON'),\r\n extension: 'json',\r\n default: defaultBiblioType === 'json',\r\n },\r\n ];\r\n}\r\n\r\nexport interface BibliographyDataProvider {\r\n key: string;\r\n name: string;\r\n requiresWritable: boolean;\r\n\r\n isEnabled(): boolean;\r\n load(\r\n ui: EditorUI,\r\n docPath: string | null,\r\n resourcePath: string,\r\n yamlBlocks: ParsedYaml[],\r\n refreshCollectionData?: boolean,\r\n ): Promise<boolean>;\r\n collections(): BibliographyCollection[];\r\n items(): BibliographySourceWithCollections[];\r\n itemsForCollection(collectionKey: string): BibliographySourceWithCollections[];\r\n bibliographyPaths(doc: ProsemirrorNode, ui: EditorUI): BibliographyFile[];\r\n generateBibTeX(ui: EditorUI, id: string, csl: CSL): Promise<string | undefined>;\r\n warningMessage(): string | undefined;\r\n}\r\n\r\nexport interface BibliographyCollection {\r\n name: string;\r\n key: string;\r\n provider: string;\r\n parentKey?: string;\r\n}\r\n\r\n\r\n// The individual bibliographic source\r\nexport interface BibliographySource extends CSL {\r\n id: string;\r\n providerKey: string;\r\n}\r\n\r\nexport interface BibliographySourceWithCollections extends BibliographySource {\r\n collectionKeys: string[];\r\n}\r\n\r\n// The fields and weights that will indexed and searched\r\n// when searching bibliographic sources\r\nconst kFields: Fuse.FuseOptionKeyObject<void>[] = [\r\n { name: 'id', weight: 30 },\r\n { name: 'author.family', weight: 15 },\r\n { name: 'author.literal', weight: 15 },\r\n { name: 'issued.raw', weight: 15 },\r\n { name: 'title', weight: 15 },\r\n { name: 'author.given', weight: 10 },\r\n { name: 'providerKey', weight: 0.01 },\r\n { name: 'collectionKeys', weight: 0.01 },\r\n];\r\n\r\nconst kSearchOptions = {\r\n isCaseSensitive: false,\r\n shouldSort: true,\r\n includeMatches: false,\r\n includeScore: false,\r\n keys: kFields,\r\n};\r\n\r\nexport class BibliographyManager {\r\n private providers: BibliographyDataProvider[];\r\n private sources?: BibliographySourceWithCollections[];\r\n private writable?: boolean;\r\n private searchIndex?: Fuse<BibliographySourceWithCollections>;\r\n\r\n public constructor(server: PandocServer, zoteroServer?: ZoteroServer) {\r\n this.providers = [new BibliographyDataProviderLocal(server)];\r\n if (zoteroServer) {\r\n this.providers.push(new BibliographyDataProviderZotero(zoteroServer));\r\n }\r\n }\r\n\r\n public async prime(ui: EditorUI, doc: ProsemirrorNode) {\r\n // Load the bibliography\r\n await this.load(ui, doc, true);\r\n }\r\n\r\n public async loadLocal(ui: EditorUI, doc: ProsemirrorNode) {\r\n await this.load(ui, doc, false, true);\r\n }\r\n\r\n public async load(ui: EditorUI, doc: ProsemirrorNode, refreshCollectionData?: boolean, localOnly?: boolean): Promise<void> {\r\n // read the Yaml blocks from the document\r\n const parsedYamlNodes = parseYamlNodes(doc);\r\n\r\n // Currently edited doc\r\n const docPath = ui.context.getDocumentPath();\r\n\r\n // Load each provider\r\n const providers = localOnly ? this.providers.filter(provider => provider.requiresWritable === false) : this.providers;\r\n const providersNeedUpdate = await Promise.all(\r\n providers.map(provider =>\r\n provider.load(ui, docPath, ui.context.getDefaultResourceDir(), parsedYamlNodes, refreshCollectionData),\r\n ),\r\n );\r\n\r\n // Once loaded, see if any of the providers required an index update\r\n const needsIndexUpdate = providersNeedUpdate.reduce((prev, curr) => prev || curr);\r\n\r\n // Update the index if anything requires that we do so\r\n if (needsIndexUpdate) {\r\n // Get the entries\r\n const providersEntries = this.providers.map(provider => provider.items());\r\n\r\n // These are in arbitrary order, so sort them alphabetically\r\n const idSort = (a: BibliographySource, b: BibliographySource) => {\r\n return a.id.localeCompare(b.id);\r\n };\r\n this.sources = ([] as BibliographySourceWithCollections[]).concat(...providersEntries).sort(idSort);\r\n\r\n this.searchIndex = this.getFuse(this.sources);\r\n }\r\n\r\n // Is this a writable bibliography\r\n this.writable = this.isWritable(doc, ui);\r\n }\r\n\r\n public hasSources() {\r\n return this.allSources().length > 0;\r\n }\r\n\r\n public allSources(): BibliographySourceWithCollections[] {\r\n if (this.sources && this.allowsWrites()) {\r\n return this.sources;\r\n } else {\r\n return this.sources?.filter(source => source.providerKey === kLocalBibliographyProviderKey) || [];\r\n }\r\n return [];\r\n }\r\n\r\n public sourcesForProvider(providerKey: string): BibliographySourceWithCollections[] {\r\n return this.allSources().filter(item => item.providerKey === providerKey);\r\n }\r\n\r\n public sourcesForProviderCollection(provider: string, collectionKey: string): BibliographySourceWithCollections[] {\r\n return this.sourcesForProvider(provider).filter(item => item.collectionKeys.includes(collectionKey));\r\n }\r\n\r\n public localSources(): BibliographySourceWithCollections[] {\r\n return this.allSources().filter(source => source.providerKey === kLocalBibliographyProviderKey);\r\n }\r\n\r\n public allowsWrites(): boolean {\r\n return this.writable || false;\r\n }\r\n\r\n private isWritable(doc: ProsemirrorNode, ui: EditorUI): boolean {\r\n const bibliographyFiles = this.bibliographyFiles(doc, ui);\r\n if (bibliographyFiles.length === 0) {\r\n // Since there are no bibliographies, we can permit writing a fresh one\r\n return true;\r\n }\r\n return bibliographyFiles.filter(bibFile => bibFile.writable).length > 0;\r\n }\r\n\r\n public writableBibliographyFiles(doc: ProsemirrorNode, ui: EditorUI) {\r\n return this.bibliographyFiles(doc, ui).filter(bibFile => bibFile.writable);\r\n }\r\n\r\n public bibliographyFiles(doc: ProsemirrorNode, ui: EditorUI): BibliographyFile[] {\r\n const bibliographyPaths = this.providers.map(provider => provider.bibliographyPaths(doc, ui));\r\n return ([] as BibliographyFile[]).concat(...bibliographyPaths);\r\n }\r\n\r\n public localProviders(): BibliographyDataProvider[] {\r\n if (this.allowsWrites()) {\r\n return this.providers;\r\n } else {\r\n return this.providers.filter(provider => provider.requiresWritable === false);\r\n }\r\n }\r\n\r\n public providerName(providerKey: string): string | undefined {\r\n const dataProvider = this.providers.find(prov => prov.key === providerKey);\r\n return dataProvider?.name;\r\n }\r\n\r\n // Allows providers to generate bibTeX, if needed. This is useful in contexts\r\n // like Zotero where a user may be using the Better Bibtex plugin which can generate\r\n // superior BibTeX using things like stable citekeys with custom rules, and more.\r\n //\r\n // If the provider doesn't provide BibTeX, we can generate it ourselves\r\n public async generateBibTeX(ui: EditorUI, id: string, csl: CSL, provider?: string): Promise<string | undefined> {\r\n const dataProvider = this.providers.find(prov => prov.key === provider);\r\n if (dataProvider) {\r\n const dataProviderBibTeX = dataProvider.generateBibTeX(ui, id, csl);\r\n if (dataProviderBibTeX) {\r\n return dataProviderBibTeX;\r\n }\r\n }\r\n return Promise.resolve(toBibTeX(id, csl));\r\n }\r\n\r\n public warning(): string | undefined {\r\n const warningProvider = this.providers.find(provider => provider.warningMessage());\r\n if (warningProvider) {\r\n return warningProvider.warningMessage();\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n public warningForProvider(providerKey?: string): string | undefined {\r\n if (providerKey) {\r\n const warningProvider = this.providers.find(prov => prov.key === providerKey);\r\n if (warningProvider) {\r\n return warningProvider.warningMessage();\r\n } else {\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n public findDoiInLocalBibliography(doi: string): BibliographySourceWithCollections | undefined {\r\n // NOTE: This will only search sources that have already been loaded.\r\n // Please be sure to use load() before calling this or\r\n // accept the risk that this will not properly search for a DOI if the\r\n // bibliography hasn't already been loaded.\r\n return this.localSources().find(source => source.DOI === doi);\r\n }\r\n\r\n public findIdInLocalBibliography(id: string): BibliographySourceWithCollections | undefined {\r\n // NOTE: This will only search sources that have already been loaded.\r\n // Please be sure to use load() before calling this or\r\n // accept the risk that this will not properly search for a DOI if the\r\n // bibliography hasn't already been loaded.\r\n\r\n return this.localSources().find(source => source.id === id);\r\n }\r\n\r\n // A general purpose search interface for filtered searching\r\n public search(query?: string, providerKey?: string, collectionKey?: string): BibliographySourceWithCollections[] {\r\n const limit = 100;\r\n if (query && query.length > 0) {\r\n // These are ordered by search score, so leave as is\r\n if (providerKey && collectionKey) {\r\n return this.searchProviderCollection(query, limit, providerKey, collectionKey);\r\n } else if (providerKey) {\r\n return this.searchProvider(query, limit, providerKey);\r\n } else {\r\n return this.searchAllSources(query, limit);\r\n }\r\n } else {\r\n if (providerKey && collectionKey) {\r\n return this.sourcesForProviderCollection(providerKey, collectionKey);\r\n } else if (providerKey) {\r\n return this.sourcesForProvider(providerKey);\r\n } else {\r\n return this.allSources();\r\n }\r\n }\r\n }\r\n\r\n public searchAllSources(query: string, limit: number): BibliographySourceWithCollections[] {\r\n return this.searchSources(query, limit, this.allSources());\r\n }\r\n\r\n public searchSources(\r\n query: string,\r\n limit: number,\r\n sources: BibliographySourceWithCollections[],\r\n ): BibliographySourceWithCollections[] {\r\n // NOTE: This will only search sources that have already been loaded.\r\n // Please be sure to use load() before calling this or\r\n // accept the risk that this will not properly search for a source if the\r\n // bibliography hasn't already been loaded.\r\n if (sources && this.searchIndex) {\r\n // NOTE: Search performance can really drop off for long strings\r\n // Test cases start at 20ms to search for a single character\r\n // grow to 270ms to search for 20 character string\r\n // grow to 1060ms to search for 40 character string\r\n const searchResults = this.searchIndex.search(query, { ...kSearchOptions, limit });\r\n const items = searchResults.map((result: { item: BibliographySourceWithCollections }) => result.item);\r\n\r\n // Filter out any non local items if this isn't a writable bibliography\r\n const filteredItems = this.allowsWrites()\r\n ? items\r\n : items.filter(item => item.provider === kLocalBibliographyProviderKey);\r\n return filteredItems;\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n // Search only a specific provider\r\n public searchProvider(query: string, limit: number, providerKey: string): BibliographySourceWithCollections[] {\r\n const orFields = kFields.flatMap(field => {\r\n if (Array.isArray(field)) {\r\n return field.map(name => ({ [name]: query }));\r\n } else {\r\n return {\r\n [field.name as string]: query,\r\n };\r\n }\r\n \r\n });\r\n const q = {\r\n $and: [\r\n { providerKey },\r\n {\r\n $or: orFields,\r\n },\r\n ],\r\n };\r\n\r\n if (this.searchIndex) {\r\n const searchResults = this.searchIndex.search(q, { limit });\r\n return searchResults.map((result: { item: BibliographySourceWithCollections }) => result.item);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n // Search a specific provider and collection\r\n public searchProviderCollection(\r\n query: string,\r\n limit: number,\r\n providerKey: string,\r\n collectionKey: string,\r\n ): BibliographySourceWithCollections[] {\r\n const orFields = kFields.flatMap(field => {\r\n if (Array.isArray(field.name)) {\r\n return field.name.map(name => ( { [name]: query }));\r\n } else {\r\n return {\r\n [field.name as string]: query,\r\n };\r\n }\r\n \r\n });\r\n const q = {\r\n $and: [\r\n {\r\n providerKey,\r\n },\r\n {\r\n collectionKeys: collectionKey,\r\n },\r\n {\r\n $or: orFields,\r\n },\r\n ],\r\n };\r\n\r\n if (this.searchIndex) {\r\n const searchResults = this.searchIndex.search(q, { limit });\r\n return searchResults.map((result: { item: BibliographySourceWithCollections }) => result.item);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n private getFuse(bibSources: BibliographySourceWithCollections[]) {\r\n // build search index\r\n const options = {\r\n ...kSearchOptions,\r\n keys: kFields.map(field => field.name),\r\n };\r\n const index = Fuse.createIndex<BibliographySourceWithCollections>(options.keys, bibSources);\r\n return new Fuse(bibSources, options, index);\r\n }\r\n}\r\n","/*\r\n * completion.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nimport './completion.css';\r\n\r\nexport interface CompletionItemViewProps extends WidgetProps {\r\n width: number;\r\n image?: string;\r\n imageAdornment?: string;\r\n title: string;\r\n detail?: string;\r\n subTitle: string;\r\n htmlTitle?: boolean;\r\n}\r\n\r\nexport const CompletionItemView: React.FC<CompletionItemViewProps> = props => {\r\n const className = ['pm-completion-item'].concat(props.classes || []).join(' ');\r\n const style: React.CSSProperties = {\r\n width: props.width + 'px',\r\n ...props.style,\r\n };\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className={'pm-completion-item-type'}>\r\n {props.imageAdornment ? (\r\n <img\r\n className={'pm-completion-image-adorn pm-block-border-color pm-background-color'}\r\n src={props.imageAdornment}\r\n draggable=\"false\"\r\n />\r\n ) : (\r\n undefined\r\n )}\r\n <img className={'pm-completion-item-icon pm-block-border-color'} src={props.image} draggable=\"false\"/>\r\n </div>\r\n <div className={'pm-completion-item-summary'} style={{ width: props.width - 40 - 36 + 'px' }}>\r\n <div className={'pm-completion-item-id'}>\r\n <div className={'pm-completion-item-primary pm-completion-item-title pm-fixedwidth-font'}>{props.title}</div>\r\n <div className={'pm-completion-item-primary pm-completion-item-detail'}>{props.detail}</div>\r\n </div>\r\n {props.htmlTitle ? (\r\n <div className={'pm-completion-item-subTitle'} dangerouslySetInnerHTML={{ __html: props.subTitle || '' }} />\r\n ) : (\r\n <div className={'pm-completion-item-subTitle'}>{props.subTitle}</div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/*\r\n * cite-completion-bibliography.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { EditorServer } from 'editor-types';\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { BibliographySource, BibliographyManager } from '../../api/bibliography/bibliography';\r\nimport { kZoteroProviderKey } from '../../api/bibliography/bibliography-provider_zotero';\r\nimport { formatAuthors, formatIssuedDate } from '../../api/cite';\r\nimport { imageForType, joinAuthorNames } from '../../api/csl';\r\nimport { EditorUI } from '../../api/ui-types';\r\n\r\nimport { insertCitation as insertSingleCitation, performCiteCompletionReplacement } from './cite';\r\nimport { CiteCompletionEntry, CiteCompletionProvider } from './cite-completion';\r\n\r\nexport const kCiteCompletionTypeBibliography = \"bibl\";\r\n\r\nexport function bibliographyCiteCompletionProvider(ui: EditorUI, bibliographyManager: BibliographyManager): CiteCompletionProvider {\r\n\r\n const referenceEntryForSource = (source: BibliographySource, forceLightMode?: boolean): CiteCompletionEntry => {\r\n\r\n // Core item metadata\r\n const id = source.id;\r\n const primaryText = id;\r\n const detailText = source.title || source['short-title'] || source['container-title'] || source.type;\r\n const image = imageForType(ui.images, source.type)[ui.prefs.darkMode() && !forceLightMode ? 1 : 0];\r\n const imageAdornment = source.providerKey === kZoteroProviderKey ? ui.images.citations?.zoteroOverlay : undefined;\r\n\r\n // The author text (and index representation)\r\n const secondaryText = (len: number) => {\r\n const authorStr = formatAuthors(source.author, len - source.id.length);\r\n const date = source.issued ? formatIssuedDate(source.issued) : '';\r\n const detail = `${authorStr} ${date}`;\r\n return detail;\r\n };\r\n const secondaryIndex = source.author?.map(joinAuthorNames).join(\" \");\r\n\r\n // The function to insert this entry\r\n const replace = (view: EditorView, pos: number, server: EditorServer) => {\r\n if (source && bibliographyManager.findIdInLocalBibliography(source.id)) {\r\n // It's already in the bibliography, just write the id\r\n const tr = view.state.tr;\r\n const schema = view.state.schema;\r\n const citeIdMark = schema.text(source.id, [schema.marks.cite_id.create()]);\r\n performCiteCompletionReplacement(tr, pos, citeIdMark);\r\n view.dispatch(tr);\r\n return Promise.resolve();\r\n } else if (source) {\r\n // It isn't in the bibliography, show the insert cite dialog\r\n return insertSingleCitation(\r\n view,\r\n source.DOI || '',\r\n bibliographyManager,\r\n pos,\r\n ui,\r\n server.pandoc,\r\n source,\r\n bibliographyManager.providerName(source.providerKey),\r\n );\r\n } else {\r\n return Promise.resolve();\r\n }\r\n };\r\n\r\n return {\r\n id,\r\n type: kCiteCompletionTypeBibliography,\r\n primaryText,\r\n secondaryText,\r\n detailText,\r\n image,\r\n imageAdornment,\r\n index: {\r\n secondary: secondaryIndex,\r\n tertiary: detailText\r\n },\r\n replace\r\n };\r\n };\r\n\r\n return {\r\n currentEntries: () => {\r\n if (bibliographyManager.hasSources()) {\r\n return bibliographyManager.allSources().map(source => referenceEntryForSource(source));\r\n } else {\r\n return undefined;\r\n }\r\n },\r\n streamEntries: (doc: ProsemirrorNode, onStreamReady: (entries: CiteCompletionEntry[]) => void) => {\r\n bibliographyManager.load(ui, doc).then(() => {\r\n onStreamReady(bibliographyManager.allSources().map(source => referenceEntryForSource(source)));\r\n });\r\n },\r\n awaitEntries: async (doc: ProsemirrorNode) => {\r\n await bibliographyManager.load(ui, doc);\r\n return bibliographyManager.allSources().map(source => referenceEntryForSource(source));\r\n },\r\n warningMessage: () => {\r\n return bibliographyManager.warning();\r\n }\r\n\r\n };\r\n}\r\n\r\n\r\n","/*\r\n * xref-completion.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { DecorationSet } from 'prosemirror-view';\r\n\r\nimport React from 'react';\r\n\r\nimport Fuse from 'fuse.js';\r\nimport uniqby from 'lodash.uniqby';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { CompletionHandler, CompletionResult } from '../../api/completion';\r\nimport { xrefKey } from '../../api/xref';\r\nimport { markIsActive } from '../../api/mark';\r\nimport { searchPlaceholderDecoration } from '../../api/placeholder';\r\nimport { CompletionItemView } from '../../api/widgets/completion';\r\n\r\nimport './xref-completion.css';\r\nimport { XRef, XRefServer } from 'editor-types';\r\n\r\nconst kMaxResults = 20;\r\n\r\nexport function xrefCompletionHandler(ui: EditorUI, server: XRefServer): CompletionHandler<XRef> {\r\n const index = new FuseIndex();\r\n\r\n return {\r\n id: 'BAACC160-56BE-4322-B079-54477A880623',\r\n\r\n enabled: (context: EditorState | Transaction) => {\r\n return markIsActive(context, context.doc.type.schema.marks.xref);\r\n },\r\n\r\n completions: xrefCompletions(ui, server, index),\r\n\r\n filter: (completions: XRef[], _state: EditorState, token: string) => {\r\n if (token.length > 0) {\r\n return index.search(token, kMaxResults);\r\n } else {\r\n return completions.slice(0, kMaxResults);\r\n }\r\n },\r\n\r\n replacement(_schema: Schema, xref: XRef | null): string | ProsemirrorNode | null {\r\n if (xref) {\r\n return xrefKey(xref);\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n view: {\r\n component: xrefView(ui),\r\n key: xref => xrefKey(xref),\r\n height: 52,\r\n width: 350,\r\n maxVisible: 5,\r\n hideNoResults: true,\r\n },\r\n };\r\n}\r\n\r\nclass FuseIndex {\r\n private fuse: Fuse<XRef>;\r\n\r\n private keys: Fuse.FuseOptionKeyObject<void>[] = [\r\n { name: 'id', weight: 20 },\r\n { name: 'type', weight: 1 },\r\n { name: 'title', weight: 1 },\r\n ];\r\n\r\n constructor() {\r\n this.fuse = this.createIndex([]);\r\n }\r\n\r\n public update(xrefs: XRef[]) {\r\n this.fuse = this.createIndex(xrefs);\r\n }\r\n\r\n public search(query: string, limit: number) {\r\n // see if we have an explicit type\r\n let type: string | null = null;\r\n let typeQuery: string | null = null;\r\n const colonLoc = query.indexOf(':');\r\n if (colonLoc !== -1) {\r\n const prefix = query.slice(0, colonLoc);\r\n if (Object.prototype.hasOwnProperty.call(kXRefTypes,prefix)) {\r\n type = prefix;\r\n if (query.length > type.length + 1) {\r\n typeQuery = query.slice(colonLoc + 1);\r\n }\r\n }\r\n }\r\n\r\n // search options\r\n const options = {\r\n isCaseSensitive: false,\r\n shouldSort: true,\r\n minMatchCharLength: 2,\r\n limit,\r\n keys: this.keys,\r\n };\r\n\r\n // perform query (use type if we have one)\r\n const results = type\r\n ? typeQuery\r\n ? this.fuse.search({ $and: [{ type }, { $or: [{ id: typeQuery }, { title: typeQuery }] }] }, options)\r\n : this.fuse.search({ type }, options)\r\n : this.fuse.search(query, options);\r\n\r\n // return results (eliminating duplicates)\r\n return uniqby(\r\n results.map((result: { item: XRef }) => result.item),\r\n xrefKey,\r\n );\r\n }\r\n\r\n private createIndex(xrefs: XRef[]) {\r\n const options = {\r\n keys: this.keys.map(key => key.name),\r\n };\r\n const index = Fuse.createIndex(options.keys, xrefs);\r\n return new Fuse(xrefs, options, index);\r\n }\r\n}\r\n\r\nfunction xrefCompletions(ui: EditorUI, server: XRefServer, index: FuseIndex) {\r\n const kXRefCompletionRegEx = /(@ref\\()([ A-Za-z0-9:-]*)$/;\r\n return (text: string, context: EditorState | Transaction): CompletionResult<XRef> | null => {\r\n const match = text.match(kXRefCompletionRegEx);\r\n if (match) {\r\n const pos = context.selection.head - match[2].length;\r\n const token = match[2];\r\n return {\r\n pos,\r\n offset: -match[1].length + 1,\r\n token,\r\n completions: async () => {\r\n const docPath = ui.context.getDocumentPath();\r\n if (docPath) {\r\n await ui.context.withSavedDocument();\r\n const xrefs = await server.indexForFile(docPath);\r\n index.update(xrefs.refs);\r\n return xrefs.refs;\r\n } else {\r\n index.update([]);\r\n return Promise.resolve([]);\r\n }\r\n },\r\n decorations:\r\n token.length === 0 ? DecorationSet.create(context.doc, [searchPlaceholderDecoration(pos, ui)]) : undefined,\r\n };\r\n } else {\r\n return null;\r\n }\r\n };\r\n}\r\n\r\nfunction xrefView(ui: EditorUI): React.FC<XRef> {\r\n return (xref: XRef) => {\r\n const type = kXRefTypes[xref.type];\r\n const image = type?.image(ui) || ui.images.omni_insert.generic;\r\n\r\n return (\r\n <CompletionItemView\r\n width={350}\r\n classes={['pm-xref-completion-item']}\r\n image={image}\r\n title={xrefKey(xref)}\r\n subTitle={xref.title || ''}\r\n detail={xref.file}\r\n />\r\n );\r\n };\r\n}\r\n\r\nconst kGenericType = {\r\n image: (ui: EditorUI) => ui.images.omni_insert.generic,\r\n};\r\n\r\nconst kEqType = {\r\n image: (ui: EditorUI) =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert?.math_display_dark : ui.images.omni_insert?.math_display,\r\n};\r\n\r\nconst kTableType = {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.omni_insert?.table_dark : ui.images.omni_insert?.table),\r\n};\r\n\r\nexport const kXRefTypes: { [key: string]: { image: (ui: EditorUI) => string | undefined } } = {\r\n h1: {\r\n image: (ui: EditorUI) =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert?.heading1_dark : ui.images.omni_insert?.heading1,\r\n },\r\n h2: {\r\n image: (ui: EditorUI) =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert?.heading2_dark : ui.images.omni_insert?.heading2,\r\n },\r\n h3: {\r\n image: (ui: EditorUI) =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert?.heading3_dark : ui.images.omni_insert?.heading3,\r\n },\r\n h4: {\r\n image: (ui: EditorUI) =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert?.heading4_dark : ui.images.omni_insert?.heading4,\r\n },\r\n fig: {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.omni_insert?.image_dark : ui.images.omni_insert?.image),\r\n },\r\n tab: kTableType,\r\n tbl:kTableType,\r\n eq: kEqType,\r\n thm: kEqType,\r\n lem: kEqType,\r\n cor: kEqType,\r\n prp: kEqType,\r\n cnj: kEqType,\r\n def: kEqType,\r\n exm: kGenericType,\r\n exr: kGenericType,\r\n};\r\n\r\nconst kTheoremType = {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.xrefs?.theorem_dark : ui.images.xrefs?.theorem)\r\n};\r\n\r\n\r\nexport const kQuartoXRefTypes: { [key: string]: { image: (ui: EditorUI) => string | undefined } } = {\r\n sec: {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.xrefs?.section_dark : ui.images.xrefs?.section)\r\n },\r\n fig: {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.xrefs?.figure_dark : ui.images.xrefs?.figure),\r\n },\r\n tbl: {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.xrefs?.table_dark : ui.images.xrefs?.table),\r\n },\r\n lst: {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.xrefs?.listing_dark : ui.images.xrefs?.listing),\r\n },\r\n eq: {\r\n image: (ui: EditorUI) => (ui.prefs.darkMode() ? ui.images.xrefs?.equation_dark : ui.images.xrefs?.equation)\r\n },\r\n thm: kTheoremType,\r\n lem: kTheoremType,\r\n cor: kTheoremType,\r\n prp: kTheoremType,\r\n cnj: kTheoremType,\r\n def: kTheoremType,\r\n exm: kTheoremType,\r\n exr: kTheoremType,\r\n};","/*\r\n * cite-completion-quarto-xref.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\n\r\nimport { performCiteCompletionReplacement } from './cite';\r\nimport { CiteCompletionEntry, CiteCompletionProvider } from './cite-completion';\r\nimport { xrefKey } from '../../api/xref';\r\nimport { kQuartoXRefTypes } from '../xref/xref-completion';\r\nimport { EditorServer, XRef } from 'editor-types';\r\n\r\nexport const kCiteCompletionTypeXref = \"xref\";\r\n\r\nexport function quartoXrefCiteCompletionProvider(ui: EditorUI, server: EditorServer): CiteCompletionProvider {\r\n const referenceEntryForXref = (xref: XRef): CiteCompletionEntry => {\r\n\r\n // The type (e.g. fig)\r\n const type = kQuartoXRefTypes[xref.type];\r\n\r\n // The id (e.g. fig-foobar)\r\n const id = xrefKey(xref, \"quarto\");\r\n\r\n // The display text for the entry\r\n const primaryText = id;\r\n const secondaryText = () => {\r\n return xref.file;\r\n };\r\n const detailText = xref.title || \"\";\r\n\r\n // The image and adornment\r\n const image = type?.image(ui) || ui.images.omni_insert.generic;\r\n const imageAdornment = undefined;\r\n\r\n // Insert item\r\n const replace = (view: EditorView, pos: number) => {\r\n // It's already in the bibliography, just write the id\r\n const tr = view.state.tr;\r\n const schema = view.state.schema;\r\n const idMark = schema.text(id, [schema.marks.cite_id.create()]);\r\n performCiteCompletionReplacement(tr, pos, idMark);\r\n view.dispatch(tr);\r\n return Promise.resolve();\r\n };\r\n\r\n return {\r\n id,\r\n type: kCiteCompletionTypeXref,\r\n primaryText,\r\n secondaryText,\r\n detailText,\r\n image,\r\n imageAdornment,\r\n replace\r\n };\r\n };\r\n\r\n let loadedEntries: CiteCompletionEntry[] | undefined;\r\n return {\r\n currentEntries: () => {\r\n return loadedEntries;\r\n },\r\n streamEntries: (_doc: ProsemirrorNode, onStreamReady: (entries: CiteCompletionEntry[]) => void) => {\r\n const docPath = ui.context.getDocumentPath();\r\n if (docPath) {\r\n ui.context.withSavedDocument().then(() => {\r\n server.xref.quartoIndexForFile(docPath).then(xrefs => {\r\n loadedEntries = xrefs.refs.map(ref => referenceEntryForXref(ref));\r\n onStreamReady(loadedEntries);\r\n });\r\n });\r\n }\r\n },\r\n awaitEntries: async () => {\r\n const docPath = ui.context.getDocumentPath();\r\n if (docPath) {\r\n await ui.context.withSavedDocument();\r\n const index = await server.xref.quartoIndexForFile(docPath);\r\n loadedEntries = index.refs.map(ref => referenceEntryForXref(ref));\r\n return loadedEntries;\r\n } else {\r\n return Promise.resolve([]);\r\n }\r\n },\r\n warningMessage: () => {\r\n return undefined;\r\n }\r\n };\r\n}\r\n\r\n\r\n","\r\n/*\r\n * cite-completion-search.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport Fuse from 'fuse.js';\r\n\r\nimport { CiteCompletionEntry } from \"./cite-completion\";\r\n\r\nconst searchFields: Fuse.FuseOptionKeyObject<CiteCompletionEntry>[] = [\r\n { name: 'id', weight: 30 },\r\n { name: 'index.secondary', weight: 30 },\r\n { name: 'index.tertiary', weight: 5 },\r\n];\r\n\r\nexport interface CiteCompletionSearch {\r\n setEntries: (entries: CiteCompletionEntry[]) => void;\r\n search: (searchTerm: string, limit: number) => CiteCompletionEntry[];\r\n exactMatch: (searchTerm: string) => boolean;\r\n}\r\n\r\nexport function completionIndex(defaultEntries?: CiteCompletionEntry[]): CiteCompletionSearch {\r\n // build search index\r\n const options = {\r\n isCaseSensitive: false,\r\n shouldSort: true,\r\n includeMatches: false,\r\n includeScore: false,\r\n minMatchCharLength: 3,\r\n threshold: 0.5,\r\n keys: searchFields,\r\n useExtendedSearch: true\r\n };\r\n\r\n defaultEntries = defaultEntries || [];\r\n const index = Fuse.createIndex<CiteCompletionEntry>(searchFields, defaultEntries);\r\n const fuse = new Fuse(defaultEntries, options, index);\r\n let indexedEntries: CiteCompletionEntry[] = [];\r\n\r\n return {\r\n setEntries: (entries: CiteCompletionEntry[]) => {\r\n fuse.setCollection(entries);\r\n indexedEntries = entries;\r\n },\r\n search: (searchTerm: string, limit: number): CiteCompletionEntry[] => {\r\n const results = fuse.search('^' + searchTerm, { ...options, limit });\r\n return results.map(result => result.item);\r\n },\r\n exactMatch: (searchTerm: string): boolean => {\r\n return indexedEntries.some(entry => entry.id === searchTerm);\r\n }\r\n };\r\n}","/*\r\n * cite-completion.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { DecorationSet, EditorView } from 'prosemirror-view';\r\n\r\nimport React from 'react';\r\nimport uniqby from 'lodash.uniqby';\r\n\r\nimport { BibliographyManager } from '../../api/bibliography/bibliography';\r\nimport { CompletionHandler, CompletionResult, CompletionHeaderProps } from '../../api/completion';\r\nimport { hasDOI } from '../../api/doi';\r\nimport { searchPlaceholderDecoration } from '../../api/placeholder';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { CompletionItemView } from '../../api/widgets/completion';\r\n\r\nimport { EditorEvents } from '../../api/event-types';\r\n\r\nimport { parseCitation } from './cite';\r\n\r\nimport './cite-completion.css';\r\nimport { bibliographyCiteCompletionProvider } from './cite-completion-bibliography';\r\nimport { EditorFormat, kQuartoDocType } from '../../api/format';\r\nimport { quartoXrefCiteCompletionProvider, kCiteCompletionTypeXref } from './cite-completion-quarto-xref';\r\nimport { completionIndex, CiteCompletionSearch } from './cite-completion-search';\r\nimport { EditorServer } from 'editor-types';\r\n\r\n\r\nconst kAuthorMaxChars = 28;\r\nconst kMaxCitationCompletions = 100;\r\nconst kHeaderHeight = 20;\r\n\r\nexport const kCiteCompletionWidth = 400;\r\nconst kCiteCompletionItemPadding = 10;\r\n\r\nexport const kCitationCompleteScope = 'CitationScope';\r\n\r\n// An entry which includes the source as well\r\n// additional metadata for displaying a bibliograph item\r\nexport interface CiteCompletionEntry {\r\n id: string;\r\n type: string;\r\n primaryText: string;\r\n secondaryText: (len: number) => string;\r\n detailText: string;\r\n image?: string;\r\n imageAdornment?: string;\r\n replace: (view: EditorView, pos: number, server: EditorServer) => Promise<void>;\r\n index?: {\r\n secondary?: string;\r\n tertiary?: string;\r\n };\r\n}\r\n\r\nexport interface CiteCompletionProvider {\r\n currentEntries: () => CiteCompletionEntry[] | undefined;\r\n streamEntries: (doc: ProsemirrorNode, onStreamReady: (entries: CiteCompletionEntry[]) => void) => void;\r\n awaitEntries: (doc: ProsemirrorNode) => Promise<CiteCompletionEntry[]>;\r\n warningMessage: () => string | undefined;\r\n}\r\n\r\nexport function citationCompletionHandler(\r\n ui: EditorUI,\r\n _events: EditorEvents,\r\n bibManager: BibliographyManager,\r\n server: EditorServer,\r\n format: EditorFormat\r\n): CompletionHandler<CiteCompletionEntry> {\r\n\r\n // Load the providers\r\n const completionProviders = [bibliographyCiteCompletionProvider(ui, bibManager)];\r\n if (format.docTypes.includes(kQuartoDocType)) {\r\n // If this is a Quarto doc, use the quartoXref provider\r\n completionProviders.push(quartoXrefCiteCompletionProvider(ui, server));\r\n }\r\n // create the search index\r\n const searchIndex = completionIndex();\r\n\r\n return {\r\n id: 'AB9D4F8C-DA00-403A-AB4A-05373906FD8C',\r\n\r\n scope: kCitationCompleteScope,\r\n\r\n completions: citationCompletions(ui, completionProviders, searchIndex),\r\n\r\n filter: (entries: CiteCompletionEntry[], _state: EditorState, token: string) => {\r\n return filterCitations(token, completionProviders, searchIndex, entries);\r\n },\r\n\r\n replace(view: EditorView, pos: number, entry: CiteCompletionEntry | null) {\r\n // If there is an entry selected, insert it into the document\r\n if (entry) {\r\n entry.replace(view, pos, server);\r\n }\r\n return Promise.resolve();\r\n },\r\n\r\n replacement(_schema: Schema, entry: CiteCompletionEntry | null): string | ProsemirrorNode | null {\r\n if (entry) {\r\n return entry.id;\r\n } else {\r\n return null;\r\n }\r\n },\r\n\r\n view: {\r\n header: () => {\r\n const warningProvider = completionProviders.find(provider => provider.warningMessage() !== undefined);\r\n if (warningProvider) {\r\n return {\r\n component: CompletionWarningHeaderView,\r\n height: kHeaderHeight,\r\n message: warningProvider.warningMessage(),\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n },\r\n component: CiteCompletionItemView,\r\n key: entry => entry.id,\r\n width: kCiteCompletionWidth,\r\n height: 54,\r\n maxVisible: 5,\r\n hideNoResults: true,\r\n },\r\n };\r\n}\r\n\r\nfunction filterCitations(token: string, _completionProviders: CiteCompletionProvider[], citeSearch: CiteCompletionSearch, entries: CiteCompletionEntry[]) {\r\n // Empty query or DOI\r\n if (token.trim().length === 0 || hasDOI(token)) {\r\n return entries;\r\n }\r\n // Filter an exact match - if its exact match to an entry in the bibliography already, skip completion\r\n // Ignore any punctuation at the end of the token\r\n const tokenWithoutEndPunctuation = token.match(/.*[^,!?.:]/);\r\n const completionId = tokenWithoutEndPunctuation ? tokenWithoutEndPunctuation[0] : token;\r\n if (citeSearch.exactMatch(completionId)) {\r\n return [];\r\n }\r\n\r\n // Perform a search\r\n const searchResults = citeSearch.search(token, kMaxCitationCompletions);\r\n return searchResults || [];\r\n}\r\n\r\nfunction dedupe(entries: CiteCompletionEntry[]): CiteCompletionEntry[] {\r\n // Move the xrefs to the front to ensure that they are kept\r\n const orderedByType = entries.sort((a, b) => {\r\n if (a.type === b.type) {\r\n return 0;\r\n } else if (a.type === kCiteCompletionTypeXref) {\r\n return -1;\r\n } else {\r\n return 1;\r\n }\r\n });\r\n\r\n return uniqby(orderedByType, (entry: CiteCompletionEntry) => entry.id);\r\n}\r\n\r\nfunction sortEntries(entries: CiteCompletionEntry[]): CiteCompletionEntry[] {\r\n const dedupedSources = dedupe(entries);\r\n return dedupedSources.sort((a, b) => a.id.localeCompare(b.id));\r\n}\r\n\r\nfunction citationCompletions(ui: EditorUI, completionProviders: CiteCompletionProvider[], citeSearch: CiteCompletionSearch) {\r\n return (_text: string, context: EditorState | Transaction): CompletionResult<CiteCompletionEntry> | null => {\r\n\r\n const parsed = parseCitation(context);\r\n if (parsed) {\r\n return {\r\n token: parsed.token,\r\n pos: parsed.pos,\r\n offset: parsed.offset,\r\n completions: async () => {\r\n\r\n // If all providers have entries already loaded, we can use those and stream any updates\r\n const hasCurrentEntries = completionProviders.some(provider => provider.currentEntries());\r\n\r\n if (hasCurrentEntries) {\r\n\r\n let currentEntries: CiteCompletionEntry[] = [];\r\n completionProviders.forEach(provider => {\r\n const entries = provider.currentEntries();\r\n if (entries) {\r\n currentEntries = currentEntries || [];\r\n currentEntries.push(...entries);\r\n }\r\n });\r\n\r\n // Index the current Entries\r\n currentEntries = sortEntries(currentEntries);\r\n citeSearch.setEntries(currentEntries);\r\n\r\n // kick off another load which we'll stream in by setting entries\r\n let streamedEntries: CiteCompletionEntry[] | null = null;\r\n let loadedEntries: CiteCompletionEntry[] = [];\r\n let providerCount = 0;\r\n completionProviders.forEach(provider => {\r\n provider.streamEntries(context.doc, (entries: CiteCompletionEntry[]) => {\r\n providerCount = providerCount + 1;\r\n const updatedEntries = [...loadedEntries, ...entries];\r\n loadedEntries = sortEntries(updatedEntries);\r\n if (providerCount === completionProviders.length) {\r\n streamedEntries = loadedEntries;\r\n citeSearch.setEntries(loadedEntries);\r\n }\r\n });\r\n });\r\n\r\n // return stream\r\n return {\r\n items: currentEntries,\r\n stream: () => streamedEntries,\r\n };\r\n\r\n } else {\r\n // Otherwise, we need to wait and load the entries\r\n const promises = completionProviders.map(provider => provider.awaitEntries(context.doc));\r\n return Promise.all(promises).then(values => {\r\n const results: CiteCompletionEntry[] = [];\r\n\r\n values.forEach(value => results.push(...value));\r\n\r\n // Index the current Entries\r\n const sortedEntries = sortEntries(results);\r\n citeSearch.setEntries(sortedEntries);\r\n return sortedEntries;\r\n });\r\n }\r\n },\r\n decorations:\r\n parsed.token.length === 0\r\n ? DecorationSet.create(context.doc, [\r\n searchPlaceholderDecoration(context.selection.head, ui, ui.context.translateText('or DOI')),\r\n ])\r\n : undefined,\r\n };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\n// The title may contain spans to control case specifically - consequently, we need\r\n// to render the title as HTML rather than as a string\r\nexport const CiteCompletionItemView: React.FC<CiteCompletionEntry> = entry => {\r\n return (\r\n <CompletionItemView\r\n width={kCiteCompletionWidth - kCiteCompletionItemPadding}\r\n image={entry.image}\r\n imageAdornment={entry.imageAdornment}\r\n title={`@${entry.primaryText}`}\r\n detail={entry.secondaryText(kAuthorMaxChars - entry.primaryText.length)}\r\n subTitle={entry.detailText}\r\n htmlTitle={true}\r\n />\r\n );\r\n};\r\n\r\nconst CompletionWarningHeaderView: React.FC<CompletionHeaderProps> = props => {\r\n return (\r\n <div className={'pm-completion-cite-warning pm-pane-border-color'}>\r\n {props.ui.context.translateText(props.message || 'An unexpected warning occurred.')}\r\n </div>\r\n );\r\n};\r\n","/*\r\n * cite-highlight.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet } from 'prosemirror-view';\r\nimport { Schema } from 'prosemirror-model';\r\n\r\nimport { markHighlightPlugin, markHighlightDecorations } from '../../api/mark-highlight';\r\n\r\nconst key = new PluginKey<DecorationSet>('cite-highlight');\r\n\r\nexport function citeHighlightPlugin(schema: Schema) {\r\n return markHighlightPlugin(key, schema.marks.cite, (text, _attrs, markRange) => {\r\n return markHighlightDecorations(markRange, text, /([[\\]])/g, 'pm-link-text-color pm-fixedwidth-font');\r\n });\r\n}\r\n","/*\r\n * completion-detailed.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nimport './completion-detailed.css';\r\n\r\nexport interface CompletionItemDetailedViewProps extends WidgetProps {\r\n width: number;\r\n image?: string;\r\n heading: string;\r\n title: string;\r\n subTitle: string;\r\n}\r\n\r\nexport const CompletionItemDetailedView: React.FC<CompletionItemDetailedViewProps> = props => {\r\n const className = ['pm-completion-detailed-item'].concat(props.classes || []).join(' ');\r\n const style: React.CSSProperties = {\r\n width: props.width + 'px',\r\n ...props.style,\r\n };\r\n\r\n return (\r\n <div className={className} style={style}>\r\n <div className={'pm-completion-detailed-item-type'}>\r\n <img className={'pm-block-border-color'} src={props.image} draggable=\"false\"/>\r\n </div>\r\n <div className={'pm-completion-item-detailed-summary'}>\r\n <div className={'pm-completion-item-detailed-heading'}>{props.heading}</div>\r\n <div className={'pm-completion-item-detailed-title'}>{props.title}</div>\r\n <div className={'pm-completion-item-detailed-subTitle'}>{props.subTitle}</div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/*\r\n * cite-doi.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { Slice } from 'prosemirror-model';\r\n\r\nimport { findDOI } from '../../api/doi';\r\n\r\nimport { parseCitation, ParsedCitation } from './cite';\r\n\r\n// Parses the transation or state to determine whether the current position\r\n// represents a citation containing a DOI\r\nexport function doiFromEditingContext(context: EditorState | Transaction): ParsedCitation | undefined {\r\n \r\n const parsedCitation = parseCitation(context);\r\n if (parsedCitation) {\r\n const doi = findDOI(parsedCitation.token);\r\n if (doi) {\r\n return parsedCitation;\r\n }\r\n return undefined;\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\n// Parses a slice to determine whether the slice contains\r\n// a single DOI\r\nexport function doiFromSlice(context: EditorState | Transaction, slice: Slice): ParsedCitation | undefined {\r\n const parsedCitation = parseCitation(context);\r\n if (parsedCitation) {\r\n // Concatenate all the text and search for a DOI\r\n let text = '';\r\n slice.content.forEach(node => (text = text + node.textContent));\r\n if (text.length) {\r\n const doi = findDOI(text.trim());\r\n if (doi) {\r\n return { ...parsedCitation, token: doi };\r\n }\r\n }\r\n return undefined;\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n","/*\r\n * cite-completion_doi.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport {\r\n CompletionHandler,\r\n CompletionResult,\r\n performCompletionReplacement,\r\n} from '../../api/completion';\r\nimport { formatAuthors, formatIssuedDate } from '../../api/cite';\r\nimport { CSL, imageForType } from '../../api/csl';\r\nimport { CompletionItemDetailedView } from '../../api/widgets/completion-detailed';\r\nimport { BibliographyManager } from '../../api/bibliography/bibliography';\r\nimport { DOIServer } from '../../api/doi';\r\n\r\nimport { doiFromEditingContext } from './cite-doi';\r\nimport { insertCitation } from './cite';\r\nimport { kCitationCompleteScope } from './cite-completion';\r\nimport { EditorServer } from 'editor-types';\r\n\r\nconst kCompletionWidth = 400;\r\nconst kCompletionItemPadding = 10;\r\n\r\nexport function citationDoiCompletionHandler(\r\n ui: EditorUI,\r\n bibManager: BibliographyManager,\r\n server: EditorServer,\r\n): CompletionHandler<CSLEntry> {\r\n return {\r\n id: '56DA14DD-6E3A-4481-93A9-938DC00393A5',\r\n\r\n scope: kCitationCompleteScope,\r\n\r\n completions: citationDOICompletions(ui, server.doi, bibManager),\r\n\r\n replace(view: EditorView, pos: number, cslEntry: CSLEntry | null) {\r\n if (cslEntry && cslEntry.inBibliography) {\r\n // It's already in the bibliography, just write the id\r\n const tr = view.state.tr;\r\n const schema = view.state.schema;\r\n const id = schema.text(cslEntry.id, [schema.marks.cite_id.create()]);\r\n performCompletionReplacement(tr, pos, id);\r\n view.dispatch(tr);\r\n } else if (cslEntry) {\r\n // It isn't in the bibliography, show the insert cite dialog\r\n return insertCitation(view, cslEntry.csl.DOI || '', bibManager, pos, ui, server.pandoc, cslEntry.csl);\r\n }\r\n return Promise.resolve();\r\n },\r\n\r\n view: {\r\n component: CSLSourceView,\r\n key: cslEntry => cslEntry.csl.DOI,\r\n width: kCompletionWidth,\r\n height: 120,\r\n maxVisible: 5,\r\n hideNoResults: true,\r\n },\r\n };\r\n}\r\n\r\n\r\nfunction citationDOICompletions(ui: EditorUI, _server: DOIServer, bibliographyManager: BibliographyManager) {\r\n return (_text: string, context: EditorState | Transaction): CompletionResult<CSLEntry> | null => {\r\n const parsedDOI = doiFromEditingContext(context);\r\n if (parsedDOI) {\r\n return {\r\n token: parsedDOI.token,\r\n pos: parsedDOI.pos,\r\n offset: parsedDOI.offset,\r\n completions: async () => {\r\n // If we have a local source that matches this DOI, just show the\r\n // completion for the entry\r\n await bibliographyManager.loadLocal(ui, context.doc);\r\n const source = bibliographyManager.findDoiInLocalBibliography(parsedDOI.token);\r\n if (source) {\r\n return [\r\n {\r\n id: source.id,\r\n csl: source,\r\n inBibliography: true,\r\n image: imageForType(ui.images, source.type)[ui.prefs.darkMode() ? 1 : 0],\r\n formattedAuthor: formatAuthors(source.author, 50),\r\n formattedIssueDate: formatIssuedDate(source.issued),\r\n },\r\n ];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\ninterface CSLEntry {\r\n id: string;\r\n csl: CSL;\r\n inBibliography: boolean;\r\n image?: string;\r\n formattedAuthor: string;\r\n formattedIssueDate: string;\r\n}\r\n\r\nconst CSLSourceView: React.FC<CSLEntry> = cslEntry => {\r\n const csl = cslEntry.csl;\r\n return (\r\n <CompletionItemDetailedView\r\n width={kCompletionWidth - kCompletionItemPadding}\r\n image={cslEntry.image}\r\n heading={csl['short-container-title'] || csl.publisher || ''}\r\n title={csl.title || ''}\r\n subTitle={`${cslEntry.formattedAuthor} ${cslEntry.formattedIssueDate}` || ''}\r\n />\r\n );\r\n};\r\n","/*\r\n * cite-popup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet, EditorView } from 'prosemirror-view';\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { textPopupDecorationPlugin, TextPopupTarget } from '../../api/text-popup';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { Popup } from '../../api/widgets/popup';\r\nimport { BibliographyManager } from '../../api/bibliography/bibliography';\r\n\r\nimport './cite-popup.css';\r\nimport { urlForCitation } from '../../api/cite';\r\nimport { cslFromDoc } from '../../api/csl';\r\nimport { EditorServer } from 'editor-types';\r\n\r\nconst kMaxWidth = 400; // also in cite-popup.css\r\n\r\nexport function citePopupPlugin(schema: Schema, ui: EditorUI, bibMgr: BibliographyManager, server: EditorServer) {\r\n return textPopupDecorationPlugin({\r\n key: new PluginKey<DecorationSet>('cite-popup'),\r\n markType: schema.marks.cite_id,\r\n maxWidth: kMaxWidth,\r\n dismissOnEdit: true,\r\n makeLinksAccessible: true,\r\n createPopup: async (view: EditorView, target: TextPopupTarget, style: React.CSSProperties) => {\r\n await bibMgr.loadLocal(ui, view.state.doc);\r\n\r\n const citeId = target.text.replace(/^-@|^@/, '');\r\n\r\n // See if this will be handled by Xref\r\n let isXRef = false;\r\n const docPath = ui.context.getDocumentPath();\r\n if (docPath) {\r\n const xrefs = await server.xref.quartoXrefForId(docPath, citeId);\r\n isXRef = xrefs.refs.length > 0;\r\n }\r\n\r\n if (!isXRef) {\r\n const csl = cslFromDoc(view.state.doc);\r\n const source = bibMgr.findIdInLocalBibliography(citeId);\r\n\r\n if (source) {\r\n const previewHtml = await server.pandoc.citationHTML(\r\n ui.context.getDocumentPath(),\r\n JSON.stringify([source]),\r\n csl || null,\r\n );\r\n const finalHtml = ensureSafeLinkIsPresent(previewHtml, () => {\r\n const url = urlForCitation(source);\r\n if (url) {\r\n return {\r\n text: ui.context.translateText('[Link]'),\r\n url,\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n });\r\n\r\n return <CitePopup previewHtml={finalHtml} style={style} />;\r\n }\r\n }\r\n return null;\r\n },\r\n specKey: (target: TextPopupTarget) => {\r\n return `cite:${target.text}`;\r\n },\r\n });\r\n}\r\n\r\nconst kCiteHangingIndentClass = 'hanging-indent';\r\nconst kCiteLinkClassName = 'pm-cite-popup-link';\r\n\r\nfunction ensureSafeLinkIsPresent(html: string, getLinkData: () => { text: string; url: string } | undefined) {\r\n const parser = new window.DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n\r\n // remove id, class, and role from main div\r\n const rootDiv = doc.body.getElementsByClassName('references');\r\n if (rootDiv.length > 0) {\r\n const classNames = rootDiv[0].getAttribute('class');\r\n const hasHangingIndent = classNames?.match(`(^|\\\\s)${kCiteHangingIndentClass}($|\\\\s)`);\r\n\r\n rootDiv[0].removeAttribute('id');\r\n rootDiv[0].removeAttribute('role');\r\n\r\n if (hasHangingIndent && hasHangingIndent.length > 0) {\r\n rootDiv[0].setAttribute('class', kCiteHangingIndentClass);\r\n } else {\r\n rootDiv[0].removeAttribute('class');\r\n }\r\n }\r\n\r\n const linkElements = doc.body.getElementsByTagName('a');\r\n if (linkElements.length === 0) {\r\n const linkData = getLinkData();\r\n\r\n // There aren't any links, we should append one\r\n // (If links are present, we assume that we shouldn't add another)\r\n const paragraphs = doc.body.getElementsByTagName('p');\r\n if (paragraphs.length === 1 && linkData) {\r\n // The paragraph containing the formatted source\r\n const paragraph = paragraphs[0];\r\n\r\n // Create a link to append\r\n const linkElement = doc.createElement('a');\r\n linkElement.innerText = linkData.text;\r\n linkElement.setAttribute('href', linkData.url);\r\n linkElement.setAttribute('class', `${kCiteLinkClassName} pm-link-text-color`);\r\n setLinkTarget(linkElement);\r\n\r\n // Append the link to the formatted source\r\n paragraph.appendChild(linkElement);\r\n }\r\n } else {\r\n // There are links, ensure all of them have appropriate target information\r\n // tslint:disable-next-line: prefer-for-of\r\n for (let i = 0; i < linkElements.length; i++) {\r\n linkElements[i].setAttribute('class', `pm-link-text-color`);\r\n setLinkTarget(linkElements[i]);\r\n }\r\n }\r\n\r\n // Return the HTML omitting CR/LF - CR\r\n return doc.body.innerHTML.replace(/\\r?\\n|\\r/g, '');\r\n}\r\n\r\nfunction setLinkTarget(linkElement: HTMLAnchorElement) {\r\n linkElement.setAttribute('target', '_blank');\r\n linkElement.setAttribute('rel', 'noopener noreferrer');\r\n}\r\n\r\ninterface CitePopupProps extends WidgetProps {\r\n previewHtml: string;\r\n}\r\n\r\nconst CitePopup: React.FC<CitePopupProps> = props => {\r\n return (\r\n <Popup classes={['pm-cite-popup']} style={props.style}>\r\n <div className=\"pm-cite-popup-preview\">\r\n <div dangerouslySetInnerHTML={{ __html: props.previewHtml || '' }} />\r\n </div>\r\n </Popup>\r\n );\r\n};\r\n","/*\r\n * tag-input.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nimport { EditorUI } from '../ui-types';\r\n\r\nimport './tag-input.css';\r\nimport { TextInput } from './text';\r\nimport { kAlertTypeError } from 'editor-types';\r\n\r\n// Item representing a tag entry\r\n// The key remains stable even if the tag is edited\r\n// The displayPrefix will be displayed to the user, but removed when editing\r\nexport interface TagItem {\r\n key: string;\r\n displayText: string;\r\n displayPrefix: string;\r\n isEditable?: boolean;\r\n}\r\n\r\ninterface TagInputProps extends WidgetProps {\r\n tags: TagItem[];\r\n onTagDeleted: (tag: TagItem) => void;\r\n onTagChanged: (key: string, text: string) => void;\r\n onTagValidate?: (key: string, text: string) => string | null;\r\n ui: EditorUI;\r\n placeholder?: string;\r\n maxDisplayCharacters?: number;\r\n}\r\n\r\nexport const TagInput = React.forwardRef<HTMLDivElement, TagInputProps>((props, ref) => {\r\n return (\r\n <div style={props.style} className=\"pm-tag-input-container\" ref={ref}>\r\n {props.tags.length === 0 ? (\r\n <div className=\"pm-tag-input-placeholder\">\r\n <div className=\"pm-placeholder-text-color\">{props.placeholder}</div>\r\n </div>\r\n ) : (\r\n undefined\r\n )}\r\n {props.tags.map(tag => (\r\n <Tag\r\n key={tag.key}\r\n tag={tag}\r\n onTagDeleted={props.onTagDeleted}\r\n onTagChanged={props.onTagChanged}\r\n onTagValidate={props.onTagValidate}\r\n ui={props.ui}\r\n maxDisplayCharacters={props.maxDisplayCharacters}\r\n />\r\n ))}\r\n </div>\r\n );\r\n});\r\n\r\ninterface TagProps extends WidgetProps {\r\n tag: TagItem;\r\n onTagDeleted: (tag: TagItem) => void;\r\n onTagChanged: (key: string, text: string) => void;\r\n onTagValidate?: (key: string, text: string) => string | null;\r\n ui: EditorUI;\r\n maxDisplayCharacters?: number;\r\n}\r\n\r\nconst Tag: React.FC<TagProps> = props => {\r\n const [editing, setEditing] = React.useState<boolean>(false);\r\n const [editingText, setEditingText] = React.useState<string>(props.tag.displayText);\r\n const [displayText, setDisplayText] = React.useState<string>(props.tag.displayText);\r\n\r\n const editImage = React.useRef<HTMLImageElement>(null);\r\n const showingValidationError = React.useRef<boolean>(false);\r\n const restoreFocusAfterCancel = React.useRef<boolean>(false);\r\n\r\n // Anytime we begin editing, focus the text input\r\n const editTextInput = React.useRef<HTMLInputElement>(null);\r\n React.useLayoutEffect(() => {\r\n if (editing) {\r\n editTextInput.current?.focus();\r\n } else if (restoreFocusAfterCancel.current) {\r\n // Focus the edit image\r\n editImage.current?.focus();\r\n restoreFocusAfterCancel.current = false;\r\n }\r\n }, [editing]);\r\n\r\n // Click the delete icon\r\n const onDeleteClick = () => {\r\n props.onTagDeleted(props.tag);\r\n };\r\n\r\n // Enter or space while delete icon focused\r\n const onDeleteKeyPress = (e: React.KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'Enter':\r\n case ' ':\r\n e.preventDefault();\r\n e.stopPropagation();\r\n props.onTagDeleted(props.tag);\r\n break;\r\n }\r\n };\r\n\r\n // Click on the edit icon\r\n const onEditClick = () => {\r\n if (props.tag.isEditable) {\r\n setEditing(true);\r\n }\r\n };\r\n\r\n // Enter or space while edit icon is focused\r\n const onEditKeyPress = (e: React.KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'Enter':\r\n case ' ':\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setEditing(true);\r\n break;\r\n }\r\n };\r\n\r\n // Commit edits to the tag\r\n const commitTagEdit = () => {\r\n // Validate the input\r\n if (props.onTagValidate) {\r\n const validationMessage = props.onTagValidate(props.tag.key, editingText);\r\n if (validationMessage !== null) {\r\n showingValidationError.current = true;\r\n props.ui.dialogs\r\n .alert(\r\n props.ui.context.translateText('Validation Error'),\r\n props.ui.context.translateText(validationMessage),\r\n kAlertTypeError,\r\n )\r\n .then(() => {\r\n editTextInput.current?.focus();\r\n showingValidationError.current = false;\r\n });\r\n return;\r\n }\r\n }\r\n\r\n // Update the text\r\n setDisplayText(editingText);\r\n\r\n // Halt editing\r\n setEditing(false);\r\n\r\n // Notify of change\r\n props.onTagChanged(props.tag.key, editingText);\r\n\r\n // Focus the edit image\r\n editImage.current?.focus();\r\n };\r\n\r\n const cancelTagEdit = () => {\r\n // Halt editing\r\n setEditing(false);\r\n\r\n // Revert editing text\r\n setEditingText(displayText);\r\n\r\n // The editing control will lose focus, so we need to focus something else\r\n restoreFocusAfterCancel.current = true;\r\n };\r\n\r\n // When editing the tag, allow enter to accept the changes\r\n const handleEditKeyDown = (e: React.KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'Enter':\r\n // If we're validiating, don't commit.\r\n if (showingValidationError.current) {\r\n return;\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n commitTagEdit();\r\n break;\r\n case 'Escape':\r\n e.preventDefault();\r\n e.stopPropagation();\r\n cancelTagEdit();\r\n break;\r\n }\r\n };\r\n\r\n // When editing, clicking away from the tag will accept changes\r\n const handleEditBlur = () => {\r\n // If we're validiating, don't commit.\r\n if (showingValidationError.current) {\r\n return;\r\n }\r\n commitTagEdit();\r\n };\r\n\r\n const handleEditChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const edittedText = e.target.value;\r\n setEditingText(edittedText);\r\n };\r\n\r\n return (\r\n <div key={props.tag.displayText} className=\"pm-tag-input-tag pm-block-border-color\">\r\n <img\r\n src={props.ui.images.widgets?.tag_delete}\r\n onClick={onDeleteClick}\r\n onKeyPress={onDeleteKeyPress}\r\n className=\"pm-tag-input-delete-image\"\r\n tabIndex={0}\r\n draggable=\"false\"\r\n />\r\n <div className={`pm-tag-input-text ${props.tag.isEditable ? 'pm-tag-input-text-edittable' : undefined}`}>\r\n {!editing ? (\r\n <div onClick={onEditClick} className=\"pm-tag-input-text-raw pm-text-color\">\r\n {props.tag.displayPrefix}\r\n {props.maxDisplayCharacters ? \r\n displayText.length > props.maxDisplayCharacters ? displayText.substr(0, props.maxDisplayCharacters - 1) + '…' : displayText: \r\n displayText}\r\n </div>\r\n ) : (\r\n <TextInput\r\n width={props.maxDisplayCharacters ? \r\n `${Math.min(props.maxDisplayCharacters, editingText.length)}ch` :\r\n `${editingText.length}ch`\r\n }\r\n ref={editTextInput}\r\n className=\"pm-tag-input-text-edit\"\r\n value={editingText}\r\n onChange={handleEditChange}\r\n onKeyDown={handleEditKeyDown}\r\n onBlur={handleEditBlur}\r\n />\r\n )}\r\n </div>\r\n {props.tag.isEditable ? (\r\n <img\r\n src={props.ui.images.widgets?.tag_edit}\r\n className=\"pm-tag-input-edit-image\"\r\n onClick={onEditClick}\r\n onKeyPress={onEditKeyPress}\r\n tabIndex={0}\r\n ref={editImage}\r\n draggable=\"false\"\r\n />\r\n ) : (\r\n undefined\r\n )}\r\n </div>\r\n );\r\n};\r\n","/*\r\n * navigation-tree.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { CSSProperties } from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\r\n\r\nimport './navigation-tree.css';\r\n\r\n// Individual nodes and children of the Select Tree\r\nexport interface NavigationTreeNode {\r\n key: string;\r\n image?: string;\r\n name: string;\r\n type: string;\r\n children: NavigationTreeNode[];\r\n expanded?: boolean;\r\n}\r\n\r\ninterface NavigationTreeProps extends WidgetProps {\r\n height: number;\r\n nodes: NavigationTreeNode[];\r\n selectedNode: NavigationTreeNode;\r\n onSelectedNodeChanged: (node: NavigationTreeNode) => void;\r\n}\r\n\r\ninterface NavigationTreeItemProps extends ListChildComponentProps {\r\n data: {\r\n nodes: NavigationTreeNode[];\r\n selectedNode: NavigationTreeNode;\r\n onSelectedNodeChanged: (node: NavigationTreeNode) => void;\r\n showSelection: boolean;\r\n preventFocus: boolean;\r\n };\r\n}\r\n\r\n// Indent level for each level\r\nconst kNavigationTreeIndent = 8;\r\n\r\n// Select Tree is a single selection tree that is useful in\r\n// hierarchical navigation type contexts. It does not support\r\n// multiple selection and is generally not a well behaved tree\r\n// like you would use to navigate a hierarchical file system.\r\nexport const NavigationTree: React.FC<NavigationTreeProps> = props => {\r\n const style: CSSProperties = {\r\n height: props.height + 'px',\r\n ...props.style,\r\n };\r\n\r\n // The currently selected node should always be expanded\r\n const selectedNode = props.selectedNode;\r\n\r\n // Ensure that all the parents of the selected node are expanded\r\n const nodes = props.nodes;\r\n const currentNodePath = pathToNode(selectedNode, nodes);\r\n currentNodePath.forEach(node => (node.expanded = true));\r\n const selNode = nodes.find(n => n.key === selectedNode.key);\r\n if (selNode) {\r\n selNode.expanded = true;\r\n }\r\n const vizNodes = visibleNodes(props.nodes, props.selectedNode);\r\n\r\n // Ensure the item is scrolled into view\r\n const fixedList = React.useRef<FixedSizeList>(null);\r\n React.useEffect(() => {\r\n if (props.selectedNode) {\r\n vizNodes.find((value, index) => {\r\n if (value.key === selectedNode.key) {\r\n fixedList.current?.scrollToItem(index);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n });\r\n }\r\n });\r\n\r\n // Process keys to enable keyboard based navigation\r\n const processKey = (e: React.KeyboardEvent) => {\r\n const selected = props.selectedNode;\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (selected) {\r\n const next = stepNode(selectedNode, props.nodes, 1);\r\n props.onSelectedNodeChanged(next);\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n if (selected) {\r\n const previous = stepNode(selectedNode, props.nodes, -1);\r\n props.onSelectedNodeChanged(previous);\r\n }\r\n break;\r\n\r\n case 'PageDown':\r\n if (selected) {\r\n const next = stepNode(selectedNode, props.nodes, 4);\r\n props.onSelectedNodeChanged(next);\r\n }\r\n break;\r\n\r\n case 'PageUp':\r\n if (selected) {\r\n const previous = stepNode(selectedNode, props.nodes, -4);\r\n props.onSelectedNodeChanged(previous);\r\n }\r\n break;\r\n }\r\n };\r\n\r\n return (\r\n <div style={style} tabIndex={0} onKeyDown={processKey}>\r\n <FixedSizeList\r\n className=\"pm-navigation-tree\"\r\n height={props.height}\r\n width=\"100%\"\r\n itemCount={vizNodes.length}\r\n itemSize={28}\r\n itemData={{\r\n nodes: vizNodes,\r\n selectedNode: props.selectedNode,\r\n onSelectedNodeChanged: props.onSelectedNodeChanged,\r\n showSelection: true,\r\n preventFocus: true,\r\n }}\r\n ref={fixedList}\r\n >\r\n {NavigationTreeItem}\r\n </FixedSizeList>\r\n </div>\r\n );\r\n};\r\n\r\n// Renders each item\r\nconst NavigationTreeItem = (props: NavigationTreeItemProps) => {\r\n const data = props.data;\r\n const node: NavigationTreeNode = props.data.nodes[props.index];\r\n const path = pathToNode(node, data.nodes);\r\n const depth = path.length - 1;\r\n\r\n // Select the tree node\r\n const onClick = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n data.onSelectedNodeChanged(node);\r\n };\r\n\r\n // Whether this node is selected\r\n const selected = data.selectedNode.key === node.key;\r\n\r\n const indentLevel = depth;\r\n const indentStyle = {\r\n paddingLeft: indentLevel * kNavigationTreeIndent + 'px',\r\n };\r\n\r\n const selectedClassName = `${\r\n selected ? 'pm-selected-navigation-tree-item' : 'pm-navigation-tree-item'\r\n } pm-navigation-tree-node`;\r\n return (\r\n <div key={node.key} onClick={onClick} style={props.style}>\r\n <div className={selectedClassName} style={indentLevel > 0 ? indentStyle : undefined}>\r\n {node.image ? (\r\n <div className=\"pm-navigation-tree-node-image-div\">\r\n <img src={node.image} alt={node.name} className=\"pm-navigation-tree-node-image\" draggable=\"false\"/>\r\n </div>\r\n ) : null}\r\n <div className=\"pm-navigation-tree-node-label-div pm-text-color\">{node.name}</div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Indicates whether a given key is the identified node or one of its\r\n// children\r\nexport function containsChild(key: string, node: NavigationTreeNode): boolean {\r\n if (node.key === key) {\r\n return true;\r\n }\r\n\r\n for (const childNode of node.children) {\r\n const hasChild = containsChild(key, childNode);\r\n if (hasChild) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n// enumerate the nodes that lead to a selected node\r\nfunction pathToNode(node: NavigationTreeNode, nodes: NavigationTreeNode[]): NavigationTreeNode[] {\r\n const path: NavigationTreeNode[] = [];\r\n if (node) {\r\n for (const root of nodes) {\r\n if (root.key === node.key) {\r\n path.push(node);\r\n return path;\r\n }\r\n\r\n const childPath = pathToNode(node, root.children);\r\n if (childPath.length > 0) {\r\n path.push(root, ...childPath);\r\n return path;\r\n }\r\n }\r\n }\r\n return path;\r\n}\r\n\r\n// Creates an ordered flattened list of visible nodes in the\r\n// tree. Useful for incrementing through visible nodes :)\r\nfunction visibleNodes(nodes: NavigationTreeNode[], selectedNode: NavigationTreeNode) {\r\n const nodeList: NavigationTreeNode[][] = nodes.map(node => {\r\n if (node.expanded || node.key === selectedNode.key) {\r\n return [node].concat(visibleNodes(node.children, selectedNode));\r\n } else {\r\n return [node];\r\n }\r\n });\r\n return ([] as NavigationTreeNode[]).concat(...nodeList);\r\n}\r\n\r\n// Get the previous node for the current node\r\nfunction stepNode(node: NavigationTreeNode, allNodes: NavigationTreeNode[], increment: number): NavigationTreeNode {\r\n const nodes = visibleNodes(allNodes, node);\r\n const currentIndex = nodes.map(n => n.key).indexOf(node.key);\r\n const step = currentIndex + increment;\r\n if (step >= 0 && step < nodes.length - 1) {\r\n return nodes[step];\r\n } else if (step < 0) {\r\n return nodes[0];\r\n } else {\r\n return nodes[nodes.length - 1];\r\n }\r\n}\r\n","/*\r\n * dialog-buttons.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nimport { TextButton } from './button';\r\nimport React, { useState } from 'react';\r\n\r\nimport './dialog-buttons.css';\r\n\r\nexport interface DialogButtonsProps extends WidgetProps {\r\n okLabel: string;\r\n cancelLabel: string;\r\n onOk: () => void;\r\n onCancel: () => void;\r\n}\r\n\r\nexport const DialogButtons: React.FC<DialogButtonsProps> = props => {\r\n const [isRStudio] = useState(Object.getOwnPropertyNames(window).includes(\"rstudio\"));\r\n const buttonProps = (primary?: boolean) => {\r\n const bprops = {\r\n classes: isRStudio\r\n ? ['pm-text-button', 'pm-input-button', 'pm-default-theme', 'pm-dialog-buttons-button', 'pm-rstudio-button']\r\n : ['fluentui-button'],\r\n style: (isRStudio ? {} : {minWidth: '90px'}) as React.CSSProperties\r\n }\r\n if (primary) {\r\n if (isRStudio) {\r\n bprops.style.fontWeight = 600;\r\n } else {\r\n bprops.classes.push(\"fluentui-intent-primary\");\r\n bprops.style.marginLeft = '8px';\r\n }\r\n }\r\n return bprops;\r\n };\r\n\r\n const okButton = \r\n <TextButton\r\n title={props.okLabel}\r\n onClick={props.onOk}\r\n {...buttonProps(true)}\r\n />;\r\n\r\n const cancelButton = \r\n <TextButton\r\n title={props.cancelLabel}\r\n onClick={props.onCancel}\r\n {...buttonProps()}\r\n />\r\n \r\n return (\r\n <div className=\"pm-dialog-buttons-panel\" style={props.style}>\r\n {isRStudio \r\n ? <>{okButton}{cancelButton}</>\r\n : <>{cancelButton}{okButton}</>\r\n }\r\n </div>\r\n );\r\n};\r\n","// Panels get a variety of information as properties to permit them to search\r\n\r\nimport { WidgetProps } from '../../../api/widgets/react';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\n\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\nimport { BibliographySource, BibliographyManager } from '../../../api/bibliography/bibliography';\r\nimport { CSL, imageForType } from '../../../api/csl';\r\nimport { suggestCiteId, formatIssuedDate, formatAuthors } from '../../../api/cite';\r\n\r\n// citations and add them\r\nexport interface CitationSourcePanelProps extends WidgetProps {\r\n ui: EditorUI;\r\n height: number;\r\n\r\n searchTerm: string;\r\n onSearchTermChanged: (term: string) => void;\r\n onExecuteSearch: (term: string) => void;\r\n\r\n citations: CitationListEntry[];\r\n citationsToAdd: CitationListEntry[];\r\n\r\n onAddCitation: (citation: CitationListEntry) => void;\r\n onRemoveCitation: (citation: CitationListEntry) => void;\r\n onConfirm: VoidFunction;\r\n\r\n selectedIndex: number;\r\n onSelectedIndexChanged: (index: number) => void;\r\n\r\n status: CitationSourceListStatus;\r\n statusMessage: string;\r\n\r\n warningMessage: string;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n ref: React.Ref<any>;\r\n}\r\n\r\n// Citation Panels Providers are the core element of ths dialog. Each provider provides\r\n// the main panel UI as well as the tree to display when the panel is displayed.\r\nexport interface CitationSourcePanelProvider {\r\n key: string;\r\n panel: React.FC<CitationSourcePanelProps>;\r\n treeNode(): NavigationTreeNode;\r\n placeHolderMessage?: string;\r\n progressMessage?: string;\r\n warningMessage?: string;\r\n typeAheadSearch?: (\r\n term: string,\r\n selectedNode: NavigationTreeNode,\r\n existingCitationIds: string[],\r\n onResults: (result: CitationSourcePanelSearchResult) => void\r\n ) => void;\r\n search?: (\r\n term: string,\r\n selectedNode: NavigationTreeNode,\r\n existingCitationIds: string[],\r\n ) => Promise<CitationSourcePanelSearchResult>;\r\n}\r\n\r\nexport interface CitationSourcePanelSearchResult {\r\n citations: CitationListEntry[];\r\n status: CitationSourceListStatus;\r\n statusMessage: string;\r\n}\r\n\r\nexport interface CitationListEntry extends BibliographySourceProvider {\r\n id: string;\r\n isIdEditable: boolean;\r\n image?: string;\r\n imageAdornment?: string;\r\n type: string;\r\n title: string;\r\n authors: (width: number) => string;\r\n date: string;\r\n journal: string | undefined;\r\n doi?: string;\r\n}\r\n\r\nexport interface BibliographySourceProvider {\r\n id: string;\r\n isSlowGeneratingBibliographySource: boolean;\r\n toBibliographySource: (id: string) => Promise<BibliographySource>;\r\n}\r\n\r\nexport enum CitationSourceListStatus {\r\n default,\r\n inProgress,\r\n noResults,\r\n error,\r\n}\r\n\r\nexport function errorForStatus(ui: EditorUI, status: string, providerName: string) {\r\n return status === 'nohost'\r\n ? ui.context.translateText(`Unable to search ${providerName}. Please check your network connection and try again.`)\r\n : ui.context.translateText(`An error occurred while searching ${providerName}.`);\r\n}\r\n\r\n\r\nexport function matchExistingSourceCitationListEntry(doi: string, existingIds: string[], ui: EditorUI, bibliographyManager: BibliographyManager) {\r\n\r\n const localSources = bibliographyManager.localSources();\r\n const existingSource = localSources.find(source => {\r\n return source.DOI?.toLowerCase() === doi.toLowerCase();\r\n });\r\n if (existingSource) {\r\n return existingSourceToCitationListEntry(existingSource, existingIds, ui);\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction existingSourceToCitationListEntry(csl: CSL, existingIds: string[], ui: EditorUI): CitationListEntry {\r\n const providerKey = 'pubmed';\r\n return {\r\n id: csl.id || suggestCiteId(existingIds, csl),\r\n isIdEditable: false,\r\n title: csl.title || '',\r\n doi: csl.DOI,\r\n type: '',\r\n date: formatIssuedDate(csl.issued) || '',\r\n journal: csl[\"container-title\"],\r\n authors: (length: number) => {\r\n return formatAuthors(csl.author || [], length);\r\n },\r\n image: imageForType(ui.images, csl.type)[ui.prefs.darkMode() ? 1 : 0],\r\n toBibliographySource: async (finalId: string) => {\r\n // Generate CSL using the DOI\r\n return { ...csl, id: finalId, providerKey };\r\n },\r\n isSlowGeneratingBibliographySource: true,\r\n };\r\n}","/*\r\n * insert_citation-source-panel-list.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport React from 'react';\r\n\r\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\nimport { WidgetProps } from '../../../api/widgets/react';\r\n\r\nimport { CitationListEntry, CitationSourceListStatus } from './insert_citation-source-panel';\r\n\r\nimport './insert_citation-source-panel-list.css';\r\n\r\nexport interface CitationSourcePanelListItemData {\r\n citations: CitationListEntry[];\r\n citationsToAdd: CitationListEntry[];\r\n selectedIndex: number;\r\n onSelectedIndexChanged: (index: number) => void;\r\n onAddCitation: (source: CitationListEntry) => void;\r\n onRemoveCitation: (source: CitationListEntry) => void;\r\n onConfirm: () => void;\r\n ui: EditorUI;\r\n showSeparator?: boolean;\r\n showSelection?: boolean;\r\n preventFocus?: boolean;\r\n}\r\n\r\nexport interface CitationSourceListProps extends WidgetProps {\r\n height: number;\r\n citations: CitationListEntry[];\r\n citationsToAdd: CitationListEntry[];\r\n selectedIndex: number;\r\n onSelectedIndexChanged: (index: number) => void;\r\n onAddCitation: (citation: CitationListEntry) => void;\r\n onRemoveCitation: (citation: CitationListEntry) => void;\r\n onConfirm: VoidFunction;\r\n focusPrevious?: () => void;\r\n\r\n itemProvider: (props: ListChildComponentProps) => JSX.Element;\r\n itemHeight: number;\r\n\r\n status: CitationSourceListStatus;\r\n statusMessage: string;\r\n ui: EditorUI;\r\n}\r\n\r\nexport const CitationSourceList = React.forwardRef<HTMLDivElement, CitationSourceListProps>(\r\n (props: CitationSourceListProps, ref) => {\r\n const fixedList = React.useRef<FixedSizeList>(null);\r\n\r\n // Item height and consequently page height\r\n const itemsPerPage = Math.floor(props.height / props.itemHeight);\r\n\r\n // Update selected item index (this will manage bounds)\r\n const handleIncrementIndex = (event: React.KeyboardEvent, increment: number, index: number) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n if (props.citations && index > -1) {\r\n const maxIndex = props.citations.length - 1;\r\n const newIndex = Math.min(Math.max(0, index + increment), maxIndex);\r\n props.onSelectedIndexChanged(newIndex);\r\n }\r\n };\r\n\r\n // Toggle the currently selected item as added or removed\r\n const handleAddItem = (event: React.KeyboardEvent) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n const currentCitation = props.selectedIndex > -1 ? props.citations[props.selectedIndex] : undefined;\r\n if (currentCitation) {\r\n props.onAddCitation(currentCitation);\r\n }\r\n };\r\n\r\n const handleListKeyDown = (event: React.KeyboardEvent) => {\r\n const currentIndex = props.selectedIndex;\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n if (currentIndex === 0 && props.focusPrevious) {\r\n props.focusPrevious();\r\n } else {\r\n handleIncrementIndex(event, -1, currentIndex);\r\n }\r\n break;\r\n\r\n case 'ArrowDown':\r\n handleIncrementIndex(event, 1, currentIndex);\r\n break;\r\n\r\n case 'PageDown':\r\n handleIncrementIndex(event, itemsPerPage, currentIndex);\r\n break;\r\n\r\n case 'PageUp':\r\n handleIncrementIndex(event, -itemsPerPage, currentIndex);\r\n break;\r\n\r\n case 'Enter':\r\n handleAddItem(event);\r\n props.onConfirm();\r\n break;\r\n case ' ':\r\n handleAddItem(event);\r\n break;\r\n }\r\n };\r\n\r\n // Ensure the item is scrolled into view\r\n React.useEffect(() => {\r\n if (props.selectedIndex > -1) {\r\n fixedList.current?.scrollToItem(props.selectedIndex);\r\n }\r\n });\r\n\r\n // Focus / Blur are used to track whether to show selection highlighting\r\n const onFocus = (event: React.FocusEvent<HTMLDivElement>) => {\r\n if (props.selectedIndex < 0) {\r\n props.onSelectedIndexChanged(0);\r\n }\r\n event.stopPropagation();\r\n event.preventDefault();\r\n };\r\n\r\n const onBlur = (event: React.FocusEvent<HTMLDivElement>) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n };\r\n\r\n const classes = ['pm-insert-citation-source-panel-list-container'].concat(props.classes || []).join(' ');\r\n switch (props.status) {\r\n case CitationSourceListStatus.default:\r\n if (props.citations.length > 0) {\r\n return (\r\n <div\r\n tabIndex={0}\r\n onKeyDown={handleListKeyDown}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n ref={ref}\r\n className={classes}\r\n >\r\n <FixedSizeList\r\n className=\"pm-insert-citation-source-panel-list\"\r\n height={props.height}\r\n width=\"100%\"\r\n itemCount={props.citations.length}\r\n itemSize={props.itemHeight}\r\n itemData={{\r\n selectedIndex: props.selectedIndex,\r\n onSelectedIndexChanged: props.onSelectedIndexChanged,\r\n citations: props.citations,\r\n citationsToAdd: props.citationsToAdd,\r\n onAddCitation: props.onAddCitation,\r\n onRemoveCitation: props.onRemoveCitation,\r\n onConfirm: props.onConfirm,\r\n showSeparator: true,\r\n showSelection: true,\r\n preventFocus: true,\r\n ui: props.ui,\r\n }}\r\n ref={fixedList}\r\n >\r\n {props.itemProvider}\r\n </FixedSizeList>\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div className={classes} style={{ height: props.height + 'px' }} ref={ref}>\r\n <div className=\"pm-insert-citation-source-panel-list-noresults-text\">{props.statusMessage}</div>\r\n </div>\r\n );\r\n }\r\n\r\n case CitationSourceListStatus.inProgress:\r\n return (\r\n <div className={classes} style={{ height: props.height + 'px' }} ref={ref}>\r\n <div className=\"pm-insert-citation-source-panel-list-noresults-text\">\r\n {!props.ui.prefs.darkMode \r\n ? <img src={props.ui.images.search_progress} className=\"pm-insert-citation-source-panel-list-progress\" draggable=\"false\"/>\r\n : null\r\n }\r\n {props.statusMessage}\r\n </div>\r\n </div>\r\n );\r\n\r\n case CitationSourceListStatus.noResults:\r\n return (\r\n <div className={classes} style={{ height: props.height + 'px' }} ref={ref}>\r\n <div className=\"pm-insert-citation-source-panel-list-noresults-text\">{props.statusMessage}</div>\r\n </div>\r\n );\r\n\r\n case CitationSourceListStatus.error:\r\n return (\r\n <div className={classes} style={{ height: props.height + 'px' }} ref={ref}>\r\n <div className=\"pm-insert-citation-source-panel-list-noresults-text\">\r\n {props.statusMessage || props.ui.context.translateText('An error occurred.')}\r\n </div>\r\n </div>\r\n );\r\n\r\n case CitationSourceListStatus.default:\r\n default:\r\n if (props.citations.length > 0) {\r\n return (\r\n <div\r\n tabIndex={0}\r\n onKeyDown={handleListKeyDown}\r\n onFocus={onFocus}\r\n onBlur={onBlur}\r\n ref={ref}\r\n className={classes}\r\n >\r\n <FixedSizeList\r\n className=\"pm-insert-citation-source-panel-list\"\r\n height={props.height}\r\n width=\"100%\"\r\n itemCount={props.citations.length}\r\n itemSize={props.itemHeight}\r\n itemData={{\r\n selectedIndex: props.selectedIndex,\r\n onSelectedIndexChanged: props.onSelectedIndexChanged,\r\n citations: props.citations,\r\n citationsToAdd: props.citationsToAdd,\r\n onAddCitation: props.onAddCitation,\r\n onRemoveCitation: props.onRemoveCitation,\r\n onConfirm: props.onConfirm,\r\n showSeparator: true,\r\n showSelection: true,\r\n preventFocus: true,\r\n ui: props.ui,\r\n }}\r\n ref={fixedList}\r\n >\r\n {props.itemProvider}\r\n </FixedSizeList>\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div className={classes} style={{ height: props.height + 'px' }} ref={ref}>\r\n <div className=\"pm-insert-citation-source-panel-list-noresults-text\">{props.statusMessage}</div>\r\n </div>\r\n );\r\n }\r\n }\r\n },\r\n);\r\n","/*\r\n * insert_citation-source-panel-list-item.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\nimport { ListChildComponentProps } from 'react-window';\r\n\r\nimport { OutlineButton } from '../../../api/widgets/button';\r\n\r\nimport { CitationSourcePanelListItemData } from './insert_citation-source-panel-list';\r\n\r\nimport './insert_citation-source-panel-list-item.css';\r\n\r\nexport const CitationSourcePanelListItem = (props: ListChildComponentProps) => {\r\n const citationListData: CitationSourcePanelListItemData = props.data;\r\n\r\n const citationEntry = citationListData.citations[props.index];\r\n\r\n // NOTE: Could consider making this length dynamic to account for item width\r\n const maxIdLength = 30;\r\n const id =\r\n citationEntry.id.length > maxIdLength ? `@${citationEntry.id.substr(0, maxIdLength - 1)}…` : `@${citationEntry.id}`;\r\n const authorWidth = Math.max(10, 50 - id.length);\r\n\r\n // Wheher this item is selected\r\n const selected = citationListData.showSelection && props.index === citationListData.selectedIndex;\r\n\r\n // Whether this item is already in the list of items to add\r\n // If the item is selected, it is always a candidate to be added explicitly to the list\r\n const alreadyAdded = citationListData.citationsToAdd.map(src => src.id).includes(citationEntry.id) && !selected;\r\n\r\n const onButtonClick = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n if (alreadyAdded) {\r\n citationListData.onRemoveCitation(citationEntry);\r\n } else {\r\n citationListData.onAddCitation(citationEntry);\r\n }\r\n };\r\n\r\n const onItemClick = (e: React.MouseEvent) => {\r\n if (e.shiftKey) {\r\n citationListData.onAddCitation(citationEntry);\r\n } else {\r\n citationListData.onSelectedIndexChanged(props.index);\r\n }\r\n };\r\n\r\n const onDoubleClick = () => {\r\n citationListData.onAddCitation(citationEntry);\r\n citationListData.onConfirm();\r\n };\r\n\r\n let authors = \"\";\r\n try {\r\n authors = citationEntry.authors(authorWidth);\r\n } catch (er) {\r\n // Failed to format the authors, just ignore this.\r\n }\r\n\r\n return (\r\n <div\r\n onMouseDown={onItemClick}\r\n onDoubleClick={onDoubleClick}\r\n className=\"pm-insert-citation-source-panel-item\"\r\n style={props.style}\r\n >\r\n <div className={`pm-insert-citation-source-panel-item-border ${selected ? 'pm-list-item-selected' : ''}`}>\r\n <div className=\"pm-insert-citation-source-panel-item-container\">\r\n <div className=\"pm-insert-citation-source-panel-item-type\">\r\n {citationEntry.imageAdornment ? (\r\n <img\r\n className=\"pm-insert-citation-source-panel-item-adorn pm-block-border-color pm-background-color\"\r\n src={citationEntry.imageAdornment}\r\n draggable=\"false\"\r\n />\r\n ) : (\r\n undefined\r\n )}\r\n <img\r\n className=\"pm-insert-citation-source-panel-item-icon pm-block-border-color\"\r\n src={citationEntry.image}\r\n draggable=\"false\"\r\n />\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-summary\">\r\n <div className=\"pm-insert-citation-source-panel-item-id\">\r\n <div className=\"pm-insert-citation-source-panel-item-title pm-fixedwidth-font pm-text-color\">{id}</div>\r\n <div className=\"pm-insert-citation-source-panel-item-detail pm-text-color\">\r\n {authors} {citationEntry.date}\r\n </div>\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-subtitle-text pm-text-color\">\r\n {citationEntry.title}\r\n </div>\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-button\">\r\n <OutlineButton\r\n tabIndex={citationListData.preventFocus ? -1 : 0}\r\n style={{ width: '24px', height: '24px' }}\r\n title={alreadyAdded ? '-' : '+'}\r\n onClick={onButtonClick}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/*\r\n * insert_citation-source-panel-typeahead-search.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\nimport { TextInput } from '../../../api/widgets/text';\r\nimport { WidgetProps } from '../../../api/widgets/react';\r\n\r\nimport './insert_citation-source-panel-typeahead-search.css';\r\nimport { CitationSourceList } from './insert_citation-source-panel-list';\r\nimport { CitationListEntry, CitationSourceListStatus } from './insert_citation-source-panel';\r\nimport { CitationSourcePanelListItem } from './insert_citation-source-panel-list-item';\r\n\r\nexport interface CitationSourceTypeaheadSearchPanelProps extends WidgetProps {\r\n height: number;\r\n citations: CitationListEntry[];\r\n citationsToAdd: CitationListEntry[];\r\n searchTerm: string;\r\n onSearchTermChanged: (searchTerm: string) => void;\r\n selectedIndex: number;\r\n onSelectedIndexChanged: (index: number) => void;\r\n onAddCitation: (citation: CitationListEntry) => void;\r\n onRemoveCitation: (citation: CitationListEntry) => void;\r\n onConfirm: VoidFunction;\r\n status: CitationSourceListStatus;\r\n statusMessage: string;\r\n ui: EditorUI;\r\n}\r\n\r\n// Height of textbox including border\r\nconst kTextBoxHeight = 30;\r\n\r\nexport const CitationSourceTypeheadSearchPanel = React.forwardRef<\r\n HTMLDivElement,\r\n CitationSourceTypeaheadSearchPanelProps\r\n>((props: CitationSourceTypeaheadSearchPanelProps, ref) => {\r\n const listContainer = React.useRef<HTMLDivElement>(null);\r\n\r\n // Search the user search terms\r\n const searchChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const search = e.target.value;\r\n props.onSearchTermChanged(search);\r\n };\r\n\r\n // Perform first load tasks\r\n const searchBoxRef = React.useRef<HTMLInputElement>(null);\r\n\r\n // If the user arrows down in the search text box, advance to the list of items\r\n const handleTextKeyDown = (event: React.KeyboardEvent) => {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n listContainer.current?.focus();\r\n break;\r\n }\r\n };\r\n\r\n // Used to focus the search box\r\n const focusSearch = () => {\r\n searchBoxRef.current?.focus();\r\n };\r\n\r\n const addCitation = (citation: CitationListEntry) => {\r\n // Add the citation and reset selection\r\n props.onAddCitation(citation);\r\n focusSearch();\r\n };\r\n\r\n // On focus, select the search term for overtype\r\n const searchBoxFocused = (event: React.FocusEvent<HTMLInputElement>) => {\r\n event.target.select();\r\n };\r\n\r\n return (\r\n <div\r\n style={props.style}\r\n className=\"pm-insert-citation-panel-search pm-block-border-color pm-background-color\"\r\n ref={ref}\r\n tabIndex={-1}\r\n onFocus={focusSearch}\r\n >\r\n <div className=\"pm-insert-citation-search-panel-textbox-container\">\r\n <TextInput\r\n width=\"100%\"\r\n iconAdornment={props.ui.images.search}\r\n tabIndex={0}\r\n className=\"pm-insert-citation-panel-search-textbox pm-block-border-color\"\r\n placeholder={props.ui.context.translateText('Search for citation')}\r\n onKeyDown={handleTextKeyDown}\r\n onChange={searchChanged}\r\n onFocus={searchBoxFocused}\r\n value={props.searchTerm}\r\n ref={searchBoxRef}\r\n />\r\n </div>\r\n <CitationSourceList\r\n height={props.height - kTextBoxHeight}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n onConfirm={props.onConfirm}\r\n onAddCitation={addCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n focusPrevious={focusSearch}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n itemHeight={64}\r\n itemProvider={CitationSourcePanelListItem}\r\n ui={props.ui}\r\n ref={listContainer}\r\n />\r\n </div>\r\n );\r\n});\r\n","/*\r\n * insert_citation-panel-bibliography.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\nimport uniqby from 'lodash.uniqby';\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\nimport {\r\n BibliographyManager,\r\n BibliographyCollection,\r\n BibliographySource,\r\n} from '../../../api/bibliography/bibliography';\r\nimport { kZoteroProviderKey } from '../../../api/bibliography/bibliography-provider_zotero';\r\nimport { kLocalBibliographyProviderKey } from '../../../api/bibliography/bibliography-provider_local';\r\nimport { formatAuthors, formatIssuedDate, createUniqueCiteId } from '../../../api/cite';\r\nimport {\r\n CitationSourcePanelProvider,\r\n CitationSourcePanelProps,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n CitationSourcePanelSearchResult,\r\n} from './insert_citation-source-panel';\r\nimport { CitationSourceTypeheadSearchPanel } from './insert_citation-source-panel-typeahead-search';\r\nimport { imageForType } from '../../../api/csl';\r\n\r\nimport './insert_citation-source-panel-bibliography.css';\r\n\r\nconst kAllLocalSourcesRootNodeType = 'All Local Sources';\r\n\r\nexport function bibliographySourcePanel(\r\n _doc: ProsemirrorNode,\r\n ui: EditorUI,\r\n bibliographyManager: BibliographyManager,\r\n): CitationSourcePanelProvider {\r\n const providers = bibliographyManager.localProviders();\r\n const providerNodes: { [key: string]: NavigationTreeNode } = {};\r\n\r\n // For each of the providers, discover their collections\r\n providers\r\n .filter(provider => provider.isEnabled())\r\n .forEach(provider => {\r\n const getFolder = (prov: string, hasParent: boolean) => {\r\n return folderImageForProvider(prov, hasParent, ui);\r\n };\r\n\r\n // Get the response which could be items or could be a stream\r\n const collectionSpecs = provider.collections();\r\n // Note the temporary collections\r\n providerNodes[provider.key] = {\r\n key: provider.key,\r\n name: ui.context.translateText(provider.name),\r\n type: provider.key,\r\n image: rootImageForProvider(provider.key, ui),\r\n children: toTree(provider.key, collectionSpecs, getFolder),\r\n expanded: true,\r\n };\r\n });\r\n\r\n return {\r\n key: '17373086-77FE-410F-A319-33E314482125',\r\n panel: BibligraphySourcePanel,\r\n treeNode: () => {\r\n return {\r\n key: 'My Sources',\r\n name: ui.context.translateText('My Sources'),\r\n image: ui.images.citations?.local_sources,\r\n type: kAllLocalSourcesRootNodeType,\r\n children: Object.values(providerNodes),\r\n expanded: true,\r\n };\r\n },\r\n warningMessage: bibliographyManager.warning(),\r\n typeAheadSearch: (searchTerm: string, selectedNode: NavigationTreeNode, existingCitationIds: string[], onResults: (result: CitationSourcePanelSearchResult) => void) => {\r\n const providerForNode = (node: NavigationTreeNode): string | undefined => {\r\n // The node could be the root node, no provider\r\n return node.type === kAllLocalSourcesRootNodeType ? undefined : node.type;\r\n };\r\n\r\n const collectionKeyForNode = (node: NavigationTreeNode): string | undefined => {\r\n // The node could be a provider root or a collection\r\n return node.type !== kAllLocalSourcesRootNodeType &&\r\n node.key !== kZoteroProviderKey &&\r\n node.key !== kLocalBibliographyProviderKey\r\n ? node.key\r\n : undefined;\r\n };\r\n const sources = bibliographyManager.search(\r\n searchTerm,\r\n providerForNode(selectedNode),\r\n collectionKeyForNode(selectedNode),\r\n );\r\n const uniqueSources = uniqby(sources, source => source.id);\r\n\r\n const citations = toCitationListEntries(uniqueSources, existingCitationIds, ui);\r\n onResults({\r\n citations,\r\n status: citations.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults,\r\n statusMessage: citations.length > 0 ? '' : ui.context.translateText('No items'),\r\n });\r\n },\r\n };\r\n}\r\n\r\nexport const BibligraphySourcePanel = React.forwardRef<HTMLDivElement, CitationSourcePanelProps>(\r\n (props: CitationSourcePanelProps, ref) => {\r\n return (\r\n <>\r\n {props.warningMessage ? (\r\n <div className=\"pm-insert-bibliography-source-panel-warning pm-block-border-color\">\r\n {props.warningMessage}\r\n </div>\r\n ) : (\r\n undefined\r\n )}\r\n <CitationSourceTypeheadSearchPanel\r\n height={props.height}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n searchTerm={props.searchTerm}\r\n onSearchTermChanged={props.onSearchTermChanged}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n onAddCitation={props.onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n onConfirm={props.onConfirm}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n ui={props.ui}\r\n ref={ref}\r\n />\r\n </>\r\n );\r\n },\r\n);\r\n\r\nfunction rootImageForProvider(providerKey: string, ui: EditorUI) {\r\n switch (providerKey) {\r\n case kZoteroProviderKey:\r\n return ui.images.citations?.zotero_root;\r\n case kLocalBibliographyProviderKey:\r\n return ui.images.citations?.bibligraphy;\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction folderImageForProvider(providerKey: string, hasParent: boolean, ui: EditorUI) {\r\n switch (providerKey) {\r\n case kZoteroProviderKey:\r\n if (hasParent) {\r\n return ui.images.citations?.zotero_collection;\r\n } else {\r\n return ui.images.citations?.zotero_library;\r\n }\r\n case kLocalBibliographyProviderKey:\r\n return ui.images.citations?.bibligraphy_folder;\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\n// Takes a flat data structure of containers and turns it into a hierarchical\r\n// tree structure for display as TreeNodes.\r\nfunction toTree(\r\n type: string,\r\n containers: BibliographyCollection[],\r\n folderImage?: (providerKey: string, hasParent: boolean) => string | undefined,\r\n): NavigationTreeNode[] {\r\n const treeMap: { [id: string]: NavigationTreeNode } = {};\r\n const rootNodes: NavigationTreeNode[] = [];\r\n\r\n // Sort the folder in alphabetical order at each level of the tree\r\n containers\r\n .sort((a, b) => {\r\n // For Zotero collection, sort the 'My Library to the top always'\r\n if (a.provider === kZoteroProviderKey && a.key === '1') {\r\n return -1;\r\n }\r\n return a.name.localeCompare(b.name);\r\n })\r\n .forEach(container => {\r\n // First see if we have an existing node for this item\r\n // A node could already be there if we had to insert a 'placeholder'\r\n // node to contain the node's children before we encountered the node.\r\n const currentNode = treeMap[container.key] || { key: container.key, name: container.name, children: [], type };\r\n\r\n // Always set its name to be sure we fill this in when we encounter it\r\n const hasParent = container.parentKey !== undefined && container.parentKey.length > 0;\r\n currentNode.name = container.name;\r\n currentNode.image = folderImage ? folderImage(container.provider, hasParent) : undefined;\r\n\r\n if (container.parentKey) {\r\n let parentNode = treeMap[container.parentKey];\r\n if (!parentNode) {\r\n // This is a placeholder node - we haven't yet encountered this child's parent\r\n // so we insert this to hold the child. Once we encounter the true parent node,\r\n // we will fix up the values in this placeholder node.\r\n parentNode = { key: container.parentKey, name: '', children: [], type };\r\n treeMap[container.parentKey] = parentNode;\r\n }\r\n parentNode.children?.push(currentNode);\r\n } else {\r\n rootNodes.push(currentNode);\r\n }\r\n treeMap[container.key] = currentNode;\r\n });\r\n return rootNodes;\r\n}\r\n\r\nfunction toCitationListEntries(\r\n sources: BibliographySource[],\r\n existingCitationIds: string[],\r\n ui: EditorUI,\r\n): CitationListEntry[] {\r\n const useBetterBibTex = ui.prefs.zoteroUseBetterBibtex();\r\n return sources.map(source => {\r\n return {\r\n id:\r\n source.providerKey === kLocalBibliographyProviderKey || useBetterBibTex\r\n ? source.id\r\n : createUniqueCiteId(existingCitationIds, source.id),\r\n isIdEditable: source.providerKey === kZoteroProviderKey && !useBetterBibTex,\r\n type: source.type,\r\n title: source.title || '',\r\n providerKey: source.providerKey,\r\n date: formatIssuedDate(source.issued),\r\n journal: '',\r\n image: imageForType(ui.images, source.type)[ui.prefs.darkMode() ? 1 : 0],\r\n imageAdornment: source.providerKey === kZoteroProviderKey ? ui.images.citations?.zoteroOverlay : undefined,\r\n authors: (length: number) => {\r\n return formatAuthors(source.author, length);\r\n },\r\n toBibliographySource: (finalId: string) => {\r\n return Promise.resolve({ ...source, id: finalId, providerKey: source.providerKey });\r\n },\r\n isSlowGeneratingBibliographySource: false,\r\n };\r\n });\r\n}\r\n","/*\r\n * insert_citation-source-panel-list-item.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\nimport { ListChildComponentProps } from 'react-window';\r\n\r\nimport { OutlineButton } from '../../../api/widgets/button';\r\n\r\nimport { CitationSourcePanelListItemData } from './insert_citation-source-panel-list';\r\n\r\nimport './insert_citation-source-panel-list-item-detailed.css';\r\n\r\nexport const CitationSourcePanelListItemDetailed = (props: ListChildComponentProps) => {\r\n const citationListData: CitationSourcePanelListItemData = props.data;\r\n\r\n const citationEntry = citationListData.citations[props.index];\r\n\r\n // Wheher this item is selected\r\n const selected = citationListData.showSelection && props.index === citationListData.selectedIndex;\r\n\r\n // Whether this item is already in the list of items to add\r\n // If the item is selected, it is always a candidate to be added explicitly to the list\r\n const alreadyAdded = citationListData.citationsToAdd.map(src => src.id).includes(citationEntry.id) && !selected;\r\n\r\n const onButtonClick = (event: React.MouseEvent) => {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n\r\n if (alreadyAdded) {\r\n citationListData.onRemoveCitation(citationEntry);\r\n } else {\r\n citationListData.onAddCitation(citationEntry);\r\n }\r\n };\r\n\r\n const onItemClick = () => {\r\n citationListData.onSelectedIndexChanged(props.index);\r\n };\r\n\r\n const onDoubleClick = () => {\r\n citationListData.onAddCitation(citationEntry);\r\n citationListData.onConfirm();\r\n };\r\n\r\n const secondLine = [citationEntry.date, citationEntry.journal].filter(text => text).join(', ');\r\n const thirdLine = citationEntry.authors(80);\r\n\r\n return (\r\n <div\r\n onMouseDown={onItemClick}\r\n onDoubleClick={onDoubleClick}\r\n className=\"pm-insert-citation-source-panel-item-detailed\"\r\n style={props.style}\r\n >\r\n <div\r\n className={`pm-insert-citation-source-panel-item-detailed-border ${selected ? 'pm-list-item-selected' : ''}`}\r\n >\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-container\">\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-type\">\r\n {citationEntry.imageAdornment ? (\r\n <img\r\n className=\"pm-insert-citation-source-panel-item-detailed-adorn pm-block-border-color pm-background-color\"\r\n src={citationEntry.imageAdornment}\r\n draggable=\"false\"\r\n />\r\n ) : (\r\n undefined\r\n )}\r\n <img\r\n className=\"pm-insert-citation-source-panel-item-detailed-icon pm-block-border-color\"\r\n src={citationEntry.image}\r\n draggable=\"false\"\r\n />\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-summary\">\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-title pm-fixedwidth-font pm-text-color\">\r\n {citationEntry.title}\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-subtitle-text pm-text-color\">\r\n {secondLine}\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-subtitle-text pm-text-color\">{thirdLine}</div>\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-subtitle-text pm-text-color\">\r\n <a href={`https://doi.org/${citationEntry.doi}`} target=\"_new\">\r\n {citationEntry.doi}\r\n </a>\r\n </div>\r\n </div>\r\n <div className=\"pm-insert-citation-source-panel-item-detailed-button\">\r\n <OutlineButton\r\n tabIndex={citationListData.preventFocus ? -1 : 0}\r\n style={{ width: '24px', height: '24px' }}\r\n title={alreadyAdded ? '-' : '+'}\r\n onClick={onButtonClick}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/*\r\n * insert_citation-source-panel-search-latent.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\nimport { TextInput } from '../../../api/widgets/text';\r\nimport { WidgetProps } from '../../../api/widgets/react';\r\n\r\nimport { CitationSourceList } from './insert_citation-source-panel-list';\r\nimport { TextButton } from '../../../api/widgets/button';\r\nimport { CitationListEntry, CitationSourceListStatus } from './insert_citation-source-panel';\r\n\r\nimport './insert_citation-source-panel-latent-search.css';\r\nimport { CitationSourcePanelListItemDetailed } from './insert_citation-source-panel-list-item-detailed';\r\n\r\nexport interface CitationSourceLatentSearchPanelProps extends WidgetProps {\r\n height: number;\r\n citations: CitationListEntry[];\r\n citationsToAdd: CitationListEntry[];\r\n searchTerm: string;\r\n onSearchTermChanged: (searchTerm: string) => void;\r\n executeSearch: (searchTerm: string) => void;\r\n selectedIndex: number;\r\n onSelectedIndexChanged: (index: number) => void;\r\n onAddCitation: (citation: CitationListEntry) => void;\r\n onRemoveCitation: (citation: CitationListEntry) => void;\r\n onConfirm: VoidFunction;\r\n ui: EditorUI;\r\n searchPlaceholderText?: string;\r\n status: CitationSourceListStatus;\r\n statusMessage: string;\r\n}\r\n\r\nconst kSearchBoxHeightWithMargin = 38;\r\n\r\nexport const CitationSourceLatentSearchPanel = React.forwardRef<HTMLDivElement, CitationSourceLatentSearchPanelProps>(\r\n (props, ref) => {\r\n const listContainer = React.useRef<HTMLDivElement>(null);\r\n const pasted = React.useRef<boolean>(false);\r\n const lastSearch = React.useRef<string>('');\r\n\r\n const performSearch = (searchTerm: string) => {\r\n props.executeSearch(searchTerm);\r\n lastSearch.current = searchTerm;\r\n pasted.current = false;\r\n };\r\n\r\n // Search the user search terms\r\n const searchChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const search = e.target.value;\r\n if (pasted.current) {\r\n performSearch(search);\r\n } else {\r\n props.onSearchTermChanged(search);\r\n }\r\n };\r\n\r\n // If the user arrows down in the search text box, advance to the list of items\r\n const handleTextKeyDown = (event: React.KeyboardEvent) => {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n listContainer.current?.focus();\r\n break;\r\n case 'Enter':\r\n if (lastSearch.current !== props.searchTerm || props.selectedIndex < 0) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n performSearch(props.searchTerm);\r\n }\r\n break;\r\n }\r\n };\r\n\r\n const handleButtonClick = () => {\r\n performSearch(props.searchTerm);\r\n };\r\n\r\n const onPaste = () => {\r\n pasted.current = true;\r\n };\r\n\r\n // Used to focus the search box\r\n const searchBoxRef = React.useRef<HTMLInputElement>(null);\r\n\r\n const focusSearch = () => {\r\n searchBoxRef.current?.focus();\r\n };\r\n\r\n // Allow the search box to gain focus the first time the enclosing\r\n // container div receives focus.\r\n const initialFocusSet = React.useRef<boolean>(false);\r\n const parentFocused = () => {\r\n if (!initialFocusSet.current) {\r\n focusSearch();\r\n initialFocusSet.current = true;\r\n }\r\n };\r\n\r\n const onAddCitation = (citation: CitationListEntry) => {\r\n props.onAddCitation(citation);\r\n focusSearch();\r\n };\r\n\r\n return (\r\n <div\r\n style={props.style}\r\n className=\"pm-insert-citation-panel-latent-search\"\r\n ref={ref}\r\n tabIndex={-1}\r\n onFocus={parentFocused}\r\n >\r\n <div className=\"pm-insert-citation-panel-latent-search-textbox-container\">\r\n <TextInput\r\n value={props.searchTerm}\r\n width=\"100%\"\r\n iconAdornment={props.ui.images.search}\r\n tabIndex={0}\r\n className=\"pm-insert-citation-panel-latent-search-textbox pm-block-border-color\"\r\n placeholder={props.searchPlaceholderText}\r\n onKeyDown={handleTextKeyDown}\r\n onChange={searchChanged}\r\n onPaste={onPaste}\r\n ref={searchBoxRef}\r\n />\r\n\r\n <TextButton\r\n title={props.ui.context.translateText('Search')}\r\n classes={['pm-text-button', 'pm-input-button', 'pm-insert-citation-panel-latent-search-button']}\r\n onClick={handleButtonClick}\r\n disabled={props.status === CitationSourceListStatus.inProgress}\r\n />\r\n </div>\r\n\r\n <div className=\"pm-insert-citation-panel-latent-search-list-container\">\r\n <CitationSourceList\r\n height={props.height - kSearchBoxHeightWithMargin}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n onAddCitation={onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n focusPrevious={focusSearch}\r\n onConfirm={props.onConfirm}\r\n ui={props.ui}\r\n itemHeight={100}\r\n itemProvider={CitationSourcePanelListItemDetailed}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n classes={['pm-insert-citation-panel-latent-search-list', 'pm-block-border-color', 'pm-background-color']}\r\n ref={listContainer}\r\n />\r\n </div>\r\n </div>\r\n );\r\n },\r\n);\r\n","/*\r\n * insert_citation-panel-doi.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\n\r\nimport { suggestCiteId, formatAuthors, formatIssuedDate } from '../../../api/cite';\r\nimport { CSL, imageForType } from '../../../api/csl';\r\nimport { DOIServer } from '../../../api/doi';\r\nimport { logException } from '../../../api/log';\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\n\r\nimport {\r\n CitationSourcePanelProps,\r\n CitationSourcePanelProvider,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n errorForStatus,\r\n matchExistingSourceCitationListEntry,\r\n} from './insert_citation-source-panel';\r\nimport { CitationSourceLatentSearchPanel } from './insert_citation-source-panel-latent-search';\r\n\r\nimport './insert_citation-source-panel-doi.css';\r\nimport { BibliographyManager } from '../../../api/bibliography/bibliography';\r\n\r\nconst kDOIType = 'DOI Search';\r\n\r\nexport function doiSourcePanel(\r\n ui: EditorUI,\r\n server: DOIServer,\r\n bibliographyManager: BibliographyManager\r\n): CitationSourcePanelProvider {\r\n return {\r\n key: '76561E2A-8FB7-4D4B-B235-9DD8B8270EA1',\r\n panel: DOISourcePanel,\r\n treeNode: () => {\r\n return {\r\n key: 'DOI',\r\n name: ui.context.translateText('From DOI'),\r\n image: ui.images.citations?.doi,\r\n type: kDOIType,\r\n children: [],\r\n expanded: true,\r\n };\r\n },\r\n progressMessage: ui.context.translateText('Looking up DOI....'),\r\n placeHolderMessage: ui.context.translateText('Paste or enter a DOI to find citation data.'),\r\n search: async (searchTerm: string, _selectedNode: NavigationTreeNode, existingCitationIds: string[]) => {\r\n try {\r\n searchTerm = searchTerm.trim();\r\n const result = await server.fetchCSL(searchTerm);\r\n if (result.status === 'ok') {\r\n\r\n // Form the entry\r\n const doi = searchTerm;\r\n const csl = result.message;\r\n const citation = matchExistingSourceCitationListEntry(doi, existingCitationIds, ui, bibliographyManager) || toCitationListEntry(csl!, existingCitationIds, ui);\r\n\r\n return Promise.resolve({\r\n citations: citation ? [citation] : [],\r\n status: CitationSourceListStatus.default,\r\n statusMessage: '',\r\n });\r\n } else if (result.status === 'notfound') {\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.noResults,\r\n statusMessage: ui.context.translateText('No data for this DOI could be found.'),\r\n });\r\n } else {\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: errorForStatus(ui, result.status, 'for this DOI'),\r\n });\r\n }\r\n } catch (e) {\r\n logException(e);\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: ui.context.translateText('An unknown error occurred. Please try again.'),\r\n });\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport const DOISourcePanel = React.forwardRef<HTMLDivElement, CitationSourcePanelProps>(\r\n (props: CitationSourcePanelProps, ref) => {\r\n // Track whether we are mounted to allow a latent search that returns after the\r\n // component unmounts to nmot mutate state further\r\n return (\r\n <CitationSourceLatentSearchPanel\r\n height={props.height}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n searchTerm={props.searchTerm}\r\n onSearchTermChanged={props.onSearchTermChanged}\r\n executeSearch={props.onExecuteSearch}\r\n onAddCitation={props.onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n onConfirm={props.onConfirm}\r\n searchPlaceholderText={props.ui.context.translateText('Paste a DOI to search')}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n ui={props.ui}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nfunction toCitationListEntry(\r\n csl: CSL | undefined,\r\n existingCitationIds: string[],\r\n ui: EditorUI,\r\n): CitationListEntry | undefined {\r\n if (csl) {\r\n const suggestedId = suggestCiteId(existingCitationIds, csl);\r\n const providerKey = 'doi';\r\n return {\r\n id: suggestedId,\r\n isIdEditable: true,\r\n type: csl.type,\r\n title: csl.title || csl['short-title'] || csl['original-title'] || '',\r\n date: formatIssuedDate(csl.issued),\r\n journal: csl['container-title'] || csl['short-container-title'] || csl.publisher,\r\n doi: csl.DOI,\r\n image: imageForType(ui.images, csl.type)[ui.prefs.darkMode() ? 1 : 0],\r\n authors: (length: number) => {\r\n return formatAuthors(csl.author, length);\r\n },\r\n toBibliographySource: (finalId: string) => {\r\n return Promise.resolve({ ...csl, id: finalId, providerKey });\r\n },\r\n isSlowGeneratingBibliographySource: false,\r\n };\r\n }\r\n return undefined;\r\n}\r\n","/*\r\n * insert_citation-source-panel-crossref.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { suggestCiteId, formatAuthors, formatIssuedDate } from '../../../api/cite';\r\nimport { imageForCrossrefType, prettyType } from '../../../api/crossref';\r\nimport { sanitizeForCiteproc, CSL } from '../../../api/csl';\r\nimport { DOIServer } from '../../../api/doi';\r\nimport { logException } from '../../../api/log';\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\n\r\nimport {\r\n CitationSourcePanelProps,\r\n CitationSourcePanelProvider,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n matchExistingSourceCitationListEntry,\r\n} from './insert_citation-source-panel';\r\nimport { CitationSourceLatentSearchPanel } from './insert_citation-source-panel-latent-search';\r\nimport { BibliographyManager } from '../../../api/bibliography/bibliography';\r\nimport { CrossrefServer, CrossrefWork } from 'editor-types';\r\n\r\nexport function crossrefSourcePanel(\r\n ui: EditorUI,\r\n server: CrossrefServer,\r\n doiServer: DOIServer,\r\n bibliographyManager: BibliographyManager\r\n): CitationSourcePanelProvider {\r\n const kCrossrefType = 'Crossref';\r\n return {\r\n key: 'E38370AA-78AE-450B-BBE8-878E1C817C04',\r\n panel: CrossRefSourcePanel,\r\n treeNode: () => {\r\n return {\r\n key: 'CrossRef',\r\n name: ui.context.translateText('Crossref'),\r\n image: ui.images.citations?.crossref,\r\n type: kCrossrefType,\r\n children: [],\r\n expanded: true,\r\n };\r\n },\r\n progressMessage: ui.context.translateText('Searching Crossref....'),\r\n placeHolderMessage: ui.context.translateText('Enter search terms to search Crossref'),\r\n search: async (searchTerm: string, _selectedNode: NavigationTreeNode, existingCitationIds: string[]) => {\r\n try {\r\n const works = await server.works(searchTerm);\r\n bibliographyManager.localSources();\r\n\r\n const dedupeCitationIds = existingCitationIds;\r\n const citationEntries = works.items.map(work => {\r\n const citationEntry = matchExistingSourceCitationListEntry(work.DOI, dedupeCitationIds, ui, bibliographyManager) || toCitationListEntry(work, dedupeCitationIds, ui, doiServer);\r\n if (citationEntry) {\r\n // Add this id to the list of existing Ids so future ids will de-duplicate against this one\r\n dedupeCitationIds.push(citationEntry.id);\r\n }\r\n return citationEntry;\r\n });\r\n\r\n return Promise.resolve({\r\n citations: citationEntries,\r\n status: citationEntries.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults,\r\n statusMessage:\r\n citationEntries.length > 0 ? '' : ui.context.translateText('No results matching these search terms.'),\r\n });\r\n } catch (e) {\r\n logException(e);\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: ui.context.translateText('An unknown error occurred. Please try again.'),\r\n });\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport const CrossRefSourcePanel = React.forwardRef<HTMLDivElement, CitationSourcePanelProps>(\r\n (props: CitationSourcePanelProps, ref) => {\r\n return (\r\n <CitationSourceLatentSearchPanel\r\n height={props.height}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n searchTerm={props.searchTerm}\r\n onSearchTermChanged={props.onSearchTermChanged}\r\n executeSearch={props.onExecuteSearch}\r\n onAddCitation={props.onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n onConfirm={props.onConfirm}\r\n searchPlaceholderText={props.ui.context.translateText('Search Crossref for Citations')}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n ui={props.ui}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nfunction toCitationListEntry(\r\n crossrefWork: CrossrefWork,\r\n existingIds: string[],\r\n ui: EditorUI,\r\n doiServer: DOIServer,\r\n): CitationListEntry {\r\n const coercedCSL = sanitizeForCiteproc((crossrefWork as unknown) as CSL);\r\n const id = suggestCiteId(existingIds, coercedCSL);\r\n const providerKey = 'crossref';\r\n return {\r\n id,\r\n isIdEditable: true,\r\n title: crossrefWorkTitle(crossrefWork, ui),\r\n type: prettyType(ui, crossrefWork.type),\r\n date: formatIssuedDate(crossrefWork.issued),\r\n journal: crossrefWork['container-title'] || crossrefWork['short-container-title'] || crossrefWork.publisher,\r\n image: imageForCrossrefType(ui, crossrefWork.type)[ui.prefs.darkMode() ? 1 : 0],\r\n doi: crossrefWork.DOI,\r\n authors: (length: number) => {\r\n return formatAuthors(coercedCSL.author, length);\r\n },\r\n toBibliographySource: async (finalId: string) => {\r\n // Generate CSL using the DOI\r\n const doiResult = await doiServer.fetchCSL(crossrefWork.DOI);\r\n\r\n const csl = doiResult.message!;\r\n return { ...csl, id: finalId, providerKey };\r\n },\r\n isSlowGeneratingBibliographySource: true,\r\n };\r\n}\r\n\r\nfunction crossrefWorkTitle(work: CrossrefWork, ui: EditorUI) {\r\n if (work.title) {\r\n return work.title[0];\r\n } else {\r\n return ui.context.translateText('(Untitled)');\r\n }\r\n}\r\n","/*\r\n * pubmed.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PubMedDocument } from 'editor-types';\r\nimport { EditorUI } from './ui-types';\r\n\r\n\r\nexport function suggestCiteId(doc: PubMedDocument): string {\r\n // Try to get the last name. Prefer the sort first author,\r\n // but otherwise just use the first author (if any)\r\n let suggestedId = '';\r\n if (doc.sortFirstAuthor) {\r\n suggestedId = doc.sortFirstAuthor.split(' ')[0];\r\n } else if (doc.authors && doc.authors.length > 0) {\r\n suggestedId = doc.authors[0].split(' ')[0];\r\n }\r\n\r\n // Try to read the year\r\n if (doc.pubDate) {\r\n suggestedId = suggestedId + doc.pubDate.split(' ')[0];\r\n }\r\n return suggestedId;\r\n}\r\n\r\nexport function imageForType(ui: EditorUI, pubTypes?: string[]): [string?, string?] {\r\n const type = pubTypes && pubTypes.length > 0 ? pubTypes[0] : '';\r\n switch (type) {\r\n case 'Journal Article':\r\n case 'Historical Article':\r\n case 'Classical Article':\r\n case 'Introductory Journal Article':\r\n case 'paper-conference':\r\n return [ui.images.citations?.article, ui.images.citations?.article_dark];\r\n case 'Legal Case':\r\n case 'Legislation':\r\n return [ui.images.citations?.legal, ui.images.citations?.legal_dark];\r\n case 'Dataset':\r\n return [ui.images.citations?.data, ui.images.citations?.data_dark];\r\n case 'Video-Audio Media':\r\n return [ui.images.citations?.movie, ui.images.citations?.movie_dark];\r\n case 'Webcasts':\r\n return [ui.images.citations?.web, ui.images.citations?.web_dark];\r\n default:\r\n return [ui.images.citations?.other, ui.images.citations?.other_dark];\r\n }\r\n}\r\n","/*\r\n * insert_citation-source-panel-pubmed.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport React from 'react';\r\n\r\nimport { BibliographyManager } from '../../../api/bibliography/bibliography';\r\nimport { createUniqueCiteId } from '../../../api/cite';\r\nimport { sanitizeForCiteproc } from '../../../api/csl';\r\nimport { DOIServer } from '../../../api/doi';\r\nimport { logException } from '../../../api/log';\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\nimport { suggestCiteId, imageForType } from '../../../api/pubmed';\r\nimport { EditorUI } from '../../../api/ui-types';\r\n\r\nimport {\r\n CitationSourcePanelProps,\r\n CitationSourcePanelProvider,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n errorForStatus,\r\n matchExistingSourceCitationListEntry,\r\n} from './insert_citation-source-panel';\r\nimport { CitationSourceLatentSearchPanel } from './insert_citation-source-panel-latent-search';\r\nimport { PubMedDocument, PubMedServer } from 'editor-types';\r\n\r\nexport function pubmedSourcePanel(\r\n ui: EditorUI,\r\n server: PubMedServer,\r\n doiServer: DOIServer,\r\n bibliographyManager: BibliographyManager\r\n): CitationSourcePanelProvider {\r\n const kPubmedType = 'Pubmed';\r\n return {\r\n key: 'EF556233-05B0-4678-8216-38061908463F',\r\n panel: PubmedSourcePanel,\r\n treeNode: () => {\r\n return {\r\n key: 'PubMed',\r\n name: ui.context.translateText('PubMed'),\r\n image: ui.images.citations?.pubmed,\r\n type: kPubmedType,\r\n children: [],\r\n expanded: true,\r\n };\r\n },\r\n progressMessage: ui.context.translateText('Searching PubMed....'),\r\n placeHolderMessage: ui.context.translateText('Enter a PubMed query to search for citations.'),\r\n search: async (searchTerm: string, _selectedNode: NavigationTreeNode, existingCitationIds: string[]) => {\r\n try {\r\n const noResultsMessage = ui.context.translateText('No results matching these search terms.');\r\n\r\n // Do the PubMed Search\r\n const pubMedResult = await server.search(searchTerm);\r\n switch (pubMedResult.status) {\r\n case 'ok':\r\n if (pubMedResult.message !== null) {\r\n // There is a message\r\n // PubMed Results and Existing Ids\r\n const docs: PubMedDocument[] = pubMedResult.message;\r\n const dedupeCitationIds = existingCitationIds;\r\n\r\n // Create Citation List Entries for these PubMed docs\r\n const citationEntries = docs.map(doc => {\r\n const citationEntry = matchExistingSourceCitationListEntry(doc.doi, dedupeCitationIds, ui, bibliographyManager) || toCitationListEntry(doc, dedupeCitationIds, ui, doiServer);\r\n if (citationEntry && citationEntry.id) {\r\n // Add this id to the list of existing Ids so future ids will de-duplicate against this one\r\n dedupeCitationIds.push(citationEntry.id);\r\n }\r\n return citationEntry;\r\n });\r\n\r\n // Return the search result\r\n return Promise.resolve({\r\n citations: citationEntries,\r\n status:\r\n citationEntries.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults,\r\n statusMessage: citationEntries.length > 0 ? '' : noResultsMessage,\r\n });\r\n } else {\r\n // No message, no results\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.noResults,\r\n statusMessage: noResultsMessage,\r\n });\r\n }\r\n\r\n default:\r\n // Resolve with Error\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: ui.context.translateText(errorForStatus(ui, pubMedResult.status, 'PubMed')),\r\n });\r\n }\r\n } catch (e) {\r\n logException(e);\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: ui.context.translateText('An unknown error occurred. Please try again.'),\r\n });\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport const PubmedSourcePanel = React.forwardRef<HTMLDivElement, CitationSourcePanelProps>(\r\n (props: CitationSourcePanelProps, ref) => {\r\n return (\r\n <CitationSourceLatentSearchPanel\r\n height={props.height}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n searchTerm={props.searchTerm}\r\n onSearchTermChanged={props.onSearchTermChanged}\r\n executeSearch={props.onExecuteSearch}\r\n onAddCitation={props.onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n onConfirm={props.onConfirm}\r\n searchPlaceholderText={props.ui.context.translateText('Search PubMed for Citations')}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n ui={props.ui}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nfunction toCitationListEntry(\r\n doc: PubMedDocument,\r\n existingIds: string[],\r\n ui: EditorUI,\r\n doiServer: DOIServer,\r\n): CitationListEntry {\r\n const id = createUniqueCiteId(existingIds, suggestCiteId(doc));\r\n const providerKey = 'pubmed';\r\n return {\r\n id,\r\n isIdEditable: true,\r\n title: doc.title || '',\r\n doi: doc.doi,\r\n type: '',\r\n date: doc.pubDate || '',\r\n journal: doc.source,\r\n authors: () => {\r\n return formatAuthors(doc.authors || []);\r\n },\r\n image: imageForType(ui, doc.pubTypes)[ui.prefs.darkMode() ? 1 : 0],\r\n toBibliographySource: async (finalId: string) => {\r\n // Generate CSL using the DOI\r\n const doiResult = await doiServer.fetchCSL(doc.doi);\r\n const csl = doiResult.message!;\r\n const sanitizedCSL = sanitizeForCiteproc(csl);\r\n return { ...sanitizedCSL, id: finalId, providerKey };\r\n },\r\n isSlowGeneratingBibliographySource: true,\r\n };\r\n}\r\n\r\nfunction formatAuthors(authors: string[]) {\r\n return authors.join(',');\r\n}\r\n","/*\r\n * datacite.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { DataCiteRecord } from 'editor-types';\r\n\r\n\r\nexport function suggestCiteId(record: DataCiteRecord): string {\r\n // Try to use the last name (or the first name)\r\n let suggestedId = '';\r\n if (record.creators && record.creators.length > 0) {\r\n suggestedId = record.creators[0].familyName || record.creators[0].fullName;\r\n }\r\n\r\n // Try to read the year\r\n if (record.publicationYear) {\r\n suggestedId = suggestedId + record.publicationYear;\r\n }\r\n return suggestedId;\r\n}\r\n","/*\r\n * insert_citation-source-panel-pubmed.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { \r\n DOIServer, \r\n DataCiteServer, \r\n DataCiteRecord, \r\n DataCiteCreator \r\n} from 'editor-types';\r\n\r\nimport { createUniqueCiteId } from '../../../api/cite';\r\nimport { imageForType } from '../../../api/csl';\r\nimport { suggestCiteId } from '../../../api/datacite';\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\nimport { logException } from '../../../api/log';\r\nimport { EditorUI } from '../../../api/ui-types';\r\n\r\nimport {\r\n CitationSourcePanelProps,\r\n CitationSourcePanelProvider,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n errorForStatus,\r\n matchExistingSourceCitationListEntry,\r\n} from './insert_citation-source-panel';\r\nimport { CitationSourceLatentSearchPanel } from './insert_citation-source-panel-latent-search';\r\nimport { BibliographyManager } from '../../../api/bibliography/bibliography';\r\n\r\nexport function dataciteSourcePanel(\r\n ui: EditorUI,\r\n server: DataCiteServer,\r\n doiServer: DOIServer,\r\n bibliographyManager: BibliographyManager\r\n): CitationSourcePanelProvider {\r\n const kDataCiteType = 'Datacite';\r\n return {\r\n key: '66A6EADB-22AE-4DDD-BCD5-70BC0DEB8FB3',\r\n panel: DataCiteSourcePanel,\r\n treeNode: () => {\r\n return {\r\n key: 'DataCite',\r\n name: ui.context.translateText('DataCite'),\r\n image: ui.images.citations?.datacite,\r\n type: kDataCiteType,\r\n children: [],\r\n expanded: true,\r\n };\r\n },\r\n progressMessage: ui.context.translateText('Searching DataCite....'),\r\n placeHolderMessage: ui.context.translateText('Enter search terms to search DataCite'),\r\n search: async (searchTerm: string, _selectedNode: NavigationTreeNode, existingCitationIds: string[]) => {\r\n try {\r\n const dataciteResult = await server.search(searchTerm);\r\n const noResultsMessage = ui.context.translateText('No results matching these search terms.');\r\n switch (dataciteResult.status) {\r\n case 'ok':\r\n if (dataciteResult.message !== null) {\r\n const records: DataCiteRecord[] = dataciteResult.message;\r\n const dedupeCitationIds = existingCitationIds;\r\n const citationEntries = records.map(record => {\r\n const citationEntry = matchExistingSourceCitationListEntry(record.doi, dedupeCitationIds, ui, bibliographyManager) || toCitationListEntry(record, dedupeCitationIds, ui, doiServer);\r\n if (citationEntry) {\r\n // Add this id to the list of existing Ids so future ids will de-duplicate against this one\r\n dedupeCitationIds.push(citationEntry.id);\r\n }\r\n return citationEntry;\r\n });\r\n return Promise.resolve({\r\n citations: citationEntries,\r\n status:\r\n citationEntries.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults,\r\n statusMessage: citationEntries.length > 0 ? '' : noResultsMessage,\r\n });\r\n } else {\r\n // No results\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.noResults,\r\n statusMessage: noResultsMessage,\r\n });\r\n }\r\n default:\r\n // Resolve with Error\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: ui.context.translateText(errorForStatus(ui, dataciteResult.status, 'DataCite')),\r\n });\r\n }\r\n } catch (e) {\r\n logException(e);\r\n return Promise.resolve({\r\n citations: [],\r\n status: CitationSourceListStatus.error,\r\n statusMessage: ui.context.translateText('An unknown error occurred. Please try again.'),\r\n });\r\n }\r\n },\r\n };\r\n}\r\n\r\nexport const DataCiteSourcePanel = React.forwardRef<HTMLDivElement, CitationSourcePanelProps>(\r\n (props: CitationSourcePanelProps, ref) => {\r\n return (\r\n <CitationSourceLatentSearchPanel\r\n height={props.height}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n searchTerm={props.searchTerm}\r\n onSearchTermChanged={props.onSearchTermChanged}\r\n executeSearch={props.onExecuteSearch}\r\n onAddCitation={props.onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n onConfirm={props.onConfirm}\r\n searchPlaceholderText={props.ui.context.translateText('Search DataCite for Citations')}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n ui={props.ui}\r\n ref={ref}\r\n />\r\n );\r\n },\r\n);\r\n\r\nfunction toCitationListEntry(\r\n record: DataCiteRecord,\r\n existingIds: string[],\r\n ui: EditorUI,\r\n doiServer: DOIServer,\r\n): CitationListEntry {\r\n const id = createUniqueCiteId(existingIds, suggestCiteId(record));\r\n const providerKey = 'datacite';\r\n return {\r\n id,\r\n isIdEditable: true,\r\n title: record.title || '',\r\n type: record.type || '',\r\n date: record.publicationYear?.toString() || '',\r\n journal: record.publisher,\r\n image: imageForType(ui.images, record.type || '')[ui.prefs.darkMode() ? 1 : 0],\r\n doi: record.doi,\r\n authors: () => {\r\n return formatAuthors(record.creators || []);\r\n },\r\n toBibliographySource: async (finalId: string) => {\r\n // Generate CSL using the DOI\r\n const doiResult = await doiServer.fetchCSL(record.doi);\r\n\r\n const csl = doiResult.message!;\r\n return { ...csl, id: finalId, providerKey };\r\n },\r\n isSlowGeneratingBibliographySource: true,\r\n };\r\n}\r\n\r\nfunction formatAuthors(authors: DataCiteCreator[]) {\r\n return authors.map(creator => creator.fullName).join(',');\r\n}\r\n","/*\r\n * insert_citation-picker-bibliography.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { changeExtension } from '../../api/path';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { TextInput } from '../../api/widgets/text';\r\nimport { SelectInput } from '../../api/widgets/select';\r\nimport { BibliographyFile, BibliographyType } from '../../api/bibliography/bibliography';\r\n\r\nimport './insert_citation-bibliography-picker.css';\r\n\r\nexport interface CitationBiblographyPickerProps extends WidgetProps {\r\n bibliographyTypes: BibliographyType[];\r\n bibliographyFiles: BibliographyFile[];\r\n onBiblographyFileChanged: (file: BibliographyFile) => void;\r\n createBibliographyFileName: string;\r\n onCreateBibliographyFileNameChanged: (fileName: string) => void;\r\n ui: EditorUI;\r\n}\r\n\r\nexport const CitationBibliographyPicker: React.FC<CitationBiblographyPickerProps> = props => {\r\n // Selection of file from list\r\n const onChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const index = e.target.selectedIndex;\r\n props.onBiblographyFileChanged(props.bibliographyFiles[index]);\r\n };\r\n\r\n // Change to the file we should create\r\n const onTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const text = e.target.value;\r\n props.onCreateBibliographyFileNameChanged(text);\r\n };\r\n\r\n // File type change\r\n const onTypeChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\r\n const index = e.target.selectedIndex;\r\n const type = props.bibliographyTypes[index];\r\n const newPath = changeExtension(props.createBibliographyFileName, type.extension);\r\n props.onCreateBibliographyFileNameChanged(newPath);\r\n props.ui.prefs.setBibliographyDefaultType(type.extension);\r\n };\r\n\r\n return (\r\n <div className=\"pm-citation-bibliography-picker-container\" style={props.style}>\r\n <div className=\"pm-citation-bibliography-picker-label pm-text-color\">\r\n {props.bibliographyFiles.length > 0\r\n ? props.ui.context.translateText('Add to:')\r\n : props.ui.context.translateText('Create:')}\r\n </div>\r\n {props.bibliographyFiles.length > 0 ? (\r\n <SelectInput onChange={onChange}>\r\n {props.bibliographyFiles.map(file => (\r\n <option key={file.fullPath} value={file.fullPath}>\r\n {file.displayPath}\r\n </option>\r\n ))}\r\n </SelectInput>\r\n ) : (\r\n <div className=\"pm-citation-bibliography-picker-create-controls\">\r\n <TextInput\r\n width=\"100\"\r\n tabIndex={0}\r\n className=\"pm-citation-bibliography-picker-textbox pm-block-border-color\"\r\n placeholder={props.ui.context.translateText('Bibligraphy file name')}\r\n value={props.createBibliographyFileName}\r\n onChange={onTextChange}\r\n />\r\n <div className=\"pm-citation-bibliography-format-label pm-text-color\">\r\n {props.ui.context.translateText('Format:')}\r\n </div>\r\n <SelectInput\r\n onChange={onTypeChange}\r\n defaultValue={props.bibliographyTypes.find(bibType => bibType.default)?.extension}\r\n >\r\n {props.bibliographyTypes.map(bibType => (\r\n <option key={bibType.extension} value={bibType.extension}>\r\n {bibType.displayName}\r\n </option>\r\n ))}\r\n </SelectInput>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\nfunction orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = orderBy;\n","/*\r\n * insert_citation-panel-packages.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../../api/ui-types';\r\nimport { NavigationTreeNode } from '../../../api/widgets/navigation-tree';\r\nimport { imageForType, CSL, cslTypes, CSLDate } from '../../../api/csl';\r\nimport { bibtextTypeToCSLType } from '../../../api/bibtex/types';\r\n\r\nimport {\r\n CitationSourcePanelProvider,\r\n CitationSourcePanelProps,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n CitationSourcePanelSearchResult,\r\n} from './insert_citation-source-panel';\r\nimport { CitationSourceTypeheadSearchPanel } from './insert_citation-source-panel-typeahead-search';\r\n\r\nimport Fuse from 'fuse.js';\r\nimport uniqBy from 'lodash.uniqby';\r\nimport orderBy from 'lodash.orderby';\r\nimport { EnvironmentServer, RPackageCitation, RPackageCitationPerson, RPackageInfo } from 'editor-types';\r\n\r\nconst kPackageType = 'Packages';\r\n\r\nexport function packageSourcePanel(\r\n ui: EditorUI,\r\n server: EnvironmentServer,\r\n): CitationSourcePanelProvider {\r\n\r\n // Fetch the packages and index when needed\r\n let pkgInfos: RPackageInfo[];\r\n let pkgIndex: PackageSearch;\r\n const getPackageIndex = async () => {\r\n if (pkgIndex === undefined) {\r\n\r\n // Read the package state\r\n const pkgState = await server.getRPackageState();\r\n\r\n // Sorting in this way ensures that the packages are in alpha order and that in.project.library packages appear first\r\n // uniqby will always select the first uniq entry, so this ensures that in.project.library packages are preferred\r\n // (in.project.library represents a package provided as a part of packrat or renv)\r\n const sorted = orderBy(pkgState.package_list, [pkg => pkg.name.toLowerCase(), 'in.project.library'], ['asc', 'desc']);\r\n\r\n // Create the list of info and index\r\n pkgInfos = uniqBy(sorted, pkg => pkg.name);\r\n pkgIndex = packageIndex(pkgInfos);\r\n }\r\n return {\r\n packageInfos: pkgInfos,\r\n index: pkgIndex\r\n };\r\n };\r\n\r\n return {\r\n key: '97863EFF-2075-43B2-8F0F-88A250CC33BE',\r\n panel: PackageSourcePanel,\r\n treeNode: () => {\r\n return {\r\n key: 'RPackages',\r\n name: ui.context.translateText('R Package'),\r\n image: ui.images.citations?.packages,\r\n type: kPackageType,\r\n children: [],\r\n expanded: true,\r\n };\r\n },\r\n typeAheadSearch: (searchTerm: string, _selectedNode: NavigationTreeNode, existingCitationIds: string[], onResults: (result: CitationSourcePanelSearchResult) => void) => {\r\n\r\n // Get the index, then search it\r\n getPackageIndex().then(({ packageInfos, index }) => {\r\n const matchingEntries = searchTerm ? index.search(searchTerm) : packageInfos;\r\n const citations = matchingEntries.map(pkg => {\r\n return toCitationListEntry(pkg, existingCitationIds, ui, server);\r\n });\r\n const status = citations.length > 0 ? CitationSourceListStatus.default : CitationSourceListStatus.noResults;\r\n const statusMessage = citations.length > 0 ? \"\" : ui.context.translateText('No matching packages');\r\n onResults({\r\n citations,\r\n status,\r\n statusMessage\r\n });\r\n });\r\n },\r\n };\r\n}\r\n\r\nexport const PackageSourcePanel = React.forwardRef<HTMLDivElement, CitationSourcePanelProps>(\r\n (props: CitationSourcePanelProps, ref) => {\r\n return (\r\n <>\r\n <CitationSourceTypeheadSearchPanel\r\n height={props.height}\r\n citations={props.citations}\r\n citationsToAdd={props.citationsToAdd}\r\n searchTerm={props.searchTerm}\r\n onSearchTermChanged={props.onSearchTermChanged}\r\n selectedIndex={props.selectedIndex}\r\n onSelectedIndexChanged={props.onSelectedIndexChanged}\r\n onAddCitation={props.onAddCitation}\r\n onRemoveCitation={props.onRemoveCitation}\r\n onConfirm={props.onConfirm}\r\n status={props.status}\r\n statusMessage={props.statusMessage}\r\n ui={props.ui}\r\n ref={ref}\r\n />\r\n </>\r\n );\r\n },\r\n);\r\n\r\nfunction toCitationListEntry(\r\n packageInfo: RPackageInfo,\r\n existingCitationIds: string[],\r\n ui: EditorUI,\r\n server: EnvironmentServer\r\n): CitationListEntry {\r\n return {\r\n id: suggestPackageCiteId(packageInfo.name, existingCitationIds),\r\n isIdEditable: true,\r\n type: cslTypes.entry,\r\n title: packageInfo.desc || \"\",\r\n date: packageInfo.version || \"\",\r\n journal: \"\",\r\n doi: \"\",\r\n image: imageForType(ui.images, cslTypes.book)[ui.prefs.darkMode() ? 1 : 0],\r\n authors: () => {\r\n return packageInfo.name || \"\";\r\n },\r\n toBibliographySource: async (finalId: string) => {\r\n const csl = await packageToCSL(packageInfo, server);\r\n if (csl) {\r\n return { ...csl, id: finalId, providerKey: kPackageType };\r\n } else {\r\n // This should never happen\r\n return { type: cslTypes.book, id: finalId, providerKey: kPackageType };\r\n }\r\n },\r\n isSlowGeneratingBibliographySource: false,\r\n };\r\n}\r\n\r\nasync function packageToCSL(packageInfo: RPackageInfo, server: EnvironmentServer) {\r\n const citeInfos = await server.getRPackageCitations(packageInfo.name);\r\n if (citeInfos && citeInfos.length) {\r\n // RPackages can return multiple possible citations (e.g. the package, the paper in which it appeared,\r\n // a book documenting it), but the first one is by convention the package itself\r\n const citeInfo = citeInfos[0];\r\n return packageCitationToCSL(citeInfo);\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\n\r\nfunction packageCitationToCSL(citeInfo: RPackageCitation) {\r\n const toCSLNames = (people?: RPackageCitationPerson[]) => {\r\n if (people) {\r\n return people.map(person => {\r\n return {\r\n family: person.family,\r\n given: person.given.join(' ')\r\n };\r\n });\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n const toCSLDate = (year?: string): CSLDate | undefined => {\r\n if (year) {\r\n\r\n return {\r\n 'date-parts': [[Number.parseInt(year, 10)]]\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n const csl: CSL = {\r\n type: bibtextTypeToCSLType(citeInfo.type),\r\n title: citeInfo.title,\r\n };\r\n\r\n if (citeInfo.doi !== null) {\r\n csl.DOI = citeInfo.doi;\r\n }\r\n if (citeInfo.url !== null) {\r\n csl.URL = citeInfo.url;\r\n }\r\n if (citeInfo.publisher !== null) {\r\n csl.publisher = citeInfo.publisher;\r\n }\r\n if (citeInfo.booktitle !== null) {\r\n csl['container-title'] = citeInfo.booktitle;\r\n }\r\n if (citeInfo.pages !== null) {\r\n csl.page = citeInfo.pages;\r\n }\r\n if (citeInfo.volume !== null) {\r\n csl.volume = citeInfo.volume;\r\n }\r\n if (citeInfo.author !== null) {\r\n csl.author = toCSLNames(citeInfo.author);\r\n }\r\n if (citeInfo.year !== null) {\r\n csl.issued = toCSLDate(citeInfo.year);\r\n }\r\n return csl;\r\n\r\n}\r\n\r\n// Create a citeky using the package, de-duplicating by incrementing a counter\r\n// until the key is unique\r\nfunction suggestPackageCiteId(name: string, existingCitationIds: string[]) {\r\n\r\n\r\n let retryCount = 0;\r\n const incrementName = () => {\r\n retryCount = retryCount + 1;\r\n if (retryCount === 1) {\r\n return name;\r\n } else {\r\n return `${name}-${retryCount}`;\r\n }\r\n };\r\n\r\n let citekey = incrementName();\r\n while (existingCitationIds.includes(citekey)) {\r\n citekey = incrementName();\r\n }\r\n return citekey;\r\n}\r\n\r\n\r\n// Search index for packages\r\ninterface PackageSearch {\r\n search(searchTerm: string): RPackageInfo[];\r\n}\r\n\r\nconst searchFields: Fuse.FuseOptionKeyObject<RPackageInfo>[] = [\r\n { name: 'name', weight: 30 },\r\n { name: 'desc', weight: 15 },\r\n { name: 'version', weight: 5 },\r\n];\r\n\r\nfunction packageIndex(entries: RPackageInfo[]): PackageSearch {\r\n // build search index\r\n const options = {\r\n isCaseSensitive: false,\r\n shouldSort: true,\r\n includeMatches: false,\r\n includeScore: false,\r\n minMatchCharLength: 1,\r\n threshold: 0.2,\r\n keys: searchFields,\r\n limit: 10000\r\n };\r\n const index = Fuse.createIndex<RPackageInfo>(searchFields.map(searchField => searchField.name), entries);\r\n const fuse = new Fuse(entries, options, index);\r\n return {\r\n search: (searchTerm: string): RPackageInfo[] => {\r\n const results = fuse.search(searchTerm, options);\r\n return results.map(result => result.item);\r\n },\r\n };\r\n}\r\n\r\n","/*\r\n * text.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { ChangeEventHandler } from 'react';\r\n\r\nimport { WidgetProps } from './react';\r\n\r\nimport './text.css';\r\n\r\nexport interface CheckboxInputProps extends WidgetProps {\r\n id?: string;\r\n tabIndex?: number;\r\n className?: string;\r\n checked?: boolean;\r\n onChange?: ChangeEventHandler;\r\n}\r\n \r\nexport const CheckboxInput= React.forwardRef<HTMLInputElement, CheckboxInputProps>((props, ref) => {\r\n const style: React.CSSProperties = {\r\n ...props.style,\r\n };\r\n\r\n return (\r\n <input\r\n id={props.id} \r\n type=\"checkbox\"\r\n className={`\r\n pm-input-checkbox\r\n pm-text-color \r\n pm-background-color \r\n ${props.className}`}\r\n style={style}\r\n checked={props.checked}\r\n onChange={props.onChange}\r\n tabIndex={props.tabIndex}\r\n ref={ref}\r\n />\r\n );\r\n});\r\n\r\n\r\n","/*\r\n * insert_citation_picker.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React from 'react';\r\nimport { createRoot } from 'react-dom/client';\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport {\r\n BibliographyFile,\r\n BibliographyManager,\r\n bibliographyTypes,\r\n bibliographyFileForPath,\r\n BibliographySource,\r\n} from '../../api/bibliography/bibliography';\r\nimport { kInvalidCiteKeyChars } from '../../api/cite';\r\nimport { changeExtension } from '../../api/path';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { TagInput, TagItem } from '../../api/widgets/tag-input';\r\nimport { NavigationTreeNode, containsChild, NavigationTree } from '../../api/widgets/navigation-tree';\r\nimport { DialogButtons } from '../../api/widgets/dialog-buttons';\r\n\r\nimport {\r\n CitationSourcePanelProps,\r\n CitationSourcePanelProvider,\r\n CitationListEntry,\r\n CitationSourceListStatus,\r\n BibliographySourceProvider,\r\n CitationSourcePanelSearchResult,\r\n} from './source_panels/insert_citation-source-panel';\r\nimport { bibliographySourcePanel } from './source_panels/insert_citation-source-panel-bibliography';\r\nimport { doiSourcePanel } from './source_panels/insert_citation-source-panel-doi';\r\nimport { crossrefSourcePanel } from './source_panels/insert_citation-source-panel-crossref';\r\nimport { pubmedSourcePanel } from './source_panels/insert_citation-source-panel-pubmed';\r\nimport { dataciteSourcePanel } from './source_panels/insert_citation-source-panel-datacite';\r\nimport { CitationBibliographyPicker } from './insert_citation-bibliography-picker';\r\nimport { packageSourcePanel } from './source_panels/insert_citation-source-panel-packages';\r\n\r\nimport './insert_citation.css';\r\nimport debounce from 'lodash.debounce';\r\nimport { CheckboxInput } from '../../api/widgets/checkbox-input';\r\nimport { EditorServer } from 'editor-types';\r\n\r\n// When the dialog has completed, it will return this result\r\n// If the dialog is canceled no result will be returned\r\nexport interface InsertCitationDialogResult {\r\n bibliographySources: BibliographySource[];\r\n bibliography: BibliographyFile;\r\n intextCitationStyle: boolean;\r\n selectionKey?: string;\r\n}\r\n\r\n// Show the insert citation dialog and returns the\r\n// items that should be inserted, the bibliography in which to write them\r\n// and the last selected position in the tree\r\nexport async function showInsertCitationDialog(\r\n ui: EditorUI,\r\n doc: ProsemirrorNode,\r\n bibliographyManager: BibliographyManager,\r\n server: EditorServer,\r\n performInsertCitations: (result: InsertCitationDialogResult) => Promise<void>,\r\n initiallySelectedNodeKey?: string,\r\n): Promise<boolean> {\r\n // The result that will be returned to the called\r\n let result: InsertCitationDialogResult | undefined;\r\n\r\n // Present the dialog\r\n const performInsert = await ui.dialogs.htmlDialog(\r\n 'Insert Citation',\r\n 'Insert',\r\n (\r\n containerWidth: number,\r\n containerHeight: number,\r\n confirm: VoidFunction,\r\n cancel: VoidFunction,\r\n showProgress: (message: string) => void,\r\n hideProgress: VoidFunction,\r\n themed?: boolean\r\n ) => {\r\n const kMaxHeight = 650;\r\n const kMaxWidth = 900;\r\n const kMaxHeightProportion = 0.9;\r\n const kdialogPaddingIncludingButtons = 70;\r\n\r\n const windowHeight = containerHeight;\r\n const windowWidth = containerWidth;\r\n\r\n const height = Math.min(kMaxHeight, windowHeight * kMaxHeightProportion) - kdialogPaddingIncludingButtons;\r\n const width = Math.max(Math.min(kMaxWidth, windowWidth * 0.9), 550);\r\n\r\n // set container size \r\n const container = window.document.createElement('div');\r\n container.style.width = width + 'px';\r\n container.style.height = height + 'px';\r\n if (!themed) {\r\n container.className = 'pm-default-theme';\r\n }\r\n \r\n const root = createRoot(container);\r\n \r\n // Provide the providers top the dialog and then refresh the bibliography and reload the items\r\n const providersForBibliography = (writable: boolean) => {\r\n if (writable) {\r\n const providers = [\r\n bibliographySourcePanel(doc, ui, bibliographyManager),\r\n doiSourcePanel(ui, server.doi, bibliographyManager),\r\n crossrefSourcePanel(ui, server.crossref, server.doi, bibliographyManager),\r\n dataciteSourcePanel(ui, server.datacite, server.doi, bibliographyManager),\r\n pubmedSourcePanel(ui, server.pubmed, server.doi, bibliographyManager),\r\n ];\r\n if (server.environment) {\r\n providers.push(packageSourcePanel(ui, server.environment));\r\n }\r\n return providers;\r\n } else {\r\n return [bibliographySourcePanel(doc, ui, bibliographyManager)];\r\n }\r\n };\r\n \r\n\r\n // Provide a configuration stream that will update after the bibliography loads\r\n let updatedConfiguration: InsertCitationPanelConfiguration | undefined;\r\n const configurationStream: InsertCitationPanelConfigurationStream = {\r\n current: {\r\n providers: providersForBibliography(bibliographyManager.allowsWrites()),\r\n bibliographyFiles: bibliographyManager.bibliographyFiles(doc, ui),\r\n existingIds: bibliographyManager.localSources().map(source => source.id),\r\n },\r\n stream: () => {\r\n return updatedConfiguration || null;\r\n },\r\n };\r\n\r\n // Load the bibliography and then update the configuration\r\n bibliographyManager.load(ui, doc, true).then(() => {\r\n updatedConfiguration = {\r\n providers: providersForBibliography(bibliographyManager.allowsWrites()),\r\n bibliographyFiles: bibliographyManager.bibliographyFiles(doc, ui),\r\n existingIds: bibliographyManager.localSources().map(source => source.id),\r\n };\r\n });\r\n\r\n // Handles the confirmation by the user\r\n const onOk = async (\r\n bibliographySourceProviders: BibliographySourceProvider[],\r\n bibliography: BibliographyFile,\r\n selectedNode: NavigationTreeNode,\r\n intextCitationStyle: boolean\r\n ) => {\r\n // Because some bibliography entries will need to download their CSL (based upon the\r\n // DOI), we need to keep the dialog alive so we can use it to show progress. As a result\r\n // rather than waiting for the dialog to be dismissed and using the result, we do the work\r\n // here ahead of calling 'confirm'. But confirm also provides the validation message for the\r\n // dialog, so we still call 'confirm' even if we know it isn't valid (no citations selected)\r\n // so the validation message can be displayed to the user.\r\n if (bibliographySourceProviders.length > 0) {\r\n\r\n // Look through the items and see whether any will be slow\r\n // If some are slow, show progress\r\n const requiresProgress = bibliographySourceProviders.some(\r\n sourceProvider => sourceProvider.isSlowGeneratingBibliographySource,\r\n );\r\n if (requiresProgress) {\r\n showProgress(\r\n ui.context.translateText(\r\n bibliographySourceProviders.length === 1\r\n ? 'Creating bibliography entry...'\r\n : 'Creating bibliography entries...',\r\n ),\r\n );\r\n }\r\n\r\n // Generate bibliography sources for each of the entries\r\n const bibliographySources = await Promise.all(\r\n bibliographySourceProviders.map(sourceProvider => sourceProvider.toBibliographySource(sourceProvider.id)),\r\n );\r\n result = {\r\n bibliographySources,\r\n bibliography,\r\n intextCitationStyle,\r\n selectionKey: selectedNode.key,\r\n };\r\n\r\n // Notify the caller to perform the inseration\r\n await performInsertCitations(result);\r\n\r\n // Clear progress\r\n if (requiresProgress) {\r\n hideProgress();\r\n }\r\n }\r\n // Dismiss the dialog\r\n root.unmount();\r\n confirm();\r\n };\r\n\r\n const onCancel = () => {\r\n root.unmount();\r\n cancel();\r\n };\r\n\r\n root.render(\r\n <InsertCitationPanel\r\n height={height}\r\n width={width}\r\n themed={!!themed}\r\n configuration={configurationStream}\r\n initiallySelectedNodeKey={initiallySelectedNodeKey}\r\n onOk={onOk}\r\n onCancel={onCancel}\r\n doc={doc}\r\n ui={ui}\r\n />\r\n );\r\n return container;\r\n },\r\n () => {\r\n // Focus\r\n // dealt with in the React Component itself\r\n },\r\n () => {\r\n // Validation\r\n return null;\r\n },\r\n );\r\n\r\n // return the result to the caller\r\n if (performInsert && result) {\r\n return Promise.resolve(true);\r\n } else {\r\n return Promise.resolve(false);\r\n }\r\n}\r\n\r\ninterface InsertCitationPanelConfiguration {\r\n providers: CitationSourcePanelProvider[];\r\n bibliographyFiles: BibliographyFile[];\r\n existingIds: string[];\r\n}\r\n\r\ninterface InsertCitationPanelConfigurationStream {\r\n current: InsertCitationPanelConfiguration;\r\n stream: () => InsertCitationPanelConfiguration | null;\r\n}\r\n\r\n// The picker is a full featured UI for finding and selecting citation data\r\n// to be added to a document.\r\ninterface InsertCitationPanelProps extends WidgetProps {\r\n ui: EditorUI;\r\n doc: ProsemirrorNode;\r\n height: number;\r\n width: number;\r\n themed: boolean;\r\n configuration: InsertCitationPanelConfigurationStream;\r\n initiallySelectedNodeKey?: string;\r\n onOk: (\r\n bibliographySourceProviders: BibliographySourceProvider[],\r\n bibliography: BibliographyFile,\r\n selectedNode: NavigationTreeNode,\r\n intextCitationStyle: boolean\r\n ) => void;\r\n onCancel: () => void;\r\n}\r\n\r\ninterface InsertCitationPanelState {\r\n citations: CitationListEntry[];\r\n citationsToAdd: CitationListEntry[];\r\n selectedIndex: number;\r\n searchTerm: string;\r\n selectedNode: NavigationTreeNode;\r\n status: CitationSourceListStatus;\r\n statusMessage: string;\r\n existingBibliographyFile: BibliographyFile;\r\n createBibliographyFile: BibliographyFile;\r\n intextCitationStyle: boolean;\r\n}\r\n\r\ninterface InsertCitationPanelUpdateState {\r\n citations?: CitationListEntry[];\r\n citationsToAdd?: CitationListEntry[];\r\n selectedIndex?: number;\r\n searchTerm?: string;\r\n selectedNode?: NavigationTreeNode;\r\n status?: CitationSourceListStatus;\r\n statusMessage?: string;\r\n existingBibliographyFile?: BibliographyFile;\r\n createBibliographyFile?: BibliographyFile;\r\n intextCitationStyle?: boolean;\r\n}\r\n\r\nexport const InsertCitationPanel: React.FC<InsertCitationPanelProps> = props => {\r\n // The configuration state of this panel\r\n const [insertCitationConfiguration, setInsertCitationConfiguration] = React.useState<\r\n InsertCitationPanelConfiguration\r\n >(props.configuration.current);\r\n\r\n // The source data for the tree\r\n const treeSourceData = insertCitationConfiguration.providers.map(panel => panel.treeNode());\r\n\r\n // The selected provider / panel for the dialog\r\n const defaultNode = nodeForKey(treeSourceData, props.initiallySelectedNodeKey);\r\n const [selectedPanelProvider, setSelectedPanelProvider] = React.useState<CitationSourcePanelProvider>(\r\n panelForNode(insertCitationConfiguration.providers, defaultNode) || insertCitationConfiguration.providers[0],\r\n );\r\n\r\n // Holder of the dialog state\r\n const [insertCitationPanelState, setInsertCitationPanelState] = React.useState<InsertCitationPanelState>({\r\n citations: [],\r\n citationsToAdd: [],\r\n selectedIndex: -1,\r\n searchTerm: '',\r\n selectedNode: defaultNode || selectedPanelProvider.treeNode(),\r\n status: CitationSourceListStatus.default,\r\n statusMessage: selectedPanelProvider.placeHolderMessage || '',\r\n existingBibliographyFile: props.configuration.current.bibliographyFiles[0],\r\n createBibliographyFile: bibliographyFileForPath(\r\n changeExtension(\r\n 'references.json',\r\n props.ui.prefs.bibliographyDefaultType() || bibliographyTypes(props.ui)[0].extension,\r\n ),\r\n props.ui,\r\n ),\r\n intextCitationStyle: props.ui.prefs.citationDefaultInText()\r\n });\r\n\r\n // Core method to update dialog state\r\n const updateState = (updatedState: InsertCitationPanelUpdateState) => {\r\n const newState = {\r\n ...insertCitationPanelState,\r\n ...updatedState,\r\n };\r\n setInsertCitationPanelState(newState);\r\n };\r\n\r\n // The dialog intelligently manages and merges the selected item and the explicitly added items\r\n // This is the merged set of citations based upon the explicitly chosen and currently selected citations\r\n const displayedCitations = insertCitationPanelState.citations.filter(\r\n citation => !insertCitationPanelState.citationsToAdd.includes(citation),\r\n );\r\n const selectedCitation =\r\n insertCitationPanelState.selectedIndex > -1\r\n ? displayedCitations[insertCitationPanelState.selectedIndex]\r\n : undefined;\r\n const mergedCitationsToAdd = mergeCitations(insertCitationPanelState.citationsToAdd, selectedCitation);\r\n const existingCitationIds = [\r\n ...insertCitationConfiguration.existingIds,\r\n ...mergedCitationsToAdd.map(citation => citation.id),\r\n ];\r\n\r\n // The initial setting of focus and loading of data for the panel.\r\n const panelRef = React.useRef<HTMLElement>();\r\n\r\n // When the stream of configuration changes is actually loaded, we need to refresh the search\r\n // results to reflect the new configuration. The below refs basically:\r\n // 1) Capture the timer itself so only timer is created and it will be properly canceled\r\n // 2) Captures the up to date state in the callback that will be used to refresh the search results -\r\n // If we don't refresh it each render, it will capture the state the time it was created\r\n const streamTimerId = React.useRef<number>();\r\n const refreshSearchCallback = React.useRef<VoidFunction>();\r\n React.useEffect(() => {\r\n refreshSearchCallback.current = async () => {\r\n if (selectedPanelProvider.typeAheadSearch) {\r\n // Once the configurations, refresh the search\r\n selectedPanelProvider.typeAheadSearch(\r\n insertCitationPanelState.searchTerm,\r\n insertCitationPanelState.selectedNode,\r\n insertCitationConfiguration.existingIds,\r\n (results: CitationSourcePanelSearchResult) => {\r\n updateState({\r\n searchTerm: '',\r\n citations: results?.citations || [],\r\n status: results?.status || CitationSourceListStatus.default,\r\n statusMessage: results?.statusMessage || selectedPanelProvider.placeHolderMessage,\r\n });\r\n }\r\n );\r\n }\r\n };\r\n });\r\n\r\n React.useEffect(() => {\r\n // Set initial focus\r\n if (panelRef.current) {\r\n window.setTimeout(() => {\r\n if (panelRef.current) {\r\n panelRef.current.focus();\r\n }\r\n }, 200);\r\n }\r\n\r\n // Poll the configuration stream for updates\r\n // We need to keep the Timeout to clear around as ref so\r\n // it survives any renders\r\n streamTimerId.current = window.setInterval(() => {\r\n const result = props.configuration.stream();\r\n if (result !== null) {\r\n if (streamTimerId.current) {\r\n clearInterval(streamTimerId.current);\r\n }\r\n\r\n setInsertCitationConfiguration(result);\r\n const panelProvider = panelForNode(result.providers, insertCitationPanelState.selectedNode);\r\n if (panelProvider) {\r\n setSelectedPanelProvider(panelProvider);\r\n }\r\n if (refreshSearchCallback.current) {\r\n refreshSearchCallback.current();\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n }, 200) as any;\r\n\r\n // Set the default state to initialize the first search\r\n if (selectedPanelProvider.typeAheadSearch) {\r\n selectedPanelProvider.typeAheadSearch(\r\n '',\r\n insertCitationPanelState.selectedNode,\r\n insertCitationConfiguration.existingIds,\r\n (result: CitationSourcePanelSearchResult) => {\r\n updateState({\r\n searchTerm: '',\r\n citations: result?.citations || [],\r\n status: result?.status || CitationSourceListStatus.default,\r\n statusMessage: result?.statusMessage || selectedPanelProvider.placeHolderMessage,\r\n });\r\n }\r\n );\r\n }\r\n }, []);\r\n\r\n // When the user presses the insert button\r\n const onOk = () => {\r\n props.onOk(\r\n mergedCitationsToAdd,\r\n insertCitationPanelState.existingBibliographyFile || insertCitationPanelState.createBibliographyFile,\r\n insertCitationPanelState.selectedNode,\r\n insertCitationPanelState.intextCitationStyle\r\n );\r\n };\r\n\r\n // Style properties\r\n const style: React.CSSProperties = {\r\n width: props.width + 'px',\r\n ...props.style,\r\n };\r\n\r\n // Figure out the panel height (the height of the main panel less padding and other elements)\r\n const panelHeight = props.height - 85;\r\n\r\n // In order to debounce typeahead search, we need to memoize the callback so the same debounce function will be\r\n // used even when renders happen. Be sure to pass everything that need to reflect updated state since\r\n // otherwise the value will be captured when the callback is memoized.\r\n const memoizedTypeaheadSearch = React.useCallback(\r\n debounce(\r\n (\r\n searchTerm: string,\r\n panelProvider: CitationSourcePanelProvider,\r\n existingIds: string[],\r\n existingState: InsertCitationPanelState\r\n ) => {\r\n if (panelProvider.typeAheadSearch) {\r\n panelProvider.typeAheadSearch(searchTerm, existingState.selectedNode, existingIds, (result: CitationSourcePanelSearchResult) => {\r\n setInsertCitationPanelState(\r\n {\r\n ...existingState,\r\n searchTerm,\r\n citations: result?.citations,\r\n status: result?.status,\r\n statusMessage: result?.statusMessage,\r\n }\r\n );\r\n });\r\n }\r\n },\r\n 30,\r\n ),\r\n [],\r\n );\r\n\r\n // The core props that will be passed to whatever the selected panel is\r\n // This implements the connection of the panel events and data and the\r\n // core dialog state\r\n const citationProps: CitationSourcePanelProps = {\r\n ui: props.ui,\r\n height: panelHeight,\r\n citations: displayedCitations,\r\n citationsToAdd: mergedCitationsToAdd,\r\n searchTerm: insertCitationPanelState.searchTerm,\r\n onSearchTermChanged: (term: string) => {\r\n const updatedState = { ...insertCitationPanelState, searchTerm: term };\r\n updateState(updatedState);\r\n memoizedTypeaheadSearch(term, selectedPanelProvider, insertCitationConfiguration.existingIds, updatedState);\r\n },\r\n onExecuteSearch: (searchTerm: string) => {\r\n searchCanceled.current = false;\r\n updateState({\r\n searchTerm,\r\n status: CitationSourceListStatus.inProgress,\r\n statusMessage: selectedPanelProvider.progressMessage,\r\n });\r\n if (selectedPanelProvider.search) {\r\n selectedPanelProvider\r\n .search(searchTerm, insertCitationPanelState.selectedNode, existingCitationIds)\r\n .then(searchResult => {\r\n if (!searchCanceled.current) {\r\n // If only a single result is returned, select that by default\r\n const selectedIndex = searchResult?.citations.length === 1 ? 0 : -1;\r\n\r\n updateState({\r\n searchTerm,\r\n citations: searchResult?.citations,\r\n status: searchResult?.status,\r\n statusMessage: searchResult?.statusMessage,\r\n selectedIndex,\r\n });\r\n }\r\n });\r\n }\r\n },\r\n onAddCitation: (citation: CitationListEntry) => {\r\n const newCitations = [...insertCitationPanelState.citationsToAdd, citation];\r\n updateState({ selectedIndex: -1, citationsToAdd: newCitations });\r\n },\r\n onRemoveCitation: (citation: CitationListEntry) => {\r\n deleteCitation(citation.id);\r\n },\r\n selectedIndex: insertCitationPanelState.selectedIndex,\r\n onSelectedIndexChanged: (index: number) => {\r\n updateState({ selectedIndex: index });\r\n },\r\n onConfirm: onOk,\r\n status: insertCitationPanelState.status,\r\n statusMessage: insertCitationPanelState.statusMessage,\r\n warningMessage: selectedPanelProvider.warningMessage || '',\r\n ref: panelRef,\r\n };\r\n\r\n // Tracks whether a long running search has been canceled\r\n // for example by the user navigating to another section of the dialog\r\n const searchCanceled = React.useRef<boolean>(false);\r\n\r\n // This implements the connection of the dialog (non-provider panel) events and data and the\r\n // core dialog state\r\n const onNodeSelected = async (node: NavigationTreeNode) => {\r\n const suggestedPanel = panelForNode(insertCitationConfiguration.providers, node);\r\n if (suggestedPanel) {\r\n\r\n // Clear the current displayed citations\r\n updateState({ citations: [], selectedNode: node, status: CitationSourceListStatus.default, statusMessage: \"\" });\r\n searchCanceled.current = true;\r\n if (suggestedPanel.typeAheadSearch) {\r\n suggestedPanel.typeAheadSearch('', node, insertCitationConfiguration.existingIds, (result: CitationSourcePanelSearchResult) => {\r\n updateState({\r\n searchTerm: '',\r\n citations: result?.citations || [],\r\n status: result?.status || CitationSourceListStatus.default,\r\n statusMessage: result?.statusMessage || suggestedPanel.placeHolderMessage,\r\n selectedNode: node,\r\n });\r\n });\r\n }\r\n\r\n if (suggestedPanel?.key !== selectedPanelProvider?.key) {\r\n setSelectedPanelProvider(suggestedPanel);\r\n }\r\n }\r\n };\r\n\r\n const deleteCitation = (id: string) => {\r\n\r\n // First, see if the item we're delete is the selection\r\n const selCite = displayedCitations[insertCitationPanelState.selectedIndex];\r\n if (selCite && selCite.id === id) {\r\n // This is the selected index, just clear the selection\r\n updateState({ selectedIndex: -1 });\r\n } else {\r\n // This is an explicitly added citation, remove it\r\n const filteredCitations = insertCitationPanelState.citationsToAdd.filter(source => source.id !== id);\r\n updateState({ citationsToAdd: filteredCitations });\r\n }\r\n };\r\n\r\n const onTagDeleted = (tag: TagItem) => {\r\n deleteCitation(tag.key);\r\n };\r\n\r\n const onTagChanged = (key: string, text: string) => {\r\n // Edit any matching entries in the citation basket\r\n const targetSource = insertCitationPanelState.citationsToAdd.find(source => source.id === key);\r\n if (targetSource) {\r\n targetSource.id = text;\r\n }\r\n\r\n // Edit the currently selected item\r\n if (insertCitationPanelState.selectedIndex > -1) {\r\n const currentlySelectedCitation = insertCitationPanelState.citations[insertCitationPanelState.selectedIndex];\r\n if (currentlySelectedCitation && currentlySelectedCitation.id === key) {\r\n currentlySelectedCitation.id = text;\r\n }\r\n }\r\n };\r\n\r\n const onTagValidate = (_key: string, text: string) => {\r\n const invalidChars = text.match(kInvalidCiteKeyChars);\r\n if (invalidChars) {\r\n return props.ui.context.translateText(\r\n 'The citekey includes invalid characters such as a space or a special character.',\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const onBibliographyFileChanged = (biblographyFile: BibliographyFile) => {\r\n updateState({ existingBibliographyFile: biblographyFile });\r\n };\r\n\r\n const onCreateBibliographyFileNameChanged = (fileName: string) => {\r\n updateState({ createBibliographyFile: bibliographyFileForPath(fileName, props.ui) });\r\n };\r\n\r\n const onCitationStyleChanged = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n updateState({\r\n intextCitationStyle: e.target.checked\r\n });\r\n };\r\n\r\n // Support keyboard shortcuts for dismissing dialog\r\n const onKeyPress = (event: React.KeyboardEvent) => {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n onOk();\r\n }\r\n };\r\n\r\n // Esc can cause loss of focus so catch it early\r\n const onKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.key === 'Escape') {\r\n event.stopPropagation();\r\n props.onCancel();\r\n }\r\n };\r\n\r\n const totalCitationCount = insertCitationPanelState.citationsToAdd.length + (insertCitationPanelState.selectedIndex > -1 ? 1 : 0);\r\n\r\n // classes\r\n const classes = [\"pm-cite-panel-container\"];\r\n if (!props.themed) {\r\n classes.push(\"pm-default-theme\");\r\n }\r\n\r\n // Create the panel that should be displayed for the selected node of the tree\r\n const panelToDisplay = selectedPanelProvider\r\n ? React.createElement(selectedPanelProvider.panel, citationProps)\r\n : undefined;\r\n return (\r\n <div className={classes.join(' ')} style={style} onKeyPress={onKeyPress} onKeyDown={onKeyDown}>\r\n <div className=\"pm-cite-panel-cite-selection\">\r\n <div className=\"pm-cite-panel-cite-selection-sources pm-block-border-color pm-background-color\">\r\n <NavigationTree\r\n height={panelHeight}\r\n nodes={treeSourceData}\r\n selectedNode={insertCitationPanelState.selectedNode}\r\n onSelectedNodeChanged={onNodeSelected}\r\n />\r\n </div>\r\n <div className=\"pm-cite-panel-cite-selection-items\">{panelToDisplay}</div>\r\n </div>\r\n <div className=\"pm-cite-panel-selected-cites pm-block-border-color pm-background-color\">\r\n <TagInput\r\n tags={mergedCitationsToAdd.map(source => ({\r\n key: source.id,\r\n displayText: source.id,\r\n displayPrefix: '@',\r\n isEditable: source.isIdEditable,\r\n }))}\r\n onTagDeleted={onTagDeleted}\r\n onTagChanged={onTagChanged}\r\n onTagValidate={onTagValidate}\r\n ui={props.ui}\r\n placeholder={props.ui.context.translateText('Selected Citation Keys')}\r\n maxDisplayCharacters={50}\r\n />\r\n </div>\r\n <div className=\"pm-cite-panel-insert-inputs\">\r\n <div className=\"pm-cite-panel-insert-options\">\r\n {// Only show the picker if there are either no bibliographies specified, or if there are writable bibliographies\r\n insertCitationConfiguration.bibliographyFiles.length === 0 ||\r\n insertCitationConfiguration.bibliographyFiles.some(bibFile => bibFile?.writable) ? (\r\n <CitationBibliographyPicker\r\n bibliographyTypes={bibliographyTypes(props.ui)}\r\n createBibliographyFileName={insertCitationPanelState.createBibliographyFile.displayPath}\r\n onCreateBibliographyFileNameChanged={onCreateBibliographyFileNameChanged}\r\n bibliographyFiles={insertCitationConfiguration.bibliographyFiles}\r\n onBiblographyFileChanged={onBibliographyFileChanged}\r\n ui={props.ui}\r\n />\r\n ) : (\r\n <div />\r\n )}\r\n {\r\n totalCitationCount <= 1 ? (\r\n <div className='pm-cite-panel-checkbox-group'>\r\n <CheckboxInput\r\n id='intextStyleCheckbox'\r\n checked={insertCitationPanelState.intextCitationStyle}\r\n className='pm-cite-panel-checkbox'\r\n onChange={onCitationStyleChanged} />\r\n <label htmlFor='intextStyleCheckbox' className='pm-cite-panel-checkbox-label'>{props.ui.context.translateText('In-text')}</label>\r\n </div>\r\n ) : (\r\n <div />\r\n )}\r\n\r\n </div>\r\n\r\n <DialogButtons\r\n okLabel={props.ui.context.translateText('Insert')}\r\n cancelLabel={props.ui.context.translateText('Cancel')}\r\n onOk={onOk}\r\n onCancel={props.onCancel}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Finds the panel associated with the selected tree node\r\nconst panelForNode = (sourcePanels: CitationSourcePanelProvider[], node?: NavigationTreeNode) => {\r\n if (node) {\r\n const panelItem = sourcePanels.find(panel => {\r\n const panelTreeNode = panel.treeNode();\r\n return containsChild(node.key, panelTreeNode);\r\n });\r\n return panelItem;\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n\r\n// Given a key, find the node associated with the key (useful for restoring a selected node from a key)\r\nconst nodeForKey = (nodes: NavigationTreeNode[], key?: string): NavigationTreeNode | undefined => {\r\n if (!key) {\r\n return undefined;\r\n }\r\n\r\n for (const node of nodes) {\r\n if (node.key === key) {\r\n return node;\r\n }\r\n const childNode = nodeForKey(node.children, key);\r\n if (childNode) {\r\n return childNode;\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\n// Merge the selected citation into the list that is displayed for add and filter it\r\n// out of the citation list itself\r\nconst mergeCitations = (toAdd: CitationListEntry[], selected?: CitationListEntry) => {\r\n if (!selected) {\r\n return toAdd;\r\n } else {\r\n if (toAdd.map(citation => citation.id).includes(selected.id)) {\r\n return toAdd;\r\n } else {\r\n return (toAdd || []).concat(selected);\r\n }\r\n }\r\n};\r\n","/*\r\n * cite-commands.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId, toggleMarkType } from '../../api/command';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { BibliographyManager } from '../../api/bibliography/bibliography';\r\n\r\nimport { ensureSourcesInBibliography } from './cite';\r\nimport { showInsertCitationDialog, InsertCitationDialogResult } from '../../behaviors/insert_citation/insert_citation';\r\nimport { markIsActive, getMarkRange } from '../../api/mark';\r\nimport { EditorServer } from 'editor-types';\r\n\r\nexport class InsertCitationCommand extends ProsemirrorCommand {\r\n private initialSelectionKey: string | undefined;\r\n\r\n constructor(ui: EditorUI, _events: EditorEvents, bibliographyManager: BibliographyManager, server: EditorServer) {\r\n super(\r\n EditorCommandId.Citation,\r\n ['Shift-Mod-F8'],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // enable/disable command\r\n const schema = state.schema;\r\n if (!canInsertNode(state, schema.nodes.text) || !toggleMarkType(schema.marks.cite)(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch && view) {\r\n showInsertCitationDialog(\r\n ui,\r\n state.doc,\r\n bibliographyManager,\r\n server,\r\n async (result: InsertCitationDialogResult) => {\r\n if (result) {\r\n // Remember the last tree node that was selected\r\n this.initialSelectionKey = result.selectionKey;\r\n\r\n // Remember whether the citation is intext for the future\r\n ui.prefs.setCitationDefaultInText(result.intextCitationStyle);\r\n\r\n // The citations that we should insert\r\n const bibliographySources = result.bibliographySources;\r\n\r\n // The bibliography that we should insert sources into (if needed)\r\n const bibliography = result.bibliography;\r\n\r\n // The transaction that will hold all the changes we'll make\r\n const tr = state.tr;\r\n\r\n // First, be sure that we add any sources to the bibliography\r\n // and that the bibliography is properly configured\r\n const writeCiteId = await ensureSourcesInBibliography(\r\n tr,\r\n bibliographySources,\r\n bibliography,\r\n bibliographyManager,\r\n view,\r\n ui,\r\n server.pandoc,\r\n );\r\n\r\n if (writeCiteId) {\r\n // The starting location of this transaction\r\n const start = tr.selection.from;\r\n\r\n // See if we are already inside an active cite mark\r\n const alreadyInCite = markIsActive(tr, schema.marks.cite);\r\n const includeWrapper = !result.intextCitationStyle || result.bibliographySources.length > 1;\r\n\r\n // Insert the wrapping [] if the user wants that style citation\r\n // Note that if the use is inserting more than one citation, we ignore this and just\r\n // always perform a 'note' style citation insert\r\n // If we're already inside a cite including [], don't bother inserting wrapper\r\n if (!alreadyInCite && includeWrapper) {\r\n const wrapperText = schema.text('[]');\r\n tr.insert(tr.selection.from, wrapperText);\r\n\r\n // move the selection into the wrapper\r\n setTextSelection(tr.selection.from - 1)(tr);\r\n }\r\n\r\n // If the previous character is a part of a cite_id, advance to the end of the mark,\r\n // insert a separator, and then proceed\r\n const preCiteIdRange = getMarkRange(tr.doc.resolve(start - 1), schema.marks.cite_id);\r\n if (preCiteIdRange) {\r\n setTextSelection(preCiteIdRange.to)(tr);\r\n const separator = schema.text('; ');\r\n tr.insert(tr.selection.from, separator);\r\n }\r\n\r\n // insert the CiteId marks and text\r\n bibliographySources.forEach((citation, i) => {\r\n const citeIdMark = schema.marks.cite_id.create();\r\n const citeIdText = schema.text(`@${citation.id}`, [citeIdMark]);\r\n tr.insert(tr.selection.from, citeIdText);\r\n if (bibliographySources.length > 1 && i !== bibliographySources.length - 1) {\r\n tr.insert(tr.selection.from, schema.text('; ', []));\r\n }\r\n });\r\n\r\n // If the next character is a part of a cite_id, insert a separator (that will appear after the current citeId)\r\n const postCiteIdRange = getMarkRange(tr.doc.resolve(tr.selection.from + 1), schema.marks.cite_id);\r\n if (postCiteIdRange) {\r\n const separator = schema.text('; ');\r\n tr.insert(tr.selection.from, separator);\r\n }\r\n\r\n // Enclose wrapper in the cite mark (if not already in a cite)\r\n if (!alreadyInCite) {\r\n const endOfWrapper = includeWrapper ? tr.selection.from + 1 : tr.selection.from;\r\n const citeMark = schema.marks.cite.create();\r\n tr.addMark(start, endOfWrapper, citeMark);\r\n setTextSelection(endOfWrapper)(tr);\r\n }\r\n }\r\n\r\n // commit the transaction\r\n dispatch(tr);\r\n\r\n return Promise.resolve();\r\n } \r\n },\r\n this.initialSelectionKey,\r\n ).then(() => {\r\n view.focus();\r\n });\r\n }\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('Citation...'),\r\n description: ui.context.translateText('Reference to a source'),\r\n group: OmniInsertGroup.References,\r\n priority: 1,\r\n noFocus: true,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.citation_dark : ui.images.omni_insert.citation),\r\n },\r\n // false\r\n );\r\n }\r\n}\r\n","/*\r\n * xref-popup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet, EditorView } from 'prosemirror-view';\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { textPopupDecorationPlugin, TextPopupTarget } from '../../api/text-popup';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { Popup } from '../../api/widgets/popup';\r\nimport { xrefKey, parseQuartoXRef } from '../../api/xref';\r\nimport { LinkButton } from '../../api/widgets/button';\r\n\r\nimport './cite-popup-xref.css';\r\nimport { EditorServer, XRef } from 'editor-types';\r\n\r\nconst kMaxWidth = 350;\r\n\r\nexport function citeXrefPopupPlugin(schema: Schema, ui: EditorUI, server: EditorServer) {\r\n return textPopupDecorationPlugin({\r\n key: new PluginKey<DecorationSet>('cite-xref-popup'),\r\n markType: schema.marks.cite_id,\r\n maxWidth: kMaxWidth,\r\n dismissOnEdit: false,\r\n createPopup: async (_view: EditorView, target: TextPopupTarget, style: React.CSSProperties) => {\r\n\r\n // lookup xref on server\r\n const docPath = ui.context.getDocumentPath();\r\n if (docPath) {\r\n\r\n const citeId = target.text.replace(/^-@|^@/, '');\r\n const parsed = parseQuartoXRef(citeId);\r\n if (parsed) {\r\n const { id, type } = parsed;\r\n\r\n const xrefs = await server.xref.quartoXrefForId(docPath, `${type.toLowerCase()}-${id}`);\r\n if (xrefs.refs.length > 0) {\r\n if (xrefs.refs.length) {\r\n const xref = xrefs.refs[0];\r\n\r\n // click handler\r\n const onClick = () => {\r\n const file = xrefs.baseDir + '/' + xref.file;\r\n ui.display.navigateToXRef(file, xref);\r\n };\r\n\r\n return <XrefCitefPopup xref={xref} onClick={onClick} style={style} />;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n });\r\n}\r\n\r\ninterface XRefCitePopupProps extends WidgetProps {\r\n xref: XRef;\r\n onClick: VoidFunction;\r\n style: React.CSSProperties;\r\n}\r\n\r\nconst XrefCitefPopup: React.FC<XRefCitePopupProps> = props => {\r\n return (\r\n <Popup classes={['pm-cite-xref-popup']} style={props.style} >\r\n <div>\r\n <LinkButton\r\n text={xrefKey(props.xref, \"quarto\")}\r\n onClick={props.onClick}\r\n maxWidth={kMaxWidth - 20\r\n }\r\n classes={['pm-cite-xref-popup-key pm-fixedwidth-font']}\r\n />\r\n </div>\r\n {props.xref.title ? (\r\n <div className=\"pm-cite-xref-popup-text\" >{props.xref.title} </div>\r\n ) : null}\r\n <div className=\"pm-cite-xref-popup-file\" >{props.xref.file} </div>\r\n </Popup>\r\n );\r\n};\r\n","/*\r\n * cite.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Mark, Schema, Fragment, Node as ProsemirrorNode, Slice } from 'prosemirror-model';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { EditorState, Transaction, Plugin, PluginKey } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport uniqby from 'lodash.uniqby';\r\n\r\nimport { FocusEvent } from '../../api/event-types';\r\nimport { PandocTokenType, PandocToken, PandocOutput, ProsemirrorWriter, PandocServer, kPreventBracketEscape } from '../../api/pandoc';\r\nimport { fragmentText } from '../../api/fragment';\r\nimport { markIsActive, splitInvalidatedMarks, getMarkRange, detectAndApplyMarks, domAttrNoSpelling } from '../../api/mark';\r\nimport { MarkTransaction } from '../../api/transaction';\r\nimport { BibliographyManager, BibliographyFile, BibliographySource } from '../../api/bibliography/bibliography';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { joinPaths, getExtension } from '../../api/path';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { InsertCiteProps, kAlertTypeError, kAlertTypeWarning } from 'editor-types';\r\nimport { CSL, sanitizeForCiteproc } from '../../api/csl';\r\nimport { suggestCiteId, formatForPreview } from '../../api/cite';\r\nimport { performCompletionReplacement } from '../../api/completion';\r\nimport { FixupContext } from '../../api/fixup';\r\nimport { pasteTransaction } from '../../api/clipboard';\r\nimport { ensureBibliographyFileForDoc } from '../../api/bibliography/bibliography-provider_local';\r\n\r\nimport { citationCompletionHandler } from './cite-completion';\r\nimport { citeHighlightPlugin } from './cite-highlight';\r\nimport { citationDoiCompletionHandler } from './cite-completion_doi';\r\nimport { doiFromSlice } from './cite-doi';\r\nimport { citePopupPlugin } from './cite-popup';\r\nimport { InsertCitationCommand } from './cite-commands';\r\nimport { setTextSelection, findChildren } from 'prosemirror-utils';\r\nimport { AddMarkStep } from 'prosemirror-transform';\r\nimport { citeXrefPopupPlugin } from './cite-popup-xref';\r\n\r\nconst kCiteCitationsIndex = 0;\r\n\r\n\r\n// Follow the pandoc rules for citations\r\n// Each citation must have a key, composed of ‘@’ + the citation identifier from the database, \r\n// and may optionally have a prefix, a locator, and a suffix. The citation key must begin with a letter, \r\n// digit, or _, and may contain alphanumerics (UNICODE), _, and internal punctuation characters (:.#$%&-+?<>~/).\r\n// In addition, we don't permit the citation to include a . or ? character (which are allowed in the cite identifier)\r\n// This is only because when writing in text citations, it will be common to follow a citation with \r\n// punctuation, and we should be smart enough to filter that punctuation out of the citation itself.\r\nconst kCiteIdPrefixPattern = '-?@';\r\nconst kCiteIdCharsPattern = '[^@;\\\\(\\\\)\\\\[\\\\]\\\\s\\\\!\\\\,]*';\r\nconst kCiteIdBasePattern = `${kCiteIdPrefixPattern}${kCiteIdCharsPattern}`;\r\n\r\n// Completions examine all the text inside the citation mark, so they need to only be interested\r\n// in a citeId that terminates at the cursor (at the end of the text)\r\nconst kCompletionCiteIdRegEx = new RegExp(`(${kCiteIdPrefixPattern})(${kCiteIdCharsPattern})$`);\r\n\r\n// Note that since Cite Ids can appear inline as in-text representations or can appear inside of brackets \r\n// in a Note style. Consequently, this is used in various places to identify them interchangeably (e.g. we use)\r\n// this to identify a citeId inline in text, but also to identify a citedId in a bracketed citation.\r\nconst kCiteId = new RegExp(`^${kCiteIdBasePattern}`);\r\n\r\n// Plain In Text: @foo2019 (this is intentionally a duplicate of the above)\r\n// just to make the meaning more clear (this is used to detect an in text citation)\r\nconst kInTextCiteRegex = new RegExp(`${kCiteIdBasePattern}$`);\r\n\r\n// Note Style: [@foo2019]\r\nconst kBeginCitePattern = `([^-]+ -@|[^@]+ @|-?@)`;\r\nconst kNoteCiteRegex = new RegExp(`\\\\[${kBeginCitePattern}${kCiteIdCharsPattern}.*?\\\\]`);\r\n\r\n// In Text with Suffix: @foo2019 [p 35]\r\nconst kInTextCiteWithSuffixPattern = `${kCiteIdPrefixPattern}${kCiteIdCharsPattern}\\\\s+\\\\[.*?\\\\]`;\r\nconst kInTextCiteWithSuffixRegEx = new RegExp(`^${kInTextCiteWithSuffixPattern}$`);\r\n\r\nenum CitationMode {\r\n NormalCitation = 'NormalCitation',\r\n AuthorInText = 'AuthorInText',\r\n SuppressAuthor = 'SuppressAuthor',\r\n}\r\n\r\ninterface Citation {\r\n citationHash: number;\r\n citationId: string;\r\n citationMode: {\r\n t: CitationMode;\r\n };\r\n citationNoteNum: number;\r\n citationPrefix: PandocToken[];\r\n citationSuffix: PandocToken[];\r\n}\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n // prime bibliography on initial focus\r\n const bibliographyManager = new BibliographyManager(context.server.pandoc, context.server.zotero);\r\n const focusUnsubscribe = context.events.subscribe(FocusEvent, doc => {\r\n bibliographyManager.prime(ui, doc!);\r\n focusUnsubscribe();\r\n });\r\n\r\n if (!pandocExtensions.citations) {\r\n return null;\r\n }\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'cite',\r\n spec: {\r\n attrs: {},\r\n inclusive: false,\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='cite']\",\r\n // use priority to ensure that cite_id is parsed before cite\r\n // when reading the DOM for the clipboard. we need this because\r\n // 'cite' is first in the mark order (so that @ witin a cite\r\n // properly triggers the input rule)\r\n priority: 5\r\n },\r\n ],\r\n toDOM() {\r\n return ['span', { class: 'cite' } ]\r\n \r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Cite,\r\n handler: readPandocCite,\r\n },\r\n ],\r\n\r\n writer: {\r\n priority: 14,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n\r\n // extract parentText for inspection\r\n const parentText = fragmentText(parent);\r\n\r\n // if it's just a cite id then write it straight up\r\n if (fragmentText(parent).match(kInTextCiteRegex)) {\r\n\r\n output.writeInlines(parent);\r\n\r\n } else {\r\n\r\n // divide out delimiters from body\r\n const openCite = parent.cut(0, 1);\r\n const cite = parent.cut(1, parent.size - 1);\r\n const closeCite = parent.cut(parent.size - 1, parent.size);\r\n\r\n // check for fully enclosed in brackets\r\n if (\r\n fragmentText(openCite) === '[' &&\r\n fragmentText(closeCite) === ']'\r\n ) {\r\n output.writeRawMarkdown('[');\r\n output.withOption(kPreventBracketEscape, true, () => {\r\n output.writeInlines(cite);\r\n });\r\n output.writeRawMarkdown(']');\r\n\r\n\r\n // if it starts with a valid cite id prefix and ends with a close\r\n // bracket then it might be an in-text citation with a suffix\r\n } else if (parentText.match(kInTextCiteWithSuffixRegEx)) {\r\n\r\n // find the position of the begin bracket that matches the end bracket\r\n let beginBracketPos = -1;\r\n let bracketLevel = 0;\r\n for (let i = parentText.length - 2; i >= 0; i--) {\r\n const char = parentText.charAt(i);\r\n if (char === ']') {\r\n bracketLevel++;\r\n } else if (char === '[') {\r\n if (bracketLevel > 0) {\r\n bracketLevel--;\r\n } else {\r\n beginBracketPos = i;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // if we found one then cut as approrpriate\r\n if (beginBracketPos) {\r\n output.writeInlines(parent.cut(0, beginBracketPos));\r\n output.writeRawMarkdown('[');\r\n output.writeInlines(parent.cut(beginBracketPos + 1, parentText.length - 1));\r\n output.writeRawMarkdown(']');\r\n\r\n } else {\r\n output.writeInlines(parent);\r\n }\r\n } else {\r\n output.writeInlines(parent);\r\n }\r\n }\r\n },\r\n },\r\n },\r\n },\r\n {\r\n name: 'cite_id',\r\n noSpelling: true,\r\n spec: {\r\n attrs: {},\r\n inclusive: true,\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='cite-id']\",\r\n // use priority to ensure that cite_id is parsed before cite\r\n // when reading the DOM for the clipboard. we need this because\r\n // 'cite' is first in the mark order (so that @ witin a cite\r\n // properly triggers the input rule)\r\n priority: 10\r\n },\r\n ],\r\n toDOM() {\r\n return ['span', domAttrNoSpelling({ class: 'cite-id pm-link-text-color pm-fixedwidth-font' })];\r\n },\r\n },\r\n pandoc: {\r\n readers: [],\r\n writer: {\r\n priority: 13,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n const idText = fragmentText(parent);\r\n // only write as a citation id (i.e. don't escape @) if it is still\r\n // a valid citation id. note that this in principle is also taken care\r\n // of by the application of splitInvalidatedMarks below (as the\r\n // mark would have been broken by this if it wasn't valid). this\r\n // code predates that, and we leave it in for good measure in case that\r\n // code is removed or changes in another unexpected way.\r\n if (idText.match(kInTextCiteRegex)) {\r\n const prefixMatch = idText.match(/^-?@/);\r\n if (prefixMatch) {\r\n output.writeRawMarkdown(prefixMatch.input!);\r\n output.writeInlines(parent.cut(prefixMatch.input!.length));\r\n } else {\r\n output.writeInlines(parent);\r\n }\r\n } else {\r\n output.writeInlines(parent);\r\n }\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: () => {\r\n return [new InsertCitationCommand(ui, context.events, bibliographyManager, context.server)];\r\n },\r\n\r\n appendTransaction: (schema: Schema) => {\r\n return [{\r\n name: 'cite-id-join',\r\n append: (tr: Transaction) => {\r\n const range = getMarkRange(tr.doc.resolve(tr.selection.head - 1), schema.marks.cite_id);\r\n if (range) {\r\n const text = tr.doc.textBetween(range.from, tr.selection.$head.after());\r\n const citeIdLen = citeIdLength(text);\r\n const markLength = range.to - range.from;\r\n if (citeIdLen > markLength) {\r\n tr.addMark(range.from, range.from + citeIdLen, schema.marks.cite_id.create());\r\n }\r\n }\r\n return tr;\r\n },\r\n }];\r\n },\r\n\r\n fixups: (schema: Schema) => {\r\n return [\r\n (tr: Transaction, fixupContext: FixupContext) => {\r\n if (fixupContext === FixupContext.Load) {\r\n // apply marks\r\n const markType = schema.marks.cite;\r\n const predicate = (node: ProsemirrorNode) => {\r\n return node.isTextblock && \r\n node.type.allowsMarkType(markType) &&\r\n node.textContent.indexOf('@') !== -1;\r\n };\r\n const markTr = new MarkTransaction(tr);\r\n findChildren(tr.doc, predicate).forEach(nodeWithPos => {\r\n const { pos } = nodeWithPos;\r\n applyCiteMarks(markTr, nodeWithPos.node, pos);\r\n });\r\n }\r\n return tr;\r\n },\r\n ];\r\n },\r\n\r\n appendMarkTransaction: (schema: Schema) => {\r\n\r\n return [\r\n {\r\n // 'break' cite marks if they are no longer valid. note that this will still preserve\r\n // the mark up to the length that it is valid. \r\n name: 'cite-marks',\r\n filter: (node: ProsemirrorNode, transactions: readonly Transaction[]) => {\r\n\r\n // if the transaction added any cite id marks then we need to lay off\r\n // (mostly so that input rules can be reversed)\r\n if (transactions.some(trans => trans.steps.some(step => {\r\n if (step instanceof AddMarkStep) {\r\n return step.mark.type === schema.marks.cite_id;\r\n } else {\r\n return false;\r\n }\r\n }))) {\r\n return false;\r\n\r\n /// otherwise proceed if this node is a textblock that allows cites\r\n } else {\r\n\r\n return node.isTextblock && node.type.allowsMarkType(schema.marks.cite);\r\n }\r\n },\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n splitInvalidatedMarks(tr, node, pos, citeLength, schema.marks.cite, (from: number, to: number) => {\r\n tr.removeMark(from, to, schema.marks.cite);\r\n });\r\n // match all valid forms of mark\r\n if (node.textContent.indexOf('@') !== -1) {\r\n applyCiteMarks(tr, node, pos);\r\n }\r\n },\r\n },\r\n {\r\n // 'break' cite_id marks if they are no longer valid. note that this will still preserve\r\n // the mark up to the length that it is valid (so e.g. if a space is inserted within a\r\n // cite_id this will keep the mark on the part before the space and remove it from the\r\n // part after the space)\r\n name: 'remove-cite-id-marks',\r\n filter: (node: ProsemirrorNode) => node.isTextblock && node.type.allowsMarkType(schema.marks.cite_id),\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n splitInvalidatedMarks(tr, node, pos, citeIdLength, schema.marks.cite_id);\r\n },\r\n },\r\n ];\r\n },\r\n\r\n inputRules: (schema: Schema) => {\r\n return [\r\n citeIdInputRule(schema),\r\n citeIdDashInputRule(schema),\r\n ];\r\n },\r\n\r\n completionHandlers: () => [\r\n citationDoiCompletionHandler(context.ui, bibliographyManager, context.server),\r\n citationCompletionHandler(context.ui, context.events, bibliographyManager, context.server, context.format),\r\n ],\r\n\r\n plugins: (schema: Schema) => {\r\n return [\r\n new Plugin({\r\n key: new PluginKey('paste_cite_doi'),\r\n props: {\r\n handlePaste: handlePaste(ui, bibliographyManager, context.server.pandoc),\r\n },\r\n }),\r\n citeHighlightPlugin(schema),\r\n citeXrefPopupPlugin(schema, ui, context.server),\r\n citePopupPlugin(schema, ui, bibliographyManager, context.server),\r\n\r\n ];\r\n },\r\n };\r\n};\r\n\r\nfunction handlePaste(ui: EditorUI, bibManager: BibliographyManager, server: PandocServer) {\r\n return (view: EditorView, _event: Event, slice: Slice) => {\r\n const schema = view.state.schema;\r\n if (markIsActive(view.state, schema.marks.cite_id)) {\r\n // This is a DOI\r\n const parsedDOI = doiFromSlice(view.state, slice);\r\n if (parsedDOI) {\r\n // Insert the DOI text as a placeholder\r\n const tr = pasteTransaction(view.state);\r\n const doiText = schema.text(parsedDOI.token);\r\n tr.replaceSelectionWith(doiText, true);\r\n view.dispatch(tr);\r\n\r\n // First check the local bibliography- if we already have this DOI\r\n // we can just paste the DOI\r\n const source = bibManager.findDoiInLocalBibliography(parsedDOI.token);\r\n if (!source && bibManager.allowsWrites()) {\r\n insertCitation(view, parsedDOI.token, bibManager, parsedDOI.pos, ui, server);\r\n }\r\n return true;\r\n } else {\r\n // This is just content, accept any text and try pasting that\r\n let text = '';\r\n slice.content.forEach((node: ProsemirrorNode) => (text = text + node.textContent));\r\n if (text.length > 0) {\r\n const tr = pasteTransaction(view.state);\r\n tr.replaceSelectionWith(schema.text(text));\r\n view.dispatch(tr);\r\n return true;\r\n } else {\r\n // There wasn't any text, just allow the paste to be handled by anyone else\r\n return false;\r\n }\r\n }\r\n } else {\r\n // We aren't in a citation so let someone else handle the paste\r\n return false;\r\n }\r\n };\r\n}\r\n\r\n\r\n// create a cite_id within a citation when the @ sign is typed\r\nfunction citeIdInputRule(schema: Schema) {\r\n return new InputRule(/@$/, (state: EditorState, match: string[], start: number) => {\r\n if (!markIsActive(state, schema.marks.cite_id)) {\r\n const { parent, parentOffset } = state.selection.$head;\r\n const text = match[0] + parent.textContent.slice(parentOffset);\r\n const textBefore = parent.textContent.slice(0, parentOffset);\r\n\r\n // reject unless the right prefix is there\r\n if (textBefore.length && !textBefore.match(/[\\xA0 \\t\\-[]$/)) {\r\n return null;\r\n }\r\n\r\n // get cite id length\r\n const citeIdLen = citeIdLength(text);\r\n\r\n // insert the @\r\n const tr = state.tr;\r\n tr.insertText(match[0]);\r\n\r\n // insert a pairing end bracket if we started with [\r\n if (citeIdLen === 1 && textBefore.match(/\\[-?$/) && text[1] !== ']') {\r\n tr.insertText(']');\r\n setTextSelection(tr.selection.head - 1)(tr);\r\n }\r\n\r\n if (citeIdLen) {\r\n // offset mark for incidence of '-' prefix\r\n const offset = textBefore.endsWith('-') ? 1 : 0;\r\n const citeStart = start - offset;\r\n const citeEnd = citeStart + citeIdLen + offset;\r\n tr.addMark(citeStart, citeEnd, schema.marks.cite_id.create());\r\n }\r\n\r\n return tr;\r\n }\r\n return null;\r\n });\r\n}\r\n\r\n\r\nfunction citeIdDashInputRule(schema: Schema) {\r\n return new InputRule(new RegExp(`-$`), (state: EditorState, match: string[], start: number, end: number) => {\r\n if (state.doc.rangeHasMark(start + 1, end + 2, schema.marks.cite_id)) {\r\n const tr = state.tr;\r\n tr.insertText(match[0]);\r\n tr.addMark(start, start + 1, schema.marks.cite_id.create());\r\n return tr;\r\n }\r\n return null;\r\n });\r\n}\r\n\r\n\r\n// read pandoc citation, creating requisite cite and cite_id marks as we go\r\nfunction readPandocCite(schema: Schema) {\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n\r\n // create and open the mark\r\n const citeMark = schema.marks.cite.create();\r\n writer.openMark(citeMark);\r\n\r\n // helper to write a citation\r\n const writeCitation = (citation: Citation) => {\r\n // prefix\r\n writer.writeTokens(citation.citationPrefix);\r\n if (citation.citationPrefix.length) {\r\n writer.writeText(' ');\r\n }\r\n\r\n // id\r\n const suppress = citation.citationMode.t === CitationMode.SuppressAuthor ? '-' : '';\r\n const citeIdMark = schema.marks.cite_id.create();\r\n writer.openMark(citeIdMark);\r\n writer.writeText(suppress + '@' + citation.citationId);\r\n writer.closeMark(citeIdMark);\r\n\r\n // suffix\r\n const inTextSuffix = citation.citationMode.t === CitationMode.AuthorInText && citation.citationSuffix.length;\r\n if (inTextSuffix) {\r\n writer.writeText(' [');\r\n }\r\n writer.writeTokens(citation.citationSuffix);\r\n if (inTextSuffix) {\r\n writer.writeText(']');\r\n }\r\n };\r\n\r\n // get all of the citations\r\n const citations: Citation[] = tok.c[kCiteCitationsIndex];\r\n\r\n // look for a single in-text citation\r\n if (citations.length === 1 && citations[0].citationMode.t === CitationMode.AuthorInText) {\r\n writeCitation(citations[0]);\r\n // non-in text and/or multiple citations\r\n } else {\r\n writer.writeText('[');\r\n citations.forEach((citation: Citation, index: number) => {\r\n // add delimiter\r\n if (index !== 0) {\r\n writer.writeText('; ');\r\n }\r\n writeCitation(citation);\r\n });\r\n writer.writeText(']');\r\n }\r\n\r\n writer.closeMark(citeMark);\r\n };\r\n}\r\n\r\nconst kCitationIdRegex = new RegExp(`(^\\\\[| )(${kCiteIdBasePattern})`, 'g');\r\n\r\nfunction encloseInCiteMark(tr: Transaction, start: number, end: number) {\r\n const schema = tr.doc.type.schema;\r\n const mark = schema.marks.cite.create();\r\n\r\n tr.addMark(start, end, mark);\r\n\r\n // look for valid citation ids inside and mark them\r\n const citeText = tr.doc.textBetween(start, end);\r\n\r\n kCitationIdRegex.lastIndex = 0;\r\n let match = kCitationIdRegex.exec(citeText);\r\n while (match !== null) {\r\n const pos = start + match.index + match[1].length;\r\n const idMark = schema.marks.cite_id.create();\r\n\r\n tr.addMark(pos, pos + match[2].length, idMark);\r\n match = kCitationIdRegex.exec(citeText);\r\n }\r\n kCitationIdRegex.lastIndex = 0;\r\n return tr;\r\n}\r\n\r\nfunction citeLength(text: string) {\r\n if (text.match(kNoteCiteRegex) ||\r\n text.match(kInTextCiteRegex) ||\r\n text.match(kInTextCiteWithSuffixRegEx)) {\r\n return text.length;\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n// up to how many characters of the passed text constitute a valid cite_id in the editor\r\n// (note that the editor tolerates citations ids with just an '@')\r\nfunction citeIdLength(text: string) {\r\n const match = text.match(kCiteId);\r\n if (match) {\r\n return match[0].length;\r\n } else {\r\n return 0;\r\n }\r\n}\r\n\r\n\r\nconst kFindInTextCiteRegex = new RegExp(kCiteIdBasePattern, 'g');\r\nconst kFindInTextCiteWithSuffixRegex = new RegExp(kInTextCiteWithSuffixPattern, 'g');\r\nconst kFindFullCiteRegex = new RegExp(kNoteCiteRegex.source, 'g');\r\n\r\nfunction applyCiteMarks(tr: MarkTransaction, node: ProsemirrorNode, pos: number) {\r\n const schema = node.type.schema;\r\n [kFindInTextCiteRegex, kFindFullCiteRegex, kFindInTextCiteWithSuffixRegex].forEach(re => {\r\n detectAndApplyMarks(\r\n tr,\r\n tr.doc.nodeAt(pos)!,\r\n pos,\r\n re,\r\n schema.marks.cite,\r\n () => ({}),\r\n (from: number, to: number) => {\r\n return tr.doc.rangeHasMark(from, to, schema.marks.cite_id);\r\n }\r\n );\r\n });\r\n}\r\n\r\n\r\nexport interface ParsedCitation {\r\n token: string;\r\n pos: number;\r\n offset: number;\r\n}\r\n\r\nexport function parseCitation(context: EditorState | Transaction): ParsedCitation | null {\r\n // return completions only if we are inside a cite_id . This way\r\n // if the user dismisses the cite_id (e.g. decides to type @ as literal string)\r\n // we won't offer completions\r\n const markType = context.doc.type.schema.marks.cite_id;\r\n const range = getMarkRange(context.doc.resolve(context.selection.head - 1), markType);\r\n if (range) {\r\n // examine text up to the cursor\r\n const citeText = context.doc.textBetween(range.from, context.selection.head);\r\n\r\n // make sure there is no text directly ahead (except bracket, space, semicolon)\r\n const nextChar = context.doc.textBetween(context.selection.head, context.selection.head + 1);\r\n if (!nextChar || [';', ' ', ']'].includes(nextChar)) {\r\n // look for a cite id that terminates at the cursor (including spaces/text after the id,\r\n // but before any semicolon delimiter)\r\n const match = citeText.match(kCompletionCiteIdRegEx);\r\n if (match) {\r\n const token = match[2];\r\n const pos = range.from + match.index! + match[1].length;\r\n return { token, pos, offset: -match[1].length };\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n// Replaces the current selection with a resolved citation id\r\nexport async function insertCitation(\r\n view: EditorView,\r\n doi: string,\r\n bibManager: BibliographyManager,\r\n pos: number,\r\n ui: EditorUI,\r\n server: PandocServer,\r\n csl?: CSL,\r\n provider?: string,\r\n) {\r\n // ensure the bib manager is loaded before proceeding\r\n await bibManager.loadLocal(ui, view.state.doc);\r\n\r\n // We try not call this function if the entry for this DOI is already in the bibliography,\r\n // but it can happen. So we need to check here if it is already in the bibliography and\r\n // if it is, deal with it appropriately.\r\n const existingEntry = bibManager.findDoiInLocalBibliography(doi);\r\n if (existingEntry) {\r\n // Now that we have loaded the bibliography, there is an entry\r\n // Just write it. Not an ideal experience, but something that\r\n // should happen only in unusual experiences\r\n const tr = view.state.tr;\r\n\r\n // This could be called by paste handler, so stop completions\r\n performCiteCompletionReplacement(tr, tr.mapping.map(pos), existingEntry.id);\r\n view.dispatch(tr);\r\n } else {\r\n // There isn't an entry in the existing bibliography\r\n // Show the user UI to and ultimately create an entry in the biblography\r\n // (even creating a bibliography if necessary)\r\n\r\n // Read bibliographies out of the document and pass those alone\r\n const existingIds = bibManager.localSources().map(source => source.id);\r\n\r\n const citeProps: InsertCiteProps = {\r\n doi,\r\n existingIds,\r\n bibliographyFiles: bibManager\r\n .writableBibliographyFiles(view.state.doc, ui)\r\n .map(writableFile => writableFile.displayPath),\r\n provider,\r\n csl,\r\n citeUI: csl\r\n ? {\r\n suggestedId: csl.id || suggestCiteId(existingIds, csl),\r\n previewFields: formatForPreview(csl),\r\n }\r\n : undefined,\r\n };\r\n\r\n const result = await ui.dialogs.insertCite(citeProps);\r\n if (result && result.id.length) {\r\n if (!result?.csl.title) {\r\n await ui.dialogs.alert(\r\n ui.context.translateText('Invalid Citation'),\r\n ui.context.translateText(\r\n \"This citation can't be added to the bibliography because it is missing required fields.\",\r\n ),\r\n kAlertTypeError,\r\n );\r\n } else {\r\n // Figure out whether this is a project or document level bibliography\r\n const writableBiblios = bibManager.writableBibliographyFiles(view.state.doc, ui);\r\n\r\n // Sort out the bibliography file into which we should write the entry\r\n const thisWritableBiblio = writableBiblios.find(writable => writable.displayPath === result.bibliographyFile);\r\n const project = thisWritableBiblio?.isProject || false;\r\n const writableBiblioPath = thisWritableBiblio\r\n ? thisWritableBiblio.fullPath\r\n : joinPaths(ui.context.getDefaultResourceDir(), result.bibliographyFile);\r\n const bibliographyFile: BibliographyFile = {\r\n displayPath: result.bibliographyFile,\r\n fullPath: writableBiblioPath,\r\n isProject: project,\r\n writable: true,\r\n };\r\n\r\n // Create the source that holds the id, provider, etc...\r\n const source: BibliographySource = {\r\n ...result.csl,\r\n id: result.id,\r\n providerKey: provider || '',\r\n };\r\n\r\n // Start the transaction\r\n const tr = view.state.tr;\r\n\r\n // Write the source to the bibliography if needed\r\n const writeCiteId = await ensureSourcesInBibliography(\r\n tr,\r\n [source],\r\n bibliographyFile,\r\n bibManager,\r\n view,\r\n ui,\r\n server,\r\n );\r\n\r\n if (writeCiteId) {\r\n // Write the citeId\r\n const schema = view.state.schema;\r\n const idText = schema.text(source.id, [schema.marks.cite_id.create()]);\r\n performCiteCompletionReplacement(tr, tr.mapping.map(pos), idText);\r\n }\r\n\r\n // Dispath the transaction\r\n view.dispatch(tr);\r\n }\r\n }\r\n view.focus();\r\n }\r\n}\r\n\r\n// Ensures that the sources are in the specified bibliography file\r\n// and ensures that the bibliography file is properly referenced (either)\r\n// as a project bibliography or inline in the document YAML\r\nexport async function ensureSourcesInBibliography(\r\n tr: Transaction,\r\n sources: BibliographySource[],\r\n bibliographyFile: BibliographyFile,\r\n bibManager: BibliographyManager,\r\n view: EditorView,\r\n ui: EditorUI,\r\n server: PandocServer,\r\n): Promise<boolean> {\r\n // Write entry to a bibliography file if it isn't already present\r\n await bibManager.loadLocal(ui, view.state.doc);\r\n\r\n // See if there is a warning for the selected provider. If there is, we may need to surface\r\n // that to the user. If there is no provider specified, no need to care about warnings.\r\n const providers = uniqby(sources, (source: BibliographySource) => source.providerKey).map(\r\n source => source.providerKey,\r\n );\r\n\r\n // Find any providers that have warnings\r\n const providersWithWarnings = providers.filter(prov => bibManager.warningForProvider(prov));\r\n\r\n // Is this a bibtex bibliography?\r\n const bibliographyFileExtension = getExtension(bibliographyFile.fullPath);\r\n const isBibTexBibliography = !['yaml', 'yml', 'json'].includes(bibliographyFileExtension);\r\n\r\n // If there is a warning message and we're exporting to BibTeX, show the warning\r\n // message to the user and confirm that they'd like to proceed. This would ideally\r\n // know more about the warning type and not have this filter here (e.g. it would just\r\n // always show the warning)\r\n let proceedWithInsert = true;\r\n if (providersWithWarnings.length > 0 && ui.prefs.zoteroUseBetterBibtex() && isBibTexBibliography) {\r\n const results = await Promise.all<boolean>(\r\n providersWithWarnings.map(async withWarning => {\r\n const warning = bibManager.warningForProvider(withWarning);\r\n if (warning) {\r\n return await ui.dialogs.yesNoMessage(\r\n ui.context.translateText('Warning'),\r\n warning,\r\n kAlertTypeWarning,\r\n ui.context.translateText('Insert Citation Anyway'),\r\n ui.context.translateText('Cancel'),\r\n );\r\n } else {\r\n return true;\r\n }\r\n }),\r\n );\r\n proceedWithInsert = results.every(result => result);\r\n }\r\n\r\n if (proceedWithInsert) {\r\n await Promise.all(\r\n sources.map(async (source) => {\r\n if (source.id) {\r\n // Crossref sometimes provides invalid json for some entries. Sanitize it for citeproc\r\n const cslToWrite = sanitizeForCiteproc(source);\r\n\r\n if (!bibManager.findIdInLocalBibliography(source.id)) {\r\n const sourceAsBibTex = isBibTexBibliography\r\n ? await bibManager.generateBibTeX(ui, source.id, cslToWrite, source.providerKey)\r\n : undefined;\r\n await server.addToBibliography(\r\n bibliographyFile.fullPath,\r\n bibliographyFile.isProject,\r\n source.id,\r\n JSON.stringify([cslToWrite]),\r\n sourceAsBibTex || '',\r\n ui.context.getDocumentPath()\r\n );\r\n }\r\n\r\n if (!bibliographyFile.isProject) {\r\n ensureBibliographyFileForDoc(tr, bibliographyFile.displayPath);\r\n }\r\n }\r\n }),\r\n );\r\n }\r\n return proceedWithInsert;\r\n}\r\nexport function performCiteCompletionReplacement(tr: Transaction, pos: number, replacement: ProsemirrorNode | string) {\r\n // perform replacement\r\n performCompletionReplacement(tr, pos, replacement);\r\n\r\n // find the range of the cite and fixup marks\r\n const range = getMarkRange(tr.selection.$head, tr.doc.type.schema.marks.cite);\r\n if (range) {\r\n encloseInCiteMark(tr, range.from, range.to);\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * span.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Mark, Fragment, DOMOutputSpec, Attrs } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { ExtensionContext } from '../api/extension';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { markIsActive, getMarkAttrs, getSelectionMarkRange } from '../api/mark';\r\nimport { PandocOutput, PandocTokenType, PandocToken } from '../api/pandoc';\r\nimport {\r\n pandocAttrSpec,\r\n pandocAttrReadAST,\r\n pandocAttrParseDom,\r\n pandocAttrToDomAttr,\r\n kSpanAttr,\r\n kSpanChildren\r\n} from '../api/pandoc_attr';\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n if (!pandocExtensions.bracketed_spans && !pandocExtensions.native_spans) {\r\n return null;\r\n }\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'span',\r\n spec: {\r\n attrs: pandocAttrSpec,\r\n inclusive: false,\r\n parseDOM: [\r\n {\r\n tag: 'span[data-span=\"1\"]',\r\n getAttrs(dom: Node | string) {\r\n const attrs: Attrs = { 'data-span': 1 };\r\n return {\r\n ...attrs,\r\n ...pandocAttrParseDom(dom as Element, attrs),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(mark: Mark): DOMOutputSpec {\r\n const attr = {\r\n 'data-span': '1',\r\n ...pandocAttrToDomAttr({\r\n ...mark.attrs,\r\n classes: [...mark.attrs.classes, 'pm-span pm-span-background-color'],\r\n }),\r\n };\r\n return ['span', attr];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Span,\r\n mark: 'span',\r\n getAttrs: (tok: PandocToken) => {\r\n return pandocAttrReadAST(tok, kSpanAttr);\r\n },\r\n getChildren: (tok: PandocToken) => tok.c[kSpanChildren],\r\n },\r\n ],\r\n writer: {\r\n priority: 12,\r\n write: (output: PandocOutput, mark: Mark, parent: Fragment) => {\r\n output.writeToken(PandocTokenType.Span, () => {\r\n output.writeAttr(mark.attrs.id, mark.attrs.classes, mark.attrs.keyvalue);\r\n output.writeArray(() => {\r\n output.writeInlines(parent);\r\n });\r\n });\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: () => {\r\n return [new SpanCommand(ui)];\r\n },\r\n };\r\n};\r\n\r\nclass SpanCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI) {\r\n super(EditorCommandId.Span, [], (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n const schema = state.schema;\r\n\r\n // if there is no contiguous selection and no existing span mark active\r\n // then the command should be disabled (unknown what the span target is)\r\n if (!markIsActive(state, schema.marks.span) && state.selection.empty) {\r\n return false;\r\n }\r\n\r\n // if the current node doesn't allow this mark return false\r\n if (!state.selection.$from.node().type.allowsMarkType(schema.marks.span)) {\r\n return false;\r\n }\r\n\r\n async function asyncEditSpan() {\r\n if (dispatch) {\r\n let attr: Attrs = { id: null, classes: [], keyvalue: [] };\r\n if (markIsActive(state, schema.marks.span)) {\r\n attr = getMarkAttrs(state.doc, state.selection, schema.marks.span);\r\n }\r\n const result = await ui.dialogs.editSpan(attr);\r\n if (result) {\r\n const tr = state.tr;\r\n const range = getSelectionMarkRange(state.selection, schema.marks.span);\r\n tr.removeMark(range.from, range.to, schema.marks.span);\r\n if (result.action === 'edit') {\r\n const mark = schema.marks.span.create(result.attr);\r\n tr.addMark(range.from, range.to, mark);\r\n }\r\n dispatch(tr);\r\n }\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n asyncEditSpan();\r\n\r\n return true;\r\n });\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * xref-popup.tsx\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { PluginKey } from 'prosemirror-state';\r\nimport { DecorationSet, EditorView } from 'prosemirror-view';\r\n\r\nimport React from 'react';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { textPopupDecorationPlugin, TextPopupTarget } from '../../api/text-popup';\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { Popup } from '../../api/widgets/popup';\r\nimport { xrefKey } from '../../api/xref';\r\nimport { LinkButton } from '../../api/widgets/button';\r\n\r\nimport './xref-popup.css';\r\nimport { EditorServer, XRef } from 'editor-types';\r\n\r\nconst kMaxWidth = 350; // also in xref-popup.css\r\n\r\nexport function xrefPopupPlugin(schema: Schema, ui: EditorUI, server: EditorServer) {\r\n return textPopupDecorationPlugin({\r\n key: new PluginKey<DecorationSet>('xref-popup'),\r\n markType: schema.marks.xref,\r\n maxWidth: kMaxWidth,\r\n dismissOnEdit: true,\r\n createPopup: async (_view: EditorView, target: TextPopupTarget, style: React.CSSProperties) => {\r\n // lookup xref on server\r\n const docPath = ui.context.getDocumentPath();\r\n if (docPath) {\r\n const kXRefRegEx = /^@ref\\(([A-Za-z0-9:-]*)\\)$/;\r\n const match = target.text.match(kXRefRegEx);\r\n if (match && match[1].length) {\r\n await ui.context.withSavedDocument();\r\n const xrefs = await server.xref.xrefForId(docPath, match[1]);\r\n if (xrefs.refs.length) {\r\n const xref = xrefs.refs[0];\r\n\r\n // click handler\r\n const onClick = () => {\r\n const file = xrefs.baseDir + '/' + xref.file;\r\n ui.display.navigateToXRef(file, xref);\r\n };\r\n\r\n return <XRefPopup xref={xref} onClick={onClick} style={style} />;\r\n }\r\n }\r\n }\r\n return null;\r\n },\r\n specKey: (target: TextPopupTarget) => {\r\n return `xref:${target.text}`;\r\n },\r\n });\r\n}\r\n\r\ninterface XRefPopupProps extends WidgetProps {\r\n xref: XRef;\r\n onClick: VoidFunction;\r\n style: React.CSSProperties;\r\n}\r\n\r\nconst XRefPopup: React.FC<XRefPopupProps> = props => {\r\n return (\r\n <Popup classes={['pm-xref-popup']} style={props.style}>\r\n <div>\r\n <LinkButton\r\n text={xrefKey(props.xref)}\r\n onClick={props.onClick}\r\n maxWidth={kMaxWidth - 20}\r\n classes={['pm-xref-popup-key pm-fixedwidth-font']}\r\n />\r\n </div>\r\n <div className=\"pm-xref-popup-file\">{props.xref.file}</div>\r\n </Popup>\r\n );\r\n};\r\n","\r\n/*\r\n * insert_xref-index.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { XRef } from 'editor-types';\r\nimport Fuse from 'fuse.js';\r\nimport { xrefKey } from '../../api/xref';\r\n\r\n\r\nconst searchFields: Fuse.FuseOptionKeyObject<XRef>[] = [\r\n { name: 'key', weight: 50 },\r\n { name: 'title', weight: 30 },\r\n];\r\n\r\nexport interface XRefSearch {\r\n search: (searchTerm: string, limit: number) => XRef[];\r\n}\r\n\r\ninterface QuartoXRef extends XRef {\r\n key: string;\r\n}\r\n\r\nexport function xrefIndex(entries: XRef[]): XRefSearch {\r\n // build search index\r\n const options = {\r\n isCaseSensitive: false,\r\n shouldSort: true,\r\n includeMatches: false,\r\n includeScore: false,\r\n minMatchCharLength: 2,\r\n threshold: 0.3,\r\n keys: searchFields,\r\n };\r\n\r\n const index = Fuse.createIndex<QuartoXRef>(searchFields.map(searchField => searchField.name), entries.map(entry => {\r\n return {\r\n key: xrefKey(entry, \"quarto\"),\r\n ...entry\r\n };\r\n }));\r\n const fuse = new Fuse(entries, options, index);\r\n return {\r\n search: (searchTerm: string, limit: number): XRef[] => {\r\n const results = fuse.search(searchTerm, { ...options, limit });\r\n return results.map(result => result.item);\r\n },\r\n };\r\n}","/*\r\n * insert_xref.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport React, { ChangeEvent } from 'react';\r\nimport { createRoot } from 'react-dom/client';\r\n\r\nimport { FixedSizeList, ListChildComponentProps } from 'react-window';\r\nimport uniqBy from 'lodash.uniqby';\r\nimport debounce from 'lodash.debounce';\r\n\r\nimport { EditorUI } from \"../../api/ui-types\";\r\nimport { WidgetProps } from '../../api/widgets/react';\r\nimport { DialogButtons } from '../../api/widgets/dialog-buttons';\r\nimport { xrefKey } from '../../api/xref';\r\nimport { TextInput } from '../../api/widgets/text';\r\nimport { SelectInput } from '../../api/widgets/select';\r\nimport { NavigationTree, NavigationTreeNode } from '../../api/widgets/navigation-tree';\r\nimport { kQuartoXRefTypes } from '../../marks/xref/xref-completion';\r\n\r\nimport { xrefIndex } from './insert_xref_index';\r\nimport './insert_xref-styles.css';\r\nimport { EditorServer, XRef, kAlertTypeError } from 'editor-types';\r\n\r\n// Keep the most recently used selected style around\r\nlet lastSelectedStyleIndex = 0;\r\n\r\n// Height of textbox including border\r\nconst kXrefSearchBoxHeight = 30;\r\n\r\n// constants\r\nconst kStyleDefault = \"Default\";\r\nconst kStyleCustom = \"Custom\";\r\nconst kStyleCapital = \"Capitalize\";\r\nconst kStyleNone = \"(None)\";\r\n\r\n// Styles used for xrefs\r\nconst kXRefStyles: XRefStyle[] = [\r\n {\r\n key: kStyleDefault,\r\n fn: (key: string) => {\r\n return `@${key}`;\r\n }\r\n },\r\n {\r\n key: kStyleCapital,\r\n fn: (key: string) => {\r\n return `@${key.charAt(0).toUpperCase() + key.slice(1)}`;\r\n }\r\n },\r\n {\r\n key: kStyleCustom,\r\n fn: (key: string) => {\r\n return `@${key}`;\r\n }\r\n },\r\n {\r\n key: kStyleNone,\r\n fn: (key: string) => {\r\n return `-@${key}`;\r\n }\r\n },\r\n];\r\n\r\ninterface XRefStyle {\r\n key: string;\r\n fn: (key: string) => string;\r\n}\r\n\r\n// Types (prefixes + display) for xrefs\r\nconst kTheoremTypes = [\"thm\", \"lem\", \"cor\", \"prp\", \"cnj\", \"def\", \"exm\", \"exr\"];\r\nconst kSecType = \"sec\";\r\nconst kFigType = \"fig\";\r\nconst kTableType = \"tbl\";\r\nconst kEquationType = \"eq\";\r\nconst kListingtype = \"lst\";\r\n\r\nconst xRefTypes = [\r\n {\r\n type: \"All Types\",\r\n prefix: [kSecType, kFigType, kTableType, kEquationType, kListingtype, ...kTheoremTypes],\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_all;\r\n }\r\n },\r\n {\r\n type: \"Sections\",\r\n prefix: [kSecType],\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_section;\r\n }\r\n },\r\n {\r\n type: \"Figures\",\r\n prefix: [kFigType],\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_figure;\r\n }\r\n },\r\n {\r\n type: \"Tables\",\r\n prefix: [kTableType],\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_table;\r\n }\r\n },\r\n {\r\n type: \"Equations\",\r\n prefix: [kEquationType],\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_equation;\r\n }\r\n },\r\n {\r\n type: \"Listings\",\r\n prefix: [kListingtype],\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_listing;\r\n }\r\n },\r\n {\r\n type: \"Theorems\",\r\n prefix: kTheoremTypes,\r\n image: (ui: EditorUI) => {\r\n return ui.images.xrefs?.type_theorem;\r\n }\r\n },\r\n];\r\n\r\n\r\nexport async function insertXref(\r\n ui: EditorUI,\r\n doc: ProsemirrorNode,\r\n server: EditorServer,\r\n onInsertXref: (key: string, prefix?: string) => void\r\n) {\r\n await ui.dialogs.htmlDialog(\r\n 'Insert Cross Reference',\r\n 'Insert',\r\n (\r\n containerWidth: number,\r\n containerHeight: number,\r\n confirm: VoidFunction,\r\n cancel: VoidFunction,\r\n _showProgress: (message: string) => void, \r\n _hideProgress: VoidFunction,\r\n themed?: boolean\r\n ) => {\r\n const kMaxHeight = 400;\r\n const kMaxWidth = 650;\r\n const kMaxHeightProportion = 0.9;\r\n const kdialogPaddingIncludingButtons = 70;\r\n\r\n const windowHeight = containerHeight;\r\n const windowWidth = containerWidth;\r\n\r\n const height = Math.min(kMaxHeight, windowHeight * kMaxHeightProportion) - kdialogPaddingIncludingButtons;\r\n const width = Math.max(Math.min(kMaxWidth, windowWidth * 0.9), 550);\r\n\r\n const container = window.document.createElement('div');\r\n if (!themed) {\r\n container.className = 'pm-default-theme';\r\n }\r\n \r\n container.style.width = width + 'px';\r\n container.style.height = height + 75 + 'px';\r\n const root = createRoot(container);\r\n\r\n // Look up the document and initialize the state\r\n const docPath = ui.context.getDocumentPath() || \"\";\r\n\r\n // Read the xrefs\r\n const loadXRefs = async () => {\r\n if (docPath) {\r\n await ui.context.withSavedDocument();\r\n return (await server.xref.quartoIndexForFile(docPath)).refs;\r\n } else {\r\n return [];\r\n }\r\n };\r\n\r\n const onCancel = () => {\r\n root.unmount();\r\n cancel();\r\n };\r\n\r\n const onInsert = (xref: XRef, style: XRefStyle, prefix?: string) => {\r\n onInsertXref(style.fn(xrefKey(xref, \"quarto\")), prefix);\r\n root.unmount();\r\n confirm();\r\n };\r\n\r\n // REnder the panel\r\n root.render(\r\n <InsertXrefPanel\r\n height={height}\r\n width={width}\r\n themed={!!themed}\r\n styleIndex={lastSelectedStyleIndex}\r\n onOk={onInsert}\r\n onCancel={onCancel}\r\n doc={doc}\r\n ui={ui}\r\n loadXRefs={loadXRefs}\r\n />\r\n );\r\n return container;\r\n },\r\n () => {\r\n // Focus\r\n // dealt with in the React Component itself\r\n },\r\n () => {\r\n // Validation\r\n return null;\r\n },\r\n );\r\n}\r\n\r\ninterface InsertXrefPanelProps extends WidgetProps {\r\n ui: EditorUI;\r\n doc: ProsemirrorNode;\r\n height: number;\r\n width: number;\r\n themed: boolean;\r\n styleIndex: number;\r\n loadXRefs: () => Promise<XRef[]>;\r\n onOk: (xref: XRef, style: XRefStyle, prefix?: string) => void;\r\n onCancel: () => void;\r\n}\r\n\r\nconst InsertXrefPanel: React.FC<InsertXrefPanelProps> = props => {\r\n\r\n // State\r\n const [xrefs, setXrefs] = React.useState<XRef[]>();\r\n const [selectedXRefIndex, setSelectedXRefIndex] = React.useState<number>(0);\r\n const [selectedTypeIndex, setSelectedTypeIndex] = React.useState<number>(0);\r\n const [selectedStyleIndex, setSelectedStyleIndex] = React.useState<number>(props.styleIndex);\r\n const [filterText, setFilterText] = React.useState<string>(\"\");\r\n\r\n // References to key controls\r\n const textRef = React.useRef<HTMLInputElement>(null);\r\n const fixedList = React.useRef<FixedSizeList>(null);\r\n const styleSelectRef = React.useRef<HTMLSelectElement>(null);\r\n const prefixRef = React.useRef<HTMLInputElement>(null);\r\n\r\n // Focus the custom prefix textbox when the user selects custom\r\n React.useEffect(() => {\r\n const option = styleSelectRef.current?.options[selectedStyleIndex];\r\n const key = option?.value || \"\";\r\n if (key === kStyleCustom) {\r\n prefixRef.current?.focus();\r\n }\r\n }, [selectedStyleIndex]);\r\n\r\n // Load the cross ref data when the dialog loads\r\n React.useEffect(() => {\r\n props.loadXRefs().then(values => {\r\n\r\n // Sort the data\r\n const sorted = values.sort((a, b) => {\r\n const typeOrder = a.type.localeCompare(b.type);\r\n if (typeOrder !== 0) {\r\n return typeOrder;\r\n } else {\r\n return a.id.localeCompare(b.id);\r\n }\r\n });\r\n\r\n // Ensure that the items are unique\r\n const unique = uniqBy(sorted, (xref => {\r\n return `${xref.type}-${xref.id}${xref.suffix}`;\r\n }));\r\n\r\n setXrefs(unique);\r\n });\r\n\r\n window.setTimeout(() => {\r\n textRef.current?.focus();\r\n if (styleSelectRef.current) {\r\n styleSelectRef.current.selectedIndex = lastSelectedStyleIndex;\r\n }\r\n });\r\n }, []);\r\n\r\n // The styles\r\n const styleOptions = kXRefStyles.map(style => (\r\n <option key={style.key} value={style.key}>\r\n {props.ui.context.translateText(style.key)}\r\n </option>\r\n ));\r\n\r\n\r\n // Filter the xrefs (by type or matching user typed text)\r\n const filterXrefs = () => {\r\n if (!xrefs) {\r\n return [];\r\n }\r\n\r\n let filtered = xrefs;\r\n if (selectedTypeIndex !== 0) {\r\n filtered = filtered.filter(xref => xRefTypes[selectedTypeIndex].prefix.includes(xref.type));\r\n }\r\n\r\n if (filterText) {\r\n const search = xrefIndex(filtered);\r\n filtered = search.search(filterText, 1000);\r\n }\r\n return filtered;\r\n };\r\n const filteredXrefs = filterXrefs();\r\n\r\n // The Types\r\n const typeNodes = xRefTypes.map(type => {\r\n return {\r\n key: type.type,\r\n image: type.image(props.ui),\r\n name: type.type,\r\n type: type.type,\r\n children: [],\r\n expanded: true,\r\n };\r\n });\r\n const selectedNode = typeNodes[selectedTypeIndex];\r\n\r\n\r\n // The current index (adjusted to ensure it is in bounds)\r\n const currentIndex = Math.min(selectedXRefIndex, filteredXrefs.length - 1);\r\n\r\n // Increments or decrements the index\r\n const incrementIndex = (increment: number) => {\r\n let newIndex = currentIndex;\r\n if (increment > 0) {\r\n newIndex = Math.min(currentIndex + increment, filteredXrefs.length - 1);\r\n } else {\r\n newIndex = Math.max(currentIndex + increment, 0);\r\n }\r\n if (newIndex !== currentIndex) {\r\n setSelectedXRefIndex(newIndex);\r\n fixedList.current?.scrollToItem(newIndex);\r\n }\r\n };\r\n\r\n const currentStyle = () => {\r\n const option = styleSelectRef.current?.options[selectedStyleIndex];\r\n const key = option?.value || \"\";\r\n return kXRefStyles.find(style => style.key === key) || kXRefStyles[0];\r\n };\r\n\r\n const currentPrefix = () => {\r\n return prefixRef.current?.value || undefined;\r\n };\r\n\r\n const placeholderText = () => {\r\n if (xrefs === undefined) {\r\n return props.ui.context.translateText(\"Loading Cross References\");\r\n }\r\n return props.ui.context.translateText(\"No Matching Cross References Found.\");\r\n };\r\n\r\n // Insert the item\r\n const insertItem = (index: number) => {\r\n const xref = filteredXrefs[index];\r\n const style = currentStyle();\r\n const prefix = style.key === kStyleCustom ? currentPrefix() : undefined;\r\n\r\n if (xref === undefined) {\r\n // There is no item selected\r\n props.ui.dialogs\r\n .alert(\r\n props.ui.context.translateText('Validation Error'),\r\n props.ui.context.translateText(\"Please select a cross reference to insert.\"),\r\n kAlertTypeError,\r\n );\r\n } else if (style.key === kStyleCustom && !prefix) {\r\n // Custom was selected, but no prefix provided\r\n props.ui.dialogs\r\n .alert(\r\n props.ui.context.translateText('Validation Error'),\r\n props.ui.context.translateText(\"Please enter a custom prefix for this reference.\"),\r\n kAlertTypeError,\r\n )\r\n .then(() => {\r\n prefixRef.current?.focus();\r\n });\r\n } else {\r\n lastSelectedStyleIndex = styleSelectRef.current?.selectedIndex || 0;\r\n props.onOk(xref, style, prefix);\r\n }\r\n };\r\n\r\n // debounce the text filtering\r\n const memoizedTextFilter = React.useCallback(\r\n debounce(\r\n (txt: string) => {\r\n setFilterText(txt);\r\n },\r\n 30,\r\n ),\r\n [],\r\n );\r\n\r\n const kPageSize = 5;\r\n const handleKeyboardEvent = (event: React.KeyboardEvent<HTMLElement>) => {\r\n // Global Key Handling\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n incrementIndex(-1);\r\n event.preventDefault();\r\n break;\r\n case 'ArrowDown':\r\n incrementIndex(1);\r\n event.preventDefault();\r\n break;\r\n case 'PageUp':\r\n incrementIndex(-kPageSize);\r\n event.preventDefault();\r\n break;\r\n case 'PageDown':\r\n incrementIndex(kPageSize);\r\n event.preventDefault();\r\n break;\r\n case 'Enter':\r\n acceptSelected();\r\n event.preventDefault();\r\n break;\r\n case 'Escape':\r\n props.onCancel();\r\n event.preventDefault();\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n // Select the item\r\n const handleItemClicked = (index: number) => {\r\n setSelectedXRefIndex(index);\r\n };\r\n\r\n\r\n const handleItemDoubleClicked = (index: number) => {\r\n insertItem(index);\r\n };\r\n\r\n const acceptSelected = () => {\r\n insertItem(currentIndex);\r\n };\r\n\r\n // The user typed some text\r\n const handleTextChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n memoizedTextFilter(event?.target.value);\r\n };\r\n\r\n // Handle the updating type selection\r\n const handleStyleChanged = (event: ChangeEvent<Element>) => {\r\n const index = (event.target as HTMLSelectElement).selectedOptions[0].index;\r\n setSelectedStyleIndex(index);\r\n };\r\n\r\n const handleNodeSelected = (node: NavigationTreeNode) => {\r\n setSelectedTypeIndex(xRefTypes.findIndex(type => type.type === node.key));\r\n };\r\n\r\n const classes = [\"pm-insert-xref-container\"];\r\n if (!props.themed) {\r\n classes.push(\"pm-default-theme\");\r\n }\r\n\r\n return (\r\n <div className=\"pm-insert-xref\">\r\n <div className={classes.join(' ')}>\r\n <div className=\"pm-insert-xref-type-container pm-block-border-color pm-background-color\">\r\n <NavigationTree\r\n height={props.height + kXrefSearchBoxHeight}\r\n nodes={typeNodes}\r\n selectedNode={selectedNode}\r\n onSelectedNodeChanged={handleNodeSelected}\r\n />\r\n </div>\r\n\r\n <div className=\"pm-insert-xref-list-container\">\r\n <TextInput\r\n onKeyDown={handleKeyboardEvent}\r\n width={20 + 'ch'}\r\n iconAdornment={props.ui.images.search}\r\n tabIndex={0}\r\n className=\"pm-insert-xref-search-textbox\"\r\n placeholder={props.ui.context.translateText(\"Search for Cross Reference\")}\r\n onChange={handleTextChange}\r\n ref={textRef}\r\n />\r\n\r\n\r\n {filteredXrefs && filteredXrefs.length > 0 ? (\r\n <div\r\n onKeyDown={handleKeyboardEvent}\r\n tabIndex={0}\r\n >\r\n <FixedSizeList\r\n className=\"pm-insert-xref-list pm-block-border-color pm-background-color\"\r\n height={props.height}\r\n width=\"100%\"\r\n itemCount={filteredXrefs.length}\r\n itemSize={66}\r\n itemData={{\r\n xrefs: filteredXrefs,\r\n selectedIndex: currentIndex,\r\n ui: props.ui,\r\n onclick: handleItemClicked,\r\n ondoubleclick: handleItemDoubleClicked\r\n }}\r\n ref={fixedList}\r\n >\r\n {XRefItem}\r\n </FixedSizeList>\r\n </div>\r\n\r\n ) : (\r\n <div\r\n className=\"pm-insert-xref-list-placeholder pm-block-border-color pm-background-color\"\r\n style={{ height: props.height + \"px\" }}\r\n >\r\n <div>{placeholderText()}</div>\r\n </div>\r\n )}\r\n\r\n </div>\r\n </div>\r\n <div className='pm-insert-xref-insert-options'>\r\n\r\n <div className='pm-insert-xref-prefix'>\r\n <div>{[props.ui.context.translateText(\"Prefix\")]}</div>\r\n <SelectInput\r\n tabIndex={0}\r\n ref={styleSelectRef}\r\n className=\"pm-insert-xref-select-style\"\r\n onChange={handleStyleChanged}\r\n >\r\n {styleOptions}\r\n </SelectInput>\r\n {kXRefStyles[selectedStyleIndex].key === kStyleCustom ? (\r\n <TextInput\r\n width={20 + 'ch'}\r\n tabIndex={0}\r\n className=\"pm-insert-xref-custom-prefix\"\r\n placeholder={props.ui.context.translateText(\"Enter Prefix\")}\r\n ref={prefixRef}\r\n />) : (\r\n null\r\n )}\r\n </div>\r\n <div>\r\n <DialogButtons\r\n okLabel={props.ui.context.translateText('Insert')}\r\n cancelLabel={props.ui.context.translateText('Cancel')}\r\n onOk={acceptSelected}\r\n onCancel={props.onCancel}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\ninterface XRefItemProps extends ListChildComponentProps {\r\n data: {\r\n xrefs: XRef[],\r\n selectedIndex: number\r\n ui: EditorUI,\r\n onclick: (index: number) => void,\r\n ondoubleclick: (index: number) => void\r\n };\r\n}\r\n\r\nconst XRefItem = (props: XRefItemProps) => {\r\n const thisXref: XRef = props.data.xrefs[props.index];\r\n\r\n // The type (e.g. fig)\r\n const type = kQuartoXRefTypes[thisXref.type];\r\n\r\n // The id (e.g. fig-foobar)\r\n const id = xrefKey(thisXref, \"quarto\");\r\n\r\n // The display text for the entry\r\n const primaryText = `@${id}`;\r\n const secondaryText = thisXref.file;\r\n const detailText = thisXref.title || \"\";\r\n\r\n // The image and adornment\r\n const image = type?.image(props.data.ui) || props.data.ui.images.omni_insert.generic;\r\n\r\n // Click handlers\r\n const onItemClick = () => {\r\n props.data.onclick(props.index);\r\n };\r\n\r\n const onItemDoubleClick = () => {\r\n props.data.ondoubleclick(props.index);\r\n };\r\n\r\n // Whether this node is selected\r\n const selected = props.data.selectedIndex === props.index;\r\n const selectedClassName = `pm-xref-item${selected ? ' pm-list-item-selected' : ''}`;\r\n return (\r\n <div key={thisXref.id} style={props.style} className={selectedClassName} onClick={onItemClick} onDoubleClick={onItemDoubleClick}>\r\n <div className={`pm-xref-item-image-container ${thisXref.type}`}>\r\n <img src={image} className={'pm-xref-item-image pm-border-color'} draggable=\"false\"/>\r\n </div>\r\n <div className={'pm-xref-item-body pm-text-color'}>\r\n <div className=\"pm-xref-item-title\">\r\n <div className=\"pm-xref-item-primary pm-fixedwidth-font\">{primaryText}</div>\r\n <div className=\"pm-xref-item-secondary\">{secondaryText}</div>\r\n </div>\r\n <div>\r\n <div className=\"pm-xref-item-detail\">{detailText}</div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n","/*\r\n * xref.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Node as ProsemirrorNode, Mark, Fragment } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { Transform } from 'prosemirror-transform';\r\n\r\nimport { setTextSelection, findChildren, findChildrenByMark } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { detectAndApplyMarks, removeInvalidatedMarks, getMarkRange, domAttrNoSpelling } from '../../api/mark';\r\nimport { MarkTransaction, trTransform } from '../../api/transaction';\r\nimport { FixupContext } from '../../api/fixup';\r\nimport { ProsemirrorCommand, EditorCommandId, toggleMarkType } from '../../api/command';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { fragmentText } from '../../api/fragment';\r\nimport { PandocOutput } from '../../api/pandoc';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\nimport { xrefCompletionHandler } from './xref-completion';\r\nimport { xrefPopupPlugin } from './xref-popup';\r\nimport { kQuartoDocType } from '../../api/format';\r\nimport { insertXref } from '../../behaviors/insert_xref/insert_xref';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nconst kRefRegExDetectAndApply = /(?:^|[^`])(\\\\?@ref\\([ A-Za-z0-9:-]*\\))/g;\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions, format, ui, server } = context;\r\n\r\n if (!format.rmdExtensions.bookdownXRef) {\r\n return null;\r\n }\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'xref',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n inclusive: false,\r\n excludes: 'formatting',\r\n attrs: {},\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='xref']\",\r\n },\r\n ],\r\n toDOM() {\r\n return ['span', domAttrNoSpelling({ class: 'xref pm-link-text-color pm-fixedwidth-font' })];\r\n },\r\n },\r\n pandoc: {\r\n readers: [],\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n // alias xref (may need to transform it to deal with \\ prefix)\r\n let xref = parent;\r\n\r\n // if it starts with a \\ then don't write the slash (pandoc will\r\n // either create one automatically or we'll write one explicitly\r\n // if pandoc won't b/c it doesn't have all_symbols_escapable)\r\n if (fragmentText(xref).startsWith('\\\\')) {\r\n xref = xref.cut(1, xref.size);\r\n }\r\n\r\n // if all symbols aren't escapable then we need an explicit \\\r\n // (because pandoc won't automatically escape the \\)\r\n if (!pandocExtensions.all_symbols_escapable) {\r\n output.writeRawMarkdown('\\\\');\r\n }\r\n\r\n // write xref\r\n output.writeInlines(xref);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n fixups: (schema: Schema) => {\r\n return [\r\n (tr: Transaction, fixupContext: FixupContext) => {\r\n if (fixupContext === FixupContext.Load) {\r\n // apply marks\r\n const markType = schema.marks.xref;\r\n const predicate = (node: ProsemirrorNode) => {\r\n return node.isTextblock && node.type.allowsMarkType(markType);\r\n };\r\n const markTr = new MarkTransaction(tr);\r\n findChildren(tr.doc, predicate).forEach(nodeWithPos => {\r\n const { pos } = nodeWithPos;\r\n detectAndApplyMarks(\r\n markTr,\r\n tr.doc.nodeAt(pos)!,\r\n pos,\r\n kRefRegExDetectAndApply,\r\n markType,\r\n () => ({}),\r\n () => true,\r\n match => match[1],\r\n );\r\n });\r\n\r\n // remove leading \\ as necessary (this would occur if the underlying format includes\r\n // a \\@ref and doesn't have all_symbols_escapable, e.g. blackfriday)\r\n trTransform(tr, stripRefBackslashTransform);\r\n }\r\n return tr;\r\n },\r\n ];\r\n },\r\n\r\n appendMarkTransaction: () => {\r\n return [\r\n {\r\n name: 'xref-marks',\r\n filter: (node: ProsemirrorNode) => node.isTextblock && node.type.allowsMarkType(node.type.schema.marks.xref),\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n removeInvalidatedMarks(tr, node, pos, kRefRegExDetectAndApply, node.type.schema.marks.xref);\r\n detectAndApplyMarks(\r\n tr,\r\n tr.doc.nodeAt(pos)!,\r\n pos,\r\n kRefRegExDetectAndApply,\r\n node.type.schema.marks.xref,\r\n () => ({}),\r\n () => true,\r\n match => match[1],\r\n );\r\n },\r\n },\r\n ];\r\n },\r\n\r\n inputRules: () => {\r\n return [atRefInputRule(), ...(format.rmdExtensions.bookdownXRefUI ? [refPrefixInputRule()] : [])];\r\n },\r\n\r\n plugins: (schema: Schema) => [xrefPopupPlugin(schema, ui, server)],\r\n\r\n completionHandlers: () => format.rmdExtensions.bookdownXRefUI \r\n ? [xrefCompletionHandler(ui, server.xref)]\r\n : [],\r\n\r\n commands: (schema: Schema) => {\r\n if (format.rmdExtensions.bookdownXRefUI) {\r\n return [\r\n new ProsemirrorCommand(\r\n EditorCommandId.CrossReference,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // enable/disable command\r\n if (!canInsertNode(state, schema.nodes.text) || !toggleMarkType(schema.marks.xref)(state)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const tr = state.tr;\r\n insertRef(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('Cross Reference'),\r\n description: ui.context.translateText('Reference to related content'),\r\n group: OmniInsertGroup.References,\r\n priority: 0,\r\n image: () =>\r\n ui.prefs.darkMode()\r\n ? ui.images.omni_insert!.cross_reference_dark!\r\n : ui.images.omni_insert!.cross_reference!,\r\n },\r\n ),\r\n ];\r\n } else if (format.docTypes.includes(kQuartoDocType) && pandocExtensions.citations) {\r\n return [\r\n new ProsemirrorCommand(\r\n EditorCommandId.CrossReference,\r\n ['Shift-Mod-F10'],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n // enable/disable command\r\n if (!canInsertNode(state, schema.nodes.text) || !toggleMarkType(schema.marks.cite_id)(state)) {\r\n return false;\r\n }\r\n\r\n // Show the insert Xref dialog\r\n if (dispatch) {\r\n insertXref(ui, state.doc, server, (key: string, prefix?: string) => {\r\n // An xref was selected, insert it\r\n const tr = state.tr;\r\n const xref = schema.text(key, [schema.marks.cite_id.create()]);\r\n\r\n // If there is a custom prefix, create a full cite\r\n if (prefix !== undefined || key.startsWith('-')) {\r\n const start = tr.selection.from;\r\n const wrapperText = schema.text('[]');\r\n tr.replaceSelectionWith(wrapperText);\r\n\r\n // move the selection into the wrapper\r\n setTextSelection(tr.selection.from - 1)(tr);\r\n\r\n // Insert the prefix\r\n if (prefix !== undefined) {\r\n tr.insertText(`${prefix} `, tr.selection.from);\r\n }\r\n\r\n // Insert the xref\r\n tr.insert(tr.selection.from, xref);\r\n\r\n // Add the cite mark\r\n const citeMark = schema.marks.cite.create();\r\n tr.addMark(start, tr.selection.from + 1, citeMark);\r\n\r\n setTextSelection(tr.selection.from + 1)(tr);\r\n dispatch(tr);\r\n\r\n } else {\r\n // otherwise, create simple cite_id\r\n tr.replaceSelectionWith(xref, false);\r\n setTextSelection(tr.selection.from)(tr);\r\n dispatch(tr);\r\n }\r\n }).then(() =>{\r\n view?.focus();\r\n });\r\n }\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('Cross Reference'),\r\n description: ui.context.translateText('Reference to related content'),\r\n group: OmniInsertGroup.References,\r\n priority: 0,\r\n noFocus: true,\r\n image: () =>\r\n ui.prefs.darkMode()\r\n ? ui.images.omni_insert!.cross_reference_dark!\r\n : ui.images.omni_insert!.cross_reference!,\r\n },\r\n ),\r\n ];\r\n\r\n\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n};\r\n\r\nfunction atRefInputRule() {\r\n return new InputRule(/(^|[^`])(\\\\?@ref\\()$/, (state: EditorState, match: RegExpMatchArray, start: number, end: number) => {\r\n // if this completes an xref at this position then stand down\r\n const kRefLen = 4;\r\n const { parent, parentOffset } = state.selection.$head;\r\n const before = parent.textContent.slice(parentOffset - kRefLen, parentOffset);\r\n const after = parent.textContent.slice(parentOffset);\r\n const potentialXRef = before + '(' + after;\r\n if (/^@ref\\([A-Za-z0-9:-]*\\).*$/.test(potentialXRef)) {\r\n return null;\r\n }\r\n\r\n // insert the xref\r\n const tr = state.tr;\r\n tr.delete(start + match[1].length, end);\r\n insertRef(tr);\r\n return tr;\r\n });\r\n}\r\n\r\nfunction refPrefixInputRule() {\r\n return new InputRule(\r\n /(^|[^`])(Chapter|Chapters|Appendix|Section|Figure|Table|Equation) $/,\r\n (state: EditorState, match: RegExpMatchArray) => {\r\n const tr = state.tr;\r\n tr.insertText(' ');\r\n let prefix = '';\r\n if (match[2] === 'Figure') {\r\n prefix = 'fig:';\r\n } else if (match[2] === 'Table') {\r\n prefix = 'tab:';\r\n } else if (match[2] === 'Equation') {\r\n prefix = 'eq:';\r\n }\r\n insertRef(tr, prefix);\r\n setTextSelection(tr.selection.head - 1)(tr);\r\n return tr;\r\n },\r\n );\r\n}\r\n\r\nfunction insertRef(tr: Transaction, prefix = '') {\r\n const schema = tr.doc.type.schema;\r\n const selection = tr.selection;\r\n const refText = `@ref(${prefix})`;\r\n tr.replaceSelectionWith(schema.text(refText, [schema.marks.xref.create()]), false);\r\n setTextSelection(tr.mapping.map(selection.head) - 1)(tr);\r\n}\r\n\r\nfunction stripRefBackslashTransform(tr: Transform) {\r\n const markType = tr.doc.type.schema.marks.xref;\r\n findChildrenByMark(tr.doc, markType).forEach(markedNode => {\r\n const pos = tr.mapping.map(markedNode.pos);\r\n if (markType.isInSet(markedNode.node.marks)) {\r\n const markRange = getMarkRange(tr.doc.resolve(pos), markType);\r\n if (markRange) {\r\n const text = tr.doc.textBetween(markRange.from, markRange.to);\r\n if (text.startsWith('\\\\')) {\r\n tr.deleteRange(markRange.from, markRange.from + 1);\r\n }\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * raw_html-comment.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Mark, Fragment, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Transaction, TextSelection, EditorState } from 'prosemirror-state';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { EditorCommandId, ProsemirrorCommand, toggleMarkType } from '../../api/command';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { ProsemirrorWriter, PandocOutput } from '../../api/pandoc';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { MarkTransaction } from '../../api/transaction';\r\nimport { removeInvalidatedMarks, detectAndApplyMarks, domAttrNoSpelling } from '../../api/mark';\r\nimport { matchPandocFormatComment } from '../../api/pandoc_format';\r\nimport { kHTMLCommentRegEx, isHTMLComment } from '../../api/html';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nimport './raw_html_comment-styles.css';\r\n\r\nconst kHTMLEditingCommentRegEx = /^<!--# ([\\s\\S]*?)-->$/;\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { options, ui } = context;\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'raw_html_comment',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n attrs: {\r\n editing: { default: false },\r\n format: { default: false },\r\n },\r\n inclusive: false,\r\n excludes: 'formatting',\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='raw-html-comment']\",\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n editing: el.getAttribute('data-editing') === '1',\r\n format: el.getAttribute('data-format') === '1',\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(mark: Mark) {\r\n const attr: Record<string,unknown> = {\r\n class:\r\n 'raw-html-comment pm-fixedwidth-font ' +\r\n (mark.attrs.editing ? 'pm-comment-color pm-comment-background-color' : 'pm-light-text-color') +\r\n (mark.attrs.format && options.hideFormatComment ? ' pm-comment-hidden' : ''),\r\n 'data-editing': mark.attrs.editing ? '1' : '0',\r\n 'data-format': mark.attrs.format ? '1' : '0',\r\n };\r\n return ['span', domAttrNoSpelling(attr)];\r\n },\r\n },\r\n pandoc: {\r\n readers: [],\r\n inlineHTMLReader: (schema: Schema, html: string, writer?: ProsemirrorWriter) => {\r\n const isComment = isHTMLComment(html);\r\n if (!isComment) {\r\n return false;\r\n }\r\n\r\n if (writer) {\r\n const mark = schema.marks.raw_html_comment.create(commentMarkAttribs(html));\r\n writer.openMark(mark);\r\n writer.writeText(html);\r\n writer.closeMark(mark);\r\n }\r\n\r\n return isComment;\r\n },\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeRawMarkdown(parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n appendMarkTransaction: (schema: Schema) => {\r\n const markType = schema.marks.raw_html_comment;\r\n const kHTMLCommentMarkRegEx = new RegExp(kHTMLCommentRegEx.source, 'g');\r\n return [\r\n {\r\n name: 'html-editing-comment-marks',\r\n filter: (node: ProsemirrorNode) => node.isTextblock && node.type.allowsMarkType(markType),\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n removeInvalidatedMarks(tr, node, pos, kHTMLCommentRegEx, markType);\r\n detectAndApplyMarks(\r\n tr,\r\n tr.doc.nodeAt(pos)!,\r\n pos,\r\n kHTMLCommentMarkRegEx,\r\n markType,\r\n match => commentMarkAttribs(match[1]),\r\n () => true,\r\n match => match[1],\r\n );\r\n },\r\n },\r\n ];\r\n },\r\n\r\n // insert command\r\n commands: (schema: Schema) => {\r\n return !options.commenting ? [new InsertHTMLCommentCommand(schema, ui)] : [];\r\n },\r\n };\r\n};\r\n\r\nexport class InsertHTMLCommentCommand extends ProsemirrorCommand {\r\n constructor(schema: Schema, ui: EditorUI) {\r\n super(\r\n EditorCommandId.HTMLComment,\r\n ['Shift-Mod-c'],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // make sure we can insert a text node here\r\n if (!canInsertNode(state, schema.nodes.text)) {\r\n return false;\r\n }\r\n\r\n // make sure we can apply this mark here\r\n if (!toggleMarkType(schema.marks.raw_html)(state)) {\r\n return false;\r\n }\r\n\r\n // make sure the end of the selection (where we will insert the comment)\r\n // isn't already in a mark of this type\r\n if (state.doc.rangeHasMark(state.selection.to, state.selection.to + 1, schema.marks.raw_html)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n\r\n // set the selection to the end of the current selection (comment 'on' the selection)\r\n setTextSelection(tr.selection.to)(tr);\r\n\r\n // if we have a character right before us then insert a space\r\n const { parent, parentOffset } = tr.selection.$to;\r\n const charBefore = parent.textContent.slice(parentOffset - 1, parentOffset);\r\n if (charBefore.length && charBefore !== ' ') {\r\n tr.insertText(' ');\r\n }\r\n\r\n // insert the comment\r\n const comment = '<!--# -->';\r\n const mark = schema.marks.raw_html_comment.create({ editing: true });\r\n tr.insert(tr.selection.to, schema.text(comment, [mark]));\r\n\r\n // set the selection to the middle of the comment\r\n tr.setSelection(new TextSelection(tr.doc.resolve(tr.selection.to - (comment.length / 2 - 1))));\r\n\r\n // dispatch\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('Comment'),\r\n description: ui.context.translateText('Editing comment'),\r\n group: OmniInsertGroup.Content,\r\n priority: 3,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.comment_dark : ui.images.omni_insert.comment),\r\n },\r\n );\r\n }\r\n}\r\n\r\nfunction commentMarkAttribs(comment: string) {\r\n return {\r\n editing: !!comment.match(kHTMLEditingCommentRegEx),\r\n format: !!matchPandocFormatComment(comment),\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * shortcode.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Node as ProsemirrorNode, Mark, Fragment } from 'prosemirror-model';\r\nimport { Transaction } from 'prosemirror-state';\r\n\r\nimport { findChildren } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\nimport { detectAndApplyMarks, domAttrNoSpelling, removeInvalidatedMarks } from '../api/mark';\r\nimport { MarkTransaction } from '../api/transaction';\r\nimport { FixupContext } from '../api/fixup';\r\nimport { kShortcodeRegEx } from '../api/shortcode';\r\nimport { PandocOutput } from '../api/pandoc';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { format } = context;\r\n\r\n if (!format.hugoExtensions.shortcodes) {\r\n return null;\r\n }\r\n\r\n return {\r\n marks: [\r\n {\r\n name: 'shortcode',\r\n noInputRules: true,\r\n noSpelling: true,\r\n spec: {\r\n inclusive: false,\r\n excludes: 'formatting',\r\n attrs: {},\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='shortcode']\",\r\n },\r\n ],\r\n toDOM() {\r\n return ['span', domAttrNoSpelling({ class: 'shortcode pm-markup-text-color pm-fixedwidth-font' })];\r\n },\r\n },\r\n pandoc: {\r\n readers: [],\r\n writer: {\r\n priority: 1,\r\n write: (output: PandocOutput, _mark: Mark, parent: Fragment) => {\r\n output.writeRawMarkdown(parent);\r\n },\r\n },\r\n },\r\n },\r\n ],\r\n\r\n fixups: (schema: Schema) => {\r\n return [\r\n (tr: Transaction, fixupContext: FixupContext) => {\r\n if (fixupContext === FixupContext.Load) {\r\n // apply marks\r\n const markType = schema.marks.shortcode;\r\n const predicate = (node: ProsemirrorNode) => {\r\n return node.isTextblock && node.type.allowsMarkType(markType);\r\n };\r\n const markTr = new MarkTransaction(tr);\r\n findChildren(tr.doc, predicate).forEach(nodeWithPos => {\r\n const { pos } = nodeWithPos;\r\n detectAndCreateShortcodes(schema, markTr, pos);\r\n });\r\n }\r\n return tr;\r\n },\r\n ];\r\n },\r\n\r\n appendMarkTransaction: () => {\r\n return [\r\n {\r\n name: 'shortcode-marks',\r\n filter: (node: ProsemirrorNode) =>\r\n node.isTextblock && node.type.allowsMarkType(node.type.schema.marks.shortcode),\r\n append: (tr: MarkTransaction, node: ProsemirrorNode, pos: number) => {\r\n removeInvalidatedMarks(tr, node, pos, kShortcodeRegEx, node.type.schema.marks.shortcode);\r\n detectAndCreateShortcodes(node.type.schema, tr, pos);\r\n },\r\n },\r\n ];\r\n },\r\n };\r\n};\r\n\r\nfunction detectAndCreateShortcodes(schema: Schema, tr: MarkTransaction, pos: number) {\r\n // apply marks wherever they belong\r\n detectAndApplyMarks(\r\n tr,\r\n tr.doc.nodeAt(pos)!,\r\n pos,\r\n kShortcodeRegEx,\r\n schema.marks.shortcode,\r\n () => ({}),\r\n () => true,\r\n match => match[1],\r\n );\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * footnote-editor.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView, DecorationSet, NodeView } from 'prosemirror-view';\r\nimport { findParentNodeOfType, NodeWithPos, findChildrenByType, findChildren } from 'prosemirror-utils';\r\nimport { EditorState, TextSelection, Plugin, PluginKey, Transaction } from 'prosemirror-state';\r\n\r\nimport { nodeDecoration } from '../../api/decoration';\r\nimport { firstNode, lastNode } from '../../api/node';\r\nimport { selectionIsWithin } from '../../api/selection';\r\nimport { scrollIntoView } from '../../api/scroll';\r\n\r\nimport { findFootnoteNode, selectedFootnote, selectedNote } from './footnote';\r\n\r\nconst key = new PluginKey<DecorationSet>('footnote-editor-activate');\r\n\r\nexport function footnoteEditorActivationPlugin() {\r\n return new Plugin<DecorationSet>({\r\n key,\r\n state: {\r\n init() {\r\n return DecorationSet.empty;\r\n },\r\n\r\n // whenever an edit affecting this mark type occurs then update the decorations\r\n apply(tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) {\r\n if (selectedFootnote(newState.selection) || selectedNote(newState.selection)) {\r\n // if we are in the same note selection as before just return the set\r\n if (oldState.selection.$head.node() === newState.selection.$head.node()) {\r\n return set.map(tr.mapping, tr.doc);\r\n } else {\r\n return footnoteEditorDecorations(newState);\r\n }\r\n } else {\r\n return DecorationSet.empty;\r\n }\r\n },\r\n },\r\n props: {\r\n decorations(state: EditorState) {\r\n return key.getState(state);\r\n },\r\n },\r\n\r\n view: () => ({\r\n // scroll footnote into view (if necessary) when note editor is active\r\n update: (view: EditorView) => {\r\n const note = selectedNote(view.state.selection);\r\n if (note) {\r\n const footnote = findFootnoteNode(view.state.doc, note.node.attrs.ref);\r\n if (footnote) {\r\n scrollIntoView(view, footnote.pos, false, 0, 30);\r\n }\r\n }\r\n },\r\n }),\r\n });\r\n}\r\n\r\n// selection-driven decorations (mostly css classes) required to activate the footnote editor\r\nfunction footnoteEditorDecorations(state: EditorState) {\r\n const schema = state.schema;\r\n\r\n // see if either a footnote node or note (footnote editor) node has the selection\r\n let footnoteNode = selectedFootnote(state.selection);\r\n let noteNode = selectedNote(state.selection);\r\n\r\n // if they do then we need to enable footnote editing/behavior by\r\n // using decorators to inject appropriate css classes\r\n if (footnoteNode || noteNode) {\r\n // get body and notes nodes\r\n const bodyNode = findChildrenByType(state.doc, schema.nodes.body)[0];\r\n const notesNode = findChildrenByType(state.doc, schema.nodes.notes)[0];\r\n\r\n // resolve the specific footnote node or specific note node\r\n if (footnoteNode) {\r\n const ref = footnoteNode.node.attrs.ref;\r\n const matching = findChildren(notesNode.node, node => node.attrs.ref === ref);\r\n if (matching.length) {\r\n noteNode = matching[0];\r\n noteNode.pos = notesNode.pos + 1 + noteNode.pos;\r\n }\r\n } else if (noteNode) {\r\n const ref = noteNode.node.attrs.ref;\r\n const matching = findChildren(\r\n state.doc,\r\n node => node.type === schema.nodes.footnote && node.attrs.ref === ref,\r\n true,\r\n );\r\n if (matching.length) {\r\n footnoteNode = matching[0];\r\n }\r\n }\r\n\r\n if (footnoteNode && noteNode) {\r\n return DecorationSet.create(state.doc, [\r\n // make notes node visible\r\n nodeDecoration(noteNode, { class: 'active' }),\r\n\r\n // paint outline over footnote\r\n nodeDecoration(footnoteNode, { class: 'active pm-selected-node-outline-color' }),\r\n\r\n // position body and notes nodes for footnote editing\r\n nodeDecoration(bodyNode, { class: 'editing-footnote pm-pane-border-color' }),\r\n nodeDecoration(notesNode, { class: 'editing-footnote pm-pane-border-color' }),\r\n ]);\r\n } else {\r\n return DecorationSet.empty;\r\n }\r\n } else {\r\n return DecorationSet.empty;\r\n }\r\n}\r\n\r\n// node view that display the note number alongside the note content\r\nexport function footnoteEditorNodeViews() {\r\n return {\r\n note(node: ProsemirrorNode) {\r\n return new NoteEditorView(node);\r\n },\r\n };\r\n}\r\n\r\nclass NoteEditorView implements NodeView {\r\n public readonly dom: HTMLElement;\r\n public readonly contentDOM: HTMLElement;\r\n\r\n private readonly node: ProsemirrorNode;\r\n\r\n\r\n constructor(node: ProsemirrorNode) {\r\n this.node = node;\r\n \r\n this.dom = window.document.createElement('div');\r\n this.dom.setAttribute('data-ref', this.node.attrs.ref);\r\n this.dom.classList.add('note');\r\n\r\n const label = window.document.createElement('div');\r\n label.classList.add('note-label');\r\n label.contentEditable = 'false';\r\n label.innerHTML = `<p>${this.node.attrs.number}:</p>`;\r\n this.dom.appendChild(label);\r\n\r\n const content = window.document.createElement('div');\r\n content.classList.add('note-content');\r\n this.contentDOM = content;\r\n this.dom.appendChild(content);\r\n }\r\n}\r\n\r\n// custom handling for arrow keys that cause selection to escape the editor\r\nexport function footnoteEditorKeyDownHandler() {\r\n return (view: EditorView, event: KeyboardEvent) => {\r\n // alias schema & selection\r\n const schema = view.state.schema;\r\n const selection = view.state.selection;\r\n\r\n // pass if the selection isn't in a note\r\n const noteNode: NodeWithPos | undefined = findParentNodeOfType(schema.nodes.note)(selection);\r\n if (!noteNode) {\r\n return false;\r\n }\r\n\r\n // function to find and move selection to associated footnote\r\n // will call this from Escape, ArrowLeft, and ArrowUp handlers below\r\n const selectFootnote = (before = true) => {\r\n const footnoteNode = findFootnoteNode(view.state.doc, noteNode.node.attrs.ref);\r\n if (footnoteNode) {\r\n const tr = view.state.tr;\r\n tr.setSelection(TextSelection.near(tr.doc.resolve(footnoteNode.pos + (before ? 0 : 1))));\r\n view.dispatch(tr);\r\n }\r\n };\r\n\r\n // if this is the Escape key then close the editor\r\n if (event.key === 'Escape') {\r\n selectFootnote();\r\n return true;\r\n }\r\n\r\n // ...otherwise check to see if the user is attempting to arrow out of the footnote\r\n\r\n // get first and last text block nodes (bail if we aren't in either)\r\n const firstTextBlock = firstNode(noteNode, node => node.isTextblock);\r\n const lastTextBlock = lastNode(noteNode, node => node.isTextblock);\r\n if (!firstTextBlock && !lastTextBlock) {\r\n return false;\r\n }\r\n\r\n // exiting from first text block w/ left or up arrow?\r\n if (firstTextBlock) {\r\n if (selectionIsWithin(selection, firstTextBlock)) {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n if (selection.anchor === firstTextBlock.pos + 1) {\r\n selectFootnote(true);\r\n return true;\r\n }\r\n break;\r\n case 'ArrowUp': {\r\n if (view.endOfTextblock('up')) {\r\n selectFootnote(true);\r\n return true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exiting from last text block with right or down arrow?\r\n if (lastTextBlock) {\r\n if (selectionIsWithin(selection, lastTextBlock)) {\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n if (selection.anchor === lastTextBlock.pos + lastTextBlock.node.nodeSize - 1) {\r\n selectFootnote(false);\r\n return true;\r\n }\r\n break;\r\n case 'ArrowDown': {\r\n if (view.endOfTextblock('down')) {\r\n selectFootnote(false);\r\n return true;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}\r\n","/*\r\n * footnote-transaction.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Fragment, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Transaction, EditorState, TextSelection } from 'prosemirror-state';\r\nimport {\r\n findChildrenByType,\r\n NodeWithPos,\r\n ContentNodeWithPos,\r\n findParentNodeOfType,\r\n} from 'prosemirror-utils';\r\nimport { Transform } from 'prosemirror-transform';\r\n\r\nimport { uuidv4 } from '../../api/util';\r\n\r\nimport { findNoteNode, selectedNote } from './footnote';\r\nimport { trTransform } from '../../api/transaction';\r\nimport { findSelectedNodeOfType } from '../../api/node';\r\n\r\n// examine transactions and filter out attempts to place foonotes within note bodies\r\n// (this is not allowed by pandoc markdown)\r\nexport function footnoteFilterTransaction() {\r\n return (tr: Transaction, state: EditorState) => {\r\n const noteWithPos = selectedNote(tr.selection);\r\n if (noteWithPos && findChildrenByType(noteWithPos.node, state.schema.nodes.footnote).length) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n}\r\n\r\n// examine editor transactions and append a transaction that handles fixup of footnote numbers,\r\n// importing of pasted footnotes, selection propagation to the footnote editor, etc.\r\nexport function footnoteAppendTransaction() {\r\n const footnoteChange = (node: ProsemirrorNode) => {\r\n const schema = node.type.schema;\r\n return node.type === schema.nodes.footnote || node.type === schema.nodes.note;\r\n };\r\n\r\n return {\r\n name: 'footnote-renumber',\r\n nodeFilter: footnoteChange,\r\n append: (tr: Transaction) => {\r\n const schema = tr.doc.type.schema;\r\n const activeNote = findParentNodeOfType(schema.nodes.note)(tr.selection);\r\n trTransform(tr, footnoteFixupTransform(activeNote));\r\n },\r\n };\r\n}\r\n\r\nfunction footnoteFixupTransform(activeNote: ContentNodeWithPos | undefined) {\r\n return (tr: Transform) => {\r\n // query for notes and footnotes. note that since these are computed at the beginning\r\n // before any steps are applied, we always need to map their positions before using them\r\n const schema = tr.doc.type.schema;\r\n const footnotes = findAllFootnotes(tr.doc);\r\n const allNotes = findAllNotes(tr.doc);\r\n\r\n // iterate through footnotes in the newState\r\n const refs = new Set<string>();\r\n footnotes.forEach((footnote, index) => {\r\n // map position\r\n footnote.pos = tr.mapping.map(footnote.pos);\r\n\r\n // footnote number\r\n const number = index + 1;\r\n\r\n // alias ref and content (either or both may be updated)\r\n let { ref, content } = footnote.node.attrs;\r\n\r\n // we may be creating a new note to append\r\n let newNote: ProsemirrorNode | null | undefined;\r\n\r\n // get reference to note (if any)\r\n const note = allNotes.find(noteWithPos => noteWithPos.node.attrs.ref === ref);\r\n\r\n // matching note found\r\n if (note) {\r\n // map position since we scanned for all of the notes at the top and we may\r\n // have called tr.insert for a new note below which would have invalidated\r\n // the positions\r\n note.pos = tr.mapping.map(note.pos);\r\n\r\n // update content if this is a note edit (used to propagate user edits back to data-content)\r\n if (activeNote && activeNote.node.attrs.ref === ref) {\r\n content = JSON.stringify(note.node.content.toJSON());\r\n }\r\n\r\n // if we've already processed this ref then it's a duplicate, make a copy w/ a new ref/id\r\n if (refs.has(ref)) {\r\n // create a new unique id and change the ref to it\r\n ref = uuidv4();\r\n\r\n // create and insert new note with this id\r\n newNote = schema.nodes.note.createAndFill({ ref, number }, note.node.content);\r\n\r\n // otherwise update the note with the correct number (if necessary)\r\n } else {\r\n if (note.node.attrs.number !== number) {\r\n tr.setNodeMarkup(note.pos, schema.nodes.note, {\r\n ...note.node.attrs,\r\n number,\r\n });\r\n }\r\n }\r\n\r\n // if there is no note then create one using the content attr\r\n // (this can happen for a copy/paste operation from another document)\r\n } else if (content) {\r\n newNote = schema.nodes.note.createAndFill({ ref, number }, Fragment.fromJSON(schema, JSON.parse(content)));\r\n }\r\n\r\n // insert newNote if necessary\r\n if (newNote) {\r\n const notesContainer = findNotesContainer(tr.doc);\r\n tr.insert(notesContainer.pos + 1, newNote as ProsemirrorNode);\r\n }\r\n\r\n // indicate that we've seen this ref\r\n refs.add(ref);\r\n\r\n // set new footnote markup if necessary\r\n const attrs = footnote.node.attrs;\r\n if (ref !== attrs.ref || content !== attrs.content || number !== attrs.number) {\r\n tr.setNodeMarkup(footnote.pos, schema.nodes.footnote, {\r\n ...footnote.node.attrs,\r\n ref,\r\n content,\r\n number,\r\n });\r\n }\r\n });\r\n\r\n // remove ophraned notes\r\n for (let i = allNotes.length - 1; i >= 0; i--) {\r\n const note = allNotes[i];\r\n note.pos = tr.mapping.map(note.pos);\r\n const footnote = footnotes.find(fn => fn.node.attrs.ref === note.node.attrs.ref);\r\n if (!footnote) {\r\n tr.delete(note.pos, note.pos + note.node.nodeSize);\r\n }\r\n }\r\n };\r\n}\r\n\r\nexport function footnoteSelectNoteAppendTransaction() {\r\n return (_transactions: readonly Transaction[], _oldState: EditorState, newState: EditorState) => {\r\n const schema = newState.schema;\r\n const footnoteNode: NodeWithPos | undefined = findSelectedNodeOfType(schema.nodes.footnote,newState.selection);\r\n if (footnoteNode) {\r\n const tr = newState.tr;\r\n const ref = footnoteNode.node.attrs.ref;\r\n const noteNode = findNoteNode(tr.doc, ref);\r\n if (noteNode) {\r\n tr.setSelection(TextSelection.near(tr.doc.resolve(noteNode.pos)));\r\n }\r\n return tr;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n}\r\n\r\nfunction findAllFootnotes(doc: ProsemirrorNode) {\r\n const schema = doc.type.schema;\r\n return findChildrenByType(doc, schema.nodes.footnote, true);\r\n}\r\n\r\nfunction findAllNotes(doc: ProsemirrorNode) {\r\n const schema = doc.type.schema;\r\n const notesContainer = findNotesContainer(doc);\r\n const offset = notesContainer.pos + 1;\r\n const notes = findChildrenByType(notesContainer.node, schema.nodes.note, false);\r\n return notes.map(note => ({ ...note, pos: note.pos + offset }));\r\n}\r\n\r\nfunction findNotesContainer(doc: ProsemirrorNode) {\r\n return findChildrenByType(doc, doc.type.schema.nodes.notes, false)[0];\r\n}\r\n","/*\r\n * footnote.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, Fragment, NodeType, DOMOutputSpec } from 'prosemirror-model';\r\nimport { Plugin, PluginKey, EditorState, Transaction, TextSelection, Selection } from 'prosemirror-state';\r\nimport {\r\n findChildrenByType,\r\n findParentNodeOfType,\r\n NodeWithPos,\r\n findChildren,\r\n} from 'prosemirror-utils';\r\n\r\nimport { ExtensionContext } from '../../api/extension';\r\nimport { uuidv4 } from '../../api/util';\r\nimport { PandocOutput, PandocTokenType, ProsemirrorWriter, PandocToken } from '../../api/pandoc';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { canInsertNode, findSelectedNodeOfType } from '../../api/node';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nimport {\r\n footnoteEditorKeyDownHandler,\r\n footnoteEditorActivationPlugin,\r\n footnoteEditorNodeViews,\r\n} from './footnote-editor';\r\nimport {\r\n footnoteAppendTransaction,\r\n footnoteFilterTransaction,\r\n footnoteSelectNoteAppendTransaction,\r\n} from './footnote-transaction';\r\n\r\nimport './footnote-styles.css';\r\n\r\nconst plugin = new PluginKey('footnote');\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n if (!pandocExtensions.footnotes) {\r\n return null;\r\n }\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'footnote',\r\n spec: {\r\n inline: true,\r\n attrs: {\r\n number: { default: 1 },\r\n ref: {},\r\n content: { default: '' },\r\n },\r\n group: 'inline',\r\n // atom: true,\r\n parseDOM: [\r\n {\r\n tag: \"span[class*='footnote']\",\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n ref: el.getAttribute('data-ref'),\r\n content: el.getAttribute('data-content'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\r\n return [\r\n 'span',\r\n { class: 'footnote pm-footnote', 'data-ref': node.attrs.ref, 'data-content': node.attrs.content },\r\n node.attrs.number.toString(),\r\n ];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Note,\r\n handler: writePandocNote,\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeNote(node);\r\n },\r\n },\r\n },\r\n ],\r\n\r\n appendTransaction: () => {\r\n return [footnoteAppendTransaction()];\r\n },\r\n\r\n plugins: () => {\r\n return [\r\n footnoteEditorActivationPlugin(),\r\n\r\n new Plugin({\r\n key: plugin,\r\n\r\n // footnote editor\r\n props: {\r\n handleKeyDown: footnoteEditorKeyDownHandler(),\r\n nodeViews: footnoteEditorNodeViews(),\r\n },\r\n\r\n // footnote transactions (fixups, etc.)\r\n filterTransaction: footnoteFilterTransaction(),\r\n appendTransaction: footnoteSelectNoteAppendTransaction(),\r\n }),\r\n ];\r\n },\r\n\r\n commands: () => {\r\n return [\r\n new ProsemirrorCommand(EditorCommandId.Footnote, ['Shift-Mod-F7'], footnoteCommandFn(), footnoteOmniInsert(ui)),\r\n ];\r\n },\r\n };\r\n};\r\n\r\nfunction writePandocNote(schema: Schema) {\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n // generate unique id\r\n const ref = uuidv4();\r\n\r\n // add note to notes collection (will be handled specially by closeNode b/c it\r\n // has schema.nodes.node type)\r\n writer.openNoteNode(ref);\r\n writer.writeTokens(tok.c);\r\n const noteNode = writer.closeNode();\r\n\r\n // store json version of node in an attribute of the footnote (we can copy/paste)\r\n // between different documents\r\n const content = JSON.stringify(noteNode.content.toJSON());\r\n\r\n // add inline node to the body\r\n writer.addNode(schema.nodes.footnote, { ref, number: noteNode.attrs.number, content }, []);\r\n };\r\n}\r\n\r\nfunction footnoteCommandFn() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!canInsertFootnote(state)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const tr = state.tr;\r\n insertFootnote(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nfunction footnoteOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Footnote'),\r\n description: ui.context.translateText('Note placed at the bottom of the page'),\r\n group: OmniInsertGroup.References,\r\n priority: 2,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.footnote_dark : ui.images.omni_insert.footnote),\r\n };\r\n}\r\n\r\nfunction canInsertFootnote(state: EditorState) {\r\n return (\r\n canInsertNode(state, state.schema.nodes.footnote) && !findParentNodeOfType(state.schema.nodes.note)(state.selection)\r\n );\r\n}\r\n\r\nfunction insertFootnote(\r\n tr: Transaction,\r\n edit = true,\r\n content?: Fragment | ProsemirrorNode | ProsemirrorNode[] | undefined,\r\n): string {\r\n // resolve content\r\n const schema = tr.doc.type.schema;\r\n if (!content) {\r\n content = schema.nodes.paragraph.create();\r\n }\r\n\r\n // generate note id\r\n const ref = uuidv4();\r\n\r\n // insert empty note\r\n const notes = findChildrenByType(tr.doc, schema.nodes.notes, true)[0];\r\n const note = schema.nodes.note.createAndFill({ ref }, content);\r\n tr.insert(notes.pos + 1, note as ProsemirrorNode);\r\n\r\n // insert footnote linked to note\r\n const footnote = schema.nodes.footnote.create({ ref });\r\n tr.replaceSelectionWith(footnote, false);\r\n\r\n // open note editor\r\n if (edit) {\r\n const noteNode = findNoteNode(tr.doc, ref);\r\n if (noteNode) {\r\n tr.setSelection(TextSelection.create(tr.doc, noteNode.pos + 1));\r\n }\r\n }\r\n\r\n // return ref\r\n return ref;\r\n}\r\n\r\n\r\n\r\nexport function selectedFootnote(selection: Selection): NodeWithPos | undefined {\r\n const schema = selection.$head.node().type.schema;\r\n return findSelectedNodeOfType(schema.nodes.footnote, selection);\r\n}\r\n\r\nexport function selectedNote(selection: Selection): NodeWithPos | undefined {\r\n const schema = selection.$head.node().type.schema;\r\n return findParentNodeOfType(schema.nodes.note)(selection);\r\n}\r\n\r\nexport function findNoteNode(doc: ProsemirrorNode, ref: string): NodeWithPos | undefined {\r\n return findNodeOfTypeWithRef(doc, doc.type.schema.nodes.note, ref);\r\n}\r\n\r\nexport function findFootnoteNode(doc: ProsemirrorNode, ref: string): NodeWithPos | undefined {\r\n return findNodeOfTypeWithRef(doc, doc.type.schema.nodes.footnote, ref);\r\n}\r\n\r\nfunction findNodeOfTypeWithRef(doc: ProsemirrorNode, type: NodeType, ref: string): NodeWithPos | undefined {\r\n const foundNode = findChildren(doc, node => node.type === type && node.attrs.ref === ref, true);\r\n if (foundNode.length) {\r\n return foundNode[0];\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * raw_block.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, NodeType } from 'prosemirror-model';\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { setBlockType } from 'prosemirror-commands';\r\n\r\nimport { findParentNode } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\n\r\nimport {\r\n PandocOutput,\r\n PandocToken,\r\n PandocTokenType,\r\n ProsemirrorWriter,\r\n kRawBlockContent,\r\n kRawBlockFormat,\r\n} from '../api/pandoc';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\n\r\nimport { EditorUI } from '../api/ui-types';\r\nimport { isSingleLineHTML } from '../api/html';\r\nimport { kHTMLFormat, kTexFormat, editRawBlockCommand, isRawHTMLFormat } from '../api/raw';\r\nimport { OmniInsert, OmniInsertGroup } from '../api/omni_insert';\r\nimport { kRawInlineFormat, kRawInlineContent } from '../marks/raw_inline/raw_inline';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions, pandocCapabilities, ui } = context;\r\n\r\n const rawAttribute = pandocExtensions.raw_attribute;\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'raw_block',\r\n spec: {\r\n content: 'text*',\r\n group: 'block',\r\n marks: '',\r\n code: true,\r\n defining: true,\r\n isolating: true,\r\n attrs: {\r\n format: {},\r\n },\r\n parseDOM: [\r\n {\r\n tag: \"div[class*='raw-block']\",\r\n preserveWhitespace: 'full',\r\n getAttrs: (node: Node | string) => {\r\n const el = node as Element;\r\n return {\r\n format: el.getAttribute('data-format'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n return [\r\n 'div',\r\n {\r\n class: 'raw-block pm-fixedwidth-font pm-code-block pm-markup-text-color',\r\n 'data-format': node.attrs.format,\r\n },\r\n 0,\r\n ];\r\n },\r\n },\r\n\r\n code_view: {\r\n lang: (node: ProsemirrorNode) => {\r\n return node.attrs.format;\r\n },\r\n attrEditFn: rawAttribute ? editRawBlockCommand(ui, pandocCapabilities.output_formats) : undefined,\r\n borderColorClass: 'pm-raw-block-border',\r\n },\r\n\r\n attr_edit: () => ({\r\n type: (schema: Schema) => schema.nodes.raw_block,\r\n tags: (node: ProsemirrorNode) => [node.attrs.format],\r\n editFn: rawAttribute\r\n ? () => editRawBlockCommand(ui, pandocCapabilities.output_formats)\r\n : () => () => false,\r\n }),\r\n\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.RawBlock,\r\n block: 'raw_block',\r\n },\r\n ],\r\n\r\n // ensure that usethis badges comment ends up in it's own block\r\n preprocessor: (markdown: string) => {\r\n return markdown.replace(/([^\\n])(\\n^<!-- badges: end -->$)/gm, (_match, p1, p2) => {\r\n return p1 + '\\n' + p2;\r\n });\r\n },\r\n\r\n tokensFilter: (tokens: PandocToken[]) => {\r\n const filtered: PandocToken[] = [];\r\n for (let i=0; i<tokens.length; i++) {\r\n if (isSingleLineHtmlRawBlock(tokens[i]) && \r\n isParaOrPlain(tokens[i+1]) &&\r\n isSingleLineHtmlRawBlock(tokens[i+2])) {\r\n\r\n const beginTag = (tokens[i].c[kRawBlockContent] as string).trimRight();\r\n const endTag = (tokens[i+2].c[kRawBlockContent] as string).trimRight();\r\n const match = beginTag.match(/^<(.*?)>$/);\r\n if (match && (endTag === \"</\" + match[1] + \">\")) {\r\n \r\n const innerContent = tokens[i+1].c as PandocToken[];\r\n innerContent.unshift({\r\n t: PandocTokenType.RawInline,\r\n c: [\"html\", beginTag]\r\n });\r\n innerContent.push({\r\n t: PandocTokenType.RawInline,\r\n c: [\"html\", endTag]\r\n });\r\n filtered.push({\r\n t: PandocTokenType.Para,\r\n c: innerContent\r\n });\r\n i += 2;\r\n } else {\r\n filtered.push(tokens[i]);\r\n }\r\n } else {\r\n filtered.push(tokens[i]);\r\n } \r\n } \r\n\r\n return filtered;\r\n },\r\n\r\n // we define a custom blockReader here so that we can convert html and tex blocks with\r\n // a single line of code into paragraph with a raw inline\r\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\r\n if (tok.t === PandocTokenType.RawBlock) {\r\n readPandocRawBlock(schema, tok, writer);\r\n return true;\r\n } else if (isParagraphWrappingMultilineRaw(tok)) {\r\n const rawTok = tok.c[0];\r\n const format = rawTok.c[kRawBlockFormat];\r\n const content = rawTok.c[kRawBlockContent];\r\n writer.addNode(schema.nodes.raw_block, { format }, [schema.text(content)]);\r\n return true;\r\n } else if (isParagraphWrappingLatexBeginOrEnd(tok)) {\r\n writer.addNode(schema.nodes.raw_block, { format: kTexFormat }, [schema.text(tok.c[0].c)]);\r\n return true;\r\n } else if (isParagraphWrappingRawLatexBeginOrEnd(tok)) {\r\n writer.addNode(schema.nodes.raw_block, { format: kTexFormat }, [schema.text(tok.c[0].c[kRawInlineContent])]);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n if (!pandocExtensions.raw_attribute || node.textContent.trim() === '<!-- -->') {\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeRawMarkdown(node.textContent);\r\n });\r\n\r\n // raw block with embedded ``` (e.g. a commented out Rmd code chunk) needs\r\n // extra backticks on the outside to prevent the rmd chunk end backticks\r\n // from being considered the end of the raw html block.\r\n } else if (node.textContent.includes(\"\\n```\")) {\r\n // find the ``` standing by itself on a line\r\n const matches: RegExpExecArray[] = [];\r\n const embeddedTickRegEx = /\\n(`{3,})\\s*?\\n/g;\r\n embeddedTickRegEx.lastIndex = 0;\r\n let match: RegExpExecArray | null = null;\r\n // tslint:disable-next-line no-conditional-assignment\r\n while ((match = embeddedTickRegEx.exec(node.textContent))) {\r\n matches.push(match);\r\n }\r\n embeddedTickRegEx.lastIndex = 0;\r\n const matchRev = matches.reverse();\r\n const ticks = (matchRev.length > 0 ? matchRev[0][1] : \"```\") + \"`\";\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeRawMarkdown(`${ticks}{=${node.attrs.format}}\\n${node.textContent}\\n${ticks}\\n`);\r\n });\r\n } else {\r\n output.writeToken(PandocTokenType.RawBlock, () => {\r\n output.write(node.attrs.format);\r\n output.write(node.textContent);\r\n });\r\n }\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n const commands: ProsemirrorCommand[] = [];\r\n\r\n commands.push(\r\n new FormatRawBlockCommand(EditorCommandId.HTMLBlock, kHTMLFormat, schema.nodes.raw_block, {\r\n name: ui.context.translateText('HTML Block'),\r\n description: ui.context.translateText('Raw HTML content'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 6,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.html_block_dark : ui.images.omni_insert.html_block,\r\n }),\r\n );\r\n\r\n if (pandocExtensions.raw_tex) {\r\n commands.push(\r\n new FormatRawBlockCommand(EditorCommandId.TexBlock, kTexFormat, schema.nodes.raw_block, {\r\n name: ui.context.translateText('TeX Block'),\r\n description: ui.context.translateText('Raw TeX content'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 5,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.tex_block_dark : ui.images.omni_insert.tex_block,\r\n }),\r\n );\r\n }\r\n\r\n if (rawAttribute) {\r\n commands.push(new RawBlockCommand(ui, pandocCapabilities.output_formats));\r\n }\r\n\r\n return commands;\r\n },\r\n };\r\n};\r\n\r\nfunction isSingleLineHtmlRawBlock(tok?: PandocToken) {\r\n if (tok?.t === PandocTokenType.RawBlock) {\r\n const format = tok.c[kRawBlockFormat];\r\n const text = tok.c[kRawBlockContent] as string;\r\n const textTrimmed = text.trimRight();\r\n return isRawHTMLFormat(format) && isSingleLineHTML(textTrimmed);\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction isParaOrPlain(tok?: PandocToken) {\r\n if (tok) {\r\n return tok.t === PandocTokenType.Plain || tok.t === PandocTokenType.Para;\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction readPandocRawBlock(schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) {\r\n // single lines of html should be read as inline html (allows for\r\n // highlighting and more seamless editing experience)\r\n const format = tok.c[kRawBlockFormat];\r\n const text = tok.c[kRawBlockContent] as string;\r\n const textTrimmed = text.trimRight();\r\n if (isRawHTMLFormat(format) && isSingleLineHTML(textTrimmed) && writer.hasInlineHTMLWriter(textTrimmed)) {\r\n writer.openNode(schema.nodes.paragraph, {});\r\n writer.writeInlineHTML(textTrimmed);\r\n writer.closeNode();\r\n\r\n // similarly, single lines of tex (that aren't begin or end) should be read as inline tex\r\n } else if (format === kTexFormat && readAsInlineTex(textTrimmed)) {\r\n writer.openNode(schema.nodes.paragraph, {});\r\n const rawTexMark = schema.marks.raw_tex.create();\r\n writer.openMark(rawTexMark);\r\n writer.writeText(textTrimmed);\r\n writer.closeMark(rawTexMark);\r\n writer.closeNode();\r\n } else {\r\n writer.openNode(schema.nodes.raw_block, { format });\r\n writer.writeText(text);\r\n writer.closeNode();\r\n }\r\n}\r\n\r\n\r\nexport function readAsInlineTex(tex: string) {\r\n tex = tex.trimRight();\r\n if (tex.split('\\n').length === 1){\r\n return !isLatexBeginOrEnd(tex);\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\nfunction isParagraphWrappingMultilineRaw(tok: PandocToken) {\r\n return isSingleChildParagraph(tok) && \r\n tok.c[0].t === PandocTokenType.RawInline &&\r\n isMultilineString(tok.c[0].c[kRawBlockContent]);\r\n}\r\n\r\nfunction isParagraphWrappingLatexBeginOrEnd(tok: PandocToken) {\r\n return isSingleChildParagraph(tok) &&\r\n tok.c[0].t === PandocTokenType.Str &&\r\n isLatexBeginOrEnd(tok.c[0].c);\r\n}\r\n\r\nfunction isParagraphWrappingRawLatexBeginOrEnd(tok: PandocToken) {\r\n return isSingleChildParagraph(tok) &&\r\n (tok.c[0].t === PandocTokenType.RawInline &&\r\n tok.c[0].c[kRawInlineFormat] === kTexFormat &&\r\n isLatexBeginOrEnd(tok.c[0].c[kRawInlineContent]));\r\n}\r\n\r\nfunction isLatexBeginOrEnd(str: string) {\r\n return str && str.trimLeft().match(/\\\\(begin|end)/);\r\n}\r\n\r\nfunction isSingleChildParagraph(tok: PandocToken) {\r\n return tok.t === PandocTokenType.Para && tok.c && tok.c.length === 1;\r\n}\r\n\r\nfunction isMultilineString(str: string) {\r\n return str.indexOf('\\n') !== -1;\r\n}\r\n\r\n// base class for format specific raw block commands (e.g. html/tex)\r\nclass FormatRawBlockCommand extends ProsemirrorCommand {\r\n private format: string;\r\n private nodeType: NodeType;\r\n\r\n constructor(id: EditorCommandId, format: string, nodeType: NodeType, omniInsert?: OmniInsert) {\r\n super(\r\n id,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!this.isActive(state) && !setBlockType(this.nodeType, { format })(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const schema = state.schema;\r\n if (this.isActive(state)) {\r\n setBlockType(schema.nodes.paragraph)(state, dispatch);\r\n } else {\r\n setBlockType(this.nodeType, { format })(state, dispatch);\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n omniInsert,\r\n );\r\n this.format = format;\r\n this.nodeType = nodeType;\r\n }\r\n\r\n public isActive(state: EditorState) {\r\n return !!findParentNode(node => node.type === this.nodeType && node.attrs.format === this.format)(state.selection);\r\n }\r\n}\r\n\r\n// generic raw block command (shows dialog to allow choosing from among raw formats)\r\nclass RawBlockCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI, outputFormats: string[]) {\r\n super(EditorCommandId.RawBlock, [], editRawBlockCommand(ui, outputFormats), {\r\n name: ui.context.translateText('Raw Block...'),\r\n description: ui.context.translateText('Raw content block'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 4,\r\n noFocus: true,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.raw_block_dark : ui.images.omni_insert.raw_block),\r\n });\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * yaml_metadata-capsule.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\n\r\nimport { ProsemirrorWriter } from '../../api/pandoc';\r\nimport { uuidv4 } from '../../api/util';\r\nimport {\r\n encodedBlockCapsuleRegex,\r\n blockCapsuleSourceWithoutPrefix,\r\n PandocBlockCapsule,\r\n blockCapsuleParagraphTokenHandler,\r\n blockCapsuleTextHandler,\r\n} from '../../api/pandoc_capsule';\r\n\r\nconst kYamlBlocksRegex = /(^)(---[ \\t]*\\n(?![ \\t]*\\n)[\\W\\w]*?\\n(?:---|\\.\\.\\.))([ \\t]*)$/gm;\r\n\r\nconst kYamlDiscardRegex = /^([\\t >]*)`{3,}/m;\r\n\r\nexport function yamlMetadataBlockCapsuleFilter() {\r\n const kYamlMetadataCapsuleType = 'E1819605-0ACD-4FAE-8B99-9C1B7BD7C0F1'.toLowerCase();\r\n\r\n return {\r\n type: kYamlMetadataCapsuleType,\r\n\r\n match: kYamlBlocksRegex,\r\n\r\n // if there was an unterminated yaml block inside a code block (followed by more yaml,\r\n // perhaps in yet another code block) then the main regex eats the code block boundary.\r\n // provide a discard expression that excludes any yaml block that has what appears\r\n // to be a fenced code block boundary\r\n discard: kYamlDiscardRegex,\r\n\r\n // add a newline to ensure that if the metadata block has text right\r\n // below it we still end up in our own pandoc paragarph block\r\n enclose: (capsuleText: string) => capsuleText + '\\n',\r\n // globally replace any instances of our block capsule found in text\r\n handleText: blockCapsuleTextHandler(\r\n kYamlMetadataCapsuleType,\r\n encodedBlockCapsuleRegex(undefined, '\\\\n', 'gm'),\r\n (text: string) => text.substring(0, text.length - 1), // trim off newline\r\n ),\r\n\r\n // we are looking for a paragraph token consisting entirely of a\r\n // block capsule of our type. if find that then return the block\r\n // capsule text\r\n handleToken: blockCapsuleParagraphTokenHandler(kYamlMetadataCapsuleType),\r\n\r\n // write as yaml_metadata\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\r\n writer.openNode(schema.nodes.yaml_metadata, {\r\n navigation_id: uuidv4(),\r\n md_index: capsule.position,\r\n });\r\n // write the lines w/o the source-level prefix\r\n writer.writeText(blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix));\r\n writer.closeNode();\r\n },\r\n };\r\n}\r\n","/*\r\n * yaml_metadata.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, DOMOutputSpec, ParseRule } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { ExtensionContext, Extension } from '../../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../../api/pandoc';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { codeNodeSpec } from '../../api/code';\r\nimport { selectionIsBodyTopLevel } from '../../api/selection';\r\nimport { yamlMetadataTitlePlugin } from './yaml_metadata-title';\r\nimport { yamlMetadataBlockCapsuleFilter } from './yaml_metadata-capsule';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\nimport { fragmentText } from '../../api/fragment';\r\nimport { stripYamlDelimeters } from '../../api/yaml';\r\n\r\nconst extension = (context: ExtensionContext): Extension => {\r\n const { ui } = context;\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'yaml_metadata',\r\n\r\n spec: {\r\n ...codeNodeSpec(),\r\n attrs: {\r\n navigation_id: { default: null },\r\n },\r\n parseDOM: [\r\n {\r\n tag: \"div[class*='yaml-block']\",\r\n preserveWhitespace: 'full',\r\n } as ParseRule,\r\n ],\r\n toDOM(): DOMOutputSpec {\r\n return ['div', { class: 'yaml-block pm-code-block' }, 0];\r\n },\r\n },\r\n\r\n code_view: {\r\n lang: () => 'yaml-frontmatter',\r\n classes: ['pm-metadata-background-color', 'pm-yaml-metadata-block'],\r\n },\r\n\r\n pandoc: {\r\n blockCapsuleFilter: yamlMetadataBlockCapsuleFilter(),\r\n\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Para, () => {\r\n const yaml = '---\\n' + stripYamlDelimeters(fragmentText(node.content)) + '\\n---';\r\n output.writeRawMarkdown(yaml);\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: () => {\r\n return [new YamlMetadataCommand(ui)];\r\n },\r\n\r\n plugins: () => [yamlMetadataTitlePlugin()],\r\n };\r\n};\r\n\r\nclass YamlMetadataCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI) {\r\n super(\r\n EditorCommandId.YamlMetadata,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const schema = state.schema;\r\n\r\n if (!canInsertNode(state, schema.nodes.yaml_metadata)) {\r\n return false;\r\n }\r\n\r\n // only allow inserting at the top level\r\n if (!selectionIsBodyTopLevel(state.selection)) {\r\n return false;\r\n }\r\n\r\n // create yaml metadata text\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const kYamlLeading = '---\\n';\r\n const kYamlTrailing = '\\n---';\r\n const yamlText = schema.text(kYamlLeading + kYamlTrailing);\r\n const yamlNode = schema.nodes.yaml_metadata.create({}, yamlText);\r\n tr.replaceSelectionWith(yamlNode);\r\n setTextSelection(tr.mapping.map(state.selection.from) - kYamlTrailing.length - 1)(tr);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('YAML'),\r\n description: ui.context.translateText('YAML metadata block'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 3,\r\n selectionOffset: 4,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.yaml_block_dark : ui.images.omni_insert.yaml_block,\r\n },\r\n );\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * rmd_chunk-image.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Plugin, PluginKey, Transaction, EditorState, EditorStateConfig } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration, EditorView } from 'prosemirror-view';\r\n\r\nimport { findChildrenByType, setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { transactionsAreTypingChange, transactionsHaveChange } from '../../api/transaction';\r\nimport { EditorUIContext } from '../../api/ui-types';\r\nimport { onElementRemoved } from '../../api/dom';\r\nimport { mapResourceToURL } from '../../api/resource';\r\nimport { stripQuotes } from 'core';\r\n\r\nconst key = new PluginKey<DecorationSet>('rmd-chunk-image-preview');\r\n\r\nexport class RmdChunkImagePreviewPlugin extends Plugin<DecorationSet> {\r\n constructor(uiContext: EditorUIContext) {\r\n super({\r\n key,\r\n state: {\r\n init: (_config: EditorStateConfig, state: EditorState) => {\r\n return imagePreviewDecorations(state, uiContext);\r\n },\r\n apply: (tr: Transaction, old: DecorationSet, oldState: EditorState, newState: EditorState) => {\r\n const transactions = [tr];\r\n\r\n // doc didn't change, return existing decorations\r\n if (!tr.docChanged) {\r\n return old.map(tr.mapping, tr.doc);\r\n\r\n // non-typing change, do a full rescan\r\n } else if (!transactionsAreTypingChange(transactions)) {\r\n return imagePreviewDecorations(newState, uiContext);\r\n\r\n // change that affects a rmd chunk block, do a full rescan\r\n } else if (transactionsHaveChange(transactions, oldState, newState, isRmdChunkNode)) {\r\n return imagePreviewDecorations(newState, uiContext);\r\n }\r\n\r\n // otherwise return the existing set (mapped)\r\n else {\r\n return old.map(tr.mapping, tr.doc);\r\n }\r\n },\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return key.getState(state);\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\nfunction imagePreviewDecorations(state: EditorState, uiContext: EditorUIContext) {\r\n // find all rmd code chunks with knitr::include_graphics\r\n const decorations: Decoration[] = [];\r\n findChildrenByType(state.doc, state.schema.nodes.rmd_chunk).forEach(rmdChunk => {\r\n // look for a line with knitr::include_graphics\r\n const match = rmdChunk.node.textContent.match(/^(knitr::)?include_graphics\\((['\"])([^\\2]+)\\2/m);\r\n if (match) {\r\n // see if we can also find an out.width on the first line\r\n let width = '';\r\n const firstLine = rmdChunk.node.textContent.split(/\\r?\\n/)[0];\r\n const widthMatch = firstLine.match(/^\\s*\\{[r|R][, ].*out\\.width\\s*=\\s*([^ ,$]+).*}/);\r\n if (widthMatch) {\r\n width = stripQuotes(widthMatch[1].trim());\r\n // revert if they are using out.width = NULL\r\n if (width === 'NULL') {\r\n width = '';\r\n }\r\n }\r\n\r\n // see if we can find fig.align='center'\r\n const alignCenter = !!firstLine.match(/^\\s*\\{[r|R][, ].*fig\\.align\\s*=\\s*['\"]?center['\"]?/);\r\n\r\n const imagePath = match[3];\r\n const decoration = Decoration.widget(\r\n rmdChunk.pos + rmdChunk.node.nodeSize,\r\n (view: EditorView, getPos: () => number | undefined) => {\r\n const container = window.document.createElement('div');\r\n container.style.marginTop = '-1.5em'; // to bridge back to the codemirror block\r\n // which has a margin-block-end of 1em\r\n container.classList.add('pm-image-preview');\r\n container.classList.add('pm-block-border-color');\r\n const img = window.document.createElement('img');\r\n if (alignCenter) {\r\n img.classList.add('pm-image-centered');\r\n }\r\n\r\n mapResourceToURL(uiContext, imagePath).then(url => {\r\n img.src = url;\r\n });\r\n img.setAttribute('draggable', 'false');\r\n\r\n // watch for changes to the file\r\n const unsubscribe = uiContext.watchResource(imagePath, () => {\r\n mapResourceToURL(uiContext, imagePath).then(url => {\r\n img.src = url;\r\n });\r\n });\r\n onElementRemoved(view.dom, container, unsubscribe);\r\n\r\n if (width) {\r\n img.setAttribute('width', width);\r\n }\r\n img.draggable = false;\r\n img.onload = () => {\r\n img.alt = '';\r\n };\r\n img.onerror = () => {\r\n img.alt = ` ${uiContext.translateText('Image not found')}: ${imagePath}`;\r\n };\r\n // select rmd_chunk for clicks on the preview image\r\n img.onclick = () => {\r\n const pos = getPos();\r\n if (pos !== undefined) {\r\n const tr = view.state.tr;\r\n setTextSelection(pos - 1)(tr);\r\n view.dispatch(tr);\r\n }\r\n };\r\n container.append(img);\r\n return container;\r\n },\r\n { key: imagePath + 'width:' + width + 'center:' + alignCenter },\r\n );\r\n decorations.push(decoration);\r\n }\r\n });\r\n\r\n // return decorations\r\n return DecorationSet.create(state.doc, decorations);\r\n}\r\n\r\nfunction isRmdChunkNode(node: ProsemirrorNode) {\r\n return node.type === node.type.schema.nodes.rmd_chunk;\r\n}\r\n","/*\r\n * rmd_chunk-capsule.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\n\r\nimport { PandocBlockCapsule, parsePandocBlockCapsule, blockCapsuleSourceWithoutPrefix } from '../../api/pandoc_capsule';\r\nimport { PandocToken, PandocTokenType, ProsemirrorWriter } from '../../api/pandoc';\r\nimport { pandocAttrReadAST, kCodeBlockAttr, PandocAttr, kCodeBlockText } from '../../api/pandoc_attr';\r\nimport { uuidv4 } from '../../api/util';\r\n\r\nexport function rmdChunkBlockCapsuleFilter() {\r\n // (note that this constant is also defined in VisualMode.java)\r\n const kBlockCapsuleType = 'F3175F2A-E8A0-4436-BE12-B33925B6D220'.toLowerCase();\r\n const kBlockCapsuleTextRegEx = new RegExp('```' + kBlockCapsuleType + '\\\\n[ \\\\t>]*([^`]+)\\\\n[ \\\\t>]*```', 'g');\r\n\r\n return {\r\n type: kBlockCapsuleType,\r\n\r\n match: /^([\\t >]*)((```+)\\s*\\{[a-zA-Z0-9_-]+(?: *[ ,].*?)?\\}[ \\t]*\\n(?:[\\t >]*\\3|[\\W\\w]*?\\n[\\t >]*\\3))([ \\t]*)$/gm,\r\n\r\n extract: (_match: string, p1: string, p2: string, _p3: string, p4: string) => {\r\n return {\r\n prefix: p1,\r\n source: p2,\r\n suffix: p4,\r\n };\r\n },\r\n\r\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\r\n // (in this case a code block). we use the capsule prefix here to make sure that the code block's\r\n // content and end backticks match the indentation level of the first line correctly\r\n enclose: (capsuleText: string, capsule: PandocBlockCapsule) =>\r\n '```' + kBlockCapsuleType + '\\n' + capsule.prefix + capsuleText + '\\n' + capsule.prefix + '```',\r\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\r\n // and if we find it, parse and return the original source code\r\n handleText: (text: string, tok: PandocToken) => {\r\n // if this is a code block then we need to strip the prefix\r\n const stripPrefix = tok.t === PandocTokenType.CodeBlock;\r\n\r\n return text.replace(kBlockCapsuleTextRegEx, (_match, p1) => {\r\n const capsuleText = p1;\r\n const capsule = parsePandocBlockCapsule(capsuleText);\r\n if (stripPrefix) {\r\n return blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\r\n } else {\r\n return capsule.source;\r\n }\r\n });\r\n },\r\n\r\n // look for a block capsule of our type within a code block (indicated by the\r\n // presence of a special css class)\r\n handleToken: (tok: PandocToken) => {\r\n if (tok.t === PandocTokenType.CodeBlock) {\r\n const attr = pandocAttrReadAST(tok, kCodeBlockAttr) as PandocAttr;\r\n if (attr.classes.includes(kBlockCapsuleType)) {\r\n return tok.c[kCodeBlockText];\r\n }\r\n }\r\n return null;\r\n },\r\n\r\n // write the node as an rmd_chunk, being careful to remove the backticks\r\n // preserved as part of the source, and striping out the base indentation\r\n // level implied by the prefix\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\r\n // open node\r\n writer.openNode(schema.nodes.rmd_chunk, {\r\n navigation_id: uuidv4(),\r\n md_index: capsule.position,\r\n });\r\n\r\n // source still has leading and trailing backticks, remove them\r\n const source = capsule.source.replace(/^```+/, '').replace(/\\n[\\t >]*```+$/, '');\r\n\r\n // write the lines w/o the source-level prefix\r\n writer.writeText(blockCapsuleSourceWithoutPrefix(source, capsule.prefix));\r\n\r\n // all done\r\n writer.closeNode();\r\n },\r\n };\r\n}\r\n","/*\r\n * rmd_chunk.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { PandocOutput, PandocTokenType } from '../../api/pandoc';\r\n\r\nimport { codeNodeSpec } from '../../api/code';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\n\r\nimport { EditorUI, EditorUIChunks } from '../../api/ui-types';\r\nimport { kBookdownDocType, kQuartoDocType } from '../../api/format';\r\nimport { rmdChunk, insertRmdChunk } from '../../api/rmd';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nimport { RmdChunkImagePreviewPlugin } from './rmd_chunk-image';\r\nimport { rmdChunkBlockCapsuleFilter } from './rmd_chunk-capsule';\r\n\r\nimport './rmd_chunk-styles.css';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { EditorOptions } from '../../api/options';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { ui, options, format } = context;\r\n\r\n if (!format.rmdExtensions.codeChunks) {\r\n return null;\r\n }\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'rmd_chunk',\r\n spec: {\r\n ...codeNodeSpec(),\r\n attrs: {\r\n navigation_id: { default: null },\r\n md_index: { default: 0 },\r\n },\r\n parseDOM: [\r\n {\r\n tag: \"div[class*='rmd-chunk']\",\r\n preserveWhitespace: 'full',\r\n },\r\n ],\r\n toDOM() {\r\n return ['div', { class: 'rmd-chunk pm-code-block' }, 0];\r\n },\r\n },\r\n\r\n code_view: {\r\n firstLineMeta: true,\r\n lineNumbers: true,\r\n lineNumberFormatter: (lineNumber: number) => {\r\n if (lineNumber === 1) {\r\n return '';\r\n } else {\r\n return lineNumber - 1 + '';\r\n }\r\n },\r\n bookdownTheorems: format.docTypes.includes(kBookdownDocType),\r\n classes: ['pm-chunk-background-color'],\r\n lang: (_node: ProsemirrorNode, content: string) => {\r\n const match = content.match(/^\\{([a-zA-Z0-9_-]+)/);\r\n if (match) {\r\n return match[1].split(\"-\").pop() || \"\";\r\n } else {\r\n return null;\r\n }\r\n },\r\n createFromPastePattern: /^\\{([a-zA-Z0-9_-]+).*}.*?\\n/m,\r\n },\r\n\r\n pandoc: {\r\n blockCapsuleFilter: rmdChunkBlockCapsuleFilter(),\r\n\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Para, () => {\r\n const parts = rmdChunk(node.textContent);\r\n if (parts) {\r\n output.writeRawMarkdown(parts.delimiter + '{' + parts.meta + '}\\n' + parts.code + parts.delimiter + '\\n');\r\n }\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: () => {\r\n const commands = [\r\n new RChunkCommand(ui, options),\r\n new PythonChunkCommand(ui, options),\r\n new JuliaChunkCommand(ui, options)\r\n ];\r\n if (!options.defaultCellTypePython) {\r\n commands.push(\r\n new BashChunkCommand(ui, options),\r\n new RcppChunkCommand(ui, options),\r\n new SQLChunkCommand(ui, options),\r\n new D3ChunkCommand(ui, options),\r\n new StanChunkCommand(ui, options),\r\n )\r\n }\r\n if (format.docTypes.includes(kQuartoDocType)) {\r\n commands.push(\r\n new MermaidChunkCommand(ui, options),\r\n new GraphVizChunkCommand(ui, options)\r\n )\r\n }\r\n if (ui.chunks) {\r\n commands.push(\r\n new ExpandAllChunksCommand(ui.chunks),\r\n new CollapseAllChunksCommand(ui.chunks)\r\n );\r\n }\r\n return commands;\r\n },\r\n\r\n plugins: () => {\r\n if (options.rmdImagePreview) {\r\n return [new RmdChunkImagePreviewPlugin(ui.context)];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n};\r\n\r\nclass RmdChunkCommand extends ProsemirrorCommand {\r\n constructor(\r\n ui: EditorUI,\r\n options: EditorOptions,\r\n id: EditorCommandId,\r\n keymap: string[],\r\n priority: number,\r\n lang: string,\r\n placeholder: string,\r\n image: () => string,\r\n group = OmniInsertGroup.Chunks,\r\n keywords?: string[]\r\n ) {\r\n super(id, keymap, insertRmdChunk(placeholder), {\r\n name: `${lang} ${ui.context.translateText('Code ')} ${cellName(ui, options)}`,\r\n description: `${ui.context.translateText('Executable')} ${lang} ${cellName(ui, options).toLowerCase()}`,\r\n group,\r\n priority,\r\n image,\r\n keywords: [\"cell\", \"chunk\", ...(keywords ? keywords : [])]\r\n });\r\n }\r\n}\r\n\r\nfunction cellName(ui: EditorUI, options: EditorOptions) {\r\n if (options.defaultCellTypePython) {\r\n return ui.context.translateText('Cell');\r\n } else {\r\n return ui.context.translateText('Chunk');\r\n }\r\n}\r\n\r\nconst kInsertCodeChunkShortcut = ['Mod-Alt-i'];\r\n\r\nclass RChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui, \r\n options,\r\n EditorCommandId.RCodeChunk, \r\n !options.defaultCellTypePython ? kInsertCodeChunkShortcut : [], \r\n !options.defaultCellTypePython ? 10 : 8, \r\n 'R', \r\n '{r}\\n', \r\n () => ui.prefs.darkMode() ? ui.images.omni_insert!.r_chunk_dark! : ui.images.omni_insert!.r_chunk!,\r\n OmniInsertGroup.Common\r\n );\r\n }\r\n}\r\n\r\nclass PythonChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui,\r\n options,\r\n EditorCommandId.PythonCodeChunk,\r\n options.defaultCellTypePython ? kInsertCodeChunkShortcut : [],\r\n options.defaultCellTypePython ? 10 : 8,\r\n 'Python',\r\n '{python}\\n',\r\n () => ui.images.omni_insert!.python_chunk!,\r\n OmniInsertGroup.Common\r\n );\r\n }\r\n}\r\n\r\n\r\nclass JuliaChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui,\r\n options,\r\n EditorCommandId.JuliaCodeChunk,\r\n [],\r\n 9,\r\n 'Julia',\r\n '{julia}\\n',\r\n () => ui.prefs.darkMode() ? ui.images.omni_insert!.code_block_dark : ui.images.omni_insert!.code_block!,\r\n OmniInsertGroup.Common\r\n );\r\n }\r\n}\r\n\r\nclass BashChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(ui, options, EditorCommandId.BashCodeChunk, [], 7, 'Bash', '{bash}\\n', () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert!.bash_chunk_dark! : ui.images.omni_insert!.bash_chunk!,\r\n );\r\n }\r\n}\r\n\r\nclass RcppChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(ui, options, EditorCommandId.RcppCodeChunk, [], 6, 'Rcpp', '{Rcpp}\\n', () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert!.rcpp_chunk_dark! : ui.images.omni_insert!.rcpp_chunk!,\r\n );\r\n }\r\n}\r\n\r\nclass SQLChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui,\r\n options,\r\n EditorCommandId.SQLCodeChunk,\r\n [],\r\n 5,\r\n 'SQL',\r\n '{sql connection=}\\n',\r\n () => ui.images.omni_insert!.sql_chunk!,\r\n OmniInsertGroup.Chunks\r\n );\r\n }\r\n}\r\n\r\nclass D3ChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(ui, options, EditorCommandId.D3CodeChunk, [], 4, 'D3', '{d3 data=}\\n', () => ui.images.omni_insert!.d3_chunk!, OmniInsertGroup.Chunks);\r\n }\r\n}\r\n\r\nclass MermaidChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui,\r\n options,\r\n EditorCommandId.MermaidCodeChunk,\r\n [],\r\n 7,\r\n 'Mermaid',\r\n '{mermaid}\\n',\r\n () => ui.prefs.darkMode() ? ui.images.omni_insert!.code_block_dark : ui.images.omni_insert!.code_block!,\r\n OmniInsertGroup.Chunks,\r\n [\"diagram\"]\r\n );\r\n }\r\n}\r\n\r\nclass GraphVizChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui,\r\n options,\r\n EditorCommandId.GraphVizCodeChunk,\r\n [],\r\n 7,\r\n 'GraphViz',\r\n '{dot}\\n',\r\n () => ui.prefs.darkMode() ? ui.images.omni_insert!.code_block_dark : ui.images.omni_insert!.code_block!,\r\n OmniInsertGroup.Chunks,\r\n [\"diagram\", \"dot\"]\r\n );\r\n }\r\n}\r\n\r\nclass StanChunkCommand extends RmdChunkCommand {\r\n constructor(ui: EditorUI, options: EditorOptions) {\r\n super(\r\n ui,\r\n options,\r\n EditorCommandId.StanCodeChunk,\r\n [],\r\n 7,\r\n 'Stan',\r\n '{stan output.var=}\\n',\r\n () => ui.images.omni_insert!.stan_chunk!,\r\n OmniInsertGroup.Chunks\r\n );\r\n }\r\n}\r\n\r\nclass ChunkExpansionCommand extends ProsemirrorCommand {\r\n constructor(\r\n chunks: EditorUIChunks,\r\n id: EditorCommandId,\r\n keymap: string[],\r\n expand: boolean\r\n ) {\r\n super(id, keymap, (_state: EditorState, dispatch?: (tr: Transaction) => void) => \r\n {\r\n if (dispatch) {\r\n chunks.setChunksExpanded(expand);\r\n }\r\n return true;\r\n });\r\n }\r\n}\r\n\r\nclass ExpandAllChunksCommand extends ChunkExpansionCommand {\r\n constructor(chunks: EditorUIChunks) {\r\n super(chunks, EditorCommandId.ExpandAllChunks, [], true);\r\n }\r\n}\r\n\r\nclass CollapseAllChunksCommand extends ChunkExpansionCommand {\r\n constructor(chunks: EditorUIChunks,) {\r\n super(chunks, EditorCommandId.CollapseAllChunks, [], false);\r\n }\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * line_block.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema, DOMOutputSpec } from 'prosemirror-model';\r\n\r\nimport { ExtensionContext } from '../api/extension';\r\nimport { PandocOutput, PandocTokenType, PandocToken, kWriteSpaces } from '../api/pandoc';\r\n\r\nimport { EditorCommandId, WrapCommand } from '../api/command';\r\nimport { OmniInsertGroup } from '../api/omni_insert';\r\n\r\nimport './line_block-styles.css';\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n if (!pandocExtensions.line_blocks) {\r\n return null;\r\n }\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'line_block',\r\n spec: {\r\n content: 'paragraph+',\r\n group: 'block',\r\n defining: true,\r\n parseDOM: [\r\n {\r\n tag: \"div[class*='line-block']\",\r\n },\r\n ],\r\n toDOM(): DOMOutputSpec {\r\n return ['div', { class: 'line-block pm-line-block pm-block-border-color pm-margin-bordered' }, 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.LineBlock,\r\n block: 'line_block',\r\n getChildren: (tok: PandocToken) => {\r\n return tok.c.map((line: PandocToken[]) => ({ t: PandocTokenType.Para, c: line }));\r\n },\r\n },\r\n ],\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.withOption(kWriteSpaces, false, () => {\r\n output.writeToken(PandocTokenType.LineBlock, () => {\r\n node.forEach(line => {\r\n output.writeArray(() => {\r\n output.writeInlines(line.content);\r\n });\r\n });\r\n });\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n commands: (schema: Schema) => {\r\n return [\r\n new WrapCommand(\r\n EditorCommandId.LineBlock,\r\n [],\r\n schema.nodes.line_block,\r\n {},\r\n {\r\n name: ui.context.translateText('Line Block'),\r\n description: ui.context.translateText('Preserve leading spaces and line breaks'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 2,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.line_block_dark : ui.images.omni_insert.line_block,\r\n },\r\n ),\r\n ];\r\n },\r\n };\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * table-commands.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport { findParentNodeOfType, setTextSelection, findChildrenByType } from 'prosemirror-utils';\r\nimport {\r\n isInTable,\r\n Rect,\r\n TableMap,\r\n selectionCell,\r\n CellSelection,\r\n toggleHeader,\r\n addRow,\r\n addColumn,\r\n} from 'prosemirror-tables';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { canInsertNode } from '../../api/node';\r\nimport { TableCapabilities } from '../../api/table';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nexport function insertTable(capabilities: TableCapabilities, ui: EditorUI) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n const schema = state.schema;\r\n\r\n // can we insert?\r\n if (!canInsertNode(state, schema.nodes.table_container)) {\r\n return false;\r\n }\r\n\r\n // is the selection inside a table caption? if it is then we can't insert\r\n // as it will \"split\" the table_container in such a way that an invalid\r\n // table will be created\r\n if (findParentNodeOfType(schema.nodes.table_caption)(state.selection)) {\r\n return false;\r\n }\r\n\r\n async function asyncInsertTable() {\r\n if (dispatch) {\r\n const result = await ui.dialogs.insertTable(capabilities);\r\n if (result) {\r\n // create cells\r\n const numRows = result.rows + (result.header ? 1 : 0);\r\n const rows: ProsemirrorNode[] = [];\r\n for (let r = 0; r < numRows; r++) {\r\n const cells: ProsemirrorNode[] = [];\r\n const cellType = r === 0 && result.header ? schema.nodes.table_header : schema.nodes.table_cell;\r\n for (let c = 0; c < result.cols; c++) {\r\n const content =\r\n cellType === schema.nodes.table_header\r\n ? schema.text(`${ui.context.translateText('Col')}${c + 1}`)\r\n : Fragment.empty;\r\n cells.push(cellType.createAndFill({}, schema.nodes.paragraph.createAndFill({}, content)!)!);\r\n }\r\n rows.push(schema.nodes.table_row.createAndFill({}, cells)!);\r\n }\r\n\r\n // create table\r\n const table = schema.nodes.table.createAndFill({}, rows)!;\r\n const tableCaption = schema.nodes.table_caption.createAndFill(\r\n { inactive: !result.caption },\r\n result.caption ? schema.text(result.caption) : undefined,\r\n )!;\r\n const tableContainer = schema.nodes.table_container.createAndFill({}, [table, tableCaption])!;\r\n\r\n // insert\r\n const tr = state.tr;\r\n tr.replaceSelectionWith(tableContainer);\r\n\r\n // select first cell\r\n const selectionPos = tr.mapping.map(state.selection.from, -1);\r\n setTextSelection(selectionPos)(tr).scrollIntoView();\r\n\r\n // dispatch & focus\r\n dispatch(tr);\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncInsertTable();\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function insertTableOmniInsert(ui: EditorUI) {\r\n return {\r\n name: ui.context.translateText('Table'),\r\n description: ui.context.translateText('Content in rows and columns'),\r\n group: OmniInsertGroup.Lists,\r\n priority: 1,\r\n noFocus: true,\r\n image: () => (ui.prefs.darkMode() ? ui.images.omni_insert.table_dark : ui.images.omni_insert.table),\r\n };\r\n}\r\n\r\nexport function deleteTable() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const schema = state.schema;\r\n const container = findParentNodeOfType(schema.nodes.table_container)(state.selection);\r\n if (container) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.delete(container.pos, container.pos + container.node.nodeSize);\r\n dispatch(tr.scrollIntoView());\r\n }\r\n return true;\r\n }\r\n return false;\r\n };\r\n}\r\n\r\nexport function deleteTableCaption() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // must be a selection within an empty table caption\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n if ($head.parent.type !== schema.nodes.table_caption || $head.parent.childCount !== 0) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n // set the caption to inactive\r\n const tr = state.tr;\r\n const caption = $head.parent;\r\n tr.setNodeMarkup($head.pos - 1, schema.nodes.table_caption, {\r\n ...caption.attrs,\r\n inactive: true,\r\n });\r\n setTextSelection($head.pos - 1, -1)(tr);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function addColumns(after: boolean) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n let tr = state.tr;\r\n const rect = selectedRect(state);\r\n const columns = rect.right - rect.left;\r\n for (let i = 0; i < columns; i++) {\r\n tr = addColumn(tr, rect, after ? rect.right : rect.left);\r\n }\r\n dispatch(tr);\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport function addRows(after: boolean) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n // add the rows\r\n let tr = state.tr;\r\n const rect = selectedRect(state);\r\n const rows = rect.bottom - rect.top;\r\n for (let i = 0; i < rows; i++) {\r\n tr = addRow(tr, rect, after ? rect.bottom : rect.top);\r\n }\r\n\r\n // sync column alignments for table\r\n const table = findParentNodeOfType(state.schema.nodes.table)(tr.selection);\r\n if (table) {\r\n const alignments = new Array<CssAlignment | null>(rect.map.width);\r\n table.node.forEach((rowNode, rowOffset, rowIndex) => {\r\n rowNode.forEach((cellNode, cellOffset, colIndex) => {\r\n const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset;\r\n if (rowIndex === 0) {\r\n const cell = tr.doc.nodeAt(cellPos);\r\n alignments[colIndex] = cell?.attrs.align || null;\r\n } else {\r\n tr.setNodeMarkup(cellPos, cellNode.type, {\r\n ...cellNode.attrs,\r\n align: alignments[colIndex] || null,\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n return true;\r\n };\r\n}\r\n\r\nexport class TableToggleHeaderCommand extends ProsemirrorCommand {\r\n constructor() {\r\n super(EditorCommandId.TableToggleHeader, [], toggleHeader('row'));\r\n }\r\n\r\n public isActive(state: EditorState): boolean {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n const { table } = selectedRect(state);\r\n const firstCell = table.firstChild!.firstChild!;\r\n return firstCell.type === state.schema.nodes.table_header;\r\n }\r\n}\r\n\r\nexport class TableToggleCaptionCommand extends ProsemirrorCommand {\r\n constructor() {\r\n super(\r\n EditorCommandId.TableToggleCaption,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction, view?: EditorView) => void) => {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n const caption = this.tableCaptionNode(state);\r\n if (!caption) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const focus = caption.node.attrs.inactive;\r\n const tr = state.tr;\r\n tr.setNodeMarkup(caption.pos + 1, state.schema.nodes.table_caption, {\r\n ...caption.node.attrs,\r\n inactive: !caption.node.attrs.inactive,\r\n });\r\n if (focus) {\r\n setTextSelection(caption.pos + 1)(tr).scrollIntoView();\r\n }\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n },\r\n );\r\n }\r\n\r\n public isActive(state: EditorState): boolean {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n\r\n const caption = this.tableCaptionNode(state);\r\n if (!caption) {\r\n return false;\r\n }\r\n\r\n return !caption.node.attrs.inactive;\r\n }\r\n\r\n private tableCaptionNode(state: EditorState) {\r\n const container = findParentNodeOfType(state.schema.nodes.table_container)(state.selection);\r\n if (container) {\r\n const caption = findChildrenByType(container.node, state.schema.nodes.table_caption);\r\n return {\r\n node: caption[0].node,\r\n pos: container.pos + caption[0].pos,\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport enum CssAlignment {\r\n Left = 'left',\r\n Right = 'right',\r\n Center = 'center',\r\n}\r\n\r\nexport class TableRowCommand extends ProsemirrorCommand {\r\n public plural(state: EditorState) {\r\n if (!isInTable(state)) {\r\n return 1;\r\n }\r\n\r\n const rect = selectedRect(state);\r\n return rect.bottom - rect.top;\r\n }\r\n}\r\n\r\nexport class TableColumnCommand extends ProsemirrorCommand {\r\n public plural(state: EditorState) {\r\n if (!isInTable(state)) {\r\n return 1;\r\n }\r\n\r\n const rect = selectedRect(state);\r\n return rect.right - rect.left;\r\n }\r\n}\r\n\r\nexport class TableColumnAlignmentCommand extends ProsemirrorCommand {\r\n private readonly align: CssAlignment | null;\r\n\r\n constructor(id: EditorCommandId, align: CssAlignment | null) {\r\n super(id, [], (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const { table, tableStart, left, right } = selectedRect(state);\r\n const tr = state.tr;\r\n table.forEach((rowNode, rowOffset) => {\r\n rowNode.forEach((cellNode, cellOffset, i) => {\r\n if (i >= left && i < right) {\r\n const cellPos = tableStart + 1 + rowOffset + cellOffset;\r\n tr.setNodeMarkup(cellPos, cellNode.type, {\r\n ...cellNode.attrs,\r\n align,\r\n });\r\n }\r\n });\r\n });\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n });\r\n this.align = align;\r\n }\r\n\r\n public isActive(state: EditorState): boolean {\r\n if (!isInTable(state)) {\r\n return false;\r\n }\r\n const { table, top, left } = selectedRect(state);\r\n const cell = table.child(top).child(left);\r\n return cell.attrs.align === this.align;\r\n }\r\n}\r\n\r\n// from: https://github.com/ProseMirror/prosemirror-tables/blob/master/src/commands.js\r\n\r\ninterface SelectedRect extends Rect {\r\n tableStart: number;\r\n map: TableMap;\r\n table: ProsemirrorNode;\r\n}\r\n\r\nfunction selectedRect(state: EditorState): SelectedRect {\r\n const sel = state.selection;\r\n const $pos = selectionCell(state)!;\r\n const table = $pos.node(-1);\r\n const tableStart = $pos.start(-1);\r\n const map = TableMap.get(table);\r\n let rect: Rect;\r\n if (sel instanceof CellSelection) {\r\n rect = map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart);\r\n } else {\r\n rect = map.findCell($pos.pos - tableStart);\r\n }\r\n return {\r\n ...rect,\r\n tableStart,\r\n map,\r\n table,\r\n };\r\n}\r\n","/*\r\n * table-columns.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { findChildrenByType } from 'prosemirror-utils';\r\n\r\nimport { PandocTokenType } from '../../api/pandoc';\r\n\r\nimport { CssAlignment } from './table-commands';\r\n\r\nexport function tableColumnAlignments(node: ProsemirrorNode) {\r\n // get the first row (schema requires at least 1 row)\r\n const firstRow = node.firstChild!;\r\n\r\n // determine # of columns\r\n const cols = firstRow.childCount;\r\n\r\n // return alignments\r\n const alignments = new Array<PandocTokenType>(cols);\r\n for (let i = 0; i < cols; i++) {\r\n const cell = firstRow.child(i);\r\n const align: CssAlignment = cell.attrs.align;\r\n switch (align) {\r\n case CssAlignment.Left:\r\n alignments[i] = PandocTokenType.AlignLeft;\r\n break;\r\n case CssAlignment.Right:\r\n alignments[i] = PandocTokenType.AlignRight;\r\n break;\r\n case CssAlignment.Center:\r\n alignments[i] = PandocTokenType.AlignCenter;\r\n break;\r\n case null:\r\n default:\r\n alignments[i] = PandocTokenType.AlignDefault;\r\n break;\r\n }\r\n }\r\n return alignments;\r\n}\r\n\r\nexport function tableColumnWidths(node: ProsemirrorNode) {\r\n // get the first row (schema requires at least 1 row)\r\n const firstRow = node.firstChild!;\r\n\r\n // determine # of columns\r\n const cols = firstRow.childCount;\r\n\r\n // width percentages\r\n let widths = new Array<number>(cols).fill(0);\r\n\r\n // take note of explicitly sized columns\r\n const totalWidth = node.attrs.width;\r\n let availableWidth = totalWidth;\r\n let colsWithWidth = 0;\r\n for (let i = 0; i < cols; i++) {\r\n const col = firstRow.child(i);\r\n if (col.attrs.colwidth && col.attrs.colwidth[0]) {\r\n widths[i] = col.attrs.colwidth[0];\r\n colsWithWidth++;\r\n availableWidth -= widths[i];\r\n }\r\n }\r\n\r\n // allocate remaining widths if we have at least 1 sized columns (otherwise\r\n // we leave all of the widths at 0 which results in no sizing)\r\n if (colsWithWidth > 0) {\r\n if (availableWidth > 0) {\r\n const defaultWidth = availableWidth / (cols - colsWithWidth);\r\n for (let i = 0; i < cols; i++) {\r\n const col = firstRow.child(i);\r\n if (!col.attrs.colwidth || !col.attrs.colwidth[0]) {\r\n widths[i] = defaultWidth;\r\n }\r\n }\r\n }\r\n\r\n // convert widths to percentages\r\n widths = widths.map(width => width / totalWidth);\r\n }\r\n\r\n return widths;\r\n}\r\n\r\nexport function fixupTableWidths(view: EditorView) {\r\n return (tr: Transaction) => {\r\n const schema = tr.doc.type.schema;\r\n\r\n // don't do fixup if we aren't connected to the DOM\r\n if (!view.dom || !view.dom.isConnected) {\r\n return tr;\r\n }\r\n\r\n const tables = findChildrenByType(tr.doc, schema.nodes.table);\r\n for (const table of tables) {\r\n // get table width\r\n const el = view.domAtPos(table.pos).node as HTMLElement;\r\n const containerWidth = table.node.attrs.width || el.clientWidth;\r\n if (containerWidth === 0) {\r\n continue;\r\n }\r\n\r\n // resolve colpercents (read by tokenzier)\r\n let colpercents: number[] = table.node.attrs.colpercents;\r\n\r\n if (colpercents) {\r\n\r\n // enforce a minimum column width of 25% (otherwise hard to edit)\r\n // note some of this will get taken back when we adjust all columns\r\n // for the extra bonus given to small columns\r\n const kMinPercent = 0.25;\r\n const totalPercent = colpercents.reduce((total: number, pct: number) => {\r\n return total + pct;\r\n }, 0);\r\n colpercents = colpercents.map(pct => Math.max(pct, kMinPercent));\r\n const adjustedPercent = colpercents.reduce((total: number, pct: number) => {\r\n return total + pct;\r\n }, 0);\r\n const extraPercent = adjustedPercent - totalPercent;\r\n colpercents = colpercents.map(pct => pct - (extraPercent/colpercents.length));\r\n const colWidths = colpercents.map(pct => Math.floor(pct * containerWidth));\r\n\r\n // for each row\r\n table.node.forEach((rowNode, rowOffset) => {\r\n // for each cell\r\n rowNode.forEach((cellNode, cellOffset, c) => {\r\n const cellPos = table.pos + 1 + rowOffset + 1 + cellOffset;\r\n const colWidth = [colWidths[c]];\r\n if (colWidth !== cellNode.attrs.colwidth) {\r\n tr.setNodeMarkup(cellPos, cellNode.type, {\r\n ...cellNode.attrs,\r\n colwidth: colWidth,\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (containerWidth !== table.node.attrs.width || colpercents) {\r\n tr.setNodeMarkup(table.pos, schema.nodes.table, {\r\n ...table.node.attrs,\r\n width: containerWidth,\r\n colpercents: null,\r\n });\r\n }\r\n }\r\n return tr;\r\n };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/*\r\n * table-pandoc.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, NodeType, Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\r\n\r\nimport { ProsemirrorWriter, PandocToken, PandocTokenType, PandocOutput } from '../../api/pandoc';\r\n\r\nimport { CssAlignment } from './table-commands';\r\nimport { tableColumnAlignments, tableColumnWidths } from './table-columns';\r\n\r\n// attributes\r\n// const kTableAttr = 0;\r\n\r\n// caption\r\nconst kTableCaption = 1;\r\n// const kTableCaptionShort = 0; // [Inline]\r\nconst kTableCaptionFull = 1; // [Block]\r\n\r\n// columdefs\r\nconst kTableColSpec = 2;\r\nconst kTableColSpecAlign = 0;\r\nconst kTableColSpecWidth = 1;\r\n\r\n// table head\r\nconst kTableHead = 3;\r\n// const kTableHeadAttr = 0;\r\nconst kTableHeadRows = 1; // [Row]\r\n\r\n// table body\r\nconst kTableBody = 4;\r\n// const kTableBodyAttr = 0;\r\n// const kTableBodyRowHeadNumColumns = 1;\r\n// const kTableBodyRowHead = 2;\r\nconst kTableBodyRows = 3; // [Row]\r\n\r\n// table foot\r\n// const kTableFoot = 5;\r\n// const kTableFootAttr = 0;\r\n// const kTableFootRows = 1; // [Row]\r\n\r\n// table row\r\n// const kTableRowAttr = 0;\r\nconst kTableRowCells = 1; // [Cell]\r\n\r\n// table cell\r\n// const kTableCellAttr = 0;\r\n// const kTableCellAlignments = 1;\r\n// const kTableCellRowSpan = 2;\r\n// const kTableCellColSpan = 3;\r\nconst KTableCellContents = 4; // [Block]\r\n\r\n\r\nexport function readPandocTable(schema: Schema) {\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n // get alignments and columns widths\r\n const alignments = columnCssAlignments(tok);\r\n const colpercents = columnPercents(tok);\r\n\r\n // helper function to parse a table row\r\n const parseRow = (row: any[], cellType: NodeType) => {\r\n const cells: any[] = row[kTableRowCells];\r\n if (cells.length) {\r\n writer.openNode(schema.nodes.table_row, {});\r\n cells.forEach((cell: any[], i) => {\r\n writer.openNode(cellType, { align: alignments[i] });\r\n writer.writeTokens(cell[KTableCellContents]);\r\n writer.closeNode();\r\n });\r\n writer.closeNode();\r\n }\r\n };\r\n\r\n // open table container node\r\n writer.openNode(schema.nodes.table_container, {});\r\n\r\n // open table node\r\n writer.openNode(schema.nodes.table, { colpercents });\r\n\r\n // parse column headers\r\n const head = tok.c[kTableHead] as any[];\r\n const firstRow = head[kTableHeadRows][0];\r\n if (firstRow && firstRow[kTableRowCells].some((cell: any[]) => cell[KTableCellContents].length > 0)) {\r\n parseRow(firstRow, schema.nodes.table_header);\r\n }\r\n\r\n // parse table rows\r\n const body = tok.c[kTableBody][0] as any[];\r\n body[kTableBodyRows].forEach((row: any[]) => {\r\n parseRow(row, schema.nodes.table_cell);\r\n });\r\n\r\n // close table node\r\n writer.closeNode();\r\n\r\n // read caption\r\n const caption = tok.c[kTableCaption][kTableCaptionFull];\r\n const captionBlock: PandocToken[] = caption.length ? caption[0].c : [];\r\n writer.openNode(schema.nodes.table_caption, { inactive: captionBlock.length === 0 });\r\n writer.writeTokens(captionBlock);\r\n writer.closeNode();\r\n\r\n // close table container node\r\n writer.closeNode();\r\n };\r\n}\r\n\r\nexport function writePandocTableContainer(output: PandocOutput, node: ProsemirrorNode) {\r\n const caption = node.lastChild!;\r\n const table = node.firstChild!;\r\n\r\n output.writeToken(PandocTokenType.Table, () => {\r\n\r\n // write empty attributes\r\n output.writeAttr();\r\n\r\n // write caption\r\n output.writeNode(caption);\r\n\r\n // write table\r\n output.writeNode(table);\r\n });\r\n}\r\n\r\nexport function writePandocTable(output: PandocOutput, node: ProsemirrorNode) {\r\n const firstRow = node.firstChild!;\r\n\r\n // get alignments and column widths\r\n const alignments = tableColumnAlignments(node);\r\n const widths = tableColumnWidths(node);\r\n\r\n // write colspcs\r\n // TODO: Columns are coming out ColWidthDefault\r\n output.writeArray(() => {\r\n alignments.forEach((align, i) => {\r\n output.writeArray(() => {\r\n output.writeToken(align);\r\n if (widths[i] === 0) {\r\n output.writeToken(PandocTokenType.ColWidthDefault);\r\n } else {\r\n output.writeToken(PandocTokenType.ColWidth, widths[i]);\r\n }\r\n });\r\n });\r\n });\r\n\r\n\r\n // write header row if necessary\r\n const headerCut = firstRow.firstChild!.type === node.type.schema.nodes.table_header ? 1 : 0;\r\n output.writeArray(() => {\r\n output.writeAttr();\r\n output.writeArray(() => {\r\n writePandocTableRow(output, firstRow, headerCut === 0);\r\n });\r\n });\r\n\r\n // write table body\r\n output.writeArray(() => {\r\n output.writeArray(() => {\r\n output.writeAttr();\r\n output.write(0);\r\n output.writeArray(() => { /* */ });\r\n // write rows\r\n output.writeArray(() => {\r\n for (let i = headerCut; i < node.childCount; i++) {\r\n writePandocTableRow(output, node.content.child(i));\r\n }\r\n });\r\n });\r\n });\r\n\r\n // write table footer\r\n output.writeArray(() => {\r\n output.writeAttr();\r\n output.writeArray(() => { /* */ });\r\n });\r\n\r\n\r\n}\r\n\r\nexport function writePandocTableCaption(output: PandocOutput, node: ProsemirrorNode) {\r\n output.writeArray(() => {\r\n output.write(null);\r\n output.writeArray(() => {\r\n if (!node.attrs.inactive && node.childCount > 0) {\r\n output.writeToken(PandocTokenType.Plain, () => {\r\n output.writeInlines(node.content);\r\n });\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function writePandocTableNodes(output: PandocOutput, node: ProsemirrorNode) {\r\n output.writeArray(() => {\r\n output.writeNodes(node);\r\n });\r\n}\r\n\r\nexport function writePandocTableHeaderNodes(output: PandocOutput, node: ProsemirrorNode) {\r\n output.writeArray(() => {\r\n if (node.textContent.length > 0) {\r\n output.writeNodes(node);\r\n } else {\r\n // write a paragraph containing a space (this is an attempt to fix an issue where\r\n // empty headers don't get correct round-tripping)\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeRawMarkdown(' ');\r\n });\r\n }\r\n });\r\n}\r\n\r\nfunction writePandocTableRow(output: PandocOutput, node: ProsemirrorNode, empty = false) {\r\n output.writeArray(() => {\r\n output.writeAttr();\r\n output.writeArray(() => {\r\n node.forEach((cellNode) => {\r\n output.writeArray(() => {\r\n output.writeAttr();\r\n output.writeToken(PandocTokenType.AlignDefault);\r\n output.write(1);\r\n output.write(1);\r\n if (!empty) {\r\n output.writeNode(cellNode);\r\n } else {\r\n output.writeArray(() => {\r\n output.writeInlines(Fragment.empty);\r\n });\r\n }\r\n });\r\n });\r\n });\r\n });\r\n}\r\n\r\n\r\nfunction columnCssAlignments(tableToken: PandocToken) {\r\n return tableToken.c[kTableColSpec].map((spec: any) => {\r\n const alignment = spec[kTableColSpecAlign];\r\n switch (alignment.t) {\r\n case PandocTokenType.AlignLeft:\r\n return CssAlignment.Left;\r\n case PandocTokenType.AlignRight:\r\n return CssAlignment.Right;\r\n case PandocTokenType.AlignCenter:\r\n return CssAlignment.Center;\r\n case PandocTokenType.AlignDefault:\r\n default:\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nfunction columnPercents(tableToken: PandocToken): number[] {\r\n return tableToken.c[kTableColSpec].map((spec: any) => {\r\n const width = spec[kTableColSpecWidth];\r\n return width.t === PandocTokenType.ColWidth ? width.c : 0;\r\n });\r\n}\r\n","/*\r\n * table-capsule.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, DOMParser } from 'prosemirror-model';\r\n\r\nimport {\r\n PandocBlockCapsuleFilter,\r\n PandocBlockCapsule,\r\n blockCapsuleParagraphTokenHandler,\r\n encodedBlockCapsuleRegex,\r\n blockCapsuleTextHandler,\r\n blockCapsuleSourceWithoutPrefix,\r\n parsePandocBlockCapsule,\r\n} from '../../api/pandoc_capsule';\r\nimport { ProsemirrorWriter, PandocToken, PandocTokenType } from '../../api/pandoc';\r\nimport { kHTMLFormat } from '../../api/raw';\r\n\r\nexport function tableBlockCapsuleFilter(): PandocBlockCapsuleFilter {\r\n const kTableBlockCapsuleType = '8EF5A772-DD63-4622-84BF-AF1995A1B2B9'.toLowerCase();\r\n const pagraphTokenCapsuleHandler = blockCapsuleParagraphTokenHandler(kTableBlockCapsuleType);\r\n const tokenRegex = encodedBlockCapsuleRegex('^', '$');\r\n\r\n return {\r\n type: kTableBlockCapsuleType,\r\n\r\n match: /^([\\t >]*)(<table[\\W\\w]*?<\\/table>)([ \\t]*)$/gm,\r\n\r\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\r\n // (in this case we don't do anything because pandoc would have written this table as a\r\n // semantically standalone block)\r\n enclose: (capsuleText: string) => {\r\n return capsuleText;\r\n },\r\n\r\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\r\n // and if we find it, parse and return the original source code\r\n handleText: blockCapsuleTextHandler(kTableBlockCapsuleType, encodedBlockCapsuleRegex(undefined, undefined, 'gm')),\r\n\r\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\r\n // if find that then return the block capsule text\r\n handleToken: (tok: PandocToken) => {\r\n // first check for a paragraph\r\n const capsuleText = pagraphTokenCapsuleHandler(tok);\r\n if (capsuleText) {\r\n return capsuleText;\r\n }\r\n\r\n // now look for a definition list (which is what a table with a caption parses as)\r\n if (tok.t === PandocTokenType.DefinitionList) {\r\n if (tok.c.length === 1) {\r\n const definition = tok.c[0];\r\n if (definition[0][0].t === PandocTokenType.Str) {\r\n const term = definition[0][0].c as string;\r\n const match = term.match(tokenRegex);\r\n if (match) {\r\n const capsuleRecord = parsePandocBlockCapsule(term);\r\n if (capsuleRecord.type === kTableBlockCapsuleType) {\r\n return term;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n },\r\n\r\n // write the node as a table (parse the html)\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\r\n // remove the source prefix\r\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\r\n\r\n // fallback to write as raw html\r\n const writeAsRawHTML = () => {\r\n writer.openNode(schema.nodes.raw_block, { format: kHTMLFormat });\r\n writer.writeText(source);\r\n writer.closeNode();\r\n };\r\n\r\n // parse the table from the string\r\n const parser = new window.DOMParser();\r\n const doc = parser.parseFromString(capsule.source, 'text/html');\r\n if (doc.body && doc.body.firstChild instanceof HTMLTableElement) {\r\n // get prosemirror dom parser\r\n const prosemirrorDomParser = DOMParser.fromSchema(schema);\r\n\r\n // get unparsed (by prosemirror) table\r\n const unparsedTable = doc.body.firstChild;\r\n\r\n // ensure that table cells all have content\r\n const ensureCellContent = (tag: string) => {\r\n const cells = unparsedTable.getElementsByTagName(tag);\r\n for (let i = 0; i < cells.length; i++) {\r\n const cell = cells.item(i)!;\r\n if (cell.children.length === 0) {\r\n cell.append(window.document.createElement('p'));\r\n }\r\n }\r\n };\r\n ensureCellContent('td');\r\n ensureCellContent('th');\r\n\r\n // extract caption element\r\n let captionElement: HTMLTableCaptionElement | null = null;\r\n const captionCollection = unparsedTable.getElementsByTagName('caption');\r\n if (captionCollection.length) {\r\n captionElement = captionCollection.item(0);\r\n if (captionElement) {\r\n captionElement.remove();\r\n }\r\n }\r\n\r\n // determine caption (either empty or parsed from element)\r\n let caption = schema.nodes.table_caption.create({ inactive: true });\r\n if (captionElement) {\r\n const captionSlice = prosemirrorDomParser.parseSlice(captionElement);\r\n caption = schema.nodes.table_caption.createAndFill({ inactive: false }, captionSlice.content)!;\r\n }\r\n\r\n // parse the prosemirror table element\r\n const slice = prosemirrorDomParser.parseSlice(doc.body);\r\n if (slice.content.firstChild && slice.content.firstChild.type === schema.nodes.table) {\r\n const table = slice.content.firstChild;\r\n writer.addNode(schema.nodes.table_container, {}, [table, caption]);\r\n } else {\r\n writeAsRawHTML();\r\n }\r\n\r\n // fallback to writing as raw_html (round-trip unmodified)\r\n } else {\r\n writeAsRawHTML();\r\n }\r\n },\r\n };\r\n}\r\n","/*\r\n * table-nodes.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { tableNodes } from 'prosemirror-tables';\r\nimport { Node as ProsemirrorNode, DOMOutputSpec } from 'prosemirror-model';\r\n\r\nimport { PandocTokenType } from '../../api/pandoc';\r\n\r\nimport {\r\n readPandocTable,\r\n writePandocTableContainer,\r\n writePandocTable,\r\n writePandocTableCaption,\r\n writePandocTableNodes,\r\n writePandocTableHeaderNodes,\r\n} from './table-pandoc';\r\nimport { tableColumnWidths } from './table-columns';\r\nimport { tableBlockCapsuleFilter } from './table-capsule';\r\n\r\nexport const kDefaultCellClasses = 'pm-table-cell pm-block-border-color';\r\n\r\nconst nodes = tableNodes({\r\n tableGroup: 'block',\r\n cellContent: 'block+',\r\n cellAttributes: {\r\n align: {\r\n default: null,\r\n getFromDOM(dom: Element) {\r\n return (dom as HTMLElement).style.textAlign || null;\r\n },\r\n setDOMAttr(value, attrs) {\r\n if (value) {\r\n attrs.style = (attrs.style || '') + `text-align: ${value};`;\r\n }\r\n },\r\n },\r\n className: {\r\n default: kDefaultCellClasses,\r\n getFromDOM(dom: Element) {\r\n return (dom as HTMLElement).className;\r\n },\r\n setDOMAttr(_value, attrs) {\r\n attrs.class = kDefaultCellClasses;\r\n },\r\n },\r\n },\r\n});\r\n\r\nexport const tableContainerNode = {\r\n name: 'table_container',\r\n spec: {\r\n content: 'table table_caption',\r\n group: 'block',\r\n parseDOM: [{ tag: \"div[class*='table-container']\" }],\r\n toDOM(): DOMOutputSpec {\r\n return ['div', { class: 'table-container pm-table-container' }, 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.Table,\r\n handler: readPandocTable,\r\n },\r\n ],\r\n writer: writePandocTableContainer,\r\n blockCapsuleFilter: tableBlockCapsuleFilter(),\r\n },\r\n};\r\n\r\nexport const tableNode = {\r\n name: 'table',\r\n spec: {\r\n ...nodes.table,\r\n attrs: {\r\n ...nodes.table.attrs,\r\n width: { default: null },\r\n colpercents: { default: null },\r\n },\r\n parseDOM: [\r\n {\r\n tag: 'table',\r\n getAttrs: (dom: Node | string) => {\r\n const el = dom as HTMLElement;\r\n\r\n // shared colpercents\r\n let colpercents: number[] | null = null;\r\n\r\n // if we have a colgroup w/ widths then read percents from there\r\n // <colgroup><col style=\"width: 44%\" /><col style=\"width: 11%\" /></colgroup>\r\n const colgroup = el.getElementsByTagName('colgroup');\r\n if (colgroup.length) {\r\n const cols = colgroup[0].childElementCount;\r\n colpercents = new Array<number>(cols).fill(0);\r\n for (let i = 0; i < cols; i++) {\r\n const col = colgroup[0].children.item(i) as HTMLElement;\r\n if (col.style.width) {\r\n colpercents[i] = (parseInt(col.style.width, 10) || 0) / 100;\r\n }\r\n }\r\n if (colpercents.every(value => !!value)) {\r\n return {\r\n colpercents,\r\n };\r\n }\r\n }\r\n\r\n // otherwise read from data-colwidth\r\n let width: number | null = null;\r\n const rows = el.getElementsByTagName('tr');\r\n if (rows.length) {\r\n const firstRow = rows.item(0)!;\r\n const numCells = firstRow.cells.length;\r\n const colWidths = new Array<number>(numCells).fill(0);\r\n for (let i = 0; i < numCells; i++) {\r\n const cell = firstRow.cells.item(i)!;\r\n const colWidth = cell.getAttribute('data-colwidth');\r\n if (colWidth) {\r\n colWidths[i] = Number(colWidth);\r\n }\r\n }\r\n if (colWidths.every(colWidth => colWidth > 0)) {\r\n width = colWidths.reduce((total, value) => total + value, 0);\r\n colpercents = colWidths.map(colWidth => colWidth / width!);\r\n }\r\n }\r\n\r\n return {\r\n width,\r\n colpercents,\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\r\n const attrs: Record<string,unknown> = {};\r\n if (node.attrs.width) {\r\n attrs['data-width'] = node.attrs.width.toString();\r\n }\r\n attrs['data-colpercents'] = tableColumnWidths(node).join(',');\r\n return ['table', attrs, ['tbody', 0]];\r\n },\r\n },\r\n pandoc: {\r\n writer: writePandocTable,\r\n },\r\n};\r\n\r\nexport const tableCaptionNode = {\r\n name: 'table_caption',\r\n spec: {\r\n attrs: {\r\n inactive: { default: false },\r\n },\r\n content: 'inline*',\r\n parseDOM: [\r\n {\r\n tag: \"p[class*='table-caption']\",\r\n getAttrs(dom: Node | string) {\r\n return {\r\n inactive: (dom as HTMLElement).classList.contains('table-caption-inactive'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode): DOMOutputSpec {\r\n const classes = ['table-caption', 'pm-node-caption'];\r\n if (node.attrs.inactive) {\r\n classes.push('table-caption-inactive');\r\n }\r\n return ['p', { class: classes.join(' ') }, 0];\r\n },\r\n },\r\n pandoc: {\r\n writer: writePandocTableCaption,\r\n },\r\n};\r\n\r\nexport const tableRowNode = {\r\n name: 'table_row',\r\n spec: nodes.table_row,\r\n pandoc: {\r\n writer: writePandocTableNodes,\r\n },\r\n};\r\n\r\nexport const tableCellNode = (blocks: boolean) => ({\r\n name: 'table_cell',\r\n spec: {\r\n ...nodes.table_cell,\r\n content: blocks ? 'block+' : 'paragraph',\r\n },\r\n pandoc: {\r\n writer: writePandocTableNodes,\r\n },\r\n});\r\n\r\nexport const tableHeaderNode = {\r\n name: 'table_header',\r\n spec: nodes.table_header,\r\n pandoc: {\r\n writer: writePandocTableHeaderNodes,\r\n },\r\n};\r\n","/*\r\n * table-contextmenu.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { ResolvedPos } from 'prosemirror-model';\r\nimport { isInTable } from 'prosemirror-tables';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { EditorCommandId } from '../../api/command';\r\nimport { findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\r\nimport { ContextMenuSource } from '../../api/menu';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\n\r\nexport function tableContextMenuHandler(ui: EditorUI) {\r\n \r\n return (view: EditorView, $pos: ResolvedPos) : (ContextMenuSource | null) => {\r\n\r\n if (!findParentNodeOfTypeClosestToPos($pos, view.state.schema.nodes.table)) {\r\n return null;\r\n }\r\n\r\n const items = [\r\n { command: EditorCommandId.TableAddRowBefore },\r\n { command: EditorCommandId.TableAddRowAfter },\r\n { separator: true },\r\n { command: EditorCommandId.TableAddColumnBefore },\r\n { command: EditorCommandId.TableAddColumnAfter },\r\n { separator: true },\r\n { command: EditorCommandId.TableDeleteRow },\r\n { command: EditorCommandId.TableDeleteColumn },\r\n { separator: true },\r\n { command: EditorCommandId.TableDeleteTable },\r\n { separator: true },\r\n {\r\n text: ui.context.translateText('Align Column'),\r\n subMenu: {\r\n items: [\r\n { command: EditorCommandId.TableAlignColumnLeft },\r\n { command: EditorCommandId.TableAlignColumnCenter },\r\n { command: EditorCommandId.TableAlignColumnRight },\r\n { separator: true },\r\n { command: EditorCommandId.TableAlignColumnDefault },\r\n ],\r\n },\r\n },\r\n { separator: true },\r\n { command: EditorCommandId.TableToggleHeader },\r\n { command: EditorCommandId.TableToggleCaption },\r\n ];\r\n\r\n return { items: async () => items, preventSelectionChange: isInTable };\r\n };\r\n \r\n}\r\n","/*\r\n * table-paste.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Plugin, PluginKey, Transaction, EditorState } from 'prosemirror-state';\r\nimport { Slice, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\n\r\nimport { sliceHasNode } from '../../api/slice';\r\n\r\nimport { fixupTableWidths } from './table-columns';\r\nimport { forChangedNodes } from '../../api/transaction';\r\n\r\nimport { kDefaultCellClasses } from './table-nodes';\r\n\r\nexport function tablePaste() {\r\n return new Plugin({\r\n key: new PluginKey('table-paste'),\r\n props: {\r\n handlePaste: (view: EditorView, _event: Event, slice: Slice) => {\r\n // if the slice contains a table then we handle it\r\n if (sliceHasNode(slice, node => node.type === node.type.schema.nodes.table)) {\r\n // based on https://github.com/ProseMirror/prosemirror-view/blob/fb799aae4e9dd5cfc256708a6845d76aaaf145bf/src/input.js#L503-L510\r\n const tr = view.state.tr.replaceSelection(slice);\r\n view.dispatch(\r\n tr\r\n .scrollIntoView()\r\n .setMeta('paste', true)\r\n .setMeta('tablePaste', true)\r\n .setMeta('uiEvent', 'paste'),\r\n );\r\n view.dispatch(fixupTableWidths(view)(view.state.tr));\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n },\r\n appendTransaction: (transactions: readonly Transaction[], oldState: EditorState, newState: EditorState) => {\r\n // alias schema\r\n const schema = newState.schema;\r\n\r\n // only process table paste transactions\r\n if (!transactions.some(transaction => transaction.getMeta('tablePaste'))) {\r\n return null;\r\n }\r\n\r\n // cleanup table by converting the first row to header cells, ensuring that column alignments\r\n // are derived from the alignment of the first row, and applying the standard cell class names\r\n const tr = newState.tr;\r\n forChangedNodes(\r\n oldState,\r\n newState,\r\n node => node.type === node.type.schema.nodes.table,\r\n (node, pos) => {\r\n let firstRow: ProsemirrorNode;\r\n let currentColumn = 0;\r\n const columnAlignments: string[] = [];\r\n\r\n node.descendants((childNode, childPos, parent) => {\r\n // if this is a row then reset the current column to 0\r\n if (childNode.type === schema.nodes.table_row) {\r\n currentColumn = 0;\r\n }\r\n\r\n // first thing we will encounter in traveral is the first row, note that and move along to cells\r\n if (!firstRow) {\r\n // note first row\r\n firstRow = childNode;\r\n\r\n // children of the first row are the headers\r\n } else if (parent === firstRow) {\r\n // collect alignment (will be applied below to cells in this column)\r\n columnAlignments.push(childNode.attrs.align);\r\n\r\n // convert to a table header w/ default class\r\n const headerPos = pos + 1 + childPos;\r\n tr.setNodeMarkup(headerPos, undefined, {\r\n ...childNode.attrs,\r\n className: kDefaultCellClasses,\r\n });\r\n\r\n // normal cell - apply the requisite alignment and give it the default class\r\n } else if (childNode.type === schema.nodes.table_cell) {\r\n // determine alignment\r\n const align = columnAlignments[currentColumn] || null;\r\n\r\n // apply markup\r\n const cellPos = pos + 1 + childPos;\r\n tr.setNodeMarkup(cellPos, schema.nodes.table_cell, {\r\n ...childNode.attrs,\r\n align,\r\n className: kDefaultCellClasses,\r\n });\r\n }\r\n\r\n // if this is a cell then advance the current column\r\n if (childNode.type === schema.nodes.table_header || childNode.type === schema.nodes.table_cell) {\r\n currentColumn++;\r\n }\r\n });\r\n },\r\n );\r\n\r\n if (tr.docChanged) {\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n },\r\n });\r\n}\r\n","/*\r\n * table.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Transaction, EditorState } from 'prosemirror-state';\r\nimport { Transform } from 'prosemirror-transform';\r\nimport { tableEditing, columnResizing, goToNextCell, deleteColumn, deleteRow } from 'prosemirror-tables';\r\nimport { sinkListItem, liftListItem } from 'prosemirror-schema-list';\r\n\r\nimport { findChildrenByType } from 'prosemirror-utils';\r\n\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { BaseKey } from '../../api/basekeys';\r\nimport { ProsemirrorCommand, EditorCommandId, exitNode } from '../../api/command';\r\nimport { TableCapabilities } from '../../api/table';\r\nimport { trTransform } from '../../api/transaction';\r\n\r\nimport {\r\n insertTable,\r\n deleteTable,\r\n deleteTableCaption,\r\n addRows,\r\n addColumns,\r\n TableColumnAlignmentCommand,\r\n TableRowCommand,\r\n TableColumnCommand,\r\n TableToggleHeaderCommand,\r\n TableToggleCaptionCommand,\r\n CssAlignment,\r\n insertTableOmniInsert,\r\n} from './table-commands';\r\n\r\nimport {\r\n tableContainerNode,\r\n tableNode,\r\n tableCaptionNode,\r\n tableCellNode,\r\n tableHeaderNode,\r\n tableRowNode,\r\n} from './table-nodes';\r\n\r\nimport { fixupTableWidths } from './table-columns';\r\nimport { tableContextMenuHandler } from './table-contextmenu';\r\nimport { tablePaste } from './table-paste';\r\n\r\nimport 'prosemirror-tables/style/tables.css';\r\nimport './table-styles.css';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n // not enabled if there are no tables enabled\r\n if (\r\n !pandocExtensions.grid_tables &&\r\n !pandocExtensions.pipe_tables &&\r\n !pandocExtensions.simple_tables &&\r\n !pandocExtensions.multiline_tables &&\r\n !pandocExtensions.raw_html\r\n ) {\r\n return null;\r\n }\r\n\r\n // define table capabilities\r\n const capabilities: TableCapabilities = {\r\n captions: pandocExtensions.table_captions,\r\n headerOptional: pandocExtensions.grid_tables,\r\n multiline: pandocExtensions.multiline_tables || pandocExtensions.grid_tables,\r\n };\r\n\r\n return {\r\n nodes: [\r\n tableContainerNode,\r\n tableNode,\r\n tableCaptionNode,\r\n tableCellNode(pandocExtensions.grid_tables),\r\n tableHeaderNode,\r\n tableRowNode,\r\n ],\r\n\r\n commands: () => {\r\n const commands = [\r\n new ProsemirrorCommand(\r\n EditorCommandId.Table,\r\n ['Alt-Mod-t'],\r\n insertTable(capabilities, ui),\r\n insertTableOmniInsert(ui),\r\n ),\r\n new ProsemirrorCommand(\r\n EditorCommandId.TableInsertTable,\r\n [],\r\n insertTable(capabilities, ui),\r\n ),\r\n new ProsemirrorCommand(EditorCommandId.TableNextCell, ['Tab'], goToNextCell(1)),\r\n new ProsemirrorCommand(EditorCommandId.TablePreviousCell, ['Shift-Tab'], goToNextCell(-1)),\r\n new TableColumnCommand(EditorCommandId.TableAddColumnAfter, [], addColumns(true)),\r\n new TableColumnCommand(EditorCommandId.TableAddColumnBefore, [], addColumns(false)),\r\n new TableColumnCommand(EditorCommandId.TableDeleteColumn, [], deleteColumn),\r\n new TableRowCommand(EditorCommandId.TableAddRowAfter, [], addRows(true)),\r\n new TableRowCommand(EditorCommandId.TableAddRowBefore, [], addRows(false)),\r\n new TableRowCommand(EditorCommandId.TableDeleteRow, [], deleteRow),\r\n new ProsemirrorCommand(EditorCommandId.TableDeleteTable, [], deleteTable()),\r\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnLeft, CssAlignment.Left),\r\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnRight, CssAlignment.Right),\r\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnCenter, CssAlignment.Center),\r\n new TableColumnAlignmentCommand(EditorCommandId.TableAlignColumnDefault, null),\r\n ];\r\n if (capabilities.captions) {\r\n commands.push(new TableToggleCaptionCommand());\r\n }\r\n if (capabilities.headerOptional) {\r\n commands.push(new TableToggleHeaderCommand());\r\n }\r\n return commands;\r\n },\r\n\r\n plugins: () => {\r\n return [\r\n columnResizing({\r\n handleWidth: 5,\r\n }),\r\n tableEditing(),\r\n tablePaste(),\r\n ];\r\n },\r\n\r\n contextMenuHandlers: () => {\r\n return [tableContextMenuHandler(ui)]\r\n },\r\n\r\n\r\n baseKeys: (schema: Schema) => {\r\n // core keys\r\n const keys = [\r\n { key: BaseKey.Backspace, command: deleteTableCaption() },\r\n { key: BaseKey.Enter, command: exitNode(schema.nodes.table_caption, -2, false) },\r\n { key: BaseKey.Tab, command: tableTabKey },\r\n { key: BaseKey.ShiftTab, command: tableShiftTabKey },\r\n ];\r\n\r\n // turn enter key variations into tab if we don't support multi-line\r\n if (!capabilities.multiline) {\r\n keys.push({ key: BaseKey.Enter, command: goToNextCell(1) });\r\n keys.push({ key: BaseKey.ShiftEnter, command: goToNextCell(1) });\r\n keys.push({ key: BaseKey.ModEnter, command: goToNextCell(1) });\r\n }\r\n\r\n return keys;\r\n },\r\n\r\n fixups: (_schema: Schema, view: EditorView) => {\r\n return [fixupTableWidths(view)];\r\n },\r\n\r\n appendTransaction: () => {\r\n return [\r\n {\r\n name: 'table-repair',\r\n nodeFilter: node => node.type === node.type.schema.nodes.table,\r\n append: (tr: Transaction) => {\r\n trTransform(tr, tableRepairTransform);\r\n },\r\n },\r\n ];\r\n },\r\n };\r\n};\r\n\r\nexport function tableTabKey(state: EditorState, dispatch?: (tr: Transaction) => void): boolean {\r\n if (sinkListItem(state.schema.nodes.list_item)(state)) {\r\n return false;\r\n } else {\r\n return goToNextCell(1)(state, dispatch);\r\n }\r\n}\r\n\r\nexport function tableShiftTabKey(state: EditorState, dispatch?: (tr: Transaction) => void): boolean {\r\n if (liftListItem(state.schema.nodes.list_item)(state)) {\r\n return false;\r\n } else {\r\n return goToNextCell(-1)(state, dispatch);\r\n }\r\n}\r\n\r\nfunction tableRepairTransform(tr: Transform) {\r\n const schema = tr.doc.type.schema;\r\n const tables = findChildrenByType(tr.doc, schema.nodes.table);\r\n tables.forEach(table => {\r\n // map the position\r\n const pos = tr.mapping.map(table.pos);\r\n\r\n // get containing node (pos is right before the table)\r\n const containingNode = tr.doc.resolve(pos).node();\r\n\r\n // table with no container\r\n if (containingNode.type !== schema.nodes.table_container) {\r\n // add the container\r\n const caption = schema.nodes.table_caption.createAndFill({ inactive: true }, undefined)!;\r\n const container = schema.nodes.table_container.createAndFill({}, [table.node, caption])!;\r\n tr.replaceWith(pos, pos + table.node.nodeSize, container);\r\n }\r\n\r\n // table with no content (possible w/ half caption leftover)\r\n else if (table.node.firstChild && table.node.firstChild.childCount === 0) {\r\n // delete the table (and container if necessary)\r\n const hasContainer = containingNode.type === schema.nodes.table_container;\r\n if (hasContainer) {\r\n tr.deleteRange(pos - 1, pos - 1 + containingNode.nodeSize);\r\n } else {\r\n tr.deleteRange(pos, table.node.nodeSize);\r\n }\r\n }\r\n });\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * definition_list-insert.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { Transaction } from 'prosemirror-state';\r\nimport { setTextSelection } from 'prosemirror-utils';\r\nimport { findChildrenByType } from 'prosemirror-utils';\r\nimport { trTransform } from '../../api/transaction';\r\nimport { Transform } from 'prosemirror-transform';\r\n\r\nexport function insertDefinitionList(tr: Transaction, items: ProsemirrorNode[]) {\r\n const schema = items[0].type.schema;\r\n const definitionList = schema.nodes.definition_list.createAndFill({}, items)!;\r\n const prevCursor = tr.selection.to;\r\n tr.replaceSelectionWith(definitionList);\r\n setTextSelection(tr.mapping.map(prevCursor) - 1, -1)(tr).scrollIntoView();\r\n return tr;\r\n}\r\n\r\nexport function insertDefinitionListAppendTransaction() {\r\n return {\r\n name: 'definition-list-join',\r\n nodeFilter: (node: ProsemirrorNode) => node.type === node.type.schema.nodes.definition_list,\r\n append: (tr: Transaction) => {\r\n // if a transaction creates 2 adjacent definition lists then join them\r\n trTransform(tr, joinDefinitionListsTransform);\r\n },\r\n };\r\n}\r\n\r\nfunction joinDefinitionListsTransform(tr: Transform) {\r\n const nodeType = tr.doc.type.schema.nodes.definition_list;\r\n const lists = findChildrenByType(tr.doc, nodeType, true);\r\n for (const list of lists) {\r\n // NOTE: no mapping (checking for deletion + getting the updated\r\n // position) is required here because we only ever do one transform\r\n // (see return after tr.join below)\r\n const listPos = tr.doc.resolve(list.pos + 1);\r\n const listIndex = listPos.index(listPos.depth - 1);\r\n const listParent = listPos.node(listPos.depth - 1);\r\n if (listIndex + 1 < listParent.childCount) {\r\n const nextNode = listParent.child(listIndex + 1);\r\n if (nextNode.type === nodeType) {\r\n tr.join(list.pos + list.node.nodeSize);\r\n return;\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * definition_list-commands.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorState, Transaction, TextSelection } from 'prosemirror-state';\r\nimport { findParentNodeOfType, setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { canInsertNode } from '../../api/node';\r\nimport { insertDefinitionList } from './definition_list-insert';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { OmniInsertGroup } from '../../api/omni_insert';\r\n\r\nexport class InsertDefinitionList extends ProsemirrorCommand {\r\n constructor(ui: EditorUI) {\r\n super(\r\n EditorCommandId.DefinitionList,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const schema = state.schema;\r\n\r\n if (\r\n findParentNodeOfType(schema.nodes.definition_list)(state.selection) ||\r\n !canInsertNode(state, schema.nodes.definition_list)\r\n ) {\r\n return false;\r\n }\r\n\r\n // new definition list\r\n if (dispatch) {\r\n const tr = state.tr;\r\n\r\n // create new list\r\n const termText = insertTermText(ui);\r\n const term = schema.text(termText);\r\n insertDefinitionList(tr, [\r\n schema.nodes.definition_list_term.createAndFill(null, term) as ProsemirrorNode,\r\n createDefinitionDescription(schema),\r\n ]);\r\n const start = state.selection.from;\r\n tr.setSelection(TextSelection.create(tr.doc, start, start + termText.length + 1)).scrollIntoView();\r\n dispatch(tr);\r\n }\r\n return true;\r\n },\r\n // omni insert\r\n {\r\n name: ui.context.translateText('Definition List'),\r\n description: ui.context.translateText('List with a definition for each item'),\r\n group: OmniInsertGroup.Lists,\r\n priority: 3,\r\n image: () =>\r\n ui.prefs.darkMode() ? ui.images.omni_insert.definition_list_dark : ui.images.omni_insert.definition_list,\r\n },\r\n );\r\n }\r\n}\r\n\r\nclass InsertDefinitionListItemCommand extends ProsemirrorCommand {\r\n constructor(id: EditorCommandId, createFn: () => ProsemirrorNode) {\r\n super(id, [], (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const schema = state.schema;\r\n\r\n if (!findParentNodeOfType(schema.nodes.definition_list)(state.selection)) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\r\n const parent = findParentNodeOfType(dlTypes)(state.selection)!;\r\n const insertPos = parent.pos + parent.node.nodeSize;\r\n const insertNode = createFn();\r\n tr.insert(insertPos, insertNode);\r\n if (insertNode.textContent.length > 1) {\r\n tr.setSelection(TextSelection.create(tr.doc, insertPos, insertPos + insertNode.textContent.length + 1));\r\n } else {\r\n setTextSelection(insertPos, 1)(tr);\r\n }\r\n tr.scrollIntoView();\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n}\r\n\r\nexport class InsertDefinitionTerm extends InsertDefinitionListItemCommand {\r\n constructor(schema: Schema, ui: EditorUI) {\r\n super(EditorCommandId.DefinitionTerm, () => {\r\n const term = schema.text(insertTermText(ui));\r\n return schema.nodes.definition_list_term.createAndFill({}, term)!;\r\n });\r\n }\r\n}\r\n\r\nexport class InsertDefinitionDescription extends InsertDefinitionListItemCommand {\r\n constructor(schema: Schema) {\r\n super(EditorCommandId.DefinitionDescription, () => {\r\n return createDefinitionDescription(schema);\r\n });\r\n }\r\n}\r\n\r\nfunction insertTermText(ui: EditorUI) {\r\n return ui.context.translateText('term');\r\n}\r\n\r\nfunction createDefinitionDescription(schema: Schema) {\r\n return schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!;\r\n}\r\n","/*\r\n * position.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { ResolvedPos } from 'prosemirror-model';\r\n\r\nexport function isOnlyChild(pos: ResolvedPos, depthOffset = 1) {\r\n return pos.node(pos.depth - depthOffset).childCount === 1;\r\n}\r\n\r\nexport function isLastChild(pos: ResolvedPos, depthOffset = 1) {\r\n return pos.index(pos.depth - depthOffset) === pos.node(pos.depth - depthOffset).childCount - 1;\r\n}\r\n","/*\r\n * definition_list-keys.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\nimport {\r\n findParentNodeOfType,\r\n findParentNodeOfTypeClosestToPos,\r\n setTextSelection,\r\n ContentNodeWithPos,\r\n} from 'prosemirror-utils';\r\n\r\nimport { isLastChild, isOnlyChild } from '../../api/position';\r\n\r\nexport function definitionListEnter() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // process if we are within a definition list\r\n const schema = state.schema;\r\n const parentDL = findParentNodeOfType(schema.nodes.definition_list)(state.selection);\r\n if (!parentDL) {\r\n return false;\r\n }\r\n\r\n // handle only empty selections\r\n if (!state.selection.empty) {\r\n return false;\r\n }\r\n\r\n // handle enter in either a term or definition\r\n const parentTerm = findParentNodeOfType(schema.nodes.definition_list_term)(state.selection);\r\n if (parentTerm) {\r\n return termEnter(parentTerm, state, dispatch);\r\n\r\n // enter in trailing empty description paragraph (append a term)\r\n } else if (isTrailingEmptyParagraph(state)) {\r\n if (dispatch) {\r\n endOfDescriptionEnter(state, dispatch);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n}\r\n\r\nexport function definitionListBackspace() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // process if we are within a definition item\r\n const schema = state.schema;\r\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\r\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\r\n if (!parentTerm) {\r\n return false;\r\n }\r\n\r\n if (parentTerm.node.type === schema.nodes.definition_list_term) {\r\n // if it's empty\r\n if (parentTerm.node.childCount === 0) {\r\n if (dispatch) {\r\n emptyTermBackspace(state, dispatch);\r\n }\r\n return true;\r\n }\r\n } else {\r\n // if the enclosing description is empty then delete it\r\n if (parentTerm.node.textContent.length === 0) {\r\n if (dispatch) {\r\n emptyDescriptionBackspace(parentTerm, state, dispatch);\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n}\r\n\r\nexport function definitionListTab() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // process if we are within a definition_term\r\n const schema = state.schema;\r\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\r\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\r\n if (!parentTerm) {\r\n return false;\r\n }\r\n\r\n // advance past node\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const advancePos = parentTerm.pos + parentTerm.node.nodeSize;\r\n setTextSelection(advancePos, 1)(tr).scrollIntoView();\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nexport function definitionListShiftTab() {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // process if we are within a definition_term\r\n const schema = state.schema;\r\n const dlTypes = [schema.nodes.definition_list_term, schema.nodes.definition_list_description];\r\n const parentTerm = findParentNodeOfType(dlTypes)(state.selection);\r\n if (!parentTerm) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const backwardPos = state.doc.resolve(parentTerm.pos - 1);\r\n const prevNode = findParentNodeOfTypeClosestToPos(backwardPos, dlTypes);\r\n if (prevNode) {\r\n setTextSelection(prevNode.start, 1)(tr).scrollIntoView();\r\n } else {\r\n const listNode = findParentNodeOfType(schema.nodes.definition_list)(tr.selection)!;\r\n setTextSelection(listNode.pos, -1)(tr).scrollIntoView();\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nfunction termEnter(term: ContentNodeWithPos, state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const schema = state.schema;\r\n const $head = state.selection.$head;\r\n\r\n // only handle empty selections\r\n if (!state.selection.empty) {\r\n return false;\r\n }\r\n\r\n // if we are empty then it's an exit (delete the term)\r\n const isEmpty = term.node.textContent.length === 0;\r\n if (isEmpty) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.deleteRange(term.pos, term.pos + term.node.nodeSize);\r\n tr.replaceSelectionWith(schema.nodes.paragraph.create());\r\n setTextSelection(tr.mapping.map(state.selection.from), 1)(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n\r\n // variable handling for non-empty\r\n } else {\r\n // selection at the beginning means insert another term above\r\n if ($head.parentOffset === 0) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const insertPos = tr.selection.$head.before($head.depth);\r\n tr.insert(insertPos, schema.nodes.definition_list_term.create());\r\n dispatch(tr);\r\n }\r\n return true;\r\n\r\n // selection at the end means insert a description below\r\n } else if ($head.parentOffset === term.node.textContent.length) {\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const insertPos = tr.selection.$head.after($head.depth);\r\n tr.insert(\r\n insertPos,\r\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\r\n );\r\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\r\n dispatch(tr);\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction emptyTermBackspace(state: EditorState, dispatch: (tr: Transaction) => void) {\r\n const { $head } = state.selection;\r\n const tr = state.tr;\r\n // if it's the only child then delete the entire list\r\n if (isOnlyChild($head)) {\r\n const start = $head.start($head.depth - 1) - 1;\r\n tr.deleteRange(start, start + $head.node($head.depth - 1).nodeSize);\r\n } else {\r\n const start = $head.start($head.depth) - 1;\r\n tr.deleteRange(start, start + $head.node($head.depth).nodeSize);\r\n }\r\n dispatch(tr);\r\n}\r\n\r\nfunction endOfDescriptionEnter(state: EditorState, dispatch: (tr: Transaction) => void) {\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n const selectionNode = $head.node($head.depth);\r\n\r\n const tr = state.tr;\r\n\r\n // if the parent description is empty then delete it\r\n let start = null;\r\n const descriptionNode = $head.node($head.depth - 1);\r\n if (descriptionNode.textContent.trim().length === 0) {\r\n start = $head.start($head.depth - 1) - 1;\r\n tr.deleteRange(start, start + descriptionNode.nodeSize);\r\n\r\n // only if at very end\r\n if (isLastChild($head, 2)) {\r\n const insertPos = tr.mapping.map($head.after($head.depth - 2));\r\n tr.insert(insertPos, schema.nodes.paragraph.create());\r\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\r\n }\r\n\r\n // otherwise just delete the paragraph and insert a term\r\n } else {\r\n start = $head.start($head.depth) - 1;\r\n tr.deleteRange(start, start + selectionNode.nodeSize);\r\n start = tr.mapping.map(start);\r\n tr.insert(start + 1, schema.nodes.definition_list_term.create());\r\n setTextSelection(start, 1)(tr).scrollIntoView();\r\n }\r\n\r\n dispatch(tr);\r\n}\r\n\r\nfunction emptyDescriptionBackspace(\r\n description: ContentNodeWithPos,\r\n state: EditorState,\r\n dispatch: (tr: Transaction) => void,\r\n) {\r\n const tr = state.tr;\r\n tr.deleteRange(description.pos, description.pos + description.node.nodeSize);\r\n setTextSelection(description.pos,-1)(tr).scrollIntoView();\r\n dispatch(tr);\r\n}\r\n\r\nfunction isTrailingEmptyParagraph(state: EditorState) {\r\n const { $head } = state.selection;\r\n const selectionNode = $head.node($head.depth);\r\n const isParagraph = selectionNode.type === state.schema.nodes.paragraph;\r\n const isEmpty = selectionNode.textContent.trim().length === 0;\r\n return isParagraph && isEmpty && isLastChild($head);\r\n}\r\n\r\n","/*\r\n * definition_list-inputrule.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { EditorState } from 'prosemirror-state';\r\nimport { setTextSelection, findParentNodeOfTypeClosestToPos } from 'prosemirror-utils';\r\n\r\nimport { insertDefinitionList } from './definition_list-insert';\r\n\r\nexport function definitionInputRule() {\r\n return new InputRule(/^:[ ]+$/, (state: EditorState, _match: RegExpMatchArray, start: number, end: number) => {\r\n const schema = state.schema;\r\n\r\n // if we are inside a definiition list description this means start a new description\r\n const { $head } = state.selection;\r\n const container = $head.node($head.depth - 1);\r\n const parent = $head.node($head.depth);\r\n\r\n // must be just ': '\r\n if (parent.textContent.trim() !== ':') {\r\n return null;\r\n }\r\n\r\n // check for : within a definition list description\r\n if (container.type === schema.nodes.definition_list_description && parent.type === schema.nodes.paragraph) {\r\n const tr = state.tr;\r\n const startPos = $head.start($head.depth) - 1;\r\n tr.deleteRange(startPos, startPos + $head.node($head.depth).nodeSize);\r\n const insertPos = tr.mapping.map(startPos) + 1;\r\n tr.insert(\r\n insertPos,\r\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\r\n );\r\n setTextSelection(insertPos, 1)(tr).scrollIntoView();\r\n return tr;\r\n\r\n // check for : in a paragraph immediately after another paragraph\r\n } else if (container.type !== schema.nodes.definition_list_description && isParagraphAfterParagraph(state)) {\r\n const prevPara = findParentNodeOfTypeClosestToPos(state.doc.resolve(start - 2), schema.nodes.paragraph);\r\n if (prevPara) {\r\n const tr = state.tr;\r\n tr.deleteRange(prevPara.start, end);\r\n insertDefinitionList(tr, [\r\n schema.nodes.definition_list_term.createAndFill({}, prevPara.node.content)!,\r\n schema.nodes.definition_list_description.createAndFill({}, schema.nodes.paragraph.create())!,\r\n ]);\r\n return tr;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n });\r\n}\r\n\r\nfunction isParagraphAfterParagraph(state: EditorState) {\r\n const schema = state.schema;\r\n const { $head } = state.selection;\r\n\r\n // check if the selection is in a paragraph\r\n const selectionInParagraph = $head.node($head.depth).type === schema.nodes.paragraph;\r\n if (!selectionInParagraph) {\r\n return false;\r\n }\r\n\r\n // check if the previous node is a paragraph\r\n const parent = $head.node($head.depth - 1);\r\n const parentIndex = $head.index($head.depth - 1);\r\n return parentIndex > 0 && parent.child(parentIndex - 1).type === schema.nodes.paragraph;\r\n}\r\n","/*\r\n * definition_list-pandoc.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { ProsemirrorWriter, PandocToken, PandocOutput, PandocTokenType } from '../../api/pandoc';\r\n\r\nexport function readPandocDefinitionList(schema: Schema) {\r\n return (writer: ProsemirrorWriter, tok: PandocToken) => {\r\n writer.openNode(schema.nodes.definition_list, {});\r\n\r\n const definitions = tok.c;\r\n definitions.forEach((definition: [PandocToken[], PandocToken[][]]) => {\r\n const term = definition[0];\r\n writer.openNode(schema.nodes.definition_list_term, {});\r\n writer.writeTokens(term);\r\n writer.closeNode();\r\n\r\n const descriptions = definition[1];\r\n descriptions.forEach(description => {\r\n writer.openNode(schema.nodes.definition_list_description, {});\r\n writer.writeTokens(description);\r\n writer.closeNode();\r\n });\r\n });\r\n writer.closeNode();\r\n };\r\n}\r\n\r\nexport function writePandocDefinitionList(output: PandocOutput, node: ProsemirrorNode) {\r\n output.writeToken(PandocTokenType.DefinitionList, () => {\r\n // collect terms and descriptions\r\n const currentDefinition: {\r\n term?: ProsemirrorNode;\r\n descriptions: ProsemirrorNode[];\r\n } = { descriptions: new Array<ProsemirrorNode>() };\r\n\r\n // functions to manipulate current definition\r\n function writeCurrent() {\r\n if (currentDefinition.term) {\r\n output.writeArray(() => {\r\n output.writeNode(currentDefinition.term!);\r\n output.writeArray(() => {\r\n currentDefinition.descriptions.forEach(description => {\r\n output.writeNode(description);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n // write the list\r\n node.forEach(child => {\r\n if (child.type === child.type.schema.nodes.definition_list_term) {\r\n writeCurrent();\r\n currentDefinition.term = child;\r\n currentDefinition.descriptions = [];\r\n } else {\r\n currentDefinition.descriptions.push(child);\r\n }\r\n });\r\n writeCurrent();\r\n });\r\n}\r\n\r\nexport function writePandocDefinitionListTerm(output: PandocOutput, node: ProsemirrorNode) {\r\n output.writeArray(() => {\r\n output.writeInlines(node.content);\r\n });\r\n}\r\n\r\nexport function writePandocDefinitionListDescription(output: PandocOutput, node: ProsemirrorNode) {\r\n output.writeArray(() => {\r\n output.writeNodes(node);\r\n });\r\n}\r\n","/*\r\n * definition_list.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema, DOMOutputSpec } from 'prosemirror-model';\r\n\r\nimport { PandocTokenType } from '../../api/pandoc';\r\nimport { ExtensionContext } from '../../api/extension';\r\nimport { BaseKey } from '../../api/basekeys';\r\n\r\nimport { InsertDefinitionList, InsertDefinitionDescription, InsertDefinitionTerm } from './definition_list-commands';\r\n\r\nimport {\r\n definitionListEnter,\r\n definitionListBackspace,\r\n definitionListTab,\r\n definitionListShiftTab,\r\n} from './definition-list-keys';\r\n\r\nimport { definitionInputRule } from './definition_list-inputrule';\r\n\r\nimport { insertDefinitionListAppendTransaction } from './definition_list-insert';\r\nimport {\r\n readPandocDefinitionList,\r\n writePandocDefinitionList,\r\n writePandocDefinitionListTerm,\r\n writePandocDefinitionListDescription,\r\n} from './definition_list-pandoc';\r\n\r\nimport './definition_list-styles.css';\r\nimport { emptyNodePlaceholderPlugin } from '../../api/placeholder';\r\n\r\nconst extension = (context: ExtensionContext) => {\r\n const { pandocExtensions, ui } = context;\r\n\r\n if (!pandocExtensions.definition_lists) {\r\n return null;\r\n }\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'definition_list_term',\r\n spec: {\r\n content: 'inline*',\r\n isolating: true,\r\n parseDOM: [{ tag: 'dt' }],\r\n toDOM(): DOMOutputSpec {\r\n return ['dt', { class: 'pm-definition-term' }, 0];\r\n },\r\n },\r\n pandoc: {\r\n writer: writePandocDefinitionListTerm,\r\n },\r\n },\r\n {\r\n name: 'definition_list_description',\r\n spec: {\r\n content: 'block+',\r\n parseDOM: [{ tag: 'dd' }],\r\n toDOM(): DOMOutputSpec {\r\n return ['dd', { class: 'pm-definition-description pm-block-border-color pm-margin-bordered' }, 0];\r\n },\r\n },\r\n pandoc: {\r\n writer: writePandocDefinitionListDescription,\r\n },\r\n },\r\n {\r\n name: 'definition_list',\r\n spec: {\r\n content: '(definition_list_term definition_list_description*)+',\r\n group: 'block',\r\n defining: true,\r\n parseDOM: [{ tag: 'dl' }],\r\n toDOM(): DOMOutputSpec {\r\n return ['dl', { class: 'pm-definition-list' }, 0];\r\n },\r\n },\r\n pandoc: {\r\n readers: [\r\n {\r\n token: PandocTokenType.DefinitionList,\r\n handler: readPandocDefinitionList,\r\n },\r\n ],\r\n\r\n writer: writePandocDefinitionList,\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n return [\r\n new InsertDefinitionList(ui),\r\n new InsertDefinitionTerm(schema, ui),\r\n new InsertDefinitionDescription(schema),\r\n ];\r\n },\r\n\r\n baseKeys: () => {\r\n return [\r\n { key: BaseKey.Enter, command: definitionListEnter() },\r\n { key: BaseKey.Backspace, command: definitionListBackspace() },\r\n { key: BaseKey.Tab, command: definitionListTab() },\r\n { key: BaseKey.ShiftTab, command: definitionListShiftTab() },\r\n ];\r\n },\r\n\r\n inputRules: () => {\r\n return [definitionInputRule()];\r\n },\r\n\r\n appendTransaction: () => {\r\n return [insertDefinitionListAppendTransaction()];\r\n },\r\n\r\n plugins: (schema: Schema) => {\r\n return [emptyNodePlaceholderPlugin(schema.nodes.definition_list_term, () => ui.context.translateText('Term'))];\r\n },\r\n };\r\n};\r\n\r\nexport default extension;\r\n","/*\r\n * nodeindex.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node } from \"prosemirror-model\";\r\nimport { Transform, Step } from \"prosemirror-transform\";\r\nimport { Predicate, NodeWithPos, findChildren } from \"prosemirror-utils\";\r\nimport { traverseNodes, TraverseResult } from \"./node-traverse\";\r\n\r\nconst kVerifyIncrementalUpdate = true; // process.env.NODE_ENV !== \"production\"\r\n\r\n/**\r\n * A NodeIndex is an immutable data structure that records and maintains a set\r\n * of NodeWithPos that you care about, based on a predicate function. If only a\r\n * small percent of nodes pass the predicate function, then maintaining a\r\n * NodeIndex should be faster than walking through the document (though it turns\r\n * out that walking the document is pretty fast too).\r\n * \r\n * You create a NodeIndex using NodeIndex.create(predicate, doc), and then apply\r\n * transformations using NodeIndex#apply(tr).\r\n */\r\nexport class NodeIndex {\r\n\r\n private readonly doc: Node;\r\n private readonly predicate: Predicate;\r\n private readonly index: ReadonlyArray<NodeWithPos>;\r\n\r\n public static create(predicate: Predicate, doc: Node) {\r\n let index: NodeWithPos[] = [];\r\n if (predicate(doc)) {\r\n index.push({node: doc, pos: 0});\r\n }\r\n index = index.concat(findChildren(doc, predicate, true));\r\n\r\n return new NodeIndex(doc, predicate, index, true);\r\n }\r\n\r\n /**\r\n * @param doc The document that this NodeIndex reflects.\r\n * @param predicate Function that returns true for nodes that\r\n * should be indexed.\r\n * @param index Array of NodeWithPos, ideally sorted by pos.\r\n * @param sorted Is the `index` array sorted by pos?\r\n */\r\n private constructor(doc: Node, predicate: Predicate, index: NodeWithPos[], sorted = false) {\r\n this.doc = doc;\r\n this.predicate = predicate;\r\n this.index = sorted ? index : index.concat().sort((a, b) => a.pos - b.pos);\r\n }\r\n\r\n public get length(): number {\r\n return this.index.length;\r\n }\r\n\r\n public getIndex(doc?: Node): ReadonlyArray<NodeWithPos> {\r\n if (doc) {\r\n if (!this.doc.eq(doc)) {\r\n throw new Error(\"Alignment error in NodeIndex#getIndex\");\r\n }\r\n }\r\n return this.index;\r\n }\r\n\r\n public apply(t: Transform): NodeIndex {\r\n if (!t.before.eq(this.doc)) {\r\n throw new Error(\"Alignment error in NodeIndex#apply\");\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n let ni: NodeIndex = this;\r\n for (let i = 0; i < t.steps.length; i++) {\r\n const oldDoc = t.docs[i];\r\n const newDoc = i + 1 < t.steps.length ? t.docs[i+1] : t.doc;\r\n ni = ni.doApply(t.steps[i], oldDoc, newDoc);\r\n }\r\n return ni;\r\n }\r\n\r\n private doApply(step: Step, _oldDoc: Node, newDoc: Node): NodeIndex {\r\n let newIndex: NodeWithPos[] = [];\r\n \r\n for (const nodeWithPos of this.index) {\r\n const result = step.getMap().mapResult(nodeWithPos.pos);\r\n if (!result.deleted) {\r\n if (result.pos === nodeWithPos.pos) {\r\n newIndex.push(nodeWithPos);\r\n } else {\r\n newIndex.push({node: nodeWithPos.node, pos: result.pos});\r\n }\r\n }\r\n }\r\n step.getMap().forEach((_oldStart, _oldEnd, newStart, newEnd) => {\r\n traverseNodes(newDoc, newStart, newEnd, (node, pos) => {\r\n if (pos >= newStart && pos < newEnd) {\r\n // The start of the node is entirely inside the changed region; this\r\n // must be a new node\r\n if (this.predicate(node)) {\r\n newIndex.push({ node, pos });\r\n }\r\n } else {\r\n // Somewhat overlaps with the changed region; this may be a changed node\r\n for (let i = 0; i < newIndex.length; i++) {\r\n if (newIndex[i].pos === pos) {\r\n newIndex[i] = {node, pos};\r\n break;\r\n }\r\n }\r\n }\r\n return TraverseResult.Descend;\r\n });\r\n });\r\n\r\n newIndex.sort((a, b) => a.pos - b.pos);\r\n\r\n if (kVerifyIncrementalUpdate) {\r\n // This code is a slower, simpler version of the algorithm above. If\r\n // kVerifyIncrementalUpdate is enabled, we run both versions and compare\r\n // the results. Once we're sufficiently confident in the above algorithm\r\n // we can turn this off.\r\n\r\n const refIndex = NodeIndex.create(this.predicate, newDoc).getIndex();\r\n if (JSON.stringify(refIndex) !== JSON.stringify(newIndex)) {\r\n // tslint:disable-next-line: no-console\r\n console.error(\"NodeIndex corruption detected, this indicates a bug in NodeIndex.doApply!\");\r\n // tslint:disable-next-line: no-console\r\n console.log(JSON.stringify(refIndex));\r\n // tslint:disable-next-line: no-console\r\n console.log(JSON.stringify(newIndex));\r\n // Recover. The concat() is necessary to get rid of the const-ness of\r\n // refIndex.\r\n newIndex = refIndex.concat();\r\n }\r\n }\r\n\r\n return new NodeIndex(newDoc, this.predicate, newIndex, true);\r\n }\r\n\r\n public subtract(other: NodeIndex, keyFn: (nodeWithPos: NodeWithPos) => string) {\r\n const otherLookup = new Map<string, boolean>();\r\n other.index.forEach(x => {\r\n otherLookup.set(keyFn(x), true);\r\n });\r\n\r\n return new NodeIndex(\r\n this.doc,\r\n this.predicate,\r\n this.index.filter(x => !otherLookup.has(keyFn(x))),\r\n true\r\n );\r\n }\r\n\r\n public intersect(other: NodeIndex, keyFn: (nodeWithPos: NodeWithPos) => string) {\r\n const otherLookup = new Map<string, boolean>();\r\n other.index.forEach(x => {\r\n otherLookup.set(keyFn(x), true);\r\n });\r\n\r\n return new NodeIndex(\r\n this.doc,\r\n this.predicate,\r\n this.index.filter(x => otherLookup.has(keyFn(x))),\r\n true\r\n );\r\n }\r\n\r\n public filter(keep: (nodeWithPos: NodeWithPos, index: number, array: ReadonlyArray<NodeWithPos>) => boolean) {\r\n return new NodeIndex(\r\n this.doc,\r\n this.predicate,\r\n this.index.filter(keep),\r\n true\r\n );\r\n }\r\n}\r\n","/*\r\n * user_comment-constants.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { PluginKey } from \"prosemirror-state\";\r\nimport { DecorationSet } from \"prosemirror-view\";\r\nimport { NodeIndex } from \"../../api/nodeindex\";\r\n\r\nexport const UserCommentPluginKey = new PluginKey<DecorationSet>('user-comment');\r\nexport const UserCommentNodeCachePluginKey = new PluginKey<NodeIndex>('user-comment-node-cache');\r\nexport const UserCommentViewPluginKey = new PluginKey<NodeIndex>('user-comment-view');\r\n","/*\r\n * user_comment-cache.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node, Schema } from \"prosemirror-model\";\r\nimport { Plugin, EditorState } from \"prosemirror-state\";\r\nimport { NodeWithPos } from \"prosemirror-utils\";\r\nimport { NodeIndex } from \"../../api/nodeindex\";\r\nimport { UserCommentNodeCachePluginKey } from \"./user_comment-constants\";\r\n\r\nexport class UserCommentNodeCachePlugin extends Plugin {\r\n constructor(schema: Schema) {\r\n super({\r\n key: UserCommentNodeCachePluginKey,\r\n state: {\r\n init(_config, instance): NodeIndex {\r\n return NodeIndex.create(\r\n isCommentNode.bind(undefined, schema),\r\n instance.doc);\r\n },\r\n apply(tr, value) {\r\n return value.apply(tr);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function getUserCommentNodeCache(state: EditorState): NodeIndex {\r\n return UserCommentNodeCachePluginKey.getState(state)!;\r\n}\r\n\r\nexport interface NodePair {\r\n readonly begin: NodeWithPos;\r\n readonly end: NodeWithPos;\r\n}\r\n\r\nexport function getUserCommentNodePairs(schema: Schema, cache: NodeIndex): ReadonlyArray<NodePair> {\r\n const results = new Array<NodePair>();\r\n\r\n const currentBeginTags = new Map<string, NodeWithPos[]>();\r\n for (const node of cache.getIndex()) {\r\n const threadId = node.node.attrs.threadId;\r\n let stack = currentBeginTags.get(threadId);\r\n if (isCommentBeginNode(schema, node.node)) {\r\n if (!stack) {\r\n stack = [];\r\n currentBeginTags.set(threadId, stack);\r\n }\r\n stack.push(node);\r\n } else if (isCommentEndNode(schema, node.node)) {\r\n if (stack && stack.length > 0) {\r\n const beginTag = stack.pop()!;\r\n results.push({begin: beginTag, end: node});\r\n } else {\r\n // TODO: Unmatched comment end tag; warn?\r\n }\r\n }\r\n }\r\n\r\n // TODO: If currentBeginTags isn't empty, warn?\r\n\r\n return results;\r\n}\r\n\r\nfunction isCommentNode(schema: Schema, node: Node) {\r\n return isCommentBeginNode(schema, node) || isCommentEndNode(schema, node);\r\n}\r\n\r\nfunction isCommentBeginNode(schema: Schema, node: Node) {\r\n return node.type === schema.nodes.user_comment_begin;\r\n}\r\n\r\nfunction isCommentEndNode(schema: Schema, node: Node) {\r\n return node.type === schema.nodes.user_comment_end;\r\n}\r\n","/*\r\n * user_comment-fixup.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node, Schema, Slice, Fragment, NodeType } from \"prosemirror-model\";\r\nimport { Transaction, EditorState } from \"prosemirror-state\";\r\nimport { Step, ReplaceStep } from \"prosemirror-transform\";\r\nimport { NodeWithPos, findChildren } from \"prosemirror-utils\";\r\nimport { findOneNode } from \"../../api/node\";\r\nimport { traverseNodes, TraverseResult } from \"../../api/node-traverse\";\r\nimport { getUserCommentNodeCache, getUserCommentNodePairs } from \"./user_comment-cache\";\r\nimport { UserCommentPluginKey } from \"./user_comment-constants\";\r\nimport { trTransform } from \"../../api/transaction\";\r\n\r\nexport function userCommentBlocksToInlineFixup(schema: Schema) {\r\n\r\n return (tr: Transaction) => {\r\n\r\n // Pandoc serializes comments at the beginning of paragraphs\r\n // (and other blocks) as standalone blocks. This isn't what\r\n // we want; instead, transform comment blocks to inline blocks.\r\n\r\n // This happens in two phases. The first part is during the\r\n // user_comment_(begin|end).pandoc.reader.handler call; each\r\n // comment begin/end block is interpreted instead as a para\r\n // with a synthetic:true attribute, and the inline comment node\r\n // as its only child. The second phase is this fixup function,\r\n // where we detect such para/comment combos; the inner node is\r\n // moved to the next valid place for text to appear, and the\r\n // wrapper paragraph is deleted.\r\n\r\n // Because our input is a Transaction that may already have\r\n // changes, we'll use a dedicated Transform instance based off\r\n // that transaction's (end) state. This allows us to deal with\r\n // the problem of mutating the doc we're iterating over; we'll\r\n // iterate over a fixed doc, but map each new action through\r\n // the set of previous actions (i.e. since the creation of this\r\n // Transform instance).\r\n\r\n function isBlockComment(node: Node) {\r\n return node.type === schema.nodes.paragraph &&\r\n node.attrs.synthetic &&\r\n node.childCount === 1 &&\r\n (node.firstChild!.type === schema.nodes.user_comment_begin ||\r\n node.firstChild!.type === schema.nodes.user_comment_end);\r\n }\r\n\r\n return trTransform(tr, newActions => {\r\n // First, find all block-type comment nodes.\r\n for (const {pos, node} of findChildren(tr.doc, isBlockComment, true)) {\r\n const commentNode = node.firstChild!;\r\n \r\n // Where is this comment, in the post-mutation doc?\r\n const mappedPos = newActions.mapping.mapResult(pos, 1);\r\n const mappedEnd = newActions.mapping.mapResult(pos + node.nodeSize, 1);\r\n if (mappedPos.deleted) {\r\n // This comment has already been deleted; just continue.\r\n // (This probably can't happen, since comments don't nest.)\r\n continue;\r\n }\r\n if (mappedEnd.deleted) {\r\n // Hmmm, don't think we can get into this state. But if we do,\r\n // there's probably nothing safe we can do here.\r\n throw new Error(\"During block comment fixup, mappedEnd was deleted\");\r\n }\r\n \r\n // Now find somewhere to insert the inline node. Currently, we\r\n // just find the next text node in document order, regardless\r\n // of depth. Note that we're traversing the post-mutation doc,\r\n // so no need to map positions.\r\n // TODO: If we're fixing up a comment end node, should we go backward?\r\n traverseNodes(newActions.doc, mappedEnd.pos, Infinity,\r\n (node2, pos2) => {\r\n if (node2.isText) {\r\n // We've found a suitable place for the comment!\r\n newActions.insert(pos2, [commentNode]);\r\n \r\n // Delete the synthetic paragraph\r\n newActions.deleteRange(mappedPos.pos, mappedEnd.pos);\r\n \r\n // Prevent plugin logic from trying to fix up our\r\n // transaction as if we're a copy-and-paste.\r\n tr.setMeta(UserCommentPluginKey, true);\r\n \r\n // Don't continue the traversal\r\n return TraverseResult.End;\r\n } else {\r\n // Keep searching\r\n return TraverseResult.Descend;\r\n }\r\n }\r\n );\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport function userCommentAppendTransaction(schema: Schema, getId: () => string) {\r\n // Give this inner function a name so it shows up in profiler traces\r\n return function userCommentAppendTransactionImpl(transactions: readonly Transaction[], _oldState: EditorState, newState: EditorState) {\r\n // This will store our new actions\r\n let newSteps: Array<Step | null | undefined> = [];\r\n\r\n const newStateNodeIndex = getUserCommentNodeCache(newState);\r\n\r\n for (const transaction of transactions) {\r\n for (let i = 0; i < transaction.steps.length; i++) {\r\n const step = transaction.steps[i];\r\n const oldDoc = transaction.docs[i];\r\n const newDoc = (i+1 === transaction.docs.length) ? transaction.doc : transaction.docs[i + 1];\r\n\r\n // This MUST happen even if we exit early\r\n newSteps = newSteps.map(x => x!.map(step.getMap())).filter((value) => !!value);\r\n\r\n if (transaction.getMeta(UserCommentPluginKey)) {\r\n // Never try to fixup if it's one of our own commands that\r\n // caused this\r\n continue;\r\n }\r\n\r\n if (transaction.getMeta(\"history$\")) {\r\n // Never try to fixup if we're undoing/redoing\r\n continue;\r\n }\r\n\r\n // eslint-disable-next-line\r\n step.getMap().forEach((fromA, toA, fromB, toB) => {\r\n\r\n const removedBeginNodes: {[key: string]: NodeWithPos} = {};\r\n const removedEndNodes: {[key: string]: NodeWithPos} = {};\r\n const addedBeginNodes: {[key: string]: NodeWithPos} = {};\r\n const addedEndNodes: {[key: string]: NodeWithPos} = {};\r\n\r\n oldDoc.nodesBetween(fromA, toA, (node, pos) => {\r\n if (node.type === schema.nodes.user_comment_begin) {\r\n removedBeginNodes[node.attrs.threadId] = {pos, node};\r\n } else if (node.type === schema.nodes.user_comment_end) {\r\n removedEndNodes[node.attrs.threadId] = {pos, node};\r\n }\r\n\r\n return true;\r\n });\r\n newDoc.nodesBetween(fromB, toB, (node, pos) => {\r\n if (node.type === schema.nodes.user_comment_begin) {\r\n if (removedBeginNodes[node.attrs.threadId]) {\r\n delete removedBeginNodes[node.attrs.threadId];\r\n } else {\r\n addedBeginNodes[node.attrs.threadId] = {pos, node};\r\n }\r\n } else if (node.type === schema.nodes.user_comment_end) {\r\n if (removedEndNodes[node.attrs.threadId]) {\r\n delete removedEndNodes[node.attrs.threadId];\r\n } else {\r\n addedEndNodes[node.attrs.threadId] = {pos, node};\r\n }\r\n }\r\n return true;\r\n });\r\n\r\n function removeCommentNodeByPos(doc: Node, nodeType: NodeType, pos: number): Step {\r\n const node = doc.nodeAt(pos)!;\r\n if (node.type !== nodeType) {\r\n throw new Error(`Assertion failure: Unexpected node type ${doc.nodeAt(pos)!.type} when removing comment`);\r\n }\r\n return new ReplaceStep(pos, pos + node.nodeSize, Slice.empty, false);\r\n }\r\n\r\n // Whole removed, that's fine.\r\n // const removedBothIds = intersectKeys(removedBeginNodes, removedEndNodes);\r\n\r\n // Unmatched begin was removed, must put it right back.\r\n const removedBeginIds = diffKeys(removedBeginNodes, removedEndNodes);\r\n // Unmatched end was removed, must put it right back.\r\n const removedEndIds = diffKeys(removedEndNodes, removedBeginNodes);\r\n\r\n // Whole comment was added; keep, but replace the threadId.\r\n const addedBothIds = intersectKeys(addedBeginNodes, addedEndNodes);\r\n // Unmatched begin was added, must remove it.\r\n const addedBeginIds = diffKeys(addedBeginNodes, addedEndNodes);\r\n // Unmatched end was added, must remove it.\r\n const addedEndIds = diffKeys(addedEndNodes, addedBeginNodes);\r\n\r\n for (const id of removedBeginIds) {\r\n newSteps.push(new ReplaceStep(fromB, fromB, new Slice(Fragment.from(removedBeginNodes[id].node), 0, 0)));\r\n }\r\n for (const id of removedEndIds) {\r\n newSteps.push(new ReplaceStep(toB, toB, new Slice(Fragment.from(removedEndNodes[id].node), 0, 0)));\r\n }\r\n\r\n for (const id of addedBeginIds) {\r\n const node = addedBeginNodes[id]!;\r\n newSteps.push(removeCommentNodeByPos(newDoc, schema.nodes.user_comment_begin, node.pos));\r\n }\r\n for (const id of addedEndIds) {\r\n const node = addedEndNodes[id]!;\r\n newSteps.push(removeCommentNodeByPos(newDoc, schema.nodes.user_comment_end, node.pos));\r\n }\r\n\r\n for (const id of addedBothIds) {\r\n const {node: beginNode, pos: beginPos} = addedBeginNodes[id];\r\n const {node: endNode, pos: endPos} = addedEndNodes[id];\r\n\r\n const matches = newStateNodeIndex.filter(({node}) => {\r\n return node.type === schema.nodes.user_comment_begin &&\r\n node.attrs.threadId === beginNode.attrs.threadId;\r\n }).length;\r\n if (matches < 2) {\r\n // Don't reassign id if it's not a dupe (i.e. drag-and-drop move\r\n // of a whole comment)\r\n continue;\r\n }\r\n\r\n const newId = getId();\r\n const beginNodeNew = extendAttrs(beginNode, {threadId: newId});\r\n const endNodeNew = extendAttrs(endNode, {threadId: newId});\r\n\r\n newSteps.push(\r\n new ReplaceStep(beginPos, beginPos + beginNode.nodeSize, new Slice(Fragment.from(beginNodeNew), 0, 0))\r\n );\r\n newSteps.push(\r\n new ReplaceStep(endPos, endPos + endNode.nodeSize, new Slice(Fragment.from(endNodeNew), 0, 0))\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n const tr = newState.tr;\r\n tr.setMeta(UserCommentPluginKey, true);\r\n for (const step of newSteps) {\r\n if (step) {\r\n // Before applying the current new step, map it through all the previous\r\n // new steps (as embodied by `tr`).\r\n const mappedStep = step.map(tr.mapping);\r\n if (mappedStep) {\r\n tr.step(mappedStep);\r\n }\r\n }\r\n }\r\n \r\n // Now, look for any comments where the begin/end nodes have nothing between\r\n // them. These can be deleted.\r\n\r\n outer:\r\n for (;;) {\r\n // The NodeIndex is a snapshot of the doc before our newSteps were applied.\r\n // We'll need to apply those steps, and re-apply them whenever we add more.\r\n const cache = newStateNodeIndex.apply(tr);\r\n for (const {begin, end} of getUserCommentNodePairs(schema, cache)) {\r\n // Look for any text node. We'll have to revisit this if we ever allow\r\n // non-text selections to be marked for a comment (e.g. images).\r\n const containsText = !!findOneNode(tr.doc,\r\n begin.pos + begin.node.nodeSize,\r\n end.pos,\r\n node => node.isText);\r\n\r\n if (!containsText) {\r\n // This comment contains no text; delete it.\r\n tr.deleteRange(end.pos, end.pos + end.node.nodeSize);\r\n tr.deleteRange(begin.pos, begin.pos + begin.node.nodeSize);\r\n // It's possible we've just deleted an empty comment and in doing\r\n // so caused an enclosing comment to become empty. Start the\r\n // search over from the beginning, using the new state.\r\n continue outer;\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n return tr.docChanged ? tr : null;\r\n };\r\n}\r\n\r\nfunction diffKeys(a: {[key: string]: unknown}, b: {[key: string]: unknown}): string[] {\r\n const results = [];\r\n for (const key of Object.keys(a)) {\r\n if (!b[key]) {\r\n results.push(key);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\nfunction intersectKeys(a: {[key: string]: unknown}, b: {[key: string]: unknown}): string[] {\r\n const results = [];\r\n for (const key of Object.keys(a)) {\r\n if (b[key]) {\r\n results.push(key);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\nfunction extendAttrs(node: Node, attrs: { [key: string]: unknown }): Node {\r\n return node.type.createChecked(\r\n Object.assign({}, node.attrs, attrs),\r\n node.content,\r\n node.marks\r\n );\r\n}\r\n","/*\r\n * user_comment-model.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from \"prosemirror-model\";\r\nimport { EditorState, Transaction } from \"prosemirror-state\";\r\nimport { NodeWithPos } from \"prosemirror-utils\";\r\nimport { setNodeAttrs } from \"../../api/node\";\r\nimport { traverseNodes } from \"../../api/node-traverse\";\r\nimport { randomAlphanumeric } from \"../../api/util\";\r\nimport { getUserCommentNodeCache } from \"./user_comment-cache\";\r\nimport { UserCommentPluginKey } from \"./user_comment-constants\";\r\n\r\nexport interface CommentThread {\r\n readonly threadId: string;\r\n readonly comments: ReadonlyArray<Comment>;\r\n}\r\n\r\nexport interface Comment {\r\n readonly commentId: string;\r\n readonly author: string;\r\n readonly created: Date;\r\n readonly content: string;\r\n}\r\n\r\n// var str = '<!--#[\"Joe "" Cheng <joe@rstudio.com>\" at 2020-03-04T05:06:07-08:00] My comment is insightful & amusing-->'\r\n// Just loosely match the begin comment--we'll do stronger parsing in a second pass\r\nconst kHTMLUserCommentBegin = /^<!--#([\\w-]+)(\\[[^<>]+?)-->$/;\r\n\r\nexport function parseFromHTMLComment(comment: string): CommentThread | null {\r\n const m1 = kHTMLUserCommentBegin.exec(comment);\r\n if (!m1) {\r\n return null;\r\n }\r\n\r\n const comments: Comment[] = [];\r\n\r\n // Note that this regex has the 'sticky' flag set, and thus is stateful.\r\n // Do not hoist it outside of this function body!\r\n const reHTMLUserComment = /\\[([\\w-]+):\"([^[\\]]+)\" at (\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{0,5})?(?:[-+]\\d{2}:\\d{2}|Z))\\] ([^[]*)(?: |$)/y;\r\n\r\n const [ , threadId, commentInner] = m1;\r\n\r\n while (reHTMLUserComment.lastIndex !== commentInner.length) {\r\n const m2 = reHTMLUserComment.exec(commentInner);\r\n if (!m2) {\r\n // Something in this comment didn't feel like a user comment\r\n // console.warn(\"Invalid comment\");\r\n return null;\r\n }\r\n\r\n const [ , commentId, author, iso8601, content] = m2;\r\n comments.push({\r\n commentId: htmlUnescapeComment(commentId),\r\n author: htmlUnescapeComment(author),\r\n created: new Date(iso8601),\r\n content: htmlUnescapeComment(content)\r\n });\r\n }\r\n\r\n if (comments.length === 0) {\r\n return null;\r\n }\r\n\r\n return {\r\n threadId: htmlUnescapeComment(threadId),\r\n comments\r\n };\r\n\r\n}\r\n\r\nexport function formatAsHTMLComment(thread: CommentThread) {\r\n if (!isValidId(thread.threadId)) {\r\n throw new Error(\"Malformed comment thread id\");\r\n }\r\n\r\n const result = thread.comments.map<string>(c => {\r\n const commentId = c.commentId;\r\n const author = htmlEscapeComment(c.author);\r\n const created = c.created.toISOString();\r\n const content = htmlEscapeComment(c.content);\r\n\r\n if (!isValidId(commentId) || author.length === 0) {\r\n throw new Error(\"Malformed comment\");\r\n }\r\n\r\n return `[${commentId}:\"${author}\" at ${created}] ${content}`;\r\n }).join(\" \");\r\n\r\n return `<!--#${thread.threadId}${result}-->`;\r\n}\r\n\r\nfunction isValidId(str: string) {\r\n return /^[\\w-]+$/.test(str);\r\n}\r\n\r\nfunction htmlEscapeComment(str: string) {\r\n return str.replace(/[<>&\"\\r\\n]/g, m => {\r\n switch(m) {\r\n case \"<\": return \"<\";\r\n case \">\": return \">\";\r\n case \"&\": return \"&\";\r\n case \"\\\"\": return \""\";\r\n case \"\\r\": return \" \";\r\n case \"\\n\": return \" \";\r\n case \"#\": return \"#\";\r\n case \"[\": return \"[\";\r\n case \"]\": return \"]\";\r\n }\r\n throw new Error(`Unexpected character ${m}`);\r\n });\r\n}\r\n\r\nexport function htmlUnescapeComment(html: string) {\r\n return new DOMParser().parseFromString(html, \"text/html\").documentElement.textContent!;\r\n}\r\n\r\nexport function createCommentId() {\r\n return randomAlphanumeric(8);\r\n}\r\n\r\nexport function createCommentItemNode(schema: Schema, author: string) {\r\n const commentId = createCommentId();\r\n return schema.nodes.user_comment_item.create({\r\n commentId,\r\n author,\r\n created: null,\r\n content: \"\",\r\n provisional: true\r\n });\r\n}\r\n\r\nexport function findCommentThread(threadId: string, state: EditorState) {\r\n const cache = getUserCommentNodeCache(state);\r\n\r\n let begin: NodeWithPos | undefined;\r\n let end: NodeWithPos | undefined;\r\n\r\n cache.getIndex().forEach(nodeWithPos => {\r\n if (nodeWithPos.node.attrs.threadId === threadId) {\r\n if (nodeWithPos.node.type === state.schema.nodes.user_comment_begin) {\r\n begin = nodeWithPos;\r\n } else if (nodeWithPos.node.type === state.schema.nodes.user_comment_end) {\r\n end = nodeWithPos;\r\n }\r\n }\r\n });\r\n\r\n if (!!begin !== !!end) {\r\n begin = undefined;\r\n end = undefined;\r\n }\r\n return [begin, end];\r\n}\r\n\r\nexport function deleteCommentThread(threadId: string, state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const [begin, end] = findCommentThread(threadId, state);\r\n if (!begin || !end) {\r\n return false;\r\n }\r\n if (begin.pos >= end.pos) {\r\n // This shouldn't ever be\r\n throw new Error(\"Comment thread begin was not earlier than comment thread end!\");\r\n }\r\n\r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.delete(end.pos, end.pos + end.node.nodeSize);\r\n tr.delete(begin.pos, begin.pos + begin.node.nodeSize);\r\n tr.setMeta(UserCommentPluginKey, true);\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function findCommentItem(commentId: string, thread: string | NodeWithPos, state: EditorState) : NodeWithPos | null {\r\n const threadNode = resolveThread(thread, state);\r\n if (!threadNode) {\r\n return null;\r\n }\r\n\r\n let commentNode: NodeWithPos | null = null;\r\n traverseNodes(state.doc, threadNode.pos + 1, threadNode.pos + threadNode.node.nodeSize - 1,\r\n (node, pos) => {\r\n if (node.type === state.schema.nodes.user_comment_item) {\r\n if (node.attrs.commentId === commentId) {\r\n commentNode = {node, pos};\r\n }\r\n }\r\n }\r\n );\r\n\r\n return commentNode;\r\n}\r\n\r\nexport function saveComment(commentId: string, threadId: string,\r\n content: string, state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n\r\n const [begin, end] = findCommentThread(threadId, state);\r\n if (!begin || !end) {\r\n return false;\r\n }\r\n\r\n const commentItem = findCommentItem(commentId, begin, state);\r\n if (!commentItem) {\r\n return false;\r\n }\r\n \r\n if (dispatch) {\r\n const tr = state.tr;\r\n tr.setMeta(UserCommentPluginKey, true);\r\n\r\n if (begin.node.attrs.provisional) {\r\n setNodeAttrs(tr, begin, {provisional: undefined});\r\n }\r\n if (end.node.attrs.provisional) {\r\n setNodeAttrs(tr, end, {provisional: undefined});\r\n }\r\n\r\n if (commentItem.node.attrs.provisional) {\r\n setNodeAttrs(tr, commentItem, {\r\n provisional: undefined,\r\n created: new Date()\r\n });\r\n }\r\n if (content) {\r\n tr.insertText(content, commentItem.pos + 1, commentItem.pos + commentItem.node.nodeSize - 1);\r\n } else {\r\n tr.delete(commentItem.pos + 1, commentItem.pos + commentItem.node.nodeSize - 1);\r\n }\r\n\r\n dispatch(tr);\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function deleteComment(commentId: string, thread: string | NodeWithPos, state: EditorState, dispatch?: (tr: Transaction) => void) {\r\n const threadNode = resolveThread(thread, state);\r\n if (!threadNode) {\r\n return false;\r\n }\r\n\r\n const commentItem = findCommentItem(commentId, threadNode, state);\r\n if (!commentItem) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n if (threadNode.node.childCount > 1) {\r\n // delete just the comment\r\n const tr = state.tr;\r\n tr.delete(commentItem.pos, commentItem.pos + commentItem.node.nodeSize);\r\n dispatch(tr);\r\n } else {\r\n // delete the whole thread\r\n deleteCommentThread(threadNode.node.attrs.threadId, state, dispatch);\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction resolveThread(thread: string | NodeWithPos, state: EditorState) : NodeWithPos | undefined {\r\n if (typeof(thread) === \"string\") {\r\n const [threadNode] = findCommentThread(thread, state);\r\n return threadNode;\r\n } else {\r\n const foundNode = state.doc.nodeAt(thread.pos);\r\n if (foundNode && foundNode.eq(thread.node)) {\r\n return thread;\r\n } else {\r\n // The node given to us was out of date or not found\r\n return resolveThread(thread.node.attrs.threadId, state);\r\n }\r\n }\r\n}\r\n","/*\r\n * common.tsx\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport function getThreadElement(threadId: any) {\r\n return document.getElementById(createThreadIdAttr(threadId));\r\n}\r\n\r\nexport function createThreadIdAttr(commentId: string) {\r\n return `comment-thread-view-${commentId}`;\r\n}\r\n\r\nexport function createCommentIdAttr(commentId: string) {\r\n return `comment-item-view-${commentId}`;\r\n}\r\n\r\nexport function focusComment(threadId: string, commentId: string) {\r\n const selector = [\r\n `[id='${createThreadIdAttr(threadId)}'].pm-user-comment-view`,\r\n `[id='${createCommentIdAttr(commentId)}'].pm-user-comment-item`,\r\n '.pm-user-comment-content'\r\n ];\r\n\r\n const el = document.querySelector(selector.join(' ')) as HTMLElement;\r\n if (el) {\r\n el.focus();\r\n }\r\n}\r\n","/*\r\n * layout.tsx\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { NodeWithPos } from 'prosemirror-utils';\r\nimport { getUserCommentNodeCache, getUserCommentNodePairs } from '../user_comment-cache';\r\nimport { getThreadElement } from './common';\r\nimport { editorScrollContainer } from '../../../api/scroll';\r\n\r\n// Keep comment UI elements in sync with corresponding editor nodes\r\nexport function synchronizeCommentViewPositions(view: EditorView) {\r\n const schema = view.state.schema;\r\n\r\n return () => {\r\n const topOfDocument = view.coordsAtPos(0).top + scrollPos(view).top;\r\n\r\n const cache = getUserCommentNodeCache(view.state);\r\n if (cache.length === 0) {\r\n // Nothing to do.\r\n return;\r\n }\r\n const head = view.state.selection.head;\r\n const comments = getUserCommentNodePairs(schema, cache);\r\n const activeThreads = comments\r\n .filter(({begin, end}) => (begin.pos <= head && end.pos + end.node.nodeSize >= head))\r\n .map(({begin}) => begin);\r\n \r\n const activeThreadId = activeThreads.length > 0 ?\r\n activeThreads[activeThreads.length - 1].node.attrs.threadId :\r\n null;\r\n\r\n layoutCommentViews(comments.map(({begin}) => begin), activeThreadId, view, topOfDocument);\r\n };\r\n}\r\n\r\n// Vertically position the individual comment view divs (one per thread).\r\nfunction layoutCommentViews(threads: NodeWithPos[], activeThreadId: string, view: EditorView, topOfDocument: number) {\r\n const kPadding = 12;\r\n\r\n const container = document.querySelector(\"div.pm-annotations\") as (HTMLElement | undefined);\r\n if (!container) {\r\n return;\r\n }\r\n\r\n interface LayoutSpec {\r\n // The div.pm-user-comment-view for this comment.\r\n readonly el: HTMLElement;\r\n \r\n // The height of the el, in pixels.\r\n readonly height: number;\r\n \r\n // The y-position of the comment's begin node in the document, in pixels.\r\n // This is the y-position we'd use if this was the only comment.\r\n readonly idealTop: number;\r\n \r\n // The y-position we'd use to make no comment views overlap, if none of the\r\n // comments are active. This will be assigned to el.style.top, which is not\r\n // animated. This value may be affected by doc mutation (including comment\r\n // mutation), scrolling, window resizing, but NOT by selection changes. We\r\n // don't want any of those events to cause animated movement of comment UI.\r\n actualTop?: number;\r\n\r\n // The actual y-position we should use, after shuffling all the elements\r\n // around so that if any comment is active, its el is vertically aligned\r\n // with its document node. The difference between finalTop and actualTop\r\n // will be assigned to el.style.transform:translateY(xxx), which is\r\n // animated. This should only be affected by selection change, the one\r\n // situation where we want to animate the comment UI.\r\n finalTop?: number;\r\n }\r\n\r\n // Array of intermediate data structures that hold all the info we need to\r\n // perfom the layout. We'll build this up over a few passes, mutating each\r\n // object repeatedly.\r\n const layoutSpecs = new Array<LayoutSpec>();\r\n let activeThreadIndex = -1;\r\n\r\n // 1. Find all relevant CommentView divs and create a LayoutSpec for each.\r\n for (const thread of threads) {\r\n const threadId = thread.node.attrs.threadId;\r\n const satelliteEl = getThreadElement(threadId)!;\r\n if (!satelliteEl) {\r\n continue; // This can happen during undo/redo\r\n }\r\n\r\n // As long as we're here, try to find the active thread ID.\r\n // We also need to modify classes because they may affect the height of the\r\n // satelliteEl.\r\n if (threadId === activeThreadId) {\r\n activeThreadIndex = layoutSpecs.length;\r\n satelliteEl.classList.add(\"pm-user-comment-active\");\r\n } else {\r\n satelliteEl.classList.remove(\"pm-user-comment-active\");\r\n }\r\n\r\n layoutSpecs.push({\r\n el: satelliteEl,\r\n height: satelliteEl.getBoundingClientRect().height,\r\n idealTop: view.coordsAtPos(thread.pos).top - topOfDocument,\r\n // we'll populate these soon\r\n actualTop: undefined,\r\n finalTop: undefined\r\n });\r\n }\r\n\r\n // Populate actualTop: go from the top down, enforcing at least PADDING pixels\r\n // of spacing between each layoutSpec. The actualTop values will be used for\r\n // el.style.top.\r\n layoutSpecs.reduce((minTop, layoutSpec) => {\r\n layoutSpec.actualTop = Math.max(minTop, layoutSpec.idealTop);\r\n // The preceding line's mutation is the important side-effect. Return\r\n // the minTop value for the next iteration.\r\n return layoutSpec.actualTop + layoutSpec.height + kPadding;\r\n }, -Infinity);\r\n\r\n if (activeThreadIndex >= 0) {\r\n // If a thread is active, finalTop needs to be populated; it represents a\r\n // final pass of adjustments so that the active thread's UI is vertically\r\n // aligned with its corresponding document content.\r\n\r\n const active = layoutSpecs[activeThreadIndex];\r\n\r\n // Regardless of where the preceding logic wanted the active thread UI to\r\n // appear, we're forcing it to appear with its content.\r\n active.finalTop = active.idealTop;\r\n \r\n // Either of these might be zero-length, that's fine. (Note that the second\r\n // parameter is exclusive)\r\n const commentsAbove = layoutSpecs.slice(0, activeThreadIndex);\r\n const commentsBelow = layoutSpecs.slice(activeThreadIndex + 1);\r\n\r\n // Comment threads ABOVE the currently selected one are adjusted starting\r\n // from the bottom (hence reduceRight). Scoot each one up just enough to get\r\n // out of the way.\r\n commentsAbove.reduceRight(\r\n (maxBottom, layoutSpec) => {\r\n // Use actualTop as starting point. If we were to use idealTop, then\r\n // when a comment was selected, preceding comments that already had a gap\r\n // to this comment would still move (because \"gravity\" has changed).\r\n layoutSpec.finalTop = Math.min(maxBottom - layoutSpec.height, layoutSpec.actualTop!);\r\n // The preceding line's mutation is the important side-effect. Return\r\n // the maxBottom value for the next iteration.\r\n return layoutSpec.finalTop! - kPadding;\r\n },\r\n // The starting y-position above which these comments should be positioned\r\n active.finalTop! - kPadding\r\n );\r\n\r\n // Comment threads BELOW the currently selected one are adjusted are\r\n // adjusted from the top, not the bottom. Since the active comment UI can\r\n // only have moved upward or not at all, but definitely NOT downward, it's\r\n // not strictly necessary to adjust the positions of the things below; but\r\n // the algorithm here makes the behavior feel more \"physical\".\r\n commentsBelow.reduce(\r\n (minTop, layoutSpec) => {\r\n // Use idealTop as the starting point (unlike with commentsAbove). This\r\n // evokes the feeling that any threads that have been \"pushed down\" by a\r\n // comment move up when that comment is selected as that pressure is\r\n // relieved.\r\n layoutSpec.finalTop = Math.max(minTop, layoutSpec.idealTop);\r\n // The preceding line's mutation is the important side-effect. Return\r\n // the minTop value for the next iteration.\r\n return layoutSpec.finalTop! + layoutSpec.height + kPadding;\r\n },\r\n // The starting y-position below which these comments should be positioned\r\n active.finalTop! + active.height + kPadding\r\n );\r\n }\r\n\r\n // Now that actualTop and finalTop have been finalized, actually mutate the\r\n // DOM. Hopefully doing this all at once at the end will minimize reflows.\r\n layoutSpecs.forEach((layoutSpec) => {\r\n layoutSpec.el.style.top = layoutSpec.actualTop + \"px\";\r\n // Note that falsy layoutSpec.finalTop could mean undefined or 0; we don't\r\n // care about that distinction in this case.\r\n if (layoutSpec.finalTop) {\r\n layoutSpec.el.style.transform = `translateY(${layoutSpec.finalTop - layoutSpec.actualTop!}px)`;\r\n } else {\r\n layoutSpec.el.style.transform = \"\";\r\n }\r\n });\r\n}\r\n\r\nfunction scrollPos(view: EditorView) {\r\n const node = view.domAtPos(0)?.node;\r\n if (node?.nodeType !== Node.ELEMENT_NODE) {\r\n return {top: 0, left: 0};\r\n }\r\n\r\n const scrollEl = editorScrollContainer(node as HTMLElement);\r\n return {\r\n top: scrollEl.scrollTop,\r\n left: scrollEl.scrollLeft\r\n };\r\n}\r\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport default index;\n","import * as React from 'react';\nimport useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\n\nvar useLatest = function useLatest(value) {\n var ref = React.useRef(value);\n useIsomorphicLayoutEffect(function () {\n ref.current = value;\n });\n return ref;\n};\n\nexport { useLatest as default };\n","import { useRef, useCallback } from 'react';\n\nvar updateRef = function updateRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n ref.current = value;\n};\n\nvar useComposedRef = function useComposedRef(libRef, userRef) {\n var prevUserRef = useRef();\n return useCallback(function (instance) {\n libRef.current = instance;\n\n if (prevUserRef.current) {\n updateRef(prevUserRef.current, null);\n }\n\n prevUserRef.current = userRef;\n\n if (!userRef) {\n return;\n }\n\n updateRef(userRef, instance);\n }, [userRef]);\n};\n\nexport default useComposedRef;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport { useLayoutEffect, forwardRef, useRef, createElement } from 'react';\nimport useLatest from 'use-latest';\nimport useComposedRef from 'use-composed-ref';\n\nvar HIDDEN_TEXTAREA_STYLE = {\n 'min-height': '0',\n 'max-height': 'none',\n height: '0',\n visibility: 'hidden',\n overflow: 'hidden',\n position: 'absolute',\n 'z-index': '-1000',\n top: '0',\n right: '0'\n};\n\nvar forceHiddenStyles = function forceHiddenStyles(node) {\n Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(function (key) {\n node.style.setProperty(key, HIDDEN_TEXTAREA_STYLE[key], 'important');\n });\n};\n\n// export type CalculatedNodeHeights = [height: number, rowHeight: number];\n// https://github.com/microsoft/TypeScript/issues/28259\n\nvar hiddenTextarea = null;\n\nvar getHeight = function getHeight(node, sizingData) {\n var height = node.scrollHeight;\n\n if (sizingData.sizingStyle.boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n return height + sizingData.borderSize;\n } // remove padding, since height = content\n\n\n return height - sizingData.paddingSize;\n};\n\nfunction calculateNodeHeight(sizingData, value, minRows, maxRows) {\n if (minRows === void 0) {\n minRows = 1;\n }\n\n if (maxRows === void 0) {\n maxRows = Infinity;\n }\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n hiddenTextarea.setAttribute('tabindex', '-1');\n hiddenTextarea.setAttribute('aria-hidden', 'true');\n forceHiddenStyles(hiddenTextarea);\n }\n\n if (hiddenTextarea.parentNode === null) {\n document.body.appendChild(hiddenTextarea);\n }\n\n var paddingSize = sizingData.paddingSize,\n borderSize = sizingData.borderSize,\n sizingStyle = sizingData.sizingStyle;\n var boxSizing = sizingStyle.boxSizing;\n Object.keys(sizingStyle).forEach(function (_key) {\n var key = _key;\n hiddenTextarea.style[key] = sizingStyle[key];\n });\n forceHiddenStyles(hiddenTextarea);\n hiddenTextarea.value = value;\n var height = getHeight(hiddenTextarea, sizingData); // measure height of a textarea with a single row\n\n hiddenTextarea.value = 'x';\n var rowHeight = hiddenTextarea.scrollHeight - paddingSize;\n var minHeight = rowHeight * minRows;\n\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n\n height = Math.max(minHeight, height);\n var maxHeight = rowHeight * maxRows;\n\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n\n height = Math.min(maxHeight, height);\n return [height, rowHeight];\n}\n\nvar noop = function noop() {};\nvar pick = function pick(props, obj) {\n return props.reduce(function (acc, prop) {\n acc[prop] = obj[prop];\n return acc;\n }, {});\n};\n\nvar SIZING_STYLE = ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'boxSizing', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'letterSpacing', 'lineHeight', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', // non-standard\n'tabSize', 'textIndent', // non-standard\n'textRendering', 'textTransform', 'width', 'wordBreak'];\nvar isIE = !!document.documentElement.currentStyle ;\n\nvar getSizingData = function getSizingData(node) {\n var style = window.getComputedStyle(node);\n\n if (style === null) {\n return null;\n }\n\n var sizingStyle = pick(SIZING_STYLE, style);\n var boxSizing = sizingStyle.boxSizing; // probably node is detached from DOM, can't read computed dimensions\n\n if (boxSizing === '') {\n return null;\n } // IE (Edge has already correct behaviour) returns content width as computed width\n // so we need to add manually padding and border widths\n\n\n if (isIE && boxSizing === 'border-box') {\n sizingStyle.width = parseFloat(sizingStyle.width) + parseFloat(sizingStyle.borderRightWidth) + parseFloat(sizingStyle.borderLeftWidth) + parseFloat(sizingStyle.paddingRight) + parseFloat(sizingStyle.paddingLeft) + 'px';\n }\n\n var paddingSize = parseFloat(sizingStyle.paddingBottom) + parseFloat(sizingStyle.paddingTop);\n var borderSize = parseFloat(sizingStyle.borderBottomWidth) + parseFloat(sizingStyle.borderTopWidth);\n return {\n sizingStyle: sizingStyle,\n paddingSize: paddingSize,\n borderSize: borderSize\n };\n};\n\nvar useWindowResizeListener = function useWindowResizeListener(listener) {\n var latestListener = useLatest(listener);\n useLayoutEffect(function () {\n var handler = function handler(event) {\n latestListener.current(event);\n };\n\n window.addEventListener('resize', handler);\n return function () {\n window.removeEventListener('resize', handler);\n };\n }, []);\n};\n\nvar TextareaAutosize = function TextareaAutosize(_ref, userRef) {\n var cacheMeasurements = _ref.cacheMeasurements,\n maxRows = _ref.maxRows,\n minRows = _ref.minRows,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? noop : _ref$onChange,\n _ref$onHeightChange = _ref.onHeightChange,\n onHeightChange = _ref$onHeightChange === void 0 ? noop : _ref$onHeightChange,\n props = _objectWithoutPropertiesLoose(_ref, [\"cacheMeasurements\", \"maxRows\", \"minRows\", \"onChange\", \"onHeightChange\"]);\n\n if (process.env.NODE_ENV !== 'production' && props.style) {\n if ('maxHeight' in props.style) {\n throw new Error('Using `style.maxHeight` for <TextareaAutosize/> is not supported. Please use `maxRows`.');\n }\n\n if ('minHeight' in props.style) {\n throw new Error('Using `style.minHeight` for <TextareaAutosize/> is not supported. Please use `minRows`.');\n }\n }\n\n var isControlled = props.value !== undefined;\n var libRef = useRef(null);\n var ref = useComposedRef(libRef, userRef);\n var heightRef = useRef(0);\n var measurementsCacheRef = useRef();\n\n var resizeTextarea = function resizeTextarea() {\n var node = libRef.current;\n var nodeSizingData = cacheMeasurements && measurementsCacheRef.current ? measurementsCacheRef.current : getSizingData(node);\n\n if (!nodeSizingData) {\n return;\n }\n\n measurementsCacheRef.current = nodeSizingData;\n\n var _calculateNodeHeight = calculateNodeHeight(nodeSizingData, node.value || node.placeholder || 'x', minRows, maxRows),\n height = _calculateNodeHeight[0],\n rowHeight = _calculateNodeHeight[1];\n\n if (heightRef.current !== height) {\n heightRef.current = height;\n node.style.setProperty('height', height + \"px\", 'important');\n onHeightChange(height, {\n rowHeight: rowHeight\n });\n }\n };\n\n var handleChange = function handleChange(event) {\n if (!isControlled) {\n resizeTextarea();\n }\n\n onChange(event);\n };\n\n {\n useLayoutEffect(resizeTextarea);\n useWindowResizeListener(resizeTextarea);\n }\n\n return /*#__PURE__*/createElement(\"textarea\", _extends({}, props, {\n onChange: handleChange,\n ref: ref\n }));\n};\n\nvar index = /* #__PURE__ */forwardRef(TextareaAutosize);\n\nexport default index;\n","/*\r\n * react-hooks.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { useEffect, useRef } from \"react\";\r\n\r\nexport function usePrevious<T>(value: T): T | undefined {\r\n const ref = useRef<T>();\r\n useEffect(() => {\r\n ref.current = value;\r\n });\r\n return ref.current;\r\n}","/*\r\n * comment-content.tsx\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { useEffect } from 'react';\r\nimport TextareaAutosize from 'react-textarea-autosize';\r\nimport { usePrevious } from '../../../api/react-hooks';\r\n\r\n\r\nexport interface ContentPanelProps {\r\n readonly editable: boolean;\r\n readonly onCommentChange: (content: string) => void;\r\n readonly onHeightChange: () => void;\r\n readonly content: string;\r\n}\r\n\r\nexport const ContentPanel: React.FC<ContentPanelProps> = (props) => {\r\n \r\n const contentEl = React.createRef<HTMLTextAreaElement>();\r\n\r\n const inputChangeListener = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\r\n props.onCommentChange(e.target.value || \"\")\r\n }\r\n\r\n // Without this, Enter and Backspace take effect in the main document even\r\n // when the focus is in the comment editor\r\n const keydownListener = (e: KeyboardEvent) => {\r\n e.stopPropagation();\r\n };\r\n\r\n useEffect(() => {\r\n contentEl.current!.addEventListener(\"keydown\", keydownListener);\r\n if (props.editable) {\r\n contentEl.current!.focus();\r\n }\r\n return () => {\r\n contentEl.current!.removeEventListener(\"keydown\", keydownListener);\r\n }\r\n }, []);\r\n\r\n const prevEditable = usePrevious(props.editable);\r\n useEffect(() => {\r\n if (props.editable && !prevEditable) {\r\n contentEl.current!.focus();\r\n }\r\n }, [props.editable])\r\n\r\n return <TextareaAutosize\r\n ref = {contentEl}\r\n className = \"pm-user-comment-content\"\r\n disabled = {!props.editable}\r\n value = {props.content}\r\n onChange = {inputChangeListener}\r\n onHeightChange = {props.onHeightChange}\r\n cacheMeasurements = {true}\r\n />;\r\n}\r\n","/*\r\n * comment-item.tsx\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport React, { useState, useRef, useEffect } from 'react';\r\nimport { createCommentIdAttr } from './common';\r\nimport { ContentPanel } from './comment-content';\r\n\r\ninterface CommentContainerProps {\r\n readonly commentId: string;\r\n readonly author: string;\r\n readonly created?: Date;\r\n readonly content: string;\r\n readonly readonly: boolean;\r\n readonly draft: boolean;\r\n readonly onCommentEditingChanged: (editing: boolean) => void;\r\n readonly onCommentChange: (content: string) => void;\r\n readonly onCommentChangeCancel: () => void;\r\n readonly onCommentDelete: () => void;\r\n readonly onHeightChange: () => void;\r\n}\r\n\r\nexport function CommentContainer(props: CommentContainerProps) {\r\n const [pendingContent, setPendingContent] = useState(\"\");\r\n const [dirty, setDirty] = useState(!!props.draft);\r\n const [editing, setEditing] = useState(!!props.draft);\r\n useEffect(() => {\r\n // If we're starting out in editing mode, we have to alert the parent.\r\n // (Surely there's a better way to do this?)\r\n if (editing) {\r\n props.onCommentEditingChanged(true);\r\n }\r\n }, []);\r\n\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleOK = () => {\r\n props.onCommentChange(pendingContent);\r\n setDirty(false);\r\n setEditing(false);\r\n props.onCommentEditingChanged(false);\r\n containerRef.current!.focus();\r\n };\r\n\r\n const handleCancel = () => {\r\n setDirty(false);\r\n setEditing(false);\r\n props.onCommentEditingChanged(false);\r\n containerRef.current!.focus();\r\n props.onCommentChangeCancel();\r\n };\r\n\r\n const handleCommentChange = (content: string) => {\r\n if (!dirty) {\r\n setDirty(true);\r\n }\r\n setPendingContent(content);\r\n };\r\n\r\n const handleHeightChange = () => {\r\n props.onHeightChange();\r\n };\r\n\r\n const handleBeginEditing = () => {\r\n if (!props.readonly) {\r\n setEditing(true);\r\n }\r\n props.onCommentEditingChanged(true);\r\n };\r\n\r\n const handleDelete = () => {\r\n props.onCommentDelete();\r\n props.onCommentEditingChanged(false);\r\n };\r\n\r\n const containerId = createCommentIdAttr(props.commentId);\r\n const containerClass = \"pm-user-comment-item\" + (dirty ? \" dirty\" : \"\");\r\n \r\n return <div ref={containerRef} id={containerId} className={containerClass} tabIndex={0}>\r\n <div className=\"pm-user-comment-header\">\r\n <div className=\"pm-user-comment-meta\">\r\n <div className=\"pm-user-comment-actions\">\r\n {!props.readonly && <button className={\"pm-user-comment-edit\" + (editing ? \" active\" : \"\")} onClick={handleBeginEditing}/>}\r\n <button className=\"pm-user-comment-delete\" onClick={handleDelete}/>\r\n </div>\r\n <div className=\"pm-user-comment-author\">{props.author}</div>\r\n {props.created && <div className=\"pm-user-comment-created\">{props.created.toLocaleString()}</div>}\r\n </div>\r\n </div>\r\n <ContentPanel content={dirty ? pendingContent : props.content}\r\n editable={!props.readonly && editing}\r\n onCommentChange={handleCommentChange}\r\n onHeightChange={handleHeightChange}/>\r\n {editing && <div className=\"pm-user-comment-footer\">\r\n <button onClick={handleOK} disabled={!dirty || !pendingContent}>Save</button>\r\n <button onClick={handleCancel}>Cancel</button>\r\n </div>}\r\n </div>;\r\n}\r\n","/*\r\n * comment-thread.tsx\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { findChildrenByType } from 'prosemirror-utils';\r\nimport React, { useState } from 'react';\r\nimport { deleteComment, findCommentItem, findCommentThread, createCommentItemNode, saveComment } from '../user_comment-model';\r\nimport { CommentContainer } from './comment-item';\r\nimport { synchronizeCommentViewPositions } from './layout';\r\n\r\ninterface CommentThreadContainerProps {\r\n readonly node: ProsemirrorNode;\r\n readonly view: EditorView;\r\n readonly username: string;\r\n\r\n // A callback to be invoked when the height of the thread changes\r\n readonly onHeightChange: (commentId: string) => void;\r\n\r\n // callback for when container loads\r\n readonly callback?: VoidFunction;\r\n}\r\n\r\n// Later, this will contain multiple CommentContainers\r\nexport function CommentThreadContainer({node, view, ...props}: CommentThreadContainerProps) {\r\n // An array of the comment ids in this thread that are currently in edit mode\r\n const [editingComments, setEditingComments] = useState([] as string[]);\r\n\r\n const handleCommentEditingChanged = (commentId: string, isEditing: boolean) => {\r\n const newValue = editingComments.filter(x => x !== commentId);\r\n if (isEditing) {\r\n newValue.push(commentId);\r\n }\r\n setEditingComments(newValue);\r\n };\r\n\r\n const commentItems = findChildrenByType(node, view.state.schema.nodes.user_comment_item);\r\n const commentIds = commentItems.map(comment => comment.node.attrs.commentId);\r\n const hasEditingChild = editingComments.filter(x => {\r\n // This filter just ensures that if any comment ids are still in the\r\n // editingComments list, but they're not actually present in this thread\r\n // (anymore), then we ignore them. I don't currently know of any way to get\r\n // into this state, but it has happened before (deleting a comment you're\r\n // still editing).\r\n return commentIds.indexOf(x) >= 0;\r\n }).length > 0;\r\n\r\n return <div ref={props.callback} className={\"pm-user-comment-thread \" + (hasEditingChild ? \" active\" : \"\")}>\r\n {\r\n commentItems.map(x => {\r\n const commentId = x.node.attrs.commentId;\r\n\r\n return <CommentContainer\r\n key = {x.node.attrs.commentId}\r\n commentId = {commentId}\r\n author = {x.node.attrs.author}\r\n content = {x.node.textContent}\r\n draft = {x.node.attrs.provisional}\r\n readonly = {props.username !== x.node.attrs.author}\r\n onCommentChange = {handleCommentChange.bind(null, node, view, commentId)}\r\n onCommentDelete = {handleCommentDelete.bind(null, node, view, commentId)}\r\n onCommentChangeCancel = {handleCommentChangeCancel.bind(props, node, view, commentId)}\r\n onCommentEditingChanged = {handleCommentEditingChanged.bind(null, commentId)}\r\n onHeightChange = {props.onHeightChange.bind(props, commentId)} />;\r\n })\r\n }\r\n <button\r\n className=\"pm-user-comment-add\"\r\n onClick={onAddComment.bind(null, node, view, props.username)}\r\n />\r\n </div>;\r\n}\r\n\r\nfunction handleCommentChange(node: ProsemirrorNode, view: EditorView, commentId: string, content: string) {\r\n saveComment(commentId, node.attrs.threadId, content, view.state, view.dispatch);\r\n}\r\n\r\nfunction handleCommentDelete(node: ProsemirrorNode, view: EditorView, commentId: string) {\r\n deleteComment(commentId, node.attrs.threadId, view.state, view.dispatch);\r\n}\r\n\r\nfunction handleCommentChangeCancel(node: ProsemirrorNode, view: EditorView, commentId: string) {\r\n const commentNode = findCommentItem(commentId, node.attrs.threadId, view.state);\r\n if (commentNode && commentNode.node.attrs.provisional) {\r\n deleteComment(commentId, node.attrs.threadId, view.state, view.dispatch);\r\n }\r\n \r\n const syncCommentViewPos = synchronizeCommentViewPositions(view);\r\n // TODO: This doesn't seem to work without a setTimeout, find out why\r\n setTimeout(syncCommentViewPos, 0);\r\n}\r\n\r\nfunction onAddComment(node: ProsemirrorNode, view: EditorView, author: string) {\r\n\r\n const [threadBegin] = findCommentThread(node.attrs.threadId, view.state);\r\n if (!threadBegin) {\r\n return;\r\n }\r\n\r\n const tr = view.state.tr;\r\n const newComment = createCommentItemNode(view.state.schema, author);\r\n tr.insert(threadBegin.pos + threadBegin.node.nodeSize - 1, newComment);\r\n view.dispatch(tr);\r\n\r\n return;\r\n}\r\n","/*\r\n * user.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorUIContext } from \"./ui-types\";\r\n\r\nexport function currentUsername(ui: EditorUIContext) {\r\n return ui.getUsername ? ui.getUsername() : 'norah.jones';\r\n}","/*\r\n * plugin.tsx\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Schema } from 'prosemirror-model';\r\nimport { Plugin } from 'prosemirror-state';\r\nimport { NodeView } from 'prosemirror-view';\r\nimport React from 'react';\r\nimport { onNodeAttached } from '../../../api/dom';\r\nimport { UserCommentViewPluginKey } from '../user_comment-constants';\r\nimport { synchronizeCommentViewPositions } from './layout';\r\nimport { createThreadIdAttr } from './common';\r\nimport { CommentThreadContainer } from './comment-thread';\r\nimport { EditorUI } from '../../../api/ui-types';\r\nimport { currentUsername } from '../../../api/user';\r\nimport { createRoot } from 'react-dom/client';\r\n\r\nexport class UserCommentViewPlugin extends Plugin {\r\n \r\n constructor(schema: Schema, ui: EditorUI) {\r\n super({\r\n key: UserCommentViewPluginKey,\r\n props: {\r\n nodeViews: {\r\n annotations(_node, view): NodeView {\r\n const div = document.createElement('div');\r\n div.classList.add('pm-annotations');\r\n while (pendingElements.length) {\r\n div.appendChild(pendingElements.shift()!);\r\n }\r\n div.addEventListener(\"focus\", synchronizeCommentViewPositions(view), true);\r\n div.addEventListener(\"blur\", synchronizeCommentViewPositions(view), true);\r\n\r\n onNodeAttached(div, document, () => {\r\n // Because we initially render TextareaAutosize on a detached DOM\r\n // node, the heights aren't correct. Firing a resize event on the\r\n // window forces them to re-autosize.\r\n window.dispatchEvent(new Event(\"resize\"));\r\n });\r\n\r\n return {\r\n dom: div,\r\n ignoreMutation: () => true,\r\n };\r\n },\r\n user_comment_begin(node, view, _getPos, decorations, innerDecorations) {\r\n\r\n const el = document.createElement(\"div\");\r\n const root = createRoot(el);\r\n el.classList.add('pm-user-comment-view');\r\n el.id = createThreadIdAttr(node.attrs.threadId);\r\n el.style.position = \"absolute\";\r\n el.style.zIndex = \"1000\";\r\n // Until `top` is synchronized with the node's position on screen,\r\n // don't show this view at all.\r\n el.style.top = \"-10000px\";\r\n \r\n // At document load time, the user_comment_begin nodes are instantiated\r\n // before the annotations div (that will ultimately parent them) exists.\r\n // Use a buffer (pendingElements) to store them.\r\n // TODO: would love a better way to get ahold of the annotations div.\r\n const annotationEl = document.querySelector(\"div.pm-annotations\");\r\n if (annotationEl) {\r\n annotationEl.appendChild(el);\r\n } else {\r\n pendingElements.push(el);\r\n }\r\n\r\n const inlineEl = document.createElement(\"span\");\r\n inlineEl.style.textDecoration = \"underline\";\r\n\r\n const syncCommentViewPos = synchronizeCommentViewPositions(view);\r\n function handleHeightChange() {\r\n syncCommentViewPos();\r\n }\r\n\r\n const nodeView: NodeView = {\r\n dom: inlineEl,\r\n contentDOM: null, // Set to inlineEl to show comment in document (for debugging)\r\n update(newNode) {\r\n if (newNode.type !== schema.nodes.user_comment_begin) {\r\n // Not sure why this is required, but sometimes we get called in this state\r\n // when the node is being deleted; if we return true, then the node is deleted\r\n // but our destroy() is never called. If we return false then destroy() is\r\n // called correctly. You can repro this by putting a comment directly between\r\n // two RawInline nodes.\r\n return false;\r\n }\r\n\r\n el.id = createThreadIdAttr(newNode.attrs.threadId);\r\n node = newNode;\r\n const username = currentUsername(ui.context);\r\n\r\n root.render(\r\n <CommentThreadContainer\r\n node = {newNode}\r\n view = {view}\r\n username = {username}\r\n onHeightChange = {handleHeightChange}\r\n callback={syncCommentViewPos}\r\n />,\r\n );``\r\n\r\n return true;\r\n },\r\n // selectNode() {},\r\n // deselectNode() {},\r\n // setSelection(anchor: number, head: number, root: Document) {},\r\n // stopEvent(event) { return false; },\r\n // ignoreMutation(p: MutationRecord | {type: 'selection'; target: Element;}) {},\r\n destroy() {\r\n root.unmount();\r\n el.remove();\r\n }\r\n };\r\n\r\n nodeView.update!(node, decorations, innerDecorations);\r\n\r\n return nodeView;\r\n },\r\n },\r\n }\r\n });\r\n const pendingElements: HTMLElement[] = [];\r\n }\r\n}\r\n","/*\r\n * user_comment.ts\r\n *\r\n * Copyright (C) 2019-20 by RStudio, PBC\r\n *\r\n * Unless you have received this program directly from RStudio pursuant\r\n * to the terms of a commercial license agreement with RStudio, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n/**\r\n * TODO\r\n * - See if I can use ContentMatch to find the place to insert the inline\r\n * replacement for block comment (ref. exitNode in editor.ts)\r\n * - [Design] Hovering over the comment should indicate/emphasize the\r\n * corresponding commented text\r\n * - Comments at the very bottom of a tall page can run off the bottom of the\r\n * screen\r\n */\r\n\r\n /**\r\n * user_comment_begin\r\n * {threadId: string}\r\n * user_comment_item+\r\n * {commentId: string, author: string, created: Date}\r\n * user_comment_content\r\n * user_comment_end\r\n * {threadId: string}\r\n */\r\n\r\n\r\nimport { Schema, Node as ProsemirrorNode, Fragment } from 'prosemirror-model';\r\nimport { Plugin, EditorState, Transaction, EditorStateConfig } from \"prosemirror-state\";\r\nimport { DecorationSet, EditorView, Decoration } from \"prosemirror-view\";\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { Extension, ExtensionContext } from '../../api/extension';\r\nimport { PandocOutput, ProsemirrorWriter } from '../../api/pandoc';\r\n\r\n\r\nimport { UserCommentNodeCachePlugin, getUserCommentNodeCache } from './user_comment-cache';\r\nimport { UserCommentPluginKey } from './user_comment-constants';\r\nimport { userCommentBlocksToInlineFixup, userCommentAppendTransaction } from './user_comment-fixup';\r\nimport { Comment, parseFromHTMLComment, formatAsHTMLComment, createCommentId, createCommentItemNode, htmlUnescapeComment } from './user_comment-model';\r\n\r\nimport { synchronizeCommentViewPositions } from './ui/layout';\r\nimport { UserCommentViewPlugin } from './ui/plugin';\r\nimport { focusComment } from './ui/common';\r\n\r\nimport './user_comment-styles.css';\r\nimport { LayoutEvent, ScrollEvent } from '../../api/event-types';\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { currentUsername } from '../../api/user';\r\n\r\nconst kHTMLUserCommentEnd = /^<!--\\/#([\\w-]+)-->$/;\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n\r\n const { pandocExtensions, events, ui, options } = context;\r\n\r\n // disable if commenting is disabled\r\n if (!options.commenting) {\r\n return null;\r\n }\r\n\r\n // short circuit to no extension if raw HTML is not supported\r\n if (!pandocExtensions.raw_html) {\r\n return null;\r\n }\r\n\r\n // return the extension\r\n return {\r\n view: (view: EditorView) => {\r\n // No need to unsubscribe because we live as long as the view\r\n events.subscribe(LayoutEvent, synchronizeCommentViewPositions(view));\r\n events.subscribe(ScrollEvent, synchronizeCommentViewPositions(view));\r\n },\r\n nodes: [\r\n // We have two almost-identical nodes to define: user_comment_begin and\r\n // user_comment_begin_block. So create a little true,false array and\r\n // map over it to create the two PandocNodes we want.\r\n {\r\n name: 'user_comment_begin',\r\n spec: {\r\n inline: true,\r\n selectable: false,\r\n defining: true,\r\n skip: true,\r\n content: \"user_comment_item+\",\r\n attrs: {\r\n threadId: { default: \"\" },\r\n // When true, this comment thread is a new draft. It should not be\r\n // written to the Pandoc output until it is committed (provisional:\r\n // false).\r\n provisional: { default: false }\r\n },\r\n group: \"inline\",\r\n parseDOM: [\r\n {\r\n tag: \"span.pm-user-comment.pm-user-comment-begin\",\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n threadId: el.getAttribute('data-thread-id'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n const attr = {\r\n class: 'pm-user-comment pm-user-comment-begin',\r\n 'data-thread-id': node.attrs.threadId,\r\n };\r\n return ['span', attr, 0];\r\n },\r\n },\r\n pandoc: {\r\n inlineHTMLReader: readPandocUserCommentBegin,\r\n writer(output: PandocOutput, node: ProsemirrorNode) {\r\n if (node.attrs.provisional) {\r\n return;\r\n }\r\n\r\n const comments: Comment[] = [];\r\n node.content.forEach(n => {\r\n if (n.type.name === 'user_comment_item') {\r\n if (!n.attrs.provisional) {\r\n comments.push({\r\n commentId: n.attrs.commentId as string,\r\n author: n.attrs.author as string,\r\n created: n.attrs.created as Date,\r\n content: n.textContent\r\n });\r\n }\r\n }\r\n });\r\n const htmlComment = formatAsHTMLComment({ threadId: node.attrs.threadId, comments });\r\n output.writeRawMarkdown(htmlComment);\r\n },\r\n },\r\n },\r\n {\r\n name: 'user_comment_item',\r\n spec: {\r\n inline: true,\r\n selectable: false,\r\n defining: true,\r\n skip: true,\r\n content: \"text*\",\r\n attrs: {\r\n commentId: { default: 'unknown' },\r\n author: { default: '' },\r\n created: { default: null },\r\n provisional: { default: undefined }\r\n },\r\n // No group\r\n parseDOM: [\r\n {\r\n tag: `span.pm-user-comment-item`,\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n commentId: el.getAttribute('data-comment-id'),\r\n author: el.getAttribute('data-author'),\r\n created: new Date(el.getAttribute('data-created') as string),\r\n content: el.getAttribute('data-content'),\r\n };\r\n },\r\n getContent(node, schema) {\r\n const content: ProsemirrorNode[] = [];\r\n if (node.textContent) {\r\n content.push(schema.text(node.textContent));\r\n }\r\n return Fragment.from(content);\r\n }\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n const attr = {\r\n class: 'pm-user-comment-item',\r\n 'data-comment-id': node.attrs.commentId,\r\n 'data-author': node.attrs.author,\r\n 'data-created': (node.attrs.created as Date).toISOString(),\r\n 'data-content': node.attrs.content,\r\n };\r\n return ['span', attr, 0];\r\n },\r\n },\r\n // No pandoc serialization--handled at the thread level\r\n pandoc: {}\r\n },\r\n {\r\n name: 'user_comment_end',\r\n spec: {\r\n inline: true,\r\n selectable: false,\r\n skip: true,\r\n attrs: {\r\n threadId: { default: -1 },\r\n provisional: { default: false }\r\n },\r\n group: 'inline',\r\n parseDOM: [\r\n {\r\n tag: 'span.pm-user-comment.pm-user-comment-end',\r\n getAttrs(dom: Node | string) {\r\n const el = dom as Element;\r\n return {\r\n threadId: el.getAttribute('data-thread-id'),\r\n };\r\n },\r\n },\r\n ],\r\n toDOM(node: ProsemirrorNode) {\r\n const attr = {\r\n class: 'pm-user-comment pm-user-comment-end',\r\n 'data-thread-id': node.attrs.threadId,\r\n };\r\n return ['span', attr];\r\n },\r\n },\r\n pandoc: {\r\n inlineHTMLReader: readPandocUserCommentEnd,\r\n writer(output: PandocOutput, node: ProsemirrorNode) {\r\n if (node.attrs.provisional) {\r\n return;\r\n }\r\n const threadId = htmlEscape(node.attrs.threadId);\r\n const str = `<!--/#${threadId}-->`;\r\n output.writeRawMarkdown(str);\r\n },\r\n },\r\n },\r\n ],\r\n\r\n // insert command\r\n commands(schema: Schema) {\r\n return [new InsertUserCommentCommand(schema, ui)];\r\n },\r\n\r\n plugins(schema: Schema) {\r\n return [\r\n new UserCommentNodeCachePlugin(schema),\r\n new InsertUserCommentPlugin(schema, ui),\r\n new UserCommentPlugin(schema),\r\n new UserCommentViewPlugin(schema, ui),\r\n ];\r\n },\r\n\r\n fixups(schema: Schema) {\r\n return [\r\n userCommentBlocksToInlineFixup(schema)\r\n ];\r\n },\r\n\r\n };\r\n};\r\n\r\nfunction readPandocUserCommentBegin(schema: Schema, html: string, writer?: ProsemirrorWriter) {\r\n const commentThread = parseFromHTMLComment(html);\r\n if (!commentThread) {\r\n return false;\r\n }\r\n\r\n if (writer) {\r\n const threadAttr = {\r\n threadId: commentThread.threadId\r\n };\r\n \r\n writer.openNode(schema.nodes.user_comment_begin, threadAttr);\r\n for (const comment of commentThread.comments) {\r\n const attr = {\r\n commentId: comment.commentId,\r\n author: comment.author,\r\n created: comment.created,\r\n };\r\n writer.openNode(schema.nodes.user_comment_item, attr);\r\n writer.writeText(comment.content);\r\n writer.closeNode();\r\n }\r\n writer.closeNode();\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction readPandocUserCommentEnd(schema: Schema, html: string, writer?: ProsemirrorWriter) {\r\n const m = kHTMLUserCommentEnd.exec(html);\r\n if (!m) {\r\n return false;\r\n }\r\n\r\n if (writer) {\r\n let [ , threadId] = m;\r\n threadId = htmlUnescapeComment(threadId);\r\n \r\n writer.openNode(schema.nodes.user_comment_end, {threadId});\r\n writer.closeNode();\r\n }\r\n\r\n return true;\r\n}\r\n\r\n\r\n\r\nclass InsertUserCommentPlugin extends Plugin<DecorationSet> {\r\n constructor(_schema: Schema, ui: EditorUI) {\r\n super({\r\n state: {\r\n init() {\r\n return DecorationSet.empty;\r\n },\r\n apply: (tr: Transaction) => {\r\n // TODO: If the current selection is equal to or inside a comment range, don't show the\r\n // insert comment button\r\n if (tr.selection.empty) {\r\n return DecorationSet.empty;\r\n } else {\r\n return DecorationSet.create(tr.doc, [\r\n Decoration.widget(tr.selection.from-1,\r\n createInsertButton.bind(undefined, ui),\r\n { key: \"insert-comment-button\",\r\n ignoreSelection: true,\r\n }),\r\n ]); \r\n }\r\n }\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return this.getState(state);\r\n }\r\n },\r\n });\r\n }\r\n}\r\n\r\nfunction createInsertButton(ui: EditorUI, view: EditorView) {\r\n const insertButton = document.createElement('a');\r\n insertButton.className = 'pm-insert-user-comment-button';\r\n insertButton.innerHTML = '💬'; // speech bubble emoji\r\n insertButton.title = 'Add comment';\r\n insertButton.onclick = e => {\r\n if (view) {\r\n insertUserComment(ui, view.state, view.dispatch);\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n return false;\r\n };\r\n return insertButton;\r\n}\r\n\r\nclass InsertUserCommentCommand extends ProsemirrorCommand {\r\n constructor(_schema: Schema, ui: EditorUI) {\r\n super(EditorCommandId.UserComment, ['Shift-Mod-c'], (state, dispatch) => {\r\n return insertUserComment(ui, state, dispatch);\r\n }, undefined, false);\r\n }\r\n}\r\n\r\nfunction insertUserComment(ui: EditorUI, state: EditorState,\r\n dispatch?: (tr: Transaction) => void) : boolean {\r\n\r\n if (state.selection.empty) {\r\n return false;\r\n }\r\n\r\n if (dispatch) {\r\n const newThreadId = createCommentId();\r\n\r\n const commentItem = createCommentItemNode(state.schema, currentUsername(ui.context));\r\n\r\n const commentBegin = state.schema.nodes.user_comment_begin.create(\r\n {threadId: newThreadId, provisional: true}, commentItem);\r\n\r\n const commentEnd = state.schema.nodes.user_comment_end.create(\r\n {threadId: newThreadId, provisional: true});\r\n\r\n const tr = state.tr;\r\n tr.insert(state.selection.to, commentEnd);\r\n tr.insert(tr.mapping.map(state.selection.from), commentBegin);\r\n tr.setMeta(UserCommentPluginKey, true);\r\n\r\n dispatch(tr);\r\n\r\n focusComment(newThreadId, commentItem.attrs.commentId);\r\n }\r\n\r\n return true;\r\n}\r\n\r\nclass UserCommentPlugin extends Plugin<DecorationSet> {\r\n constructor(schema: Schema) {\r\n super({\r\n key: UserCommentPluginKey,\r\n state: {\r\n init(_config: EditorStateConfig, instance: EditorState) : DecorationSet {\r\n return createCommentDecorators(instance, schema);\r\n },\r\n apply: (tr: Transaction, old: DecorationSet, _oldState: EditorState, newState: EditorState) : DecorationSet => {\r\n if (!tr.docChanged) {\r\n return old;\r\n }\r\n return createCommentDecorators(newState, schema);\r\n }\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return UserCommentPluginKey.getState(state);\r\n },\r\n },\r\n appendTransaction: userCommentAppendTransaction(schema, createCommentId)\r\n });\r\n }\r\n}\r\n\r\nfunction createCommentDecorators(state: EditorState, schema: Schema) {\r\n const start = new Map<string, number>();\r\n const end = new Map<string, number>();\r\n const nodeIndex = getUserCommentNodeCache(state);\r\n nodeIndex.getIndex(state.doc).forEach(({node, pos}) => {\r\n if (node.type === schema.nodes.user_comment_begin || node.type === schema.nodes.user_comment_begin_block) {\r\n start.set(node.attrs.threadId, pos + node.nodeSize);\r\n }\r\n else if (node.type === schema.nodes.user_comment_end) {\r\n end.set(node.attrs.threadId, pos);\r\n }\r\n return true;\r\n });\r\n let decorations = DecorationSet.empty;\r\n start.forEach((pos, threadId) => {\r\n const startPos = pos;\r\n const endPos = end.get(threadId);\r\n if (typeof (endPos) !== \"undefined\") {\r\n decorations = decorations.add(state.doc, [Decoration.inline(startPos, endPos, { class: \"pm-comment-background-color\" }, { inclusiveStart: true, inclusiveEnd: true })]);\r\n }\r\n });\r\n return decorations;\r\n}\r\n\r\nfunction htmlEscape(str: string) {\r\n return str.replace(/[<>&\"\\r\\n]/g, m => {\r\n switch(m) {\r\n case \"<\": return \"<\";\r\n case \">\": return \">\";\r\n case \"&\": return \"&\";\r\n case \"\\\"\": return \""\";\r\n case \"\\r\": return \" \";\r\n case \"\\n\": return \" \";\r\n }\r\n throw new Error(`Unexpected character ${m}`);\r\n });\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * shortcode_block.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\nimport { EditorState, Transaction } from 'prosemirror-state';\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { PandocOutput, PandocTokenType, PandocToken, stringifyTokens, ProsemirrorWriter } from '../api/pandoc';\r\n\r\nimport { kHugoDocType, kQuartoDocType } from '../api/format';\r\n\r\nimport { Extension, ExtensionContext } from '../api/extension';\r\nimport { codeNodeSpec } from '../api/code';\r\nimport { ProsemirrorCommand, EditorCommandId } from '../api/command';\r\nimport { canInsertNode } from '../api/node';\r\nimport { kShortcodeRegEx } from '../api/shortcode';\r\nimport {\r\n PandocBlockCapsuleFilter,\r\n blockCapsuleParagraphTokenHandler,\r\n encodedBlockCapsuleRegex,\r\n PandocBlockCapsule,\r\n blockCapsuleTextHandler,\r\n blockCapsuleSourceWithoutPrefix,\r\n} from '../api/pandoc_capsule';\r\nimport { OmniInsertGroup } from '../api/omni_insert';\r\n\r\nconst extension = (context: ExtensionContext): Extension | null => {\r\n const { format, ui } = context;\r\n\r\n // return null if no shortcodes\r\n if (!format.hugoExtensions.shortcodes) {\r\n return null;\r\n }\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'shortcode_block',\r\n\r\n spec: {\r\n ...codeNodeSpec(),\r\n attrs: {},\r\n parseDOM: [\r\n {\r\n tag: \"div[class*='shortcode-block']\",\r\n preserveWhitespace: 'full',\r\n },\r\n ],\r\n toDOM() {\r\n return ['div', { class: 'shortcode-block pm-fixedwidth-font pm-code-block pm-markup-text-color' }, 0];\r\n },\r\n },\r\n\r\n code_view: {\r\n lang: () => 'text',\r\n borderColorClass: 'pm-raw-block-border',\r\n },\r\n\r\n attr_edit: () => ({\r\n type: (schema: Schema) => schema.nodes.shortcode_block,\r\n tags: () => ['shortcode'],\r\n editFn: () => () => false,\r\n }),\r\n\r\n pandoc: {\r\n // unroll shortcode from paragraph with single shortcode\r\n blockReader: (schema: Schema, tok: PandocToken, writer: ProsemirrorWriter) => {\r\n if (isParaWrappingShortcode(tok)) {\r\n const text = stringifyTokens(tok.c);\r\n writer.addNode(schema.nodes.shortcode_block, {}, [schema.text(text)]);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n\r\n // capture shortcuts w/ begin/end tags\r\n blockCapsuleFilter: shortcodeBlockCapsuleFilter(),\r\n\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeRawMarkdown(node.content);\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n\r\n commands: (schema: Schema) => {\r\n // only create command for hugo anq quarto doc types\r\n if (!format.docTypes.includes(kHugoDocType) && \r\n !format.docTypes.includes(kQuartoDocType)) {\r\n return [];\r\n }\r\n\r\n return [\r\n new ProsemirrorCommand(\r\n EditorCommandId.Shortcode,\r\n [],\r\n (state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n // enable/disable command\r\n if (!canInsertNode(state, schema.nodes.shortcode_block)) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n const tr = state.tr;\r\n const shortcode = '{{< >}}';\r\n const shortcodeNode = schema.nodes.shortcode_block.create({}, schema.text(shortcode));\r\n tr.replaceSelectionWith(shortcodeNode);\r\n setTextSelection(tr.mapping.map(state.selection.from) - shortcode.length / 2 - 1)(tr);\r\n dispatch(tr);\r\n }\r\n return true;\r\n },\r\n {\r\n name: ui.context.translateText('Shortcode'),\r\n description: ui.context.translateText('Shortcode command'),\r\n group: OmniInsertGroup.Blocks,\r\n priority: 5,\r\n image: () => ui.prefs.darkMode() ? ui.images.omni_insert.generic : ui.images.omni_insert.generic,\r\n selectionOffset: 4\r\n },\r\n \r\n ),\r\n ];\r\n },\r\n };\r\n};\r\n\r\nfunction isParaWrappingShortcode(tok: PandocToken) {\r\n if (tok.t === PandocTokenType.Para) {\r\n // qualify that this paragraph has text that begins with {{< (so that\r\n // we don't end up scanning every token of every paragraph )\r\n const children: PandocToken[] = tok.c;\r\n if (tok.c.length > 1) {\r\n const [first, second] = tok.c;\r\n const firstText = first.t === PandocTokenType.Str ? first.c : second.c;\r\n if (typeof firstText === 'string' && firstText.startsWith('{{<')) {\r\n const text = stringifyTokens(children).trim();\r\n const match = text.match(kShortcodeRegEx);\r\n if (match && match[0] === text) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport function shortcodeBlockCapsuleFilter(): PandocBlockCapsuleFilter {\r\n const kShortcodeBlockCapsuleType = 'B65B58FD-D707-4C30-8C97-3D99ACF9A157'.toLowerCase();\r\n\r\n return {\r\n type: kShortcodeBlockCapsuleType,\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n match: /^([\\t >]*)(\\{\\{<\\s+([^\\/][^\\t ]+).*?>\\}\\}[ \\t]*\\n(?![ \\t]*\\n)[\\W\\w]*?\\n[\\t >]*\\{\\{<\\s+\\/\\3\\s+>\\}\\})([ \\t]*)$/gm,\r\n\r\n extract: (_match: string, p1: string, p2: string, _p3: string, p4: string) => {\r\n return {\r\n prefix: p1,\r\n source: p2,\r\n suffix: p4,\r\n };\r\n },\r\n\r\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\r\n // (in this case we don't do anything because pandoc would have written this table as a\r\n // semantically standalone block)\r\n enclose: (capsuleText: string) => {\r\n return capsuleText;\r\n },\r\n\r\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\r\n // and if we find it, parse and return the original source code\r\n handleText: blockCapsuleTextHandler(\r\n kShortcodeBlockCapsuleType,\r\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\r\n ),\r\n\r\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\r\n // if find that then return the block capsule text\r\n handleToken: blockCapsuleParagraphTokenHandler(kShortcodeBlockCapsuleType),\r\n\r\n // write the node\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\r\n // remove the source prefix\r\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\r\n\r\n // write the node\r\n writer.addNode(schema.nodes.shortcode_block, {}, [schema.text(source)]);\r\n },\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * html_preserve.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode, Schema } from 'prosemirror-model';\r\n\r\nimport { PandocOutput, PandocTokenType, ProsemirrorWriter } from '../api/pandoc';\r\nimport { Extension } from '../api/extension';\r\nimport { codeNodeSpec } from '../api/code';\r\n\r\nimport {\r\n PandocBlockCapsuleFilter,\r\n blockCapsuleParagraphTokenHandler,\r\n encodedBlockCapsuleRegex,\r\n PandocBlockCapsule,\r\n blockCapsuleTextHandler,\r\n blockCapsuleSourceWithoutPrefix,\r\n} from '../api/pandoc_capsule';\r\n\r\nconst extension = (): Extension | null => {\r\n\r\n return {\r\n nodes: [\r\n {\r\n name: 'html_preserve',\r\n\r\n spec: {\r\n ...codeNodeSpec(),\r\n attrs: {},\r\n parseDOM: [\r\n {\r\n tag: \"div[class*='pm-html-preserve']\",\r\n preserveWhitespace: 'full',\r\n },\r\n ],\r\n toDOM() {\r\n return ['div', { class: 'pm-html-preserve pm-fixedwidth-font pm-code-block pm-markup-text-color' }, 0];\r\n },\r\n },\r\n\r\n code_view: {\r\n lang: () => 'html',\r\n borderColorClass: 'pm-raw-block-border',\r\n },\r\n\r\n attr_edit: () => ({\r\n type: (schema: Schema) => schema.nodes.html_preserve,\r\n tags: () => ['html_preserve'],\r\n editFn: () => () => false,\r\n }),\r\n\r\n pandoc: {\r\n // capture shortcuts w/ begin/end tags\r\n blockCapsuleFilter: htmlPreserveBlockCapsuleFilter(),\r\n\r\n writer: (output: PandocOutput, node: ProsemirrorNode) => {\r\n output.writeToken(PandocTokenType.Para, () => {\r\n output.writeRawMarkdown(node.content);\r\n });\r\n },\r\n },\r\n },\r\n ],\r\n };\r\n};\r\n\r\nexport function htmlPreserveBlockCapsuleFilter(): PandocBlockCapsuleFilter {\r\n const kHtmlPreserveBlockCapsuleType = '83CFCBF3-0429-4822-AAC6-D6F31591AEA8'.toLowerCase();\r\n\r\n return {\r\n type: kHtmlPreserveBlockCapsuleType,\r\n\r\n // eslint-disable-next-line no-useless-escape\r\n match: /^([\\t >]*)(<!--html_preserve-->[\\W\\w]*?<!--\\/html_preserve-->)([ \\t]*)$/gm,\r\n\r\n extract: (_match: string, p1: string, p2: string, p3: string) => {\r\n return {\r\n prefix: p1,\r\n source: p2,\r\n suffix: p3,\r\n };\r\n },\r\n\r\n // textually enclose the capsule so that pandoc parses it as the type of block we want it to\r\n // (in this case we don't do anything because pandoc would have written this as a\r\n // semantically standalone block)\r\n enclose: (capsuleText: string) => {\r\n return capsuleText;\r\n },\r\n\r\n // look for one of our block capsules within pandoc ast text (e.g. a code or raw block)\r\n // and if we find it, parse and return the original source code\r\n handleText: blockCapsuleTextHandler(\r\n kHtmlPreserveBlockCapsuleType,\r\n encodedBlockCapsuleRegex(undefined, undefined, 'gm'),\r\n ),\r\n\r\n // we are looking for a paragraph token consisting entirely of a block capsule of our type.\r\n // if find that then return the block capsule text\r\n handleToken: blockCapsuleParagraphTokenHandler(kHtmlPreserveBlockCapsuleType),\r\n\r\n // write the node\r\n writeNode: (schema: Schema, writer: ProsemirrorWriter, capsule: PandocBlockCapsule) => {\r\n // remove the source prefix\r\n const source = blockCapsuleSourceWithoutPrefix(capsule.source, capsule.prefix);\r\n\r\n // write the node\r\n writer.addNode(schema.nodes.html_preserve, {}, [schema.text(source)]);\r\n },\r\n };\r\n}\r\n\r\nexport default extension;\r\n","/*\r\n * ace-render-queue.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { AceNodeView } from './ace';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { ScrollEvent, UpdateEvent } from '../../api/event-types';\r\n\r\n/**\r\n * Represents a queue of Ace editor instances that are rendered asynchronously.\r\n */\r\nexport class AceRenderQueue {\r\n private readonly renderQueue: AceNodeView[] = [];\r\n\r\n private renderCompleted = false;\r\n private renderTimer = 0;\r\n private updateTimer = 0;\r\n private container?: HTMLElement;\r\n private needsSort = true;\r\n private bypass = 5;\r\n private observer?: IntersectionObserver;\r\n private visible = true;\r\n private readonly subscriptions: VoidFunction[] = [];\r\n\r\n constructor(events: EditorEvents) {\r\n // Begin listening for scroll and update events so we can manage the queue\r\n // accordingly\r\n this.subscriptions.push(\r\n events.subscribe(ScrollEvent, () => {\r\n this.onScroll();\r\n }),\r\n );\r\n this.subscriptions.push(\r\n events.subscribe(UpdateEvent, () => {\r\n this.onUpdate();\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Sets (or replaces) the scroll container hosting the render queue. The\r\n * scroll container is used to prioritize the queue (i.e. objects in the\r\n * viewport or close to it are to be given more priority).\r\n *\r\n * @param container The HTML element of the scroll container\r\n */\r\n public setContainer(container: HTMLElement) {\r\n // Skip if we're already looking at this container\r\n if (this.container === container) {\r\n return;\r\n }\r\n\r\n // Clean up observer on any previous container\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n }\r\n\r\n // Save reference to container\r\n this.container = container;\r\n\r\n // Create intersection observer to ensure that we don't needlessly churn\r\n // through renders while offscreen.\r\n this.observer = new IntersectionObserver(\r\n (entries: IntersectionObserverEntry[]) => {\r\n for (const entry of entries) {\r\n if (entry.isIntersecting && !this.visible) {\r\n // We just became visible; process the render queue now.\r\n this.visible = true;\r\n this.processRenderQueue();\r\n }\r\n if (!entry.isIntersecting && this.visible) {\r\n // We just lost visibility; end processing of the render queue. (Note\r\n // that we only do this when connected to the DOM as another reason\r\n // the element can become invisible is ProseMirror swapping it out\r\n // internally.)\r\n if (this.container?.parentElement) {\r\n this.visible = false;\r\n this.cancelTimer();\r\n }\r\n }\r\n }\r\n },\r\n {\r\n root: null,\r\n },\r\n );\r\n\r\n // Begin observing intersection events in container\r\n this.observer.observe(container);\r\n }\r\n\r\n /**\r\n * Invoke when the editor surface is scrolled\r\n */\r\n private onScroll() {\r\n // Whenever a scroll event occurs, we need to re-sort the queue so that\r\n // objects in or closest to the viewport are given priority.\r\n this.needsSort = true;\r\n\r\n // If we don't think we're visible but we're scrolling and have height,\r\n // then we are in fact visible. (This catches a case where the\r\n // intsersection observer created below doesn't fire for visiblity\r\n // changes.)\r\n if (!this.visible && this.container && this.container.offsetHeight > 0) {\r\n this.visible = true;\r\n this.processRenderQueue();\r\n }\r\n }\r\n\r\n /**\r\n * Invoke when the document has changed\r\n */\r\n private onUpdate() {\r\n // Debounce update timer. This timer is used to prevent the CPU intensive\r\n // editor rendering from happening while the user is actively updating the\r\n // document.\r\n if (this.updateTimer !== 0) {\r\n window.clearTimeout(this.updateTimer);\r\n }\r\n this.updateTimer = window.setTimeout(() => {\r\n this.updateTimer = 0;\r\n // Process queue immediately if we have one\r\n this.scheduleRender(0);\r\n }, 1000);\r\n }\r\n\r\n /**\r\n * Indicates whether the render queue has a scroll container defined\r\n */\r\n public hasContainer(): boolean {\r\n if (this.container) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Indicates whether the rendering is finished.\r\n */\r\n public isRenderCompleted(): boolean {\r\n return this.renderCompleted;\r\n }\r\n\r\n /**\r\n * Adds a node view to the render queue\r\n */\r\n public add(view: AceNodeView) {\r\n // We allow the first few code blocks to render synchronously instead of\r\n // being dumped into the queue for later processing. This slightly increases\r\n // startup time but prevents the flicker that would otherwise occur as\r\n // editors render one by one.\r\n if (this.bypass > 0) {\r\n this.bypass--;\r\n view.initEditor();\r\n return;\r\n }\r\n\r\n this.renderQueue.push(view);\r\n\r\n // Defer/debounce rendering of editors until event loop finishes\r\n if (this.renderTimer === 0) {\r\n this.scheduleRender(0);\r\n }\r\n }\r\n\r\n /**\r\n * Processes the queue of editor instances that need to be rendered.\r\n */\r\n private processRenderQueue() {\r\n // No work to do if queue is empty\r\n if (this.renderQueue.length === 0) {\r\n return;\r\n }\r\n\r\n // Don't render while hidden; it wastes resources plus can result in\r\n // incorrect sizing calculations\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n // Don't render while the user is actively updating the document (it makes\r\n // the interface sluggish)\r\n if (this.updateTimer !== 0) {\r\n return;\r\n }\r\n\r\n // Compute offset for sorting (based on scroll position)\r\n let offset = 0;\r\n if (this.container) {\r\n offset = this.container.scrollTop;\r\n }\r\n\r\n // Sort the queue if required\r\n if (this.needsSort) {\r\n // Sort the render queue based on distance from the top of the viewport\r\n this.renderQueue.sort((a, b) => {\r\n return Math.abs(a.dom.offsetTop - offset) - Math.abs(b.dom.offsetTop - offset);\r\n });\r\n\r\n // Clear flag so we don't sort the queue on every render\r\n this.needsSort = false;\r\n }\r\n\r\n // Pop the next view (editor instance) to be rendered off the stack.\r\n // Fast-forward past instances that no longer have a position; these can\r\n // accumulate when NodeViews are added to the render queue but replaced\r\n // (by a document rebuild) before they have a chance to render.\r\n let view: AceNodeView | undefined;\r\n while ((view === null || view === undefined || view.getPos() === undefined) &&\r\n this.renderQueue.length > 0) {\r\n view = this.renderQueue.shift();\r\n }\r\n\r\n // Render this view\r\n if (view) {\r\n view.initEditor();\r\n }\r\n\r\n if (this.renderQueue.length > 0) {\r\n // There are still remaining editors to be rendered, so process again on\r\n // the next event loop.\r\n //\r\n // If these editors are near the viewport, render them as soon as\r\n // possible; otherwise, let the render proceed at a slower pace to\r\n // increase responsiveness.\r\n let delayMs = 1000;\r\n if (this.container) {\r\n const distance = Math.abs(this.renderQueue[0].dom.offsetTop - offset);\r\n if (distance < this.container.offsetHeight * 2) {\r\n // Container is near the viewport, so render it ASAP\r\n delayMs = 0;\r\n }\r\n }\r\n this.scheduleRender(delayMs);\r\n } else {\r\n // No remaining editors; we're done.\r\n this.renderCompleted = true;\r\n this.destroy();\r\n }\r\n }\r\n\r\n /**\r\n * Cancels the timer that is responsible for triggering the processing of the\r\n * next unit in the render queue.\r\n */\r\n private cancelTimer() {\r\n if (this.renderTimer !== 0) {\r\n window.clearTimeout(this.renderTimer);\r\n this.renderTimer = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Reschedules a pending render, or schedules a new one.\r\n */\r\n private scheduleRender(delayMs: number) {\r\n this.cancelTimer();\r\n this.renderTimer = window.setTimeout(() => {\r\n this.processRenderQueue();\r\n this.renderTimer = 0;\r\n }, delayMs);\r\n }\r\n\r\n /**\r\n * Cleans up the render queue instance\r\n */\r\n private destroy() {\r\n // Cancel any pending renders\r\n this.cancelTimer();\r\n\r\n // Clear any pending update timer\r\n if (this.updateTimer !== 0) {\r\n window.clearTimeout(this.updateTimer);\r\n }\r\n\r\n // Remove event subscriptions\r\n this.subscriptions.forEach(unsub => unsub());\r\n\r\n // Clean up resize observer\r\n if (this.observer) {\r\n this.observer.disconnect();\r\n }\r\n }\r\n}\r\n","/*\r\n * ace-placeholder.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n/**\r\n * Represents a placeholder (preview) rendering of an Ace editor. Since Ace\r\n * editors are somewhat expensive to draw, this placeholder is used in place\r\n * of a real editor instance to make code visible and allow for correct height\r\n * computations.\r\n */\r\nexport class AcePlaceholder {\r\n private readonly element: HTMLElement;\r\n\r\n constructor(content: string) {\r\n const ele = document.createElement('pre');\r\n ele.innerText = content;\r\n ele.className = 'ace_editor';\r\n this.element = ele;\r\n }\r\n\r\n public getElement() {\r\n return this.element;\r\n }\r\n}\r\n","/*\r\n * ace.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport {\r\n Plugin,\r\n PluginKey,\r\n TextSelection,\r\n EditorState,\r\n Transaction,\r\n Selection,\r\n} from 'prosemirror-state';\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { EditorView, NodeView } from 'prosemirror-view';\r\nimport { undo, redo } from 'prosemirror-history';\r\nimport { exitCode } from 'prosemirror-commands';\r\nimport { keymap } from 'prosemirror-keymap';\r\nimport { undoInputRule } from 'prosemirror-inputrules';\r\n\r\nimport { editingRootNode } from '../../api/node';\r\nimport { insertParagraph } from '../../api/paragraph';\r\nimport { ChunkEditor, EditorUIChunks } from '../../api/ui-types';\r\nimport { EditorEvents } from '../../api/event-types';\r\nimport { ExtensionContext, ExtensionFn } from '../../api/extension';\r\nimport { DispatchEvent, ResizeEvent, ScrollEvent } from '../../api/event-types';\r\nimport { codeViewArrowHandler, handleArrowToAdjacentNode } from '../../api/cursor';\r\n\r\nimport { selectAll } from '../../behaviors/select_all';\r\n\r\nimport { AceRenderQueue } from './ace-render-queue';\r\nimport { AcePlaceholder } from './ace-placeholder';\r\n\r\nimport { ProsemirrorCommand, EditorCommandId } from '../../api/command';\r\nimport { CodeEditorNodeViews, CodeViewOptions, scrollCodeViewElementIntoView } from '../../api/codeview';\r\nimport { EditorFind } from '../../api/find-types';\r\n\r\nimport './ace.css';\r\n\r\nconst plugin = new PluginKey('ace');\r\n\r\nexport function aceExtension(codeViews: { [key: string]: CodeViewOptions }): ExtensionFn {\r\n\r\n return (context: ExtensionContext) => {\r\n\r\n // we don't create the ace extension unless we have a chunks implemenentation\r\n if (!context.ui.chunks) {\r\n return null;\r\n }\r\n \r\n // shared services\r\n const aceRenderQueue = new AceRenderQueue(context.events);\r\n const aceNodeViews = new CodeEditorNodeViews();\r\n\r\n // build nodeViews\r\n const nodeTypes = Object.keys(codeViews);\r\n const nodeViews: {\r\n [name: string]: (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => NodeView;\r\n } = {};\r\n nodeTypes.forEach(name => {\r\n nodeViews[name] = (node: ProsemirrorNode, view: EditorView, getPos: boolean | (() => number)) => {\r\n return new AceNodeView(\r\n node,\r\n view,\r\n getPos as () => number,\r\n context,\r\n context.ui.chunks!,\r\n codeViews[name],\r\n aceRenderQueue,\r\n aceNodeViews,\r\n );\r\n };\r\n });\r\n\r\n const activeAceNodeViewCommand = (fn: (view: AceNodeView) => void) => {\r\n return (_state: EditorState, dispatch?: (tr: Transaction) => void) => {\r\n const activeView = aceNodeViews.activeNodeView();\r\n if (!activeView) {\r\n return false;\r\n }\r\n if (dispatch) {\r\n fn(activeView as AceNodeView);\r\n }\r\n return true;\r\n };\r\n };\r\n\r\n return {\r\n plugins: () => [\r\n new Plugin({\r\n key: plugin,\r\n props: {\r\n nodeViews,\r\n handleDOMEvents: {\r\n click: aceNodeViews.handleClick.bind(aceNodeViews),\r\n },\r\n },\r\n }),\r\n // arrow in and out of editor\r\n keymap({\r\n ArrowLeft: codeViewArrowHandler('left', nodeTypes),\r\n ArrowRight: codeViewArrowHandler('right', nodeTypes),\r\n ArrowUp: codeViewArrowHandler('up', nodeTypes),\r\n ArrowDown: codeViewArrowHandler('down', nodeTypes),\r\n }),\r\n ],\r\n commands: () => [\r\n new ProsemirrorCommand(EditorCommandId.ExpandChunk, [], activeAceNodeViewCommand(nodeView => {\r\n nodeView.setExpanded(true); \r\n })),\r\n new ProsemirrorCommand(EditorCommandId.CollapseChunk, [], activeAceNodeViewCommand(nodeView => {\r\n nodeView.setExpanded(false);\r\n })),\r\n ]\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * Represents a selection that was applied prior to the editor rendering (needs\r\n * to be applied when the editor rendering completes)\r\n */\r\nclass QueuedSelection {\r\n constructor(public readonly anchor: number, public readonly head: number) {}\r\n}\r\n\r\nexport class AceNodeView implements NodeView {\r\n public readonly getPos: () => number;\r\n public node: ProsemirrorNode;\r\n public readonly dom: HTMLElement;\r\n\r\n private readonly view: EditorView;\r\n private readonly chunks: EditorUIChunks;\r\n private readonly nodeViews: CodeEditorNodeViews;\r\n private readonly renderQueue: AceRenderQueue;\r\n private chunk?: ChunkEditor;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private aceEditor?: any;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private editSession?: any;\r\n private readonly options: CodeViewOptions;\r\n private readonly find: EditorFind;\r\n private readonly events: EditorEvents;\r\n\r\n private updating: boolean;\r\n private escaping: boolean;\r\n private gapCursorPending: boolean;\r\n private mouseDown: boolean;\r\n private mode: string;\r\n private findMarkers: number[];\r\n private selectionMarker: number | null;\r\n private queuedSelection: QueuedSelection | null;\r\n private resizeTimer: number;\r\n private renderedWidth: number;\r\n private scrollRow: number;\r\n private cursorDirty: boolean;\r\n\r\n private readonly subscriptions: VoidFunction[];\r\n\r\n constructor(\r\n node: ProsemirrorNode,\r\n view: EditorView,\r\n getPos: () => number,\r\n context: ExtensionContext,\r\n chunks: EditorUIChunks,\r\n options: CodeViewOptions,\r\n renderQueue: AceRenderQueue,\r\n nodeViews: CodeEditorNodeViews,\r\n ) {\r\n // Store for later\r\n this.node = node;\r\n this.view = view;\r\n this.chunks = chunks;\r\n this.find = context.find;\r\n this.events = context.events;\r\n this.getPos = getPos;\r\n\r\n // Initialize values\r\n this.mode = '';\r\n this.escaping = false;\r\n this.gapCursorPending = false;\r\n this.findMarkers = [];\r\n this.selectionMarker = null;\r\n this.renderQueue = renderQueue;\r\n this.nodeViews = nodeViews;\r\n this.queuedSelection = null;\r\n this.subscriptions = [];\r\n this.resizeTimer = 0;\r\n this.renderedWidth = 0;\r\n this.scrollRow = -1;\r\n this.cursorDirty = false;\r\n this.mouseDown = false;\r\n\r\n // options\r\n this.options = options;\r\n\r\n // The editor's outer node is our DOM representation\r\n this.dom = document.createElement('div');\r\n this.dom.classList.add('pm-code-editor');\r\n this.dom.classList.add('pm-ace-editor');\r\n this.dom.classList.add('pm-ace-editor-inactive');\r\n this.dom.classList.add(options.borderColorClass || 'pm-block-border-color');\r\n if (this.options.classes) {\r\n this.options.classes.forEach(className => this.dom.classList.add(className));\r\n }\r\n\r\n // Create a preview of the text (will be shown until editor is fully initialized)\r\n const preview = new AcePlaceholder(node.textContent);\r\n this.dom.appendChild(preview.getElement());\r\n\r\n // Style the first line differently if requested\r\n if (options.firstLineMeta) {\r\n this.dom.classList.add('pm-ace-first-line-meta');\r\n }\r\n\r\n // update mode\r\n this.updateMode();\r\n\r\n // observe all editor dispatches\r\n this.subscriptions.push(\r\n this.events.subscribe(DispatchEvent, (tr: Transaction | undefined) => {\r\n if (tr) {\r\n this.onEditorDispatch(tr);\r\n }\r\n }),\r\n );\r\n\r\n // This flag is used to avoid an update loop between the outer and\r\n // inner editor\r\n this.updating = false;\r\n\r\n if (renderQueue.isRenderCompleted()) {\r\n // All editors have been rendered and the queue is empty; initialize\r\n // directly (this happens when e.g., inserting code chunks interactively\r\n // after the document is fully rendered)\r\n this.initEditor();\r\n } else {\r\n // Rendering is not complete; add to the queue\r\n renderQueue.add(this);\r\n }\r\n\r\n // add ourselves to the list of all ace node views\r\n this.nodeViews.add(this);\r\n }\r\n\r\n public destroy() {\r\n // Unsubscribe from events\r\n this.subscriptions.forEach(unsub => unsub());\r\n\r\n // Clean up attached editor instance when it's removed from the DOM\r\n if (this.chunk) {\r\n this.chunk.destroy();\r\n }\r\n\r\n // remove ourselves from the list of all ace node views\r\n this.nodeViews.remove(this);\r\n }\r\n\r\n public update(node: ProsemirrorNode) {\r\n if (node.type !== this.node.type) {\r\n return false;\r\n }\r\n if (!this.editSession) {\r\n return false;\r\n }\r\n this.node = node;\r\n this.updateMode();\r\n\r\n // assumes that ace is available via global require (true in rstudio\r\n // which is where ace is utilized)\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const AceRange = (window as any).require('ace/range').Range;\r\n const doc = this.editSession.getDocument();\r\n\r\n const change = computeChange(this.editSession.getValue(), node.textContent);\r\n if (change) {\r\n this.updating = true;\r\n const range = AceRange.fromPoints(doc.indexToPosition(change.from, 0), doc.indexToPosition(change.to, 0));\r\n this.editSession.replace(range, change.text);\r\n this.updating = false;\r\n }\r\n\r\n // Clear any previously rendered find markers\r\n this.findMarkers.forEach(id => {\r\n if (this.editSession) {\r\n this.editSession.removeMarker(id);\r\n }\r\n });\r\n this.findMarkers = [];\r\n\r\n // Get all of the find results inside this node\r\n const decorations = this.find.decorations();\r\n if (decorations) {\r\n const decos = decorations?.find(this.getPos(), this.getPos() + node.nodeSize - 1);\r\n\r\n // If we got results, render them\r\n if (decos) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n decos.forEach((deco: any) => {\r\n if (!this.editSession) {\r\n return;\r\n }\r\n\r\n // Calculate from/to position for result marker (adjust for zero based column)\r\n const markerFrom = doc.indexToPosition(deco.from - this.getPos(), 0);\r\n markerFrom.column--;\r\n const markerTo = doc.indexToPosition(deco.to - this.getPos(), 0);\r\n markerTo.column--;\r\n const range = AceRange.fromPoints(markerFrom, markerTo);\r\n\r\n // Create the search result marker and add it to the rendered set\r\n const markerId = this.editSession.addMarker(range, deco.type.attrs.class, 'result', true);\r\n this.findMarkers.push(markerId);\r\n });\r\n }\r\n }\r\n\r\n // Ensure that the chunk is expanded if it contains find markers (so user can see search results)\r\n if (this.chunk && this.findMarkers.length > 0) {\r\n this.chunk.setExpanded(true);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public setSelection(anchor: number, head: number) {\r\n // We haven't drawn the editor yet, so queue the selection until we can\r\n // apply it.\r\n if (!this.aceEditor || !this.editSession) {\r\n this.queuedSelection = new QueuedSelection(anchor, head);\r\n return;\r\n }\r\n if (!this.escaping && !this.gapCursorPending) {\r\n this.aceEditor.focus();\r\n }\r\n this.updating = true;\r\n const doc = this.editSession.getDocument();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const AceRange = (window as any).require('ace/range').Range;\r\n const range = AceRange.fromPoints(doc.indexToPosition(anchor, 0), doc.indexToPosition(head, 0));\r\n this.editSession.getSelection().setSelectionRange(range);\r\n this.updating = false;\r\n }\r\n\r\n public setGapCursorPending(pending: boolean) {\r\n this.gapCursorPending = pending;\r\n }\r\n\r\n public isFocused() {\r\n return this.aceEditor && this.aceEditor.isFocused();\r\n }\r\n\r\n public setExpanded(expanded: boolean) {\r\n if (this.chunk) {\r\n this.chunk.setExpanded(expanded);\r\n }\r\n }\r\n\r\n public getExpanded() {\r\n if (this.chunk) {\r\n return this.chunk.getExpanded();\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n public selectNode() {\r\n if (this.aceEditor) {\r\n this.aceEditor.focus();\r\n }\r\n }\r\n\r\n public stopEvent() {\r\n return true;\r\n }\r\n\r\n public ignoreMutation() {\r\n return true;\r\n }\r\n\r\n private onEditorDispatch(tr: Transaction) {\r\n if (!tr.docChanged && tr.selectionSet) {\r\n this.highlightSelectionAcross(tr.selection); \r\n }\r\n }\r\n\r\n private forwardSelection() {\r\n // ignore if we don't have focus\r\n if (!this.chunk || !this.chunk.element.contains(window.document.activeElement)) {\r\n return;\r\n }\r\n\r\n const state = this.view.state;\r\n const selection = this.asProseMirrorSelection(state.doc);\r\n if (selection && !selection.eq(state.selection)) {\r\n this.view.dispatch(state.tr.setSelection(selection));\r\n }\r\n }\r\n\r\n private asProseMirrorSelection(doc: ProsemirrorNode) {\r\n if (!this.editSession) {\r\n return null;\r\n }\r\n const offset = this.getPos() + 1;\r\n const session = this.editSession;\r\n const range = session.getSelection().getRange();\r\n const anchor = session.getDocument().positionToIndex(range.start, 0) + offset;\r\n const head = session.getDocument().positionToIndex(range.end, 0) + offset;\r\n return TextSelection.create(doc, anchor, head);\r\n }\r\n\r\n // detect the entire editor being selected across, in which case we add an ace marker\r\n // visually indicating that the text is selected\r\n private highlightSelectionAcross(selection: Selection) {\r\n if (!this.aceEditor || !this.editSession) {\r\n return;\r\n }\r\n\r\n // clear any existing selection marker\r\n if (this.selectionMarker !== null) {\r\n this.editSession.removeMarker(this.selectionMarker);\r\n this.selectionMarker = null;\r\n }\r\n\r\n // check for selection spanning us\r\n const pos = this.getPos();\r\n if (selection.from < pos && selection.to > pos + this.node.nodeSize) {\r\n const doc = this.editSession.getDocument();\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const AceRange = (window as any).require('ace/range').Range;\r\n const range = AceRange.fromPoints(doc.indexToPosition(0, 0), doc.indexToPosition(this.node.nodeSize - 1, 0));\r\n this.selectionMarker = this.editSession.addMarker(range, 'pm-selected-text', 'selection', true);\r\n }\r\n }\r\n\r\n private valueChanged() {\r\n const change = computeChange(this.node.textContent, this.getContents());\r\n if (change) {\r\n // update content\r\n const start = this.getPos() + 1;\r\n if (!isNaN(start)) {\r\n const tr = this.view.state.tr.replaceWith(\r\n start + change.from,\r\n start + change.to,\r\n change.text ? this.node.type.schema.text(change.text) : [],\r\n );\r\n this.view.dispatch(tr);\r\n }\r\n }\r\n this.updateMode();\r\n }\r\n\r\n /**\r\n * Scrolls a child of the editor chunk into view.\r\n *\r\n * @param ele The child to scroll.\r\n */\r\n private scrollIntoView(ele: HTMLElement) {\r\n scrollCodeViewElementIntoView(ele, this.dom, this.view);\r\n }\r\n\r\n /**\r\n * Initializes the editing surface by creating and injecting an Ace editor\r\n * instance from the host.\r\n */\r\n public initEditor() {\r\n // skip if we're already initialized\r\n if (this.aceEditor) {\r\n return;\r\n }\r\n\r\n // call host factory to instantiate editor\r\n this.chunk = this.chunks.createChunkEditor('ace', this.dom, this.node.attrs.md_index, this.node.attrs.classes, {\r\n getPos: () => this.getPos(),\r\n scrollIntoView: ele => this.scrollIntoView(ele),\r\n scrollCursorIntoView: () => this.scrollCursorIntoView(),\r\n getTextContent: () => this.node.textContent\r\n });\r\n\r\n // populate initial contents\r\n this.aceEditor = this.chunk.editor;\r\n this.updating = true;\r\n this.aceEditor.setValue(this.node.textContent);\r\n this.updating = false;\r\n\r\n this.aceEditor.clearSelection();\r\n\r\n // cache edit session for convenience; most operations happen on the session\r\n this.editSession = this.aceEditor.getSession();\r\n\r\n // remove the preview and recreate chunk toolbar\r\n this.dom.innerHTML = '';\r\n this.dom.appendChild(this.chunk.element);\r\n\r\n // Propagate updates from the code editor to ProseMirror\r\n this.aceEditor.on('changeSelection', () => {\r\n if (!this.updating) {\r\n this.forwardSelection();\r\n }\r\n });\r\n this.aceEditor.on('change', () => {\r\n if (!this.updating) {\r\n this.valueChanged();\r\n }\r\n });\r\n\r\n // Forward selection we we receive it\r\n this.aceEditor.on('focus', () => {\r\n this.dom.classList.remove('pm-ace-editor-inactive');\r\n this.forwardSelection();\r\n });\r\n\r\n this.aceEditor.on('blur', () => {\r\n // Add a class to editor; this class contains CSS rules that hide editor\r\n // components that Ace cannot hide natively (such as the cursor,\r\n // matching bracket indicator, and active selection)\r\n this.dom.classList.add('pm-ace-editor-inactive');\r\n });\r\n\r\n // If the cursor moves and we're in focus, ensure that the cursor is\r\n // visible. Ace's own cursor visiblity mechanisms don't work in embedded\r\n // editors.\r\n this.aceEditor.getSelection().on('changeCursor', () => {\r\n if (this.dom.contains(document.activeElement) && !this.mouseDown) {\r\n this.cursorDirty = true;\r\n }\r\n });\r\n\r\n this.aceEditor.renderer.on('afterRender', () => {\r\n // If the cursor position is dirty and the mouse is not down, scroll the\r\n // cursor into view. Don't scroll while the mouse is down, as it will be\r\n // treated as a click-and-drag by Ace.\r\n if (this.cursorDirty && !this.mouseDown) {\r\n this.scrollCursorIntoView();\r\n this.cursorDirty = false;\r\n }\r\n });\r\n\r\n // Add custom escape commands for movement keys (left/right/up/down); these\r\n // will check to see whether the movement should leave the editor, and if\r\n // so will do so instead of moving the cursor.\r\n this.aceEditor.commands.addCommand({\r\n name: 'leftEscape',\r\n bindKey: 'Left',\r\n exec: () => {\r\n this.arrowMaybeEscape('char', -1, 'gotoleft');\r\n },\r\n readOnly: true\r\n });\r\n this.aceEditor.commands.addCommand({\r\n name: 'rightEscape',\r\n bindKey: 'Right',\r\n exec: () => {\r\n // if the chunk is currently collapsed, the right arrow should open it up\r\n if (this.chunk && !this.chunk.getExpanded()) {\r\n this.chunk.setExpanded(true);\r\n return;\r\n }\r\n this.arrowMaybeEscape('char', 1, 'gotoright');\r\n },\r\n readOnly: true\r\n });\r\n this.aceEditor.commands.addCommand({\r\n name: 'upEscape',\r\n bindKey: 'Up',\r\n exec: () => {\r\n this.arrowMaybeEscape('line', -1, 'golineup');\r\n },\r\n readOnly: true\r\n });\r\n this.aceEditor.commands.addCommand({\r\n name: 'downEscape',\r\n bindKey: 'Down',\r\n exec: () => {\r\n this.arrowMaybeEscape('line', 1, 'golinedown');\r\n },\r\n readOnly: true\r\n });\r\n\r\n // Pressing Backspace in the editor when it's empty should delete it.\r\n this.aceEditor.commands.addCommand({\r\n name: 'backspaceDeleteNode',\r\n bindKey: 'Backspace',\r\n exec: () => {\r\n this.backspaceMaybeDeleteNode();\r\n },\r\n });\r\n\r\n // Handle undo/redo in ProseMirror\r\n this.aceEditor.commands.addCommand({\r\n name: 'undoProsemirror',\r\n bindKey: {\r\n win: 'Ctrl-Z',\r\n mac: 'Command-Z',\r\n },\r\n exec: () => {\r\n if (undo(this.view.state, this.view.dispatch)) {\r\n this.view.focus();\r\n }\r\n },\r\n });\r\n this.aceEditor.commands.addCommand({\r\n name: 'redoProsemirror',\r\n bindKey: {\r\n win: 'Ctrl-Shift-Z|Ctrl-Y',\r\n mac: 'Command-Shift-Z|Command-Y',\r\n },\r\n exec: () => {\r\n if (redo(this.view.state, this.view.dispatch)) {\r\n this.view.focus();\r\n }\r\n },\r\n });\r\n\r\n // Handle Select All in ProseMirror\r\n this.aceEditor.commands.addCommand({\r\n name: 'selectAllProsemirror',\r\n bindKey: {\r\n win: 'Ctrl-A',\r\n mac: 'Command-A',\r\n },\r\n exec: () => {\r\n if (selectAll(this.view.state, this.view.dispatch, this.view)) {\r\n this.view.focus();\r\n }\r\n },\r\n });\r\n\r\n // Handle shortcuts for moving focus out of the code editor and into\r\n // ProseMirror\r\n this.aceEditor.commands.addCommand({\r\n name: 'exitCodeBlock',\r\n bindKey: 'Shift-Enter',\r\n exec: () => {\r\n if (exitCode(this.view.state, this.view.dispatch)) {\r\n this.view.focus();\r\n }\r\n },\r\n });\r\n\r\n // Create a command for inserting paragraphs from the code editor\r\n this.aceEditor.commands.addCommand({\r\n name: 'insertParagraph',\r\n bindKey: {\r\n win: 'Ctrl-\\\\',\r\n mac: 'Command-\\\\',\r\n },\r\n exec: () => {\r\n if (insertParagraph(this.view.state, this.view.dispatch)) {\r\n this.view.focus();\r\n }\r\n },\r\n });\r\n\r\n // Line-by-line execution\r\n this.aceEditor.commands.addCommand({\r\n name: 'executeSelection',\r\n bindKey: {\r\n win: 'Ctrl-Enter',\r\n mac: 'Ctrl-Enter|Command-Enter',\r\n },\r\n exec: () => {\r\n if (this.chunk && this.aceEditor) {\r\n // Record the position prior to execution\r\n const pos = this.aceEditor.getCursorPosition();\r\n\r\n // Execute the selection\r\n this.chunk.executeSelection();\r\n\r\n // If the cursor stayed on the last line, step out of the code block\r\n // if we're not at the end of the doc (this is a no-op when not on the\r\n // last line, and mirrors the behavior when stepping past the end of\r\n // chunks in the code editor)\r\n if (pos.row === this.aceEditor.getCursorPosition().row) {\r\n this.arrowMaybeEscape('line', 1);\r\n }\r\n }\r\n },\r\n });\r\n\r\n // If an attribute editor function was supplied, bind it to F4\r\n if (this.options.attrEditFn) {\r\n this.aceEditor.commands.addCommand({\r\n name: 'editAttributes',\r\n bindKey: 'F4',\r\n exec: () => {\r\n this.options.attrEditFn!(this.view.state, this.view.dispatch, this.view);\r\n },\r\n });\r\n }\r\n\r\n // Apply editor mode\r\n if (this.mode) {\r\n this.chunk.setMode(this.mode);\r\n }\r\n\r\n // Disconnect font metrics system after render loop\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (this.aceEditor.renderer as any).on('afterRender', () => {\r\n // Update known rendered width\r\n if (this.chunk) {\r\n this.renderedWidth = this.chunk.element.offsetWidth;\r\n }\r\n\r\n window.setTimeout(() => {\r\n if (this.aceEditor) {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const metrics = (this.aceEditor.renderer as any).$fontMetrics;\r\n if (metrics && metrics.$observer) {\r\n metrics.$observer.disconnect();\r\n }\r\n }\r\n }, 0);\r\n });\r\n\r\n // Hook up the container to the render queue\r\n const editingRoot = editingRootNode(this.view.state.selection)!;\r\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n if (container.parentElement) {\r\n this.renderQueue.setContainer(container);\r\n }\r\n\r\n // Forward selection, if we have one (this can be set while the editor is\r\n // waiting to render)\r\n if (this.queuedSelection) {\r\n this.setSelection(this.queuedSelection.anchor, this.queuedSelection.head);\r\n this.queuedSelection = null;\r\n }\r\n\r\n // Subscribe to resize event; will reflow the editor to wrap properly at the\r\n // new width\r\n this.subscriptions.push(\r\n this.events.subscribe(ResizeEvent, () => {\r\n this.debounceResize();\r\n }),\r\n );\r\n\r\n // Subscribe to scroll event; invalidates the row we're scrolled to so\r\n // scrollback will be triggered if necessary (after e.g., typing after\r\n // scrolling offscreen)\r\n this.subscriptions.push(\r\n this.events.subscribe(ScrollEvent, () => {\r\n this.scrollRow = -1;\r\n }),\r\n );\r\n\r\n // Keep track of mouse state so we can avoid e.g., autoscrolling while the\r\n // mouse is down\r\n this.dom.addEventListener(\"mousedown\", () => {\r\n this.mouseDown = true;\r\n });\r\n this.dom.addEventListener(\"mouseup\", () => {\r\n this.mouseDown = false;\r\n });\r\n this.dom.addEventListener(\"mouseleave\", () => {\r\n // Treat mouse exit as an up since it will cause us to miss the up event\r\n this.mouseDown = false;\r\n });\r\n }\r\n\r\n /**\r\n * Debounced version of editor resize; ensures we don't aggressively resize\r\n * while size is still changing.\r\n */\r\n private debounceResize() {\r\n // Clear any previously running resize timer\r\n if (this.resizeTimer !== 0) {\r\n window.clearTimeout(this.resizeTimer);\r\n }\r\n\r\n // Create a new resize timer\r\n this.resizeTimer = window.setTimeout(() => {\r\n if (this.chunk && this.aceEditor) {\r\n // If the width we last rendered is different than our current width,\r\n // trigger an Ace resize event (causes editor to reflow wrapped text)\r\n if (this.renderedWidth !== this.chunk.element.offsetWidth) {\r\n this.aceEditor.resize();\r\n }\r\n }\r\n this.resizeTimer = 0;\r\n }, 500);\r\n }\r\n\r\n private updateMode() {\r\n // get lang\r\n const lang = this.options.lang(this.node, this.getContents());\r\n\r\n if (lang !== null && this.mode !== lang) {\r\n if (this.chunk) {\r\n this.chunk.setMode(lang);\r\n }\r\n this.mode = lang;\r\n }\r\n }\r\n\r\n private backspaceMaybeDeleteNode() {\r\n // if the node is empty and we execute a backspace then delete the node\r\n if (this.node.childCount === 0) {\r\n // if there is an input rule we just executed then use this to undo it\r\n if (undoInputRule(this.view.state)) {\r\n undoInputRule(this.view.state, this.view.dispatch);\r\n this.view.focus();\r\n } else {\r\n const tr = this.view.state.tr;\r\n tr.delete(this.getPos(), this.getPos() + this.node.nodeSize);\r\n tr.setSelection(TextSelection.near(tr.doc.resolve(this.getPos()), -1));\r\n this.view.dispatch(tr);\r\n this.view.focus();\r\n }\r\n } else if (this.aceEditor) {\r\n this.aceEditor.execCommand('backspace');\r\n }\r\n }\r\n\r\n // Checks to see whether an arrow key should escape the editor or not. If so,\r\n // sends the focus to the right node; if not, executes the given Ace command\r\n // (to perform the arrow key's usual action)\r\n private arrowMaybeEscape(unit: string, dir: number, command?: string) {\r\n if (!this.aceEditor || !this.editSession) {\r\n return;\r\n }\r\n\r\n const pos = this.aceEditor.getCursorPosition();\r\n const lastrow = this.editSession.getLength() - 1;\r\n if (this.getExpanded() && // special handing of keys for collapsed\r\n (!this.aceEditor.getSelection().isEmpty() ||\r\n pos.row !== (dir < 0 ? 0 : lastrow) ||\r\n (unit === 'char' && pos.column !== (dir < 0 ? 0 : this.editSession.getDocument().getLine(pos.row).length)))\r\n ) {\r\n // this movement is happening inside the editor itself. don't escape\r\n // the editor; just execute the underlying command\r\n if (command) {\r\n this.aceEditor.execCommand(command);\r\n }\r\n return;\r\n }\r\n\r\n // the cursor is about to leave the editor region; flag this to avoid side\r\n // effects\r\n this.escaping = true;\r\n\r\n // ensure we are focused\r\n this.view.focus();\r\n\r\n // handle arrow key\r\n handleArrowToAdjacentNode(this.getPos(), dir, this.view.state, this.view.dispatch);\r\n\r\n // set focus\r\n this.view.focus();\r\n this.escaping = false;\r\n }\r\n\r\n private getContents(): string {\r\n if (this.editSession) {\r\n return this.editSession.getValue();\r\n } else {\r\n return this.dom.innerText;\r\n }\r\n }\r\n\r\n /**\r\n * Ensures that the Ace cursor is visible in the scrollable region of the document.\r\n */\r\n private scrollCursorIntoView(): void {\r\n // No need to try to enforce cursor position if we're already scrolled to\r\n // this row\r\n if (this.editSession && this.editSession.getSelection().getCursor().row === this.scrollRow) {\r\n return;\r\n }\r\n\r\n // Ensure we still have focus before proceeding\r\n if (this.dom.contains(document.activeElement)) {\r\n\r\n // Find the element containing the rendered virtual cursor \r\n const cursor = this.dom.querySelector(\".ace_cursor\");\r\n if (cursor === null) {\r\n return;\r\n }\r\n\r\n // Ace doesn't actually move the cursor but uses CSS translations to\r\n // make it appear in the right place, so we need to use the somewhat\r\n // expensive getBoundingClientRect call to get a resolved position.\r\n // (The alternative would be parse the translate: transform(10px 20px))\r\n // call from the style property.)\r\n const editingRoot = editingRootNode(this.view.state.selection)!;\r\n const container = this.view.nodeDOM(editingRoot.pos) as HTMLElement;\r\n const containerRect = container.getBoundingClientRect();\r\n const cursorRect = cursor.getBoundingClientRect();\r\n\r\n // Scrolling down?\r\n const down = cursorRect.bottom + 10 - containerRect.bottom;\r\n if (down > 0) {\r\n container.scrollTop += down;\r\n } else {\r\n // Scrolling up?\r\n const up = containerRect.top + 10 - cursorRect.top;\r\n if (up > 0) {\r\n container.scrollTop -= up;\r\n }\r\n }\r\n\r\n // Update cached scroll row so we don't unnecessarily redo these\r\n // computations\r\n if (this.editSession) {\r\n this.scrollRow = this.editSession.getSelection().getCursor().row;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction computeChange(oldVal: string, newVal: string) {\r\n if (oldVal === newVal) {\r\n return null;\r\n }\r\n let start = 0;\r\n let oldEnd = oldVal.length;\r\n let newEnd = newVal.length;\r\n while (start < oldEnd && oldVal.charCodeAt(start) === newVal.charCodeAt(start)) {\r\n ++start;\r\n }\r\n while (oldEnd > start && newEnd > start && oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)) {\r\n oldEnd--;\r\n newEnd--;\r\n }\r\n return {\r\n from: start,\r\n to: oldEnd,\r\n text: newVal.slice(start, newEnd),\r\n };\r\n}\r\n\r\n","/*\r\n * attr_edit-command.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState, Transaction, NodeSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Mark, Node as ProsemirrorNode } from 'prosemirror-model';\r\n\r\nimport { findParentNodeOfType, NodeWithPos } from 'prosemirror-utils';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { pandocAttrInSpec } from '../../api/pandoc_attr';\r\nimport { getSelectionMarkRange } from '../../api/mark';\r\nimport { EditorCommandId, ProsemirrorCommand } from '../../api/command';\r\n\r\nimport { AttrEditOptions } from '../../api/attr_edit';\r\nimport { pandocAutoIdentifier, gfmAutoIdentifier } from '../../api/pandoc_id';\r\nimport { PandocExtensions } from '../../api/pandoc';\r\nimport { fragmentText } from '../../api/fragment';\r\nimport { kEditAttrShortcut } from '../../api/attr_edit/attr_edit-decoration';\r\nimport { EditorFormat } from '../../api/format';\r\nimport { editMathAttributesEnabled, editMathAttributes } from '../../marks/math/math-commands';\r\n\r\nexport class AttrEditCommand extends ProsemirrorCommand {\r\n constructor(ui: EditorUI, format: EditorFormat, pandocExtensions: PandocExtensions, editors: AttrEditOptions[]) {\r\n super(EditorCommandId.AttrEdit, [kEditAttrShortcut], attrEditCommandFn(ui, format, pandocExtensions, editors));\r\n }\r\n}\r\n\r\nexport function attrEditCommandFn(\r\n ui: EditorUI, \r\n format: EditorFormat,\r\n pandocExtensions: PandocExtensions, \r\n editors: AttrEditOptions[]\r\n) {\r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n \r\n // give math attributes first crack (in case it's inside a node with attributes)\r\n if (editMathAttributesEnabled(format, state)) {\r\n return editMathAttributes(ui)(state, dispatch, view);\r\n }\r\n \r\n // see if there is an active mark with attrs or a parent node with attrs\r\n const marks = state.storedMarks || state.selection.$head.marks();\r\n const mark = marks.find((m: Mark) => pandocAttrInSpec(m.type.spec));\r\n\r\n let node: ProsemirrorNode | null = null;\r\n let pos = 0;\r\n // node selection of node with attributes\r\n if (state.selection instanceof NodeSelection && pandocAttrInSpec(state.selection.node.type.spec)) {\r\n node = state.selection.node;\r\n pos = state.selection.$anchor.pos;\r\n } else {\r\n // selection inside node with editable attributes\r\n const nodeTypes = editors.map(editor => editor.type(state.schema));\r\n const parentWithAttrs = findParentNodeOfType(nodeTypes)(state.selection);\r\n if (parentWithAttrs) {\r\n node = parentWithAttrs.node;\r\n pos = parentWithAttrs.pos;\r\n }\r\n }\r\n\r\n // return false (disabled) for no targets\r\n if (!mark && !node) {\r\n return false;\r\n }\r\n\r\n // if this is a node and we have a custom attribute editor then just delegate to that\r\n if (node) {\r\n const editor = editors.find(ed => ed.type(state.schema) === node!.type)!;\r\n if (editor && editor.editFn) {\r\n return editor.editFn()(state, dispatch, view);\r\n }\r\n }\r\n\r\n // edit attributes\r\n async function asyncEditAttrs() {\r\n if (dispatch) {\r\n if (mark) {\r\n await editMarkAttrs(mark, state, dispatch, ui);\r\n } else {\r\n await editNodeAttrs(pos, node, state, dispatch, ui, pandocExtensions);\r\n }\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncEditAttrs();\r\n\r\n // return true\r\n return true;\r\n };\r\n}\r\n\r\nexport function attrEditNodeCommandFn(nodeWithPos: NodeWithPos, \r\n ui: EditorUI, \r\n pandocExtensions: PandocExtensions, \r\n editors: AttrEditOptions[]) {\r\n \r\n return (state: EditorState, dispatch?: (tr: Transaction) => void, view?: EditorView) => {\r\n\r\n // alias\r\n const { node, pos } = nodeWithPos;\r\n\r\n // registered editor\r\n const editor = editors.find(ed => ed.type(state.schema) === node!.type)!;\r\n if (editor && editor.editFn) {\r\n return editor.editFn()(state, dispatch, view);\r\n }\r\n\r\n // generic editor\r\n async function asyncEditAttrs() {\r\n if (dispatch) {\r\n await editNodeAttrs(pos, node, state, dispatch, ui, pandocExtensions);\r\n if (view) {\r\n view.focus();\r\n }\r\n }\r\n }\r\n asyncEditAttrs();\r\n\r\n // return true\r\n return true;\r\n };\r\n}\r\n\r\nasync function editMarkAttrs(\r\n mark: Mark,\r\n state: EditorState,\r\n dispatch: (tr: Transaction) => void,\r\n ui: EditorUI,\r\n): Promise<void> {\r\n const attrs = mark.attrs;\r\n const markType = mark.type;\r\n const result = await ui.dialogs.editAttr({ ...attrs });\r\n if (result) {\r\n const tr = state.tr;\r\n const range = getSelectionMarkRange(state.selection, markType);\r\n tr.removeMark(range.from, range.to, markType);\r\n tr.addMark(\r\n range.from,\r\n range.to,\r\n markType.create({\r\n ...attrs,\r\n ...result.attr,\r\n }),\r\n );\r\n dispatch(tr);\r\n }\r\n}\r\n\r\nasync function editNodeAttrs(\r\n pos: number,\r\n node: ProsemirrorNode | null,\r\n state: EditorState,\r\n dispatch: (tr: Transaction) => void,\r\n ui: EditorUI,\r\n pandocExtensions: PandocExtensions,\r\n): Promise<void> {\r\n if (node) {\r\n const attrs = node.attrs;\r\n const result = await ui.dialogs.editAttr({ ...attrs }, idHint(node, pandocExtensions));\r\n if (result) {\r\n const tr = state.tr;\r\n const targetNode = tr.doc.nodeAt(pos);\r\n if (targetNode) {\r\n tr.setNodeMarkup(pos, targetNode.type, {\r\n ...attrs,\r\n ...result.attr,\r\n }),\r\n dispatch(tr);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction idHint(node: ProsemirrorNode, pandocExtensions: PandocExtensions) {\r\n if (node.type === node.type.schema.nodes.heading) {\r\n const unemoji = pandocExtensions.gfm_auto_identifiers;\r\n const text = `sec-${fragmentText(node.content, unemoji)}`;\r\n\r\n if (pandocExtensions.gfm_auto_identifiers) {\r\n return gfmAutoIdentifier(text, pandocExtensions.ascii_identifiers);\r\n } else {\r\n return pandocAutoIdentifier(text, pandocExtensions.ascii_identifiers);\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n}\r\n","/*\r\n * attr_edit.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { Node as ProsemirrorNode } from 'prosemirror-model';\r\nimport { findChildren } from 'prosemirror-utils';\r\nimport { Plugin, PluginKey, Transaction, EditorState, Selection, EditorStateConfig } from 'prosemirror-state';\r\nimport { DecorationSet, Decoration } from 'prosemirror-view';\r\n\r\nimport { EditorUI } from '../../api/ui-types';\r\nimport { pandocAttrEnabled, pandocAttrAvailable } from '../../api/pandoc_attr';\r\nimport { kSetMarkdownTransaction, transactionsAreTypingChange, forChangedNodes, kThemeChangedTransaction } from '../../api/transaction';\r\n\r\nimport { PandocExtensions } from '../../api/pandoc';\r\nimport { Extension } from '../../api/extension';\r\nimport { hasFencedCodeBlocks } from '../../api/pandoc_format';\r\nimport { selectionIsWithinRange } from '../../api/selection';\r\n\r\nimport { AttrEditOptions } from '../../api/attr_edit';\r\nimport { attrEditDecorationWidget } from '../../api/attr_edit/attr_edit-decoration';\r\n\r\nimport { AttrEditCommand, attrEditNodeCommandFn } from './attr_edit-command';\r\nimport { EditorFormat } from '../../api/format';\r\n\r\nexport function attrEditExtension(\r\n pandocExtensions: PandocExtensions,\r\n ui: EditorUI,\r\n format: EditorFormat,\r\n editors: AttrEditOptions[],\r\n): Extension {\r\n const hasAttr = pandocAttrEnabled(pandocExtensions) || hasFencedCodeBlocks(pandocExtensions);\r\n\r\n return {\r\n commands: () => {\r\n if (hasAttr) {\r\n return [new AttrEditCommand(ui, format, pandocExtensions, editors)];\r\n } else {\r\n return [];\r\n }\r\n },\r\n\r\n plugins: () => {\r\n if (hasAttr) {\r\n return [new AttrEditDecorationPlugin(ui, pandocExtensions, editors)];\r\n } else {\r\n return [];\r\n }\r\n },\r\n };\r\n}\r\n\r\nconst key = new PluginKey<DecorationSet>('attr_edit_decoration');\r\n\r\nclass AttrEditDecorationPlugin extends Plugin<DecorationSet> {\r\n constructor(ui: EditorUI, pandocExtensions: PandocExtensions, editors: AttrEditOptions[]) {\r\n\r\n const decoratorForNode = (editor: AttrEditOptions, \r\n selection: Selection, \r\n node: ProsemirrorNode, \r\n pos: number) => {\r\n\r\n // if we prefer hidden and have no attributes then bail\r\n const range = { from: pos, to: pos + node.nodeSize };\r\n if (editor.preferHidden && \r\n !pandocAttrAvailable(node.attrs, !editor.noKeyvalueTags) && \r\n !selectionIsWithinRange(selection, range)) {\r\n return undefined;\r\n }\r\n\r\n // provide some editor defaults\r\n editor.tags = editor.tags ||\r\n (editorNode => {\r\n const attrTags = [];\r\n if (editorNode.attrs.id) {\r\n attrTags.push(`#${editorNode.attrs.id}`);\r\n }\r\n if (editorNode.attrs.classes && editorNode.attrs.classes.length) {\r\n attrTags.push(`${editorNode.attrs.classes.map((clz: string) => '.' + clz).join(' ')}`);\r\n }\r\n if (!editor.noKeyvalueTags && editorNode.attrs.keyvalue && editorNode.attrs.keyvalue.length) {\r\n attrTags.push(`${editorNode.attrs.keyvalue.map(\r\n (kv: [string,string]) => kv[0] + '=\"' + (kv[1] || '1') + '\"').join(' ')}\r\n `);\r\n }\r\n return attrTags;\r\n });\r\n editor.offset = editor.offset || { top: 0, right: 0 };\r\n\r\n // get editFn\r\n const editFn = attrEditNodeCommandFn(\r\n { node, pos }, \r\n ui, \r\n pandocExtensions, \r\n editors\r\n );\r\n\r\n // attr_edit controls\r\n return attrEditDecorationWidget({\r\n pos,\r\n tags: editor.tags(node),\r\n editFn,\r\n ui,\r\n offset: editor.offset,\r\n preferHidden: editor.preferHidden\r\n });\r\n \r\n };\r\n\r\n function decoratorsForDoc(state: EditorState) {\r\n const decorations: Decoration[] = [];\r\n const nodeTypes = editors.map(ed => ed.type(state.schema));\r\n findChildren(state.doc, node => nodeTypes.includes(node.type), true).forEach(attrNode => {\r\n const editor = editors.find(ed => ed.type(state.schema) === attrNode.node.type)!;\r\n if (!editor.noDecorator) {\r\n const decorator = decoratorForNode(editor, state.selection, attrNode.node, attrNode.pos);\r\n if (decorator) {\r\n decorations.push(decorator);\r\n }\r\n \r\n }\r\n });\r\n return DecorationSet.create(state.doc, decorations);\r\n }\r\n \r\n super({\r\n key,\r\n state: {\r\n init: (_config: EditorStateConfig, state: EditorState) => {\r\n return decoratorsForDoc(state);\r\n },\r\n apply: (tr: Transaction, set: DecorationSet, oldState: EditorState, newState: EditorState) => {\r\n\r\n // replacing the entire editor triggers decorations\r\n if (tr.getMeta(kSetMarkdownTransaction) || tr.getMeta(kThemeChangedTransaction)) {\r\n return decoratorsForDoc(newState);\r\n }\r\n\r\n // get schema and nodetypes\r\n const schema = newState.schema;\r\n const nodeTypes = editors.map(ed => ed.type(schema));\r\n\r\n // map \r\n set = set.map(tr.mapping, tr.doc);\r\n\r\n // typing change, return existing decorations\r\n if (transactionsAreTypingChange([tr])) {\r\n return set;\r\n }\r\n\r\n // selection change, might need to toggle some decorations on/off\r\n if (tr.selectionSet) {\r\n \r\n // look through each decorator, if it has preferHidden, it's node has no attributes,\r\n // and it's no longer in the selection then remove it\r\n const preferHiddenDecorators = set.find(undefined, undefined, spec => !!spec.preferHidden);\r\n for (const dec of preferHiddenDecorators) {\r\n const node = newState.doc.nodeAt(dec.from);\r\n if (node && !pandocAttrAvailable(node.attrs)) {\r\n if (!selectionIsWithinRange(tr.selection, \r\n { from: dec.from, to: dec.from + node.nodeSize })) {\r\n set = set.remove([dec]);\r\n }\r\n }\r\n }\r\n \r\n // now look for nodes above us with preferHidden and add decorators for them\r\n const $head = tr.selection.$head;\r\n for (let i=1; i<=$head.depth; i++) {\r\n const parentWithAttrs = { node: $head.node(i), pos: $head.before(i) };\r\n if (!nodeTypes.includes(parentWithAttrs.node.type)) {\r\n continue;\r\n }\r\n const { pos, node } = parentWithAttrs;\r\n const editor = editors.find(ed => ed.type(schema) === parentWithAttrs.node.type)!;\r\n if (editor?.preferHidden && set.find(pos, pos).length === 0) {\r\n const decorator = decoratorForNode(editor, tr.selection, node, pos);\r\n if (decorator) {\r\n set = set.add(tr.doc, [decorator]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // doc didn't change, return existing decorations\r\n if (!tr.docChanged && !tr.storedMarksSet) {\r\n return set;\r\n }\r\n \r\n // scan for added/modified nodes that have attr_edit decorations\r\n forChangedNodes(\r\n oldState,\r\n newState,\r\n node => nodeTypes.includes(node.type),\r\n (node, pos) => {\r\n // remove existing decorations for changed nodes\r\n const removeDecorations = set.find(pos, pos);\r\n if (removeDecorations.length > 0) {\r\n set = set.remove(removeDecorations);\r\n }\r\n\r\n // get editor and screen on noDecorator\r\n const editor = editors.find(ed => ed.type(schema) === node.type)!;\r\n if (!editor.noDecorator) {\r\n const decorator = decoratorForNode(editor, newState.selection, node, pos);\r\n if (decorator) {\r\n set = set.add(tr.doc, [decorator]);\r\n }\r\n }\r\n },\r\n );\r\n \r\n // return the updated set\r\n return set;\r\n }\r\n },\r\n props: {\r\n decorations: (state: EditorState) => {\r\n return key.getState(state);\r\n },\r\n },\r\n });\r\n }\r\n}\r\n\r\n\r\n","/*\r\n * editor-extensions.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { InputRule } from 'prosemirror-inputrules';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { EditorState, Plugin, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { ProsemirrorCommand } from '../api/command';\r\nimport { PandocMark } from '../api/mark';\r\nimport { PandocNode } from '../api/node';\r\nimport { Extension, ExtensionFn, ExtensionContext } from '../api/extension';\r\nimport { BaseKeyBinding } from '../api/basekeys';\r\nimport { OmniInserter } from '../api/omni_insert';\r\nimport { AppendTransactionHandler, AppendMarkTransactionHandler } from '../api/transaction';\r\nimport { FixupFn } from '../api/fixup';\r\nimport {\r\n PandocTokenReader,\r\n PandocMarkWriter,\r\n PandocNodeWriter,\r\n PandocPreprocessorFn,\r\n PandocPostprocessorFn,\r\n PandocBlockReaderFn,\r\n PandocInlineHTMLReaderFn,\r\n PandocTokensFilterFn,\r\n PandocMarkdownPostProcessorFn,\r\n} from '../api/pandoc';\r\nimport { PandocBlockCapsuleFilter } from '../api/pandoc_capsule';\r\nimport { markInputRuleFilter } from '../api/input_rule';\r\nimport { CompletionHandler } from '../api/completion';\r\n\r\n// required extensions (base non-customiziable pandoc nodes/marks + core behaviors)\r\nimport nodeText from '../nodes/text';\r\nimport nodeParagraph from '../nodes/paragraph';\r\nimport nodeHeading from '../nodes/heading';\r\nimport nodeBlockquote from '../nodes/blockquote';\r\nimport nodeCodeBlock from '../nodes/code_block';\r\nimport nodeLists from '../nodes/list/list';\r\nimport nodeImage from '../nodes/image/image';\r\nimport nodeFigure from '../nodes/image/figure';\r\nimport nodeHr from '../nodes/hr';\r\nimport nodeHardBreak from '../nodes/hard_break';\r\nimport nodeNull from '../nodes/null';\r\nimport markEm from '../marks/em';\r\nimport markStrong from '../marks/strong';\r\nimport markCode from '../marks/code';\r\nimport markLink from '../marks/link/link';\r\nimport behaviorHistory from '../behaviors/history';\r\nimport behaviorSelectAll from '../behaviors/select_all';\r\nimport behaviorCursor from '../behaviors/cursor';\r\nimport behaviorFind from '../behaviors/find';\r\nimport behaviorSpellingInteractive from '../behaviors/spelling/spelling-interactive';\r\nimport behaviorClearFormatting from '../behaviors/clear_formatting';\r\n\r\n// behaviors\r\nimport behaviorSmarty from '../behaviors/smarty';\r\nimport behaviorAttrDuplicateId from '../behaviors/attr_duplicate_id';\r\nimport behaviorTrailingP from '../behaviors/trailing_p';\r\nimport behaviorEmptyMark from '../behaviors/empty_mark';\r\nimport behaviorEscapeMark from '../behaviors/escape_mark';\r\nimport behaviorOutline from '../behaviors/outline';\r\nimport beahviorCodeBlockInput from '../behaviors/code_block_input';\r\nimport behaviorPasteText from '../behaviors/paste';\r\nimport behaviorBottomPadding from '../behaviors/bottom_padding';\r\nimport behaviorInsertSymbol from '../behaviors/insert_symbol/insert_symbol-plugin-symbol';\r\nimport behaviorInsertSymbolEmoji from '../behaviors/insert_symbol/insert_symbol-plugin-emoji';\r\nimport beahviorInsertSpecialCharacters from '../behaviors/insert_symbol/insert_special_characters';\r\nimport behaviorNbsp from '../behaviors/nbsp';\r\nimport behaviorRemoveSection from '../behaviors/remove_section';\r\nimport behaviorSlides from '../behaviors/slides';\r\n\r\n// marks\r\nimport markStrikeout from '../marks/strikeout';\r\nimport markSuperscript from '../marks/superscript';\r\nimport markSubscript from '../marks/subscript';\r\nimport markSmallcaps from '../marks/smallcaps';\r\nimport markUnderline from '../marks/underline';\r\nimport markRawInline from '../marks/raw_inline/raw_inline';\r\nimport markRawTex from '../marks/raw_inline/raw_tex';\r\nimport markRawHTML from '../marks/raw_inline/raw_html';\r\nimport markMath from '../marks/math/math';\r\nimport markCite from '../marks/cite/cite';\r\nimport markSpan from '../marks/span';\r\nimport markXRef from '../marks/xref/xref';\r\nimport markHTMLComment from '../marks/raw_inline/raw_html_comment';\r\nimport markShortcode from '../marks/shortcode';\r\nimport markEmoji from '../marks/emoji/emoji';\r\nimport { markOmniInsert } from '../behaviors/omni_insert/omni_insert';\r\n\r\n// nodes\r\nimport nodeFootnote from '../nodes/footnote/footnote';\r\nimport nodeRawBlock from '../nodes/raw_block';\r\nimport nodeYamlMetadata from '../nodes/yaml_metadata/yaml_metadata';\r\nimport nodeRmdCodeChunk from '../nodes/rmd_chunk/rmd_chunk';\r\nimport nodeDiv from '../nodes/div/div';\r\nimport nodeLineBlock from '../nodes/line_block';\r\nimport nodeTable from '../nodes/table/table';\r\nimport nodeDefinitionList from '../nodes/definition_list/definition_list';\r\nimport nodeUserComment from '../nodes/user_comment/user_comment';\r\nimport nodeShortcodeBlock from '../nodes/shortcode_block';\r\nimport nodeHtmlPreserve from '../nodes/html_preserve';\r\n\r\n// extension/plugin factories\r\nimport { aceExtension } from '../optional/ace/ace';\r\nimport { attrEditExtension } from '../behaviors/attr_edit/attr_edit';\r\nimport { codeViewClipboardPlugin } from '../api/code';\r\nimport { CodeViewExtensionFn, CodeViewOptions } from '../api/codeview';\r\nimport { ContextMenuHandlerFn } from '../api/menu';\r\n\r\nexport function initExtensions(\r\n context: ExtensionContext, \r\n extensions?: Array<Extension | ExtensionFn>,\r\n codeViewExtension?: CodeViewExtensionFn)\r\n: ExtensionManager {\r\n // create extension manager\r\n const manager = new ExtensionManager(context);\r\n\r\n // required extensions\r\n manager.register([\r\n nodeText,\r\n nodeParagraph,\r\n nodeHeading,\r\n nodeBlockquote,\r\n nodeLists,\r\n nodeCodeBlock,\r\n nodeImage,\r\n nodeFigure,\r\n nodeHr,\r\n nodeHardBreak,\r\n nodeNull,\r\n markEm,\r\n markStrong,\r\n markCode,\r\n markLink,\r\n behaviorHistory,\r\n behaviorSelectAll,\r\n behaviorCursor,\r\n behaviorFind,\r\n behaviorSpellingInteractive,\r\n behaviorClearFormatting,\r\n behaviorSlides\r\n ]);\r\n\r\n // optional extensions\r\n manager.register([\r\n // behaviors\r\n behaviorSmarty,\r\n behaviorAttrDuplicateId,\r\n behaviorTrailingP,\r\n behaviorEmptyMark,\r\n behaviorEscapeMark,\r\n behaviorOutline,\r\n beahviorCodeBlockInput,\r\n behaviorPasteText,\r\n behaviorBottomPadding,\r\n behaviorInsertSymbol,\r\n behaviorInsertSymbolEmoji,\r\n beahviorInsertSpecialCharacters,\r\n behaviorNbsp,\r\n behaviorRemoveSection,\r\n\r\n // nodes\r\n nodeDiv,\r\n nodeFootnote,\r\n nodeYamlMetadata,\r\n nodeRmdCodeChunk,\r\n nodeTable,\r\n nodeDefinitionList,\r\n nodeLineBlock,\r\n nodeRawBlock,\r\n nodeUserComment, // MUST come before markRawInline\r\n nodeShortcodeBlock,\r\n nodeHtmlPreserve,\r\n\r\n // marks\r\n markUnderline,\r\n markStrikeout,\r\n markSuperscript,\r\n markSubscript,\r\n markSmallcaps,\r\n markHTMLComment,\r\n markRawTex,\r\n markRawHTML,\r\n markRawInline,\r\n markMath,\r\n markCite,\r\n markSpan,\r\n markXRef,\r\n markShortcode,\r\n markEmoji,\r\n markOmniInsert,\r\n ]);\r\n\r\n // register external extensions (except CodeViewExtensions which are registe)\r\n if (extensions) {\r\n manager.register(extensions);\r\n }\r\n\r\n // additional extensions dervied from other extensions (e.g. extensions that have registered attr editors)\r\n // note that all of these take a callback to access the manager -- this is so that if an extension earlier\r\n // in the chain registers something the later extensions are able to see it\r\n manager.register([\r\n // bindings to 'Edit Attribute' command and UI adornment\r\n attrEditExtension(context.pandocExtensions, context.ui, context.format, manager.attrEditors()),\r\n ]);\r\n\r\n // additional plugins derived from extensions\r\n const codeViews = manager.codeViews();\r\n const plugins: Plugin[] = [];\r\n // provide ace code view extension if requested\r\n if (context.options.codeEditor === 'ace' && context.ui.chunks) {\r\n codeViewExtension = aceExtension;\r\n } \r\n // register code view extension\r\n if (codeViewExtension) {\r\n manager.register([codeViewExtension(codeViews)]);\r\n }\r\n plugins.push(codeViewClipboardPlugin(codeViews));\r\n\r\n // register plugins\r\n manager.registerPlugins(plugins);\r\n\r\n // return manager\r\n return manager;\r\n}\r\n\r\nexport class ExtensionManager {\r\n private context: ExtensionContext;\r\n private extensions: Extension[];\r\n private applyTransaction_?: (state: EditorState, tr: Transaction) => EditorState;\r\n\r\n public constructor(context: ExtensionContext) {\r\n this.context = context;\r\n this.extensions = [];\r\n }\r\n\r\n public register(extensions: ReadonlyArray<Extension | ExtensionFn>, priority = false): void {\r\n extensions.forEach(extension => {\r\n const ext = typeof extension === 'function' ? extension(this.context) : extension;\r\n if (ext) {\r\n if (priority) {\r\n this.extensions.unshift(ext);\r\n } else {\r\n this.extensions.push(ext);\r\n }\r\n if (ext?.applyTransaction) {\r\n if (this.applyTransaction_) {\r\n throw new Error(\"Only one applyTransaction handler can be registered\")\r\n }\r\n this.applyTransaction_ = ext.applyTransaction;\r\n }\r\n }\r\n });\r\n }\r\n\r\n public registerPlugins(plugins: Plugin[], priority = false) {\r\n this.register([{ plugins: () => plugins }], priority);\r\n }\r\n\r\n public view(view: EditorView) {\r\n this.collect(extension => {\r\n if (extension.view) {\r\n extension.view(view);\r\n }\r\n return undefined;\r\n });\r\n }\r\n\r\n public pandocMarks(): readonly PandocMark[] {\r\n return this.collect(extension => extension.marks);\r\n }\r\n\r\n public pandocNodes(): readonly PandocNode[] {\r\n return this.collect(extension => extension.nodes);\r\n }\r\n\r\n public pandocPreprocessors(): readonly PandocPreprocessorFn[] {\r\n return this.collectFrom({\r\n node: node => [node.pandoc.preprocessor],\r\n });\r\n }\r\n\r\n public pandocPostprocessors(): readonly PandocPostprocessorFn[] {\r\n return this.pandocReaders().flatMap(reader => (reader.postprocessor ? [reader.postprocessor] : []));\r\n }\r\n\r\n public pandocMarkdownPostProcessors(): readonly PandocMarkdownPostProcessorFn[] {\r\n return this.collectFrom({\r\n node: node => [node.pandoc.markdownPostProcessor],\r\n });\r\n }\r\n\r\n public pandocTokensFilters(): readonly PandocTokensFilterFn[] {\r\n return this.collectFrom({\r\n mark: mark => [mark.pandoc.tokensFilter],\r\n node: node => [node.pandoc.tokensFilter],\r\n });\r\n }\r\n\r\n public pandocBlockReaders(): readonly PandocBlockReaderFn[] {\r\n return this.collectFrom({\r\n node: node => [node.pandoc.blockReader],\r\n });\r\n }\r\n\r\n public pandocInlineHTMLReaders(): readonly PandocInlineHTMLReaderFn[] {\r\n return this.collectFrom({\r\n mark: mark => [mark.pandoc.inlineHTMLReader],\r\n node: node => [node.pandoc.inlineHTMLReader],\r\n });\r\n }\r\n\r\n public pandocBlockCapsuleFilters(): readonly PandocBlockCapsuleFilter[] {\r\n return this.collectFrom({\r\n node: node => [node.pandoc.blockCapsuleFilter],\r\n });\r\n }\r\n\r\n public pandocReaders(): readonly PandocTokenReader[] {\r\n return this.collectFrom({\r\n mark: mark => mark.pandoc.readers,\r\n node: node => node.pandoc.readers ?? [],\r\n });\r\n }\r\n\r\n public pandocMarkWriters(): readonly PandocMarkWriter[] {\r\n return this.collectFrom({\r\n mark: mark => [{ name: mark.name, ...mark.pandoc.writer }],\r\n });\r\n }\r\n\r\n public pandocNodeWriters(): readonly PandocNodeWriter[] {\r\n return this.collectFrom({\r\n node: node => {\r\n return node.pandoc.writer ? [{ name: node.name, write: node.pandoc.writer! }] : [];\r\n },\r\n });\r\n }\r\n\r\n public commands(schema: Schema): readonly ProsemirrorCommand[] {\r\n return this.collect<ProsemirrorCommand>(extension => extension.commands?.(schema));\r\n }\r\n\r\n public omniInserters(schema: Schema): OmniInserter[] {\r\n const omniInserters: OmniInserter[] = [];\r\n const commands = this.commands(schema);\r\n commands.forEach(command => {\r\n if (command.omniInsert) {\r\n omniInserters.push({\r\n ...command.omniInsert,\r\n id: command.id,\r\n command: command.execute,\r\n });\r\n }\r\n });\r\n return omniInserters;\r\n }\r\n\r\n public codeViews() {\r\n const views: { [key: string]: CodeViewOptions } = {};\r\n this.pandocNodes().forEach((node: PandocNode) => {\r\n if (node.code_view) {\r\n views[node.name] = node.code_view;\r\n }\r\n });\r\n return views;\r\n }\r\n\r\n public attrEditors() {\r\n return this.collectFrom({\r\n node: node => [node.attr_edit?.()],\r\n });\r\n }\r\n\r\n public baseKeys(schema: Schema): readonly BaseKeyBinding[] {\r\n return this.collect(extension => extension.baseKeys?.(schema));\r\n }\r\n\r\n public applyTransaction() {\r\n return this.applyTransaction_;\r\n }\r\n\r\n public appendTransactions(schema: Schema): readonly AppendTransactionHandler[] {\r\n return this.collect(extension => extension.appendTransaction?.(schema));\r\n }\r\n\r\n public appendMarkTransactions(schema: Schema): readonly AppendMarkTransactionHandler[] {\r\n return this.collect(extension => extension.appendMarkTransaction?.(schema));\r\n }\r\n\r\n public plugins(schema: Schema): readonly Plugin[] {\r\n return this.collect(extension => extension.plugins?.(schema));\r\n }\r\n\r\n public fixups(schema: Schema, view: EditorView): readonly FixupFn[] {\r\n return this.collect(extension => extension.fixups?.(schema, view));\r\n }\r\n\r\n public completionHandlers(): readonly CompletionHandler[] {\r\n return this.collect(extension => extension.completionHandlers?.());\r\n }\r\n\r\n public contextMenuHandlers(): readonly ContextMenuHandlerFn[] {\r\n return this.collect(extension => extension.contextMenuHandlers?.());\r\n }\r\n\r\n // NOTE: return value not readonly b/c it will be fed directly to a\r\n // Prosemirror interface that doesn't take readonly\r\n public inputRules(schema: Schema): InputRule[] {\r\n const markFilter = markInputRuleFilter(schema, this.pandocMarks());\r\n return this.collect<InputRule>(extension => extension.inputRules?.(schema, markFilter));\r\n }\r\n\r\n private collect<T>(collector: (extension: Extension) => readonly T[] | undefined) {\r\n return this.collectFrom({\r\n extension: extension => collector(extension) ?? [],\r\n });\r\n }\r\n\r\n /**\r\n * Visits extensions in order of registration, providing optional callbacks\r\n * for extension, mark, and node. The return value of callbacks should be\r\n * arrays of (T | undefined | null); these will all be concatenated together,\r\n * with the undefined and nulls filtered out.\r\n *\r\n * @param visitor Object containing callback methods for the different\r\n * extension parts.\r\n */\r\n private collectFrom<T>(visitor: {\r\n extension?: (extension: Extension) => ReadonlyArray<T | undefined | null>;\r\n mark?: (mark: PandocMark) => ReadonlyArray<T | undefined | null>;\r\n node?: (node: PandocNode) => ReadonlyArray<T | undefined | null>;\r\n }): T[] {\r\n const results: Array<T | undefined | null> = [];\r\n\r\n this.extensions.forEach(extension => {\r\n if (visitor.extension) {\r\n results.push(...visitor.extension(extension));\r\n }\r\n if (visitor.mark && extension.marks) {\r\n results.push(...extension.marks.flatMap(visitor.mark));\r\n }\r\n if (visitor.node && extension.nodes) {\r\n results.push(...extension.nodes.flatMap(visitor.node));\r\n }\r\n });\r\n\r\n return results.filter(value => typeof value !== 'undefined' && value !== null) as T[];\r\n }\r\n}\r\n","/*\r\n * editor-theme.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nexport interface EditorTheme {\r\n darkMode: boolean;\r\n highContrast: boolean;\r\n solarizedMode: boolean;\r\n cursorColor: string;\r\n selectionColor: string;\r\n selectionForegroundColor?: string; // defaults to textColor if not specified\r\n nodeSelectionColor: string;\r\n backgroundColor: string;\r\n metadataBackgroundColor: string;\r\n chunkBackgroundColor: string;\r\n spanBackgroundColor: string;\r\n divBackgroundColor: string;\r\n commentColor: string;\r\n commentBackgroundColor: string;\r\n hrBackgroundColor: string;\r\n gutterBackgroundColor: string;\r\n gutterTextColor: string;\r\n toolbarBackgroundColor: string;\r\n toolbarTextColor: string;\r\n textColor: string;\r\n lightTextColor: string;\r\n disabledTextColor: string;\r\n placeholderTextColor: string;\r\n invisibleTextColor: string;\r\n linkTextColor: string;\r\n surfaceWidgetTextColor: string;\r\n markupTextColor: string;\r\n findTextBackgroundColor: string;\r\n findTextBorderColor: string;\r\n borderBackgroundColor: string;\r\n blockBorderColor: string;\r\n focusOutlineColor: string;\r\n paneBorderColor: string;\r\n fixedWidthFont: string;\r\n fixedWidthFontSizePt: number;\r\n proportionalFont: string;\r\n proportionalFontSizePt: number;\r\n suggestWidgetBackgroundColor: string;\r\n suggestWidgetBorderColor: string;\r\n suggestWidgetForegroundColor: string;\r\n suggestWidgetFocusHighlightForegroundColor: string;\r\n suggestWidgetHighlightForegroundColor: string;\r\n suggestWidgetSelectedBackgroundColor: string;\r\n suggestWidgetSelectedForegroundColor: string;\r\n suggestWidgetSelectedIconForegroundColor: string; \r\n symbolIconClassForegroundColor: string;\r\n symbolIconConstantForegroundColor: string;\r\n symbolIconEnumForegroundColor: string;\r\n symbolIconFunctionForegroundColor: string;\r\n symbolIconInterfaceForegroundColor: string;\r\n symbolIconKeywordForegroundColor: string;\r\n symbolIconMethodForegroundColor: string;\r\n symbolIconNamespaceForegroundColor: string;\r\n symbolIconPropertyForegroundColor: string;\r\n symbolIconTextForegroundColor: string;\r\n symbolIconTypeParameterForegroundColor: string;\r\n symbolIconVariableForegroundColor: string;\r\n debugStartForegroundColor: string;\r\n debugStepForgroundColor: string;\r\n code: CodeTheme;\r\n}\r\n\r\nexport interface CodeTheme {\r\n keywordColor: string;\r\n atomColor: string;\r\n numberColor: string;\r\n variableColor: string;\r\n defColor: string;\r\n operatorColor: string;\r\n commentColor: string;\r\n stringColor: string;\r\n metaColor: string;\r\n builtinColor: string;\r\n bracketColor: string;\r\n tagColor: string;\r\n attributeColor: string;\r\n hrColor: string;\r\n linkColor: string;\r\n errorColor: string;\r\n}\r\n\r\nexport function defaultTheme(): EditorTheme {\r\n return {\r\n darkMode: false,\r\n highContrast: false,\r\n solarizedMode: false,\r\n cursorColor: 'black',\r\n selectionColor: '#8cf',\r\n selectionForegroundColor: 'black',\r\n nodeSelectionColor: 'rgb(102,155,243)',\r\n backgroundColor: 'white',\r\n metadataBackgroundColor: 'rgb(255, 255, 255)',\r\n chunkBackgroundColor: 'rgb(251,251,251)',\r\n spanBackgroundColor: '#fff8dc',\r\n divBackgroundColor: 'rgb(243, 243, 243)',\r\n commentColor: '#3c4c72',\r\n commentBackgroundColor: '#FFECCB',\r\n hrBackgroundColor: '#ddd',\r\n gutterBackgroundColor: '#f0f0f0',\r\n gutterTextColor: '#333',\r\n toolbarBackgroundColor: '#f3f3f3',\r\n toolbarTextColor: '#333',\r\n textColor: 'black',\r\n surfaceWidgetTextColor: 'rgba(0,0,0,0.5)',\r\n lightTextColor: 'rgb(60, 76, 114)',\r\n disabledTextColor: \"rgba(97, 97, 97, 0.5)\",\r\n linkTextColor: '#106ba3',\r\n placeholderTextColor: 'gray',\r\n invisibleTextColor: 'rgb(191, 191, 191)',\r\n markupTextColor: 'rgb(185, 6, 144)',\r\n findTextBackgroundColor: 'rgb(250, 250, 255)',\r\n findTextBorderColor: 'rgb(200, 200, 250)',\r\n borderBackgroundColor: '#ddd',\r\n blockBorderColor: '#ddd',\r\n focusOutlineColor: '#5d84cd',\r\n paneBorderColor: 'silver',\r\n fixedWidthFont: 'monospace, monospace',\r\n fixedWidthFontSizePt: 10,\r\n proportionalFont: '\"Lucida Sans\", \"DejaVu Sans\", \"Lucida Grande\", \"Segoe UI\", Verdana, Helvetica, sans-serif',\r\n proportionalFontSizePt: 10,\r\n suggestWidgetBackgroundColor: \"#f3f3f3\",\r\n suggestWidgetBorderColor: \"#c8c8c8\",\r\n suggestWidgetForegroundColor: \"#000000\",\r\n suggestWidgetFocusHighlightForegroundColor: \"#bbe7ff\",\r\n suggestWidgetHighlightForegroundColor: \"#0066bf\",\r\n suggestWidgetSelectedBackgroundColor: \"#0060c0\",\r\n suggestWidgetSelectedForegroundColor: \"#ffffff\",\r\n suggestWidgetSelectedIconForegroundColor: \"#ffffff\", \r\n symbolIconClassForegroundColor: '#D67E00',\r\n symbolIconConstantForegroundColor: \"#616161\",\r\n symbolIconEnumForegroundColor: '#D67E00',\r\n symbolIconFunctionForegroundColor: \"#652D90\",\r\n symbolIconInterfaceForegroundColor: \"#007ACC\",\r\n symbolIconKeywordForegroundColor: \"#616161\",\r\n symbolIconMethodForegroundColor: '#652D90',\r\n symbolIconNamespaceForegroundColor: \"#616161\",\r\n symbolIconPropertyForegroundColor: \"#616161\",\r\n symbolIconTextForegroundColor: \"#616161\",\r\n symbolIconTypeParameterForegroundColor: \"#616161\",\r\n symbolIconVariableForegroundColor: \"#007ACC\",\r\n debugStartForegroundColor: \"#388a34\",\r\n debugStepForgroundColor: \"#007acc\",\r\n code: {\r\n keywordColor: 'rgb(0, 0, 255)',\r\n atomColor: 'rgb(88, 92, 246)',\r\n numberColor: 'rgb(0, 0, 205)',\r\n variableColor: 'rgb(0, 0, 0)',\r\n defColor: 'rgb(0, 0, 0)',\r\n operatorColor: 'rgb(104, 118, 135)',\r\n commentColor: 'rgb(76, 136, 107)',\r\n stringColor: 'rgb(3, 106, 7)',\r\n metaColor: 'rgb(0, 0, 0)',\r\n builtinColor: 'rgb(0, 0, 0)',\r\n bracketColor: 'rgb(104, 118, 135)',\r\n tagColor: 'rgb(0, 22, 142)',\r\n attributeColor: 'rgb(0, 0, 0)',\r\n hrColor: 'rgb(0, 0, 0)',\r\n linkColor: 'rgb(0, 0, 255)',\r\n errorColor: 'rgb(197, 6, 11)',\r\n },\r\n };\r\n}\r\n\r\nexport function applyTheme(theme: EditorTheme) {\r\n // merge w/ defaults\r\n const defaults = defaultTheme();\r\n theme = {\r\n ...defaults,\r\n ...theme,\r\n code: {\r\n ...defaults.code,\r\n ...theme.code,\r\n },\r\n };\r\n\r\n // generate theme css\r\n const themeCss = `\r\n .pm-default-theme .pm-background-color {\r\n background-color: ${defaults.backgroundColor} !important;\r\n }\r\n .pm-default-theme .pm-text-color {\r\n color: ${defaults.textColor} !important;\r\n }\r\n .pm-default-theme .pm-border-background-color {\r\n background-color: ${defaults.borderBackgroundColor} !important;\r\n }\r\n .pm-default-theme .pm-hr-background-color {\r\n background-color: ${defaults.hrBackgroundColor} !important;\r\n }\r\n .pm-default-theme .pm-input-text {\r\n border-color: ${defaults.paneBorderColor} !important\r\n }\r\n .pm-default-theme .pm-block-border-color {\r\n border-color: ${defaults.blockBorderColor} !important;\r\n }\r\n .pm-default-theme .pm-input-outline-button {\r\n color: ${defaults.textColor};\r\n border-color: ${defaults.textColor};\r\n background-color: ${defaults.backgroundColor};\r\n }\r\n .pm-default-theme .pm-selected-navigation-tree-item {\r\n background-color: ${defaults.findTextBackgroundColor} !important;\r\n border-color: ${defaults.findTextBorderColor} !important;\r\n }\r\n .pm-default-theme .pm-navigation-tree-item {\r\n border-color: ${defaults.backgroundColor} !important;\r\n }\r\n .pm-default-theme .pm-block-border-color {\r\n border-color: ${defaults.blockBorderColor} !important;\r\n }\r\n .pm-default-theme .pm-focus-outline-color {\r\n border-color: ${defaults.focusOutlineColor} !important;\r\n }\r\n .pm-default-theme .pm-input-button {\r\n border-color: ${defaults.borderBackgroundColor};\r\n background-color: ${defaults.backgroundColor};\r\n }\r\n .pm-default-theme .pm-placeholder-text-color {\r\n color: ${defaults.placeholderTextColor} !important;\r\n }\r\n .pm-default-theme .pm-background-color *::selection {\r\n background-color: ${defaults.selectionColor} !important;\r\n }\r\n .pm-default-theme .pm-text-color *::selection {\r\n color: ${defaults.selectionForegroundColor || defaults.textColor} !important;\r\n }\r\n .pm-default-theme .pm-find-text,\r\n .pm-default-theme .pm-list-item-selected,\r\n .pm-default-theme .pm-grid-item-selected {\r\n background-color: ${defaults.findTextBackgroundColor} !important;\r\n box-shadow: 0 0 0 1px ${defaults.findTextBorderColor}; \r\n border-radius: 3px;\r\n }\r\n .pm-default-theme .pm-rstudio-button {\r\n border-color: DarkGray !important;\r\n }\r\n .pm-cursor-color {\r\n caret-color: ${theme.cursorColor}\r\n }\r\n .pm-background-color {\r\n background-color: ${theme.backgroundColor} !important;\r\n }\r\n .pm-metadata-background-color {\r\n background-color: ${theme.metadataBackgroundColor} !important;\r\n }\r\n .pm-chunk-background-color {\r\n background-color: ${theme.chunkBackgroundColor} !important;\r\n }\r\n .pm-span-background-color {\r\n background-color: ${theme.spanBackgroundColor} !important;\r\n }\r\n .pm-div-background-color {\r\n background-color: ${theme.divBackgroundColor} !important;\r\n }\r\n .pm-nbsp-background-color {\r\n background-color: ${theme.spanBackgroundColor} !important;\r\n }\r\n .pm-comment-color {\r\n color: ${theme.commentColor} !important;\r\n }\r\n .pm-comment-background-color {\r\n background-color: ${theme.commentBackgroundColor} !important;\r\n }\r\n .pm-text-color {\r\n color: ${theme.textColor} !important;\r\n }\r\n .pm-text-color *::selection {\r\n color: ${theme.selectionForegroundColor || theme.textColor} !important;\r\n }\r\n .pm-surface-widget-text-color {\r\n color: ${theme.surfaceWidgetTextColor} !important;\r\n }\r\n .pm-light-text-color {\r\n color: ${theme.lightTextColor} !important;\r\n }\r\n .pm-placeholder-text-color {\r\n color: ${theme.placeholderTextColor} !important;\r\n }\r\n .pm-invisible-text-color {\r\n color: ${theme.invisibleTextColor} !important;\r\n }\r\n .pm-link-text-color {\r\n color: ${theme.linkTextColor} !important;\r\n }\r\n .pm-markup-text-color {\r\n color: ${theme.markupTextColor} !important;\r\n }\r\n .pm-toolbar-background-color {\r\n background-color: ${theme.toolbarBackgroundColor} !important;\r\n }\r\n .pm-toolbar-text-color, .pm-toolbar-text-color {\r\n color: ${theme.toolbarTextColor} !important;\r\n }\r\n .pm-find-text,\r\n .pm-list-item-selected,\r\n .pm-grid-item-selected {\r\n background-color: ${theme.findTextBackgroundColor} !important;\r\n box-shadow: 0 0 0 1px ${theme.findTextBorderColor}; \r\n border-radius: 3px;\r\n }\r\n .pm-selected-text {\r\n color: ${theme.selectionForegroundColor || theme.textColor} !important;\r\n background-color: ${theme.selectionColor} !important;\r\n }\r\n .pm-selected-list-item {\r\n background-color: ${theme.findTextBackgroundColor} !important;\r\n border: 1px solid ${theme.findTextBorderColor} !important;\r\n border-radius: 3px;\r\n }\r\n .pm-dark-mode .pm-selected-list-item {\r\n background-color: ${theme.chunkBackgroundColor} !important;\r\n border: 1px solid transparent !important;\r\n }\r\n .pm-navigation-tree-item {\r\n border: 1px solid ${theme.backgroundColor} !important;\r\n border-radius: 3px;\r\n margin-left: 2px;\r\n margin-right: 2px;\r\n }\r\n .pm-selected-navigation-tree-item {\r\n background-color: ${theme.findTextBackgroundColor} !important;\r\n border: 1px solid ${theme.findTextBorderColor} !important;\r\n border-radius: 3px;\r\n margin-left: 2px;\r\n margin-right: 2px;\r\n }\r\n .pm-border-background-color {\r\n background-color: ${theme.borderBackgroundColor}!important;\r\n }\r\n .pm-hr-background-color {\r\n background-color: ${theme.hrBackgroundColor}!important;\r\n }\r\n .pm-block-border-color {\r\n border-color: ${theme.blockBorderColor} !important;\r\n }\r\n .pm-focus-outline-color {\r\n border-color: ${theme.focusOutlineColor} !important;\r\n }\r\n .pm-pane-border-color {\r\n border-color: ${theme.paneBorderColor} !important;\r\n }\r\n .pm-div .pm-div {\r\n border-color: ${theme.focusOutlineColor} !important;\r\n }\r\n .pm-raw-block-border {\r\n border-color: ${theme.markupTextColor} !important;\r\n }\r\n .pm-popup {\r\n box-shadow: 0 1px 3px ${theme.blockBorderColor} !important;\r\n }\r\n .pm-selected-node-outline-color,\r\n .ProseMirror-selectednode {\r\n outline-color: ${theme.nodeSelectionColor} !important;\r\n }\r\n .pm-selected-node-border-color {\r\n border-color: ${theme.nodeSelectionColor} !important;\r\n }\r\n .pm-dark-mode .pm-selected-node-outline-color,\r\n .pm-dark-mode .ProseMirror-selectednode {\r\n outline-color: ${theme.nodeSelectionColor} !important;\r\n }\r\n .pm-dark-mode .pm-selected-node-border-color {\r\n border-color: ${theme.nodeSelectionColor} !important;\r\n }\r\n .pm-background-color *::selection {\r\n background-color: ${theme.selectionColor} !important;\r\n }\r\n .pm-background-color *::-moz-selection {\r\n background-color: ${theme.selectionColor} !important;\r\n }\r\n .pm-fixedwidth-font {\r\n font-family: ${theme.fixedWidthFont} !important;\r\n font-size: ${theme.fixedWidthFontSizePt}pt !important;\r\n }\r\n .pm-proportional-font {\r\n font-family: ${theme.proportionalFont} !important;\r\n font-size: ${theme.proportionalFontSizePt}pt !important;\r\n }\r\n .pm-emoji-font {\r\n font-family: ${theme.fixedWidthFont} !important;\r\n }\r\n .pm-input-text {\r\n border-color: ${theme.paneBorderColor};\r\n }\r\n .pm-input-button {\r\n border-color: ${theme.borderBackgroundColor};\r\n background-color: ${theme.backgroundColor};\r\n }\r\n .pm-input-outline-button {\r\n color: ${theme.textColor};\r\n border-color: ${theme.textColor};\r\n background-color: ${theme.backgroundColor};\r\n }\r\n .pm-codeview-run-button {\r\n color: ${theme.debugStartForegroundColor};\r\n }\r\n .pm-codeview-run-other-button {\r\n color: ${theme.debugStepForgroundColor}\r\n }\r\n .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child,\r\n .pm-ace-first-line-meta .ace_text-layer .ace_line_group:first-child span {\r\n color: ${theme.lightTextColor} !important;\r\n }\r\n .pm-ace-collapsed.pm-ace-focused {\r\n border-color: ${theme.paneBorderColor} !important;\r\n }\r\n .ProseMirror-gapcursor:after {\r\n border-top: 1px solid ${theme.textColor};\r\n }\r\n `;\r\n\r\n // set style\r\n setStyleElement('pm-editor-theme-styles-id', themeCss);\r\n}\r\n\r\nexport function applyPadding(padding: string) {\r\n const paddingCss = `\r\n .pm-editing-root-node {\r\n padding-left: ${padding} !important;\r\n padding-right: ${padding} !important;\r\n }\r\n `;\r\n setStyleElement('pm-editor-padding-styles-id', paddingCss);\r\n}\r\n\r\nfunction setStyleElement(id: string, css: string) {\r\n // get access to style element (create if necessary)\r\n let styleEl = window.document.getElementById(id);\r\n if (styleEl === null) {\r\n styleEl = window.document.createElement('style');\r\n styleEl.setAttribute('id', id);\r\n styleEl.setAttribute('type', 'text/css');\r\n window.document.head.appendChild(styleEl);\r\n }\r\n\r\n // set css\r\n styleEl.innerHTML = css;\r\n}\r\n","/*\r\n * sourcepos.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { EditorState } from \"prosemirror-state\";\r\nimport { Node as ProsemirrorNode } from \"prosemirror-model\";\r\n\r\nimport { SourcePos, SourcePosBlock, SourcePosLocation } from \"editor-types\";\r\nimport { PandocTokenType } from \"./pandoc\";\r\n\r\nexport function getEditorSourcePos(state: EditorState): SourcePos {\r\n\r\n const paraBlockTypes = [\r\n 'paragraph',\r\n 'table_container',\r\n 'figure',\r\n 'line_block',\r\n 'definition_list',\r\n 'shortcode_block'\r\n ]\r\n\r\n const blockTypes: Record<string,SourcePosBlock> = {\r\n 'heading': PandocTokenType.Header,\r\n 'code_block': PandocTokenType.CodeBlock,\r\n 'rmd_chunk': PandocTokenType.CodeBlock,\r\n 'div': PandocTokenType.Div,\r\n 'ordered_list': PandocTokenType.OrderedList,\r\n 'bullet_list': PandocTokenType.BulletList,\r\n 'raw_block': PandocTokenType.RawBlock,\r\n 'blockquote': PandocTokenType.BlockQuote,\r\n 'horizontal_rule': PandocTokenType.HorizontalRule\r\n };\r\n \r\n const locations: SourcePosLocation[] = [];\r\n state.doc.descendants((node: ProsemirrorNode, pos: number) => {\r\n if (paraBlockTypes.includes(node.type.name)) {\r\n locations.push({ block: PandocTokenType.Para, pos });\r\n return false;\r\n } else {\r\n const block = blockTypes[node.type.name];\r\n if (block) {\r\n locations.push({ block, pos});\r\n }\r\n return true;\r\n }\r\n });\r\n\r\n return {\r\n locations,\r\n pos: state.selection.from\r\n }\r\n\r\n}\r\n","/*\r\n * editor.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\nimport { inputRules } from 'prosemirror-inputrules';\r\nimport { keydownHandler } from 'prosemirror-keymap';\r\nimport { Node as ProsemirrorNode, Schema, DOMParser, ParseOptions, Slice, Fragment } from 'prosemirror-model';\r\nimport { EditorState, Plugin, PluginKey, TextSelection, Transaction } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport 'prosemirror-view/style/prosemirror.css';\r\n\r\nimport applyDevTools from \"prosemirror-dev-tools\";\r\n\r\nimport { setTextSelection } from 'prosemirror-utils';\r\n\r\nimport { qtWebEngineVersion } from 'core-browser';\r\n\r\nimport { citeUI } from '../api/cite';\r\nimport { EditorOptions } from '../api/options';\r\nimport { ProsemirrorCommand, CommandFn, EditorCommand } from '../api/command';\r\nimport { EditorUI, EditorUIImages } from '../api/ui-types';\r\nimport {\r\n InsertCiteProps,\r\n InsertCiteUI,\r\n UIToolsAttr,\r\n UIToolsImage,\r\n EditorMenus,\r\n EditorServer, \r\n EditingOutlineLocation, \r\n EditorOutline, \r\n SourcePos,\r\n NavLocation,\r\n CodeViewActiveBlockContext,\r\n CodeViewSelectionAction\r\n} from 'editor-types';\r\n\r\nimport {\r\n attrPropsToInput,\r\n attrInputToProps,\r\n asPandocId,\r\n asHtmlId,\r\n} from '../api/ui';\r\n\r\nimport { Extension, ExtensionFn } from '../api/extension';\r\nimport { PandocWriterOptions } from '../api/pandoc-types';\r\nimport { PandocCapabilities, getPandocCapabilities } from '../api/pandoc_capabilities';\r\nimport { fragmentToHTML } from '../api/html';\r\nimport { EventType, EventHandler, PrefsChangedEvent, ThemeChangedEvent } from '../api/event-types';\r\nimport { DOMEditorEvents } from '../api/events';\r\n\r\nimport {\r\n ScrollEvent,\r\n UpdateEvent,\r\n OutlineChangeEvent,\r\n StateChangeEvent,\r\n ResizeEvent,\r\n LayoutEvent,\r\n FocusEvent,\r\n DispatchEvent,\r\n NavigateEvent,\r\n BlurEvent,\r\n} from '../api/event-types';\r\nimport {\r\n resolvePandocFormat,\r\n pandocFormatConfigFromCode,\r\n pandocFormatConfigFromDoc,\r\n} from '../api/pandoc_format';\r\nimport {\r\n PandocFormat,\r\n PandocFormatConfig\r\n} from '../api/pandoc-types';\r\nimport { baseKeysPlugin } from '../api/basekeys';\r\nimport {\r\n appendTransactionsPlugin,\r\n appendMarkTransactionsPlugin,\r\n kFixupTransaction,\r\n kAddToHistoryTransaction,\r\n kSetMarkdownTransaction,\r\n kNoUpdateTransaction,\r\n kThemeChangedTransaction,\r\n} from '../api/transaction';\r\nimport { getOutlineNodes, getEditingOutlineLocation } from '../api/outline';\r\nimport { EditingLocation, getEditingLocation, setEditingLocation } from '../api/location';\r\nimport { navigateTo } from '../api/navigation';\r\nimport { NavigationType } from '../api/navigation-types';\r\nimport { FixupContext } from '../api/fixup';\r\nimport { unitToPixels, pixelsToUnit, roundUnit, kValidUnits } from '../api/image';\r\nimport { kPercentUnit } from '../api/css';\r\nimport { EditorFormat } from '../api/format';\r\nimport { diffChars, EditorChange } from '../api/change';\r\nimport { markInputRuleFilter } from '../api/input_rule';\r\nimport { editorMath } from '../api/math';\r\nimport { EditorEvents } from '../api/event-types';\r\nimport { EditorMarkdown } from '../api/markdown-types';\r\nimport { insertRmdChunk } from '../api/rmd';\r\nimport { pandocAutoIdentifier } from '../api/pandoc_id';\r\nimport { wrapSentences } from '../api/wrap';\r\nimport { yamlFrontMatter, applyYamlFrontMatter } from '../api/yaml';\r\nimport { EditorSpellingDoc } from '../api/spelling';\r\nimport { getPresentationEditorLocation, PresentationEditorLocation, positionForPresentationEditorLocation } from '../api/presentation';\r\nimport { kPmScrollContainer } from '../api/scroll';\r\nimport { codeViewActiveBlockContext, CodeViewExtensionFn, codeViewSetBlockSelection } from '../api/codeview';\r\nimport { editingRootNode, editingRootNodeClosestToPos } from '../api/node';\r\nimport { ContextMenuSource } from '../api/menu';\r\nimport { mapSlice } from '../api/slice';\r\n\r\nimport { getTitle, setTitle } from '../nodes/yaml_metadata/yaml_metadata-title';\r\nimport { getOutline } from '../behaviors/outline';\r\nimport {\r\n FindOptions,\r\n find,\r\n matchCount,\r\n selectFirst,\r\n selectNext,\r\n selectPrevious,\r\n replace,\r\n replaceAll,\r\n clear,\r\n selectCurrent,\r\n findPluginState,\r\n} from '../behaviors/find';\r\n\r\nimport { omniInsertExtension } from '../behaviors/omni_insert/omni_insert';\r\nimport { completionExtension } from '../behaviors/completion/completion';\r\n\r\nimport { getSpellingDoc } from '../behaviors/spelling/spelling-interactive';\r\nimport { realtimeSpellingPlugin, invalidateAllWords, invalidateWord, spellingContextMenuHandler } from '../behaviors/spelling/spelling-realtime';\r\n\r\nimport { PandocConverter, PandocLineWrapping } from '../pandoc/pandoc_converter';\r\n\r\nimport { defaultEditorUIImages } from './editor-images';\r\nimport { editorMenus } from './editor-menus';\r\nimport { editorSchema } from './editor-schema';\r\n\r\n// import styles before extensions so they can be overridden by extensions\r\nimport './styles/frame.css';\r\nimport './styles/styles.css';\r\nimport { ExtensionManager, initExtensions } from './editor-extensions';\r\nimport { defaultTheme, EditorTheme, applyTheme, applyPadding } from './editor-theme';\r\nimport { getEditorSourcePos } from '../api/sourcepos';\r\nexport { defaultTheme };\r\nexport type { EditorTheme };\r\n\r\n// re-export editor ui\r\nexport * from '../api/ui-types';\r\n\r\nexport interface EditorCode {\r\n code: string;\r\n selection_only: boolean;\r\n location: EditingOutlineLocation;\r\n}\r\n\r\nexport interface EditorSetMarkdownResult {\r\n // editor view of markdown (as it will be persisted)\r\n canonical: string;\r\n\r\n // line wrapping\r\n line_wrapping: PandocLineWrapping;\r\n\r\n // unrecoginized pandoc tokens\r\n unrecognized: string[];\r\n\r\n // example lists?\r\n example_lists: boolean;\r\n\r\n // unparsed meta\r\n unparsed_meta: { [key: string]: unknown };\r\n\r\n // updated outline \r\n location: EditingOutlineLocation;\r\n}\r\n\r\nexport interface EditorContext {\r\n readonly server: EditorServer;\r\n readonly ui: EditorUI;\r\n readonly hooks?: EditorHooks;\r\n readonly extensions?: Array<Extension | ExtensionFn>;\r\n readonly codeViewExtension?: CodeViewExtensionFn;\r\n}\r\n\r\nexport interface EditorHooks {\r\n isEditable?: () => boolean;\r\n}\r\n\r\nexport interface EditorKeybindings {\r\n [id: string]: string[];\r\n}\r\n\r\nexport interface EditorSelection {\r\n from: number;\r\n to: number;\r\n navigation_id: string | null;\r\n}\r\n\r\nexport interface EditorFindReplace {\r\n find: (term: string, options: FindOptions) => boolean;\r\n matches: () => number;\r\n selectFirst: () => boolean;\r\n selectCurrent: () => boolean;\r\n selectNext: () => boolean;\r\n selectPrevious: () => boolean;\r\n replace: (text: string) => boolean;\r\n replaceAll: (text: string) => number;\r\n clear: () => boolean;\r\n}\r\n\r\nexport { EditorCommandId as EditorCommands } from '../api/command';\r\n\r\nexport type { UIToolsAttr, UIToolsImage } from \"editor-types\"\r\n\r\nexport interface UIToolsFormat {\r\n parseFormatConfig(markdown: string, isRmd: boolean): PandocFormatConfig;\r\n}\r\n\r\nexport interface UIToolsSource {\r\n diffChars(from: string, to: string, timeout: number): EditorChange[];\r\n}\r\n\r\nexport interface UIToolsCitation {\r\n citeUI(citeProps: InsertCiteProps): InsertCiteUI;\r\n}\r\n\r\nexport interface UIToolsContext {\r\n defaultUIImages(): EditorUIImages;\r\n}\r\n\r\nexport class UITools {\r\n public readonly attr: UIToolsAttr;\r\n public readonly image: UIToolsImage;\r\n public readonly format: UIToolsFormat;\r\n public readonly source: UIToolsSource;\r\n public readonly citation: UIToolsCitation;\r\n public readonly context: UIToolsContext;\r\n\r\n constructor() {\r\n this.attr = {\r\n propsToInput: attrPropsToInput,\r\n inputToProps: attrInputToProps,\r\n pandocAutoIdentifier: (text: string) => pandocAutoIdentifier(text, false),\r\n asPandocId,\r\n asHtmlId\r\n };\r\n\r\n this.image = {\r\n validUnits: () => kValidUnits,\r\n percentUnit: () => kPercentUnit,\r\n unitToPixels,\r\n pixelsToUnit,\r\n roundUnit,\r\n };\r\n\r\n this.format = {\r\n parseFormatConfig: pandocFormatConfigFromCode,\r\n };\r\n\r\n this.source = {\r\n diffChars,\r\n };\r\n\r\n this.citation = {\r\n citeUI,\r\n };\r\n\r\n this.context = {\r\n defaultUIImages: defaultEditorUIImages,\r\n }\r\n }\r\n}\r\n\r\nconst keybindingsPlugin = new PluginKey('keybindings');\r\n\r\n\r\n// narrower interface for clients\r\nexport interface EditorOperations {\r\n // set content\r\n setTitle(title: string): void;\r\n setMarkdown(\r\n markdown: string,\r\n options: PandocWriterOptions,\r\n emitUpdate: boolean\r\n ): Promise<EditorSetMarkdownResult | null>;\r\n\r\n // get content\r\n getStateJson() : unknown;\r\n getMarkdownFromStateJson(stateJson: unknown, options: PandocWriterOptions) : Promise<string>;\r\n getMarkdown(options: PandocWriterOptions) : Promise<EditorCode>;\r\n getEditorSourcePos(): SourcePos;\r\n getSlideIndex(): number;\r\n\r\n // codeviews\r\n getCodeViewActiveBlockContext() : CodeViewActiveBlockContext | undefined;\r\n setBlockSelection(context: CodeViewActiveBlockContext, action: CodeViewSelectionAction) : void;\r\n\r\n // subsystems\r\n getFindReplace() : EditorFindReplace | undefined\r\n\r\n // activation/navigation\r\n blur(): void;\r\n focus(navigation?: NavLocation): void;\r\n hasFocus(): boolean;\r\n navigate(type: NavigationType, id: string, recordCurrent: boolean, animate?: boolean): void;\r\n navigateToSourcePos(pos: SourcePos) : void;\r\n\r\n // theme/content\r\n applyTheme(theme: EditorTheme): void;\r\n setMaxContentWidth(maxWidth: number, minPadding?: number): void;\r\n \r\n // events\r\n subscribe<TDetail>(event: EventType<TDetail> | string, handler: EventHandler<TDetail>): VoidFunction;\r\n\r\n // notify the editor that prefs have changed\r\n onPrefsChanged(): void;\r\n\r\n // notify the editor that loading failed\r\n onLoadFailed(error: unknown): void;\r\n}\r\n\r\nexport class Editor {\r\n // core context passed from client\r\n private readonly parent: HTMLElement;\r\n private readonly context: EditorContext;\r\n private readonly events: EditorEvents;\r\n\r\n // options (derived from defaults + config)\r\n private readonly options: EditorOptions;\r\n\r\n // format (pandocFormat includes additional diagnostics based on the validity of\r\n // provided mode + extensions)\r\n private readonly format: EditorFormat;\r\n private readonly pandocFormat: PandocFormat;\r\n\r\n // pandoc capabilities\r\n private pandocCapabilities: PandocCapabilities;\r\n\r\n // markdown services\r\n private editorMarkdown: EditorMarkdown;\r\n\r\n // core prosemirror state/behaviors\r\n private readonly extensions: ExtensionManager;\r\n private readonly schema: Schema;\r\n private state: EditorState;\r\n private readonly view: EditorView;\r\n private readonly pandocConverter: PandocConverter;\r\n\r\n\r\n // track active theme\r\n private theme: EditorTheme;\r\n\r\n // setting via setKeybindings forces reconfiguration of EditorState\r\n // with plugins recreated\r\n private keybindings: EditorKeybindings;\r\n\r\n // content width constraints (if unset uses default editor CSS)\r\n private maxContentWidth = 0;\r\n private minContentPadding = 0;\r\n\r\n // keep track of whether the last transaction was selection-only\r\n private lastTrSelectionOnly = false;\r\n\r\n // keep track of whether we are preventing selection (e.g. for a context menu\r\n // handler that wants to mask the selection change caused by the context click)\r\n private preventSelectionChange?: (state: EditorState) => boolean;\r\n\r\n // create the editor -- note that the markdown argument does not substitute for calling\r\n // setMarkdown, rather it's used to read the format comment to determine how to\r\n // initialize the various editor features\r\n public static async create(\r\n parent: HTMLElement,\r\n context: EditorContext,\r\n format: EditorFormat,\r\n options?: EditorOptions,\r\n theme?: EditorTheme\r\n ): Promise<Editor> {\r\n // provide option defaults\r\n options = {\r\n autoFocus: false,\r\n browserSpellCheck: false,\r\n commenting: false,\r\n outerScrollContainer: false,\r\n cannotEditUntitled: false,\r\n codeEditor: '',\r\n rmdImagePreview: false,\r\n hideFormatComment: false,\r\n defaultCellTypePython: false,\r\n className: '',\r\n ...options,\r\n };\r\n\r\n // provide format defaults\r\n format = {\r\n pandocMode: format.pandocMode || 'markdown',\r\n pandocExtensions: format.pandocExtensions || '',\r\n rmdExtensions: {\r\n codeChunks: false,\r\n bookdownXRef: false,\r\n bookdownXRefUI: false,\r\n bookdownPart: false,\r\n blogdownMathInCode: false,\r\n ...format.rmdExtensions,\r\n },\r\n hugoExtensions: {\r\n shortcodes: false,\r\n ...format.hugoExtensions,\r\n },\r\n docTypes: format.docTypes || [],\r\n };\r\n\r\n \r\n\r\n // provide context defaults\r\n const defaultImages = defaultEditorUIImages();\r\n context = {\r\n ...context,\r\n ui: {\r\n ...context.ui,\r\n images: {\r\n ...defaultImages,\r\n ...context.ui.images,\r\n omni_insert: {\r\n ...defaultImages.omni_insert,\r\n ...context.ui.images,\r\n },\r\n citations: {\r\n ...defaultImages.citations,\r\n ...context.ui.images,\r\n },\r\n },\r\n },\r\n };\r\n\r\n // resolve the format\r\n const pandocFmt = await resolvePandocFormat(context.server.pandoc, format);\r\n\r\n // get pandoc capabilities\r\n const pandocCapabilities = await getPandocCapabilities(context.server.pandoc);\r\n\r\n // create editor\r\n const editor = new Editor(parent, context, options, theme || defaultTheme(), format, pandocFmt, pandocCapabilities);\r\n\r\n // return editor\r\n return Promise.resolve(editor);\r\n }\r\n\r\n private constructor(\r\n parent: HTMLElement,\r\n context: EditorContext,\r\n options: EditorOptions,\r\n theme: EditorTheme,\r\n format: EditorFormat,\r\n pandocFormat: PandocFormat,\r\n pandocCapabilities: PandocCapabilities,\r\n ) {\r\n // initialize references\r\n this.parent = parent;\r\n this.events = new DOMEditorEvents(parent);\r\n this.context = context;\r\n this.options = options;\r\n this.theme = theme;\r\n this.format = format;\r\n this.keybindings = {};\r\n this.pandocFormat = pandocFormat;\r\n this.pandocCapabilities = pandocCapabilities; \r\n\r\n // create core extensions\r\n this.extensions = this.initExtensions();\r\n\r\n // create schema\r\n this.schema = editorSchema(this.options, this.extensions, !options.outerScrollContainer);\r\n\r\n // create editor markdown services\r\n this.editorMarkdown = this.createEditorMarkdown();\r\n\r\n // register completion handlers (done in a separate step b/c omni insert\r\n // completion handlers require access to the initializezd commands that\r\n // carry omni insert info)\r\n this.registerCompletionExtension();\r\n\r\n // register realtime spellchecking (done in a separate step b/c it\r\n // requires access to PandocMark definitions to determine which\r\n // marks to exclude from spellchecking)\r\n if (!this.options.browserSpellCheck) {\r\n this.parent.setAttribute('spellcheck', 'false');\r\n this.registerRealtimeSpelling();\r\n }\r\n\r\n // create state\r\n this.state = EditorState.create({\r\n schema: this.schema,\r\n doc: this.initialDoc(),\r\n plugins: this.createPlugins(),\r\n });\r\n\r\n // additional dom attributes for editor node\r\n const attributes: { [name: string]: string } = {};\r\n if (options.className) {\r\n attributes.class = options.className;\r\n }\r\n\r\n // add scroll container class if we are using an outer scroll container\r\n if (options.outerScrollContainer) {\r\n attributes.class = (attributes.class || '').split(' ').concat(kPmScrollContainer).join(' ');\r\n }\r\n\r\n // create view\r\n this.view = new EditorView(this.parent, {\r\n state: this.state,\r\n dispatchTransaction: this.dispatchTransaction.bind(this),\r\n domParser: new EditorDOMParser(this.schema),\r\n attributes,\r\n });\r\n\r\n // add custom restoreFocus handler to the view -- this provides a custom\r\n // handler for RStudio's FocusContext, necessary because the default\r\n // ProseMirror dom mutation handler picks up the focus and changes the\r\n // selection.\r\n Object.defineProperty(this.view.dom, 'restoreFocus', {\r\n value: () => {\r\n this.focus();\r\n },\r\n });\r\n\r\n // apply theme\r\n this.applyTheme(this.theme);\r\n\r\n // Tell extensions about the new view\r\n this.extensions.view(this.view);\r\n\r\n // add proportinal font class to parent\r\n this.parent.classList.add('pm-proportional-font');\r\n\r\n // create pandoc translator\r\n this.pandocConverter = new PandocConverter(\r\n this.schema,\r\n this.extensions,\r\n context.server.pandoc,\r\n this.pandocCapabilities,\r\n );\r\n\r\n // focus editor immediately if requested\r\n if (this.options.autoFocus) {\r\n window.setTimeout(() => {\r\n this.focus();\r\n }, 10);\r\n }\r\n\r\n {\r\n // scroll event optimization, as recommended by\r\n // https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\r\n let ticking = false;\r\n this.parent.addEventListener(\r\n 'scroll',\r\n () => {\r\n if (!ticking) {\r\n window.requestAnimationFrame(() => {\r\n this.emitEvent(ScrollEvent);\r\n ticking = false;\r\n });\r\n ticking = true;\r\n }\r\n },\r\n { capture: true },\r\n );\r\n }\r\n }\r\n\r\n public destroy() {\r\n this.view.destroy();\r\n }\r\n\r\n public subscribe<TDetail>(event: EventType<TDetail> | string, handler: EventHandler<TDetail>): VoidFunction {\r\n if (typeof event === 'string') {\r\n return this.events.subscribe({ eventName: event }, handler);\r\n } else {\r\n return this.events.subscribe(event, handler);\r\n }\r\n }\r\n\r\n public setTitle(title: string) {\r\n const tr = setTitle(this.state, title);\r\n if (tr) {\r\n this.view.dispatch(tr);\r\n }\r\n }\r\n\r\n public async setMarkdown(\r\n markdown: string,\r\n options: PandocWriterOptions,\r\n emitUpdate: boolean,\r\n ): Promise<EditorSetMarkdownResult> {\r\n\r\n // provide option defaults\r\n options = pandocWriterOptions(options);\r\n \r\n // get the result\r\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\r\n const { doc, line_wrapping, unrecognized, example_lists, unparsed_meta } = result;\r\n\r\n // if we are preserving history but the existing doc is empty then create a new state\r\n // (resets the undo stack so that the initial setting of the document can't be undone)\r\n if (this.isInitialDoc()) {\r\n this.state = EditorState.create({\r\n schema: this.state.schema,\r\n doc,\r\n plugins: this.state.plugins,\r\n });\r\n this.view.updateState(this.state);\r\n } else {\r\n // note current editing location\r\n const loc = this.getEditingLocation();\r\n\r\n // replace the top level nodes in the doc\r\n const tr = this.state.tr;\r\n tr.setMeta(kSetMarkdownTransaction, true);\r\n if (!emitUpdate) {\r\n tr.setMeta(kNoUpdateTransaction, true);\r\n }\r\n let i = 0;\r\n tr.doc.descendants((node, pos) => {\r\n const mappedPos = tr.mapping.map(pos);\r\n tr.replaceRangeWith(mappedPos, mappedPos + node.nodeSize, doc.child(i));\r\n i++;\r\n return false;\r\n });\r\n // set selection to previous location if it's still valid\r\n if (loc.pos < tr.doc.nodeSize) {\r\n // eat exceptions that might result from an invalid position\r\n try {\r\n setTextSelection(loc.pos)(tr);\r\n } catch (e) {\r\n // do-nothing, this error can happen and shouldn't result in \r\n // a failure to setMarkdown\r\n }\r\n }\r\n // dispatch\r\n this.view.dispatch(tr);\r\n }\r\n\r\n // apply fixups\r\n this.applyFixups(FixupContext.Load);\r\n\r\n // notify listeners if requested\r\n if (emitUpdate) {\r\n this.emitEvent(UpdateEvent);\r\n this.emitEvent(OutlineChangeEvent);\r\n this.emitEvent(StateChangeEvent);\r\n }\r\n\r\n // return our current markdown representation (so the caller know what our\r\n // current 'view' of the doc as markdown looks like\r\n const getMarkdownTr = this.state.tr;\r\n const canonical = await this.getMarkdownCode(getMarkdownTr, options);\r\n const location = getEditingOutlineLocation(this.state);\r\n\r\n // return\r\n return {\r\n canonical,\r\n line_wrapping,\r\n unrecognized,\r\n example_lists,\r\n unparsed_meta,\r\n location\r\n };\r\n }\r\n\r\n // flag indicating whether we've ever had setMarkdown (currently we need this\r\n // because getMarkdown can only be called after setMarkdown b/c it needs\r\n // the API version retrieved in setMarkdown -- we should remedy this)\r\n public isInitialDoc() {\r\n return this.state.doc.attrs.initial;\r\n }\r\n\r\n public getStateJson() : unknown {\r\n return this.state.toJSON();\r\n }\r\n\r\n public async getMarkdownFromStateJson(stateJson: unknown, options: PandocWriterOptions) {\r\n // provide option defaults\r\n options = pandocWriterOptions(options);\r\n const state = EditorState.fromJSON({ schema: this.schema }, stateJson);\r\n const tr = state.tr;\r\n return this.getMarkdownCode(tr, options);\r\n }\r\n\r\n public async getMarkdown(options: PandocWriterOptions): Promise<EditorCode> {\r\n // get the code\r\n const tr = this.state.tr;\r\n const code = await this.getMarkdownCode(tr, options);\r\n\r\n // return code + perhaps outline location\r\n return {\r\n code,\r\n selection_only: this.lastTrSelectionOnly,\r\n location: getEditingOutlineLocation(this.state),\r\n };\r\n }\r\n\r\n public getEditorSourcePos(): SourcePos {\r\n return getEditorSourcePos(this.state);\r\n }\r\n\r\n public getEditingOutlineLocation(): EditingOutlineLocation {\r\n return getEditingOutlineLocation(this.state);\r\n }\r\n\r\n public getHTML(): string {\r\n return fragmentToHTML(this.state.schema, this.state.doc.content);\r\n }\r\n\r\n public getTitle() {\r\n return getTitle(this.state);\r\n }\r\n\r\n public getSelection(): EditorSelection {\r\n const { from, to } = this.state.selection;\r\n return {\r\n from,\r\n to,\r\n navigation_id: navigationIdForSelection(this.state),\r\n };\r\n }\r\n\r\n public getEditingLocation(): EditingLocation {\r\n return getEditingLocation(this.view);\r\n }\r\n\r\n public setEditingLocation(outlineLocation?: EditingOutlineLocation, previousLocation?: EditingLocation) {\r\n setEditingLocation(this.view, outlineLocation, previousLocation);\r\n }\r\n\r\n public getOutline(): EditorOutline {\r\n return getOutline(this.state) || [];\r\n }\r\n\r\n public getFindReplace(): EditorFindReplace {\r\n return {\r\n find: (term: string, options: FindOptions) => find(this.view, term, options),\r\n matches: () => matchCount(this.view),\r\n selectCurrent: () => selectCurrent(this.view),\r\n selectFirst: () => selectFirst(this.view),\r\n selectNext: () => selectNext(this.view),\r\n selectPrevious: () => selectPrevious(this.view),\r\n replace: (text: string) => replace(this.view, text),\r\n replaceAll: (text: string) => replaceAll(this.view, text),\r\n clear: () => clear(this.view),\r\n };\r\n }\r\n\r\n public getSpellingDoc(): EditorSpellingDoc {\r\n return getSpellingDoc(this.view, this.extensions.pandocMarks());\r\n }\r\n\r\n public spellingInvalidateAllWords() {\r\n invalidateAllWords(this.view);\r\n }\r\n\r\n public spellingInvalidateWord(word: string) {\r\n invalidateWord(this.view, word);\r\n }\r\n\r\n // get a canonical version of the passed markdown. this method doesn't mutate the\r\n // visual editor's state/view (it's provided as a performance optimiation for when\r\n // source mode is configured to save a canonical version of markdown)\r\n public async getCanonical(markdown: string, options: PandocWriterOptions): Promise<string> {\r\n // convert to prosemirror doc\r\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\r\n\r\n // create a state for this doc\r\n const state = EditorState.create({\r\n schema: this.schema,\r\n doc: result.doc,\r\n plugins: this.state.plugins,\r\n });\r\n\r\n // apply load fixups (eumlating what a full round trip will do)\r\n const tr = state.tr;\r\n this.extensionFixups(tr, FixupContext.Load);\r\n\r\n // return markdown (will apply save fixups)\r\n return this.getMarkdownCode(tr, options);\r\n }\r\n\r\n public getSelectedText(): string {\r\n return this.state.doc.textBetween(this.state.selection.from, this.state.selection.to);\r\n }\r\n\r\n public replaceSelection(value: string): void {\r\n // retrieve properties we need from selection\r\n const { from, empty } = this.view.state.selection;\r\n\r\n // retrieve selection marks\r\n const marks = this.view.state.selection.$from.marks();\r\n\r\n // insert text\r\n const tr = this.view.state.tr.replaceSelectionWith(this.view.state.schema.text(value, marks), false);\r\n this.view.dispatch(tr);\r\n\r\n // update selection if necessary\r\n if (!empty) {\r\n const sel = TextSelection.create(this.view.state.doc, from, from + value.length);\r\n const trSetSel = this.view.state.tr.setSelection(sel);\r\n this.view.dispatch(trSetSel);\r\n }\r\n }\r\n\r\n public getYamlFrontMatter() {\r\n if (this.schema.nodes.yaml_metadata) {\r\n return yamlFrontMatter(this.view.state.doc);\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n public getPresentationEditorLocation() {\r\n return getPresentationEditorLocation(this.state);\r\n }\r\n\r\n public navigateToPresentationEditorLocation(location: PresentationEditorLocation) {\r\n const pos = positionForPresentationEditorLocation(this.state, location);\r\n if (pos !== -1) {\r\n this.navigate(NavigationType.Pos, String(pos));\r\n }\r\n }\r\n\r\n public applyYamlFrontMatter(yaml: string) {\r\n if (this.schema.nodes.yaml_metadata) {\r\n applyYamlFrontMatter(this.view, yaml);\r\n }\r\n }\r\n\r\n public focus() {\r\n this.view.focus();\r\n }\r\n\r\n public hasFocus() {\r\n return this.view.hasFocus() || \r\n (window.document.hasFocus() && this.parent.contains(window.document.activeElement))\r\n }\r\n\r\n public blur() {\r\n (this.view.dom as HTMLElement).blur();\r\n }\r\n\r\n public getCodeViewActiveBlockContext() : CodeViewActiveBlockContext | undefined {\r\n return codeViewActiveBlockContext(this.state);\r\n }\r\n\r\n public setBlockSelection(\r\n context: CodeViewActiveBlockContext, \r\n action: CodeViewSelectionAction) {\r\n codeViewSetBlockSelection(this.view, context, action);\r\n }\r\n\r\n public insertChunk(chunkPlaceholder: string) {\r\n const insertCmd = insertRmdChunk(chunkPlaceholder);\r\n insertCmd(this.view.state, this.view.dispatch);\r\n this.focus();\r\n }\r\n\r\n public navigate(type: NavigationType, location: string, recordCurrent = true, animate = false) {\r\n // perform navigation\r\n const nav = navigateTo(this.view, this.format, type, location, animate);\r\n\r\n // emit event\r\n if (nav !== null) {\r\n if (!recordCurrent) {\r\n nav.prevPos = -1;\r\n }\r\n this.emitEvent(NavigateEvent, nav);\r\n }\r\n }\r\n\r\n public navigateToSourcePos(pos: SourcePos) {\r\n \r\n // find the index\r\n let cursorIndex = -1;\r\n for (let i=(pos.locations.length-1); i>=0; i--) {\r\n if (pos.pos >= pos.locations[i].pos) {\r\n cursorIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n // map to position\r\n let targetPos = editingRootNode(this.view.state.selection)!.pos;\r\n if (cursorIndex !== -1) {\r\n const locations = this.getEditorSourcePos().locations;\r\n targetPos = (locations[cursorIndex] || locations[locations.length-1]).pos;\r\n }\r\n\r\n // navigate\r\n this.navigate(NavigationType.Pos, String(targetPos), false, false); \r\n }\r\n\r\n public resize() {\r\n this.syncContentWidth();\r\n this.applyFixupsOnResize();\r\n this.emitEvent(ResizeEvent);\r\n }\r\n\r\n public enableDevTools() {\r\n applyDevTools(this.view);\r\n }\r\n\r\n public getMenus(): EditorMenus {\r\n return editorMenus(this.options, this.context.ui, this.commands());\r\n }\r\n\r\n public commands(): EditorCommand[] {\r\n // get keybindings (merge user + default)\r\n const commandKeys = this.commandKeys();\r\n\r\n return this.extensions.commands(this.schema).map((command: ProsemirrorCommand) => {\r\n return {\r\n id: command.id,\r\n keymap: commandKeys[command.id],\r\n isActive: () => command.isActive(this.state),\r\n isEnabled: () => command.isEnabled(this.state),\r\n plural: () => command.plural(this.state),\r\n execute: () => {\r\n command.execute(this.state, this.view.dispatch, this.view);\r\n if (command.keepFocus) {\r\n this.focus();\r\n }\r\n },\r\n };\r\n });\r\n }\r\n\r\n public applyTheme(theme: EditorTheme) {\r\n // save theme (for extensions)\r\n this.theme = theme;\r\n\r\n // set global mode classes\r\n this.parent.classList.toggle('pm-dark-mode', !!theme.darkMode);\r\n this.parent.classList.toggle('pm-solarized-mode', !!theme.solarizedMode);\r\n \r\n // apply the rest of the theme\r\n applyTheme(theme);\r\n\r\n // effect transaction for theme\r\n const tr = this.state.tr;\r\n tr.setMeta(kThemeChangedTransaction, true);\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n this.view.dispatch(tr);\r\n\r\n // fire event\r\n this.emitEvent(ThemeChangedEvent);\r\n }\r\n\r\n public setMaxContentWidth(maxWidth: number, minPadding = 10) {\r\n this.maxContentWidth = maxWidth;\r\n this.minContentPadding = minPadding;\r\n this.syncContentWidth();\r\n }\r\n\r\n public setKeybindings(keyBindings: EditorKeybindings) {\r\n // validate that all of these keys can be rebound\r\n\r\n this.keybindings = keyBindings;\r\n this.state = this.state.reconfigure({\r\n plugins: this.createPlugins(),\r\n });\r\n }\r\n\r\n public getEditorFormat() {\r\n return this.format;\r\n }\r\n\r\n public getPandocFormat() {\r\n return this.pandocFormat;\r\n }\r\n\r\n public getPandocFormatConfig(isRmd: boolean): PandocFormatConfig {\r\n return pandocFormatConfigFromDoc(this.state.doc, isRmd);\r\n }\r\n\r\n // are there context menu items available the current mouse position?\r\n // note that calling this may put the editor in an 'ignore selection changes'\r\n // state so anyone calling this must also call contextMenuDismissed when\r\n // the menu is no longer in play (either ignored or dismissed)\r\n public contextMenu(event: Event) : ContextMenuSource | undefined {\r\n if (event.target && event.target instanceof Node) {\r\n const pos = this.view.posAtDOM(event.target, 0);\r\n if (pos !== -1) {\r\n const $pos = this.view.state.doc.resolve(pos);\r\n const rootNd = editingRootNodeClosestToPos($pos);\r\n if (rootNd) {\r\n const handlers = this.extensions.contextMenuHandlers();\r\n for (const handler of handlers) {\r\n const menu = handler(this.view, $pos);\r\n if (menu) {\r\n return menu;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n public contextMenuDismissed() {\r\n this.preventSelectionChange = undefined;\r\n }\r\n\r\n // notify the editor that the code prefs (accessed via\r\n // the uiContext) have changed\r\n public onPrefsChanged() {\r\n this.emitEvent(PrefsChangedEvent);\r\n }\r\n\r\n private dispatchTransaction(tr: Transaction) {\r\n // track previous outline\r\n const previousOutline = getOutline(this.state);\r\n\r\n // track whether this was a selection-only transaction\r\n this.lastTrSelectionOnly = tr.selectionSet && !tr.docChanged;\r\n\r\n // apply the transaction\r\n const apply = this.extensions.applyTransaction();\r\n this.state = apply ? apply(this.state, tr) : this.state.apply(tr);\r\n\r\n // udpate state\r\n this.view.updateState(this.state);\r\n\r\n // notify listeners of state change\r\n this.emitEvent(StateChangeEvent);\r\n\r\n // notify listeners of updates\r\n if (tr.docChanged || tr.storedMarksSet) {\r\n // fire updated (unless this was a fixup)\r\n if (!tr.getMeta(kFixupTransaction) && !tr.getMeta(kNoUpdateTransaction)) {\r\n this.emitEvent(UpdateEvent);\r\n }\r\n\r\n // fire outline changed if necessary\r\n if (getOutline(this.state) !== previousOutline) {\r\n this.emitEvent(OutlineChangeEvent);\r\n }\r\n }\r\n\r\n this.emitEvent(DispatchEvent, tr);\r\n\r\n this.emitEvent(LayoutEvent);\r\n }\r\n\r\n private emitEvent<TDetail>(eventType: EventType<TDetail>, detail?: TDetail) {\r\n this.events.emit(eventType, detail);\r\n }\r\n\r\n private initExtensions() {\r\n return initExtensions(\r\n {\r\n format: this.format,\r\n options: this.options,\r\n ui: this.context.ui,\r\n theme: () => this.theme,\r\n math: this.context.ui.math ? editorMath(this.context.ui.math) : undefined,\r\n events: {\r\n subscribe: this.subscribe.bind(this),\r\n emit: this.emitEvent.bind(this),\r\n },\r\n pandocExtensions: this.pandocFormat.extensions,\r\n pandocCapabilities: this.pandocCapabilities,\r\n markdown: this.editorMarkdownProxy(),\r\n server: this.context.server,\r\n navigation: {\r\n navigate: this.navigate.bind(this),\r\n },\r\n find: {\r\n decorations: () => {\r\n return findPluginState(this.view.state) || null;\r\n }\r\n }\r\n },\r\n this.context.extensions,\r\n this.context.codeViewExtension\r\n );\r\n }\r\n\r\n private createEditorMarkdown() : EditorMarkdown {\r\n const markdownFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\r\n return {\r\n allowMarkdownPaste(state) {\r\n return markdownFilter(state);\r\n },\r\n markdownToSlice: async (markdown) : Promise<Slice> => {\r\n // convert markdown to prosemirror\r\n const result = await this.pandocConverter.toProsemirror(markdown, this.pandocFormat);\r\n\r\n // extract slice\r\n const slice = new Slice(Fragment.from(result.doc.child(0).content), 0, 0);\r\n\r\n // if the slice has a single paragraph node, then take its contents\r\n if (slice.content.childCount === 1 &&\r\n slice.content.child(0)?.type === this.schema.nodes.paragraph) {\r\n return new Slice(slice.content.child(0).content, slice.openStart, slice.openEnd);\r\n } else {\r\n return slice;\r\n }\r\n },\r\n }\r\n }\r\n\r\n // this.editorMarkdown is not yet created when we call this so we setup a\r\n // proxy (chicken/egg: EditorMarkdown needs the initialized extensions)\r\n private editorMarkdownProxy() : EditorMarkdown {\r\n return {\r\n allowMarkdownPaste: (state) => {\r\n return this.editorMarkdown.allowMarkdownPaste(state);\r\n },\r\n markdownToSlice: (markdown, openStart, openEnd) => {\r\n return this.editorMarkdown.markdownToSlice(markdown, openStart, openEnd);\r\n },\r\n };\r\n }\r\n\r\n private registerCompletionExtension() {\r\n // mark filter used to screen completions from noInputRules marks\r\n const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\r\n\r\n // register omni insert extension\r\n this.extensions.register([\r\n omniInsertExtension(this.extensions.omniInserters(this.schema), markFilter, this.context.ui),\r\n ]);\r\n\r\n // register completion extension\r\n this.extensions.register([\r\n completionExtension(this.extensions.completionHandlers(), markFilter, this.context.ui, this.events),\r\n ]);\r\n }\r\n\r\n private registerRealtimeSpelling() {\r\n if (this.context.ui.spelling !== undefined) {\r\n this.extensions.registerPlugins(\r\n [realtimeSpellingPlugin(\r\n this.schema, \r\n this.extensions.pandocMarks(), \r\n this.context.ui.spelling, \r\n this.context.ui.prefs, \r\n this.events\r\n )],\r\n true,\r\n );\r\n this.extensions.register([{\r\n contextMenuHandlers: () => [\r\n spellingContextMenuHandler(\r\n this.context.ui.spelling!, \r\n this.context.ui.context.translateText\r\n )\r\n ]\r\n }])\r\n }\r\n }\r\n\r\n private createPlugins(): Plugin[] {\r\n return [\r\n baseKeysPlugin(this.extensions.baseKeys(this.schema)),\r\n this.keybindingsPlugin(),\r\n appendTransactionsPlugin(this.extensions.appendTransactions(this.schema)),\r\n appendMarkTransactionsPlugin(this.extensions.appendMarkTransactions(this.schema)),\r\n ...this.extensions.plugins(this.schema),\r\n this.inputRulesPlugin(),\r\n this.editablePlugin(),\r\n this.preventSelectionChangePlugin(),\r\n this.domEventsPlugin(),\r\n this.clipboardToDOMPlugin()\r\n ];\r\n }\r\n\r\n private editablePlugin() {\r\n const hooks = this.context.hooks || {};\r\n return new Plugin({\r\n key: new PluginKey('editable'),\r\n props: {\r\n editable: hooks.isEditable || (() => true),\r\n },\r\n });\r\n }\r\n\r\n private inputRulesPlugin() {\r\n // filter for disabling input rules for selected marks\r\n const markFilter = markInputRuleFilter(this.schema, this.extensions.pandocMarks());\r\n\r\n // create the defautl inputRules plugin\r\n const plugin = inputRules({ rules: this.extensions.inputRules(this.schema) });\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const handleTextInput = plugin.props.handleTextInput!.bind(plugin);\r\n\r\n // override to disable input rules as requested\r\n // https://github.com/ProseMirror/prosemirror-inputrules/commit/b4bf67623aa4c4c1e096c20aa649c0e63751f337\r\n const customHandleTextInput = (view: EditorView, from: number, to: number, text: string) => {\r\n if (!markFilter(view.state)) {\r\n return false;\r\n }\r\n return handleTextInput(view, from, to, text);\r\n };\r\n\r\n \r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n plugin.props.handleTextInput = customHandleTextInput;\r\n return plugin;\r\n }\r\n\r\n private domEventsPlugin(): Plugin {\r\n return new Plugin({\r\n key: new PluginKey('domevents'),\r\n props: {\r\n handleDOMEvents: {\r\n blur: () => {\r\n this.emitEvent(BlurEvent);\r\n return false;\r\n },\r\n focus: (view: EditorView) => {\r\n this.emitEvent(FocusEvent, view.state.doc);\r\n return false;\r\n },\r\n keydown: (_view: EditorView, event: Event) => {\r\n const kbEvent = event as KeyboardEvent;\r\n if (kbEvent.key === 'Tab' && this.context.ui.prefs.tabKeyMoveFocus()) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n },\r\n contextmenu: (_view: EditorView, event: Event) => {\r\n \r\n // don't handle if there is no imperative context menu handler\r\n if (!this.context.ui.display.showContextMenu) {\r\n return false;\r\n }\r\n\r\n const menu = this.contextMenu(event);\r\n if (menu) {\r\n // show context menu (async)\r\n const { clientX, clientY } = event as MouseEvent;\r\n const showContextMenu = async () => {\r\n this.preventSelectionChange = menu.preventSelectionChange;\r\n try {\r\n const menuItems = await menu.items();\r\n await this.context.ui.display.showContextMenu!(menuItems, clientX, clientY);\r\n } finally {\r\n this.preventSelectionChange = undefined;\r\n }\r\n };\r\n showContextMenu();\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n return true;\r\n }\r\n return false;\r\n }\r\n },\r\n },\r\n });\r\n }\r\n\r\n private preventSelectionChangePlugin() : Plugin {\r\n return new Plugin({\r\n filterTransaction: (tr: Transaction, state: EditorState) => {\r\n if (this.preventSelectionChange?.(state)) {\r\n return !(tr.selectionSet && !tr.docChanged && !tr.storedMarksSet);\r\n } else {\r\n return true;\r\n }\r\n },\r\n })\r\n }\r\n\r\n private clipboardToDOMPlugin() : Plugin {\r\n const schema = this.schema;\r\n return new Plugin({\r\n key: new PluginKey('clipboard-to-dom'),\r\n props: { \r\n transformCopied(slice: Slice) : Slice {\r\n const newSlice = mapSlice(slice, node => {\r\n if (node.isText) {\r\n const clipboardMark = node.marks.find(mark => !!mark.type.spec.attrs?.clipboard);\r\n if (clipboardMark) {\r\n let marks = clipboardMark.removeFromSet(node.marks);\r\n const attrs = { ...clipboardMark.attrs, clipboard: true };\r\n const newMark = clipboardMark.type.create(attrs);\r\n marks = newMark.addToSet(marks);\r\n return schema.text(node.textContent, marks);\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n return null;\r\n }\r\n }); \r\n return newSlice;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private keybindingsPlugin(): Plugin {\r\n // get keybindings (merge user + default)\r\n const commandKeys = this.commandKeys();\r\n\r\n // command keys from extensions\r\n const pluginKeys: { [key: string]: CommandFn } = {};\r\n const commands = this.extensions.commands(this.schema);\r\n commands.forEach((command: ProsemirrorCommand) => {\r\n const keys = commandKeys[command.id];\r\n if (keys) {\r\n keys.forEach((key: string) => {\r\n pluginKeys[key] = command.execute;\r\n });\r\n }\r\n });\r\n\r\n // for windows desktop, build a list of control key handlers b/c qtwebengine\r\n // ends up corrupting ctrl+ keys so they don't hit the ace keybinding\r\n // (see: https://github.com/rstudio/rstudio/issues/7142)\r\n const ctrlKeyCodes: { [key: string]: CommandFn } = {};\r\n Object.keys(pluginKeys).forEach(keyCombo => {\r\n const match = keyCombo.match(/^Mod-([a-z\\\\])$/);\r\n if (match) {\r\n const key = match[1];\r\n const keyCode = key === '\\\\' ? 'Backslash' : `Key${key.toUpperCase()}`;\r\n ctrlKeyCodes[keyCode] = pluginKeys[keyCombo];\r\n }\r\n });\r\n\r\n // create default prosemirror handler\r\n const prosemirrorKeydownHandler = keydownHandler(pluginKeys);\r\n\r\n // return plugin\r\n return new Plugin({\r\n key: keybindingsPlugin,\r\n props: {\r\n handleKeyDown: (view: EditorView, event: KeyboardEvent) => {\r\n // workaround for Ctrl+ keys on windows desktop\r\n if (this.context.ui.context.isWindowsDesktop() &&\r\n qtWebEngineVersion() !== undefined) {\r\n const keyEvent = event as KeyboardEvent;\r\n if (keyEvent.ctrlKey) {\r\n const keyCommand = ctrlKeyCodes[keyEvent.code];\r\n if (keyCommand && keyCommand(this.view.state)) {\r\n keyCommand(this.view.state, this.view.dispatch, this.view);\r\n return true;\r\n }\r\n }\r\n }\r\n // default handling\r\n return prosemirrorKeydownHandler(view, event);\r\n },\r\n },\r\n });\r\n }\r\n\r\n private commandKeys(): { [key: string]: readonly string[] } {\r\n // start with keys provided within command definitions\r\n const commands = this.extensions.commands(this.schema);\r\n const defaultKeys = commands.reduce((keys: { [key: string]: readonly string[] }, command: ProsemirrorCommand) => {\r\n keys[command.id] = command.keymap;\r\n return keys;\r\n }, {});\r\n\r\n // merge with user keybindings\r\n return {\r\n ...defaultKeys,\r\n ...this.keybindings,\r\n };\r\n }\r\n\r\n // update parent padding based on content width settings (if specified)\r\n private syncContentWidth() {\r\n if (this.maxContentWidth && this.view.dom) {\r\n const minContentPadding = this.minContentPadding || 10;\r\n const parentWidth = this.view.dom.clientWidth;\r\n if (parentWidth > this.maxContentWidth + 2 * minContentPadding) {\r\n applyPadding(`calc((100% - ${this.maxContentWidth}px)/2)`);\r\n } else {\r\n applyPadding(this.minContentPadding + 'px');\r\n }\r\n }\r\n }\r\n\r\n private applyFixupsOnResize() {\r\n const docChanged = this.applyFixups(FixupContext.Resize);\r\n if (!docChanged) {\r\n // If applyFixupsOnResize returns true, then layout has already\r\n // been fired; if it hasn't, we must do so now\r\n this.emitEvent(LayoutEvent);\r\n }\r\n }\r\n\r\n private applyFixups(context: FixupContext) {\r\n let tr = this.state.tr;\r\n tr = this.extensionFixups(tr, context);\r\n if (tr.docChanged) {\r\n tr.setMeta(kAddToHistoryTransaction, false);\r\n tr.setMeta(kFixupTransaction, true);\r\n this.view.dispatch(tr);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private extensionFixups(tr: Transaction, context: FixupContext) {\r\n this.extensions.fixups(this.schema, this.view).forEach(fixup => {\r\n tr = fixup(tr, context);\r\n });\r\n return tr;\r\n }\r\n\r\n private initialDoc(): ProsemirrorNode {\r\n return this.schema.nodeFromJSON({\r\n type: 'doc',\r\n attrs: {\r\n initial: true,\r\n },\r\n content: [\r\n { type: 'body', content: [{ type: 'paragraph' }] },\r\n { type: 'notes', content: [] },\r\n ],\r\n });\r\n }\r\n\r\n private async getMarkdownCode(tr: Transaction, options: PandocWriterOptions) {\r\n // apply save fixups\r\n this.extensionFixups(tr, FixupContext.Save);\r\n\r\n // apply sentence wrapping if requested\r\n if (options.wrap === 'sentence') {\r\n wrapSentences(tr);\r\n }\r\n\r\n // get code\r\n return this.pandocConverter.fromProsemirror(tr.doc, this.pandocFormat, this.pandocCapabilities, options);\r\n }\r\n}\r\n\r\nfunction navigationIdForSelection(state: EditorState): string | null {\r\n const outline = getOutlineNodes(state.doc);\r\n const outlineNode = outline.reverse().find(node => node.pos < state.selection.from);\r\n if (outlineNode) {\r\n return outlineNode.node.attrs.navigation_id;\r\n } else {\r\n return null;\r\n }\r\n}\r\n\r\nfunction pandocWriterOptions(options: PandocWriterOptions) : PandocWriterOptions {\r\n return {\r\n atxHeaders: true,\r\n ...options\r\n }\r\n}\r\n\r\n// custom DOMParser that preserves all whitespace (required by display math marks)\r\nclass EditorDOMParser extends DOMParser {\r\n constructor(schema: Schema) {\r\n super(schema, DOMParser.fromSchema(schema).rules);\r\n }\r\n public parse(dom: Node, options?: ParseOptions) {\r\n return super.parse(dom, { ...options, preserveWhitespace: 'full' });\r\n }\r\n\r\n public parseSlice(dom: Node, options?: ParseOptions) {\r\n return super.parseSlice(dom, { ...options, preserveWhitespace: 'full' });\r\n }\r\n}\r\n","/*\r\n * index.ts\r\n *\r\n * Copyright (C) 2022 by Posit Software, PBC\r\n *\r\n * Unless you have received this program directly from Posit Software pursuant\r\n * to the terms of a commercial license agreement with Posit Software, then\r\n * this program is licensed to you under the terms of version 3 of the\r\n * GNU Affero General Public License. This program is distributed WITHOUT\r\n * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,\r\n * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the\r\n * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.\r\n *\r\n */\r\n\r\n\r\nimport { Editor, UITools } from 'editor';\r\nexport default { Editor, UITools };\r\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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; }\n\nexport var IdleScheduler = /*#__PURE__*/function () {\n function IdleScheduler() {\n _classCallCheck(this, IdleScheduler);\n\n _defineProperty(this, \"task\", undefined);\n }\n\n _createClass(IdleScheduler, [{\n key: \"request\",\n value: function request() {\n this.cancel();\n var request = window.requestIdleCallback || window.requestAnimationFrame;\n return new Promise(function (resolve) {\n return request(resolve);\n });\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n var cancel = window.cancelIdleCallack || window.cancelAnimationFrame;\n\n if (this.task) {\n cancel(this.task);\n }\n }\n }]);\n\n return IdleScheduler;\n}();","import _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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; }\n\nimport nanoid from \"nanoid\";\nimport { IdleScheduler } from \"./idle-scheduler\";\nexport var JsonDiffWorker = /*#__PURE__*/function () {\n function JsonDiffWorker(worker) {\n var _this = this;\n\n _classCallCheck(this, JsonDiffWorker);\n\n _defineProperty(this, \"queue\", new Map());\n\n _defineProperty(this, \"scheduler\", new IdleScheduler());\n\n this.worker = worker;\n this.worker.addEventListener(\"message\", function (e) {\n var deferred = _this.queue.get(e.data.id);\n\n if (deferred) {\n _this.queue[\"delete\"](e.data.id);\n\n deferred.resolve(e.data.returns);\n }\n });\n }\n\n _createClass(JsonDiffWorker, [{\n key: \"diff\",\n value: function () {\n var _diff = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(input) {\n var id, deferred;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.scheduler.request();\n\n case 2:\n id = nanoid();\n deferred = createDeferrable();\n this.queue.set(id, deferred);\n this.worker.postMessage({\n method: \"diff\",\n id: id,\n args: [input]\n });\n return _context.abrupt(\"return\", deferred);\n\n case 7:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function diff(_x) {\n return _diff.apply(this, arguments);\n }\n\n return diff;\n }()\n }]);\n\n return JsonDiffWorker;\n}();\n\nfunction createDeferrable() {\n var r;\n var p = new Promise(function (resolve) {\n r = resolve;\n });\n\n p.resolve = function () {\n return r.apply(void 0, arguments);\n };\n\n return p;\n}","'use strict';\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n\nmodule.exports = function (str) {\n\tif (typeof str !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\treturn str.replace(matchOperatorsRe, '\\\\$&');\n};\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\nvar cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in cssKeywords) {\n\tif (cssKeywords.hasOwnProperty(key)) {\n\t\treverseKeywords[cssKeywords[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in cssKeywords) {\n\t\tif (cssKeywords.hasOwnProperty(keyword)) {\n\t\t\tvar value = cssKeywords[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","var conversions = require('./conversions');\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","var conversions = require('./conversions');\nvar route = require('./route');\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\nconst colorConvert = require('color-convert');\n\nconst wrapAnsi16 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => function () {\n\tconst code = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => function () {\n\tconst rgb = fn.apply(colorConvert, arguments);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\t\t\tgray: [90, 39],\n\n\t\t\t// Bright color\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Fix humans\n\tstyles.color.grey = styles.color.gray;\n\n\tfor (const groupName of Object.keys(styles)) {\n\t\tconst group = styles[groupName];\n\n\t\tfor (const styleName of Object.keys(group)) {\n\t\t\tconst style = group[styleName];\n\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\n\t\tObject.defineProperty(styles, 'codes', {\n\t\t\tvalue: codes,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tconst ansi2ansi = n => n;\n\tconst rgb2rgb = (r, g, b) => [r, g, b];\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 0)\n\t};\n\tstyles.color.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 0)\n\t};\n\n\tstyles.bgColor.ansi = {\n\t\tansi: wrapAnsi16(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi256 = {\n\t\tansi256: wrapAnsi256(ansi2ansi, 10)\n\t};\n\tstyles.bgColor.ansi16m = {\n\t\trgb: wrapAnsi16m(rgb2rgb, 10)\n\t};\n\n\tfor (let key of Object.keys(colorConvert)) {\n\t\tif (typeof colorConvert[key] !== 'object') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst suite = colorConvert[key];\n\n\t\tif (key === 'ansi16') {\n\t\t\tkey = 'ansi';\n\t\t}\n\n\t\tif ('ansi16' in suite) {\n\t\t\tstyles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);\n\t\t\tstyles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);\n\t\t}\n\n\t\tif ('ansi256' in suite) {\n\t\t\tstyles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);\n\t\t\tstyles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);\n\t\t}\n\n\t\tif ('rgb' in suite) {\n\t\t\tstyles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);\n\t\t\tstyles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);\n\t\t}\n\t}\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u[a-f\\d]{4}|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tif ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, args) {\n\tconst results = [];\n\tconst chunks = args.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tif (!isNaN(chunk)) {\n\t\t\tresults.push(Number(chunk));\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const styleName of Object.keys(enabled)) {\n\t\tif (Array.isArray(enabled[styleName])) {\n\t\t\tif (!(styleName in current)) {\n\t\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t\t}\n\n\t\t\tif (enabled[styleName].length > 0) {\n\t\t\t\tcurrent = current[styleName].apply(current, enabled[styleName]);\n\t\t\t} else {\n\t\t\t\tcurrent = current[styleName];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, tmp) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => {\n\t\tif (escapeChar) {\n\t\t\tchunk.push(unescape(escapeChar));\n\t\t} else if (style) {\n\t\t\tconst str = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(chr);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMsg);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst escapeStringRegexp = require('escape-string-regexp');\nconst ansiStyles = require('ansi-styles');\nconst stdoutColor = require('supports-color').stdout;\n\nconst template = require('./templates.js');\n\nconst isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];\n\n// `color-convert` models to exclude from the Chalk API due to conflicts and such\nconst skipModels = new Set(['gray']);\n\nconst styles = Object.create(null);\n\nfunction applyOptions(obj, options) {\n\toptions = options || {};\n\n\t// Detect level if not set manually\n\tconst scLevel = stdoutColor ? stdoutColor.level : 0;\n\tobj.level = options.level === undefined ? scLevel : options.level;\n\tobj.enabled = 'enabled' in options ? options.enabled : obj.level > 0;\n}\n\nfunction Chalk(options) {\n\t// We check for this.template here since calling `chalk.constructor()`\n\t// by itself will have a `this` of a previously constructed chalk object\n\tif (!this || !(this instanceof Chalk) || this.template) {\n\t\tconst chalk = {};\n\t\tapplyOptions(chalk, options);\n\n\t\tchalk.template = function () {\n\t\t\tconst args = [].slice.call(arguments);\n\t\t\treturn chalkTag.apply(null, [chalk.template].concat(args));\n\t\t};\n\n\t\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\t\tObject.setPrototypeOf(chalk.template, chalk);\n\n\t\tchalk.template.constructor = Chalk;\n\n\t\treturn chalk.template;\n\t}\n\n\tapplyOptions(this, options);\n}\n\n// Use bright blue on Windows as the normal blue color is illegible\nif (isSimpleWindowsTerm) {\n\tansiStyles.blue.open = '\\u001B[94m';\n}\n\nfor (const key of Object.keys(ansiStyles)) {\n\tansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n\n\tstyles[key] = {\n\t\tget() {\n\t\t\tconst codes = ansiStyles[key];\n\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key);\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\treturn build.call(this, this._styles || [], true, 'visible');\n\t}\n};\n\nansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g');\nfor (const model of Object.keys(ansiStyles.color.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.color.close,\n\t\t\t\t\tcloseRe: ansiStyles.color.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g');\nfor (const model of Object.keys(ansiStyles.bgColor.ansi)) {\n\tif (skipModels.has(model)) {\n\t\tcontinue;\n\t}\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst level = this.level;\n\t\t\treturn function () {\n\t\t\t\tconst open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments);\n\t\t\t\tconst codes = {\n\t\t\t\t\topen,\n\t\t\t\t\tclose: ansiStyles.bgColor.close,\n\t\t\t\t\tcloseRe: ansiStyles.bgColor.closeRe\n\t\t\t\t};\n\t\t\t\treturn build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, styles);\n\nfunction build(_styles, _empty, key) {\n\tconst builder = function () {\n\t\treturn applyStyle.apply(builder, arguments);\n\t};\n\n\tbuilder._styles = _styles;\n\tbuilder._empty = _empty;\n\n\tconst self = this;\n\n\tObject.defineProperty(builder, 'level', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.level;\n\t\t},\n\t\tset(level) {\n\t\t\tself.level = level;\n\t\t}\n\t});\n\n\tObject.defineProperty(builder, 'enabled', {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn self.enabled;\n\t\t},\n\t\tset(enabled) {\n\t\t\tself.enabled = enabled;\n\t\t}\n\t});\n\n\t// See below for fix regarding invisible grey/dim combination on Windows\n\tbuilder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey';\n\n\t// `__proto__` is used because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tbuilder.__proto__ = proto; // eslint-disable-line no-proto\n\n\treturn builder;\n}\n\nfunction applyStyle() {\n\t// Support varags, but simply cast to string in case there's only one arg\n\tconst args = arguments;\n\tconst argsLen = args.length;\n\tlet str = String(arguments[0]);\n\n\tif (argsLen === 0) {\n\t\treturn '';\n\t}\n\n\tif (argsLen > 1) {\n\t\t// Don't slice `arguments`, it prevents V8 optimizations\n\t\tfor (let a = 1; a < argsLen; a++) {\n\t\t\tstr += ' ' + args[a];\n\t\t}\n\t}\n\n\tif (!this.enabled || this.level <= 0 || !str) {\n\t\treturn this._empty ? '' : str;\n\t}\n\n\t// Turns out that on Windows dimmed gray text becomes invisible in cmd.exe,\n\t// see https://github.com/chalk/chalk/issues/58\n\t// If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop.\n\tconst originalDim = ansiStyles.dim.open;\n\tif (isSimpleWindowsTerm && this.hasGrey) {\n\t\tansiStyles.dim.open = '';\n\t}\n\n\tfor (const code of this._styles.slice().reverse()) {\n\t\t// Replace any instances already present with a re-opening code\n\t\t// otherwise only the part of the string until said closing code\n\t\t// will be colored, and the rest will simply be 'plain'.\n\t\tstr = code.open + str.replace(code.closeRe, code.open) + code.close;\n\n\t\t// Close the styling before a linebreak and reopen\n\t\t// after next line to fix a bleed issue on macOS\n\t\t// https://github.com/chalk/chalk/pull/92\n\t\tstr = str.replace(/\\r?\\n/g, `${code.close}$&${code.open}`);\n\t}\n\n\t// Reset the original `dim` if we changed it to work around the Windows dimmed gray issue\n\tansiStyles.dim.open = originalDim;\n\n\treturn str;\n}\n\nfunction chalkTag(chalk, strings) {\n\tif (!Array.isArray(strings)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn [].slice.call(arguments, 1).join(' ');\n\t}\n\n\tconst args = [].slice.call(arguments, 2);\n\tconst parts = [strings.raw[0]];\n\n\tfor (let i = 1; i < strings.length; i++) {\n\t\tparts.push(String(args[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'));\n\t\tparts.push(String(strings.raw[i]));\n\t}\n\n\treturn template(chalk, parts.join(''));\n}\n\nObject.defineProperties(Chalk.prototype, styles);\n\nmodule.exports = Chalk(); // eslint-disable-line new-cap\nmodule.exports.supportsColor = stdoutColor;\nmodule.exports.default = module.exports; // For TypeScript\n","import dmp from 'diff-match-patch';\nimport chalk from 'chalk';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function 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, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\n\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nvar Processor = function () {\n function Processor(options) {\n classCallCheck(this, Processor);\n\n this.selfOptions = options || {};\n this.pipes = {};\n }\n\n createClass(Processor, [{\n key: 'options',\n value: function options(_options) {\n if (_options) {\n this.selfOptions = _options;\n }\n return this.selfOptions;\n }\n }, {\n key: 'pipe',\n value: function pipe(name, pipeArg) {\n var pipe = pipeArg;\n if (typeof name === 'string') {\n if (typeof pipe === 'undefined') {\n return this.pipes[name];\n } else {\n this.pipes[name] = pipe;\n }\n }\n if (name && name.name) {\n pipe = name;\n if (pipe.processor === this) {\n return pipe;\n }\n this.pipes[pipe.name] = pipe;\n }\n pipe.processor = this;\n return pipe;\n }\n }, {\n key: 'process',\n value: function process(input, pipe) {\n var context = input;\n context.options = this.options();\n var nextPipe = pipe || input.pipe || 'default';\n var lastPipe = void 0;\n var lastContext = void 0;\n while (nextPipe) {\n if (typeof context.nextAfterChildren !== 'undefined') {\n // children processed and coming back to parent\n context.next = context.nextAfterChildren;\n context.nextAfterChildren = null;\n }\n\n if (typeof nextPipe === 'string') {\n nextPipe = this.pipe(nextPipe);\n }\n nextPipe.process(context);\n lastContext = context;\n lastPipe = nextPipe;\n nextPipe = null;\n if (context) {\n if (context.next) {\n context = context.next;\n nextPipe = lastContext.nextPipe || context.pipe || lastPipe;\n }\n }\n }\n return context.hasResult ? context.result : undefined;\n }\n }]);\n return Processor;\n}();\n\nvar Pipe = function () {\n function Pipe(name) {\n classCallCheck(this, Pipe);\n\n this.name = name;\n this.filters = [];\n }\n\n createClass(Pipe, [{\n key: 'process',\n value: function process(input) {\n if (!this.processor) {\n throw new Error('add this pipe to a processor before using it');\n }\n var debug = this.debug;\n var length = this.filters.length;\n var context = input;\n for (var index = 0; index < length; index++) {\n var filter = this.filters[index];\n if (debug) {\n this.log('filter: ' + filter.filterName);\n }\n filter(context);\n if ((typeof context === 'undefined' ? 'undefined' : _typeof(context)) === 'object' && context.exiting) {\n context.exiting = false;\n break;\n }\n }\n if (!context.next && this.resultCheck) {\n this.resultCheck(context);\n }\n }\n }, {\n key: 'log',\n value: function log(msg) {\n console.log('[jsondiffpatch] ' + this.name + ' pipe, ' + msg);\n }\n }, {\n key: 'append',\n value: function append() {\n var _filters;\n\n (_filters = this.filters).push.apply(_filters, arguments);\n return this;\n }\n }, {\n key: 'prepend',\n value: function prepend() {\n var _filters2;\n\n (_filters2 = this.filters).unshift.apply(_filters2, arguments);\n return this;\n }\n }, {\n key: 'indexOf',\n value: function indexOf(filterName) {\n if (!filterName) {\n throw new Error('a filter name is required');\n }\n for (var index = 0; index < this.filters.length; index++) {\n var filter = this.filters[index];\n if (filter.filterName === filterName) {\n return index;\n }\n }\n throw new Error('filter not found: ' + filterName);\n }\n }, {\n key: 'list',\n value: function list() {\n return this.filters.map(function (f) {\n return f.filterName;\n });\n }\n }, {\n key: 'after',\n value: function after(filterName) {\n var index = this.indexOf(filterName);\n var params = Array.prototype.slice.call(arguments, 1);\n if (!params.length) {\n throw new Error('a filter is required');\n }\n params.unshift(index + 1, 0);\n Array.prototype.splice.apply(this.filters, params);\n return this;\n }\n }, {\n key: 'before',\n value: function before(filterName) {\n var index = this.indexOf(filterName);\n var params = Array.prototype.slice.call(arguments, 1);\n if (!params.length) {\n throw new Error('a filter is required');\n }\n params.unshift(index, 0);\n Array.prototype.splice.apply(this.filters, params);\n return this;\n }\n }, {\n key: 'replace',\n value: function replace(filterName) {\n var index = this.indexOf(filterName);\n var params = Array.prototype.slice.call(arguments, 1);\n if (!params.length) {\n throw new Error('a filter is required');\n }\n params.unshift(index, 1);\n Array.prototype.splice.apply(this.filters, params);\n return this;\n }\n }, {\n key: 'remove',\n value: function remove(filterName) {\n var index = this.indexOf(filterName);\n this.filters.splice(index, 1);\n return this;\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.filters.length = 0;\n return this;\n }\n }, {\n key: 'shouldHaveResult',\n value: function shouldHaveResult(should) {\n if (should === false) {\n this.resultCheck = null;\n return;\n }\n if (this.resultCheck) {\n return;\n }\n var pipe = this;\n this.resultCheck = function (context) {\n if (!context.hasResult) {\n console.log(context);\n var error = new Error(pipe.name + ' failed');\n error.noResult = true;\n throw error;\n }\n };\n return this;\n }\n }]);\n return Pipe;\n}();\n\nvar Context = function () {\n function Context() {\n classCallCheck(this, Context);\n }\n\n createClass(Context, [{\n key: 'setResult',\n value: function setResult(result) {\n this.result = result;\n this.hasResult = true;\n return this;\n }\n }, {\n key: 'exit',\n value: function exit() {\n this.exiting = true;\n return this;\n }\n }, {\n key: 'switchTo',\n value: function switchTo(next, pipe) {\n if (typeof next === 'string' || next instanceof Pipe) {\n this.nextPipe = next;\n } else {\n this.next = next;\n if (pipe) {\n this.nextPipe = pipe;\n }\n }\n return this;\n }\n }, {\n key: 'push',\n value: function push(child, name) {\n child.parent = this;\n if (typeof name !== 'undefined') {\n child.childName = name;\n }\n child.root = this.root || this;\n child.options = child.options || this.options;\n if (!this.children) {\n this.children = [child];\n this.nextAfterChildren = this.next || null;\n this.next = child;\n } else {\n this.children[this.children.length - 1].next = child;\n this.children.push(child);\n }\n child.next = this;\n return this;\n }\n }]);\n return Context;\n}();\n\nvar isArray = typeof Array.isArray === 'function' ? Array.isArray : function (a) {\n return a instanceof Array;\n};\n\nfunction cloneRegExp(re) {\n var regexMatch = /^\\/(.*)\\/([gimyu]*)$/.exec(re.toString());\n return new RegExp(regexMatch[1], regexMatch[2]);\n}\n\nfunction clone(arg) {\n if ((typeof arg === 'undefined' ? 'undefined' : _typeof(arg)) !== 'object') {\n return arg;\n }\n if (arg === null) {\n return null;\n }\n if (isArray(arg)) {\n return arg.map(clone);\n }\n if (arg instanceof Date) {\n return new Date(arg.getTime());\n }\n if (arg instanceof RegExp) {\n return cloneRegExp(arg);\n }\n var cloned = {};\n for (var name in arg) {\n if (Object.prototype.hasOwnProperty.call(arg, name)) {\n cloned[name] = clone(arg[name]);\n }\n }\n return cloned;\n}\n\nvar DiffContext = function (_Context) {\n inherits(DiffContext, _Context);\n\n function DiffContext(left, right) {\n classCallCheck(this, DiffContext);\n\n var _this = possibleConstructorReturn(this, (DiffContext.__proto__ || Object.getPrototypeOf(DiffContext)).call(this));\n\n _this.left = left;\n _this.right = right;\n _this.pipe = 'diff';\n return _this;\n }\n\n createClass(DiffContext, [{\n key: 'setResult',\n value: function setResult(result) {\n if (this.options.cloneDiffValues && (typeof result === 'undefined' ? 'undefined' : _typeof(result)) === 'object') {\n var clone$$1 = typeof this.options.cloneDiffValues === 'function' ? this.options.cloneDiffValues : clone;\n if (_typeof(result[0]) === 'object') {\n result[0] = clone$$1(result[0]);\n }\n if (_typeof(result[1]) === 'object') {\n result[1] = clone$$1(result[1]);\n }\n }\n return Context.prototype.setResult.apply(this, arguments);\n }\n }]);\n return DiffContext;\n}(Context);\n\nvar PatchContext = function (_Context) {\n inherits(PatchContext, _Context);\n\n function PatchContext(left, delta) {\n classCallCheck(this, PatchContext);\n\n var _this = possibleConstructorReturn(this, (PatchContext.__proto__ || Object.getPrototypeOf(PatchContext)).call(this));\n\n _this.left = left;\n _this.delta = delta;\n _this.pipe = 'patch';\n return _this;\n }\n\n return PatchContext;\n}(Context);\n\nvar ReverseContext = function (_Context) {\n inherits(ReverseContext, _Context);\n\n function ReverseContext(delta) {\n classCallCheck(this, ReverseContext);\n\n var _this = possibleConstructorReturn(this, (ReverseContext.__proto__ || Object.getPrototypeOf(ReverseContext)).call(this));\n\n _this.delta = delta;\n _this.pipe = 'reverse';\n return _this;\n }\n\n return ReverseContext;\n}(Context);\n\nvar isArray$1 = typeof Array.isArray === 'function' ? Array.isArray : function (a) {\n return a instanceof Array;\n};\n\nvar diffFilter = function trivialMatchesDiffFilter(context) {\n if (context.left === context.right) {\n context.setResult(undefined).exit();\n return;\n }\n if (typeof context.left === 'undefined') {\n if (typeof context.right === 'function') {\n throw new Error('functions are not supported');\n }\n context.setResult([context.right]).exit();\n return;\n }\n if (typeof context.right === 'undefined') {\n context.setResult([context.left, 0, 0]).exit();\n return;\n }\n if (typeof context.left === 'function' || typeof context.right === 'function') {\n throw new Error('functions are not supported');\n }\n context.leftType = context.left === null ? 'null' : _typeof(context.left);\n context.rightType = context.right === null ? 'null' : _typeof(context.right);\n if (context.leftType !== context.rightType) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.leftType === 'boolean' || context.leftType === 'number') {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.leftType === 'object') {\n context.leftIsArray = isArray$1(context.left);\n }\n if (context.rightType === 'object') {\n context.rightIsArray = isArray$1(context.right);\n }\n if (context.leftIsArray !== context.rightIsArray) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n\n if (context.left instanceof RegExp) {\n if (context.right instanceof RegExp) {\n context.setResult([context.left.toString(), context.right.toString()]).exit();\n } else {\n context.setResult([context.left, context.right]).exit();\n }\n }\n};\ndiffFilter.filterName = 'trivial';\n\nvar patchFilter = function trivialMatchesPatchFilter(context) {\n if (typeof context.delta === 'undefined') {\n context.setResult(context.left).exit();\n return;\n }\n context.nested = !isArray$1(context.delta);\n if (context.nested) {\n return;\n }\n if (context.delta.length === 1) {\n context.setResult(context.delta[0]).exit();\n return;\n }\n if (context.delta.length === 2) {\n if (context.left instanceof RegExp) {\n var regexArgs = /^\\/(.*)\\/([gimyu]+)$/.exec(context.delta[1]);\n if (regexArgs) {\n context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit();\n return;\n }\n }\n context.setResult(context.delta[1]).exit();\n return;\n }\n if (context.delta.length === 3 && context.delta[2] === 0) {\n context.setResult(undefined).exit();\n }\n};\npatchFilter.filterName = 'trivial';\n\nvar reverseFilter = function trivialReferseFilter(context) {\n if (typeof context.delta === 'undefined') {\n context.setResult(context.delta).exit();\n return;\n }\n context.nested = !isArray$1(context.delta);\n if (context.nested) {\n return;\n }\n if (context.delta.length === 1) {\n context.setResult([context.delta[0], 0, 0]).exit();\n return;\n }\n if (context.delta.length === 2) {\n context.setResult([context.delta[1], context.delta[0]]).exit();\n return;\n }\n if (context.delta.length === 3 && context.delta[2] === 0) {\n context.setResult([context.delta[0]]).exit();\n }\n};\nreverseFilter.filterName = 'trivial';\n\nfunction collectChildrenDiffFilter(context) {\n if (!context || !context.children) {\n return;\n }\n var length = context.children.length;\n var child = void 0;\n var result = context.result;\n for (var index = 0; index < length; index++) {\n child = context.children[index];\n if (typeof child.result === 'undefined') {\n continue;\n }\n result = result || {};\n result[child.childName] = child.result;\n }\n if (result && context.leftIsArray) {\n result._t = 'a';\n }\n context.setResult(result).exit();\n}\ncollectChildrenDiffFilter.filterName = 'collectChildren';\n\nfunction objectsDiffFilter(context) {\n if (context.leftIsArray || context.leftType !== 'object') {\n return;\n }\n\n var name = void 0;\n var child = void 0;\n var propertyFilter = context.options.propertyFilter;\n for (name in context.left) {\n if (!Object.prototype.hasOwnProperty.call(context.left, name)) {\n continue;\n }\n if (propertyFilter && !propertyFilter(name, context)) {\n continue;\n }\n child = new DiffContext(context.left[name], context.right[name]);\n context.push(child, name);\n }\n for (name in context.right) {\n if (!Object.prototype.hasOwnProperty.call(context.right, name)) {\n continue;\n }\n if (propertyFilter && !propertyFilter(name, context)) {\n continue;\n }\n if (typeof context.left[name] === 'undefined') {\n child = new DiffContext(undefined, context.right[name]);\n context.push(child, name);\n }\n }\n\n if (!context.children || context.children.length === 0) {\n context.setResult(undefined).exit();\n return;\n }\n context.exit();\n}\nobjectsDiffFilter.filterName = 'objects';\n\nvar patchFilter$1 = function nestedPatchFilter(context) {\n if (!context.nested) {\n return;\n }\n if (context.delta._t) {\n return;\n }\n var name = void 0;\n var child = void 0;\n for (name in context.delta) {\n child = new PatchContext(context.left[name], context.delta[name]);\n context.push(child, name);\n }\n context.exit();\n};\npatchFilter$1.filterName = 'objects';\n\nvar collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n if (!context || !context.children) {\n return;\n }\n if (context.delta._t) {\n return;\n }\n var length = context.children.length;\n var child = void 0;\n for (var index = 0; index < length; index++) {\n child = context.children[index];\n if (Object.prototype.hasOwnProperty.call(context.left, child.childName) && child.result === undefined) {\n delete context.left[child.childName];\n } else if (context.left[child.childName] !== child.result) {\n context.left[child.childName] = child.result;\n }\n }\n context.setResult(context.left).exit();\n};\ncollectChildrenPatchFilter.filterName = 'collectChildren';\n\nvar reverseFilter$1 = function nestedReverseFilter(context) {\n if (!context.nested) {\n return;\n }\n if (context.delta._t) {\n return;\n }\n var name = void 0;\n var child = void 0;\n for (name in context.delta) {\n child = new ReverseContext(context.delta[name]);\n context.push(child, name);\n }\n context.exit();\n};\nreverseFilter$1.filterName = 'objects';\n\nfunction collectChildrenReverseFilter(context) {\n if (!context || !context.children) {\n return;\n }\n if (context.delta._t) {\n return;\n }\n var length = context.children.length;\n var child = void 0;\n var delta = {};\n for (var index = 0; index < length; index++) {\n child = context.children[index];\n if (delta[child.childName] !== child.result) {\n delta[child.childName] = child.result;\n }\n }\n context.setResult(delta).exit();\n}\ncollectChildrenReverseFilter.filterName = 'collectChildren';\n\n/*\n\nLCS implementation that supports arrays or strings\n\nreference: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n\n*/\n\nvar defaultMatch = function defaultMatch(array1, array2, index1, index2) {\n return array1[index1] === array2[index2];\n};\n\nvar lengthMatrix = function lengthMatrix(array1, array2, match, context) {\n var len1 = array1.length;\n var len2 = array2.length;\n var x = void 0,\n y = void 0;\n\n // initialize empty matrix of len1+1 x len2+1\n var matrix = [len1 + 1];\n for (x = 0; x < len1 + 1; x++) {\n matrix[x] = [len2 + 1];\n for (y = 0; y < len2 + 1; y++) {\n matrix[x][y] = 0;\n }\n }\n matrix.match = match;\n // save sequence lengths for each coordinate\n for (x = 1; x < len1 + 1; x++) {\n for (y = 1; y < len2 + 1; y++) {\n if (match(array1, array2, x - 1, y - 1, context)) {\n matrix[x][y] = matrix[x - 1][y - 1] + 1;\n } else {\n matrix[x][y] = Math.max(matrix[x - 1][y], matrix[x][y - 1]);\n }\n }\n }\n return matrix;\n};\n\nvar backtrack = function backtrack(matrix, array1, array2, context) {\n var index1 = array1.length;\n var index2 = array2.length;\n var subsequence = {\n sequence: [],\n indices1: [],\n indices2: []\n };\n\n while (index1 !== 0 && index2 !== 0) {\n var sameLetter = matrix.match(array1, array2, index1 - 1, index2 - 1, context);\n if (sameLetter) {\n subsequence.sequence.unshift(array1[index1 - 1]);\n subsequence.indices1.unshift(index1 - 1);\n subsequence.indices2.unshift(index2 - 1);\n --index1;\n --index2;\n } else {\n var valueAtMatrixAbove = matrix[index1][index2 - 1];\n var valueAtMatrixLeft = matrix[index1 - 1][index2];\n if (valueAtMatrixAbove > valueAtMatrixLeft) {\n --index2;\n } else {\n --index1;\n }\n }\n }\n return subsequence;\n};\n\nvar get$1 = function get(array1, array2, match, context) {\n var innerContext = context || {};\n var matrix = lengthMatrix(array1, array2, match || defaultMatch, innerContext);\n var result = backtrack(matrix, array1, array2, innerContext);\n if (typeof array1 === 'string' && typeof array2 === 'string') {\n result.sequence = result.sequence.join('');\n }\n return result;\n};\n\nvar lcs = {\n get: get$1\n};\n\nvar ARRAY_MOVE = 3;\n\nvar isArray$2 = typeof Array.isArray === 'function' ? Array.isArray : function (a) {\n return a instanceof Array;\n};\n\nvar arrayIndexOf = typeof Array.prototype.indexOf === 'function' ? function (array, item) {\n return array.indexOf(item);\n} : function (array, item) {\n var length = array.length;\n for (var i = 0; i < length; i++) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n};\n\nfunction arraysHaveMatchByRef(array1, array2, len1, len2) {\n for (var index1 = 0; index1 < len1; index1++) {\n var val1 = array1[index1];\n for (var index2 = 0; index2 < len2; index2++) {\n var val2 = array2[index2];\n if (index1 !== index2 && val1 === val2) {\n return true;\n }\n }\n }\n}\n\nfunction matchItems(array1, array2, index1, index2, context) {\n var value1 = array1[index1];\n var value2 = array2[index2];\n if (value1 === value2) {\n return true;\n }\n if ((typeof value1 === 'undefined' ? 'undefined' : _typeof(value1)) !== 'object' || (typeof value2 === 'undefined' ? 'undefined' : _typeof(value2)) !== 'object') {\n return false;\n }\n var objectHash = context.objectHash;\n if (!objectHash) {\n // no way to match objects was provided, try match by position\n return context.matchByPosition && index1 === index2;\n }\n var hash1 = void 0;\n var hash2 = void 0;\n if (typeof index1 === 'number') {\n context.hashCache1 = context.hashCache1 || [];\n hash1 = context.hashCache1[index1];\n if (typeof hash1 === 'undefined') {\n context.hashCache1[index1] = hash1 = objectHash(value1, index1);\n }\n } else {\n hash1 = objectHash(value1);\n }\n if (typeof hash1 === 'undefined') {\n return false;\n }\n if (typeof index2 === 'number') {\n context.hashCache2 = context.hashCache2 || [];\n hash2 = context.hashCache2[index2];\n if (typeof hash2 === 'undefined') {\n context.hashCache2[index2] = hash2 = objectHash(value2, index2);\n }\n } else {\n hash2 = objectHash(value2);\n }\n if (typeof hash2 === 'undefined') {\n return false;\n }\n return hash1 === hash2;\n}\n\nvar diffFilter$1 = function arraysDiffFilter(context) {\n if (!context.leftIsArray) {\n return;\n }\n\n var matchContext = {\n objectHash: context.options && context.options.objectHash,\n matchByPosition: context.options && context.options.matchByPosition\n };\n var commonHead = 0;\n var commonTail = 0;\n var index = void 0;\n var index1 = void 0;\n var index2 = void 0;\n var array1 = context.left;\n var array2 = context.right;\n var len1 = array1.length;\n var len2 = array2.length;\n\n var child = void 0;\n\n if (len1 > 0 && len2 > 0 && !matchContext.objectHash && typeof matchContext.matchByPosition !== 'boolean') {\n matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2);\n }\n\n // separate common head\n while (commonHead < len1 && commonHead < len2 && matchItems(array1, array2, commonHead, commonHead, matchContext)) {\n index = commonHead;\n child = new DiffContext(context.left[index], context.right[index]);\n context.push(child, index);\n commonHead++;\n }\n // separate common tail\n while (commonTail + commonHead < len1 && commonTail + commonHead < len2 && matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) {\n index1 = len1 - 1 - commonTail;\n index2 = len2 - 1 - commonTail;\n child = new DiffContext(context.left[index1], context.right[index2]);\n context.push(child, index2);\n commonTail++;\n }\n var result = void 0;\n if (commonHead + commonTail === len1) {\n if (len1 === len2) {\n // arrays are identical\n context.setResult(undefined).exit();\n return;\n }\n // trivial case, a block (1 or more consecutive items) was added\n result = result || {\n _t: 'a'\n };\n for (index = commonHead; index < len2 - commonTail; index++) {\n result[index] = [array2[index]];\n }\n context.setResult(result).exit();\n return;\n }\n if (commonHead + commonTail === len2) {\n // trivial case, a block (1 or more consecutive items) was removed\n result = result || {\n _t: 'a'\n };\n for (index = commonHead; index < len1 - commonTail; index++) {\n result['_' + index] = [array1[index], 0, 0];\n }\n context.setResult(result).exit();\n return;\n }\n // reset hash cache\n delete matchContext.hashCache1;\n delete matchContext.hashCache2;\n\n // diff is not trivial, find the LCS (Longest Common Subsequence)\n var trimmed1 = array1.slice(commonHead, len1 - commonTail);\n var trimmed2 = array2.slice(commonHead, len2 - commonTail);\n var seq = lcs.get(trimmed1, trimmed2, matchItems, matchContext);\n var removedItems = [];\n result = result || {\n _t: 'a'\n };\n for (index = commonHead; index < len1 - commonTail; index++) {\n if (arrayIndexOf(seq.indices1, index - commonHead) < 0) {\n // removed\n result['_' + index] = [array1[index], 0, 0];\n removedItems.push(index);\n }\n }\n\n var detectMove = true;\n if (context.options && context.options.arrays && context.options.arrays.detectMove === false) {\n detectMove = false;\n }\n var includeValueOnMove = false;\n if (context.options && context.options.arrays && context.options.arrays.includeValueOnMove) {\n includeValueOnMove = true;\n }\n\n var removedItemsLength = removedItems.length;\n for (index = commonHead; index < len2 - commonTail; index++) {\n var indexOnArray2 = arrayIndexOf(seq.indices2, index - commonHead);\n if (indexOnArray2 < 0) {\n // added, try to match with a removed item and register as position move\n var isMove = false;\n if (detectMove && removedItemsLength > 0) {\n for (var removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) {\n index1 = removedItems[removeItemIndex1];\n if (matchItems(trimmed1, trimmed2, index1 - commonHead, index - commonHead, matchContext)) {\n // store position move as: [originalValue, newPosition, ARRAY_MOVE]\n result['_' + index1].splice(1, 2, index, ARRAY_MOVE);\n if (!includeValueOnMove) {\n // don't include moved value on diff, to save bytes\n result['_' + index1][0] = '';\n }\n\n index2 = index;\n child = new DiffContext(context.left[index1], context.right[index2]);\n context.push(child, index2);\n removedItems.splice(removeItemIndex1, 1);\n isMove = true;\n break;\n }\n }\n }\n if (!isMove) {\n // added\n result[index] = [array2[index]];\n }\n } else {\n // match, do inner diff\n index1 = seq.indices1[indexOnArray2] + commonHead;\n index2 = seq.indices2[indexOnArray2] + commonHead;\n child = new DiffContext(context.left[index1], context.right[index2]);\n context.push(child, index2);\n }\n }\n\n context.setResult(result).exit();\n};\ndiffFilter$1.filterName = 'arrays';\n\nvar compare = {\n numerically: function numerically(a, b) {\n return a - b;\n },\n numericallyBy: function numericallyBy(name) {\n return function (a, b) {\n return a[name] - b[name];\n };\n }\n};\n\nvar patchFilter$2 = function nestedPatchFilter(context) {\n if (!context.nested) {\n return;\n }\n if (context.delta._t !== 'a') {\n return;\n }\n var index = void 0;\n var index1 = void 0;\n\n var delta = context.delta;\n var array = context.left;\n\n // first, separate removals, insertions and modifications\n var toRemove = [];\n var toInsert = [];\n var toModify = [];\n for (index in delta) {\n if (index !== '_t') {\n if (index[0] === '_') {\n // removed item from original array\n if (delta[index][2] === 0 || delta[index][2] === ARRAY_MOVE) {\n toRemove.push(parseInt(index.slice(1), 10));\n } else {\n throw new Error('only removal or move can be applied at original array indices,' + (' invalid diff type: ' + delta[index][2]));\n }\n } else {\n if (delta[index].length === 1) {\n // added item at new array\n toInsert.push({\n index: parseInt(index, 10),\n value: delta[index][0]\n });\n } else {\n // modified item at new array\n toModify.push({\n index: parseInt(index, 10),\n delta: delta[index]\n });\n }\n }\n }\n }\n\n // remove items, in reverse order to avoid sawing our own floor\n toRemove = toRemove.sort(compare.numerically);\n for (index = toRemove.length - 1; index >= 0; index--) {\n index1 = toRemove[index];\n var indexDiff = delta['_' + index1];\n var removedValue = array.splice(index1, 1)[0];\n if (indexDiff[2] === ARRAY_MOVE) {\n // reinsert later\n toInsert.push({\n index: indexDiff[1],\n value: removedValue\n });\n }\n }\n\n // insert items, in reverse order to avoid moving our own floor\n toInsert = toInsert.sort(compare.numericallyBy('index'));\n var toInsertLength = toInsert.length;\n for (index = 0; index < toInsertLength; index++) {\n var insertion = toInsert[index];\n array.splice(insertion.index, 0, insertion.value);\n }\n\n // apply modifications\n var toModifyLength = toModify.length;\n var child = void 0;\n if (toModifyLength > 0) {\n for (index = 0; index < toModifyLength; index++) {\n var modification = toModify[index];\n child = new PatchContext(context.left[modification.index], modification.delta);\n context.push(child, modification.index);\n }\n }\n\n if (!context.children) {\n context.setResult(context.left).exit();\n return;\n }\n context.exit();\n};\npatchFilter$2.filterName = 'arrays';\n\nvar collectChildrenPatchFilter$1 = function collectChildrenPatchFilter(context) {\n if (!context || !context.children) {\n return;\n }\n if (context.delta._t !== 'a') {\n return;\n }\n var length = context.children.length;\n var child = void 0;\n for (var index = 0; index < length; index++) {\n child = context.children[index];\n context.left[child.childName] = child.result;\n }\n context.setResult(context.left).exit();\n};\ncollectChildrenPatchFilter$1.filterName = 'arraysCollectChildren';\n\nvar reverseFilter$2 = function arraysReverseFilter(context) {\n if (!context.nested) {\n if (context.delta[2] === ARRAY_MOVE) {\n context.newName = '_' + context.delta[1];\n context.setResult([context.delta[0], parseInt(context.childName.substr(1), 10), ARRAY_MOVE]).exit();\n }\n return;\n }\n if (context.delta._t !== 'a') {\n return;\n }\n var name = void 0;\n var child = void 0;\n for (name in context.delta) {\n if (name === '_t') {\n continue;\n }\n child = new ReverseContext(context.delta[name]);\n context.push(child, name);\n }\n context.exit();\n};\nreverseFilter$2.filterName = 'arrays';\n\nvar reverseArrayDeltaIndex = function reverseArrayDeltaIndex(delta, index, itemDelta) {\n if (typeof index === 'string' && index[0] === '_') {\n return parseInt(index.substr(1), 10);\n } else if (isArray$2(itemDelta) && itemDelta[2] === 0) {\n return '_' + index;\n }\n\n var reverseIndex = +index;\n for (var deltaIndex in delta) {\n var deltaItem = delta[deltaIndex];\n if (isArray$2(deltaItem)) {\n if (deltaItem[2] === ARRAY_MOVE) {\n var moveFromIndex = parseInt(deltaIndex.substr(1), 10);\n var moveToIndex = deltaItem[1];\n if (moveToIndex === +index) {\n return moveFromIndex;\n }\n if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) {\n reverseIndex++;\n } else if (moveFromIndex >= reverseIndex && moveToIndex < reverseIndex) {\n reverseIndex--;\n }\n } else if (deltaItem[2] === 0) {\n var deleteIndex = parseInt(deltaIndex.substr(1), 10);\n if (deleteIndex <= reverseIndex) {\n reverseIndex++;\n }\n } else if (deltaItem.length === 1 && deltaIndex <= reverseIndex) {\n reverseIndex--;\n }\n }\n }\n\n return reverseIndex;\n};\n\nfunction collectChildrenReverseFilter$1(context) {\n if (!context || !context.children) {\n return;\n }\n if (context.delta._t !== 'a') {\n return;\n }\n var length = context.children.length;\n var child = void 0;\n var delta = {\n _t: 'a'\n };\n\n for (var index = 0; index < length; index++) {\n child = context.children[index];\n var name = child.newName;\n if (typeof name === 'undefined') {\n name = reverseArrayDeltaIndex(context.delta, child.childName, child.result);\n }\n if (delta[name] !== child.result) {\n delta[name] = child.result;\n }\n }\n context.setResult(delta).exit();\n}\ncollectChildrenReverseFilter$1.filterName = 'arraysCollectChildren';\n\nvar diffFilter$2 = function datesDiffFilter(context) {\n if (context.left instanceof Date) {\n if (context.right instanceof Date) {\n if (context.left.getTime() !== context.right.getTime()) {\n context.setResult([context.left, context.right]);\n } else {\n context.setResult(undefined);\n }\n } else {\n context.setResult([context.left, context.right]);\n }\n context.exit();\n } else if (context.right instanceof Date) {\n context.setResult([context.left, context.right]).exit();\n }\n};\ndiffFilter$2.filterName = 'dates';\n\n/* global diff_match_patch */\nvar TEXT_DIFF = 2;\nvar DEFAULT_MIN_LENGTH = 60;\nvar cachedDiffPatch = null;\n\nvar getDiffMatchPatch = function getDiffMatchPatch(required) {\n /* jshint camelcase: false */\n\n if (!cachedDiffPatch) {\n var instance = void 0;\n /* eslint-disable camelcase, new-cap */\n if (typeof diff_match_patch !== 'undefined') {\n // already loaded, probably a browser\n instance = typeof diff_match_patch === 'function' ? new diff_match_patch() : new diff_match_patch.diff_match_patch();\n } else if (dmp) {\n try {\n instance = dmp && new dmp();\n } catch (err) {\n instance = null;\n }\n }\n /* eslint-enable camelcase, new-cap */\n if (!instance) {\n if (!required) {\n return null;\n }\n var error = new Error('text diff_match_patch library not found');\n // eslint-disable-next-line camelcase\n error.diff_match_patch_not_found = true;\n throw error;\n }\n cachedDiffPatch = {\n diff: function diff(txt1, txt2) {\n return instance.patch_toText(instance.patch_make(txt1, txt2));\n },\n patch: function patch(txt1, _patch) {\n var results = instance.patch_apply(instance.patch_fromText(_patch), txt1);\n for (var i = 0; i < results[1].length; i++) {\n if (!results[1][i]) {\n var _error = new Error('text patch failed');\n _error.textPatchFailed = true;\n }\n }\n return results[0];\n }\n };\n }\n return cachedDiffPatch;\n};\n\nvar diffFilter$3 = function textsDiffFilter(context) {\n if (context.leftType !== 'string') {\n return;\n }\n var minLength = context.options && context.options.textDiff && context.options.textDiff.minLength || DEFAULT_MIN_LENGTH;\n if (context.left.length < minLength || context.right.length < minLength) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n // large text, try to use a text-diff algorithm\n var diffMatchPatch = getDiffMatchPatch();\n if (!diffMatchPatch) {\n // diff-match-patch library not available,\n // fallback to regular string replace\n context.setResult([context.left, context.right]).exit();\n return;\n }\n var diff = diffMatchPatch.diff;\n context.setResult([diff(context.left, context.right), 0, TEXT_DIFF]).exit();\n};\ndiffFilter$3.filterName = 'texts';\n\nvar patchFilter$3 = function textsPatchFilter(context) {\n if (context.nested) {\n return;\n }\n if (context.delta[2] !== TEXT_DIFF) {\n return;\n }\n\n // text-diff, use a text-patch algorithm\n var patch = getDiffMatchPatch(true).patch;\n context.setResult(patch(context.left, context.delta[0])).exit();\n};\npatchFilter$3.filterName = 'texts';\n\nvar textDeltaReverse = function textDeltaReverse(delta) {\n var i = void 0;\n var l = void 0;\n var lines = void 0;\n var line = void 0;\n var lineTmp = void 0;\n var header = null;\n var headerRegex = /^@@ +-(\\d+),(\\d+) +\\+(\\d+),(\\d+) +@@$/;\n var lineHeader = void 0;\n lines = delta.split('\\n');\n for (i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n var lineStart = line.slice(0, 1);\n if (lineStart === '@') {\n header = headerRegex.exec(line);\n lineHeader = i;\n\n // fix header\n lines[lineHeader] = '@@ -' + header[3] + ',' + header[4] + ' +' + header[1] + ',' + header[2] + ' @@';\n } else if (lineStart === '+') {\n lines[i] = '-' + lines[i].slice(1);\n if (lines[i - 1].slice(0, 1) === '+') {\n // swap lines to keep default order (-+)\n lineTmp = lines[i];\n lines[i] = lines[i - 1];\n lines[i - 1] = lineTmp;\n }\n } else if (lineStart === '-') {\n lines[i] = '+' + lines[i].slice(1);\n }\n }\n return lines.join('\\n');\n};\n\nvar reverseFilter$3 = function textsReverseFilter(context) {\n if (context.nested) {\n return;\n }\n if (context.delta[2] !== TEXT_DIFF) {\n return;\n }\n\n // text-diff, use a text-diff algorithm\n context.setResult([textDeltaReverse(context.delta[0]), 0, TEXT_DIFF]).exit();\n};\nreverseFilter$3.filterName = 'texts';\n\nvar DiffPatcher = function () {\n function DiffPatcher(options) {\n classCallCheck(this, DiffPatcher);\n\n this.processor = new Processor(options);\n this.processor.pipe(new Pipe('diff').append(collectChildrenDiffFilter, diffFilter, diffFilter$2, diffFilter$3, objectsDiffFilter, diffFilter$1).shouldHaveResult());\n this.processor.pipe(new Pipe('patch').append(collectChildrenPatchFilter, collectChildrenPatchFilter$1, patchFilter, patchFilter$3, patchFilter$1, patchFilter$2).shouldHaveResult());\n this.processor.pipe(new Pipe('reverse').append(collectChildrenReverseFilter, collectChildrenReverseFilter$1, reverseFilter, reverseFilter$3, reverseFilter$1, reverseFilter$2).shouldHaveResult());\n }\n\n createClass(DiffPatcher, [{\n key: 'options',\n value: function options() {\n var _processor;\n\n return (_processor = this.processor).options.apply(_processor, arguments);\n }\n }, {\n key: 'diff',\n value: function diff(left, right) {\n return this.processor.process(new DiffContext(left, right));\n }\n }, {\n key: 'patch',\n value: function patch(left, delta) {\n return this.processor.process(new PatchContext(left, delta));\n }\n }, {\n key: 'reverse',\n value: function reverse(delta) {\n return this.processor.process(new ReverseContext(delta));\n }\n }, {\n key: 'unpatch',\n value: function unpatch(right, delta) {\n return this.patch(right, this.reverse(delta));\n }\n }, {\n key: 'clone',\n value: function clone$$1(value) {\n return clone(value);\n }\n }]);\n return DiffPatcher;\n}();\n\nvar isArray$3 = typeof Array.isArray === 'function' ? Array.isArray : function (a) {\n return a instanceof Array;\n};\n\nvar getObjectKeys = typeof Object.keys === 'function' ? function (obj) {\n return Object.keys(obj);\n} : function (obj) {\n var names = [];\n for (var property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n names.push(property);\n }\n }\n return names;\n};\n\nvar trimUnderscore = function trimUnderscore(str) {\n if (str.substr(0, 1) === '_') {\n return str.slice(1);\n }\n return str;\n};\n\nvar arrayKeyToSortNumber = function arrayKeyToSortNumber(key) {\n if (key === '_t') {\n return -1;\n } else {\n if (key.substr(0, 1) === '_') {\n return parseInt(key.slice(1), 10);\n } else {\n return parseInt(key, 10) + 0.1;\n }\n }\n};\n\nvar arrayKeyComparer = function arrayKeyComparer(key1, key2) {\n return arrayKeyToSortNumber(key1) - arrayKeyToSortNumber(key2);\n};\n\nvar BaseFormatter = function () {\n function BaseFormatter() {\n classCallCheck(this, BaseFormatter);\n }\n\n createClass(BaseFormatter, [{\n key: 'format',\n value: function format(delta, left) {\n var context = {};\n this.prepareContext(context);\n this.recurse(context, delta, left);\n return this.finalize(context);\n }\n }, {\n key: 'prepareContext',\n value: function prepareContext(context) {\n context.buffer = [];\n context.out = function () {\n var _buffer;\n\n (_buffer = this.buffer).push.apply(_buffer, arguments);\n };\n }\n }, {\n key: 'typeFormattterNotFound',\n value: function typeFormattterNotFound(context, deltaType) {\n throw new Error('cannot format delta type: ' + deltaType);\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n return err.toString();\n }\n }, {\n key: 'finalize',\n value: function finalize(_ref) {\n var buffer = _ref.buffer;\n\n if (isArray$3(buffer)) {\n return buffer.join('');\n }\n }\n }, {\n key: 'recurse',\n value: function recurse(context, delta, left, key, leftKey, movedFrom, isLast) {\n var useMoveOriginHere = delta && movedFrom;\n var leftValue = useMoveOriginHere ? movedFrom.value : left;\n\n if (typeof delta === 'undefined' && typeof key === 'undefined') {\n return undefined;\n }\n\n var type = this.getDeltaType(delta, movedFrom);\n var nodeType = type === 'node' ? delta._t === 'a' ? 'array' : 'object' : '';\n\n if (typeof key !== 'undefined') {\n this.nodeBegin(context, key, leftKey, type, nodeType, isLast);\n } else {\n this.rootBegin(context, type, nodeType);\n }\n\n var typeFormattter = void 0;\n try {\n typeFormattter = this['format_' + type] || this.typeFormattterNotFound(context, type);\n typeFormattter.call(this, context, delta, leftValue, key, leftKey, movedFrom);\n } catch (err) {\n this.typeFormattterErrorFormatter(context, err, delta, leftValue, key, leftKey, movedFrom);\n if (typeof console !== 'undefined' && console.error) {\n console.error(err.stack);\n }\n }\n\n if (typeof key !== 'undefined') {\n this.nodeEnd(context, key, leftKey, type, nodeType, isLast);\n } else {\n this.rootEnd(context, type, nodeType);\n }\n }\n }, {\n key: 'formatDeltaChildren',\n value: function formatDeltaChildren(context, delta, left) {\n var self = this;\n this.forEachDeltaKey(delta, left, function (key, leftKey, movedFrom, isLast) {\n self.recurse(context, delta[key], left ? left[leftKey] : undefined, key, leftKey, movedFrom, isLast);\n });\n }\n }, {\n key: 'forEachDeltaKey',\n value: function forEachDeltaKey(delta, left, fn) {\n var keys = getObjectKeys(delta);\n var arrayKeys = delta._t === 'a';\n var moveDestinations = {};\n var name = void 0;\n if (typeof left !== 'undefined') {\n for (name in left) {\n if (Object.prototype.hasOwnProperty.call(left, name)) {\n if (typeof delta[name] === 'undefined' && (!arrayKeys || typeof delta['_' + name] === 'undefined')) {\n keys.push(name);\n }\n }\n }\n }\n // look for move destinations\n for (name in delta) {\n if (Object.prototype.hasOwnProperty.call(delta, name)) {\n var value = delta[name];\n if (isArray$3(value) && value[2] === 3) {\n moveDestinations[value[1].toString()] = {\n key: name,\n value: left && left[parseInt(name.substr(1))]\n };\n if (this.includeMoveDestinations !== false) {\n if (typeof left === 'undefined' && typeof delta[value[1]] === 'undefined') {\n keys.push(value[1].toString());\n }\n }\n }\n }\n }\n if (arrayKeys) {\n keys.sort(arrayKeyComparer);\n } else {\n keys.sort();\n }\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n if (arrayKeys && key === '_t') {\n continue;\n }\n var leftKey = arrayKeys ? typeof key === 'number' ? key : parseInt(trimUnderscore(key), 10) : key;\n var isLast = index === length - 1;\n fn(key, leftKey, moveDestinations[leftKey], isLast);\n }\n }\n }, {\n key: 'getDeltaType',\n value: function getDeltaType(delta, movedFrom) {\n if (typeof delta === 'undefined') {\n if (typeof movedFrom !== 'undefined') {\n return 'movedestination';\n }\n return 'unchanged';\n }\n if (isArray$3(delta)) {\n if (delta.length === 1) {\n return 'added';\n }\n if (delta.length === 2) {\n return 'modified';\n }\n if (delta.length === 3 && delta[2] === 0) {\n return 'deleted';\n }\n if (delta.length === 3 && delta[2] === 2) {\n return 'textdiff';\n }\n if (delta.length === 3 && delta[2] === 3) {\n return 'moved';\n }\n } else if ((typeof delta === 'undefined' ? 'undefined' : _typeof(delta)) === 'object') {\n return 'node';\n }\n return 'unknown';\n }\n }, {\n key: 'parseTextDiff',\n value: function parseTextDiff(value) {\n var output = [];\n var lines = value.split('\\n@@ ');\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i];\n var lineOutput = {\n pieces: []\n };\n var location = /^(?:@@ )?[-+]?(\\d+),(\\d+)/.exec(line).slice(1);\n lineOutput.location = {\n line: location[0],\n chr: location[1]\n };\n var pieces = line.split('\\n').slice(1);\n for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n var piece = pieces[pieceIndex];\n if (!piece.length) {\n continue;\n }\n var pieceOutput = {\n type: 'context'\n };\n if (piece.substr(0, 1) === '+') {\n pieceOutput.type = 'added';\n } else if (piece.substr(0, 1) === '-') {\n pieceOutput.type = 'deleted';\n }\n pieceOutput.text = piece.slice(1);\n lineOutput.pieces.push(pieceOutput);\n }\n output.push(lineOutput);\n }\n return output;\n }\n }]);\n return BaseFormatter;\n}();\n\n\n\nvar base = Object.freeze({\n\tdefault: BaseFormatter\n});\n\nvar HtmlFormatter = function (_BaseFormatter) {\n inherits(HtmlFormatter, _BaseFormatter);\n\n function HtmlFormatter() {\n classCallCheck(this, HtmlFormatter);\n return possibleConstructorReturn(this, (HtmlFormatter.__proto__ || Object.getPrototypeOf(HtmlFormatter)).apply(this, arguments));\n }\n\n createClass(HtmlFormatter, [{\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.out('<pre class=\"jsondiffpatch-error\">' + err + '</pre>');\n }\n }, {\n key: 'formatValue',\n value: function formatValue(context, value) {\n context.out('<pre>' + htmlEscape(JSON.stringify(value, null, 2)) + '</pre>');\n }\n }, {\n key: 'formatTextDiffString',\n value: function formatTextDiffString(context, value) {\n var lines = this.parseTextDiff(value);\n context.out('<ul class=\"jsondiffpatch-textdiff\">');\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i];\n context.out('<li><div class=\"jsondiffpatch-textdiff-location\">' + ('<span class=\"jsondiffpatch-textdiff-line-number\">' + line.location.line + '</span><span class=\"jsondiffpatch-textdiff-char\">' + line.location.chr + '</span></div><div class=\"jsondiffpatch-textdiff-line\">'));\n var pieces = line.pieces;\n for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n /* global decodeURI */\n var piece = pieces[pieceIndex];\n context.out('<span class=\"jsondiffpatch-textdiff-' + piece.type + '\">' + htmlEscape(decodeURI(piece.text)) + '</span>');\n }\n context.out('</div></li>');\n }\n context.out('</ul>');\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin(context, type, nodeType) {\n var nodeClass = 'jsondiffpatch-' + type + (nodeType ? ' jsondiffpatch-child-node-type-' + nodeType : '');\n context.out('<div class=\"jsondiffpatch-delta ' + nodeClass + '\">');\n }\n }, {\n key: 'rootEnd',\n value: function rootEnd(context) {\n context.out('</div>' + (context.hasArrows ? '<script type=\"text/javascript\">setTimeout(' + (adjustArrows.toString() + ',10);</script>') : ''));\n }\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(context, key, leftKey, type, nodeType) {\n var nodeClass = 'jsondiffpatch-' + type + (nodeType ? ' jsondiffpatch-child-node-type-' + nodeType : '');\n context.out('<li class=\"' + nodeClass + '\" data-key=\"' + leftKey + '\">' + ('<div class=\"jsondiffpatch-property-name\">' + leftKey + '</div>'));\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(context) {\n context.out('</li>');\n }\n\n /* jshint camelcase: false */\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n context.out('<div class=\"jsondiffpatch-value\">');\n this.formatValue(context, left);\n context.out('</div>');\n }\n }, {\n key: 'format_movedestination',\n value: function format_movedestination(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n context.out('<div class=\"jsondiffpatch-value\">');\n this.formatValue(context, left);\n context.out('</div>');\n }\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n // recurse\n var nodeType = delta._t === 'a' ? 'array' : 'object';\n context.out('<ul class=\"jsondiffpatch-node jsondiffpatch-node-type-' + nodeType + '\">');\n this.formatDeltaChildren(context, delta, left);\n context.out('</ul>');\n }\n }, {\n key: 'format_added',\n value: function format_added(context, delta) {\n context.out('<div class=\"jsondiffpatch-value\">');\n this.formatValue(context, delta[0]);\n context.out('</div>');\n }\n }, {\n key: 'format_modified',\n value: function format_modified(context, delta) {\n context.out('<div class=\"jsondiffpatch-value jsondiffpatch-left-value\">');\n this.formatValue(context, delta[0]);\n context.out('</div>' + '<div class=\"jsondiffpatch-value jsondiffpatch-right-value\">');\n this.formatValue(context, delta[1]);\n context.out('</div>');\n }\n }, {\n key: 'format_deleted',\n value: function format_deleted(context, delta) {\n context.out('<div class=\"jsondiffpatch-value\">');\n this.formatValue(context, delta[0]);\n context.out('</div>');\n }\n }, {\n key: 'format_moved',\n value: function format_moved(context, delta) {\n context.out('<div class=\"jsondiffpatch-value\">');\n this.formatValue(context, delta[0]);\n context.out('</div><div class=\"jsondiffpatch-moved-destination\">' + delta[1] + '</div>');\n\n // draw an SVG arrow from here to move destination\n context.out(\n /* jshint multistr: true */\n '<div class=\"jsondiffpatch-arrow\" ' + 'style=\"position: relative; left: -34px;\">\\n <svg width=\"30\" height=\"60\" ' + 'style=\"position: absolute; display: none;\">\\n <defs>\\n <marker id=\"markerArrow\" markerWidth=\"8\" markerHeight=\"8\"\\n refx=\"2\" refy=\"4\"\\n orient=\"auto\" markerUnits=\"userSpaceOnUse\">\\n <path d=\"M1,1 L1,7 L7,4 L1,1\" style=\"fill: #339;\" />\\n </marker>\\n </defs>\\n <path d=\"M30,0 Q-10,25 26,50\"\\n style=\"stroke: #88f; stroke-width: 2px; fill: none; ' + 'stroke-opacity: 0.5; marker-end: url(#markerArrow);\"\\n ></path>\\n </svg>\\n </div>');\n context.hasArrows = true;\n }\n }, {\n key: 'format_textdiff',\n value: function format_textdiff(context, delta) {\n context.out('<div class=\"jsondiffpatch-value\">');\n this.formatTextDiffString(context, delta[0]);\n context.out('</div>');\n }\n }]);\n return HtmlFormatter;\n}(BaseFormatter);\n\nfunction htmlEscape(text) {\n var html = text;\n var replacements = [[/&/g, '&'], [/</g, '<'], [/>/g, '>'], [/'/g, '''], [/\"/g, '"']];\n for (var i = 0; i < replacements.length; i++) {\n html = html.replace(replacements[i][0], replacements[i][1]);\n }\n return html;\n}\n\nvar adjustArrows = function jsondiffpatchHtmlFormatterAdjustArrows(nodeArg) {\n var node = nodeArg || document;\n var getElementText = function getElementText(_ref) {\n var textContent = _ref.textContent,\n innerText = _ref.innerText;\n return textContent || innerText;\n };\n var eachByQuery = function eachByQuery(el, query, fn) {\n var elems = el.querySelectorAll(query);\n for (var i = 0, l = elems.length; i < l; i++) {\n fn(elems[i]);\n }\n };\n var eachChildren = function eachChildren(_ref2, fn) {\n var children = _ref2.children;\n\n for (var i = 0, l = children.length; i < l; i++) {\n fn(children[i], i);\n }\n };\n eachByQuery(node, '.jsondiffpatch-arrow', function (_ref3) {\n var parentNode = _ref3.parentNode,\n children = _ref3.children,\n style = _ref3.style;\n\n var arrowParent = parentNode;\n var svg = children[0];\n var path = svg.children[1];\n svg.style.display = 'none';\n var destination = getElementText(arrowParent.querySelector('.jsondiffpatch-moved-destination'));\n var container = arrowParent.parentNode;\n var destinationElem = void 0;\n eachChildren(container, function (child) {\n if (child.getAttribute('data-key') === destination) {\n destinationElem = child;\n }\n });\n if (!destinationElem) {\n return;\n }\n try {\n var distance = destinationElem.offsetTop - arrowParent.offsetTop;\n svg.setAttribute('height', Math.abs(distance) + 6);\n style.top = -8 + (distance > 0 ? 0 : distance) + 'px';\n var curve = distance > 0 ? 'M30,0 Q-10,' + Math.round(distance / 2) + ' 26,' + (distance - 4) : 'M30,' + -distance + ' Q-10,' + Math.round(-distance / 2) + ' 26,4';\n path.setAttribute('d', curve);\n svg.style.display = '';\n } catch (err) {}\n });\n};\n\n/* jshint camelcase: true */\n/* eslint-enable camelcase */\n\nvar showUnchanged = function showUnchanged(show, node, delay) {\n var el = node || document.body;\n var prefix = 'jsondiffpatch-unchanged-';\n var classes = {\n showing: prefix + 'showing',\n hiding: prefix + 'hiding',\n visible: prefix + 'visible',\n hidden: prefix + 'hidden'\n };\n var list = el.classList;\n if (!list) {\n return;\n }\n if (!delay) {\n list.remove(classes.showing);\n list.remove(classes.hiding);\n list.remove(classes.visible);\n list.remove(classes.hidden);\n if (show === false) {\n list.add(classes.hidden);\n }\n return;\n }\n if (show === false) {\n list.remove(classes.showing);\n list.add(classes.visible);\n setTimeout(function () {\n list.add(classes.hiding);\n }, 10);\n } else {\n list.remove(classes.hiding);\n list.add(classes.showing);\n list.remove(classes.hidden);\n }\n var intervalId = setInterval(function () {\n adjustArrows(el);\n }, 100);\n setTimeout(function () {\n list.remove(classes.showing);\n list.remove(classes.hiding);\n if (show === false) {\n list.add(classes.hidden);\n list.remove(classes.visible);\n } else {\n list.add(classes.visible);\n list.remove(classes.hidden);\n }\n setTimeout(function () {\n list.remove(classes.visible);\n clearInterval(intervalId);\n }, delay + 400);\n }, delay);\n};\n\nvar hideUnchanged = function hideUnchanged(node, delay) {\n return showUnchanged(false, node, delay);\n};\n\nvar defaultInstance = void 0;\n\nfunction format(delta, left) {\n if (!defaultInstance) {\n defaultInstance = new HtmlFormatter();\n }\n return defaultInstance.format(delta, left);\n}\n\n\n\nvar html = Object.freeze({\n\tshowUnchanged: showUnchanged,\n\thideUnchanged: hideUnchanged,\n\tdefault: HtmlFormatter,\n\tformat: format\n});\n\nvar AnnotatedFormatter = function (_BaseFormatter) {\n inherits(AnnotatedFormatter, _BaseFormatter);\n\n function AnnotatedFormatter() {\n classCallCheck(this, AnnotatedFormatter);\n\n var _this = possibleConstructorReturn(this, (AnnotatedFormatter.__proto__ || Object.getPrototypeOf(AnnotatedFormatter)).call(this));\n\n _this.includeMoveDestinations = false;\n return _this;\n }\n\n createClass(AnnotatedFormatter, [{\n key: 'prepareContext',\n value: function prepareContext(context) {\n get(AnnotatedFormatter.prototype.__proto__ || Object.getPrototypeOf(AnnotatedFormatter.prototype), 'prepareContext', this).call(this, context);\n context.indent = function (levels) {\n this.indentLevel = (this.indentLevel || 0) + (typeof levels === 'undefined' ? 1 : levels);\n this.indentPad = new Array(this.indentLevel + 1).join(' ');\n };\n context.row = function (json, htmlNote) {\n context.out('<tr><td style=\"white-space: nowrap;\">' + '<pre class=\"jsondiffpatch-annotated-indent\"' + ' style=\"display: inline-block\">');\n context.out(context.indentPad);\n context.out('</pre><pre style=\"display: inline-block\">');\n context.out(json);\n context.out('</pre></td><td class=\"jsondiffpatch-delta-note\"><div>');\n context.out(htmlNote);\n context.out('</div></td></tr>');\n };\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.row('', '<pre class=\"jsondiffpatch-error\">' + err + '</pre>');\n }\n }, {\n key: 'formatTextDiffString',\n value: function formatTextDiffString(context, value) {\n var lines = this.parseTextDiff(value);\n context.out('<ul class=\"jsondiffpatch-textdiff\">');\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i];\n context.out('<li><div class=\"jsondiffpatch-textdiff-location\">' + ('<span class=\"jsondiffpatch-textdiff-line-number\">' + line.location.line + '</span><span class=\"jsondiffpatch-textdiff-char\">' + line.location.chr + '</span></div><div class=\"jsondiffpatch-textdiff-line\">'));\n var pieces = line.pieces;\n for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n var piece = pieces[pieceIndex];\n context.out('<span class=\"jsondiffpatch-textdiff-' + piece.type + '\">' + piece.text + '</span>');\n }\n context.out('</div></li>');\n }\n context.out('</ul>');\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin(context, type, nodeType) {\n context.out('<table class=\"jsondiffpatch-annotated-delta\">');\n if (type === 'node') {\n context.row('{');\n context.indent();\n }\n if (nodeType === 'array') {\n context.row('\"_t\": \"a\",', 'Array delta (member names indicate array indices)');\n }\n }\n }, {\n key: 'rootEnd',\n value: function rootEnd(context, type) {\n if (type === 'node') {\n context.indent(-1);\n context.row('}');\n }\n context.out('</table>');\n }\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(context, key, leftKey, type, nodeType) {\n context.row('"' + key + '": {');\n if (type === 'node') {\n context.indent();\n }\n if (nodeType === 'array') {\n context.row('\"_t\": \"a\",', 'Array delta (member names indicate array indices)');\n }\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(context, key, leftKey, type, nodeType, isLast) {\n if (type === 'node') {\n context.indent(-1);\n }\n context.row('}' + (isLast ? '' : ','));\n }\n\n /* jshint camelcase: false */\n\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged() {}\n }, {\n key: 'format_movedestination',\n value: function format_movedestination() {}\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n // recurse\n this.formatDeltaChildren(context, delta, left);\n }\n }]);\n return AnnotatedFormatter;\n}(BaseFormatter);\n\n/* eslint-enable camelcase */\n\nvar wrapPropertyName = function wrapPropertyName(name) {\n return '<pre style=\"display:inline-block\">"' + name + '"</pre>';\n};\n\nvar deltaAnnotations = {\n added: function added(delta, left, key, leftKey) {\n var formatLegend = ' <pre>([newValue])</pre>';\n if (typeof leftKey === 'undefined') {\n return 'new value' + formatLegend;\n }\n if (typeof leftKey === 'number') {\n return 'insert at index ' + leftKey + formatLegend;\n }\n return 'add property ' + wrapPropertyName(leftKey) + formatLegend;\n },\n modified: function modified(delta, left, key, leftKey) {\n var formatLegend = ' <pre>([previousValue, newValue])</pre>';\n if (typeof leftKey === 'undefined') {\n return 'modify value' + formatLegend;\n }\n if (typeof leftKey === 'number') {\n return 'modify at index ' + leftKey + formatLegend;\n }\n return 'modify property ' + wrapPropertyName(leftKey) + formatLegend;\n },\n deleted: function deleted(delta, left, key, leftKey) {\n var formatLegend = ' <pre>([previousValue, 0, 0])</pre>';\n if (typeof leftKey === 'undefined') {\n return 'delete value' + formatLegend;\n }\n if (typeof leftKey === 'number') {\n return 'remove index ' + leftKey + formatLegend;\n }\n return 'delete property ' + wrapPropertyName(leftKey) + formatLegend;\n },\n moved: function moved(delta, left, key, leftKey) {\n return 'move from <span title=\"(position to remove at original state)\">' + ('index ' + leftKey + '</span> to <span title=\"(position to insert at final') + (' state)\">index ' + delta[1] + '</span>');\n },\n textdiff: function textdiff(delta, left, key, leftKey) {\n var location = typeof leftKey === 'undefined' ? '' : typeof leftKey === 'number' ? ' at index ' + leftKey : ' at property ' + wrapPropertyName(leftKey);\n return 'text diff' + location + ', format is <a href=\"https://code.google.com/' + 'p/google-diff-match-patch/wiki/Unidiff\">a variation of Unidiff</a>';\n }\n};\n\nvar formatAnyChange = function formatAnyChange(context, delta) {\n var deltaType = this.getDeltaType(delta);\n var annotator = deltaAnnotations[deltaType];\n var htmlNote = annotator && annotator.apply(annotator, Array.prototype.slice.call(arguments, 1));\n var json = JSON.stringify(delta, null, 2);\n if (deltaType === 'textdiff') {\n // split text diffs lines\n json = json.split('\\\\n').join('\\\\n\"+\\n \"');\n }\n context.indent();\n context.row(json, htmlNote);\n context.indent(-1);\n};\n\n/* eslint-disable camelcase */\nAnnotatedFormatter.prototype.format_added = formatAnyChange;\nAnnotatedFormatter.prototype.format_modified = formatAnyChange;\nAnnotatedFormatter.prototype.format_deleted = formatAnyChange;\nAnnotatedFormatter.prototype.format_moved = formatAnyChange;\nAnnotatedFormatter.prototype.format_textdiff = formatAnyChange;\nvar defaultInstance$1 = void 0;\n\nfunction format$1(delta, left) {\n if (!defaultInstance$1) {\n defaultInstance$1 = new AnnotatedFormatter();\n }\n return defaultInstance$1.format(delta, left);\n}\n\n\n\nvar annotated = Object.freeze({\n\tdefault: AnnotatedFormatter,\n\tformat: format$1\n});\n\nvar OPERATIONS = {\n add: 'add',\n remove: 'remove',\n replace: 'replace',\n move: 'move'\n};\n\nvar JSONFormatter = function (_BaseFormatter) {\n inherits(JSONFormatter, _BaseFormatter);\n\n function JSONFormatter() {\n classCallCheck(this, JSONFormatter);\n\n var _this = possibleConstructorReturn(this, (JSONFormatter.__proto__ || Object.getPrototypeOf(JSONFormatter)).call(this));\n\n _this.includeMoveDestinations = true;\n return _this;\n }\n\n createClass(JSONFormatter, [{\n key: 'prepareContext',\n value: function prepareContext(context) {\n get(JSONFormatter.prototype.__proto__ || Object.getPrototypeOf(JSONFormatter.prototype), 'prepareContext', this).call(this, context);\n context.result = [];\n context.path = [];\n context.pushCurrentOp = function (obj) {\n var op = obj.op,\n value = obj.value;\n\n var val = {\n op: op,\n path: this.currentPath()\n };\n if (typeof value !== 'undefined') {\n val.value = value;\n }\n this.result.push(val);\n };\n\n context.pushMoveOp = function (to) {\n var from = this.currentPath();\n this.result.push({\n op: OPERATIONS.move,\n from: from,\n path: this.toPath(to)\n });\n };\n\n context.currentPath = function () {\n return '/' + this.path.join('/');\n };\n\n context.toPath = function (toPath) {\n var to = this.path.slice();\n to[to.length - 1] = toPath;\n return '/' + to.join('/');\n };\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.out('[ERROR] ' + err);\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin() {}\n }, {\n key: 'rootEnd',\n value: function rootEnd() {}\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(_ref, key, leftKey) {\n var path = _ref.path;\n\n path.push(leftKey);\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(_ref2) {\n var path = _ref2.path;\n\n path.pop();\n }\n\n /* jshint camelcase: false */\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged() {}\n }, {\n key: 'format_movedestination',\n value: function format_movedestination() {}\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n this.formatDeltaChildren(context, delta, left);\n }\n }, {\n key: 'format_added',\n value: function format_added(context, delta) {\n context.pushCurrentOp({ op: OPERATIONS.add, value: delta[0] });\n }\n }, {\n key: 'format_modified',\n value: function format_modified(context, delta) {\n context.pushCurrentOp({ op: OPERATIONS.replace, value: delta[1] });\n }\n }, {\n key: 'format_deleted',\n value: function format_deleted(context) {\n context.pushCurrentOp({ op: OPERATIONS.remove });\n }\n }, {\n key: 'format_moved',\n value: function format_moved(context, delta) {\n var to = delta[1];\n context.pushMoveOp(to);\n }\n }, {\n key: 'format_textdiff',\n value: function format_textdiff() {\n throw new Error('Not implemented');\n }\n }, {\n key: 'format',\n value: function format(delta, left) {\n var context = {};\n this.prepareContext(context);\n this.recurse(context, delta, left);\n return context.result;\n }\n }]);\n return JSONFormatter;\n}(BaseFormatter);\n\nvar last = function last(arr) {\n return arr[arr.length - 1];\n};\n\nvar sortBy = function sortBy(arr, pred) {\n arr.sort(pred);\n return arr;\n};\n\nvar compareByIndexDesc = function compareByIndexDesc(indexA, indexB) {\n var lastA = parseInt(indexA, 10);\n var lastB = parseInt(indexB, 10);\n if (!(isNaN(lastA) || isNaN(lastB))) {\n return lastB - lastA;\n } else {\n return 0;\n }\n};\n\nvar opsByDescendingOrder = function opsByDescendingOrder(removeOps) {\n return sortBy(removeOps, function (a, b) {\n var splitA = a.path.split('/');\n var splitB = b.path.split('/');\n if (splitA.length !== splitB.length) {\n return splitA.length - splitB.length;\n } else {\n return compareByIndexDesc(last(splitA), last(splitB));\n }\n });\n};\n\nvar partitionOps = function partitionOps(arr, fns) {\n var initArr = Array(fns.length + 1).fill().map(function () {\n return [];\n });\n return arr.map(function (item) {\n var position = fns.map(function (fn) {\n return fn(item);\n }).indexOf(true);\n if (position < 0) {\n position = fns.length;\n }\n return { item: item, position: position };\n }).reduce(function (acc, item) {\n acc[item.position].push(item.item);\n return acc;\n }, initArr);\n};\nvar isMoveOp = function isMoveOp(_ref3) {\n var op = _ref3.op;\n return op === 'move';\n};\nvar isRemoveOp = function isRemoveOp(_ref4) {\n var op = _ref4.op;\n return op === 'remove';\n};\n\nvar reorderOps = function reorderOps(diff) {\n var _partitionOps = partitionOps(diff, [isMoveOp, isRemoveOp]),\n _partitionOps2 = slicedToArray(_partitionOps, 3),\n moveOps = _partitionOps2[0],\n removedOps = _partitionOps2[1],\n restOps = _partitionOps2[2];\n\n var removeOpsReverse = opsByDescendingOrder(removedOps);\n return [].concat(toConsumableArray(removeOpsReverse), toConsumableArray(moveOps), toConsumableArray(restOps));\n};\n\nvar defaultInstance$2 = void 0;\n\nvar format$2 = function format(delta, left) {\n if (!defaultInstance$2) {\n defaultInstance$2 = new JSONFormatter();\n }\n return reorderOps(defaultInstance$2.format(delta, left));\n};\n\nvar log = function log(delta, left) {\n console.log(format$2(delta, left));\n};\n\n\n\nvar jsonpatch = Object.freeze({\n\tdefault: JSONFormatter,\n\tpartitionOps: partitionOps,\n\tformat: format$2,\n\tlog: log\n});\n\nfunction chalkColor(name) {\n return chalk && chalk[name] || function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return args;\n };\n}\n\nvar colors = {\n added: chalkColor('green'),\n deleted: chalkColor('red'),\n movedestination: chalkColor('gray'),\n moved: chalkColor('yellow'),\n unchanged: chalkColor('gray'),\n error: chalkColor('white.bgRed'),\n textDiffLine: chalkColor('gray')\n};\n\nvar ConsoleFormatter = function (_BaseFormatter) {\n inherits(ConsoleFormatter, _BaseFormatter);\n\n function ConsoleFormatter() {\n classCallCheck(this, ConsoleFormatter);\n\n var _this = possibleConstructorReturn(this, (ConsoleFormatter.__proto__ || Object.getPrototypeOf(ConsoleFormatter)).call(this));\n\n _this.includeMoveDestinations = false;\n return _this;\n }\n\n createClass(ConsoleFormatter, [{\n key: 'prepareContext',\n value: function prepareContext(context) {\n get(ConsoleFormatter.prototype.__proto__ || Object.getPrototypeOf(ConsoleFormatter.prototype), 'prepareContext', this).call(this, context);\n context.indent = function (levels) {\n this.indentLevel = (this.indentLevel || 0) + (typeof levels === 'undefined' ? 1 : levels);\n this.indentPad = new Array(this.indentLevel + 1).join(' ');\n this.outLine();\n };\n context.outLine = function () {\n this.buffer.push('\\n' + (this.indentPad || ''));\n };\n context.out = function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n for (var i = 0, l = args.length; i < l; i++) {\n var lines = args[i].split('\\n');\n var text = lines.join('\\n' + (this.indentPad || ''));\n if (this.color && this.color[0]) {\n text = this.color[0](text);\n }\n this.buffer.push(text);\n }\n };\n context.pushColor = function (color) {\n this.color = this.color || [];\n this.color.unshift(color);\n };\n context.popColor = function () {\n this.color = this.color || [];\n this.color.shift();\n };\n }\n }, {\n key: 'typeFormattterErrorFormatter',\n value: function typeFormattterErrorFormatter(context, err) {\n context.pushColor(colors.error);\n context.out('[ERROR]' + err);\n context.popColor();\n }\n }, {\n key: 'formatValue',\n value: function formatValue(context, value) {\n context.out(JSON.stringify(value, null, 2));\n }\n }, {\n key: 'formatTextDiffString',\n value: function formatTextDiffString(context, value) {\n var lines = this.parseTextDiff(value);\n context.indent();\n for (var i = 0, l = lines.length; i < l; i++) {\n var line = lines[i];\n context.pushColor(colors.textDiffLine);\n context.out(line.location.line + ',' + line.location.chr + ' ');\n context.popColor();\n var pieces = line.pieces;\n for (var pieceIndex = 0, piecesLength = pieces.length; pieceIndex < piecesLength; pieceIndex++) {\n var piece = pieces[pieceIndex];\n context.pushColor(colors[piece.type]);\n context.out(piece.text);\n context.popColor();\n }\n if (i < l - 1) {\n context.outLine();\n }\n }\n context.indent(-1);\n }\n }, {\n key: 'rootBegin',\n value: function rootBegin(context, type, nodeType) {\n context.pushColor(colors[type]);\n if (type === 'node') {\n context.out(nodeType === 'array' ? '[' : '{');\n context.indent();\n }\n }\n }, {\n key: 'rootEnd',\n value: function rootEnd(context, type, nodeType) {\n if (type === 'node') {\n context.indent(-1);\n context.out(nodeType === 'array' ? ']' : '}');\n }\n context.popColor();\n }\n }, {\n key: 'nodeBegin',\n value: function nodeBegin(context, key, leftKey, type, nodeType) {\n context.pushColor(colors[type]);\n context.out(leftKey + ': ');\n if (type === 'node') {\n context.out(nodeType === 'array' ? '[' : '{');\n context.indent();\n }\n }\n }, {\n key: 'nodeEnd',\n value: function nodeEnd(context, key, leftKey, type, nodeType, isLast) {\n if (type === 'node') {\n context.indent(-1);\n context.out(nodeType === 'array' ? ']' : '}' + (isLast ? '' : ','));\n }\n if (!isLast) {\n context.outLine();\n }\n context.popColor();\n }\n\n /* jshint camelcase: false */\n /* eslint-disable camelcase */\n\n }, {\n key: 'format_unchanged',\n value: function format_unchanged(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n this.formatValue(context, left);\n }\n }, {\n key: 'format_movedestination',\n value: function format_movedestination(context, delta, left) {\n if (typeof left === 'undefined') {\n return;\n }\n this.formatValue(context, left);\n }\n }, {\n key: 'format_node',\n value: function format_node(context, delta, left) {\n // recurse\n this.formatDeltaChildren(context, delta, left);\n }\n }, {\n key: 'format_added',\n value: function format_added(context, delta) {\n this.formatValue(context, delta[0]);\n }\n }, {\n key: 'format_modified',\n value: function format_modified(context, delta) {\n context.pushColor(colors.deleted);\n this.formatValue(context, delta[0]);\n context.popColor();\n context.out(' => ');\n context.pushColor(colors.added);\n this.formatValue(context, delta[1]);\n context.popColor();\n }\n }, {\n key: 'format_deleted',\n value: function format_deleted(context, delta) {\n this.formatValue(context, delta[0]);\n }\n }, {\n key: 'format_moved',\n value: function format_moved(context, delta) {\n context.out('==> ' + delta[1]);\n }\n }, {\n key: 'format_textdiff',\n value: function format_textdiff(context, delta) {\n this.formatTextDiffString(context, delta[0]);\n }\n }]);\n return ConsoleFormatter;\n}(BaseFormatter);\n\nvar defaultInstance$3 = void 0;\n\nvar format$3 = function format(delta, left) {\n if (!defaultInstance$3) {\n defaultInstance$3 = new ConsoleFormatter();\n }\n return defaultInstance$3.format(delta, left);\n};\n\nfunction log$1(delta, left) {\n console.log(format$3(delta, left));\n}\n\n\n\nvar console$1 = Object.freeze({\n\tdefault: ConsoleFormatter,\n\tformat: format$3,\n\tlog: log$1\n});\n\n\n\nvar index = Object.freeze({\n\tbase: base,\n\thtml: html,\n\tannotated: annotated,\n\tjsonpatch: jsonpatch,\n\tconsole: console$1\n});\n\n// use as 2nd parameter for JSON.parse to revive Date instances\nfunction dateReviver(key, value) {\n var parts = void 0;\n if (typeof value === 'string') {\n // eslint-disable-next-line max-len\n parts = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+-])(\\d{2}):(\\d{2}))$/.exec(value);\n if (parts) {\n return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0)));\n }\n }\n return value;\n}\n\nfunction create(options) {\n return new DiffPatcher(options);\n}\n\nvar defaultInstance$4 = void 0;\n\nfunction diff() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.diff.apply(defaultInstance$4, arguments);\n}\n\nfunction patch() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.patch.apply(defaultInstance$4, arguments);\n}\n\nfunction unpatch() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.unpatch.apply(defaultInstance$4, arguments);\n}\n\nfunction reverse() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.reverse.apply(defaultInstance$4, arguments);\n}\n\nfunction clone$1() {\n if (!defaultInstance$4) {\n defaultInstance$4 = new DiffPatcher();\n }\n return defaultInstance$4.clone.apply(defaultInstance$4, arguments);\n}\n\nexport { DiffPatcher, index as formatters, console$1 as console, create, dateReviver, diff, patch, unpatch, reverse, clone$1 as clone };\n//# sourceMappingURL=jsondiffpatch.esm.js.map\n","import _regeneratorRuntime from \"@babel/runtime/regenerator\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\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; }\n\nimport { DiffPatcher } from \"jsondiffpatch\";\nimport { IdleScheduler } from \"./idle-scheduler\";\nexport var JsonDiffMain = /*#__PURE__*/function () {\n function JsonDiffMain() {\n _classCallCheck(this, JsonDiffMain);\n\n _defineProperty(this, \"diffPatcher\", new DiffPatcher({\n arrays: {\n detectMove: false\n },\n textDiff: {\n minLength: 1\n }\n }));\n\n _defineProperty(this, \"scheduler\", new IdleScheduler());\n }\n\n _createClass(JsonDiffMain, [{\n key: \"diff\",\n value: function () {\n var _diff = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(input) {\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.scheduler.request();\n\n case 2:\n return _context.abrupt(\"return\", {\n id: input.id,\n delta: this.diffPatcher.diff(input.a, input.b)\n });\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function diff(_x) {\n return _diff.apply(this, arguments);\n }\n\n return diff;\n }()\n }]);\n\n return JsonDiffMain;\n}();"],"names":["LinkType","ListType","ListNumberStyle","ListNumberDelim","SkinTone","kEmojis","index","EditorCommandId","BaseKey","NavigationType","el","key","i","found","self","f","map","prop","a","b","j","size","from","text","node","last","copy","p","n","schema","nodes","type","set","_","json","dist","insert","replace","slice","sub","joinable","target","next","d","str","doc","Node","match","m","base","search","types","min","max","nfa","compile","edge","expr","cmp","states","defaults","NodeType","Schema","excl","ok","mark","DOMParser","r","wrap","top","styles","route","block","part","re","space","diff","del","id","e","mapFragment","parent","gap","s","step","range","lift","setBlockType","split","matches","close","def","expand","TransformError","SelectionRange","lastNode","prev","plugin","createKey","keys","ie","chrome","mac","rect","x","y","outside","pos","root","preMatch","widgets","apply","empty","code","html","dom","event","handlers","now","handleTripleClick","isNode","oldOffset","find","anchor","tr","shared","parse","compare","sel","ignoreKey","shift","meta","__defProp","deleteTable","handlePaste","selectedRect","tableNodeTypes","require$$0","bottom","h","w","prevRow","setCellAttrs","setter","normalize","changedDescendants","check","handleKeyDown","arrow","nextRow","require$$2","removeParentNodeOfType","replaceParentNodeOfType","removeSelectedNode","replaceSelectedNode","setTextSelection","position","isSelectableNode","shouldSelectNode","setSelection","safeInsert","setParentNodeMarkup","selectParentNodeOfType","removeNodeBefore","isNodeSelection","equalNodeType","cloneTr","replaceNodeAtPos","canReplace","removeNodeAtPos","canInsert","isEmptyParagraph","findTableClosestToPos","predicate","createCell","isRectSelected","transpose","column","convertTableNodeToArrayOfRows","tableNode","convertArrayOfRowsToTableNode","moveTableColumn","moveTableRow","moveRowInArrayOfRows","checkInvalidMovements","findParentNode","findParentNodeClosestToPos","findParentDomRef","hasParentNode","findParentNodeOfType","findParentNodeOfTypeClosestToPos","hasParentNodeOfType","findParentDomRefOfType","findSelectedNodeOfType","findPositionOfNodeBefore","findDomRefAtPos","flatten","findChildren","findTextNodes","findInlineNodes","findBlockNodes","findChildrenByAttr","findChildrenByType","findChildrenByMark","contains","_toConsumableArray","findTable","isCellSelection","getSelectionRect","isColumnSelected","isRowSelected","isTableSelected","getCellsInColumn","getCellsInRow","getCellsInTable","select","selectTable","emptyCell","addColumnAt","moveRow","opts","moveColumn","addRowAt","cloneRowAt","tableNodes","_loop","_i","removeColumnAt","removeRowAt","removeTable","removeSelectedColumns","removeSelectedRows","removeColumnClosestToPos","removeRowClosestToPos","forEachCellInColumn","forEachCellInRow","createTable","findCellClosestToPos","findCellRectClosestToPos","filterCellsInRow","getSelectionRangeInColumn","_loop2","_loop3","getSelectionRangeInRow","_loop4","_loop5","TraverseResult","debug","isObject","length","exception","compact","toString","line","extend","isBoolean","ch","isInteger","int","core","delta","_default","_class","lc","major","minor","prefix","iterator","CHAR_COLON","character","char","string","yaml","DocumentUri","URI","integer","uinteger","Position","create","Range","Location","LocationLink","Color","alpha","ColorInformation","ColorPresentation","FoldingRangeKind","FoldingRange","DiagnosticRelatedInformation","DiagnosticSeverity","DiagnosticTag","CodeDescription","Diagnostic","Command","TextEdit","ChangeAnnotation","ChangeAnnotationIdentifier","AnnotatedTextEdit","TextDocumentEdit","CreateFile","RenameFile","DeleteFile","WorkspaceEdit","TextEditChangeImpl","ChangeAnnotations","TextDocumentIdentifier","VersionedTextDocumentIdentifier","version","OptionalVersionedTextDocumentIdentifier","TextDocumentItem","MarkupKind","MarkupContent","CompletionItemKind","InsertTextFormat","CompletionItemTag","InsertReplaceEdit","InsertTextMode","CompletionItemLabelDetails","CompletionItem","CompletionList","MarkedString","Hover","ParameterInformation","SignatureInformation","DocumentHighlightKind","DocumentHighlight","SymbolKind","SymbolTag","SymbolInformation","WorkspaceSymbol","DocumentSymbol","CodeActionKind","CodeActionTriggerKind","CodeActionContext","CodeAction","CodeLens","FormattingOptions","DocumentLink","SemanticTokenTypes","SemanticTokenModifiers","SemanticTokens","InlineValueText","InlineValueVariableLookup","InlineValueEvaluatableExpression","InlineValueContext","InlayHintKind","InlayHintLabelPart","InlayHint","WorkspaceFolder","TextDocument","document","FullTextDocument","mid","Is","defined","undefined","module","this","scrollIntoView","zenscroll","CACHE","isLetter","clone","depth","proto","o","combining","require$$1","wcwidthModule","wcwidth","wcwidth_1","abs","assign","trim","characters","caret","previous","k","z","stringify","regex","l","seq","format","url","u","hash","require$$3","require$$4","isString","_hasOwnProperty","has","src","entities","exports","textNodes","parentNode","link","removeMark","nd","canJoin","liftListItem","liftToOuterList","liftOutOfList","sinkListItem","extension","marker","lines","history","combine","keymap","v","lang","delimiter","ui","gapCursor","regexp","q","t","A","B","C","D","E","F","G","H","I","J","K","L","M","g","N","O","P","Q","R","S","T","U","V","W","de","ee","te","c","X","Y","Z","ReactPropTypesSecret","propTypesModule","_react","_interopRequireDefault","_propTypes","_propTypes2","_classCallCheck","_possibleConstructorReturn","_inherits","get","createReactContext","Provider","_temp","Consumer","getValue","_typeof","Container","cb","Subscribe","obj","_setPrototypeOf","_createSuper","_isNativeReflectConstruct","_getPrototypeOf","_assertThisInitialized","_defineProperty","GlobalStateContainer","_extends","StyleSheet","identifierWithPointTracking","toRules","getRules","compat","removeLabel","prefixer","createCache","stylis","registerStyles","insertStyles","isCustomProperty","isProcessableValue","processStyleValue","cursor","unitless","serializeStyles","hashString","syncFallback","React","createContext","withEmotionCache","forwardRef","useContext","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","Insertion","createStyled","createElement","Fragment","styled","theme","funcTag","reIsHostCtor","isObjectLike","objectProto","hasOwnProperty","reIsNative","getNative","isFunction","FUNC_ERROR_TEXT","nativeMax","debounce","lodash_debounce","autoprefix_1","pre","Dock_1","_createClass","descriptor","_lodash","_lodash2","Dock","lib","_defineProperties","Tab","PropTypes","TabPanel","Tabs","_regeneratorRuntime","hasOwn","defineProperty","$Symbol","define","Context","IteratorPrototype","value","Parser","tag_check","comment","token","indent_character","indent_size","max_char","brace_style","crypto","handler","currentNode","res","asyncGeneratorStep","_asyncToGenerator","prettyPrint","EditorStateContainer","EditorState","JsonDiffWorker","JsonDiffMain","StateTabStateContainer","classCallCheck","floor","it","toInteger","global","_globalModule","_coreModule","anObject","IE8_DOM_DEFINE","toPrimitive","dP","createDesc","hide","PROTOTYPE","$export","cof","toIObject","store","_sharedModule","uid","arrayIndexOf","IE_PROTO","$keys","enumBugKeys","getKeys","lt","gt","require$$5","Symbol","_wksModule","TAG","setToStringTag","NAME","toObject","ObjectProto","redefine","Iterators","require$$6","require$$7","ITERATOR","require$$8","META","_metaModule","wksExt","pIE","symbols","isEnum","isArray","getOwnPropertyNames","gOPN","gOPD","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","_create","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","isSymbol","propertyIsEnumerable","getOwnPropertySymbols","require$$27","require$$28","require$$29","require$$30","_typeof_1","possibleConstructorReturn","_typeof2","_typeof3","setPrototypeOf","$Object","inherits","DESCRIPTORS","gOPS","IObject","_iterator","_iterator2","objType","_extends2","_extends3","_react2","JSONArrow","classof","_getIterator2","_getIterator3","_keys","_keys2","getCollectionEntries","idx","_isArray","ItemRange","handleClick","postprocessValue","JSONNestedNode","getItemString","labelRenderer","JSONObjectNode","JSONArrayNode","isSafeInteger","JSONIterableNode","JSONValueNode","valueRenderer","JSONNode","slicedToArray","INFINITY","MAX_SAFE_INTEGER","NAN","genTag","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","objectToString","nativeMin","toNumber","isBinary","clamp","hex","rgb","extractComponents","component","hsl","hsl2rgb","parse_1","flip","merger","mergeStyling","mergeStylings","getStylingByKeys","invertTheme","getBase16Theme","colorMap","valueColorMap","colors","getDefaultThemeStyling","identity","expandRootNode","keyName","defaultItemString","defaultLabelRenderer","noCustomNode","JSONTree","Section","noop","ListItem","ListItemGroup","PureComponent","highlight","Highlighter","num","formatTimestamp","timestamp","isSelected","isPrevious","isDimmed","SchemaTab","PluginsTabStateContainer","StructureTabStateContainer","bg","SnapshotTab","NodePicker","HistoryTab","StructureTab","SnapshotsTab","tl","URL","letter","pinyin","Pinyin","webPinyin","transliterate","suggestCiteId","pairs","formatAuthors","QuoteType","MathType","PandocTokenType","tokens","div","append","beginDocPos","endDocPos","FixupContext","ImageType","diff_match_patch","v1","x2","dmp","longtext","shorttext","rd","patch","text2","DIFF_INSERT","DIFF_EQUAL","DIFF_DELETE","ASTNodeTypes","comp","upperBound","SourceLocation","StructuredSource","__importDefault","SourceCode_1","SourceCode","NewLineParser_1","NewLineParser","SpaceParser_1","SpaceParser","SeparatorParser","AnyValueParser_1","AnyValueParser","AbbrMarker_1","AbbrMarker","il","PairMaker_1","logger_1","PairMaker","SplitParser","escape","ProsemirrorNode","uf","tb","OmniInsertGroup","pluginKey","icon","completion","firstBy","useEffect","wb","MAX_LENGTH","constants","MAX_SAFE_COMPONENT_LENGTH","parseOptions","compareIdentifiers","identifiers","SemVer","identifier","semver","valid","clean","inc","eq","prerelease","rcompare","compareLoose","compareBuild","sort","rsort","neq","gte","lte","coerce","Yallist","Comparator","pr","fb","ANY","satisfies","toComparators","maxSatisfying","minSatisfying","minVersion","comparator","validRange","gtr","ltr","intersects","subset","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","require$$39","require$$40","binary","ast","md","semver.gte","semver.coerce","listingXRefImage","tags","order","image","isSingleChildParagraph","kTextHtml","__webpack_require__","clipboard","ClipboardActionCut","fakeCopyAction","ClipboardActionCopy","ClipboardActionDefault","Clipboard","action","ctx","tlite","createPopup","nav","React.createElement","RopeSequence","Leaf","Append","redo","pop","mk","rmdChunk","isEqual","defaultItemKey","validateSharedProps","List","result","handleMouseDown","symbolData","kCategoryAll","symbol","kHeaderHeight","emojiWithSkinTone","prompt","para","selectionIsWithin","argsTag","reRegExpChar","reIsUint","arrayIncludes","baseIndexOf","baseFindIndex","baseIsNaN","isHostObject","funcProto","coreJsData","maskSrcKey","funcToString","Uint8Array","Map","Promise","Set","WeakMap","toSource","isArguments","isIndex","getTag","baseIsNative","isMasked","isLength","baseToString","othValue","convert","memoize","uniqBy","isArrayLikeObject","isArrayLike","path","norm","FuseIndex","score","pattern","item","searchers","query","isWindows","imageForType","sortedKeys","insertSingleCitation","uniqby","kTableType","searchFields","kMaxWidth","_a","_b","useState","CitationSourceListStatus","toCitationListEntry","collection","orderBy","isInTable","addColumn","addRow","toggleHeader","CssAlignment","selectionCell","TableMap","CellSelection","tables","goToNextCell","deleteColumn","deleteRow","columnResizing","tableEditing","insertNode","isEmpty","ni","node2","useLayoutEffect","useLatest","React.useRef","useIsomorphicLayoutEffect","updateRef","useComposedRef","useRef","useCallback","forceHiddenStyles","getHeight","pick","getSizingData","useWindowResizeListener","TextareaAutosize","resizeTextarea","handleChange","handleCommentChange","htmlEscape","ed","nodeText","nodeParagraph","nodeHeading","nodeBlockquote","nodeLists","nodeCodeBlock","nodeImage","nodeFigure","nodeHr","nodeHardBreak","nodeNull","markEm","markStrong","markCode","markLink","behaviorHistory","behaviorSelectAll","behaviorCursor","behaviorFind","behaviorSpellingInteractive","behaviorClearFormatting","behaviorSlides","behaviorTrailingP","behaviorEmptyMark","behaviorEscapeMark","behaviorOutline","beahviorCodeBlockInput","behaviorPasteText","behaviorBottomPadding","behaviorInsertSymbol","behaviorInsertSymbolEmoji","beahviorInsertSpecialCharacters","behaviorNbsp","behaviorRemoveSection","nodeDiv","nodeFootnote","nodeYamlMetadata","nodeRmdCodeChunk","nodeTable","nodeDefinitionList","nodeLineBlock","nodeRawBlock","nodeUserComment","nodeShortcodeBlock","nodeHtmlPreserve","markHTMLComment","markRawTex","markRawHTML","markRawInline","markMath","markCite","markSpan","markXRef","markShortcode","markEmoji","keyEvent","IdleScheduler","request","cancel","conversionsModule","hi","sl","wh","bl","ratio","y2","z2","grayscale","mg","conversions","models","colorConvert","unescape","chalk","escapeStringRegexp","ansiStyles","model","Processor","pipe","process","Pipe","log","clear","push","DiffContext","PatchContext","ReverseContext","collectChildrenPatchFilter","defaultMatch","lengthMatrix","backtrack","index2","reverseArrayDeltaIndex","getDiffMatchPatch","diffMatchPatch","textDeltaReverse","DiffPatcher","trimUnderscore","arrayKeyToSortNumber","arrayKeyComparer","BaseFormatter","parseTextDiff","HtmlFormatter","getElementText","eachByQuery","eachChildren","showUnchanged","hideUnchanged","AnnotatedFormatter","wrapPropertyName","formatAnyChange","JSONFormatter","sortBy","compareByIndexDesc","opsByDescendingOrder","partitionOps","isMoveOp","isRemoveOp","reorderOps","ConsoleFormatter"],"mappings":"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,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,IAAI,CAAE,MAAQ;IAAU,CAAE,MAAQ,IAAQ;AAAA,IAC1D,CAAE,MAAQ,IAAM;AAAA,I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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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EF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,QAEF,KAAK;AACK,kBAAA;AACR;AAAA,MACJ;AACA,UAAI,OAAO;AACT,cAAM,KAAK,MAAM,WAAW,CAAC,CAAC;AAAA,MAAA,WACrBA,MAAK,KAAK;AACnB,cAAM,KAAKA,GAAE;AAAA,MACf;AAAA,IACF;AAGO,WAAA,OAAO,aAAa,GAAG,KAAK;AAAA,EACrC;AC7kBO,QAAM,aAAa;AACnB,QAAM,cAAc;AACpB,QAAM,eAAe;AACrB,QAAM,eAAe;AAErB,WAAS,gBAAgB+H,SAAgB;AAC9C,WAAO,CAAC,aAAa,cAAc,YAAY,EAAE,SAASA,OAAM;AAAA,EAClE;AAEgB,WAAA,oBAAoB+B,KAAc,eAAyB;AAClE,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AACtF,YAAMjY,UAAS,MAAM;AAGrB,YAAM,WAAWgK,uBAAqBhK,QAAO,MAAM,SAAS,EAAE,MAAM,SAAS;AAE7E,UAAI,CAAC,YAAY,CAAC,aAAaA,QAAO,MAAM,WAAW,EAAE,QAAQ,QAAQ,EAAE,KAAK,GAAG;AAC1E,eAAA;AAAA,MACT;AAEA,qBAAe,oBAAoB;AACjC,YAAI,UAAU;AAEZ,gBAAM,MAAM;AAAA,YACV,QAAQ;AAAA,YACR,SAAS;AAAA,UAAA;AAEX,cAAI,UAAU;AACR,gBAAA,SAAS,SAAS,KAAK,MAAM;AAAA,UACnC;AAGA,gBAAM,SAAS,MAAMiY,IAAG,QAAQ,aAAa,KAAK,aAAa;AAC/D,cAAI,QAAQ;AACV,kBAAM,KAAK,MAAM;AAGjB,gBAAI,UAAU;AACN,oBAAAzU,SAAQ,EAAE,MAAM,SAAS,KAAK,IAAI,SAAS,MAAM,SAAS,KAAK,SAAS;AAC1E,kBAAA,OAAO,WAAW,UAAU;AAC9B,mBAAG,aAAaA,OAAM,MAAMA,OAAM,IAAIxD,QAAO,MAAM,SAAS;AAAA,cAAA,WACnD,OAAO,WAAW,QAAQ;AAChC,mBAAA,cAAcwD,OAAM,MAAM,SAAS,KAAK,MAAM,EAAE,QAAQ,OAAO,IAAI,OAAQ,CAAA;AAC9EsE,mCAAiB,GAAG,UAAU,OAAO,GAAG,EAAE,EAAE,EAAE;AAAA,cAChD;AAAA,YAAA,OACK;AACS,4BAAA,IAAI,OAAO,IAAI,MAAM;AAAA,YACrC;AAEA,qBAAS,EAAE;AAAA,UACb;AAAA,QACF;AAEA,YAAI,MAAM;AACR,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AACkB;AAEX,aAAA;AAAA,IAAA;AAAA,EAEX;AAGA,WAAS,cAAc9H,SAAgBkW,SAAgB;AACrD,WAAOlW,QAAO,MAAM,UAAU,OAAO,EAAE,QAAAkW,SAAQ;AAAA,EACjD;AAGA,WAAS,cAAc,IAAiBA,SAAgB;AAChD,UAAAlW,UAAS,GAAG,IAAI,KAAK;AAC3B,UAAM,UAAU,GAAG;AACnB,OAAG,qBAAqB,cAAcA,SAAQkW,OAAM,GAAG,KAAK;AAC3CpO,uBAAA,GAAG,QAAQ,IAAI,QAAQ,IAAI,GAAG,EAAE,EAAE,EAAE;AAAA,EACvD;ACxEgB,WAAA,QAAQ,MAAY,UAAqB;AACvD,QAAI,aAAa,UAAU;AAEzB,UAAI,KAAK,QAAQ;AACf,eAAO,GAAG,KAAK,QAAQ,KAAK,KAAK,KAAK;AAAA,MAAA,OACjC;AACE,eAAA,GAAG,KAAK,QAAQ,KAAK;AAAA,MAC9B;AAAA,IAAA,OACK;AAEL,YAAMhJ,OAAM,QAAQ,KAAK,KAAK,IAAI,IAC9B,KAAK,KAEP,KAAK,KAAK,SAAS,IACf,GAAG,KAAK,QAAQ,KAAK,OACrB,KAAK;AAGX,aAAOA,OAAM,KAAK;AAAA,IACpB;AAAA,EACF;AAEO,WAAS,gBAAgB,MAAc;AACtC,UAAA,UAAU,KAAK,QAAQ,GAAG;AAChC,QAAI,YAAY,IAAI;AACX,aAAA;AAAA,QACL,MAAM,KAAK,UAAU,GAAG,OAAO;AAAA,QAC/B,IAAI,KAAK,UAAU,UAAU,CAAC;AAAA,MAAA;AAAA,IAChC,OACK;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEgB,WAAA,aAAakC,MAAsB,MAAc,UAA4B;AAE3F,QAAI,aAAa,UAAU;AAClB,aAAA,mBAAmBA,MAAK,MAAM,0BAA0B;AAAA,IAAA,OAC1D;AACE,aAAA,mBAAmBA,MAAK,MAAM,4BAA4B;AAAA,IACnE;AAAA,EACF;AAEA,WAAS,mBAAmBA,MAAsB,MAAc,UAA+C;AAE7G,QAAI,UAAU;AAGR,UAAA,WAAW,kBAAkB,IAAI;AACvC,QAAI,UAAU;AACN,YAAA,EAAE,MAAAd,OAAM,IAAA+C,IAAO,IAAA;AACrB,YAAM,UAAU,SAAS/C;AACzB,UAAI,SAAS;AAEX,YAAI,QAAQ,UAAU;AACd,gBAAAF,UAASgB,KAAI,KAAK;AAClB,gBAAA,WAAWhB,QAAO,MAAM,QAAQ;AACtC,gBAAM,cAAc8K,qBAAmB9J,MAAK,UAAU,IAAI;AAC1D,sBAAY,QAAQ,CAAc,eAAA;AAEhC,gBAAI,YAAY,IAAI;AAClB;AAAA,YACF;AAEA,gBAAI,QAAQ,QAAQ,WAAW,MAAMiC,KAAI,QAAQ,GAAG;AAClD,wBAAU,WAAW;AAAA,YACvB;AAAA,UAAA,CACD;AAAA,QACH;AACI,YAAA,YAAY,MAAM,QAAQ,WAAW;AAEnC,UAAAjC,KAAA,YAAY,CAACrB,OAAM,QAAQ;AAE7B,gBAAI,YAAY,IAAI;AACX,qBAAA;AAAA,YACT;AAEI,gBAAA,QAAQ,UAAW,SAASA,MAAK,KAAK,IAAI,KAAK,QAAQ,QAAQA,OAAMsD,GAAE,GAAG;AAClE,wBAAA;AACH,qBAAA;AAAA,YACT;AACO,mBAAA;AAAA,UAAA,CACR;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAGO,WAAA;AAAA,EACT;AAEA,WAAS,kBAAkB,MAAc;AACjC,UAAA,WAAW,KAAK,QAAQ,GAAG;AACjC,QAAI,aAAa,IAAI;AACZ,aAAA;AAAA,QACL,MAAM,KAAK,UAAU,GAAG,QAAQ;AAAA,QAChC,IAAI,KAAK,UAAU,WAAW,CAAC;AAAA,MAAA;AAAA,IACjC,OACK;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAQA,QAAM,6BAAqE;AAAA,IACzE,KAAK,qBAAqB;AAAA,IAC1B,KAAK,oBAAoB;AAAA,IACzB,KAAK,mBAAmB;AAAA,IACxB,IAAI,kBAAkB;AAAA,IACtB,KAAK,qBAAqB;AAAA,IAC1B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,IAC3B,KAAK,iBAAiB,KAAK;AAAA,EAC7B;AAGA,WAAS,oBAAoB;AACpB,WAAA;AAAA,MACL,WAAW,CAAC,WAAW;AAAA,MACvB,SAAS,CAACtD,UAA0B;AAClC,cAAM,WAAWA,MAAK,KAAK,OAAO,MAAM;AACxC,YAAI,eAAe;AACnB,iBAASZ,KAAI,GAAGA,KAAIY,MAAK,YAAYZ,MAAK;AAClC,gBAAA,YAAYY,MAAK,MAAMZ,EAAC;AAC9B,cAAI,cAAc;AAChB,kBAAMW,QAAO,UAAU;AACnB,gBAAAA,MAAK,MAAM,gBAAgB,GAAG;AACzB,qBAAA;AAAA,YACT;AAAA,UACF;AACe,yBAAA,CAAC,CAAC,UAAU,MAAM;AAAA,YAC/B,UAAQ,KAAK,SAAS,YAAY,KAAK,MAAM,SAAS;AAAA,UAAA;AAAA,QAE1D;AACO,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,sBAAsB;AACtB,WAAA;AAAA,MACL,WAAW,CAAC,QAAQ;AAAA,MACpB,SAAS,CAACC,OAAuBsD,QAAe;AACvC,eAAAtD,MAAK,MAAM,OAAO,OAAOsD;AAAA,MAClC;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,uBAAuB;AACvB,WAAA;AAAA,MACL,WAAW,CAAC,SAAS;AAAA,MACrB,SAAS,CAACtD,OAAuBsD,QAAe;AACvC,eAAAtD,MAAK,MAAM,OAAO,OAAOsD;AAAA,MAClC;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,qBAAqB;AACrB,WAAA;AAAA,MACL,WAAW,CAAC,iBAAiB;AAAA,MAC7B,SAAS,CAACtD,UAA0B;AAElC,cAAM,WAAWkL,qBAAmBlL,OAAMA,MAAK,KAAK,OAAO,MAAM,aAAa;AAC9E,YAAI,SAAS,QAAQ;AACnB,iBAAO,CAAC,CAAC,SAAS,GAAG,KAAK,YAAY,MAAM,aAAa;AAAA,QAC3D;AACO,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,iBAAiBO,OAAc;AAC/B,WAAA;AAAA,MACL,WAAW,CAAC,KAAK;AAAA,MACjB,SAAS,CAACP,OAAuBsD,QAAe;AAC9C,eAAOtD,MAAK,MAAM,OAAO,GAAGO,SAAQ+C;AAAA,MACtC;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,uBAAuB;AACvB,WAAA;AAAA,MACL,WAAW,CAAC,YAAY;AAAA,MACxB,SAAS,CAACtD,OAAuBsD,QAAe;AAC9C,cAAM,QAAQtD,MAAK;AACZ,eAAA,MAAM,OAAO,OAAOsD;AAAA,MAC7B;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,+BAAuE;AAAA,IAC3E,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,IAAI,eAAe;AAAA,IACnB,KAAK;AAAA,MACH,WAAW,CAAC,WAAW;AAAA,MACvB,SAAS,CAACtD,OAAuBsD,QAAe,gBAAgBtD,OAAM,KAAKsD,KAAI,mCAAmC;AAAA,IACpH;AAAA,IACA,KAAK;AAAA,MACH,WAAW,CAAC,aAAa,iBAAiB;AAAA,MAC1C,SAAS,CAACtD,OAAuBsD,QAAe;AAC1C,YAAAtD,MAAK,KAAK,SAAS,aAAa;AAClC,iBAAO,gBAAgBA,OAAM,KAAKsD,KAAI,0BAA0B;AAAA,QACvD,WAAAtD,MAAK,KAAK,SAAS,mBAAmB;AACzC,gBAAA,UAAUA,MAAK,MAAM,CAAC;AAC5B,gBAAMuB,SAAQ,QAAQ,YAAY,MAAM,uCAAuC;AAC/E,iBAAO,CAAC,CAACA,UAASA,OAAM,GAAG,cAAc+B,KAAI,QAAW,EAAE,aAAa,SAAU,CAAA,MAAM;AAAA,QAAA,OAClF;AACE,iBAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,WAAW,CAAC,WAAW;AAAA,MACvB,UAAU;AAAA,MACV,SAAS,CAACtD,OAAuBsD,KAAY,aAAwB;AAEnE,YAAI,CAAC,YAAatD,MAAK,MAAM,WAAW,YAAa;AAC5C,iBAAA;AAAA,QACT;AACA,cAAMuB,SAAQvB,MAAK,YAAY,MAAM,mCAAmC;AACxE,eAAO,CAAC,CAACuB,UAASA,OAAM,GAAG,cAAc+B,KAAI,QAAW,EAAE,aAAa,SAAU,CAAA,MAAM;AAAA,MACzF;AAAA,IACF;AAAA,IACA,KAAK,eAAe,SAAS;AAAA,IAC7B,KAAK,eAAe,OAAO;AAAA,IAC3B,KAAK,eAAe,WAAW;AAAA,IAC/B,KAAK,eAAe,aAAa;AAAA,IACjC,KAAK,eAAe,YAAY;AAAA,IAChC,KAAK,eAAe,YAAY;AAAA,IAChC,KAAK,eAAe,UAAU;AAAA,EAChC;AAEA,WAAS,gBAAgBtD,OAAuB,QAAgB,OAAe,SAAkB;AACzF,UAAA,QAAQ,uBAAuBA,MAAK,WAAW;AACrD,QAAI,OAAO;AAEP,aAAA,MAAM,OAAO,cAAc,QAAQ,QAAW,EAAE,aAAa,UAAU,MAAM,KAC7E,MAAM,UAAU,UACf,CAAC,WAAW,CAAC,CAACA,MAAK,YAAY,MAAM,OAAO;AAAA,IAAA,OAE1C;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEA,WAAS,iBAAiB;AACjB,WAAA;AAAA,MACL,WAAW,CAAC,SAAS;AAAA,MACrB,SAAS,CAACA,OAAuBsD,QAAe;AAIvC,eAAAtD,MAAK,MAAM,OAAOsD,OAAM,qBAAqBtD,MAAK,aAAa,KAAK,MAAMsD;AAAA,MACnF;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,eAAe,QAAgB;AAC/B,WAAA;AAAA,MACL,WAAW,CAAC,WAAW;AAAA,MACvB,SAAS,CAACtD,OAAuBsD,QAAe;AAE9C,YAAI,gBAAgBtD,OAAM,QAAQsD,GAAE,GAAG;AAC9B,iBAAA;AAAA,QAAA,OACF;AAEL,gBAAM/B,SAAQvB,MAAK,YAAY,MAAM,2DAA2D;AAChG,iBAAO,CAAC,CAACuB,UAASA,OAAM,GAAG,cAAc,QAAQ,QAAW,EAAE,aAAa,SAAS,CAAC,MAAM,KAAKA,OAAM,OAAO+B;AAAA,QAC/G;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AC1RO,WAAS,WACd,MACAiT,SACAhW,OACA,UACA,UAAU,MACS;AACnB,YAAQA,OAAM;AAAA,MACZ,KAAK,eAAe;AAClB,eAAO,cAAc,MAAM,SAAS,UAAU,EAAE,GAAG,OAAO;AAAA,MAC5D,KAAK,eAAe;AACX,eAAA,aAAa,MAAM,UAAU,OAAO;AAAA,MAC7C,KAAK,eAAe;AACX,eAAA,eAAe,MAAM,UAAU,OAAO;AAAA,MAC/C,KAAK,eAAe;AACX,eAAA,kBAAkB,MAAM,UAAU,OAAO;AAAA,MAClD,KAAK,eAAe;AAClB,eAAO,eAAe,MAAMgW,SAAQ,UAAU,OAAO;AAAA,MACvD;AACS,eAAA;AAAA,IACX;AAAA,EACF;AAEO,WAAS,aAAa,MAAkBjT,KAAY,UAAU,MAAyB;AAC5F,WAAO,SAAS,MAAM,CAAAtD,UAAQsD,QAAOtD,MAAK,MAAM,eAAe,OAAO;AAAA,EACxE;AAEO,WAAS,eAAe,MAAkB,MAAc,UAAU,MAAyB;AAChG,WAAO,SAAS,MAAM,CAAAA,UAAQA,MAAK,MAAM,OAAO,MAAM,OAAO;AAAA,EAC/D;AAEO,WAAS,kBAAkB,MAAkB,SAAiB,UAAU,MAAyB;AAC/F,WAAA;AAAA,MACL;AAAA,MACA,CAAQA,UAAA;AACN,eACEA,MAAK,SAAS,KAAK,MAAM,OAAO,MAAM,WACtCA,MAAK,YAAY,cAAc,SAAS,QAAW,EAAE,aAAa,SAAA,CAAU,MAAM;AAAA,MAEtF;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEO,WAAS,eAAe,MAAkB,cAA4B,MAAc,UAAU,MAAyB;AAC5H,UAAM,WAAW,aAAa,SAAS,SAAS,cAAc,IAAI,WAAW;AAC7E,UAAM,UAAU,aAAa,KAAK,MAAM,KAAK,MAAM,QAAQ;AAC3D,QAAI,YAAY,IAAI;AACX,aAAA,cAAc,MAAM,SAAS,OAAO;AAAA,IAAA,OACtC;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEO,WAAS,cAAc,MAAkB,KAAa,UAAU,MAAyB;AAExF,UAAA,UAAU,KAAK,MAAM,UAAU;AAG/B,UAAA,KAAK,IAAI,KAAK,CAAC;AAGf,UAAA,KAAK,KAAK,MAAM;AACtB,UAAM,SAAS,KAAK,MAAM,IAAI,OAAO,GAAG;AACpC,QAAA,iCAAQ,KAAK,KAAK,YAAY;AAC7B,SAAA,aAAa,IAAI,cAAc,GAAG,IAAI,QAAQ,GAAG,CAAC,CAAC;AAAA,IAAA,OACjD;AACYmI,yBAAA,GAAG,EAAE,EAAE;AAAA,IAC1B;AACG,OAAA,QAAQ,wBAAwB,IAAI;AACvC,SAAK,SAAS,EAAE;AAGhB,UAAMnI,QAAO2K,kBAAgB,KAAK,KAAK,SAAS,KAAK,IAAI,CAAC;AAC1D,QAAI3K,iBAAgB,aAAa;AAG/B,iBAAW,MAAM;AACf,aAAK,MAAM;AAEX,cAAM,OAAO,KAAK,MAAM,IAAI,QAAQ,GAAG;AACjC,cAAA,YAAY,4BAA4B,IAAI;AAGlD,YAAI,WAAW;AACP,gBAAAK,UAAS,KAAK,MAAM;AAC1B,gBAAM,cAAc,KAAK,QAAQ,UAAU,GAAG;AACxC,gBAAA,aAAaiK,mCAAiC,MAAM,CAACjK,QAAO,MAAM,cAAcA,QAAO,MAAM,WAAW,CAAC;AACzG,gBAAA,YAAYA,QAAO,MAAM,MAAMiK,mCAAiC,MAAMjK,QAAO,MAAM,GAAG,IAAI;AAChG,gBAAM,YAAY,cAAc,YAAY,KAAK,OAAO,CAAC,IAAI;AACvD,gBAAA,aAAa,KAAK,QAAQ,SAAS;AACzC,cAAI,YAAY;AACd,kBAAM,aAAa,sBAAsB,cAAc,aAAa,WAAW;AAC/E,gBAAI,YAAY;AACd,oBAAM,WAAW,UAAU,eAAe,sBAAsB,WAAW,GAAG,KAAK,EAAE;AACrF,kBAAI,SAAS;AACX,yBAAS,GAAG,UAAU;AAAA,cAAA,OACjB;AACI,yBAAA,GAAG,YAAY,CAAC;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,SACC,GAAG;AAEC,aAAA,EAAE,KAAK;IAAQ,OACjB;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEA,WAAS,SAAS,MAAkB,WAAsB,UAAU,MAAyB;AAC3F,UAAM,SAASwK,eAAa,KAAK,MAAM,KAAK,SAAS;AACrD,QAAI,OAAO,QAAQ;AAEX,YAAA,MAAM,OAAO,GAAG,MAAM;AACrB,aAAA,cAAc,MAAM,KAAK,OAAO;AAAA,IAAA,OAClC;AACE,aAAA;AAAA,IACT;AAAA,EACF;ACjHO,QAAM,+BAA+B;AA4BrC,QAAM,oBAAoB;AAAA,IAG/B,cAAc;AAFN;AAGN,WAAK,YAAY;IACnB;AAAA,IACO,IAAI,UAA8B;AAClC,WAAA,UAAU,KAAK,QAAQ;AAAA,IAC9B;AAAA,IAEO,OAAO,UAA8B;AAC1C,YAAM/L,SAAQ,KAAK,UAAU,QAAQ,QAAQ;AAC7C,UAAIA,UAAS,GAAG;AACT,aAAA,UAAU,OAAOA,QAAO,CAAC;AAAA,MAChC;AAAA,IACF;AAAA,IAEO,iBAAkD;AACvD,aAAO,KAAK,UAAU,KAAK,CAAQ,SAAA,KAAK,WAAW;AAAA,IACrD;AAAA,IAEO,YAAY,MAAkB,OAAuB;AAE1D,YAAM,aAAa;AAGR,iBAAA,YAAY,KAAK,WAAW;AAErC,YAAIyZ,aAA8B;AAG5B,cAAA,MAAM,SAAS;AACrB,cAAM,OAAO,KAAK,MAAM,IAAI,QAAQ,GAAG;AAGvC,YAAI,KAAK,cAAc,KAAK,WAAW,KAAK,KAAK,MAAM;AAErD,gBAAM,MAAM,SAAS;AACf,gBAAA,eAAe,IAAI;AAGnB,gBAAA,cAAc,MAAM,KAAK,WAAY;AACrC,gBAAA,eAAe,KAAK,UAAU,KAAK,QAAM,GAAG,aAAa,WAAW;AAC1E,cAAI,cAAc;AACV,kBAAA,eAAe,aAAa,IAAI,sBAAsB;AAG5D,kBAAM,SAAS,WAAW;AAC1B,gBAAI,SAAS,aAAa,MAAM,aAAa,UAAU,SAAS,aAAa,KAAK;AACpE,cAAAA,aAAA,IAAI,UAAU,IAAI;AAAA,YAChC;AAAA,UACF;AAAA,QAIF,WACE,CAAC,KAAK,cACN,KAAK,UAAU,KACf,WAAW,UAAU,SAAS,IAAI,wBAAwB,OAC1D,KAAK,IAAI,WAAW,UAAU,SAAS,IAAI,sBAAsB,EAAE,IAAI,IAAI,KAC3E;AACY,UAAAA,aAAA,IAAI,UAAU,IAAI;AAAA,QAChC;AAGA,YAAIA,YAAW;AACP,gBAAA,KAAK,KAAK,MAAM;AAGtB,eAAK,UAAU,QAAQ,CAAA,WAAU,OAAO,oBAAoB,IAAI,CAAC;AAGjE,eAAK,MAAM;AAGX,aAAG,aAAaA,UAAS;AACzB,eAAK,SAAS,EAAE;AAGhB,eAAK,UAAU,QAAQ,CAAA,WAAU,OAAO,oBAAoB,KAAK,CAAC;AAGlE,gBAAM,eAAe;AACrB,gBAAM,yBAAyB;AACxB,iBAAA;AAAA,QACT;AAAA,MACF;AAEO,aAAA;AAAA,IACT;AAAA,EACF;AAGgB,WAAA,8BAA8B,KAAkB,aAA0B,MAAkB;AAC1G,UAAM,cAAc,gBAAgB,KAAK,MAAM,SAAS;AACxD,QAAI,aAAa;AACf,YAAM,YAAY,KAAK,QAAQ,YAAY,GAAG;AAC9C,YAAM,WAAW,UAAU,eAAe,sBAAsB,SAAS,CAAC;AAE1E,UAAI1V,OAAM;AAMV,UAAI,eAAe;AACZ,aAAA,aAAa,gBAAgB,QAC7B,CAAC,aAAa,aAAa,UAAU,SAAS,YAAY,GACjE;AACE,QAAAA,QAAO,aAAa;AACpB,uBAAe,aAAa;AAAA,MAC9B;AAKO,MAAAA,QAAA,IAAI,YAAY,aAAa;AAC9B,YAAAqE,UAASrE,OAAM,IAAI;AACzB,YAAM,UAAU,UAAU;AACpB,YAAA,aAAa,UAAU,YAAY,UAAU;AAG/C,UAAAA,OAAM,WAAWqE,UAAS,YAAY;AAExC;AAAA,MACS,WAAA,IAAI,eAAe,UAAU,cAAc;AAEpD,iBAAS,IAAIrE,IAAG;AAAA,MAAA,WACPA,OAAM,SAAS;AAExB,iBAAS,IAAIA,IAAG;AAAA,MAAA,WACPqE,UAAS,YAAY;AAG9B,iBAAS,IAAI,UAAU,aAAa,aAAaA,QAAO;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAEgB,WAAA,0BACd,MACA,SACA,QACA;;AAGA,UAAM,cAAc,QAAQ,OAAO,UAAU,CAAAlE,WAASA,OAAM,MAAM;AAElE,QAAI,gBAAgB,IAAI;AACtB,UAAI,WAAW,YAAY;AACnB,cAAA,KAAK,KAAK,MAAM;AACnB,WAAA,QAAQ,8BAA8B,IAAI;AAC7C,aAAK,SAAS,EAAE;AAAA,MAAA,OACX;AACD,YAAA;AACJ,YAAI,WAAW,aAAa;AACZ,yBAAA,aAAQ,OAAO,cAAc,OAA7B,mBAAiC;AAAA,QAAA,WACtC,WAAW,aAAa;AACnB,yBAAA,aAAQ,OAAO,cAAc,OAA7B,mBAAiC;AAAA,QACjD;AACA,YAAI,aAAa;AACD,wBAAA,MAAM,aAAc,KAAK;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EAIF;AAGO,WAAS,2BAA2B,OAA6D;AAC/F,WAAA,qBAAqB,OAAO,OAAO,CAAC,MAAM,OAAO,MAAM,SAAS,CAAC;AAAA,EAC1E;AAGA,WAAS,qBAAqB,OAAoB,qBAAqB,OAAO,WAAiE;AAG7I,UAAM3C,UAAS,MAAM;AAGT,gBAAA,aAAa,CAACA,QAAO,MAAM,eAAeA,QAAO,MAAM,WAAWA,QAAO,MAAM,SAAS;AAG9F,UAAA,0BAA0B,CAACL,OAAuBmF,SAAgB;AACtE,YAAM,oBAAoB,CAAC,UAAkBM,OAAe,aAAuB;AAC1E,eAAA;AAAA,UACL;AAAA,UACA,KAAAN;AAAAA,UACA,MAAMM,SAAQzF,MAAK;AAAA,UACnB;AAAA,QAAA;AAAA,MACF;AAEF,UAAI,uCAAW,SAASA,MAAK,OAAO;AAClC,YAAIA,MAAK,SAASK,QAAO,MAAM,eAAe;AAC5C,iBAAO,kBAAkB,MAAM;AAAA,QACtB,WAAAL,MAAK,SAASK,QAAO,MAAM,WAAW;AACzC,gBAAA,QAAQ,SAASL,MAAK,WAAW;AACvC,cAAI,OAAO;AACT,mBAAO,kBAAkB,MAAM,MAAM,MAAM,MAAM,IAAI;AAAA,UAAA,OAChD;AACE,mBAAA;AAAA,UACT;AAAA,QACS,WAAAA,MAAK,SAASK,QAAO,MAAM,WAAW;AACxC,iBAAA,kBAAkBL,MAAK,MAAM,MAAM;AAAA,QAAA,OACrC;AACE,iBAAA;AAAA,QACT;AAAA,MAAA,OACK;AACE,eAAA;AAAA,MACT;AAAA,IAAA;AAIF,UAAM,EAAE,QAAQ,cAAc,IAAI,IAAI,MAAM,UAAU;AACtD,UAAM,EAAE,cAAc,eAAe,IAAI,MAAM,UAAU;AAEzD,UAAM,cAAc,wBAAwB,QAAQ,MAAM,YAAY;AACtE,QAAI,aAAa;AAGT,YAAA,aAAa,YAAY,WAC3B,MAAM,OAAO,WAAW,EAAE,GAAG,SAAS,IACtC;AAGE,YAAA,oBAAoB,CAAC,WAAmB;AACxC,YAAAqO,QAAO,GAAGgB,aAAY;AAC1B,iBAASjQ,KAAE,YAAYA,KAAE,QAAQA,MAAK;AACpC,gBAAMoP,MAAK,OAAO,YAAY,GAAGpP,EAAC;AAClC,cAAI,CAACoP,KAAI;AACP;AAAA,UACF;AACA,cAAIA,QAAO,MAAM;AACf,YAAAH;AACY,YAAAgB,aAAA;AAAA,UAAA,OACP;AACL,YAAAA;AAAA,UACF;AAAA,QACF;AACO,eAAA,SAAS,OAAOhB,OAAMgB,UAAS;AAAA,MAAA;AAKxC,YAAM,SAAkF,CAAA;AACxF,YAAM,IAAI,YAAY,CAACrP,OAAMmF,SAAQ;AACnC,cAAM,gBAAgB,wBAAwBnF,OAAMmF,OAAI,CAAC;AACzD,YAAI,eAAe;AACjB,cAAI,CAAC,sBAAuB,cAAc,aAAa,YAAY,UAAW;AAC5E,mBAAO,KAAK;AAAA,cACV,GAAG;AAAA,cACH,QAAQ,cAAc,QAAQ,YAAY;AAAA,YAAA,CAC3C;AAAA,UACH;AAAA,QACF;AAAA,MAAA,CACD;AAEM,aAAA;AAAA,QACL,gBAAgB,YAAY;AAAA,QAC5B;AAAA,QACA,WAAW;AAAA,UACT,OAAO,kBAAkB,YAAY;AAAA,UACrC,KAAK,kBAAkB,cAAc;AAAA,QACvC;AAAA,QACA,cAAc,MAAM,IAAI;AAAA,UACtB,YAAY,MAAM,KAAK,IAAI,cAAc,UAAU;AAAA,UACnD,YAAY,MAAM;AAAA,QACpB;AAAA,MAAA;AAAA,IACF,OACK;AACE,aAAA;AAAA,IACT;AAAA,EACF;ACzUA,QAAM,UAAU;AAAA,IAkBZ,YAIA5D,QAAO,SAAS;AACZ,WAAK,QAAQA;AACb,WAAK,QAAQA;AACb,WAAK,UAAU,OAAO,WAAW,WAAW,cAAc,OAAO,IAAI;AAAA,IACxE;AAAA,EACL;AACA,WAAS,cAAc,QAAQ;AAC3B,WAAO,SAAU,OAAOA,QAAO,OAAO,KAAK;AACvC,UAAIX,UAAS;AACb,UAAIW,OAAM,IAAI;AACV,YAAI,SAASA,OAAM,GAAG,YAAYA,OAAM,EAAE;AAC1C,QAAAX,WAAUW,OAAM,GAAG,MAAM,SAASA,OAAM,GAAG,MAAM;AACjD,iBAAS;AACT,YAAI,SAAS,QAAQ;AACrB,YAAI,SAAS,GAAG;AACZ,UAAAX,UAASW,OAAM,GAAG,MAAM,SAAS,QAAQ,MAAM,IAAIX;AACnD,kBAAQ;AAAA,QACX;AAAA,MACJ;AACD,aAAO,MAAM,GAAG,WAAWA,SAAQ,OAAO,GAAG;AAAA,IACrD;AAAA,EACA;AACA,QAAM,YAAY;AAMlB,WAAS,WAAW,EAAE,SAAS;AAC3B,QAAI6D,UAAS,IAAI,OAAO;AAAA,MACpB,OAAO;AAAA,QACH,OAAO;AAAE,iBAAO;AAAA,QAAO;AAAA,QACvB,MAAM,IAAID,OAAM;AACZ,cAAI,SAAS,GAAG,QAAQ,IAAI;AAC5B,cAAI;AACA,mBAAO;AACX,iBAAO,GAAG,gBAAgB,GAAG,aAAa,OAAOA;AAAA,QACpD;AAAA,MACJ;AAAA,MACD,OAAO;AAAA,QACH,gBAAgB,MAAM1E,OAAM,IAAIC,OAAM;AAClC,iBAAO,IAAI,MAAMD,OAAM,IAAIC,OAAM,OAAO0E,OAAM;AAAA,QACjD;AAAA,QACD,iBAAiB;AAAA,UACb,gBAAgB,CAAC,SAAS;AACtB,uBAAW,MAAM;AACb,kBAAI,EAAE,QAAS,IAAG,KAAK,MAAM;AAC7B,kBAAI;AACA,oBAAI,MAAM,QAAQ,KAAK,QAAQ,KAAK,IAAI,OAAOA,OAAM;AAAA,YACjF,CAAqB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,MACD,cAAc;AAAA,IACtB,CAAK;AACD,WAAOA;AAAA,EACX;AACA,WAAS,IAAI,MAAM3E,OAAM,IAAIC,OAAM,OAAO0E,SAAQ;AAC9C,QAAI,KAAK;AACL,aAAO;AACX,QAAI,QAAQ,KAAK,OAAO,QAAQ,MAAM,IAAI,QAAQ3E,KAAI;AACtD,QAAI,MAAM,OAAO,KAAK,KAAK;AACvB,aAAO;AACX,QAAI,aAAa,MAAM,OAAO,YAAY,KAAK,IAAI,GAAG,MAAM,eAAe,SAAS,GAAG,MAAM,cAAc,MAAM,QAAQ,IAAIC;AAC7H,aAASX,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACnC,UAAImC,SAAQ,MAAMnC,IAAG,MAAM,KAAK,UAAU;AAC1C,UAAI,KAAKmC,UAAS,MAAMnC,IAAG,QAAQ,OAAOmC,QAAOzB,SAAQyB,OAAM,GAAG,SAASxB,MAAK,SAAS,EAAE;AAC3F,UAAI,CAAC;AACD;AACJ,WAAK,SAAS,GAAG,QAAQ0E,SAAQ,EAAE,WAAW,IAAI,MAAA3E,OAAM,IAAI,MAAAC,MAAI,CAAE,CAAC;AACnE,aAAO;AAAA,IACV;AACD,WAAO;AAAA,EACX;AAKA,QAAM,gBAAgB,CAAC,OAAO,aAAa;AACvC,QAAI,UAAU,MAAM;AACpB,aAASX,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAK;AACrC,UAAIqF,UAAS,QAAQrF,KAAI;AACzB,UAAIqF,QAAO,KAAK,iBAAiB,WAAWA,QAAO,SAAS,KAAK,IAAI;AACjE,YAAI,UAAU;AACV,cAAI,KAAK,MAAM,IAAI,SAAS,SAAS;AACrC,mBAAS7E,KAAI,OAAO,MAAM,SAAS,GAAGA,MAAK,GAAGA;AAC1C,eAAG,KAAK,OAAO,MAAMA,IAAG,OAAO,OAAO,KAAKA,GAAE,CAAC;AAClD,cAAI,SAAS,MAAM;AACf,gBAAI,QAAQ,GAAG,IAAI,QAAQ,SAAS,IAAI,EAAE;AAC1C,eAAG,YAAY,SAAS,MAAM,SAAS,IAAI,MAAM,OAAO,KAAK,SAAS,MAAM,KAAK,CAAC;AAAA,UACrF,OACI;AACD,eAAG,OAAO,SAAS,MAAM,SAAS,EAAE;AAAA,UACvC;AACD,mBAAS,EAAE;AAAA,QACd;AACD,eAAO;AAAA,MACV;AAAA,IACJ;AACD,WAAO;AAAA,EACX;AAKe,MAAI,UAAU,OAAO,QAAG;AAItB,MAAI,UAAU,WAAW,QAAG;AAIrB,MAAI,UAAU,wCAAwC,QAAG;AAIxD,MAAI,UAAU,MAAM,QAAG;AAIxB,MAAI,UAAU,wCAAwC,QAAG;AAIxD,MAAI,UAAU,MAAM,QAAG;AAuBhD,WAAS,kBAAkB4Y,SAAQ,UAAU,WAAW,MAAM,eAAe;AACzE,WAAO,IAAI,UAAUA,SAAQ,CAAC,OAAOjX,QAAO,OAAO,QAAQ;AACvD,UAAI,QAAQ,oBAAoB,WAAW,SAASA,MAAK,IAAI;AAC7D,UAAI,KAAK,MAAM,GAAG,OAAO,OAAO,GAAG;AACnC,UAAI,SAAS,GAAG,IAAI,QAAQ,KAAK,GAAGsC,SAAQ,OAAO,WAAY,GAAE,WAAWA,UAAS,aAAaA,QAAO,UAAU,KAAK;AACxH,UAAI,CAAC;AACD,eAAO;AACX,SAAG,KAAKA,QAAO,QAAQ;AACvB,UAAI,SAAS,GAAG,IAAI,QAAQ,QAAQ,CAAC,EAAE;AACvC,UAAI,UAAU,OAAO,QAAQ,YAAY,QAAQ,GAAG,KAAK,QAAQ,CAAC,MAC7D,CAAC,iBAAiB,cAActC,QAAO,MAAM;AAC9C,WAAG,KAAK,QAAQ,CAAC;AACrB,aAAO;AAAA,IACf,CAAK;AAAA,EACL;AASA,WAAS,uBAAuBiX,SAAQ,UAAU,WAAW,MAAM;AAC/D,WAAO,IAAI,UAAUA,SAAQ,CAAC,OAAOjX,QAAO,OAAO,QAAQ;AACvD,UAAI,SAAS,MAAM,IAAI,QAAQ,KAAK;AACpC,UAAI,QAAQ,oBAAoB,WAAW,SAASA,MAAK,IAAI;AAC7D,UAAI,CAAC,OAAO,KAAK,EAAE,EAAE,eAAe,OAAO,MAAM,EAAE,GAAG,OAAO,WAAW,EAAE,GAAG,QAAQ;AACjF,eAAO;AACX,aAAO,MAAM,GACR,OAAO,OAAO,GAAG,EACjB,aAAa,OAAO,OAAO,UAAU,KAAK;AAAA,IACvD,CAAK;AAAA,EACL;;;;;;;;;;;;;AC3Ma,MAAI8U,MAAE,OAAO,IAAI,eAAe,GAAEjW,MAAE,OAAO,IAAI,cAAc,GAAED,MAAE,OAAO,IAAI,gBAAgB,GAAEsY,MAAE,OAAO,IAAI,mBAAmB,GAAE,IAAE,OAAO,IAAI,gBAAgB,GAAEC,MAAE,OAAO,IAAI,gBAAgB,GAAEjC,MAAE,OAAO,IAAI,eAAe,GAAE0B,MAAE,OAAO,IAAI,mBAAmB,GAAE/Q,MAAE,OAAO,IAAI,gBAAgB,GAAE,IAAE,OAAO,IAAI,YAAY,GAAEnC,MAAE,OAAO,IAAI,YAAY,GAAEiR,MAAE,OAAO;AAAS,WAASyC,IAAEjZ,IAAE;AAAC,QAAG,SAAOA,MAAG,aAAW,OAAOA;AAAE,aAAO;AAAK,IAAAA,KAAEwW,OAAGxW,GAAEwW,QAAIxW,GAAE;AAAc,WAAM,eAAa,OAAOA,KAAEA,KAAE;AAAA,EAAI;AAC1e,MAAIkZ,MAAE,EAAC,WAAU,WAAU;AAAC,WAAM;AAAA,EAAE,GAAE,oBAAmB,WAAU;AAAA,EAAA,GAAG,qBAAoB,WAAU;AAAA,EAAA,GAAG,iBAAgB,WAAU;AAAA,EAAA,EAAE,GAAEC,MAAE,OAAO,QAAOC,MAAE,CAAA;AAAG,WAASC,IAAErZ,IAAEC,IAAE4D,IAAE;AAAC,SAAK,QAAM7D;AAAE,SAAK,UAAQC;AAAE,SAAK,OAAKmZ;AAAE,SAAK,UAAQvV,MAAGqV;AAAAA,EAAC;AAACG,MAAE,UAAU,mBAAiB;AACnQA,MAAE,UAAU,WAAS,SAASrZ,IAAEC,IAAE;AAAC,QAAG,aAAW,OAAOD,MAAG,eAAa,OAAOA,MAAG,QAAMA;AAAE,YAAM,MAAM,uHAAuH;AAAE,SAAK,QAAQ,gBAAgB,MAAKA,IAAEC,IAAE,UAAU;AAAA,EAAC;AAAEoZ,MAAE,UAAU,cAAY,SAASrZ,IAAE;AAAC,SAAK,QAAQ,mBAAmB,MAAKA,IAAE,aAAa;AAAA,EAAC;AAAE,WAASsZ,MAAG;AAAA,EAAA;AAAEA,MAAE,YAAUD,IAAE;AAAU,WAASE,IAAEvZ,IAAEC,IAAE4D,IAAE;AAAC,SAAK,QAAM7D;AAAE,SAAK,UAAQC;AAAE,SAAK,OAAKmZ;AAAE,SAAK,UAAQvV,MAAGqV;AAAAA,EAAC;AAAC,MAAIM,MAAED,IAAE,YAAU,IAAID;AACrfE,MAAE,cAAYD;AAAEJ,MAAEK,KAAEH,IAAE,SAAS;AAAEG,MAAE,uBAAqB;AAAG,MAAIC,MAAE,MAAM,SAAQC,MAAE,OAAO,UAAU,gBAAeC,MAAE,EAAC,SAAQ,KAAI,GAAEC,MAAE,EAAC,KAAI,MAAG,KAAI,MAAG,QAAO,MAAG,UAAS,KAAE;AACxK,WAASC,IAAE7Z,IAAEC,IAAE4D,IAAE;AAAC,QAAIpC,IAAE,IAAE,CAAA,GAAG8U,KAAE,MAAK9O,KAAE;AAAK,QAAG,QAAMxH;AAAE,WAAIwB,MAAK,WAASxB,GAAE,QAAMwH,KAAExH,GAAE,MAAK,WAASA,GAAE,QAAMsW,KAAE,KAAGtW,GAAE,MAAKA;AAAEyZ,YAAE,KAAKzZ,IAAEwB,EAAC,KAAG,CAACmY,IAAE,eAAenY,EAAC,MAAI,EAAEA,MAAGxB,GAAEwB;AAAI,QAAIqY,KAAE,UAAU,SAAO;AAAE,QAAG,MAAIA;AAAE,QAAE,WAASjW;AAAA,aAAU,IAAEiW,IAAE;AAAC,eAAQja,KAAE,MAAMia,EAAC,GAAEhY,KAAE,GAAEA,KAAEgY,IAAEhY;AAAI,QAAAjC,GAAEiC,MAAG,UAAUA,KAAE;AAAG,QAAE,WAASjC;AAAA,IAAC;AAAC,QAAGG,MAAGA,GAAE;AAAa,WAAIyB,MAAKqY,KAAE9Z,GAAE,cAAa8Z;AAAE,mBAAS,EAAErY,QAAK,EAAEA,MAAGqY,GAAErY;AAAI,WAAM,EAAC,UAASkV,KAAE,MAAK3W,IAAE,KAAIuW,IAAE,KAAI9O,IAAE,OAAM,GAAE,QAAOkS,IAAE,QAAO;AAAA,EAAC;AAC7a,WAASI,IAAE/Z,IAAEC,IAAE;AAAC,WAAM,EAAC,UAAS0W,KAAE,MAAK3W,GAAE,MAAK,KAAIC,IAAE,KAAID,GAAE,KAAI,OAAMA,GAAE,OAAM,QAAOA,GAAE,OAAM;AAAA,EAAC;AAAC,WAASga,IAAEha,IAAE;AAAC,WAAM,aAAW,OAAOA,MAAG,SAAOA,MAAGA,GAAE,aAAW2W;AAAAA,EAAC;AAAC,WAAS,OAAO3W,IAAE;AAAC,QAAIC,KAAE,EAAC,KAAI,MAAK,KAAI,KAAI;AAAE,WAAM,MAAID,GAAE,QAAQ,SAAQ,SAASA,IAAE;AAAC,aAAOC,GAAED;AAAA,IAAE,CAAC;AAAA,EAAC;AAAC,MAAIia,MAAE;AAAO,WAASC,IAAEla,IAAEC,IAAE;AAAC,WAAM,aAAW,OAAOD,MAAG,SAAOA,MAAG,QAAMA,GAAE,MAAI,OAAO,KAAGA,GAAE,GAAG,IAAEC,GAAE,SAAS,EAAE;AAAA,EAAC;AAC/W,WAASka,IAAEna,IAAEC,IAAE4D,IAAEpC,IAAE,GAAE;AAAC,QAAI8U,KAAE,OAAOvW;AAAE,QAAG,gBAAcuW,MAAG,cAAYA;AAAE,MAAAvW,KAAE;AAAK,QAAIyH,KAAE;AAAG,QAAG,SAAOzH;AAAE,MAAAyH,KAAE;AAAA;AAAQ,cAAO8O,IAAC;AAAA,QAAE,KAAK;AAAA,QAAS,KAAK;AAAS,UAAA9O,KAAE;AAAG;AAAA,QAAM,KAAK;AAAS,kBAAOzH,GAAE,UAAU;AAAA,YAAA,KAAK2W;AAAAA,YAAE,KAAKjW;AAAE,cAAA+G,KAAE;AAAA,UAAE;AAAA,MAAC;AAAC,QAAGA;AAAE,aAAOA,KAAEzH,IAAE,IAAE,EAAEyH,EAAC,GAAEzH,KAAE,OAAKyB,KAAE,MAAIyY,IAAEzS,IAAE,CAAC,IAAEhG,IAAEgY,IAAE,CAAC,KAAG5V,KAAE,IAAG,QAAM7D,OAAI6D,KAAE7D,GAAE,QAAQia,KAAE,KAAK,IAAE,MAAKE,IAAE,GAAEla,IAAE4D,IAAE,IAAG,SAAS7D,IAAE;AAAC,eAAOA;AAAA,MAAC,CAAC,KAAG,QAAM,MAAIga,IAAE,CAAC,MAAI,IAAED,IAAE,GAAElW,MAAG,CAAC,EAAE,OAAK4D,MAAGA,GAAE,QAAM,EAAE,MAAI,MAAI,KAAG,EAAE,KAAK,QAAQwS,KAAE,KAAK,IAAE,OAAKja,EAAC,IAAGC,GAAE,KAAK,CAAC,IAAG;AAAE,IAAAwH,KAAE;AAAE,IAAAhG,KAAE,OAAKA,KAAE,MAAIA,KAAE;AAAI,QAAGgY,IAAEzZ,EAAC;AAAE,eAAQ8Z,KAAE,GAAEA,KAAE9Z,GAAE,QAAO8Z,MAAI;AAAC,QAAAvD,KACrfvW,GAAE8Z;AAAG,YAAIja,KAAE4B,KAAEyY,IAAE3D,IAAEuD,EAAC;AAAE,QAAArS,MAAG0S,IAAE5D,IAAEtW,IAAE4D,IAAEhE,IAAE,CAAC;AAAA,MAAC;AAAA,aAASA,KAAEoZ,IAAEjZ,EAAC,GAAE,eAAa,OAAOH;AAAE,WAAIG,KAAEH,GAAE,KAAKG,EAAC,GAAE8Z,KAAE,GAAE,EAAEvD,KAAEvW,GAAE,QAAQ;AAAM,QAAAuW,KAAEA,GAAE,OAAM1W,KAAE4B,KAAEyY,IAAE3D,IAAEuD,IAAG,GAAErS,MAAG0S,IAAE5D,IAAEtW,IAAE4D,IAAEhE,IAAE,CAAC;AAAA,aAAU,aAAW0W;AAAE,YAAMtW,KAAE,OAAOD,EAAC,GAAE,MAAM,qDAAmD,sBAAoBC,KAAE,uBAAqB,OAAO,KAAKD,EAAC,EAAE,KAAK,IAAI,IAAE,MAAIC,MAAG,2EAA2E;AAAE,WAAOwH;AAAA,EAAC;AACzZ,WAAS2S,IAAEpa,IAAEC,IAAE4D,IAAE;AAAC,QAAG,QAAM7D;AAAE,aAAOA;AAAE,QAAIyB,KAAE,CAAE,GAAC,IAAE;AAAE0Y,QAAEna,IAAEyB,IAAE,IAAG,IAAG,SAASzB,IAAE;AAAC,aAAOC,GAAE,KAAK4D,IAAE7D,IAAE,GAAG;AAAA,IAAC,CAAC;AAAE,WAAOyB;AAAA,EAAC;AAAC,WAAS4Y,IAAEra,IAAE;AAAC,QAAG,OAAKA,GAAE,SAAQ;AAAC,UAAIC,KAAED,GAAE;AAAQ,MAAAC,KAAEA,GAAG;AAAC,MAAAA,GAAE,KAAK,SAASA,IAAE;AAAC,YAAG,MAAID,GAAE,WAAS,OAAKA,GAAE;AAAQ,UAAAA,GAAE,UAAQ,GAAEA,GAAE,UAAQC;AAAA,MAAC,GAAE,SAASA,IAAE;AAAC,YAAG,MAAID,GAAE,WAAS,OAAKA,GAAE;AAAQ,UAAAA,GAAE,UAAQ,GAAEA,GAAE,UAAQC;AAAA,MAAC,CAAC;AAAE,aAAKD,GAAE,YAAUA,GAAE,UAAQ,GAAEA,GAAE,UAAQC;AAAA,IAAE;AAAC,QAAG,MAAID,GAAE;AAAQ,aAAOA,GAAE,QAAQ;AAAQ,UAAMA,GAAE;AAAA,EAAQ;AAC5Z,MAAIsa,MAAE,EAAC,SAAQ,KAAI,GAAEC,MAAE,EAAC,YAAW,KAAI,GAAEC,MAAE,EAAC,wBAAuBF,KAAE,yBAAwBC,KAAE,mBAAkBZ,IAAC;AAAE,uBAAA,WAAiB,EAAC,KAAIS,KAAE,SAAQ,SAASpa,IAAEC,IAAE4D,IAAE;AAACuW,QAAEpa,IAAE,WAAU;AAAC,MAAAC,GAAE,MAAM,MAAK,SAAS;AAAA,IAAC,GAAE4D,EAAC;AAAA,EAAC,GAAE,OAAM,SAAS7D,IAAE;AAAC,QAAIC,KAAE;AAAEma,QAAEpa,IAAE,WAAU;AAAC,MAAAC;AAAA,IAAG,CAAC;AAAE,WAAOA;AAAA,EAAC,GAAE,SAAQ,SAASD,IAAE;AAAC,WAAOoa,IAAEpa,IAAE,SAASA,IAAE;AAAC,aAAOA;AAAA,IAAC,CAAC,KAAG,CAAE;AAAA,EAAA,GAAE,MAAK,SAASA,IAAE;AAAC,QAAG,CAACga,IAAEha,EAAC;AAAE,YAAM,MAAM,uEAAuE;AAAE,WAAOA;AAAA,EAAC,EAAC;AAAE,uBAAA,YAAkBqZ;AAAkB,uBAAA,WAAC5Y;AACne,uBAAA,WAAiB;uCAAwB8Y;AAAoB,uBAAA,aAACR;kCAAmBrR;AAA4D,uBAAA,qDAAC8S;AAC1H,uBAAA,eAAC,SAASxa,IAAEC,IAAE4D,IAAE;AAAC,QAAG,SAAO7D,MAAG,WAASA;AAAE,YAAM,MAAM,mFAAiFA,KAAE,GAAG;AAAE,QAAIyB,KAAE0X,IAAE,CAAA,GAAGnZ,GAAE,KAAK,GAAE,IAAEA,GAAE,KAAIuW,KAAEvW,GAAE,KAAIyH,KAAEzH,GAAE;AAAO,QAAG,QAAMC,IAAE;AAAC,iBAASA,GAAE,QAAMsW,KAAEtW,GAAE,KAAIwH,KAAEkS,IAAE;AAAS,iBAAS1Z,GAAE,QAAM,IAAE,KAAGA,GAAE;AAAK,UAAGD,GAAE,QAAMA,GAAE,KAAK;AAAa,YAAI8Z,KAAE9Z,GAAE,KAAK;AAAa,WAAIH,MAAKI;AAAEyZ,YAAE,KAAKzZ,IAAEJ,EAAC,KAAG,CAAC+Z,IAAE,eAAe/Z,EAAC,MAAI4B,GAAE5B,MAAG,WAASI,GAAEJ,OAAI,WAASia,KAAEA,GAAEja,MAAGI,GAAEJ;AAAA,IAAG;AAAC,QAAIA,KAAE,UAAU,SAAO;AAAE,QAAG,MAAIA;AAAE,MAAA4B,GAAE,WAASoC;AAAA,aAAU,IAAEhE,IAAE;AAAC,MAAAia,KAAE,MAAMja,EAAC;AACtf,eAAQiC,KAAE,GAAEA,KAAEjC,IAAEiC;AAAI,QAAAgY,GAAEhY,MAAG,UAAUA,KAAE;AAAG,MAAAL,GAAE,WAASqY;AAAA,IAAC;AAAC,WAAM,EAAC,UAASnD,KAAE,MAAK3W,GAAE,MAAK,KAAI,GAAE,KAAIuW,IAAE,OAAM9U,IAAE,QAAOgG,GAAC;AAAA,EAAC;AAAE,uBAAA,gBAAsB,SAASzH,IAAE;AAAC,IAAAA,KAAE,EAAC,UAAS+W,KAAE,eAAc/W,IAAE,gBAAeA,IAAE,cAAa,GAAE,UAAS,MAAK,UAAS,MAAK,eAAc,MAAK,aAAY,KAAI;AAAE,IAAAA,GAAE,WAAS,EAAC,UAASgZ,KAAE,UAAShZ,GAAC;AAAE,WAAOA,GAAE,WAASA;AAAA,EAAC;AAAuB,uBAAA,gBAAC6Z;uCAAwB,SAAS7Z,IAAE;AAAC,QAAIC,KAAE4Z,IAAE,KAAK,MAAK7Z,EAAC;AAAE,IAAAC,GAAE,OAAKD;AAAE,WAAOC;AAAA,EAAC;AAAmB,uBAAA,YAAC,WAAU;AAAC,WAAM,EAAC,SAAQ,KAAI;AAAA,EAAC;AAC9d,uBAAA,aAAmB,SAASD,IAAE;AAAC,WAAM,EAAC,UAASyY,KAAE,QAAOzY,GAAC;AAAA,EAAC;AAAE,uBAAA,iBAAuBga;AAAE,uBAAA,OAAa,SAASha,IAAE;AAAC,WAAM,EAAC,UAASuF,KAAE,UAAS,EAAC,SAAQ,IAAG,SAAQvF,GAAC,GAAE,OAAMqa,IAAC;AAAA,EAAC;AAAE,uBAAA,OAAa,SAASra,IAAEC,IAAE;AAAC,WAAM,EAAC,UAAS,GAAE,MAAKD,IAAE,SAAQ,WAASC,KAAE,OAAKA,GAAC;AAAA,EAAC;AAAE,uBAAA,kBAAwB,SAASD,IAAE;AAAC,QAAIC,KAAEsa,IAAE;AAAWA,QAAE,aAAW,CAAA;AAAG,QAAG;AAAC,MAAAva,GAAG;AAAA,IAAA,UAAC;AAAQua,UAAE,aAAWta;AAAA,IAAC;AAAA,EAAC;AAAsB,uBAAA,eAAC,WAAU;AAAC,UAAM,MAAM,0DAA0D;AAAA,EAAE;AACvb,uBAAA,cAAC,SAASD,IAAEC,IAAE;AAAC,WAAOqa,IAAE,QAAQ,YAAYta,IAAEC,EAAC;AAAA,EAAC;AAAoB,uBAAA,aAAC,SAASD,IAAE;AAAC,WAAOsa,IAAE,QAAQ,WAAWta,EAAC;AAAA,EAAC;AAAuB,uBAAA,gBAAC,WAAU;AAAA,EAAG;AAAA,uBAAA,mBAAyB,SAASA,IAAE;AAAC,WAAOsa,IAAE,QAAQ,iBAAiBta,EAAC;AAAA,EAAC;AAAmB,uBAAA,YAAC,SAASA,IAAEC,IAAE;AAAC,WAAOqa,IAAE,QAAQ,UAAUta,IAAEC,EAAC;AAAA,EAAC;AAAe,uBAAA,QAAC,WAAU;AAAC,WAAOqa,IAAE,QAAQ,MAAK;AAAA,EAAE;AAA6B,uBAAA,sBAAC,SAASta,IAAEC,IAAE4D,IAAE;AAAC,WAAOyW,IAAE,QAAQ,oBAAoBta,IAAEC,IAAE4D,EAAC;AAAA,EAAC;AAC7b,uBAAA,qBAA2B,SAAS7D,IAAEC,IAAE;AAAC,WAAOqa,IAAE,QAAQ,mBAAmBta,IAAEC,EAAC;AAAA,EAAC;AAAyB,uBAAA,kBAAC,SAASD,IAAEC,IAAE;AAAC,WAAOqa,IAAE,QAAQ,gBAAgBta,IAAEC,EAAC;AAAA,EAAC;iCAAkB,SAASD,IAAEC,IAAE;AAAC,WAAOqa,IAAE,QAAQ,QAAQta,IAAEC,EAAC;AAAA,EAAC;AAAoB,uBAAA,aAAC,SAASD,IAAEC,IAAE4D,IAAE;AAAC,WAAOyW,IAAE,QAAQ,WAAWta,IAAEC,IAAE4D,EAAC;AAAA,EAAC;gCAAiB,SAAS7D,IAAE;AAAC,WAAOsa,IAAE,QAAQ,OAAOta,EAAC;AAAA,EAAC;AAAkB,uBAAA,WAAC,SAASA,IAAE;AAAC,WAAOsa,IAAE,QAAQ,SAASta,EAAC;AAAA,EAAC;AAA8B,uBAAA,uBAAC,SAASA,IAAEC,IAAE4D,IAAE;AAAC,WAAOyW,IAAE,QAAQ,qBAAqBta,IAAEC,IAAE4D,EAAC;AAAA,EAAC;AAC/e,uBAAA,gBAAsB,WAAU;AAAC,WAAOyW,IAAE,QAAQ,cAAe;AAAA,EAAA;AAAE,uBAAA,UAAgB;;ACvBxC;AACzC,MAAApF,QAAA,UAAiB3N;AAAAA,IAGnB;AAAA;;;;;;;;;;;;;;;;;;;;ACGa,aAAS1H,GAAEG,IAAEC,IAAE;AAAC,UAAI,IAAED,GAAE;AAAO,MAAAA,GAAE,KAAKC,EAAC;AAAE;AAAE,eAAK,IAAE,KAAG;AAAC,cAAIwB,KAAE,IAAE,MAAI,GAAEoC,KAAE7D,GAAEyB;AAAG,cAAG,IAAEqY,GAAEjW,IAAE5D,EAAC;AAAE,YAAAD,GAAEyB,MAAGxB,IAAED,GAAE,KAAG6D,IAAE,IAAEpC;AAAA;AAAO,kBAAM;AAAA,QAAC;AAAA,IAAC;AAAC,aAASgG,GAAEzH,IAAE;AAAC,aAAO,MAAIA,GAAE,SAAO,OAAKA,GAAE;AAAA,IAAE;AAAC,aAASuW,GAAEvW,IAAE;AAAC,UAAG,MAAIA,GAAE;AAAO,eAAO;AAAK,UAAIC,KAAED,GAAE,IAAG,IAAEA,GAAE;AAAM,UAAG,MAAIC,IAAE;AAAC,QAAAD,GAAE,KAAG;AAAE;AAAE,mBAAQyB,KAAE,GAAEoC,KAAE7D,GAAE,QAAO0H,KAAE7D,OAAI,GAAEpC,KAAEiG,MAAG;AAAC,gBAAI5F,KAAE,KAAGL,KAAE,KAAG,GAAE0X,KAAEnZ,GAAE8B,KAAGpB,KAAEoB,KAAE,GAAEwD,KAAEtF,GAAEU;AAAG,gBAAG,IAAEoZ,GAAEX,IAAE,CAAC;AAAE,cAAAzY,KAAEmD,MAAG,IAAEiW,GAAExU,IAAE6T,EAAC,KAAGnZ,GAAEyB,MAAG6D,IAAEtF,GAAEU,MAAG,GAAEe,KAAEf,OAAIV,GAAEyB,MAAG0X,IAAEnZ,GAAE8B,MAAG,GAAEL,KAAEK;AAAA,qBAAWpB,KAAEmD,MAAG,IAAEiW,GAAExU,IAAE,CAAC;AAAE,cAAAtF,GAAEyB,MAAG6D,IAAEtF,GAAEU,MAAG,GAAEe,KAAEf;AAAA;AAAO,oBAAM;AAAA,UAAC;AAAA,MAAC;AAAC,aAAOT;AAAA,IAAC;AAC3c,aAAS6Z,GAAE9Z,IAAEC,IAAE;AAAC,UAAI,IAAED,GAAE,YAAUC,GAAE;AAAU,aAAO,MAAI,IAAE,IAAED,GAAE,KAAGC,GAAE;AAAA,IAAE;AAAC,QAAG,aAAW,OAAO,eAAa,eAAa,OAAO,YAAY,KAAI;AAAC,UAAI0W,KAAE;AAAY,MAAAa,SAAA,eAAqB,WAAU;AAAC,eAAOb,GAAE,IAAK;AAAA,MAAA;AAAA,IAAC,OAAK;AAAC,UAAIlW,KAAE,MAAKsY,KAAEtY,GAAE;AAAM,MAAA+W,SAAqB,eAAA,WAAU;AAAC,eAAO/W,GAAE,IAAG,IAAGsY;AAAA,MAAC;AAAA,IAAC;AAAC,QAAI9V,KAAE,CAAA,GAAG+V,KAAE,CAAE,GAACjC,KAAE,GAAE0B,KAAE,MAAKlT,KAAE,GAAEiR,KAAE,OAAGyC,KAAE,OAAGC,KAAE,OAAGE,KAAE,eAAa,OAAO,aAAW,aAAW,MAAKC,KAAE,eAAa,OAAO,eAAa,eAAa,MAAKC,KAAE,gBAAc,OAAO,eAAa,eAAa;AAC/d,oBAAc,OAAO,aAAW,WAAS,UAAU,cAAY,WAAS,UAAU,WAAW,kBAAgB,UAAU,WAAW,eAAe,KAAK,UAAU,UAAU;AAAE,aAASC,GAAEvZ,IAAE;AAAC,eAAQC,KAAEwH,GAAEuR,EAAC,GAAE,SAAO/Y,MAAG;AAAC,YAAG,SAAOA,GAAE;AAAS,UAAAsW,GAAEyC,EAAC;AAAA,iBAAU/Y,GAAE,aAAWD;AAAE,UAAAuW,GAAEyC,EAAC,GAAE/Y,GAAE,YAAUA,GAAE,gBAAeJ,GAAEoD,IAAEhD,EAAC;AAAA;AAAO;AAAM,QAAAA,KAAEwH,GAAEuR,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAASQ,GAAExZ,IAAE;AAAC,MAAAkZ,KAAE;AAAG,MAAAK,GAAEvZ,EAAC;AAAE,UAAG,CAACiZ;AAAE,YAAG,SAAOxR,GAAExE,EAAC;AAAE,UAAAgW,KAAE,MAAGQ,GAAEC,EAAC;AAAA,aAAM;AAAC,cAAIzZ,KAAEwH,GAAEuR,EAAC;AAAE,mBAAO/Y,MAAG0Z,GAAEH,IAAEvZ,GAAE,YAAUD,EAAC;AAAA,QAAC;AAAA,IAAC;AACra,aAAS0Z,GAAE1Z,IAAEC,IAAE;AAAC,MAAAgZ,KAAE;AAAG,MAAAC,OAAIA,KAAE,OAAGG,GAAEO,EAAC,GAAEA,KAAE;AAAI,MAAApD,KAAE;AAAG,UAAI,IAAEjR;AAAE,UAAG;AAAC,QAAAgU,GAAEtZ,EAAC;AAAE,aAAIwY,KAAEhR,GAAExE,EAAC,GAAE,SAAOwV,OAAI,EAAEA,GAAE,iBAAexY,OAAID,MAAG,CAAC6Z,GAAC,MAAK;AAAC,cAAIpY,KAAEgX,GAAE;AAAS,cAAG,eAAa,OAAOhX,IAAE;AAAC,YAAAgX,GAAE,WAAS;AAAK,YAAAlT,KAAEkT,GAAE;AAAc,gBAAI5U,KAAEpC,GAAEgX,GAAE,kBAAgBxY,EAAC;AAAE,YAAAA,KAAEuX,SAAQ,aAAY;AAAG,2BAAa,OAAO3T,KAAE4U,GAAE,WAAS5U,KAAE4U,OAAIhR,GAAExE,EAAC,KAAGsT,GAAEtT,EAAC;AAAE,YAAAsW,GAAEtZ,EAAC;AAAA,UAAC;AAAM,YAAAsW,GAAEtT,EAAC;AAAE,UAAAwV,KAAEhR,GAAExE,EAAC;AAAA,QAAC;AAAC,YAAG,SAAOwV;AAAE,cAAI/Q,KAAE;AAAA,aAAO;AAAC,cAAI5F,KAAE2F,GAAEuR,EAAC;AAAE,mBAAOlX,MAAG6X,GAAEH,IAAE1X,GAAE,YAAU7B,EAAC;AAAE,UAAAyH,KAAE;AAAA,QAAE;AAAC,eAAOA;AAAA,MAAC,UAAC;AAAQ,QAAA+Q,KAAE,MAAKlT,KAAE,GAAEiR,KAAE;AAAA,MAAE;AAAA,IAAC;AAAC,QAAIuD,KAAE,OAAGC,KAAE,MAAKJ,KAAE,IAAGK,KAAE,GAAEC,KAAE;AACtc,aAASL,KAAG;AAAC,aAAOrC,SAAQ,aAAc,IAAC0C,KAAED,KAAE,QAAG;AAAA,IAAE;AAAC,aAASE,KAAG;AAAC,UAAG,SAAOH,IAAE;AAAC,YAAIha,KAAEwX,SAAQ;AAAe,QAAA0C,KAAEla;AAAE,YAAIC,KAAE;AAAG,YAAG;AAAC,UAAAA,KAAE+Z,GAAE,MAAGha,EAAC;AAAA,QAAC,UAAC;AAAQ,UAAAC,KAAEma,QAAKL,KAAE,OAAGC,KAAE;AAAA,QAAK;AAAA,MAAC;AAAM,QAAAD,KAAE;AAAA,IAAE;AAAC,QAAIK;AAAE,QAAG,eAAa,OAAOd;AAAE,MAAAc,KAAE,WAAU;AAAC,QAAAd,GAAEa,EAAC;AAAA,MAAC;AAAA,aAAU,gBAAc,OAAO,gBAAe;AAAC,UAAIE,KAAE,IAAI,kBAAeC,KAAED,GAAE;AAAM,MAAAA,GAAE,MAAM,YAAUF;AAAE,MAAAC,KAAE,WAAU;AAAC,QAAAE,GAAE,YAAY,IAAI;AAAA,MAAC;AAAA,IAAC;AAAM,MAAAF,KAAE,WAAU;AAAC,QAAAhB,GAAEe,IAAE,CAAC;AAAA,MAAC;AAAE,aAASV,GAAEzZ,IAAE;AAAC,MAAAga,KAAEha;AAAE,MAAA+Z,OAAIA,KAAE,MAAGK,GAAG;AAAA,IAAC;AAAC,aAAST,GAAE3Z,IAAEC,IAAE;AAAC,MAAA2Z,KAAER,GAAE,WAAU;AAAC,QAAApZ,GAAEwX,SAAQ,aAAY,CAAE;AAAA,MAAC,GAAEvX,EAAC;AAAA,IAAC;AAC5d,IAAAuX,SAA8B,wBAAA;AAAE,IAAAA,SAAmC,6BAAA;AAAE,IAAAA,SAA6B,uBAAA;AAAE,IAAAA,SAAgC,0BAAA;AAAE,IAAAA,SAA2B,qBAAA;AAAK,IAAAA,SAAsC,gCAAA;AAAE,IAAAA,SAAgC,0BAAA,SAASxX,IAAE;AAAC,MAAAA,GAAE,WAAS;AAAA,IAAI;AAAE,IAAAwX,sCAAmC,WAAU;AAAC,MAAAyB,MAAGzC,OAAIyC,KAAE,MAAGQ,GAAEC,EAAC;AAAA,IAAE;AAC1U,IAAAlC,SAAgC,0BAAA,SAASxX,IAAE;AAAC,UAAEA,MAAG,MAAIA,KAAE,QAAQ,MAAM,iHAAiH,IAAEia,KAAE,IAAEja,KAAE,KAAK,MAAM,MAAIA,EAAC,IAAE;AAAA,IAAC;AAAE,IAAAwX,SAAA,mCAAyC,WAAU;AAAC,aAAOjS;AAAA,IAAC;AAAE,IAAAiS,SAAA,gCAAsC,WAAU;AAAC,aAAO/P,GAAExE,EAAC;AAAA,IAAC;AAAE,IAAAuU,yBAAsB,SAASxX,IAAE;AAAC,cAAOuF,IAAG;AAAA,QAAA,KAAK;AAAA,QAAE,KAAK;AAAA,QAAE,KAAK;AAAE,cAAItF,KAAE;AAAE;AAAA,QAAM;AAAQ,UAAAA,KAAEsF;AAAA,MAAC;AAAC,UAAI,IAAEA;AAAE,MAAAA,KAAEtF;AAAE,UAAG;AAAC,eAAOD,GAAG;AAAA,MAAA,UAAC;AAAQ,QAAAuF,KAAE;AAAA,MAAC;AAAA,IAAC;AAAE,IAAAiS,SAAA,0BAAgC,WAAU;AAAA,IAAA;AAC7f,IAAAA,SAA8B,wBAAA,WAAU;AAAA,IAAA;AAAG,IAAAA,SAAiC,2BAAA,SAASxX,IAAEC,IAAE;AAAC,cAAOD,IAAC;AAAA,QAAE,KAAK;AAAA,QAAE,KAAK;AAAA,QAAE,KAAK;AAAA,QAAE,KAAK;AAAA,QAAE,KAAK;AAAE;AAAA,QAAM;AAAQ,UAAAA,KAAE;AAAA,MAAC;AAAC,UAAI,IAAEuF;AAAE,MAAAA,KAAEvF;AAAE,UAAG;AAAC,eAAOC,GAAG;AAAA,MAAA,UAAC;AAAQ,QAAAsF,KAAE;AAAA,MAAC;AAAA,IAAC;AAChM,IAAAiS,SAAkC,4BAAA,SAASxX,IAAEC,IAAE,GAAE;AAAC,UAAIwB,KAAE+V,SAAQ,aAAY;AAAG,mBAAW,OAAO,KAAG,SAAO,KAAG,IAAE,EAAE,OAAM,IAAE,aAAW,OAAO,KAAG,IAAE,IAAE/V,KAAE,IAAEA,MAAG,IAAEA;AAAE,cAAOzB,IAAG;AAAA,QAAA,KAAK;AAAE,cAAI6D,KAAE;AAAG;AAAA,QAAM,KAAK;AAAE,UAAAA,KAAE;AAAI;AAAA,QAAM,KAAK;AAAE,UAAAA,KAAE;AAAW;AAAA,QAAM,KAAK;AAAE,UAAAA,KAAE;AAAI;AAAA,QAAM;AAAQ,UAAAA,KAAE;AAAA,MAAG;AAAC,MAAAA,KAAE,IAAEA;AAAE,MAAA7D,KAAE,EAAC,IAAG+W,MAAI,UAAS9W,IAAE,eAAcD,IAAE,WAAU,GAAE,gBAAe6D,IAAE,WAAU,GAAE;AAAE,UAAEpC,MAAGzB,GAAE,YAAU,GAAEH,GAAEmZ,IAAEhZ,EAAC,GAAE,SAAOyH,GAAExE,EAAC,KAAGjD,OAAIyH,GAAEuR,EAAC,MAAIE,MAAGG,GAAEO,EAAC,GAAEA,KAAE,MAAIV,KAAE,MAAGS,GAAEH,IAAE,IAAE/X,EAAC,OAAKzB,GAAE,YAAU6D,IAAEhE,GAAEoD,IAAEjD,EAAC,GAAEiZ,MAAGzC,OAAIyC,KAAE,MAAGQ,GAAEC,EAAC;AAAI,aAAO1Z;AAAA,IAAC;AACne,IAAAwX,SAAA,uBAA6BqC;AAAE,IAAArC,SAAA,wBAA8B,SAASxX,IAAE;AAAC,UAAIC,KAAEsF;AAAE,aAAO,WAAU;AAAC,YAAI,IAAEA;AAAE,QAAAA,KAAEtF;AAAE,YAAG;AAAC,iBAAOD,GAAE,MAAM,MAAK,SAAS;AAAA,QAAC,UAAC;AAAQ,UAAAuF,KAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA;;AChBpH;AACzC,MAAA2P,QAAA,UAAiB3N;AAAAA,IAGnB;AAAA;;;;;;;;;;ACMa,MAAI,KAAGA,MAAAA,SAAiB,KAAGsO;AAAqB,WAAS,EAAE7V,IAAE;AAAC,aAAQC,KAAE,2DAAyDD,IAAE,IAAE,GAAE,IAAE,UAAU,QAAO;AAAI,MAAAC,MAAG,aAAW,mBAAmB,UAAU,EAAE;AAAE,WAAM,2BAAyBD,KAAE,aAAWC,KAAE;AAAA,EAAgH;AAAC,MAAI,KAAG,oBAAI,OAAI,KAAG;AAAG,WAAS,GAAGD,IAAEC,IAAE;AAAC,OAAGD,IAAEC,EAAC;AAAE,OAAGD,KAAE,WAAUC,EAAC;AAAA,EAAC;AACxb,WAAS,GAAGD,IAAEC,IAAE;AAAC,OAAGD,MAAGC;AAAE,SAAID,KAAE,GAAEA,KAAEC,GAAE,QAAOD;AAAI,SAAG,IAAIC,GAAED,GAAE;AAAA,EAAC;AAC5D,MAAI,KAAG,EAAE,gBAAc,OAAO,UAAQ,gBAAc,OAAO,OAAO,YAAU,gBAAc,OAAO,OAAO,SAAS,gBAAe,KAAG,OAAO,UAAU,gBAAe,KAAG,+VAA8V,KACpgB,CAAA,GAAG,KAAG,CAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAG,GAAG,KAAK,IAAGA,EAAC;AAAE,aAAM;AAAG,QAAG,GAAG,KAAK,IAAGA,EAAC;AAAE,aAAM;AAAG,QAAG,GAAG,KAAKA,EAAC;AAAE,aAAO,GAAGA,MAAG;AAAG,OAAGA,MAAG;AAAG,WAAM;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAG,SAAO,KAAG,MAAI,EAAE;AAAK,aAAM;AAAG,YAAO,OAAOxB,IAAC;AAAA,MAAE,KAAK;AAAA,MAAW,KAAK;AAAS,eAAM;AAAA,MAAG,KAAK;AAAU,YAAGwB;AAAE,iBAAM;AAAG,YAAG,SAAO;AAAE,iBAAM,CAAC,EAAE;AAAgB,QAAAzB,KAAEA,GAAE,YAAW,EAAG,MAAM,GAAE,CAAC;AAAE,eAAM,YAAUA,MAAG,YAAUA;AAAA,MAAE;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AACzX,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAG,SAAOxB,MAAG,gBAAc,OAAOA,MAAG,GAAGD,IAAEC,IAAE,GAAEwB,EAAC;AAAE,aAAM;AAAG,QAAGA;AAAE,aAAM;AAAG,QAAG,SAAO;AAAE,cAAO,EAAE,MAAI;AAAA,QAAE,KAAK;AAAE,iBAAM,CAACxB;AAAA,QAAE,KAAK;AAAE,iBAAM,UAAKA;AAAA,QAAE,KAAK;AAAE,iBAAO,MAAMA,EAAC;AAAA,QAAE,KAAK;AAAE,iBAAO,MAAMA,EAAC,KAAG,IAAEA;AAAA,MAAC;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,EAAED,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAE;AAAC,SAAK,kBAAgB,MAAI7Z,MAAG,MAAIA,MAAG,MAAIA;AAAE,SAAK,gBAAcwB;AAAE,SAAK,qBAAmBoC;AAAE,SAAK,kBAAgB;AAAE,SAAK,eAAa7D;AAAE,SAAK,OAAKC;AAAE,SAAK,cAAYJ;AAAE,SAAK,oBAAkBia;AAAA,EAAC;AAAC,MAAItD,MAAE;AACnb,yIAAuI,MAAM,GAAG,EAAE,QAAQ,SAASxW,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,IAAE,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,CAAC,iBAAgB,gBAAgB,GAAE,CAAC,aAAY,OAAO,GAAE,CAAC,WAAU,KAAK,GAAE,CAAC,aAAY,YAAY,CAAC,EAAE,QAAQ,SAASA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAGwW,QAAEvW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGD,GAAE,IAAG,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,mBAAkB,aAAY,cAAa,OAAO,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,GAAE,eAAc,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAC3e,GAAC,eAAc,6BAA4B,aAAY,eAAe,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,IAAE,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,gPAA8O,MAAM,GAAG,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,GAAE,YAAa,GAAC,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AACzb,GAAC,WAAU,YAAW,SAAQ,UAAU,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,MAAGA,IAAE,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,WAAU,UAAU,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,IAAE,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,QAAO,QAAO,QAAO,MAAM,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,IAAE,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,WAAU,OAAO,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,GAAE,eAAc,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,MAAI,KAAG;AAAgB,WAAS,GAAGA,IAAE;AAAC,WAAOA,GAAE,GAAG,YAAW;AAAA,EAAE;AACxZ,4jCAA0jC,MAAM,GAAG,EAAE,QAAQ,SAASA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAA,MAAQ;AAAA,MACzmC;AAAA,IAAE;AAAEwW,QAAEvW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGD,IAAE,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,6EAA2E,MAAM,GAAG,EAAE,QAAQ,SAASA,IAAE;AAAC,QAAIC,KAAED,GAAE,QAAQ,IAAG,EAAE;AAAEwW,QAAEvW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGD,IAAE,gCAA+B,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,YAAW,YAAW,WAAW,EAAE,QAAQ,SAASA,IAAE;AAAC,QAAIC,KAAED,GAAE,QAAQ,IAAG,EAAE;AAAEwW,QAAEvW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGD,IAAE,wCAAuC,OAAG,KAAE;AAAA,EAAC,CAAC;AAAE,GAAC,YAAW,aAAa,EAAE,QAAQ,SAASA,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,GAAE,YAAa,GAAC,MAAK,OAAG,KAAE;AAAA,EAAC,CAAC;AACndwW,MAAE,YAAU,IAAI,EAAE,aAAY,GAAE,OAAG,cAAa,gCAA+B,MAAG,KAAE;AAAE,GAAC,OAAM,QAAO,UAAS,YAAY,EAAE,QAAQ,SAASxW,IAAE;AAACwW,QAAExW,MAAG,IAAI,EAAEA,IAAE,GAAE,OAAGA,GAAE,YAAW,GAAG,MAAK,MAAG,IAAE;AAAA,EAAC,CAAC;AAC7L,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE2S,IAAE,eAAevW,EAAC,IAAEuW,IAAEvW,MAAG;AAAK,QAAG,SAAO4D,KAAE,MAAIA,GAAE,OAAKpC,MAAG,EAAE,IAAExB,GAAE,WAAS,QAAMA,GAAE,MAAI,QAAMA,GAAE,MAAI,QAAMA,GAAE,MAAI,QAAMA,GAAE;AAAG,SAAGA,IAAE,GAAE4D,IAAEpC,EAAC,MAAI,IAAE,OAAMA,MAAG,SAAOoC,KAAE,GAAG5D,EAAC,MAAI,SAAO,IAAED,GAAE,gBAAgBC,EAAC,IAAED,GAAE,aAAaC,IAAE,KAAG,CAAC,KAAG4D,GAAE,kBAAgB7D,GAAE6D,GAAE,gBAAc,SAAO,IAAE,MAAIA,GAAE,OAAK,QAAG,KAAG,KAAG5D,KAAE4D,GAAE,eAAcpC,KAAEoC,GAAE,oBAAmB,SAAO,IAAE7D,GAAE,gBAAgBC,EAAC,KAAG4D,KAAEA,GAAE,MAAK,IAAE,MAAIA,MAAG,MAAIA,MAAG,SAAK,IAAE,KAAG,KAAG,GAAEpC,KAAEzB,GAAE,eAAeyB,IAAExB,IAAE,CAAC,IAAED,GAAE,aAAaC,IAAE,CAAC;AAAA,EAAG;AACjd,MAAI,KAAG,GAAG,oDAAmD,KAAG,OAAO,IAAI,eAAe,GAAE,KAAG,OAAO,IAAI,cAAc,GAAE,KAAG,OAAO,IAAI,gBAAgB,GAAE,KAAG,OAAO,IAAI,mBAAmB,GAAE,KAAG,OAAO,IAAI,gBAAgB,GAAE,KAAG,OAAO,IAAI,gBAAgB,GAAE,KAAG,OAAO,IAAI,eAAe,GAAE,KAAG,OAAO,IAAI,mBAAmB,GAAE,KAAG,OAAO,IAAI,gBAAgB,GAAE,KAAG,OAAO,IAAI,qBAAqB,GAAE,KAAG,OAAO,IAAI,YAAY,GAAE,KAAG,OAAO,IAAI,YAAY;AAC1b,MAAI,KAAG,OAAO,IAAI,iBAAiB;AAAiG,MAAI,KAAG,OAAO;AAAS,WAAS,GAAGD,IAAE;AAAC,QAAG,SAAOA,MAAG,aAAW,OAAOA;AAAE,aAAO;AAAK,IAAAA,KAAE,MAAIA,GAAE,OAAKA,GAAE;AAAc,WAAM,eAAa,OAAOA,KAAEA,KAAE;AAAA,EAAI;AAAC,MAAIiZ,MAAE,OAAO,QAAO;AAAG,WAAS,GAAGjZ,IAAE;AAAC,QAAG,WAAS;AAAG,UAAG;AAAC,cAAM,MAAO;AAAA,MAAC,SAAO,GAAN;AAAS,YAAIC,KAAE,EAAE,MAAM,KAAI,EAAG,MAAM,cAAc;AAAE,aAAGA,MAAGA,GAAE,MAAI;AAAA,MAAE;AAAC,WAAM,OAAK,KAAGD;AAAA,EAAC;AAAC,MAAI,KAAG;AACzb,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAG,CAACD,MAAG;AAAG,aAAM;AAAG,SAAG;AAAG,QAAI,IAAE,MAAM;AAAkB,UAAM,oBAAkB;AAAO,QAAG;AAAC,UAAGC;AAAE,YAAGA,KAAE,WAAU;AAAC,gBAAM,MAAO;AAAA,QAAC,GAAE,OAAO,eAAeA,GAAE,WAAU,SAAQ,EAAC,KAAI,WAAU;AAAC,gBAAM,MAAO;AAAA,QAAC,EAAC,CAAC,GAAE,aAAW,OAAO,WAAS,QAAQ,WAAU;AAAC,cAAG;AAAC,oBAAQ,UAAUA,IAAE,CAAA,CAAE;AAAA,UAAC,SAAO0W,IAAN;AAAS,gBAAIlV,KAAEkV;AAAA,UAAC;AAAC,kBAAQ,UAAU3W,IAAE,IAAGC,EAAC;AAAA,QAAC,OAAK;AAAC,cAAG;AAAC,YAAAA,GAAE;UAAM,SAAO0W,IAAN;AAAS,YAAAlV,KAAEkV;AAAA,UAAC;AAAC,UAAA3W,GAAE,KAAKC,GAAE,SAAS;AAAA,QAAC;AAAA,WAAK;AAAC,YAAG;AAAC,gBAAM,MAAO;AAAA,QAAC,SAAO0W,IAAN;AAAS,UAAAlV,KAAEkV;AAAA,QAAC;AAAC,QAAA3W,GAAG;AAAA,MAAA;AAAA,IAAC,SAAO2W,IAAN;AAAS,UAAGA,MAAGlV,MAAG,aAAW,OAAOkV,GAAE,OAAM;AAAC,iBAAQ9S,KAAE8S,GAAE,MAAM,MAAM,IAAI,GACvf9W,KAAE4B,GAAE,MAAM,MAAM,IAAI,GAAEqY,KAAEjW,GAAE,SAAO,GAAE4D,KAAE5H,GAAE,SAAO,GAAE,KAAGia,MAAG,KAAGrS,MAAG5D,GAAEiW,QAAKja,GAAE4H;AAAI,UAAAA;AAAI,eAAK,KAAGqS,MAAG,KAAGrS,IAAEqS,MAAIrS;AAAI,cAAG5D,GAAEiW,QAAKja,GAAE4H,KAAG;AAAC,gBAAG,MAAIqS,MAAG,MAAIrS,IAAE;AAAC;AAAG,oBAAGqS,MAAIrS,MAAI,IAAEA,MAAG5D,GAAEiW,QAAKja,GAAE4H,KAAG;AAAC,sBAAI8O,KAAE,OAAK1S,GAAEiW,IAAG,QAAQ,YAAW,MAAM;AAAE,kBAAA9Z,GAAE,eAAauW,GAAE,SAAS,aAAa,MAAIA,KAAEA,GAAE,QAAQ,eAAcvW,GAAE,WAAW;AAAG,yBAAOuW;AAAA,gBAAC;AAAA,qBAAO,KAAGuD,MAAG,KAAGrS;AAAA,YAAE;AAAC;AAAA,UAAK;AAAA,MAAC;AAAA,IAAC,UAAC;AAAQ,WAAG,OAAG,MAAM,oBAAkB;AAAA,IAAC;AAAC,YAAOzH,KAAEA,KAAEA,GAAE,eAAaA,GAAE,OAAK,MAAI,GAAGA,EAAC,IAAE;AAAA,EAAE;AAC9Z,WAAS,GAAGA,IAAE;AAAC,YAAOA,GAAE,KAAG;AAAA,MAAE,KAAK;AAAE,eAAO,GAAGA,GAAE,IAAI;AAAA,MAAE,KAAK;AAAG,eAAO,GAAG,MAAM;AAAA,MAAE,KAAK;AAAG,eAAO,GAAG,UAAU;AAAA,MAAE,KAAK;AAAG,eAAO,GAAG,cAAc;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAG,eAAOA,KAAE,GAAGA,GAAE,MAAK,KAAE,GAAEA;AAAA,MAAE,KAAK;AAAG,eAAOA,KAAE,GAAGA,GAAE,KAAK,QAAO,KAAE,GAAEA;AAAA,MAAE,KAAK;AAAE,eAAOA,KAAE,GAAGA,GAAE,MAAK,IAAE,GAAEA;AAAA,MAAE;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AACxR,WAAS,GAAGA,IAAE;AAAC,QAAG,QAAMA;AAAE,aAAO;AAAK,QAAG,eAAa,OAAOA;AAAE,aAAOA,GAAE,eAAaA,GAAE,QAAM;AAAK,QAAG,aAAW,OAAOA;AAAE,aAAOA;AAAE,YAAOA,IAAC;AAAA,MAAE,KAAK;AAAG,eAAM;AAAA,MAAW,KAAK;AAAG,eAAM;AAAA,MAAS,KAAK;AAAG,eAAM;AAAA,MAAW,KAAK;AAAG,eAAM;AAAA,MAAa,KAAK;AAAG,eAAM;AAAA,MAAW,KAAK;AAAG,eAAM;AAAA,IAAc;AAAC,QAAG,aAAW,OAAOA;AAAE,cAAOA,GAAE,UAAQ;AAAA,QAAE,KAAK;AAAG,kBAAOA,GAAE,eAAa,aAAW;AAAA,QAAY,KAAK;AAAG,kBAAOA,GAAE,SAAS,eAAa,aAAW;AAAA,QAAY,KAAK;AAAG,cAAIC,KAAED,GAAE;AAAO,UAAAA,KAAEA,GAAE;AAAY,UAAAA,OAAIA,KAAEC,GAAE,eAClfA,GAAE,QAAM,IAAGD,KAAE,OAAKA,KAAE,gBAAcA,KAAE,MAAI;AAAc,iBAAOA;AAAA,QAAE,KAAK;AAAG,iBAAOC,KAAED,GAAE,eAAa,MAAK,SAAOC,KAAEA,KAAE,GAAGD,GAAE,IAAI,KAAG;AAAA,QAAO,KAAK;AAAG,UAAAC,KAAED,GAAE;AAAS,UAAAA,KAAEA,GAAE;AAAM,cAAG;AAAC,mBAAO,GAAGA,GAAEC,EAAC,CAAC;AAAA,UAAC,SAAO,GAAN;AAAA;MAAU;AAAC,WAAO;AAAA,EAAI;AAC3M,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAK,YAAOA,GAAE,KAAG;AAAA,MAAE,KAAK;AAAG,eAAM;AAAA,MAAQ,KAAK;AAAE,gBAAOC,GAAE,eAAa,aAAW;AAAA,MAAY,KAAK;AAAG,gBAAOA,GAAE,SAAS,eAAa,aAAW;AAAA,MAAY,KAAK;AAAG,eAAM;AAAA,MAAqB,KAAK;AAAG,eAAOD,KAAEC,GAAE,QAAOD,KAAEA,GAAE,eAAaA,GAAE,QAAM,IAAGC,GAAE,gBAAc,OAAKD,KAAE,gBAAcA,KAAE,MAAI;AAAA,MAAc,KAAK;AAAE,eAAM;AAAA,MAAW,KAAK;AAAE,eAAOC;AAAA,MAAE,KAAK;AAAE,eAAM;AAAA,MAAS,KAAK;AAAE,eAAM;AAAA,MAAO,KAAK;AAAE,eAAM;AAAA,MAAO,KAAK;AAAG,eAAO,GAAGA,EAAC;AAAA,MAAE,KAAK;AAAE,eAAOA,OAAI,KAAG,eAAa;AAAA,MAAO,KAAK;AAAG,eAAM;AAAA,MACtf,KAAK;AAAG,eAAM;AAAA,MAAW,KAAK;AAAG,eAAM;AAAA,MAAQ,KAAK;AAAG,eAAM;AAAA,MAAW,KAAK;AAAG,eAAM;AAAA,MAAe,KAAK;AAAG,eAAM;AAAA,MAAgB,KAAK;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAG,YAAG,eAAa,OAAOA;AAAE,iBAAOA,GAAE,eAAaA,GAAE,QAAM;AAAK,YAAG,aAAW,OAAOA;AAAE,iBAAOA;AAAA,IAAC;AAAC,WAAO;AAAA,EAAI;AAAC,WAAS,GAAGD,IAAE;AAAC,YAAO,OAAOA,IAAG;AAAA,MAAA,KAAK;AAAA,MAAU,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAY,eAAOA;AAAA,MAAE,KAAK;AAAS,eAAOA;AAAA,MAAE;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AACra,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAK,YAAOA,KAAEA,GAAE,aAAW,YAAUA,GAAE,YAAa,MAAG,eAAaC,MAAG,YAAUA;AAAA,EAAE;AAC1G,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAE,GAAGD,EAAC,IAAE,YAAU,SAAQ,IAAE,OAAO,yBAAyBA,GAAE,YAAY,WAAUC,EAAC,GAAEwB,KAAE,KAAGzB,GAAEC;AAAG,QAAG,CAACD,GAAE,eAAeC,EAAC,KAAG,gBAAc,OAAO,KAAG,eAAa,OAAO,EAAE,OAAK,eAAa,OAAO,EAAE,KAAI;AAAC,UAAI4D,KAAE,EAAE,KAAIhE,KAAE,EAAE;AAAI,aAAO,eAAeG,IAAEC,IAAE,EAAC,cAAa,MAAG,KAAI,WAAU;AAAC,eAAO4D,GAAE,KAAK,IAAI;AAAA,MAAC,GAAE,KAAI,SAAS7D,IAAE;AAAC,QAAAyB,KAAE,KAAGzB;AAAE,QAAAH,GAAE,KAAK,MAAKG,EAAC;AAAA,MAAC,EAAC,CAAC;AAAE,aAAO,eAAeA,IAAEC,IAAE,EAAC,YAAW,EAAE,WAAU,CAAC;AAAE,aAAM,EAAC,UAAS,WAAU;AAAC,eAAOwB;AAAA,MAAC,GAAE,UAAS,SAASzB,IAAE;AAAC,QAAAyB,KAAE,KAAGzB;AAAA,MAAC,GAAE,cAAa,WAAU;AAAC,QAAAA,GAAE,gBACxf;AAAK,eAAOA,GAAEC;AAAA,MAAE,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,IAAAA,GAAE,kBAAgBA,GAAE,gBAAc,GAAGA,EAAC;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAG,CAACA;AAAE,aAAM;AAAG,QAAIC,KAAED,GAAE;AAAc,QAAG,CAACC;AAAE,aAAM;AAAG,QAAI,IAAEA,GAAE,SAAQ;AAAG,QAAIwB,KAAE;AAAG,IAAAzB,OAAIyB,KAAE,GAAGzB,EAAC,IAAEA,GAAE,UAAQ,SAAO,UAAQA,GAAE;AAAO,IAAAA,KAAEyB;AAAE,WAAOzB,OAAI,KAAGC,GAAE,SAASD,EAAC,GAAE,QAAI;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,IAAAA,KAAEA,OAAI,gBAAc,OAAO,WAAS,WAAS;AAAQ,QAAG,gBAAc,OAAOA;AAAE,aAAO;AAAK,QAAG;AAAC,aAAOA,GAAE,iBAAeA,GAAE;AAAA,IAAI,SAAOC,IAAN;AAAS,aAAOD,GAAE;AAAA,IAAI;AAAA,EAAC;AACpa,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAQ,WAAOgZ,IAAE,IAAGhZ,IAAE,EAAC,gBAAe,QAAO,cAAa,QAAO,OAAM,QAAO,SAAQ,QAAM,IAAE,IAAED,GAAE,cAAc,eAAc,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE,QAAMA,GAAE,eAAa,KAAGA,GAAE,cAAawB,KAAE,QAAMxB,GAAE,UAAQA,GAAE,UAAQA,GAAE;AAAe,QAAE,GAAG,QAAMA,GAAE,QAAMA,GAAE,QAAM,CAAC;AAAE,IAAAD,GAAE,gBAAc,EAAC,gBAAeyB,IAAE,cAAa,GAAE,YAAW,eAAaxB,GAAE,QAAM,YAAUA,GAAE,OAAK,QAAMA,GAAE,UAAQ,QAAMA,GAAE,MAAK;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAQ,YAAMA,MAAG,GAAGD,IAAE,WAAUC,IAAE,KAAE;AAAA,EAAC;AAC9d,WAAS,GAAGD,IAAEC,IAAE;AAAC,OAAGD,IAAEC,EAAC;AAAE,QAAI,IAAE,GAAGA,GAAE,KAAK,GAAEwB,KAAExB,GAAE;AAAK,QAAG,QAAM;AAAE,UAAG,aAAWwB,IAAE;AAAC,YAAG,MAAI,KAAG,OAAKzB,GAAE,SAAOA,GAAE,SAAO;AAAE,UAAAA,GAAE,QAAM,KAAG;AAAA,MAAC;AAAM,QAAAA,GAAE,UAAQ,KAAG,MAAIA,GAAE,QAAM,KAAG;AAAA,aAAW,aAAWyB,MAAG,YAAUA,IAAE;AAAC,MAAAzB,GAAE,gBAAgB,OAAO;AAAE;AAAA,IAAM;AAAC,IAAAC,GAAE,eAAe,OAAO,IAAE,GAAGD,IAAEC,GAAE,MAAK,CAAC,IAAEA,GAAE,eAAe,cAAc,KAAG,GAAGD,IAAEC,GAAE,MAAK,GAAGA,GAAE,YAAY,CAAC;AAAE,YAAMA,GAAE,WAAS,QAAMA,GAAE,mBAAiBD,GAAE,iBAAe,CAAC,CAACC,GAAE;AAAA,EAAe;AACla,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAGA,GAAE,eAAe,OAAO,KAAGA,GAAE,eAAe,cAAc,GAAE;AAAC,UAAIwB,KAAExB,GAAE;AAAK,UAAG,EAAE,aAAWwB,MAAG,YAAUA,MAAG,WAASxB,GAAE,SAAO,SAAOA,GAAE;AAAO;AAAO,MAAAA,KAAE,KAAGD,GAAE,cAAc;AAAa,WAAGC,OAAID,GAAE,UAAQA,GAAE,QAAMC;AAAG,MAAAD,GAAE,eAAaC;AAAA,IAAC;AAAC,QAAED,GAAE;AAAK,WAAK,MAAIA,GAAE,OAAK;AAAI,IAAAA,GAAE,iBAAe,CAAC,CAACA,GAAE,cAAc;AAAe,WAAK,MAAIA,GAAE,OAAK;AAAA,EAAE;AACzV,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAG,aAAWA,MAAG,GAAGD,GAAE,aAAa,MAAIA;AAAE,cAAM,IAAEA,GAAE,eAAa,KAAGA,GAAE,cAAc,eAAaA,GAAE,iBAAe,KAAG,MAAIA,GAAE,eAAa,KAAG;AAAA,EAAE;AAAC,MAAI,KAAG,MAAM;AAC7K,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAzB,KAAEA,GAAE;AAAQ,QAAGC,IAAE;AAAC,MAAAA,KAAE,CAAE;AAAC,eAAQ4D,KAAE,GAAEA,KAAE,EAAE,QAAOA;AAAI,QAAA5D,GAAE,MAAI,EAAE4D,OAAI;AAAG,WAAI,IAAE,GAAE,IAAE7D,GAAE,QAAO;AAAI,QAAA6D,KAAE5D,GAAE,eAAe,MAAID,GAAE,GAAG,KAAK,GAAEA,GAAE,GAAG,aAAW6D,OAAI7D,GAAE,GAAG,WAAS6D,KAAGA,MAAGpC,OAAIzB,GAAE,GAAG,kBAAgB;AAAA,IAAG,OAAK;AAAC,UAAE,KAAG,GAAG,CAAC;AAAE,MAAAC,KAAE;AAAK,WAAI4D,KAAE,GAAEA,KAAE7D,GAAE,QAAO6D,MAAI;AAAC,YAAG7D,GAAE6D,IAAG,UAAQ,GAAE;AAAC,UAAA7D,GAAE6D,IAAG,WAAS;AAAG,UAAApC,OAAIzB,GAAE6D,IAAG,kBAAgB;AAAI;AAAA,QAAM;AAAC,iBAAO5D,MAAGD,GAAE6D,IAAG,aAAW5D,KAAED,GAAE6D;AAAA,MAAG;AAAC,eAAO5D,OAAIA,GAAE,WAAS;AAAA,IAAG;AAAA,EAAC;AACxY,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG,QAAMA,GAAE;AAAwB,YAAM,MAAM,EAAE,EAAE,CAAC;AAAE,WAAOgZ,IAAE,IAAGhZ,IAAE,EAAC,OAAM,QAAO,cAAa,QAAO,UAAS,KAAGD,GAAE,cAAc,aAAY,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAM,QAAG,QAAM,GAAE;AAAC,UAAEA,GAAE;AAAS,MAAAA,KAAEA,GAAE;AAAa,UAAG,QAAM,GAAE;AAAC,YAAG,QAAMA;AAAE,gBAAM,MAAM,EAAE,EAAE,CAAC;AAAE,YAAG,GAAG,CAAC,GAAE;AAAC,cAAG,IAAE,EAAE;AAAO,kBAAM,MAAM,EAAE,EAAE,CAAC;AAAE,cAAE,EAAE;AAAA,QAAE;AAAC,QAAAA,KAAE;AAAA,MAAC;AAAC,cAAMA,OAAIA,KAAE;AAAI,UAAEA;AAAA,IAAC;AAAC,IAAAD,GAAE,gBAAc,EAAC,cAAa,GAAG,CAAC,EAAC;AAAA,EAAC;AACnY,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE,GAAGA,GAAE,KAAK,GAAEwB,KAAE,GAAGxB,GAAE,YAAY;AAAE,YAAM,MAAI,IAAE,KAAG,GAAE,MAAID,GAAE,UAAQA,GAAE,QAAM,IAAG,QAAMC,GAAE,gBAAcD,GAAE,iBAAe,MAAIA,GAAE,eAAa;AAAI,YAAMyB,OAAIzB,GAAE,eAAa,KAAGyB;AAAA,EAAE;AAAC,WAAS,GAAGzB,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAY,IAAAC,OAAID,GAAE,cAAc,gBAAc,OAAKC,MAAG,SAAOA,OAAID,GAAE,QAAMC;AAAA,EAAE;AAAC,WAAS,GAAGD,IAAE;AAAC,YAAOA,IAAG;AAAA,MAAA,KAAK;AAAM,eAAM;AAAA,MAA6B,KAAK;AAAO,eAAM;AAAA,MAAqC;AAAQ,eAAM;AAAA,IAA8B;AAAA,EAAC;AAC7c,WAAS,GAAGA,IAAEC,IAAE;AAAC,WAAO,QAAMD,MAAG,mCAAiCA,KAAE,GAAGC,EAAC,IAAE,iCAA+BD,MAAG,oBAAkBC,KAAE,iCAA+BD;AAAA,EAAC;AAChK,MAAI,IAAG,KAAG,SAASA,IAAE;AAAC,WAAM,gBAAc,OAAO,SAAO,MAAM,0BAAwB,SAASC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,YAAM,wBAAwB,WAAU;AAAC,eAAO7D,GAAEC,IAAE,GAAEwB,IAAEoC,EAAC;AAAA,MAAC,CAAC;AAAA,IAAC,IAAE7D;AAAA,EAAC,EAAE,SAASA,IAAEC,IAAE;AAAC,QAAG,iCAA+BD,GAAE,gBAAc,eAAcA;AAAE,MAAAA,GAAE,YAAUC;AAAA,SAAM;AAAC,WAAG,MAAI,SAAS,cAAc,KAAK;AAAE,SAAG,YAAU,UAAQA,GAAE,QAAS,EAAC,SAAQ,IAAG;AAAS,WAAIA,KAAE,GAAG,YAAWD,GAAE;AAAY,QAAAA,GAAE,YAAYA,GAAE,UAAU;AAAE,aAAKC,GAAE;AAAY,QAAAD,GAAE,YAAYC,GAAE,UAAU;AAAA,IAAC;AAAA,EAAC,CAAC;AACpd,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAGA,IAAE;AAAC,UAAI,IAAED,GAAE;AAAW,UAAG,KAAG,MAAIA,GAAE,aAAW,MAAI,EAAE,UAAS;AAAC,UAAE,YAAUC;AAAE;AAAA,MAAM;AAAA,IAAC;AAAC,IAAAD,GAAE,cAAYC;AAAA,EAAC;AACtH,MAAI,KAAG;AAAA,IAAC,yBAAwB;AAAA,IAAG,aAAY;AAAA,IAAG,mBAAkB;AAAA,IAAG,kBAAiB;AAAA,IAAG,kBAAiB;AAAA,IAAG,SAAQ;AAAA,IAAG,cAAa;AAAA,IAAG,iBAAgB;AAAA,IAAG,aAAY;AAAA,IAAG,SAAQ;AAAA,IAAG,MAAK;AAAA,IAAG,UAAS;AAAA,IAAG,cAAa;AAAA,IAAG,YAAW;AAAA,IAAG,cAAa;AAAA,IAAG,WAAU;AAAA,IAAG,UAAS;AAAA,IAAG,SAAQ;AAAA,IAAG,YAAW;AAAA,IAAG,aAAY;AAAA,IAAG,cAAa;AAAA,IAAG,YAAW;AAAA,IAAG,eAAc;AAAA,IAAG,gBAAe;AAAA,IAAG,iBAAgB;AAAA,IAAG,YAAW;AAAA,IAAG,WAAU;AAAA,IAAG,YAAW;AAAA,IAAG,SAAQ;AAAA,IAAG,OAAM;AAAA,IAAG,SAAQ;AAAA,IAAG,SAAQ;AAAA,IAAG,QAAO;AAAA,IAAG,QAAO;AAAA,IAClf,MAAK;AAAA,IAAG,aAAY;AAAA,IAAG,cAAa;AAAA,IAAG,aAAY;AAAA,IAAG,iBAAgB;AAAA,IAAG,kBAAiB;AAAA,IAAG,kBAAiB;AAAA,IAAG,eAAc;AAAA,IAAG,aAAY;AAAA,EAAE,GAAE,KAAG,CAAC,UAAS,MAAK,OAAM,GAAG;AAAE,SAAO,KAAK,EAAE,EAAE,QAAQ,SAASD,IAAE;AAAC,OAAG,QAAQ,SAASC,IAAE;AAAC,MAAAA,KAAEA,KAAED,GAAE,OAAO,CAAC,EAAE,YAAW,IAAGA,GAAE,UAAU,CAAC;AAAE,SAAGC,MAAG,GAAGD;AAAA,IAAE,CAAC;AAAA,EAAC,CAAC;AAAE,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,WAAO,QAAMA,MAAG,cAAY,OAAOA,MAAG,OAAKA,KAAE,KAAG,KAAG,aAAW,OAAOA,MAAG,MAAIA,MAAG,GAAG,eAAeD,EAAC,KAAG,GAAGA,OAAI,KAAGC,IAAG,KAAI,IAAGA,KAAE;AAAA,EAAI;AACzb,WAAS,GAAGD,IAAEC,IAAE;AAAC,IAAAD,KAAEA,GAAE;AAAM,aAAQ,KAAKC;AAAE,UAAGA,GAAE,eAAe,CAAC,GAAE;AAAC,YAAIwB,KAAE,MAAI,EAAE,QAAQ,IAAI,GAAEoC,KAAE,GAAG,GAAE5D,GAAE,IAAGwB,EAAC;AAAE,oBAAU,MAAI,IAAE;AAAY,QAAAA,KAAEzB,GAAE,YAAY,GAAE6D,EAAC,IAAE7D,GAAE,KAAG6D;AAAA,MAAC;AAAA,EAAC;AAAC,MAAI,KAAGoV,IAAE,EAAC,UAAS,KAAE,GAAE,EAAC,MAAK,MAAG,MAAK,MAAG,IAAG,MAAG,KAAI,MAAG,OAAM,MAAG,IAAG,MAAG,KAAI,MAAG,OAAM,MAAG,QAAO,MAAG,MAAK,MAAG,MAAK,MAAG,OAAM,MAAG,QAAO,MAAG,OAAM,MAAG,KAAI,KAAE,CAAC;AACrT,WAAS,GAAGjZ,IAAEC,IAAE;AAAC,QAAGA,IAAE;AAAC,UAAG,GAAGD,QAAK,QAAMC,GAAE,YAAU,QAAMA,GAAE;AAAyB,cAAM,MAAM,EAAE,KAAID,EAAC,CAAC;AAAE,UAAG,QAAMC,GAAE,yBAAwB;AAAC,YAAG,QAAMA,GAAE;AAAS,gBAAM,MAAM,EAAE,EAAE,CAAC;AAAE,YAAG,aAAW,OAAOA,GAAE,2BAAyB,EAAE,YAAWA,GAAE;AAAyB,gBAAM,MAAM,EAAE,EAAE,CAAC;AAAA,MAAE;AAAC,UAAG,QAAMA,GAAE,SAAO,aAAW,OAAOA,GAAE;AAAM,cAAM,MAAM,EAAE,EAAE,CAAC;AAAA,IAAE;AAAA,EAAC;AAClW,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG,OAAKD,GAAE,QAAQ,GAAG;AAAE,aAAM,aAAW,OAAOC,GAAE;AAAG,YAAOD,IAAC;AAAA,MAAE,KAAK;AAAA,MAAiB,KAAK;AAAA,MAAgB,KAAK;AAAA,MAAY,KAAK;AAAA,MAAgB,KAAK;AAAA,MAAgB,KAAK;AAAA,MAAmB,KAAK;AAAA,MAAiB,KAAK;AAAgB,eAAM;AAAA,MAAG;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AAAC,MAAI,KAAG;AAAK,WAAS,GAAGA,IAAE;AAAC,IAAAA,KAAEA,GAAE,UAAQA,GAAE,cAAY;AAAO,IAAAA,GAAE,4BAA0BA,KAAEA,GAAE;AAAyB,WAAO,MAAIA,GAAE,WAASA,GAAE,aAAWA;AAAA,EAAC;AAAC,MAAI,KAAG,MAAK,KAAG,MAAK,KAAG;AACpc,WAAS,GAAGA,IAAE;AAAC,QAAGA,KAAE,GAAGA,EAAC,GAAE;AAAC,UAAG,eAAa,OAAO;AAAG,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAIC,KAAED,GAAE;AAAU,MAAAC,OAAIA,KAAE,GAAGA,EAAC,GAAE,GAAGD,GAAE,WAAUA,GAAE,MAAKC,EAAC;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,SAAG,KAAG,GAAG,KAAKA,EAAC,IAAE,KAAG,CAACA,EAAC,IAAE,KAAGA;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,QAAG,IAAG;AAAC,UAAIA,KAAE,IAAGC,KAAE;AAAG,WAAG,KAAG;AAAK,SAAGD,EAAC;AAAE,UAAGC;AAAE,aAAID,KAAE,GAAEA,KAAEC,GAAE,QAAOD;AAAI,aAAGC,GAAED,GAAE;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,WAAOD,GAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAA,EAAA;AAAE,MAAI,KAAG;AAAG,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAG;AAAG,aAAOD,GAAEC,IAAE,CAAC;AAAE,SAAG;AAAG,QAAG;AAAC,aAAO,GAAGD,IAAEC,IAAE,CAAC;AAAA,IAAC,UAAC;AAAQ,UAAG,KAAG,OAAG,SAAO,MAAI,SAAO;AAAG,WAAE,GAAG,GAAI;AAAA,IAAA;AAAA,EAAC;AAChb,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE;AAAU,QAAG,SAAO;AAAE,aAAO;AAAK,QAAIyB,KAAE,GAAG,CAAC;AAAE,QAAG,SAAOA;AAAE,aAAO;AAAK,QAAEA,GAAExB;AAAG;AAAE,cAAOA;QAAG,KAAK;AAAA,QAAU,KAAK;AAAA,QAAiB,KAAK;AAAA,QAAgB,KAAK;AAAA,QAAuB,KAAK;AAAA,QAAc,KAAK;AAAA,QAAqB,KAAK;AAAA,QAAc,KAAK;AAAA,QAAqB,KAAK;AAAA,QAAY,KAAK;AAAA,QAAmB,KAAK;AAAe,WAACwB,KAAE,CAACA,GAAE,cAAYzB,KAAEA,GAAE,MAAKyB,KAAE,EAAE,aAAWzB,MAAG,YAAUA,MAAG,aAAWA,MAAG,eAAaA;AAAI,UAAAA,KAAE,CAACyB;AAAE,gBAAM;AAAA,QAAE;AAAQ,UAAAzB,KAAE;AAAA,MAAE;AAAC,QAAGA;AAAE,aAAO;AAAK,QAAG,KAAG,eACze,OAAO;AAAE,YAAM,MAAM,EAAE,KAAIC,IAAE,OAAO,CAAC,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,MAAI,KAAG;AAAG,MAAG;AAAG,QAAG;AAAC,UAAI,KAAG;AAAG,aAAO,eAAe,IAAG,WAAU,EAAC,KAAI,WAAU;AAAC,aAAG;AAAA,MAAE,EAAC,CAAC;AAAE,aAAO,iBAAiB,QAAO,IAAG,EAAE;AAAE,aAAO,oBAAoB,QAAO,IAAG,EAAE;AAAA,IAAC,SAAOD,IAAN;AAAS,WAAG;AAAA,IAAE;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAErS,IAAE8O,IAAE;AAAC,QAAII,KAAE,MAAM,UAAU,MAAM,KAAK,WAAU,CAAC;AAAE,QAAG;AAAC,MAAA1W,GAAE,MAAM,GAAE0W,EAAC;AAAA,IAAC,SAAO7U,IAAN;AAAS,WAAK,QAAQA,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,KAAG,OAAG,KAAG,MAAK,KAAG,OAAG,KAAG,MAAK,KAAG,EAAC,SAAQ,SAAS9B,IAAE;AAAC,SAAG;AAAG,SAAGA;AAAA,EAAC,EAAC;AAAE,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAErS,IAAE8O,IAAE;AAAC,SAAG;AAAG,SAAG;AAAK,OAAG,MAAM,IAAG,SAAS;AAAA,EAAC;AACze,WAAS,GAAGvW,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAErS,IAAE8O,IAAE;AAAC,OAAG,MAAM,MAAK,SAAS;AAAE,QAAG,IAAG;AAAC,UAAG,IAAG;AAAC,YAAII,KAAE;AAAG,aAAG;AAAG,aAAG;AAAA,MAAI;AAAM,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAK,KAAG,MAAG,KAAGA;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAG3W,IAAE;AAAC,QAAIC,KAAED,IAAE,IAAEA;AAAE,QAAGA,GAAE;AAAU,aAAKC,GAAE;AAAQ,QAAAA,KAAEA,GAAE;AAAA,SAAW;AAAC,MAAAD,KAAEC;AAAE;AAAG,QAAAA,KAAED,IAAE,OAAKC,GAAE,QAAM,UAAQ,IAAEA,GAAE,SAAQD,KAAEC,GAAE;AAAA,aAAaD;AAAA,IAAE;AAAC,WAAO,MAAIC,GAAE,MAAI,IAAE;AAAA,EAAI;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAG,OAAKA,GAAE,KAAI;AAAC,UAAIC,KAAED,GAAE;AAAc,eAAOC,OAAID,KAAEA,GAAE,WAAU,SAAOA,OAAIC,KAAED,GAAE;AAAgB,UAAG,SAAOC;AAAE,eAAOA,GAAE;AAAA,IAAU;AAAC,WAAO;AAAA,EAAI;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAG,GAAGA,EAAC,MAAIA;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAA,EAAE;AACjf,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAU,QAAG,CAACC,IAAE;AAAC,MAAAA,KAAE,GAAGD,EAAC;AAAE,UAAG,SAAOC;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAOA,OAAID,KAAE,OAAKA;AAAA,IAAC;AAAC,aAAQ,IAAEA,IAAEyB,KAAExB,QAAI;AAAC,UAAI4D,KAAE,EAAE;AAAO,UAAG,SAAOA;AAAE;AAAM,UAAIhE,KAAEgE,GAAE;AAAU,UAAG,SAAOhE,IAAE;AAAC,QAAA4B,KAAEoC,GAAE;AAAO,YAAG,SAAOpC,IAAE;AAAC,cAAEA;AAAE;AAAA,QAAQ;AAAC;AAAA,MAAK;AAAC,UAAGoC,GAAE,UAAQhE,GAAE,OAAM;AAAC,aAAIA,KAAEgE,GAAE,OAAMhE,MAAG;AAAC,cAAGA,OAAI;AAAE,mBAAO,GAAGgE,EAAC,GAAE7D;AAAE,cAAGH,OAAI4B;AAAE,mBAAO,GAAGoC,EAAC,GAAE5D;AAAE,UAAAJ,KAAEA,GAAE;AAAA,QAAO;AAAC,cAAM,MAAM,EAAE,GAAG,CAAC;AAAA,MAAE;AAAC,UAAG,EAAE,WAAS4B,GAAE;AAAO,YAAEoC,IAAEpC,KAAE5B;AAAA,WAAM;AAAC,iBAAQia,KAAE,OAAGrS,KAAE5D,GAAE,OAAM4D,MAAG;AAAC,cAAGA,OAAI,GAAE;AAAC,YAAAqS,KAAE;AAAG,gBAAEjW;AAAE,YAAApC,KAAE5B;AAAE;AAAA,UAAK;AAAC,cAAG4H,OAAIhG,IAAE;AAAC,YAAAqY,KAAE;AAAG,YAAArY,KAAEoC;AAAE,gBAAEhE;AAAE;AAAA,UAAK;AAAC,UAAA4H,KAAEA,GAAE;AAAA,QAAO;AAAC,YAAG,CAACqS,IAAE;AAAC,eAAIrS,KAAE5H,GAAE,OAAM4H,MAAG;AAAC,gBAAGA,OAC5f,GAAE;AAAC,cAAAqS,KAAE;AAAG,kBAAEja;AAAE,cAAA4B,KAAEoC;AAAE;AAAA,YAAK;AAAC,gBAAG4D,OAAIhG,IAAE;AAAC,cAAAqY,KAAE;AAAG,cAAArY,KAAE5B;AAAE,kBAAEgE;AAAE;AAAA,YAAK;AAAC,YAAA4D,KAAEA,GAAE;AAAA,UAAO;AAAC,cAAG,CAACqS;AAAE,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,QAAE;AAAA,MAAC;AAAC,UAAG,EAAE,cAAYrY;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAA,IAAE;AAAC,QAAG,MAAI,EAAE;AAAI,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,WAAO,EAAE,UAAU,YAAU,IAAEzB,KAAEC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,IAAAA,KAAE,GAAGA,EAAC;AAAE,WAAO,SAAOA,KAAE,GAAGA,EAAC,IAAE;AAAA,EAAI;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAG,MAAIA,GAAE,OAAK,MAAIA,GAAE;AAAI,aAAOA;AAAE,SAAIA,KAAEA,GAAE,OAAM,SAAOA,MAAG;AAAC,UAAIC,KAAE,GAAGD,EAAC;AAAE,UAAG,SAAOC;AAAE,eAAOA;AAAE,MAAAD,KAAEA,GAAE;AAAA,IAAO;AAAC,WAAO;AAAA,EAAI;AAC1X,MAAI,KAAG,GAAG,2BAA0B,KAAG,GAAG,yBAAwB,KAAG,GAAG,sBAAqB,KAAG,GAAG,uBAAsBkZ,MAAE,GAAG,cAAa,KAAG,GAAG,kCAAiC,KAAG,GAAG,4BAA2B,KAAG,GAAG,+BAA8B,KAAG,GAAG,yBAAwB,KAAG,GAAG,sBAAqB,KAAG,GAAG,uBAAsB,KAAG,MAAK,KAAG;AAAK,WAAS,GAAGlZ,IAAE;AAAC,QAAG,MAAI,eAAa,OAAO,GAAG;AAAkB,UAAG;AAAC,WAAG,kBAAkB,IAAGA,IAAE,QAAO,SAAOA,GAAE,QAAQ,QAAM,IAAI;AAAA,MAAC,SAAOC,IAAN;AAAA,MAAQ;AAAA,EAAE;AACve,MAAI,KAAG,KAAK,QAAM,KAAK,QAAM,IAAG,KAAG,KAAK,KAAI,KAAG,KAAK;AAAI,WAAS,GAAGD,IAAE;AAAC,IAAAA,QAAK;AAAE,WAAO,MAAIA,KAAE,KAAG,MAAI,GAAGA,EAAC,IAAE,KAAG,KAAG;AAAA,EAAC;AAAC,MAAI,KAAG,IAAG,KAAG;AAC7H,WAAS,GAAGA,IAAE;AAAC,YAAOA,KAAE,CAACA,IAAC;AAAA,MAAE,KAAK;AAAE,eAAO;AAAA,MAAE,KAAK;AAAE,eAAO;AAAA,MAAE,KAAK;AAAE,eAAO;AAAA,MAAE,KAAK;AAAE,eAAO;AAAA,MAAE,KAAK;AAAG,eAAO;AAAA,MAAG,KAAK;AAAG,eAAO;AAAA,MAAG,KAAK;AAAA,MAAG,KAAK;AAAA,MAAI,KAAK;AAAA,MAAI,KAAK;AAAA,MAAI,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAA,MAAM,KAAK;AAAA,MAAM,KAAK;AAAA,MAAM,KAAK;AAAA,MAAO,KAAK;AAAA,MAAO,KAAK;AAAA,MAAO,KAAK;AAAA,MAAQ,KAAK;AAAQ,eAAOA,KAAE;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAS,eAAOA,KAAE;AAAA,MAAU,KAAK;AAAU,eAAO;AAAA,MAAU,KAAK;AAAU,eAAO;AAAA,MAAU,KAAK;AAAU,eAAO;AAAA,MAAU,KAAK;AAAW,eAAO;AAAA,MACzgB;AAAQ,eAAOA;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE;AAAa,QAAG,MAAI;AAAE,aAAO;AAAE,QAAIyB,KAAE,GAAEoC,KAAE7D,GAAE,gBAAeH,KAAEG,GAAE,aAAY8Z,KAAE,IAAE;AAAU,QAAG,MAAIA,IAAE;AAAC,UAAIrS,KAAEqS,KAAE,CAACjW;AAAE,YAAI4D,KAAEhG,KAAE,GAAGgG,EAAC,KAAG5H,MAAGia,IAAE,MAAIja,OAAI4B,KAAE,GAAG5B,EAAC;AAAA,IAAG;AAAM,MAAAia,KAAE,IAAE,CAACjW,IAAE,MAAIiW,KAAErY,KAAE,GAAGqY,EAAC,IAAE,MAAIja,OAAI4B,KAAE,GAAG5B,EAAC;AAAG,QAAG,MAAI4B;AAAE,aAAO;AAAE,QAAG,MAAIxB,MAAGA,OAAIwB,MAAG,OAAKxB,KAAE4D,QAAKA,KAAEpC,KAAE,CAACA,IAAE5B,KAAEI,KAAE,CAACA,IAAE4D,MAAGhE,MAAG,OAAKgE,MAAG,OAAKhE,KAAE;AAAU,aAAOI;AAAE,WAAKwB,KAAE,OAAKA,MAAG,IAAE;AAAI,IAAAxB,KAAED,GAAE;AAAe,QAAG,MAAIC;AAAE,WAAID,KAAEA,GAAE,eAAcC,MAAGwB,IAAE,IAAExB;AAAG,YAAE,KAAG,GAAGA,EAAC,GAAE4D,KAAE,KAAG,GAAEpC,MAAGzB,GAAE,IAAGC,MAAG,CAAC4D;AAAE,WAAOpC;AAAA,EAAC;AACvc,WAAS,GAAGzB,IAAEC,IAAE;AAAC,YAAOD,IAAC;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAE,eAAOC,KAAE;AAAA,MAAI,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAG,KAAK;AAAA,MAAG,KAAK;AAAA,MAAI,KAAK;AAAA,MAAI,KAAK;AAAA,MAAI,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAA,MAAK,KAAK;AAAA,MAAM,KAAK;AAAA,MAAM,KAAK;AAAA,MAAM,KAAK;AAAA,MAAO,KAAK;AAAA,MAAO,KAAK;AAAA,MAAO,KAAK;AAAA,MAAQ,KAAK;AAAQ,eAAOA,KAAE;AAAA,MAAI,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAS,eAAM;AAAA,MAAG,KAAK;AAAA,MAAU,KAAK;AAAA,MAAU,KAAK;AAAA,MAAU,KAAK;AAAW,eAAM;AAAA,MAAG;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AAC/a,WAAS,GAAGD,IAAEC,IAAE;AAAC,aAAQ,IAAED,GAAE,gBAAeyB,KAAEzB,GAAE,aAAY6D,KAAE7D,GAAE,iBAAgBH,KAAEG,GAAE,cAAa,IAAEH,MAAG;AAAC,UAAIia,KAAE,KAAG,GAAGja,EAAC,GAAE4H,KAAE,KAAGqS,IAAEvD,KAAE1S,GAAEiW;AAAG,UAAG,OAAKvD,IAAE;AAAC,YAAG,OAAK9O,KAAE,MAAI,OAAKA,KAAEhG;AAAG,UAAAoC,GAAEiW,MAAG,GAAGrS,IAAExH,EAAC;AAAA,MAAC;AAAM,QAAAsW,MAAGtW,OAAID,GAAE,gBAAcyH;AAAG,MAAA5H,MAAG,CAAC4H;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGzH,IAAE;AAAC,IAAAA,KAAEA,GAAE,eAAa;AAAY,WAAO,MAAIA,KAAEA,KAAEA,KAAE,aAAW,aAAW;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,QAAIA,KAAE;AAAG,WAAK;AAAE,WAAK,KAAG,aAAW,KAAG;AAAI,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,aAAQC,KAAE,CAAA,GAAG,IAAE,GAAE,KAAG,GAAE;AAAI,MAAAA,GAAE,KAAKD,EAAC;AAAE,WAAOC;AAAA,EAAC;AAC3a,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,IAAAD,GAAE,gBAAcC;AAAE,kBAAYA,OAAID,GAAE,iBAAe,GAAEA,GAAE,cAAY;AAAG,IAAAA,KAAEA,GAAE;AAAW,IAAAC,KAAE,KAAG,GAAGA,EAAC;AAAE,IAAAD,GAAEC,MAAG;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,eAAa,CAACC;AAAE,IAAAD,GAAE,eAAaC;AAAE,IAAAD,GAAE,iBAAe;AAAE,IAAAA,GAAE,cAAY;AAAE,IAAAA,GAAE,gBAAcC;AAAE,IAAAD,GAAE,oBAAkBC;AAAE,IAAAD,GAAE,kBAAgBC;AAAE,IAAAA,KAAED,GAAE;AAAc,QAAIyB,KAAEzB,GAAE;AAAW,SAAIA,KAAEA,GAAE,iBAAgB,IAAE,KAAG;AAAC,UAAI6D,KAAE,KAAG,GAAG,CAAC,GAAEhE,KAAE,KAAGgE;AAAE,MAAA5D,GAAE4D,MAAG;AAAE,MAAApC,GAAEoC,MAAG;AAAG,MAAA7D,GAAE6D,MAAG;AAAG,WAAG,CAAChE;AAAA,IAAC;AAAA,EAAC;AACzY,WAAS,GAAGG,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,kBAAgBC;AAAE,SAAID,KAAEA,GAAE,eAAc,KAAG;AAAC,UAAIyB,KAAE,KAAG,GAAG,CAAC,GAAEoC,KAAE,KAAGpC;AAAE,MAAAoC,KAAE5D,KAAED,GAAEyB,MAAGxB,OAAID,GAAEyB,OAAIxB;AAAG,WAAG,CAAC4D;AAAA,IAAC;AAAA,EAAC;AAAC,MAAIsV,MAAE;AAAE,WAAS,GAAGnZ,IAAE;AAAC,IAAAA,MAAG,CAACA;AAAE,WAAO,IAAEA,KAAE,IAAEA,KAAE,OAAKA,KAAE,aAAW,KAAG,YAAU,IAAE;AAAA,EAAC;AAAC,MAAI,IAAG,IAAG,IAAG,IAAG,IAAG,KAAG,OAAG,KAAG,CAAA,GAAG,KAAG,MAAK,KAAG,MAAK,KAAG,MAAK,KAAG,oBAAI,OAAI,KAAG,oBAAI,OAAI,KAAG,CAAA,GAAG,KAAG,6PAA6P,MAAM,GAAG;AACniB,WAAS,GAAGA,IAAEC,IAAE;AAAC,YAAOD;MAAG,KAAK;AAAA,MAAU,KAAK;AAAW,aAAG;AAAK;AAAA,MAAM,KAAK;AAAA,MAAY,KAAK;AAAY,aAAG;AAAK;AAAA,MAAM,KAAK;AAAA,MAAY,KAAK;AAAW,aAAG;AAAK;AAAA,MAAM,KAAK;AAAA,MAAc,KAAK;AAAa,WAAG,OAAOC,GAAE,SAAS;AAAE;AAAA,MAAM,KAAK;AAAA,MAAoB,KAAK;AAAqB,WAAG,OAAOA,GAAE,SAAS;AAAA,IAAC;AAAA,EAAC;AACnT,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAE;AAAC,QAAG,SAAOG,MAAGA,GAAE,gBAAcH;AAAE,aAAOG,KAAE,EAAC,WAAUC,IAAE,cAAa,GAAE,kBAAiBwB,IAAE,aAAY5B,IAAE,kBAAiB,CAACgE,EAAC,EAAC,GAAE,SAAO5D,OAAIA,KAAE,GAAGA,EAAC,GAAE,SAAOA,MAAG,GAAGA,EAAC,IAAGD;AAAE,IAAAA,GAAE,oBAAkByB;AAAE,IAAAxB,KAAED,GAAE;AAAiB,aAAO6D,MAAG,OAAK5D,GAAE,QAAQ4D,EAAC,KAAG5D,GAAE,KAAK4D,EAAC;AAAE,WAAO7D;AAAA,EAAC;AACpR,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,YAAO5D,IAAG;AAAA,MAAA,KAAK;AAAU,eAAO,KAAG,GAAG,IAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC,GAAE;AAAA,MAAG,KAAK;AAAY,eAAO,KAAG,GAAG,IAAG7D,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC,GAAE;AAAA,MAAG,KAAK;AAAY,eAAO,KAAG,GAAG,IAAG7D,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC,GAAE;AAAA,MAAG,KAAK;AAAc,YAAIhE,KAAEgE,GAAE;AAAU,WAAG,IAAIhE,IAAE,GAAG,GAAG,IAAIA,EAAC,KAAG,MAAKG,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC,CAAC;AAAE,eAAM;AAAA,MAAG,KAAK;AAAoB,eAAOhE,KAAEgE,GAAE,WAAU,GAAG,IAAIhE,IAAE,GAAG,GAAG,IAAIA,EAAC,KAAG,MAAKG,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC,CAAC,GAAE;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE;AACnW,WAAS,GAAG7D,IAAE;AAAC,QAAIC,KAAE,GAAGD,GAAE,MAAM;AAAE,QAAG,SAAOC,IAAE;AAAC,UAAI,IAAE,GAAGA,EAAC;AAAE,UAAG,SAAO;AAAE,YAAGA,KAAE,EAAE,KAAI,OAAKA,IAAE;AAAC,cAAGA,KAAE,GAAG,CAAC,GAAE,SAAOA,IAAE;AAAC,YAAAD,GAAE,YAAUC;AAAE,eAAGD,GAAE,UAAS,WAAU;AAAC,iBAAG,CAAC;AAAA,YAAC,CAAC;AAAE;AAAA,UAAM;AAAA,QAAC,WAAS,MAAIC,MAAG,EAAE,UAAU,QAAQ,cAAc,cAAa;AAAC,UAAAD,GAAE,YAAU,MAAI,EAAE,MAAI,EAAE,UAAU,gBAAc;AAAK;AAAA,QAAM;AAAA;AAAA,IAAC;AAAC,IAAAA,GAAE,YAAU;AAAA,EAAI;AAClT,WAAS,GAAGA,IAAE;AAAC,QAAG,SAAOA,GAAE;AAAU,aAAM;AAAG,aAAQC,KAAED,GAAE,kBAAiB,IAAEC,GAAE,UAAQ;AAAC,UAAI,IAAE,GAAGD,GAAE,cAAaA,GAAE,kBAAiBC,GAAE,IAAGD,GAAE,WAAW;AAAE,UAAG,SAAO,GAAE;AAAC,YAAEA,GAAE;AAAY,YAAIyB,KAAE,IAAI,EAAE,YAAY,EAAE,MAAK,CAAC;AAAE,aAAGA;AAAE,UAAE,OAAO,cAAcA,EAAC;AAAE,aAAG;AAAA,MAAI;AAAM,eAAOxB,KAAE,GAAG,CAAC,GAAE,SAAOA,MAAG,GAAGA,EAAC,GAAED,GAAE,YAAU,GAAE;AAAG,MAAAC,GAAE,MAAK;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,OAAGD,EAAC,KAAG,EAAE,OAAOC,EAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,SAAG;AAAG,aAAO,MAAI,GAAG,EAAE,MAAI,KAAG;AAAM,aAAO,MAAI,GAAG,EAAE,MAAI,KAAG;AAAM,aAAO,MAAI,GAAG,EAAE,MAAI,KAAG;AAAM,OAAG,QAAQ,EAAE;AAAE,OAAG,QAAQ,EAAE;AAAA,EAAC;AACnf,WAAS,GAAGD,IAAEC,IAAE;AAAC,IAAAD,GAAE,cAAYC,OAAID,GAAE,YAAU,MAAK,OAAK,KAAG,MAAG,GAAG,0BAA0B,GAAG,yBAAwB,EAAE;AAAA,EAAG;AAC5H,WAAS,GAAGA,IAAE;AAAC,aAASC,GAAEA,IAAE;AAAC,aAAO,GAAGA,IAAED,EAAC;AAAA,IAAC;AAAC,QAAG,IAAE,GAAG,QAAO;AAAC,SAAG,GAAG,IAAGA,EAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAG,QAAO,KAAI;AAAC,YAAIyB,KAAE,GAAG;AAAG,QAAAA,GAAE,cAAYzB,OAAIyB,GAAE,YAAU;AAAA,MAAK;AAAA,IAAC;AAAC,aAAO,MAAI,GAAG,IAAGzB,EAAC;AAAE,aAAO,MAAI,GAAG,IAAGA,EAAC;AAAE,aAAO,MAAI,GAAG,IAAGA,EAAC;AAAE,OAAG,QAAQC,EAAC;AAAE,OAAG,QAAQA,EAAC;AAAE,SAAI,IAAE,GAAE,IAAE,GAAG,QAAO;AAAI,MAAAwB,KAAE,GAAG,IAAGA,GAAE,cAAYzB,OAAIyB,GAAE,YAAU;AAAM,WAAK,IAAE,GAAG,WAAS,IAAE,GAAG,IAAG,SAAO,EAAE;AAAY,SAAG,CAAC,GAAE,SAAO,EAAE,aAAW,GAAG,MAAO;AAAA,EAAA;AAAC,MAAI,KAAG,GAAG,yBAAwB,KAAG;AAC5a,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAEsV,KAAEtZ,KAAE,GAAG;AAAW,OAAG,aAAW;AAAK,QAAG;AAACsZ,YAAE,GAAE,GAAGnZ,IAAEC,IAAE,GAAEwB,EAAC;AAAA,IAAC,UAAC;AAAQ0X,YAAEtV,IAAE,GAAG,aAAWhE;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGG,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAEsV,KAAEtZ,KAAE,GAAG;AAAW,OAAG,aAAW;AAAK,QAAG;AAACsZ,YAAE,GAAE,GAAGnZ,IAAEC,IAAE,GAAEwB,EAAC;AAAA,IAAC,UAAC;AAAQ0X,YAAEtV,IAAE,GAAG,aAAWhE;AAAA,IAAC;AAAA,EAAC;AACjO,WAAS,GAAGG,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAG,IAAG;AAAC,UAAIoC,KAAE,GAAG7D,IAAEC,IAAE,GAAEwB,EAAC;AAAE,UAAG,SAAOoC;AAAE,WAAG7D,IAAEC,IAAEwB,IAAEmC,MAAG,CAAC,GAAE,GAAG5D,IAAEyB,EAAC;AAAA,eAAU,GAAGoC,IAAE7D,IAAEC,IAAE,GAAEwB,EAAC;AAAE,QAAAA,GAAE,gBAAe;AAAA,eAAW,GAAGzB,IAAEyB,EAAC,GAAExB,KAAE,KAAG,KAAG,GAAG,QAAQD,EAAC,GAAE;AAAC,eAAK,SAAO6D,MAAG;AAAC,cAAIhE,KAAE,GAAGgE,EAAC;AAAE,mBAAOhE,MAAG,GAAGA,EAAC;AAAE,UAAAA,KAAE,GAAGG,IAAEC,IAAE,GAAEwB,EAAC;AAAE,mBAAO5B,MAAG,GAAGG,IAAEC,IAAEwB,IAAEmC,MAAG,CAAC;AAAE,cAAG/D,OAAIgE;AAAE;AAAM,UAAAA,KAAEhE;AAAA,QAAC;AAAC,iBAAOgE,MAAGpC,GAAE,gBAAe;AAAA,MAAE;AAAM,WAAGzB,IAAEC,IAAEwB,IAAE,MAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAImC,OAAG;AACpU,WAAS,GAAG5D,IAAEC,IAAE,GAAEwB,IAAE;AAACmC,WAAG;AAAK,IAAA5D,KAAE,GAAGyB,EAAC;AAAE,IAAAzB,KAAE,GAAGA,EAAC;AAAE,QAAG,SAAOA;AAAE,UAAGC,KAAE,GAAGD,EAAC,GAAE,SAAOC;AAAE,QAAAD,KAAE;AAAA,eAAa,IAAEC,GAAE,KAAI,OAAK,GAAE;AAAC,QAAAD,KAAE,GAAGC,EAAC;AAAE,YAAG,SAAOD;AAAE,iBAAOA;AAAE,QAAAA,KAAE;AAAA,MAAI,WAAS,MAAI,GAAE;AAAC,YAAGC,GAAE,UAAU,QAAQ,cAAc;AAAa,iBAAO,MAAIA,GAAE,MAAIA,GAAE,UAAU,gBAAc;AAAK,QAAAD,KAAE;AAAA,MAAI;AAAM,QAAAC,OAAID,OAAIA,KAAE;AAAM4D,WAAG5D;AAAE,WAAO;AAAA,EAAI;AAC7S,WAAS,GAAGA,IAAE;AAAC,YAAOA,IAAC;AAAA,MAAE,KAAK;AAAA,MAAS,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAc,KAAK;AAAA,MAAO,KAAK;AAAA,MAAM,KAAK;AAAA,MAAW,KAAK;AAAA,MAAW,KAAK;AAAA,MAAU,KAAK;AAAA,MAAY,KAAK;AAAA,MAAO,KAAK;AAAA,MAAU,KAAK;AAAA,MAAW,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAU,KAAK;AAAA,MAAU,KAAK;AAAA,MAAW,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAY,KAAK;AAAA,MAAU,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAO,KAAK;AAAA,MAAgB,KAAK;AAAA,MAAc,KAAK;AAAA,MAAY,KAAK;AAAA,MAAa,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAAc,KAAK;AAAA,MAAW,KAAK;AAAA,MAAa,KAAK;AAAA,MAAe,KAAK;AAAA,MAAS,KAAK;AAAA,MAAkB,KAAK;AAAA,MAAY,KAAK;AAAA,MAAmB,KAAK;AAAA,MAAiB,KAAK;AAAA,MAAoB,KAAK;AAAA,MAAa,KAAK;AAAA,MAAY,KAAK;AAAA,MAAc,KAAK;AAAA,MAAO,KAAK;AAAA,MAAmB,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAa,KAAK;AAAA,MAAW,KAAK;AAAA,MAAS,KAAK;AAAc,eAAO;AAAA,MAAE,KAAK;AAAA,MAAO,KAAK;AAAA,MAAY,KAAK;AAAA,MAAW,KAAK;AAAA,MAAY,KAAK;AAAA,MAAW,KAAK;AAAA,MAAY,KAAK;AAAA,MAAW,KAAK;AAAA,MAAY,KAAK;AAAA,MAAc,KAAK;AAAA,MAAa,KAAK;AAAA,MAAc,KAAK;AAAA,MAAS,KAAK;AAAA,MAAS,KAAK;AAAA,MAAY,KAAK;AAAA,MAAQ,KAAK;AAAA,MAAa,KAAK;AAAA,MAAa,KAAK;AAAA,MAAe,KAAK;AAAe,eAAO;AAAA,MACpqC,KAAK;AAAU,gBAAO,GAAI,GAAA;AAAA,UAAE,KAAK;AAAG,mBAAO;AAAA,UAAE,KAAK;AAAG,mBAAO;AAAA,UAAE,KAAK;AAAA,UAAG,KAAK;AAAG,mBAAO;AAAA,UAAG,KAAK;AAAG,mBAAO;AAAA,UAAU;AAAQ,mBAAO;AAAA,QAAE;AAAA,MAAC;AAAQ,eAAO;AAAA,IAAE;AAAA,EAAC;AAAC,MAAI,KAAG,MAAK,KAAG,MAAK,KAAG;AAAK,WAAS,KAAI;AAAC,QAAG;AAAG,aAAO;AAAG,QAAIA,IAAEC,KAAE,IAAG,IAAEA,GAAE,QAAOwB,IAAEoC,KAAE,WAAU,KAAG,GAAG,QAAM,GAAG,aAAYhE,KAAEgE,GAAE;AAAO,SAAI7D,KAAE,GAAEA,KAAE,KAAGC,GAAED,QAAK6D,GAAE7D,KAAGA;AAAI;AAAC,QAAI8Z,KAAE,IAAE9Z;AAAE,SAAIyB,KAAE,GAAEA,MAAGqY,MAAG7Z,GAAE,IAAEwB,QAAKoC,GAAEhE,KAAE4B,KAAGA;AAAI;AAAC,WAAO,KAAGoC,GAAE,MAAM7D,IAAE,IAAEyB,KAAE,IAAEA,KAAE,MAAM;AAAA,EAAC;AACxY,WAAS,GAAGzB,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAQ,kBAAaA,MAAGA,KAAEA,GAAE,UAAS,MAAIA,MAAG,OAAKC,OAAID,KAAE,OAAKA,KAAEC;AAAE,WAAKD,OAAIA,KAAE;AAAI,WAAO,MAAIA,MAAG,OAAKA,KAAEA,KAAE;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,KAAI;AAAC,WAAM;AAAA,EAAE;AAC5K,WAAS,GAAGA,IAAE;AAAC,aAASC,GAAEA,IAAEwB,IAAEoC,IAAEhE,IAAEia,IAAE;AAAC,WAAK,aAAW7Z;AAAE,WAAK,cAAY4D;AAAE,WAAK,OAAKpC;AAAE,WAAK,cAAY5B;AAAE,WAAK,SAAOia;AAAE,WAAK,gBAAc;AAAK,eAAQ,KAAK9Z;AAAE,QAAAA,GAAE,eAAe,CAAC,MAAIC,KAAED,GAAE,IAAG,KAAK,KAAGC,KAAEA,GAAEJ,EAAC,IAAEA,GAAE;AAAI,WAAK,sBAAoB,QAAMA,GAAE,mBAAiBA,GAAE,mBAAiB,UAAKA,GAAE,eAAa,KAAG;AAAG,WAAK,uBAAqB;AAAG,aAAO;AAAA,IAAI;AAACoZ,QAAEhZ,GAAE,WAAU,EAAC,gBAAe,WAAU;AAAC,WAAK,mBAAiB;AAAG,UAAID,KAAE,KAAK;AAAY,MAAAA,OAAIA,GAAE,iBAAeA,GAAE,mBAAiB,cAAY,OAAOA,GAAE,gBAC7eA,GAAE,cAAY,QAAI,KAAK,qBAAmB;AAAA,IAAG,GAAE,iBAAgB,WAAU;AAAC,UAAIA,KAAE,KAAK;AAAY,MAAAA,OAAIA,GAAE,kBAAgBA,GAAE,gBAAe,IAAG,cAAY,OAAOA,GAAE,iBAAeA,GAAE,eAAa,OAAI,KAAK,uBAAqB;AAAA,IAAG,GAAE,SAAQ,WAAU;AAAA,IAAE,GAAC,cAAa,GAAE,CAAC;AAAE,WAAOC;AAAA,EAAC;AACjR,MAAI,KAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,SAASD,IAAE;AAAC,WAAOA,GAAE,aAAW,KAAK;EAAK,GAAE,kBAAiB,GAAE,WAAU,EAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGiZ,IAAE,IAAG,IAAG,EAAC,MAAK,GAAE,QAAO,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,IAAG,IAAG,IAAG,KAAGA,IAAE,CAAA,GAAG,IAAG,EAAC,SAAQ,GAAE,SAAQ,GAAE,SAAQ,GAAE,SAAQ,GAAE,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,GAAE,QAAO,GAAE,SAAQ,GAAE,kBAAiB,IAAG,QAAO,GAAE,SAAQ,GAAE,eAAc,SAASjZ,IAAE;AAAC,WAAO,WAASA,GAAE,gBAAcA,GAAE,gBAAcA,GAAE,aAAWA,GAAE,YAAUA,GAAE,cAAYA,GAAE;AAAA,EAAa,GAAE,WAAU,SAASA,IAAE;AAAC,QAAG,eAC3eA;AAAE,aAAOA,GAAE;AAAU,IAAAA,OAAI,OAAK,MAAI,gBAAcA,GAAE,QAAM,KAAGA,GAAE,UAAQ,GAAG,SAAQ,KAAGA,GAAE,UAAQ,GAAG,WAAS,KAAG,KAAG,GAAE,KAAGA;AAAG,WAAO;AAAA,EAAE,GAAE,WAAU,SAASA,IAAE;AAAC,WAAM,eAAcA,KAAEA,GAAE,YAAU;AAAA,EAAE,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGiZ,IAAE,CAAE,GAAC,IAAG,EAAC,cAAa,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGA,IAAE,CAAA,GAAG,IAAG,EAAC,eAAc,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGA,IAAE,CAAE,GAAC,IAAG,EAAC,eAAc,GAAE,aAAY,GAAE,eAAc,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGA,IAAE,IAAG,IAAG,EAAC,eAAc,SAASjZ,IAAE;AAAC,WAAM,mBAAkBA,KAAEA,GAAE,gBAAc,OAAO;AAAA,EAAa,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGiZ,IAAE,CAAE,GAAC,IAAG,EAAC,MAAK,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAG;AAAA,IAAC,KAAI;AAAA,IACxf,UAAS;AAAA,IAAI,MAAK;AAAA,IAAY,IAAG;AAAA,IAAU,OAAM;AAAA,IAAa,MAAK;AAAA,IAAY,KAAI;AAAA,IAAS,KAAI;AAAA,IAAK,MAAK;AAAA,IAAc,MAAK;AAAA,IAAc,QAAO;AAAA,IAAa,iBAAgB;AAAA,EAAc,GAAE,KAAG;AAAA,IAAC,GAAE;AAAA,IAAY,GAAE;AAAA,IAAM,IAAG;AAAA,IAAQ,IAAG;AAAA,IAAQ,IAAG;AAAA,IAAQ,IAAG;AAAA,IAAU,IAAG;AAAA,IAAM,IAAG;AAAA,IAAQ,IAAG;AAAA,IAAW,IAAG;AAAA,IAAS,IAAG;AAAA,IAAI,IAAG;AAAA,IAAS,IAAG;AAAA,IAAW,IAAG;AAAA,IAAM,IAAG;AAAA,IAAO,IAAG;AAAA,IAAY,IAAG;AAAA,IAAU,IAAG;AAAA,IAAa,IAAG;AAAA,IAAY,IAAG;AAAA,IAAS,IAAG;AAAA,IAAS,KAAI;AAAA,IAAK,KAAI;AAAA,IAAK,KAAI;AAAA,IAAK,KAAI;AAAA,IAAK,KAAI;AAAA,IAAK,KAAI;AAAA,IAAK,KAAI;AAAA,IACtf,KAAI;AAAA,IAAK,KAAI;AAAA,IAAK,KAAI;AAAA,IAAM,KAAI;AAAA,IAAM,KAAI;AAAA,IAAM,KAAI;AAAA,IAAU,KAAI;AAAA,IAAa,KAAI;AAAA,EAAM,GAAE,KAAG,EAAC,KAAI,UAAS,SAAQ,WAAU,MAAK,WAAU,OAAM,WAAU;AAAE,WAAS,GAAGjZ,IAAE;AAAC,QAAIC,KAAE,KAAK;AAAY,WAAOA,GAAE,mBAAiBA,GAAE,iBAAiBD,EAAC,KAAGA,KAAE,GAAGA,OAAI,CAAC,CAACC,GAAED,MAAG;AAAA,EAAE;AAAC,WAAS,KAAI;AAAC,WAAO;AAAA,EAAE;AAChS,MAAI,KAAGiZ,IAAE,CAAE,GAAC,IAAG,EAAC,KAAI,SAASjZ,IAAE;AAAC,QAAGA,GAAE,KAAI;AAAC,UAAIC,KAAE,GAAGD,GAAE,QAAMA,GAAE;AAAI,UAAG,mBAAiBC;AAAE,eAAOA;AAAA,IAAC;AAAC,WAAM,eAAaD,GAAE,QAAMA,KAAE,GAAGA,EAAC,GAAE,OAAKA,KAAE,UAAQ,OAAO,aAAaA,EAAC,KAAG,cAAYA,GAAE,QAAM,YAAUA,GAAE,OAAK,GAAGA,GAAE,YAAU,iBAAe;AAAA,EAAE,GAAE,MAAK,GAAE,UAAS,GAAE,SAAQ,GAAE,UAAS,GAAE,QAAO,GAAE,SAAQ,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,IAAG,UAAS,SAASA,IAAE;AAAC,WAAM,eAAaA,GAAE,OAAK,GAAGA,EAAC,IAAE;AAAA,EAAC,GAAE,SAAQ,SAASA,IAAE;AAAC,WAAM,cAAYA,GAAE,QAAM,YAAUA,GAAE,OAAKA,GAAE,UAAQ;AAAA,EAAC,GAAE,OAAM,SAASA,IAAE;AAAC,WAAM,eAC7eA,GAAE,OAAK,GAAGA,EAAC,IAAE,cAAYA,GAAE,QAAM,YAAUA,GAAE,OAAKA,GAAE,UAAQ;AAAA,EAAC,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGiZ,IAAE,CAAE,GAAC,IAAG,EAAC,WAAU,GAAE,OAAM,GAAE,QAAO,GAAE,UAAS,GAAE,oBAAmB,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,aAAY,GAAE,WAAU,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGA,IAAE,CAAE,GAAC,IAAG,EAAC,SAAQ,GAAE,eAAc,GAAE,gBAAe,GAAE,QAAO,GAAE,SAAQ,GAAE,SAAQ,GAAE,UAAS,GAAE,kBAAiB,GAAE,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGA,IAAE,CAAE,GAAC,IAAG,EAAC,cAAa,GAAE,aAAY,GAAE,eAAc,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAGA,IAAE,CAAA,GAAG,IAAG;AAAA,IAAC,QAAO,SAASjZ,IAAE;AAAC,aAAM,YAAWA,KAAEA,GAAE,SAAO,iBAAgBA,KAAE,CAACA,GAAE,cAAY;AAAA,IAAC;AAAA,IACnf,QAAO,SAASA,IAAE;AAAC,aAAM,YAAWA,KAAEA,GAAE,SAAO,iBAAgBA,KAAE,CAACA,GAAE,cAAY,gBAAeA,KAAE,CAACA,GAAE,aAAW;AAAA,IAAC;AAAA,IAAE,QAAO;AAAA,IAAE,WAAU;AAAA,EAAC,CAAC,GAAE,KAAG,GAAG,EAAE,GAAE,KAAG,CAAC,GAAE,IAAG,IAAG,EAAE,GAAE,KAAG,MAAI,sBAAqB,QAAO,KAAG;AAAK,QAAI,kBAAiB,aAAW,KAAG,SAAS;AAAc,MAAI,KAAG,MAAI,eAAc,UAAQ,CAAC,IAAGya,OAAG,OAAK,CAAC,MAAI,MAAI,IAAE,MAAI,MAAI,KAAIC,OAAG,OAAO,aAAa,EAAE,GAAE,KAAG;AAC1W,WAAS,GAAG1a,IAAEC,IAAE;AAAC,YAAOD;MAAG,KAAK;AAAQ,eAAM,OAAK,GAAG,QAAQC,GAAE,OAAO;AAAA,MAAE,KAAK;AAAU,eAAO,QAAMA,GAAE;AAAA,MAAQ,KAAK;AAAA,MAAW,KAAK;AAAA,MAAY,KAAK;AAAW,eAAM;AAAA,MAAG;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAO,WAAM,aAAW,OAAOA,MAAG,UAASA,KAAEA,GAAE,OAAK;AAAA,EAAI;AAAC,MAAI,KAAG;AAAG,WAAS,GAAGA,IAAEC,IAAE;AAAC,YAAOD,IAAG;AAAA,MAAA,KAAK;AAAiB,eAAO,GAAGC,EAAC;AAAA,MAAE,KAAK;AAAW,YAAG,OAAKA,GAAE;AAAM,iBAAO;AAAK,aAAG;AAAG,eAAOya;AAAAA,MAAG,KAAK;AAAY,eAAO1a,KAAEC,GAAE,MAAKD,OAAI0a,QAAI,KAAG,OAAK1a;AAAA,MAAE;AAAQ,eAAO;AAAA,IAAI;AAAA,EAAC;AACld,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAG;AAAG,aAAM,qBAAmBD,MAAG,CAAC,MAAI,GAAGA,IAAEC,EAAC,KAAGD,KAAE,GAAE,GAAG,KAAG,KAAG,KAAG,MAAK,KAAG,OAAGA,MAAG;AAAK,YAAOA;MAAG,KAAK;AAAQ,eAAO;AAAA,MAAK,KAAK;AAAW,YAAG,EAAEC,GAAE,WAASA,GAAE,UAAQA,GAAE,YAAUA,GAAE,WAASA,GAAE,QAAO;AAAC,cAAGA,GAAE,QAAM,IAAEA,GAAE,KAAK;AAAO,mBAAOA,GAAE;AAAK,cAAGA,GAAE;AAAM,mBAAO,OAAO,aAAaA,GAAE,KAAK;AAAA,QAAC;AAAC,eAAO;AAAA,MAAK,KAAK;AAAiB,eAAOwa,QAAI,SAAOxa,GAAE,SAAO,OAAKA,GAAE;AAAA,MAAK;AAAQ,eAAO;AAAA,IAAI;AAAA,EAAC;AACvY,MAAI,KAAG,EAAC,OAAM,MAAG,MAAK,MAAG,UAAS,MAAG,kBAAiB,MAAG,OAAM,MAAG,OAAM,MAAG,QAAO,MAAG,UAAS,MAAG,OAAM,MAAG,QAAO,MAAG,KAAI,MAAG,MAAK,MAAG,MAAK,MAAG,KAAI,MAAG,MAAK,KAAE;AAAE,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED,MAAGA,GAAE,YAAUA,GAAE,SAAS,YAAa;AAAC,WAAM,YAAUC,KAAE,CAAC,CAAC,GAAGD,GAAE,QAAM,eAAaC,KAAE,OAAG;AAAA,EAAE;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,OAAGA,EAAC;AAAE,IAAAxB,KAAE,GAAGA,IAAE,UAAU;AAAE,QAAEA,GAAE,WAAS,IAAE,IAAI,GAAG,YAAW,UAAS,MAAK,GAAEwB,EAAC,GAAEzB,GAAE,KAAK,EAAC,OAAM,GAAE,WAAUC,GAAC,CAAC;AAAA,EAAE;AAAC,MAAI,KAAG,MAAK,KAAG;AAAK,WAASuD,KAAGxD,IAAE;AAAC,OAAGA,IAAE,CAAC;AAAA,EAAC;AAAC,WAAS2a,KAAG3a,IAAE;AAAC,QAAIC,KAAE,GAAGD,EAAC;AAAE,QAAG,GAAGC,EAAC;AAAE,aAAOD;AAAA,EAAC;AACpe,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAG,aAAWD;AAAE,aAAOC;AAAA,EAAC;AAAC,MAAI,KAAG;AAAG,MAAG,IAAG;AAAC,QAAI;AAAG,QAAG,IAAG;AAAC,UAAI,KAAG,aAAY;AAAS,UAAG,CAAC,IAAG;AAAC,YAAI,KAAG,SAAS,cAAc,KAAK;AAAE,WAAG,aAAa,WAAU,SAAS;AAAE,aAAG,eAAa,OAAO,GAAG;AAAA,MAAO;AAAC,WAAG;AAAA,IAAE;AAAM,WAAG;AAAG,SAAG,OAAK,CAAC,SAAS,gBAAc,IAAE,SAAS;AAAA,EAAa;AAAC,WAAS,KAAI;AAAC,WAAK,GAAG,YAAY,oBAAmB,EAAE,GAAE,KAAG,KAAG;AAAA,EAAK;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAG,YAAUA,GAAE,gBAAc2a,KAAG,EAAE,GAAE;AAAC,UAAI1a,KAAE;AAAG,SAAGA,IAAE,IAAGD,IAAE,GAAGA,EAAC,CAAC;AAAE,SAAGwD,MAAGvD,EAAC;AAAA,IAAC;AAAA,EAAC;AAC/b,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,kBAAYD,MAAG,GAAE,GAAG,KAAGC,IAAE,KAAG,GAAE,GAAG,YAAY,oBAAmB,EAAE,KAAG,eAAaD,MAAG,GAAI;AAAA,EAAA;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAG,sBAAoBA,MAAG,YAAUA,MAAG,cAAYA;AAAE,aAAO2a,KAAG,EAAE;AAAA,EAAC;AAAC,WAAS,GAAG3a,IAAEC,IAAE;AAAC,QAAG,YAAUD;AAAE,aAAO2a,KAAG1a,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG,YAAUD,MAAG,aAAWA;AAAE,aAAO2a,KAAG1a,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAOD,OAAIC,OAAI,MAAID,MAAG,IAAEA,OAAI,IAAEC,OAAID,OAAIA,MAAGC,OAAIA;AAAA,EAAC;AAAC,MAAI,KAAG,eAAa,OAAO,OAAO,KAAG,OAAO,KAAG;AACtZ,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG,GAAGD,IAAEC,EAAC;AAAE,aAAM;AAAG,QAAG,aAAW,OAAOD,MAAG,SAAOA,MAAG,aAAW,OAAOC,MAAG,SAAOA;AAAE,aAAM;AAAG,QAAI,IAAE,OAAO,KAAKD,EAAC,GAAEyB,KAAE,OAAO,KAAKxB,EAAC;AAAE,QAAG,EAAE,WAASwB,GAAE;AAAO,aAAM;AAAG,SAAIA,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,UAAIoC,KAAE,EAAEpC;AAAG,UAAG,CAAC,GAAG,KAAKxB,IAAE4D,EAAC,KAAG,CAAC,GAAG7D,GAAE6D,KAAG5D,GAAE4D,GAAE;AAAE,eAAM;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,GAAG7D,IAAE;AAAC,WAAKA,MAAGA,GAAE;AAAY,MAAAA,KAAEA,GAAE;AAAW,WAAOA;AAAA,EAAC;AACtU,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE,GAAGD,EAAC;AAAE,IAAAA,KAAE;AAAE,aAAQyB,IAAE,KAAG;AAAC,UAAG,MAAI,EAAE,UAAS;AAAC,QAAAA,KAAEzB,KAAE,EAAE,YAAY;AAAO,YAAGA,MAAGC,MAAGwB,MAAGxB;AAAE,iBAAM,EAAC,MAAK,GAAE,QAAOA,KAAED,GAAC;AAAE,QAAAA,KAAEyB;AAAA,MAAC;AAAC,SAAE;AAAC,eAAK,KAAG;AAAC,cAAG,EAAE,aAAY;AAAC,gBAAE,EAAE;AAAY,kBAAM;AAAA,UAAC;AAAC,cAAE,EAAE;AAAA,QAAU;AAAC,YAAE;AAAA,MAAM;AAAC,UAAE,GAAG,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAEC,IAAE;AAAC,WAAOD,MAAGC,KAAED,OAAIC,KAAE,OAAGD,MAAG,MAAIA,GAAE,WAAS,QAAGC,MAAG,MAAIA,GAAE,WAAS,GAAGD,IAAEC,GAAE,UAAU,IAAE,cAAaD,KAAEA,GAAE,SAASC,EAAC,IAAED,GAAE,0BAAwB,CAAC,EAAEA,GAAE,wBAAwBC,EAAC,IAAE,MAAI,QAAG;AAAA,EAAE;AAC9Z,WAAS,KAAI;AAAC,aAAQD,KAAE,QAAOC,KAAE,MAAKA,cAAaD,GAAE,qBAAmB;AAAC,UAAG;AAAC,YAAI,IAAE,aAAW,OAAOC,GAAE,cAAc,SAAS;AAAA,MAAI,SAAOwB,IAAN;AAAS,YAAE;AAAA,MAAE;AAAC,UAAG;AAAE,QAAAzB,KAAEC,GAAE;AAAA;AAAmB;AAAM,MAAAA,KAAE,GAAGD,GAAE,QAAQ;AAAA,IAAC;AAAC,WAAOC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED,MAAGA,GAAE,YAAUA,GAAE,SAAS,YAAa;AAAC,WAAOC,OAAI,YAAUA,OAAI,WAASD,GAAE,QAAM,aAAWA,GAAE,QAAM,UAAQA,GAAE,QAAM,UAAQA,GAAE,QAAM,eAAaA,GAAE,SAAO,eAAaC,MAAG,WAASD,GAAE;AAAA,EAAgB;AACxa,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAE,GAAI,GAAC,IAAED,GAAE,aAAYyB,KAAEzB,GAAE;AAAe,QAAGC,OAAI,KAAG,KAAG,EAAE,iBAAe,GAAG,EAAE,cAAc,iBAAgB,CAAC,GAAE;AAAC,UAAG,SAAOwB,MAAG,GAAG,CAAC;AAAE,YAAGxB,KAAEwB,GAAE,OAAMzB,KAAEyB,GAAE,KAAI,WAASzB,OAAIA,KAAEC,KAAG,oBAAmB;AAAE,YAAE,iBAAeA,IAAE,EAAE,eAAa,KAAK,IAAID,IAAE,EAAE,MAAM,MAAM;AAAA,iBAAUA,MAAGC,KAAE,EAAE,iBAAe,aAAWA,GAAE,eAAa,QAAOD,GAAE,cAAa;AAAC,UAAAA,KAAEA,GAAE;AAAe,cAAI6D,KAAE,EAAE,YAAY,QAAOhE,KAAE,KAAK,IAAI4B,GAAE,OAAMoC,EAAC;AAAE,UAAApC,KAAE,WAASA,GAAE,MAAI5B,KAAE,KAAK,IAAI4B,GAAE,KAAIoC,EAAC;AAAE,WAAC7D,GAAE,UAAQH,KAAE4B,OAAIoC,KAAEpC,IAAEA,KAAE5B,IAAEA,KAAEgE;AAAG,UAAAA,KAAE,GAAG,GAAEhE,EAAC;AAAE,cAAIia,KAAE;AAAA,YAAG;AAAA,YACvfrY;AAAA,UAAC;AAAE,UAAAoC,MAAGiW,OAAI,MAAI9Z,GAAE,cAAYA,GAAE,eAAa6D,GAAE,QAAM7D,GAAE,iBAAe6D,GAAE,UAAQ7D,GAAE,cAAY8Z,GAAE,QAAM9Z,GAAE,gBAAc8Z,GAAE,YAAU7Z,KAAEA,GAAE,YAAa,GAACA,GAAE,SAAS4D,GAAE,MAAKA,GAAE,MAAM,GAAE7D,GAAE,gBAAiB,GAACH,KAAE4B,MAAGzB,GAAE,SAASC,EAAC,GAAED,GAAE,OAAO8Z,GAAE,MAAKA,GAAE,MAAM,MAAI7Z,GAAE,OAAO6Z,GAAE,MAAKA,GAAE,MAAM,GAAE9Z,GAAE,SAASC,EAAC;AAAA,QAAG;AAAA;AAAC,MAAAA,KAAE,CAAA;AAAG,WAAID,KAAE,GAAEA,KAAEA,GAAE;AAAY,cAAIA,GAAE,YAAUC,GAAE,KAAK,EAAC,SAAQD,IAAE,MAAKA,GAAE,YAAW,KAAIA,GAAE,UAAS,CAAC;AAAE,qBAAa,OAAO,EAAE,SAAO,EAAE,MAAK;AAAG,WAAI,IAAE,GAAE,IAAEC,GAAE,QAAO;AAAI,QAAAD,KAAEC,GAAE,IAAGD,GAAE,QAAQ,aAAWA,GAAE,MAAKA,GAAE,QAAQ,YAAUA,GAAE;AAAA,IAAG;AAAA,EAAC;AACzf,MAAI,KAAG,MAAI,kBAAiB,YAAU,MAAI,SAAS,cAAa,KAAG,MAAK,KAAG,MAAK,KAAG,MAAK,KAAG;AAC3F,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE,EAAE,WAAS,IAAE,EAAE,WAAS,MAAI,EAAE,WAAS,IAAE,EAAE;AAAc,UAAI,QAAM,MAAI,OAAK,GAAGA,EAAC,MAAIA,KAAE,IAAG,oBAAmBA,MAAG,GAAGA,EAAC,IAAEA,KAAE,EAAC,OAAMA,GAAE,gBAAe,KAAIA,GAAE,aAAY,KAAGA,MAAGA,GAAE,iBAAeA,GAAE,cAAc,eAAa,QAAQ,aAAY,GAAGA,KAAE,EAAC,YAAWA,GAAE,YAAW,cAAaA,GAAE,cAAa,WAAUA,GAAE,WAAU,aAAYA,GAAE,YAAW,IAAG,MAAI,GAAG,IAAGA,EAAC,MAAI,KAAGA,IAAEA,KAAE,GAAG,IAAG,UAAU,GAAE,IAAEA,GAAE,WAASxB,KAAE,IAAI,GAAG,YAAW,UAAS,MAAKA,IAAE,CAAC,GAAED,GAAE,KAAK,EAAC,OAAMC,IAAE,WAAUwB,GAAC,CAAC,GAAExB,GAAE,SAAO;AAAA,EAAK;AACtf,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAI,IAAE;AAAG,MAAED,GAAE,YAAa,KAAEC,GAAE;AAAc,MAAE,WAASD,MAAG,WAASC;AAAE,MAAE,QAAMD,MAAG,QAAMC;AAAE,WAAO;AAAA,EAAC;AAAC,MAAI,KAAG,EAAC,cAAa,GAAG,aAAY,cAAc,GAAE,oBAAmB,GAAG,aAAY,oBAAoB,GAAE,gBAAe,GAAG,aAAY,gBAAgB,GAAE,eAAc,GAAG,cAAa,eAAe,EAAC,GAAE,KAAG,IAAG,KAAG,CAAA;AACvU,SAAK,KAAG,SAAS,cAAc,KAAK,EAAE,OAAM,oBAAmB,WAAS,OAAO,GAAG,aAAa,WAAU,OAAO,GAAG,mBAAmB,WAAU,OAAO,GAAG,eAAe,YAAW,qBAAoB,UAAQ,OAAO,GAAG,cAAc;AAAY,WAAS,GAAGD,IAAE;AAAC,QAAG,GAAGA;AAAG,aAAO,GAAGA;AAAG,QAAG,CAAC,GAAGA;AAAG,aAAOA;AAAE,QAAIC,KAAE,GAAGD,KAAG;AAAE,SAAI,KAAKC;AAAE,UAAGA,GAAE,eAAe,CAAC,KAAG,KAAK;AAAG,eAAO,GAAGD,MAAGC,GAAE;AAAG,WAAOD;AAAA,EAAC;AAAC,MAAI,KAAG,GAAG,cAAc,GAAE,KAAG,GAAG,oBAAoB,GAAE,KAAG,GAAG,gBAAgB,GAAE,KAAG,GAAG,eAAe,GAAE,KAAG,oBAAI,OAAI,KAAG,smBAAsmB,MAAM,GAAG;AAClmC,WAAS,GAAGA,IAAEC,IAAE;AAAC,OAAG,IAAID,IAAEC,EAAC;AAAE,OAAGA,IAAE,CAACD,EAAC,CAAC;AAAA,EAAC;AAAC,WAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,QAAI,KAAG,GAAG,KAAI,KAAG,GAAG,eAAc,KAAG,GAAG,GAAG,YAAW,IAAG,GAAG,MAAM,CAAC;AAAE,OAAG,IAAG,OAAK,EAAE;AAAA,EAAC;AAAC,KAAG,IAAG,gBAAgB;AAAE,KAAG,IAAG,sBAAsB;AAAE,KAAG,IAAG,kBAAkB;AAAE,KAAG,YAAW,eAAe;AAAE,KAAG,WAAU,SAAS;AAAE,KAAG,YAAW,QAAQ;AAAE,KAAG,IAAG,iBAAiB;AAAE,KAAG,gBAAe,CAAC,YAAW,WAAW,CAAC;AAAE,KAAG,gBAAe,CAAC,YAAW,WAAW,CAAC;AAAE,KAAG,kBAAiB,CAAC,cAAa,aAAa,CAAC;AAC3d,KAAG,kBAAiB,CAAC,cAAa,aAAa,CAAC;AAAE,KAAG,YAAW,oEAAoE,MAAM,GAAG,CAAC;AAAE,KAAG,YAAW,uFAAuF,MAAM,GAAG,CAAC;AAAE,KAAG,iBAAgB,CAAC,kBAAiB,YAAW,aAAY,OAAO,CAAC;AAAE,KAAG,oBAAmB,2DAA2D,MAAM,GAAG,CAAC;AAAE,KAAG,sBAAqB,6DAA6D,MAAM,GAAG,CAAC;AACngB,KAAG,uBAAsB,8DAA8D,MAAM,GAAG,CAAC;AAAE,MAAI,KAAG,6NAA6N,MAAM,GAAG,GAAE,KAAG,IAAI,IAAI,0CAA0C,MAAM,GAAG,EAAE,OAAO,EAAE,CAAC;AAC5Z,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE,QAAM;AAAgB,IAAAA,GAAE,gBAAc;AAAE,OAAGyB,IAAExB,IAAE,QAAOD,EAAC;AAAE,IAAAA,GAAE,gBAAc;AAAA,EAAI;AACxG,WAAS,GAAGA,IAAEC,IAAE;AAAC,IAAAA,KAAE,OAAKA,KAAE;AAAG,aAAQ,IAAE,GAAE,IAAED,GAAE,QAAO,KAAI;AAAC,UAAIyB,KAAEzB,GAAE,IAAG6D,KAAEpC,GAAE;AAAM,MAAAA,KAAEA,GAAE;AAAU,SAAE;AAAC,YAAI5B,KAAE;AAAO,YAAGI;AAAE,mBAAQ6Z,KAAErY,GAAE,SAAO,GAAE,KAAGqY,IAAEA,MAAI;AAAC,gBAAIrS,KAAEhG,GAAEqY,KAAGvD,KAAE9O,GAAE,UAASkP,KAAElP,GAAE;AAAc,YAAAA,KAAEA,GAAE;AAAS,gBAAG8O,OAAI1W,MAAGgE,GAAE,qBAAsB;AAAC,oBAAM;AAAE,eAAGA,IAAE4D,IAAEkP,EAAC;AAAE,YAAA9W,KAAE0W;AAAA,UAAC;AAAA;AAAM,eAAIuD,KAAE,GAAEA,KAAErY,GAAE,QAAOqY,MAAI;AAAC,YAAArS,KAAEhG,GAAEqY;AAAG,YAAAvD,KAAE9O,GAAE;AAAS,YAAAkP,KAAElP,GAAE;AAAc,YAAAA,KAAEA,GAAE;AAAS,gBAAG8O,OAAI1W,MAAGgE,GAAE,qBAAoB;AAAG,oBAAM;AAAE,eAAGA,IAAE4D,IAAEkP,EAAC;AAAE,YAAA9W,KAAE0W;AAAA,UAAC;AAAA,MAAC;AAAA,IAAC;AAAC,QAAG;AAAG,YAAMvW,KAAE,IAAG,KAAG,OAAG,KAAG,MAAKA;AAAA,EAAE;AAC5a,WAASoZ,IAAEpZ,IAAEC,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAI,eAAS,MAAI,IAAEA,GAAE,MAAI,oBAAI;AAAK,QAAIwB,KAAEzB,KAAE;AAAW,MAAE,IAAIyB,EAAC,MAAI,GAAGxB,IAAED,IAAE,GAAE,KAAE,GAAE,EAAE,IAAIyB,EAAC;AAAA,EAAE;AAAC,WAAS,GAAGzB,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE;AAAE,IAAAxB,OAAIwB,MAAG;AAAG,OAAG,GAAEzB,IAAEyB,IAAExB,EAAC;AAAA,EAAC;AAAC,MAAI,KAAG,oBAAkB,KAAK,OAAQ,EAAC,SAAS,EAAE,EAAE,MAAM,CAAC;AAAE,WAAS,GAAGD,IAAE;AAAC,QAAG,CAACA,GAAE,KAAI;AAAC,MAAAA,GAAE,MAAI;AAAG,SAAG,QAAQ,SAASC,IAAE;AAAC,8BAAoBA,OAAI,GAAG,IAAIA,EAAC,KAAG,GAAGA,IAAE,OAAGD,EAAC,GAAE,GAAGC,IAAE,MAAGD,EAAC;AAAA,MAAE,CAAC;AAAE,UAAIC,KAAE,MAAID,GAAE,WAASA,KAAEA,GAAE;AAAc,eAAOC,MAAGA,GAAE,QAAMA,GAAE,MAAI,MAAG,GAAG,mBAAkB,OAAGA,EAAC;AAAA,IAAE;AAAA,EAAC;AACjb,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,YAAO,GAAGxB,EAAC,GAAC;AAAA,MAAE,KAAK;AAAE,YAAI4D,KAAE;AAAG;AAAA,MAAM,KAAK;AAAE,QAAAA,KAAE;AAAG;AAAA,MAAM;AAAQ,QAAAA,KAAE;AAAA,IAAE;AAAC,QAAEA,GAAE,KAAK,MAAK5D,IAAE,GAAED,EAAC;AAAE,IAAA6D,KAAE;AAAO,KAAC,MAAI,iBAAe5D,MAAG,gBAAcA,MAAG,YAAUA,OAAI4D,KAAE;AAAI,IAAApC,KAAE,WAASoC,KAAE7D,GAAE,iBAAiBC,IAAE,GAAE,EAAC,SAAQ,MAAG,SAAQ4D,GAAC,CAAC,IAAE7D,GAAE,iBAAiBC,IAAE,GAAE,IAAE,IAAE,WAAS4D,KAAE7D,GAAE,iBAAiBC,IAAE,GAAE,EAAC,SAAQ4D,GAAC,CAAC,IAAE7D,GAAE,iBAAiBC,IAAE,GAAE,KAAE;AAAA,EAAC;AAClV,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAIhE,KAAE4B;AAAE,QAAG,OAAKxB,KAAE,MAAI,OAAKA,KAAE,MAAI,SAAOwB;AAAE;AAAE,mBAAO;AAAC,cAAG,SAAOA;AAAE;AAAO,cAAIqY,KAAErY,GAAE;AAAI,cAAG,MAAIqY,MAAG,MAAIA,IAAE;AAAC,gBAAIrS,KAAEhG,GAAE,UAAU;AAAc,gBAAGgG,OAAI5D,MAAG,MAAI4D,GAAE,YAAUA,GAAE,eAAa5D;AAAE;AAAM,gBAAG,MAAIiW;AAAE,mBAAIA,KAAErY,GAAE,QAAO,SAAOqY,MAAG;AAAC,oBAAIvD,KAAEuD,GAAE;AAAI,oBAAG,MAAIvD,MAAG,MAAIA;AAAE,sBAAGA,KAAEuD,GAAE,UAAU,eAAcvD,OAAI1S,MAAG,MAAI0S,GAAE,YAAUA,GAAE,eAAa1S;AAAE;AAAA;AAAO,gBAAAiW,KAAEA,GAAE;AAAA,cAAM;AAAC,mBAAK,SAAOrS,MAAG;AAAC,cAAAqS,KAAE,GAAGrS,EAAC;AAAE,kBAAG,SAAOqS;AAAE;AAAO,cAAAvD,KAAEuD,GAAE;AAAI,kBAAG,MAAIvD,MAAG,MAAIA,IAAE;AAAC,gBAAA9U,KAAE5B,KAAEia;AAAE,yBAAS;AAAA,cAAC;AAAC,cAAArS,KAAEA,GAAE;AAAA,YAAU;AAAA,UAAC;AAAC,UAAAhG,KAAEA,GAAE;AAAA,QAAM;AAAC,OAAG,WAAU;AAAC,UAAIA,KAAE5B,IAAEgE,KAAE,GAAG,CAAC,GAAEiW,KAAE,CAAA;AACpf,SAAE;AAAC,YAAIrS,KAAE,GAAG,IAAIzH,EAAC;AAAE,YAAG,WAASyH,IAAE;AAAC,cAAI8O,KAAE,IAAG7V,KAAEV;AAAE,kBAAOA;YAAG,KAAK;AAAW,kBAAG,MAAI,GAAG,CAAC;AAAE,sBAAM;AAAA,YAAE,KAAK;AAAA,YAAU,KAAK;AAAQ,cAAAuW,KAAE;AAAG;AAAA,YAAM,KAAK;AAAU,cAAA7V,KAAE;AAAQ,cAAA6V,KAAE;AAAG;AAAA,YAAM,KAAK;AAAW,cAAA7V,KAAE;AAAO,cAAA6V,KAAE;AAAG;AAAA,YAAM,KAAK;AAAA,YAAa,KAAK;AAAY,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAQ,kBAAG,MAAI,EAAE;AAAO,sBAAM;AAAA,YAAE,KAAK;AAAA,YAAW,KAAK;AAAA,YAAW,KAAK;AAAA,YAAY,KAAK;AAAA,YAAY,KAAK;AAAA,YAAU,KAAK;AAAA,YAAW,KAAK;AAAA,YAAY,KAAK;AAAc,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAA,YAAO,KAAK;AAAA,YAAU,KAAK;AAAA,YAAY,KAAK;AAAA,YAAW,KAAK;AAAA,YAAY,KAAK;AAAA,YAAW,KAAK;AAAA,YAAY,KAAK;AAAO,cAAAA,KAC1iB;AAAG;AAAA,YAAM,KAAK;AAAA,YAAc,KAAK;AAAA,YAAW,KAAK;AAAA,YAAY,KAAK;AAAa,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAA,YAAG,KAAK;AAAA,YAAG,KAAK;AAAG,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAG,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAS,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAQ,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAA,YAAO,KAAK;AAAA,YAAM,KAAK;AAAQ,cAAAA,KAAE;AAAG;AAAA,YAAM,KAAK;AAAA,YAAoB,KAAK;AAAA,YAAqB,KAAK;AAAA,YAAgB,KAAK;AAAA,YAAc,KAAK;AAAA,YAAc,KAAK;AAAA,YAAa,KAAK;AAAA,YAAc,KAAK;AAAY,cAAAA,KAAE;AAAA,UAAE;AAAC,cAAIyC,KAAE,OAAK/Y,KAAE,IAAGyZ,KAAE,CAACV,MAAG,aAAWhZ,IAAEsF,KAAE0T,KAAE,SAAOvR,KAAEA,KAAE,YAAU,OAAKA;AAAE,UAAAuR,KAAE,CAAE;AAAC,mBAAQtR,KAAEjG,IAAEsV,IAAE,SAC/erP,MAAG;AAAC,YAAAqP,KAAErP;AAAE,gBAAI4R,KAAEvC,GAAE;AAAU,kBAAIA,GAAE,OAAK,SAAOuC,OAAIvC,KAAEuC,IAAE,SAAOhU,OAAIgU,KAAE,GAAG5R,IAAEpC,EAAC,GAAE,QAAMgU,MAAGN,GAAE,KAAK,GAAGtR,IAAE4R,IAAEvC,EAAC,CAAC;AAAI,gBAAG2C;AAAE;AAAM,YAAAhS,KAAEA,GAAE;AAAA,UAAM;AAAC,cAAEsR,GAAE,WAASvR,KAAE,IAAI8O,GAAE9O,IAAE/G,IAAE,MAAK,GAAEmD,EAAC,GAAEiW,GAAE,KAAK,EAAC,OAAMrS,IAAE,WAAUuR,GAAC,CAAC;AAAA,QAAE;AAAA,MAAC;AAAC,UAAG,OAAK/Y,KAAE,IAAG;AAAC,WAAE;AAAC,UAAAwH,KAAE,gBAAczH,MAAG,kBAAgBA;AAAE,UAAAuW,KAAE,eAAavW,MAAG,iBAAeA;AAAE,cAAGyH,MAAG,MAAI,OAAK/G,KAAE,EAAE,iBAAe,EAAE,iBAAe,GAAGA,EAAC,KAAGA,GAAE;AAAK,kBAAM;AAAE,cAAG6V,MAAG9O,IAAE;AAAC,YAAAA,KAAE5D,GAAE,WAASA,KAAEA,MAAG4D,KAAE5D,GAAE,iBAAe4D,GAAE,eAAaA,GAAE,eAAa;AAAO,gBAAG8O,IAAE;AAAC,kBAAG7V,KAAE,EAAE,iBAAe,EAAE,WAAU6V,KAAE9U,IAAEf,KAAEA,KAAE,GAAGA,EAAC,IAAE,MAAK,SAC/eA,OAAIgZ,KAAE,GAAGhZ,EAAC,GAAEA,OAAIgZ,MAAG,MAAIhZ,GAAE,OAAK,MAAIA,GAAE;AAAK,gBAAAA,KAAE;AAAA,YAAI;AAAM,cAAA6V,KAAE,MAAK7V,KAAEe;AAAE,gBAAG8U,OAAI7V,IAAE;AAAC,cAAAsY,KAAE;AAAG,cAAAM,KAAE;AAAe,cAAAhU,KAAE;AAAe,cAAAoC,KAAE;AAAQ,kBAAG,iBAAe1H,MAAG,kBAAgBA;AAAE,gBAAAgZ,KAAE,IAAGM,KAAE,kBAAiBhU,KAAE,kBAAiBoC,KAAE;AAAU,cAAAgS,KAAE,QAAMnD,KAAE9O,KAAE,GAAG8O,EAAC;AAAE,cAAAQ,KAAE,QAAMrW,KAAE+G,KAAE,GAAG/G,EAAC;AAAE,cAAA+G,KAAE,IAAIuR,GAAEM,IAAE5R,KAAE,SAAQ6O,IAAE,GAAE1S,EAAC;AAAE,cAAA4D,GAAE,SAAOiS;AAAE,cAAAjS,GAAE,gBAAcsP;AAAE,cAAAuC,KAAE;AAAK,iBAAGzV,EAAC,MAAIpC,OAAIuX,KAAE,IAAIA,GAAE1T,IAAEoC,KAAE,SAAQhH,IAAE,GAAEmD,EAAC,GAAEmV,GAAE,SAAOjC,IAAEiC,GAAE,gBAAcU,IAAEJ,KAAEN;AAAG,cAAAU,KAAEJ;AAAE,kBAAG/C,MAAG7V;AAAE,mBAAE;AAAC,kBAAAsY,KAAEzC;AAAE,kBAAAjR,KAAE5E;AAAE,kBAAAgH,KAAE;AAAE,uBAAIqP,KAAEiC,IAAEjC,IAAEA,KAAE,GAAGA,EAAC;AAAE,oBAAArP;AAAI,kBAAAqP,KAAE;AAAE,uBAAIuC,KAAEhU,IAAEgU,IAAEA,KAAE,GAAGA,EAAC;AAAE,oBAAAvC;AAAI,yBAAK,IAAErP,KAAEqP;AAAG,oBAAAiC,KAAE,GAAGA,EAAC,GAAEtR;AAAI,yBAAK,IAAEqP,KAAErP;AAAG,oBAAApC,KACpf,GAAGA,EAAC,GAAEyR;AAAI,yBAAKrP,QAAK;AAAC,wBAAGsR,OAAI1T,MAAG,SAAOA,MAAG0T,OAAI1T,GAAE;AAAU,4BAAM;AAAE,oBAAA0T,KAAE,GAAGA,EAAC;AAAE,oBAAA1T,KAAE,GAAGA,EAAC;AAAA,kBAAC;AAAC,kBAAA0T,KAAE;AAAA,gBAAI;AAAA;AAAM,gBAAAA,KAAE;AAAK,uBAAOzC,MAAG,GAAGuD,IAAErS,IAAE8O,IAAEyC,IAAE,KAAE;AAAE,uBAAOtY,MAAG,SAAOgZ,MAAG,GAAGI,IAAEJ,IAAEhZ,IAAEsY,IAAE,IAAE;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAC,WAAE;AAAC,UAAAvR,KAAEhG,KAAE,GAAGA,EAAC,IAAE;AAAO,UAAA8U,KAAE9O,GAAE,YAAUA,GAAE,SAAS,YAAa;AAAC,cAAG,aAAW8O,MAAG,YAAUA,MAAG,WAAS9O,GAAE;AAAK,gBAAI,KAAG;AAAA,mBAAW,GAAGA,EAAC;AAAE,gBAAG;AAAG,mBAAG;AAAA,iBAAO;AAAC,mBAAG;AAAG,kBAAI,KAAG;AAAA,YAAE;AAAA;AAAK,aAAC8O,KAAE9O,GAAE,aAAW,YAAU8O,GAAE,YAAW,MAAK,eAAa9O,GAAE,QAAM,YAAUA,GAAE,UAAQ,KAAG;AAAI,cAAG,OAAK,KAAG,GAAGzH,IAAEyB,EAAC,IAAG;AAAC,eAAGqY,IAAE,IAAG,GAAEjW,EAAC;AAAE,kBAAM;AAAA,UAAC;AAAC,gBAAI,GAAG7D,IAAEyH,IAAEhG,EAAC;AAAE,yBAAazB,OAAI,KAAGyH,GAAE,kBAClf,GAAG,cAAY,aAAWA,GAAE,QAAM,GAAGA,IAAE,UAASA,GAAE,KAAK;AAAA,QAAC;AAAC,aAAGhG,KAAE,GAAGA,EAAC,IAAE;AAAO,gBAAOzB,IAAG;AAAA,UAAA,KAAK;AAAU,gBAAG,GAAG,EAAE,KAAG,WAAS,GAAG;AAAgB,mBAAG,IAAG,KAAGyB,IAAE,KAAG;AAAK;AAAA,UAAM,KAAK;AAAW,iBAAG,KAAG,KAAG;AAAK;AAAA,UAAM,KAAK;AAAY,iBAAG;AAAG;AAAA,UAAM,KAAK;AAAA,UAAc,KAAK;AAAA,UAAU,KAAK;AAAU,iBAAG;AAAG,eAAGqY,IAAE,GAAEjW,EAAC;AAAE;AAAA,UAAM,KAAK;AAAkB,gBAAG;AAAG;AAAA,UAAM,KAAK;AAAA,UAAU,KAAK;AAAQ,eAAGiW,IAAE,GAAEjW,EAAC;AAAA,QAAC;AAAC,YAAI;AAAG,YAAG;AAAG,aAAE;AAAC,oBAAO7D,IAAC;AAAA,cAAE,KAAK;AAAmB,oBAAI,KAAG;AAAqB,sBAAM;AAAA,cAAE,KAAK;AAAiB,qBAAG;AACpe,sBAAM;AAAA,cAAE,KAAK;AAAoB,qBAAG;AAAsB,sBAAM;AAAA,YAAC;AAAC,iBAAG;AAAA,UAAM;AAAA;AAAM,eAAG,GAAGA,IAAE,CAAC,MAAI,KAAG,sBAAoB,cAAYA,MAAG,QAAM,EAAE,YAAU,KAAG;AAAsB,eAAKya,QAAI,SAAO,EAAE,WAAS,MAAI,yBAAuB,KAAG,uBAAqB,MAAI,OAAK,KAAG,GAAI,MAAG,KAAG5W,IAAE,KAAG,WAAU,KAAG,GAAG,QAAM,GAAG,aAAY,KAAG,QAAK,KAAG,GAAGpC,IAAE,EAAE,GAAE,IAAE,GAAG,WAAS,KAAG,IAAI,GAAG,IAAGzB,IAAE,MAAK,GAAE6D,EAAC,GAAEiW,GAAE,KAAK,EAAC,OAAM,IAAG,WAAU,GAAE,CAAC,GAAE,KAAG,GAAG,OAAK,MAAI,KAAG,GAAG,CAAC,GAAE,SAAO,OAAK,GAAG,OAAK;AAAO,YAAG,KAAG,KAAG,GAAG9Z,IAAE,CAAC,IAAE,GAAGA,IAAE,CAAC;AAAE,UAAAyB,KAAE,GAAGA,IAAE,eAAe,GAC1f,IAAEA,GAAE,WAASoC,KAAE,IAAI,GAAG,iBAAgB,eAAc,MAAK,GAAEA,EAAC,GAAEiW,GAAE,KAAK,EAAC,OAAMjW,IAAE,WAAUpC,GAAC,CAAC,GAAEoC,GAAE,OAAK;AAAA,MAAG;AAAC,SAAGiW,IAAE7Z,EAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,WAAM,EAAC,UAASD,IAAE,UAASC,IAAE,eAAc,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,aAAQ,IAAEA,KAAE,WAAUwB,KAAE,CAAA,GAAG,SAAOzB,MAAG;AAAC,UAAI6D,KAAE7D,IAAEH,KAAEgE,GAAE;AAAU,YAAIA,GAAE,OAAK,SAAOhE,OAAIgE,KAAEhE,IAAEA,KAAE,GAAGG,IAAE,CAAC,GAAE,QAAMH,MAAG4B,GAAE,QAAQ,GAAGzB,IAAEH,IAAEgE,EAAC,CAAC,GAAEhE,KAAE,GAAGG,IAAEC,EAAC,GAAE,QAAMJ,MAAG4B,GAAE,KAAK,GAAGzB,IAAEH,IAAEgE,EAAC,CAAC;AAAG,MAAA7D,KAAEA,GAAE;AAAA,IAAM;AAAC,WAAOyB;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAE;AAAC,QAAG,SAAOA;AAAE,aAAO;AAAK;AAAG,MAAAA,KAAEA,GAAE;AAAA,WAAaA,MAAG,MAAIA,GAAE;AAAK,WAAOA,KAAEA,KAAE;AAAA,EAAI;AACnd,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,aAAQhE,KAAEI,GAAE,YAAW6Z,KAAE,CAAE,GAAC,SAAO,KAAG,MAAIrY,MAAG;AAAC,UAAIgG,KAAE,GAAE8O,KAAE9O,GAAE,WAAUkP,KAAElP,GAAE;AAAU,UAAG,SAAO8O,MAAGA,OAAI9U;AAAE;AAAM,YAAIgG,GAAE,OAAK,SAAOkP,OAAIlP,KAAEkP,IAAE9S,MAAG0S,KAAE,GAAG,GAAE1W,EAAC,GAAE,QAAM0W,MAAGuD,GAAE,QAAQ,GAAG,GAAEvD,IAAE9O,EAAC,CAAC,KAAG5D,OAAI0S,KAAE,GAAG,GAAE1W,EAAC,GAAE,QAAM0W,MAAGuD,GAAE,KAAK,GAAG,GAAEvD,IAAE9O,EAAC,CAAC;AAAI,UAAE,EAAE;AAAA,IAAM;AAAC,UAAIqS,GAAE,UAAQ9Z,GAAE,KAAK,EAAC,OAAMC,IAAE,WAAU6Z,GAAC,CAAC;AAAA,EAAC;AAAC,MAAI,KAAG,UAAS,KAAG;AAAiB,WAAS,GAAG9Z,IAAE;AAAC,YAAO,aAAW,OAAOA,KAAEA,KAAE,KAAGA,IAAG,QAAQ,IAAG,IAAI,EAAE,QAAQ,IAAG,EAAE;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,IAAAA,KAAE,GAAGA,EAAC;AAAE,QAAG,GAAGD,EAAC,MAAIC,MAAG;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAA,EAAE;AAAC,WAAS,KAAI;AAAA,EAAE;AAC/e,MAAI,KAAG,MAAK,KAAG;AAAK,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAM,eAAaD,MAAG,eAAaA,MAAG,aAAW,OAAOC,GAAE,YAAU,aAAW,OAAOA,GAAE,YAAU,aAAW,OAAOA,GAAE,2BAAyB,SAAOA,GAAE,2BAAyB,QAAMA,GAAE,wBAAwB;AAAA,EAAM;AAC5P,MAAI,KAAG,eAAa,OAAO,aAAW,aAAW,QAAO,KAAG,eAAa,OAAO,eAAa,eAAa,QAAO,KAAG,eAAa,OAAO,UAAQ,UAAQ,QAAO,KAAG,eAAa,OAAO,iBAAe,iBAAe,gBAAc,OAAO,KAAG,SAASD,IAAE;AAAC,WAAO,GAAG,QAAQ,IAAI,EAAE,KAAKA,EAAC,EAAE,MAAM,EAAE;AAAA,EAAC,IAAE;AAAG,WAAS,GAAGA,IAAE;AAAC,eAAW,WAAU;AAAC,YAAMA;AAAA,IAAE,CAAC;AAAA,EAAC;AACpV,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAEA,IAAEwB,KAAE;AAAE,OAAE;AAAC,UAAIoC,KAAE,EAAE;AAAY,MAAA7D,GAAE,YAAY,CAAC;AAAE,UAAG6D,MAAG,MAAIA,GAAE;AAAS,YAAG,IAAEA,GAAE,MAAK,SAAO,GAAE;AAAC,cAAG,MAAIpC,IAAE;AAAC,YAAAzB,GAAE,YAAY6D,EAAC;AAAE,eAAG5D,EAAC;AAAE;AAAA,UAAM;AAAC,UAAAwB;AAAA,QAAG;AAAK,kBAAM,KAAG,SAAO,KAAG,SAAO,KAAGA;AAAI,UAAEoC;AAAA,IAAC,SAAO;AAAG,OAAG5D,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,WAAK,QAAMA,IAAEA,KAAEA,GAAE,aAAY;AAAC,UAAIC,KAAED,GAAE;AAAS,UAAG,MAAIC,MAAG,MAAIA;AAAE;AAAM,UAAG,MAAIA,IAAE;AAAC,QAAAA,KAAED,GAAE;AAAK,YAAG,QAAMC,MAAG,SAAOA,MAAG,SAAOA;AAAE;AAAM,YAAG,SAAOA;AAAE,iBAAO;AAAA,MAAI;AAAA,IAAC;AAAC,WAAOD;AAAA,EAAC;AACjY,WAAS,GAAGA,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAgB,aAAQC,KAAE,GAAED,MAAG;AAAC,UAAG,MAAIA,GAAE,UAAS;AAAC,YAAI,IAAEA,GAAE;AAAK,YAAG,QAAM,KAAG,SAAO,KAAG,SAAO,GAAE;AAAC,cAAG,MAAIC;AAAE,mBAAOD;AAAE,UAAAC;AAAA,QAAG;AAAK,mBAAO,KAAGA;AAAA,MAAG;AAAC,MAAAD,KAAEA,GAAE;AAAA,IAAe;AAAC,WAAO;AAAA,EAAI;AAAC,MAAI,KAAG,KAAK,OAAQ,EAAC,SAAS,EAAE,EAAE,MAAM,CAAC,GAAE,KAAG,kBAAgB,IAAG,KAAG,kBAAgB,IAAG,KAAG,sBAAoB,IAAG,KAAG,mBAAiB,IAAG,KAAG,sBAAoB,IAAG,KAAG,oBAAkB;AAClX,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAI,QAAGC;AAAE,aAAOA;AAAE,aAAQ,IAAED,GAAE,YAAW,KAAG;AAAC,UAAGC,KAAE,EAAE,OAAK,EAAE,KAAI;AAAC,YAAEA,GAAE;AAAU,YAAG,SAAOA,GAAE,SAAO,SAAO,KAAG,SAAO,EAAE;AAAM,eAAID,KAAE,GAAGA,EAAC,GAAE,SAAOA,MAAG;AAAC,gBAAG,IAAEA,GAAE;AAAI,qBAAO;AAAE,YAAAA,KAAE,GAAGA,EAAC;AAAA,UAAC;AAAC,eAAOC;AAAA,MAAC;AAAC,MAAAD,KAAE;AAAE,UAAEA,GAAE;AAAA,IAAU;AAAC,WAAO;AAAA,EAAI;AAAC,WAAS,GAAGA,IAAE;AAAC,IAAAA,KAAEA,GAAE,OAAKA,GAAE;AAAI,WAAM,CAACA,MAAG,MAAIA,GAAE,OAAK,MAAIA,GAAE,OAAK,OAAKA,GAAE,OAAK,MAAIA,GAAE,MAAI,OAAKA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAG,MAAIA,GAAE,OAAK,MAAIA,GAAE;AAAI,aAAOA,GAAE;AAAU,UAAM,MAAM,EAAE,EAAE,CAAC;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,WAAOA,GAAE,OAAK;AAAA,EAAI;AAAC,MAAI,KAAG,CAAE,GAAC,KAAG;AAAG,WAAS,GAAGA,IAAE;AAAC,WAAM,EAAC,SAAQA,GAAC;AAAA,EAAC;AACve,WAASqZ,IAAErZ,IAAE;AAAC,QAAE,OAAKA,GAAE,UAAQ,GAAG,KAAI,GAAG,MAAI,MAAK;AAAA,EAAK;AAAC,WAASuZ,IAAEvZ,IAAEC,IAAE;AAAC;AAAK,OAAG,MAAID,GAAE;AAAQ,IAAAA,GAAE,UAAQC;AAAA,EAAC;AAAC,MAAI,KAAG,CAAA,GAAGuZ,MAAE,GAAG,EAAE,GAAE,KAAG,GAAG,KAAE,GAAE,KAAG;AAAG,WAAS,GAAGxZ,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,KAAK;AAAa,QAAG,CAAC;AAAE,aAAO;AAAG,QAAIyB,KAAEzB,GAAE;AAAU,QAAGyB,MAAGA,GAAE,gDAA8CxB;AAAE,aAAOwB,GAAE;AAA0C,QAAIoC,KAAE,CAAE,GAAChE;AAAE,SAAIA,MAAK;AAAE,MAAAgE,GAAEhE,MAAGI,GAAEJ;AAAG,IAAA4B,OAAIzB,KAAEA,GAAE,WAAUA,GAAE,8CAA4CC,IAAED,GAAE,4CAA0C6D;AAAG,WAAOA;AAAA,EAAC;AAC9d,WAAS,GAAG7D,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAkB,WAAO,SAAOA,MAAG,WAASA;AAAA,EAAC;AAAC,WAAS,KAAI;AAACqZ,QAAE,EAAE;AAAEA,QAAEG,GAAC;AAAA,EAAC;AAAC,WAAS,GAAGxZ,IAAEC,IAAE,GAAE;AAAC,QAAGuZ,IAAE,YAAU;AAAG,YAAM,MAAM,EAAE,GAAG,CAAC;AAAED,QAAEC,KAAEvZ,EAAC;AAAEsZ,QAAE,IAAG,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGvZ,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAU,IAAAC,KAAEA,GAAE;AAAkB,QAAG,eAAa,OAAOwB,GAAE;AAAgB,aAAO;AAAE,IAAAA,KAAEA,GAAE,gBAAe;AAAG,aAAQoC,MAAKpC;AAAE,UAAG,EAAEoC,MAAK5D;AAAG,cAAM,MAAM,EAAE,KAAI,GAAGD,EAAC,KAAG,WAAU6D,EAAC,CAAC;AAAE,WAAOoV,IAAE,IAAG,GAAExX,EAAC;AAAA,EAAC;AACxX,WAAS,GAAGzB,IAAE;AAAC,IAAAA,MAAGA,KAAEA,GAAE,cAAYA,GAAE,6CAA2C;AAAG,SAAGwZ,IAAE;AAAQD,QAAEC,KAAExZ,EAAC;AAAEuZ,QAAE,IAAG,GAAG,OAAO;AAAE,WAAM;AAAA,EAAE;AAAC,WAAS,GAAGvZ,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAU,QAAG,CAACyB;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,SAAGzB,KAAE,GAAGA,IAAEC,IAAE,EAAE,GAAEwB,GAAE,4CAA0CzB,IAAEqZ,IAAE,EAAE,GAAEA,IAAEG,GAAC,GAAED,IAAEC,KAAExZ,EAAC,KAAGqZ,IAAE,EAAE;AAAEE,QAAE,IAAG,CAAC;AAAA,EAAC;AAAC,MAAI,KAAG,MAAK,KAAG,OAAG,KAAG;AAAG,WAAS,GAAGvZ,IAAE;AAAC,aAAO,KAAG,KAAG,CAACA,EAAC,IAAE,GAAG,KAAKA,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,SAAG;AAAG,OAAGA,EAAC;AAAA,EAAC;AAC3X,WAAS,KAAI;AAAC,QAAG,CAAC,MAAI,SAAO,IAAG;AAAC,WAAG;AAAG,UAAIA,KAAE,GAAEC,KAAEkZ;AAAE,UAAG;AAAC,YAAI,IAAE;AAAG,aAAIA,MAAE,GAAEnZ,KAAE,EAAE,QAAOA,MAAI;AAAC,cAAIyB,KAAE,EAAEzB;AAAG;AAAG,YAAAyB,KAAEA,GAAE,IAAE;AAAA,iBAAQ,SAAOA;AAAA,QAAE;AAAC,aAAG;AAAK,aAAG;AAAA,MAAE,SAAOoC,IAAN;AAAS,cAAM,SAAO,OAAK,KAAG,GAAG,MAAM7D,KAAE,CAAC,IAAG,GAAG,IAAG,EAAE,GAAE6D;AAAA,MAAE,UAAC;AAAQsV,cAAElZ,IAAE,KAAG;AAAA,MAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAI;AAAC,MAAI,KAAG,CAAA,GAAG,KAAG,GAAE,KAAG,MAAK,KAAG,GAAE,KAAG,CAAA,GAAG,KAAG,GAAE,KAAG,MAAK,KAAG,GAAE,KAAG;AAAG,WAAS,GAAGD,IAAEC,IAAE;AAAC,OAAG,QAAM;AAAG,OAAG,QAAM;AAAG,SAAGD;AAAE,SAAGC;AAAA,EAAC;AACjV,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,OAAG,QAAM;AAAG,OAAG,QAAM;AAAG,OAAG,QAAM;AAAG,SAAGD;AAAE,QAAIyB,KAAE;AAAG,IAAAzB,KAAE;AAAG,QAAI6D,KAAE,KAAG,GAAGpC,EAAC,IAAE;AAAE,IAAAA,MAAG,EAAE,KAAGoC;AAAG,SAAG;AAAE,QAAIhE,KAAE,KAAG,GAAGI,EAAC,IAAE4D;AAAE,QAAG,KAAGhE,IAAE;AAAC,UAAIia,KAAEjW,KAAEA,KAAE;AAAE,MAAAhE,MAAG4B,MAAG,KAAGqY,MAAG,GAAG,SAAS,EAAE;AAAE,MAAArY,OAAIqY;AAAE,MAAAjW,MAAGiW;AAAE,WAAG,KAAG,KAAG,GAAG7Z,EAAC,IAAE4D,KAAE,KAAGA,KAAEpC;AAAE,WAAG5B,KAAEG;AAAA,IAAC;AAAM,WAAG,KAAGH,KAAE,KAAGgE,KAAEpC,IAAE,KAAGzB;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,aAAOA,GAAE,WAAS,GAAGA,IAAE,CAAC,GAAE,GAAGA,IAAE,GAAE,CAAC;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,WAAKA,OAAI;AAAI,WAAG,GAAG,EAAE,KAAI,GAAG,MAAI,MAAK,KAAG,GAAG,EAAE,KAAI,GAAG,MAAI;AAAK,WAAKA,OAAI;AAAI,WAAG,GAAG,EAAE,KAAI,GAAG,MAAI,MAAK,KAAG,GAAG,EAAE,KAAI,GAAG,MAAI,MAAK,KAAG,GAAG,EAAE,KAAI,GAAG,MAAI;AAAA,EAAI;AAAC,MAAI,KAAG,MAAK,KAAG,MAAKyZ,MAAE,OAAG,KAAG;AACje,WAAS,GAAGzZ,IAAEC,IAAE;AAAC,QAAI,IAAE,GAAG,GAAE,MAAK,MAAK,CAAC;AAAE,MAAE,cAAY;AAAU,MAAE,YAAUA;AAAE,MAAE,SAAOD;AAAE,IAAAC,KAAED,GAAE;AAAU,aAAOC,MAAGD,GAAE,YAAU,CAAC,CAAC,GAAEA,GAAE,SAAO,MAAIC,GAAE,KAAK,CAAC;AAAA,EAAC;AACxJ,WAAS,GAAGD,IAAEC,IAAE;AAAC,YAAOD,GAAE;MAAK,KAAK;AAAE,YAAI,IAAEA,GAAE;AAAK,QAAAC,KAAE,MAAIA,GAAE,YAAU,EAAE,YAAW,MAAKA,GAAE,SAAS,YAAW,IAAG,OAAKA;AAAE,eAAO,SAAOA,MAAGD,GAAE,YAAUC,IAAE,KAAGD,IAAE,KAAG,GAAGC,GAAE,UAAU,GAAE,QAAI;AAAA,MAAG,KAAK;AAAE,eAAOA,KAAE,OAAKD,GAAE,gBAAc,MAAIC,GAAE,WAAS,OAAKA,IAAE,SAAOA,MAAGD,GAAE,YAAUC,IAAE,KAAGD,IAAE,KAAG,MAAK,QAAI;AAAA,MAAG,KAAK;AAAG,eAAOC,KAAE,MAAIA,GAAE,WAAS,OAAKA,IAAE,SAAOA,MAAG,IAAE,SAAO,KAAG,EAAC,IAAG,IAAG,UAAS,GAAE,IAAE,MAAKD,GAAE,gBAAc,EAAC,YAAWC,IAAE,aAAY,GAAE,WAAU,WAAU,GAAE,IAAE,GAAG,IAAG,MAAK,MAAK,CAAC,GAAE,EAAE,YAAUA,IAAE,EAAE,SAAOD,IAAEA,GAAE,QAAM,GAAE,KAAGA,IAAE,KAClf,MAAK,QAAI;AAAA,MAAG;AAAQ,eAAM;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,WAAO,OAAKA,GAAE,OAAK,MAAI,OAAKA,GAAE,QAAM;AAAA,EAAI;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAGyZ,KAAE;AAAC,UAAIxZ,KAAE;AAAG,UAAGA,IAAE;AAAC,YAAI,IAAEA;AAAE,YAAG,CAAC,GAAGD,IAAEC,EAAC,GAAE;AAAC,cAAG,GAAGD,EAAC;AAAE,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAAC,KAAE,GAAG,EAAE,WAAW;AAAE,cAAIwB,KAAE;AAAG,UAAAxB,MAAG,GAAGD,IAAEC,EAAC,IAAE,GAAGwB,IAAE,CAAC,KAAGzB,GAAE,QAAMA,GAAE,QAAM,QAAM,GAAEyZ,MAAE,OAAG,KAAGzZ;AAAA,QAAE;AAAA,MAAC,OAAK;AAAC,YAAG,GAAGA,EAAC;AAAE,gBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAAA,GAAE,QAAMA,GAAE,QAAM,QAAM;AAAEyZ,cAAE;AAAG,aAAGzZ;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,SAAIA,KAAEA,GAAE,QAAO,SAAOA,MAAG,MAAIA,GAAE,OAAK,MAAIA,GAAE,OAAK,OAAKA,GAAE;AAAK,MAAAA,KAAEA,GAAE;AAAO,SAAGA;AAAA,EAAC;AACha,WAAS,GAAGA,IAAE;AAAC,QAAGA,OAAI;AAAG,aAAM;AAAG,QAAG,CAACyZ;AAAE,aAAO,GAAGzZ,EAAC,GAAEyZ,MAAE,MAAG;AAAG,QAAIxZ;AAAE,KAACA,KAAE,MAAID,GAAE,QAAM,EAAEC,KAAE,MAAID,GAAE,SAAOC,KAAED,GAAE,MAAKC,KAAE,WAASA,MAAG,WAASA,MAAG,CAAC,GAAGD,GAAE,MAAKA,GAAE,aAAa;AAAG,QAAGC,OAAIA,KAAE,KAAI;AAAC,UAAG,GAAGD,EAAC;AAAE,cAAM,GAAI,GAAC,MAAM,EAAE,GAAG,CAAC;AAAE,aAAKC;AAAG,WAAGD,IAAEC,EAAC,GAAEA,KAAE,GAAGA,GAAE,WAAW;AAAA,IAAC;AAAC,OAAGD,EAAC;AAAE,QAAG,OAAKA,GAAE,KAAI;AAAC,MAAAA,KAAEA,GAAE;AAAc,MAAAA,KAAE,SAAOA,KAAEA,GAAE,aAAW;AAAK,UAAG,CAACA;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,SAAE;AAAC,QAAAA,KAAEA,GAAE;AAAY,aAAIC,KAAE,GAAED,MAAG;AAAC,cAAG,MAAIA,GAAE,UAAS;AAAC,gBAAI,IAAEA,GAAE;AAAK,gBAAG,SAAO,GAAE;AAAC,kBAAG,MAAIC,IAAE;AAAC,qBAAG,GAAGD,GAAE,WAAW;AAAE,sBAAM;AAAA,cAAC;AAAC,cAAAC;AAAA,YAAG;AAAK,sBAAM,KAAG,SAAO,KAAG,SAAO,KAAGA;AAAA,UAAG;AAAC,UAAAD,KAAEA,GAAE;AAAA,QAAW;AAAC,aACjgB;AAAA,MAAI;AAAA,IAAC;AAAM,WAAG,KAAG,GAAGA,GAAE,UAAU,WAAW,IAAE;AAAK,WAAM;AAAA,EAAE;AAAC,WAAS,KAAI;AAAC,aAAQA,KAAE,IAAGA;AAAG,MAAAA,KAAE,GAAGA,GAAE,WAAW;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,SAAG,KAAG;AAAKyZ,UAAE;AAAA,EAAE;AAAC,WAAS,GAAGzZ,IAAE;AAAC,aAAO,KAAG,KAAG,CAACA,EAAC,IAAE,GAAG,KAAKA,EAAC;AAAA,EAAC;AAAC,MAAI,KAAG,GAAG;AAAwB,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAGD,MAAGA,GAAE,cAAa;AAAC,MAAAC,KAAEgZ,IAAE,IAAGhZ,EAAC;AAAE,MAAAD,KAAEA,GAAE;AAAa,eAAQ,KAAKA;AAAE,mBAASC,GAAE,OAAKA,GAAE,KAAGD,GAAE;AAAI,aAAOC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAC,MAAI,KAAG,GAAG,IAAI,GAAE,KAAG,MAAK,KAAG,MAAK,KAAG;AAAK,WAAS,KAAI;AAAC,SAAG,KAAG,KAAG;AAAA,EAAI;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAE,GAAG;AAAQoZ,QAAE,EAAE;AAAE,IAAArZ,GAAE,gBAAcC;AAAA,EAAC;AACjd,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,WAAK,SAAOD,MAAG;AAAC,UAAIyB,KAAEzB,GAAE;AAAU,OAACA,GAAE,aAAWC,QAAKA,MAAGD,GAAE,cAAYC,IAAE,SAAOwB,OAAIA,GAAE,cAAYxB,OAAI,SAAOwB,OAAIA,GAAE,aAAWxB,QAAKA,OAAIwB,GAAE,cAAYxB;AAAG,UAAGD,OAAI;AAAE;AAAM,MAAAA,KAAEA,GAAE;AAAA,IAAM;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,SAAGD;AAAE,SAAG,KAAG;AAAK,IAAAA,KAAEA,GAAE;AAAa,aAAOA,MAAG,SAAOA,GAAE,iBAAe,OAAKA,GAAE,QAAMC,QAAK,KAAG,OAAID,GAAE,eAAa;AAAA,EAAK;AACtU,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAc,QAAG,OAAKA;AAAE,UAAGA,KAAE,EAAC,SAAQA,IAAE,eAAcC,IAAE,MAAK,KAAI,GAAE,SAAO,IAAG;AAAC,YAAG,SAAO;AAAG,gBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAGD;AAAE,WAAG,eAAa,EAAC,OAAM,GAAE,cAAaA,GAAC;AAAA,MAAC;AAAM,aAAG,GAAG,OAAKA;AAAE,WAAOC;AAAA,EAAC;AAAC,MAAI,KAAG;AAAK,WAAS,GAAGD,IAAE;AAAC,aAAO,KAAG,KAAG,CAACA,EAAC,IAAE,GAAG,KAAKA,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE5D,GAAE;AAAY,aAAO4D,MAAG,EAAE,OAAK,GAAE,GAAG5D,EAAC,MAAI,EAAE,OAAK4D,GAAE,MAAKA,GAAE,OAAK;AAAG,IAAA5D,GAAE,cAAY;AAAE,WAAO,GAAGD,IAAEyB,EAAC;AAAA,EAAC;AAChY,WAAS,GAAGzB,IAAEC,IAAE;AAAC,IAAAD,GAAE,SAAOC;AAAE,QAAI,IAAED,GAAE;AAAU,aAAO,MAAI,EAAE,SAAOC;AAAG,QAAED;AAAE,SAAIA,KAAEA,GAAE,QAAO,SAAOA;AAAG,MAAAA,GAAE,cAAYC,IAAE,IAAED,GAAE,WAAU,SAAO,MAAI,EAAE,cAAYC,KAAG,IAAED,IAAEA,KAAEA,GAAE;AAAO,WAAO,MAAI,EAAE,MAAI,EAAE,YAAU;AAAA,EAAI;AAAC,MAAI,KAAG;AAAG,WAAS,GAAGA,IAAE;AAAC,IAAAA,GAAE,cAAY,EAAC,WAAUA,GAAE,eAAc,iBAAgB,MAAK,gBAAe,MAAK,QAAO,EAAC,SAAQ,MAAK,aAAY,MAAK,OAAM,EAAC,GAAE,SAAQ,KAAI;AAAA,EAAC;AACpX,WAAS,GAAGA,IAAEC,IAAE;AAAC,IAAAD,KAAEA,GAAE;AAAY,IAAAC,GAAE,gBAAcD,OAAIC,GAAE,cAAY,EAAC,WAAUD,GAAE,WAAU,iBAAgBA,GAAE,iBAAgB,gBAAeA,GAAE,gBAAe,QAAOA,GAAE,QAAO,SAAQA,GAAE,QAAO;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,WAAM,EAAC,WAAUD,IAAE,MAAKC,IAAE,KAAI,GAAE,SAAQ,MAAK,UAAS,MAAK,MAAK,KAAI;AAAA,EAAC;AACtR,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAY,QAAG,SAAOyB;AAAE,aAAO;AAAK,IAAAA,KAAEA,GAAE;AAAO,QAAG,OAAKkY,MAAE,IAAG;AAAC,UAAI9V,KAAEpC,GAAE;AAAQ,eAAOoC,KAAE5D,GAAE,OAAKA,MAAGA,GAAE,OAAK4D,GAAE,MAAKA,GAAE,OAAK5D;AAAG,MAAAwB,GAAE,UAAQxB;AAAE,aAAO,GAAGD,IAAE,CAAC;AAAA,IAAC;AAAC,IAAA6D,KAAEpC,GAAE;AAAY,aAAOoC,MAAG5D,GAAE,OAAKA,IAAE,GAAGwB,EAAC,MAAIxB,GAAE,OAAK4D,GAAE,MAAKA,GAAE,OAAK5D;AAAG,IAAAwB,GAAE,cAAYxB;AAAE,WAAO,GAAGD,IAAE,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,IAAAA,KAAEA,GAAE;AAAY,QAAG,SAAOA,OAAIA,KAAEA,GAAE,QAAO,OAAK,IAAE,WAAU;AAAC,UAAIwB,KAAExB,GAAE;AAAM,MAAAwB,MAAGzB,GAAE;AAAa,WAAGyB;AAAE,MAAAxB,GAAE,QAAM;AAAE,SAAGD,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AACrZ,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,aAAYyB,KAAEzB,GAAE;AAAU,QAAG,SAAOyB,OAAIA,KAAEA,GAAE,aAAY,MAAIA,KAAG;AAAC,UAAIoC,KAAE,MAAKhE,KAAE;AAAK,UAAE,EAAE;AAAgB,UAAG,SAAO,GAAE;AAAC,WAAE;AAAC,cAAIia,KAAE,EAAC,WAAU,EAAE,WAAU,MAAK,EAAE,MAAK,KAAI,EAAE,KAAI,SAAQ,EAAE,SAAQ,UAAS,EAAE,UAAS,MAAK,KAAI;AAAE,mBAAOja,KAAEgE,KAAEhE,KAAEia,KAAEja,KAAEA,GAAE,OAAKia;AAAE,cAAE,EAAE;AAAA,QAAI,SAAO,SAAO;AAAG,iBAAOja,KAAEgE,KAAEhE,KAAEI,KAAEJ,KAAEA,GAAE,OAAKI;AAAA,MAAC;AAAM,QAAA4D,KAAEhE,KAAEI;AAAE,UAAE,EAAC,WAAUwB,GAAE,WAAU,iBAAgBoC,IAAE,gBAAehE,IAAE,QAAO4B,GAAE,QAAO,SAAQA,GAAE,QAAO;AAAE,MAAAzB,GAAE,cAAY;AAAE;AAAA,IAAM;AAAC,IAAAA,KAAE,EAAE;AAAe,aAAOA,KAAE,EAAE,kBAAgBC,KAAED,GAAE,OACnfC;AAAE,MAAE,iBAAeA;AAAA,EAAC;AACpB,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE7D,GAAE;AAAY,SAAG;AAAG,QAAIH,KAAEgE,GAAE,iBAAgBiW,KAAEjW,GAAE,gBAAe4D,KAAE5D,GAAE,OAAO;AAAQ,QAAG,SAAO4D,IAAE;AAAC,MAAA5D,GAAE,OAAO,UAAQ;AAAK,UAAI0S,KAAE9O,IAAEkP,KAAEJ,GAAE;AAAK,MAAAA,GAAE,OAAK;AAAK,eAAOuD,KAAEja,KAAE8W,KAAEmD,GAAE,OAAKnD;AAAE,MAAAmD,KAAEvD;AAAE,UAAIzU,KAAE9B,GAAE;AAAU,eAAO8B,OAAIA,KAAEA,GAAE,aAAY2F,KAAE3F,GAAE,gBAAe2F,OAAIqS,OAAI,SAAOrS,KAAE3F,GAAE,kBAAgB6U,KAAElP,GAAE,OAAKkP,IAAE7U,GAAE,iBAAeyU;AAAA,IAAG;AAAC,QAAG,SAAO1W,IAAE;AAAC,UAAIkZ,KAAElV,GAAE;AAAU,MAAAiW,KAAE;AAAE,MAAAhY,KAAE6U,KAAEJ,KAAE;AAAK,MAAA9O,KAAE5H;AAAE,SAAE;AAAC,YAAIoD,KAAEwE,GAAE,MAAKlC,KAAEkC,GAAE;AAAU,aAAIhG,KAAEwB,QAAKA,IAAE;AAAC,mBAAOnB,OAAIA,KAAEA,GAAE,OAAK;AAAA,YAAC,WAAUyD;AAAA,YAAE,MAAK;AAAA,YAAE,KAAIkC,GAAE;AAAA,YAAI,SAAQA,GAAE;AAAA,YAAQ,UAASA,GAAE;AAAA,YACvf,MAAK;AAAA,UAAI;AAAG,aAAE;AAAC,gBAAI/G,KAAEV,IAAEgZ,KAAEvR;AAAE,YAAAxE,KAAEhD;AAAE,YAAAsF,KAAE;AAAE,oBAAOyT,GAAE,KAAG;AAAA,cAAE,KAAK;AAAE,gBAAAtY,KAAEsY,GAAE;AAAQ,oBAAG,eAAa,OAAOtY,IAAE;AAAC,kBAAAqY,KAAErY,GAAE,KAAK6E,IAAEwT,IAAE9V,EAAC;AAAE,wBAAM;AAAA,gBAAC;AAAC,gBAAA8V,KAAErY;AAAE,sBAAM;AAAA,cAAE,KAAK;AAAE,gBAAAA,GAAE,QAAMA,GAAE,QAAM,SAAO;AAAA,cAAI,KAAK;AAAE,gBAAAA,KAAEsY,GAAE;AAAQ,gBAAA/V,KAAE,eAAa,OAAOvC,KAAEA,GAAE,KAAK6E,IAAEwT,IAAE9V,EAAC,IAAEvC;AAAE,oBAAG,SAAOuC,MAAG,WAASA;AAAE,wBAAM;AAAE,gBAAA8V,KAAEE,IAAE,CAAE,GAACF,IAAE9V,EAAC;AAAE,sBAAM;AAAA,cAAE,KAAK;AAAE,qBAAG;AAAA,YAAE;AAAA,UAAC;AAAC,mBAAOwE,GAAE,YAAU,MAAIA,GAAE,SAAOzH,GAAE,SAAO,IAAGiD,KAAEY,GAAE,SAAQ,SAAOZ,KAAEY,GAAE,UAAQ,CAAC4D,EAAC,IAAExE,GAAE,KAAKwE,EAAC;AAAA,QAAE;AAAM,UAAAlC,KAAE,EAAC,WAAUA,IAAE,MAAKtC,IAAE,KAAIwE,GAAE,KAAI,SAAQA,GAAE,SAAQ,UAASA,GAAE,UAAS,MAAK,KAAI,GAAE,SAAO3F,MAAG6U,KAAE7U,KAAEyD,IAAEgR,KAAEwC,MAAGjX,KAAEA,GAAE,OAAKyD,IAAEuU,MAAG7W;AACpf,QAAAwE,KAAEA,GAAE;AAAK,YAAG,SAAOA;AAAE,cAAGA,KAAE5D,GAAE,OAAO,SAAQ,SAAO4D;AAAE;AAAA;AAAW,YAAAxE,KAAEwE,IAAEA,KAAExE,GAAE,MAAKA,GAAE,OAAK,MAAKY,GAAE,iBAAeZ,IAAEY,GAAE,OAAO,UAAQ;AAAA,MAAI,SAAO;AAAG,eAAO/B,OAAIyU,KAAEwC;AAAG,MAAAlV,GAAE,YAAU0S;AAAE,MAAA1S,GAAE,kBAAgB8S;AAAE,MAAA9S,GAAE,iBAAe/B;AAAE,MAAA7B,KAAE4D,GAAE,OAAO;AAAY,UAAG,SAAO5D,IAAE;AAAC,QAAA4D,KAAE5D;AAAE;AAAG,UAAA6Z,MAAGjW,GAAE,MAAKA,KAAEA,GAAE;AAAA,eAAWA,OAAI5D;AAAA,MAAE;AAAM,iBAAOJ,OAAIgE,GAAE,OAAO,QAAM;AAAG,YAAIiW;AAAE,MAAA9Z,GAAE,QAAM8Z;AAAE,MAAA9Z,GAAE,gBAAc+Y;AAAA,IAAC;AAAA,EAAC;AAC9V,WAAS,GAAG/Y,IAAEC,IAAE,GAAE;AAAC,IAAAD,KAAEC,GAAE;AAAQ,IAAAA,GAAE,UAAQ;AAAK,QAAG,SAAOD;AAAE,WAAIC,KAAE,GAAEA,KAAED,GAAE,QAAOC,MAAI;AAAC,YAAIwB,KAAEzB,GAAEC,KAAG4D,KAAEpC,GAAE;AAAS,YAAG,SAAOoC,IAAE;AAAC,UAAApC,GAAE,WAAS;AAAK,UAAAA,KAAE;AAAE,cAAG,eAAa,OAAOoC;AAAE,kBAAM,MAAM,EAAE,KAAIA,EAAC,CAAC;AAAE,UAAAA,GAAE,KAAKpC,EAAC;AAAA,QAAC;AAAA,MAAC;AAAA,EAAC;AAAC,MAAI,KAAI,IAAI,GAAG,YAAW;AAAK,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAxB,KAAED,GAAE;AAAc,QAAE,EAAEyB,IAAExB,EAAC;AAAE,QAAE,SAAO,KAAG,WAAS,IAAEA,KAAEgZ,IAAE,IAAGhZ,IAAE,CAAC;AAAE,IAAAD,GAAE,gBAAc;AAAE,UAAIA,GAAE,UAAQA,GAAE,YAAY,YAAU;AAAA,EAAE;AAClX,MAAI,KAAG,EAAC,WAAU,SAASA,IAAE;AAAC,YAAOA,KAAEA,GAAE,mBAAiB,GAAGA,EAAC,MAAIA,KAAE;AAAA,EAAE,GAAE,iBAAgB,SAASA,IAAEC,IAAE,GAAE;AAAC,IAAAD,KAAEA,GAAE;AAAgB,QAAIyB,KAAEmY,IAAC,GAAG/V,KAAE,GAAG7D,EAAC,GAAEH,KAAE,GAAG4B,IAAEoC,EAAC;AAAE,IAAAhE,GAAE,UAAQI;AAAE,eAAS,KAAG,SAAO,MAAIJ,GAAE,WAAS;AAAG,IAAAI,KAAE,GAAGD,IAAEH,IAAEgE,EAAC;AAAE,aAAO5D,OAAI,GAAGA,IAAED,IAAE6D,IAAEpC,EAAC,GAAE,GAAGxB,IAAED,IAAE6D,EAAC;AAAA,EAAE,GAAE,qBAAoB,SAAS7D,IAAEC,IAAE,GAAE;AAAC,IAAAD,KAAEA,GAAE;AAAgB,QAAIyB,KAAEmY,IAAG,GAAC/V,KAAE,GAAG7D,EAAC,GAAEH,KAAE,GAAG4B,IAAEoC,EAAC;AAAE,IAAAhE,GAAE,MAAI;AAAE,IAAAA,GAAE,UAAQI;AAAE,eAAS,KAAG,SAAO,MAAIJ,GAAE,WAAS;AAAG,IAAAI,KAAE,GAAGD,IAAEH,IAAEgE,EAAC;AAAE,aAAO5D,OAAI,GAAGA,IAAED,IAAE6D,IAAEpC,EAAC,GAAE,GAAGxB,IAAED,IAAE6D,EAAC;AAAA,EAAE,GAAE,oBAAmB,SAAS7D,IAAEC,IAAE;AAAC,IAAAD,KAAEA,GAAE;AAAgB,QAAI,IAAE4Z,IAAG,GAACnY,KACnf,GAAGzB,EAAC,GAAE6D,KAAE,GAAG,GAAEpC,EAAC;AAAE,IAAAoC,GAAE,MAAI;AAAE,eAAS5D,MAAG,SAAOA,OAAI4D,GAAE,WAAS5D;AAAG,IAAAA,KAAE,GAAGD,IAAE6D,IAAEpC,EAAC;AAAE,aAAOxB,OAAI,GAAGA,IAAED,IAAEyB,IAAE,CAAC,GAAE,GAAGxB,IAAED,IAAEyB,EAAC;AAAA,EAAE,EAAC;AAAE,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAE;AAAC,IAAA9Z,KAAEA,GAAE;AAAU,WAAM,eAAa,OAAOA,GAAE,wBAAsBA,GAAE,sBAAsByB,IAAE5B,IAAEia,EAAC,IAAE7Z,GAAE,aAAWA,GAAE,UAAU,uBAAqB,CAAC,GAAG,GAAEwB,EAAC,KAAG,CAAC,GAAGoC,IAAEhE,EAAC,IAAE;AAAA,EAAE;AAC1S,WAAS,GAAGG,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE,OAAGoC,KAAE;AAAG,QAAIhE,KAAEI,GAAE;AAAY,iBAAW,OAAOJ,MAAG,SAAOA,KAAEA,KAAE,GAAGA,EAAC,KAAGgE,KAAE,GAAG5D,EAAC,IAAE,KAAGuZ,IAAE,SAAQ/X,KAAExB,GAAE,cAAaJ,MAAG4B,KAAE,SAAOA,MAAG,WAASA,MAAG,GAAGzB,IAAE6D,EAAC,IAAE;AAAI,IAAA5D,KAAE,IAAIA,GAAE,GAAEJ,EAAC;AAAE,IAAAG,GAAE,gBAAc,SAAOC,GAAE,SAAO,WAASA,GAAE,QAAMA,GAAE,QAAM;AAAK,IAAAA,GAAE,UAAQ;AAAG,IAAAD,GAAE,YAAUC;AAAE,IAAAA,GAAE,kBAAgBD;AAAE,IAAAyB,OAAIzB,KAAEA,GAAE,WAAUA,GAAE,8CAA4C6D,IAAE7D,GAAE,4CAA0CH;AAAG,WAAOI;AAAA,EAAC;AAC5Z,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAzB,KAAEC,GAAE;AAAM,mBAAa,OAAOA,GAAE,6BAA2BA,GAAE,0BAA0B,GAAEwB,EAAC;AAAE,mBAAa,OAAOxB,GAAE,oCAAkCA,GAAE,iCAAiC,GAAEwB,EAAC;AAAE,IAAAxB,GAAE,UAAQD,MAAG,GAAG,oBAAoBC,IAAEA,GAAE,OAAM,IAAI;AAAA,EAAC;AACpQ,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE7D,GAAE;AAAU,IAAA6D,GAAE,QAAM;AAAE,IAAAA,GAAE,QAAM7D,GAAE;AAAc,IAAA6D,GAAE,OAAK;AAAG,OAAG7D,EAAC;AAAE,QAAIH,KAAEI,GAAE;AAAY,iBAAW,OAAOJ,MAAG,SAAOA,KAAEgE,GAAE,UAAQ,GAAGhE,EAAC,KAAGA,KAAE,GAAGI,EAAC,IAAE,KAAGuZ,IAAE,SAAQ3V,GAAE,UAAQ,GAAG7D,IAAEH,EAAC;AAAG,IAAAgE,GAAE,QAAM7D,GAAE;AAAc,IAAAH,KAAEI,GAAE;AAAyB,mBAAa,OAAOJ,OAAI,GAAGG,IAAEC,IAAEJ,IAAE,CAAC,GAAEgE,GAAE,QAAM7D,GAAE;AAAe,mBAAa,OAAOC,GAAE,4BAA0B,eAAa,OAAO4D,GAAE,2BAAyB,eAAa,OAAOA,GAAE,6BAA2B,eAAa,OAAOA,GAAE,uBAAqB5D,KAAE4D,GAAE,OACrf,eAAa,OAAOA,GAAE,sBAAoBA,GAAE,sBAAqB,eAAa,OAAOA,GAAE,6BAA2BA,GAAE,0BAAyB,GAAG5D,OAAI4D,GAAE,SAAO,GAAG,oBAAoBA,IAAEA,GAAE,OAAM,IAAI,GAAE,GAAG7D,IAAE,GAAE6D,IAAEpC,EAAC,GAAEoC,GAAE,QAAM7D,GAAE;AAAe,mBAAa,OAAO6D,GAAE,sBAAoB7D,GAAE,SAAO;AAAA,EAAQ;AACpS,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,IAAAD,KAAE,EAAE;AAAI,QAAG,SAAOA,MAAG,eAAa,OAAOA,MAAG,aAAW,OAAOA,IAAE;AAAC,UAAG,EAAE,QAAO;AAAC,YAAE,EAAE;AAAO,YAAG,GAAE;AAAC,cAAG,MAAI,EAAE;AAAI,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,cAAIyB,KAAE,EAAE;AAAA,QAAS;AAAC,YAAG,CAACA;AAAE,gBAAM,MAAM,EAAE,KAAIzB,EAAC,CAAC;AAAE,YAAI6D,KAAEpC,IAAE5B,KAAE,KAAGG;AAAE,YAAG,SAAOC,MAAG,SAAOA,GAAE,OAAK,eAAa,OAAOA,GAAE,OAAKA,GAAE,IAAI,eAAaJ;AAAE,iBAAOI,GAAE;AAAI,QAAAA,KAAE,SAASD,IAAE;AAAC,cAAIC,KAAE4D,GAAE;AAAK,UAAA5D,OAAI,OAAKA,KAAE4D,GAAE,OAAK,CAAA;AAAI,mBAAO7D,KAAE,OAAOC,GAAEJ,MAAGI,GAAEJ,MAAGG;AAAA,QAAC;AAAE,QAAAC,GAAE,aAAWJ;AAAE,eAAOI;AAAA,MAAC;AAAC,UAAG,aAAW,OAAOD;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAG,CAAC,EAAE;AAAO,cAAM,MAAM,EAAE,KAAIA,EAAC,CAAC;AAAA,IAAE;AAAC,WAAOA;AAAA,EAAC;AACre,WAAS,GAAGA,IAAEC,IAAE;AAAC,IAAAD,KAAE,OAAO,UAAU,SAAS,KAAKC,EAAC;AAAE,UAAM,MAAM,EAAE,IAAG,sBAAoBD,KAAE,uBAAqB,OAAO,KAAKC,EAAC,EAAE,KAAK,IAAI,IAAE,MAAID,EAAC,CAAC;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAM,WAAOC,GAAED,GAAE,QAAQ;AAAA,EAAC;AACrM,WAAS,GAAGA,IAAE;AAAC,aAASC,GAAEA,IAAE2a,IAAE;AAAC,UAAG5a,IAAE;AAAC,YAAIyB,KAAExB,GAAE;AAAU,iBAAOwB,MAAGxB,GAAE,YAAU,CAAC2a,EAAC,GAAE3a,GAAE,SAAO,MAAIwB,GAAE,KAAKmZ,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,EAAEA,IAAEnZ,IAAE;AAAC,UAAG,CAACzB;AAAE,eAAO;AAAK,aAAK,SAAOyB;AAAG,QAAAxB,GAAE2a,IAAEnZ,EAAC,GAAEA,KAAEA,GAAE;AAAQ,aAAO;AAAA,IAAI;AAAC,aAASA,GAAEzB,IAAEC,IAAE;AAAC,WAAID,KAAE,oBAAI,OAAI,SAAOC;AAAG,iBAAOA,GAAE,MAAID,GAAE,IAAIC,GAAE,KAAIA,EAAC,IAAED,GAAE,IAAIC,GAAE,OAAMA,EAAC,GAAEA,KAAEA,GAAE;AAAQ,aAAOD;AAAA,IAAC;AAAC,aAAS6D,GAAE7D,IAAEC,IAAE;AAAC,MAAAD,KAAE,GAAGA,IAAEC,EAAC;AAAE,MAAAD,GAAE,QAAM;AAAE,MAAAA,GAAE,UAAQ;AAAK,aAAOA;AAAA,IAAC;AAAC,aAASH,GAAEI,IAAE2a,IAAEnZ,IAAE;AAAC,MAAAxB,GAAE,QAAMwB;AAAE,UAAG,CAACzB;AAAE,eAAOC,GAAE,SAAO,SAAQ2a;AAAE,MAAAnZ,KAAExB,GAAE;AAAU,UAAG,SAAOwB;AAAE,eAAOA,KAAEA,GAAE,OAAMA,KAAEmZ,MAAG3a,GAAE,SAAO,GAAE2a,MAAGnZ;AAAE,MAAAxB,GAAE,SAAO;AAAE,aAAO2a;AAAA,IAAC;AAAC,aAASd,GAAE7Z,IAAE;AAAC,MAAAD,MAC7f,SAAOC,GAAE,cAAYA,GAAE,SAAO;AAAG,aAAOA;AAAA,IAAC;AAAC,aAASwH,GAAEzH,IAAEC,IAAE2a,IAAEnZ,IAAE;AAAC,UAAG,SAAOxB,MAAG,MAAIA,GAAE;AAAI,eAAOA,KAAE,GAAG2a,IAAE5a,GAAE,MAAKyB,EAAC,GAAExB,GAAE,SAAOD,IAAEC;AAAE,MAAAA,KAAE4D,GAAE5D,IAAE2a,EAAC;AAAE,MAAA3a,GAAE,SAAOD;AAAE,aAAOC;AAAA,IAAC;AAAC,aAASsW,GAAEvW,IAAEC,IAAE2a,IAAEnZ,IAAE;AAAC,UAAI5B,KAAE+a,GAAE;AAAK,UAAG/a,OAAI;AAAG,eAAOiC,GAAE9B,IAAEC,IAAE2a,GAAE,MAAM,UAASnZ,IAAEmZ,GAAE,GAAG;AAAE,UAAG,SAAO3a,OAAIA,GAAE,gBAAcJ,MAAG,aAAW,OAAOA,MAAG,SAAOA,MAAGA,GAAE,aAAW,MAAI,GAAGA,EAAC,MAAII,GAAE;AAAM,eAAOwB,KAAEoC,GAAE5D,IAAE2a,GAAE,KAAK,GAAEnZ,GAAE,MAAI,GAAGzB,IAAEC,IAAE2a,EAAC,GAAEnZ,GAAE,SAAOzB,IAAEyB;AAAE,MAAAA,KAAE,GAAGmZ,GAAE,MAAKA,GAAE,KAAIA,GAAE,OAAM,MAAK5a,GAAE,MAAKyB,EAAC;AAAE,MAAAA,GAAE,MAAI,GAAGzB,IAAEC,IAAE2a,EAAC;AAAE,MAAAnZ,GAAE,SAAOzB;AAAE,aAAOyB;AAAA,IAAC;AAAC,aAASkV,GAAE3W,IAAEC,IAAE2a,IAAEnZ,IAAE;AAAC,UAAG,SAAOxB,MAAG,MAAIA,GAAE,OACjfA,GAAE,UAAU,kBAAgB2a,GAAE,iBAAe3a,GAAE,UAAU,mBAAiB2a,GAAE;AAAe,eAAO3a,KAAE,GAAG2a,IAAE5a,GAAE,MAAKyB,EAAC,GAAExB,GAAE,SAAOD,IAAEC;AAAE,MAAAA,KAAE4D,GAAE5D,IAAE2a,GAAE,YAAU,CAAA,CAAE;AAAE,MAAA3a,GAAE,SAAOD;AAAE,aAAOC;AAAA,IAAC;AAAC,aAAS6B,GAAE9B,IAAEC,IAAE2a,IAAEnZ,IAAE5B,IAAE;AAAC,UAAG,SAAOI,MAAG,MAAIA,GAAE;AAAI,eAAOA,KAAE,GAAG2a,IAAE5a,GAAE,MAAKyB,IAAE5B,EAAC,GAAEI,GAAE,SAAOD,IAAEC;AAAE,MAAAA,KAAE4D,GAAE5D,IAAE2a,EAAC;AAAE,MAAA3a,GAAE,SAAOD;AAAE,aAAOC;AAAA,IAAC;AAAC,aAAS8Y,GAAE/Y,IAAEC,IAAE2a,IAAE;AAAC,UAAG,aAAW,OAAO3a,MAAG,OAAKA,MAAG,aAAW,OAAOA;AAAE,eAAOA,KAAE,GAAG,KAAGA,IAAED,GAAE,MAAK4a,EAAC,GAAE3a,GAAE,SAAOD,IAAEC;AAAE,UAAG,aAAW,OAAOA,MAAG,SAAOA,IAAE;AAAC,gBAAOA,GAAE,UAAQ;AAAA,UAAE,KAAK;AAAG,mBAAO2a,KAAE,GAAG3a,GAAE,MAAKA,GAAE,KAAIA,GAAE,OAAM,MAAKD,GAAE,MAAK4a,EAAC,GACpfA,GAAE,MAAI,GAAG5a,IAAE,MAAKC,EAAC,GAAE2a,GAAE,SAAO5a,IAAE4a;AAAA,UAAE,KAAK;AAAG,mBAAO3a,KAAE,GAAGA,IAAED,GAAE,MAAK4a,EAAC,GAAE3a,GAAE,SAAOD,IAAEC;AAAA,UAAE,KAAK;AAAG,gBAAIwB,KAAExB,GAAE;AAAM,mBAAO8Y,GAAE/Y,IAAEyB,GAAExB,GAAE,QAAQ,GAAE2a,EAAC;AAAA,QAAC;AAAC,YAAG,GAAG3a,EAAC,KAAG,GAAGA,EAAC;AAAE,iBAAOA,KAAE,GAAGA,IAAED,GAAE,MAAK4a,IAAE,IAAI,GAAE3a,GAAE,SAAOD,IAAEC;AAAE,WAAGD,IAAEC,EAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAI;AAAC,aAASgD,GAAEjD,IAAEC,IAAE2a,IAAEnZ,IAAE;AAAC,UAAIoC,KAAE,SAAO5D,KAAEA,GAAE,MAAI;AAAK,UAAG,aAAW,OAAO2a,MAAG,OAAKA,MAAG,aAAW,OAAOA;AAAE,eAAO,SAAO/W,KAAE,OAAK4D,GAAEzH,IAAEC,IAAE,KAAG2a,IAAEnZ,EAAC;AAAE,UAAG,aAAW,OAAOmZ,MAAG,SAAOA,IAAE;AAAC,gBAAOA,GAAE,UAAQ;AAAA,UAAE,KAAK;AAAG,mBAAOA,GAAE,QAAM/W,KAAE0S,GAAEvW,IAAEC,IAAE2a,IAAEnZ,EAAC,IAAE;AAAA,UAAK,KAAK;AAAG,mBAAOmZ,GAAE,QAAM/W,KAAE8S,GAAE3W,IAAEC,IAAE2a,IAAEnZ,EAAC,IAAE;AAAA,UAAK,KAAK;AAAG,mBAAOoC,KAAE+W,GAAE,OAAM3X;AAAA,cAAEjD;AAAA,cACpfC;AAAA,cAAE4D,GAAE+W,GAAE,QAAQ;AAAA,cAAEnZ;AAAA,YAAC;AAAA,QAAC;AAAC,YAAG,GAAGmZ,EAAC,KAAG,GAAGA,EAAC;AAAE,iBAAO,SAAO/W,KAAE,OAAK/B,GAAE9B,IAAEC,IAAE2a,IAAEnZ,IAAE,IAAI;AAAE,WAAGzB,IAAE4a,EAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAI;AAAC,aAASrV,GAAEvF,IAAEC,IAAE2a,IAAEnZ,IAAEoC,IAAE;AAAC,UAAG,aAAW,OAAOpC,MAAG,OAAKA,MAAG,aAAW,OAAOA;AAAE,eAAOzB,KAAEA,GAAE,IAAI4a,EAAC,KAAG,MAAKnT,GAAExH,IAAED,IAAE,KAAGyB,IAAEoC,EAAC;AAAE,UAAG,aAAW,OAAOpC,MAAG,SAAOA,IAAE;AAAC,gBAAOA,GAAE,UAAU;AAAA,UAAA,KAAK;AAAG,mBAAOzB,KAAEA,GAAE,IAAI,SAAOyB,GAAE,MAAImZ,KAAEnZ,GAAE,GAAG,KAAG,MAAK8U,GAAEtW,IAAED,IAAEyB,IAAEoC,EAAC;AAAA,UAAE,KAAK;AAAG,mBAAO7D,KAAEA,GAAE,IAAI,SAAOyB,GAAE,MAAImZ,KAAEnZ,GAAE,GAAG,KAAG,MAAKkV,GAAE1W,IAAED,IAAEyB,IAAEoC,EAAC;AAAA,UAAE,KAAK;AAAG,gBAAIhE,KAAE4B,GAAE;AAAM,mBAAO8D,GAAEvF,IAAEC,IAAE2a,IAAE/a,GAAE4B,GAAE,QAAQ,GAAEoC,EAAC;AAAA,QAAC;AAAC,YAAG,GAAGpC,EAAC,KAAG,GAAGA,EAAC;AAAE,iBAAOzB,KAAEA,GAAE,IAAI4a,EAAC,KAAG,MAAK9Y,GAAE7B,IAAED,IAAEyB,IAAEoC,IAAE,IAAI;AAAE,WAAG5D,IAAEwB,EAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAI;AAC9f,aAASf,GAAEmD,IAAEiW,IAAErS,IAAE8O,IAAE;AAAC,eAAQI,KAAE,MAAK7U,KAAE,MAAKiV,KAAE+C,IAAEpS,KAAEoS,KAAE,GAAExU,KAAE,MAAK,SAAOyR,MAAGrP,KAAED,GAAE,QAAOC,MAAI;AAAC,QAAAqP,GAAE,QAAMrP,MAAGpC,KAAEyR,IAAEA,KAAE,QAAMzR,KAAEyR,GAAE;AAAQ,YAAIrW,KAAEuC,GAAEY,IAAEkT,IAAEtP,GAAEC,KAAG6O,EAAC;AAAE,YAAG,SAAO7V,IAAE;AAAC,mBAAOqW,OAAIA,KAAEzR;AAAG;AAAA,QAAK;AAAC,QAAAtF,MAAG+W,MAAG,SAAOrW,GAAE,aAAWT,GAAE4D,IAAEkT,EAAC;AAAE,QAAA+C,KAAEja,GAAEa,IAAEoZ,IAAEpS,EAAC;AAAE,iBAAO5F,KAAE6U,KAAEjW,KAAEoB,GAAE,UAAQpB;AAAE,QAAAoB,KAAEpB;AAAE,QAAAqW,KAAEzR;AAAA,MAAC;AAAC,UAAGoC,OAAID,GAAE;AAAO,eAAO,EAAE5D,IAAEkT,EAAC,GAAE0C,OAAG,GAAG5V,IAAE6D,EAAC,GAAEiP;AAAE,UAAG,SAAOI,IAAE;AAAC,eAAKrP,KAAED,GAAE,QAAOC;AAAI,UAAAqP,KAAEgC,GAAElV,IAAE4D,GAAEC,KAAG6O,EAAC,GAAE,SAAOQ,OAAI+C,KAAEja,GAAEkX,IAAE+C,IAAEpS,EAAC,GAAE,SAAO5F,KAAE6U,KAAEI,KAAEjV,GAAE,UAAQiV,IAAEjV,KAAEiV;AAAG0C,eAAG,GAAG5V,IAAE6D,EAAC;AAAE,eAAOiP;AAAA,MAAC;AAAC,WAAII,KAAEtV,GAAEoC,IAAEkT,EAAC,GAAErP,KAAED,GAAE,QAAOC;AAAI,QAAApC,KAAEC,GAAEwR,IAAElT,IAAE6D,IAAED,GAAEC,KAAG6O,EAAC,GAAE,SAAOjR,OAAItF,MAAG,SAAOsF,GAAE,aAAWyR,GAAE,OAAO,SACvfzR,GAAE,MAAIoC,KAAEpC,GAAE,GAAG,GAAEwU,KAAEja,GAAEyF,IAAEwU,IAAEpS,EAAC,GAAE,SAAO5F,KAAE6U,KAAErR,KAAExD,GAAE,UAAQwD,IAAExD,KAAEwD;AAAG,MAAAtF,MAAG+W,GAAE,QAAQ,SAAS/W,IAAE;AAAC,eAAOC,GAAE4D,IAAE7D,EAAC;AAAA,MAAC,CAAC;AAAEyZ,aAAG,GAAG5V,IAAE6D,EAAC;AAAE,aAAOiP;AAAA,IAAC;AAAC,aAASqC,GAAEnV,IAAEiW,IAAErS,IAAE8O,IAAE;AAAC,UAAII,KAAE,GAAGlP,EAAC;AAAE,UAAG,eAAa,OAAOkP;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,MAAAlP,KAAEkP,GAAE,KAAKlP,EAAC;AAAE,UAAG,QAAMA;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,eAAQsP,KAAEJ,KAAE,MAAK7U,KAAEgY,IAAEpS,KAAEoS,KAAE,GAAExU,KAAE,MAAK5E,KAAE+G,GAAE,KAAI,GAAG,SAAO3F,MAAG,CAACpB,GAAE,MAAKgH,MAAIhH,KAAE+G,GAAE,KAAM,GAAC;AAAC,QAAA3F,GAAE,QAAM4F,MAAGpC,KAAExD,IAAEA,KAAE,QAAMwD,KAAExD,GAAE;AAAQ,YAAIkX,KAAE/V,GAAEY,IAAE/B,IAAEpB,GAAE,OAAM6V,EAAC;AAAE,YAAG,SAAOyC,IAAE;AAAC,mBAAOlX,OAAIA,KAAEwD;AAAG;AAAA,QAAK;AAAC,QAAAtF,MAAG8B,MAAG,SAAOkX,GAAE,aAAW/Y,GAAE4D,IAAE/B,EAAC;AAAE,QAAAgY,KAAEja,GAAEmZ,IAAEc,IAAEpS,EAAC;AAAE,iBAAOqP,KAAEJ,KAAEqC,KAAEjC,GAAE,UAAQiC;AAAE,QAAAjC,KAAEiC;AAAE,QAAAlX,KAAEwD;AAAA,MAAC;AAAC,UAAG5E,GAAE;AAAK,eAAO;AAAA,UAAEmD;AAAA,UACzf/B;AAAA,QAAC,GAAE2X,OAAG,GAAG5V,IAAE6D,EAAC,GAAEiP;AAAE,UAAG,SAAO7U,IAAE;AAAC,eAAK,CAACpB,GAAE,MAAKgH,MAAIhH,KAAE+G,GAAE,KAAM;AAAC,UAAA/G,KAAEqY,GAAElV,IAAEnD,GAAE,OAAM6V,EAAC,GAAE,SAAO7V,OAAIoZ,KAAEja,GAAEa,IAAEoZ,IAAEpS,EAAC,GAAE,SAAOqP,KAAEJ,KAAEjW,KAAEqW,GAAE,UAAQrW,IAAEqW,KAAErW;AAAG+Y,eAAG,GAAG5V,IAAE6D,EAAC;AAAE,eAAOiP;AAAA,MAAC;AAAC,WAAI7U,KAAEL,GAAEoC,IAAE/B,EAAC,GAAE,CAACpB,GAAE,MAAKgH,MAAIhH,KAAE+G,GAAE,KAAI;AAAG,QAAA/G,KAAE6E,GAAEzD,IAAE+B,IAAE6D,IAAEhH,GAAE,OAAM6V,EAAC,GAAE,SAAO7V,OAAIV,MAAG,SAAOU,GAAE,aAAWoB,GAAE,OAAO,SAAOpB,GAAE,MAAIgH,KAAEhH,GAAE,GAAG,GAAEoZ,KAAEja,GAAEa,IAAEoZ,IAAEpS,EAAC,GAAE,SAAOqP,KAAEJ,KAAEjW,KAAEqW,GAAE,UAAQrW,IAAEqW,KAAErW;AAAG,MAAAV,MAAG8B,GAAE,QAAQ,SAAS9B,IAAE;AAAC,eAAOC,GAAE4D,IAAE7D,EAAC;AAAA,MAAC,CAAC;AAAEyZ,aAAG,GAAG5V,IAAE6D,EAAC;AAAE,aAAOiP;AAAA,IAAC;AAAC,aAAS+C,GAAE1Z,IAAEyB,IAAE5B,IAAE4H,IAAE;AAAC,mBAAW,OAAO5H,MAAG,SAAOA,MAAGA,GAAE,SAAO,MAAI,SAAOA,GAAE,QAAMA,KAAEA,GAAE,MAAM;AAAU,UAAG,aAAW,OAAOA,MAAG,SAAOA,IAAE;AAAC,gBAAOA,GAAE,UAAQ;AAAA,UAAE,KAAK;AAAG,eAAE;AAAC,uBAAQ0W,KAC7hB1W,GAAE,KAAI8W,KAAElV,IAAE,SAAOkV,MAAG;AAAC,oBAAGA,GAAE,QAAMJ,IAAE;AAAC,kBAAAA,KAAE1W,GAAE;AAAK,sBAAG0W,OAAI,IAAG;AAAC,wBAAG,MAAII,GAAE,KAAI;AAAC,wBAAE3W,IAAE2W,GAAE,OAAO;AAAE,sBAAAlV,KAAEoC,GAAE8S,IAAE9W,GAAE,MAAM,QAAQ;AAAE,sBAAA4B,GAAE,SAAOzB;AAAE,sBAAAA,KAAEyB;AAAE,4BAAM;AAAA,oBAAC;AAAA,kBAAC,WAASkV,GAAE,gBAAcJ,MAAG,aAAW,OAAOA,MAAG,SAAOA,MAAGA,GAAE,aAAW,MAAI,GAAGA,EAAC,MAAII,GAAE,MAAK;AAAC,sBAAE3W,IAAE2W,GAAE,OAAO;AAAE,oBAAAlV,KAAEoC,GAAE8S,IAAE9W,GAAE,KAAK;AAAE,oBAAA4B,GAAE,MAAI,GAAGzB,IAAE2W,IAAE9W,EAAC;AAAE,oBAAA4B,GAAE,SAAOzB;AAAE,oBAAAA,KAAEyB;AAAE,0BAAM;AAAA,kBAAC;AAAC,oBAAEzB,IAAE2W,EAAC;AAAE;AAAA,gBAAK;AAAM,kBAAA1W,GAAED,IAAE2W,EAAC;AAAE,gBAAAA,KAAEA,GAAE;AAAA,cAAO;AAAC,cAAA9W,GAAE,SAAO,MAAI4B,KAAE,GAAG5B,GAAE,MAAM,UAASG,GAAE,MAAKyH,IAAE5H,GAAE,GAAG,GAAE4B,GAAE,SAAOzB,IAAEA,KAAEyB,OAAIgG,KAAE,GAAG5H,GAAE,MAAKA,GAAE,KAAIA,GAAE,OAAM,MAAKG,GAAE,MAAKyH,EAAC,GAAEA,GAAE,MAAI,GAAGzH,IAAEyB,IAAE5B,EAAC,GAAE4H,GAAE,SAAOzH,IAAEA,KAAEyH;AAAA,YAAE;AAAC,mBAAOqS,GAAE9Z,EAAC;AAAA,UAAE,KAAK;AAAG,eAAE;AAAC,mBAAI2W,KAAE9W,GAAE,KAAI,SACzf4B,MAAG;AAAC,oBAAGA,GAAE,QAAMkV;AAAE,sBAAG,MAAIlV,GAAE,OAAKA,GAAE,UAAU,kBAAgB5B,GAAE,iBAAe4B,GAAE,UAAU,mBAAiB5B,GAAE,gBAAe;AAAC,sBAAEG,IAAEyB,GAAE,OAAO;AAAE,oBAAAA,KAAEoC,GAAEpC,IAAE5B,GAAE,YAAU,CAAE,CAAA;AAAE,oBAAA4B,GAAE,SAAOzB;AAAE,oBAAAA,KAAEyB;AAAE,0BAAM;AAAA,kBAAC,OAAK;AAAC,sBAAEzB,IAAEyB,EAAC;AAAE;AAAA,kBAAK;AAAA;AAAM,kBAAAxB,GAAED,IAAEyB,EAAC;AAAE,gBAAAA,KAAEA,GAAE;AAAA,cAAO;AAAC,cAAAA,KAAE,GAAG5B,IAAEG,GAAE,MAAKyH,EAAC;AAAE,cAAAhG,GAAE,SAAOzB;AAAE,cAAAA,KAAEyB;AAAA,YAAC;AAAC,mBAAOqY,GAAE9Z,EAAC;AAAA,UAAE,KAAK;AAAG,mBAAO2W,KAAE9W,GAAE,OAAM6Z,GAAE1Z,IAAEyB,IAAEkV,GAAE9W,GAAE,QAAQ,GAAE4H,EAAC;AAAA,QAAC;AAAC,YAAG,GAAG5H,EAAC;AAAE,iBAAOa,GAAEV,IAAEyB,IAAE5B,IAAE4H,EAAC;AAAE,YAAG,GAAG5H,EAAC;AAAE,iBAAOmZ,GAAEhZ,IAAEyB,IAAE5B,IAAE4H,EAAC;AAAE,WAAGzH,IAAEH,EAAC;AAAA,MAAC;AAAC,aAAM,aAAW,OAAOA,MAAG,OAAKA,MAAG,aAAW,OAAOA,MAAGA,KAAE,KAAGA,IAAE,SAAO4B,MAAG,MAAIA,GAAE,OAAK,EAAEzB,IAAEyB,GAAE,OAAO,GAAEA,KAAEoC,GAAEpC,IAAE5B,EAAC,GAAE4B,GAAE,SAAOzB,IAAEA,KAAEyB,OACnf,EAAEzB,IAAEyB,EAAC,GAAEA,KAAE,GAAG5B,IAAEG,GAAE,MAAKyH,EAAC,GAAEhG,GAAE,SAAOzB,IAAEA,KAAEyB,KAAGqY,GAAE9Z,EAAC,KAAG,EAAEA,IAAEyB,EAAC;AAAA,IAAC;AAAC,WAAOiY;AAAA,EAAC;AAAC,MAAI,KAAG,GAAG,IAAE,GAAE,KAAG,GAAG,KAAE,GAAE,KAAG,CAAA,GAAG,KAAG,GAAG,EAAE,GAAE,KAAG,GAAG,EAAE,GAAE,KAAG,GAAG,EAAE;AAAE,WAAS,GAAG1Z,IAAE;AAAC,QAAGA,OAAI;AAAG,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAACsZ,QAAE,IAAGtZ,EAAC;AAAEsZ,QAAE,IAAGvZ,EAAC;AAAEuZ,QAAE,IAAG,EAAE;AAAE,IAAAvZ,KAAEC,GAAE;AAAS,YAAOD,IAAC;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAG,QAAAC,MAAGA,KAAEA,GAAE,mBAAiBA,GAAE,eAAa,GAAG,MAAK,EAAE;AAAE;AAAA,MAAM;AAAQ,QAAAD,KAAE,MAAIA,KAAEC,GAAE,aAAWA,IAAEA,KAAED,GAAE,gBAAc,MAAKA,KAAEA,GAAE,SAAQC,KAAE,GAAGA,IAAED,EAAC;AAAA,IAAC;AAACqZ,QAAE,EAAE;AAAEE,QAAE,IAAGtZ,EAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAACoZ,QAAE,EAAE;AAAEA,QAAE,EAAE;AAAEA,QAAE,EAAE;AAAA,EAAC;AACnb,WAAS,GAAGrZ,IAAE;AAAC,OAAG,GAAG,OAAO;AAAE,QAAIC,KAAE,GAAG,GAAG,OAAO;AAAE,QAAI,IAAE,GAAGA,IAAED,GAAE,IAAI;AAAE,IAAAC,OAAI,MAAIsZ,IAAE,IAAGvZ,EAAC,GAAEuZ,IAAE,IAAG,CAAC;AAAA,EAAE;AAAC,WAAS,GAAGvZ,IAAE;AAAC,OAAG,YAAUA,OAAIqZ,IAAE,EAAE,GAAEA,IAAE,EAAE;AAAA,EAAE;AAAC,MAAIQ,MAAE,GAAG,CAAC;AACtJ,WAAS,GAAG7Z,IAAE;AAAC,aAAQC,KAAED,IAAE,SAAOC,MAAG;AAAC,UAAG,OAAKA,GAAE,KAAI;AAAC,YAAI,IAAEA,GAAE;AAAc,YAAG,SAAO,MAAI,IAAE,EAAE,YAAW,SAAO,KAAG,SAAO,EAAE,QAAM,SAAO,EAAE;AAAM,iBAAOA;AAAA,MAAC,WAAS,OAAKA,GAAE,OAAK,WAASA,GAAE,cAAc,aAAY;AAAC,YAAG,OAAKA,GAAE,QAAM;AAAK,iBAAOA;AAAA,MAAC,WAAS,SAAOA,GAAE,OAAM;AAAC,QAAAA,GAAE,MAAM,SAAOA;AAAE,QAAAA,KAAEA,GAAE;AAAM;AAAA,MAAQ;AAAC,UAAGA,OAAID;AAAE;AAAM,aAAK,SAAOC,GAAE,WAAS;AAAC,YAAG,SAAOA,GAAE,UAAQA,GAAE,WAASD;AAAE,iBAAO;AAAK,QAAAC,KAAEA,GAAE;AAAA,MAAM;AAAC,MAAAA,GAAE,QAAQ,SAAOA,GAAE;AAAO,MAAAA,KAAEA,GAAE;AAAA,IAAO;AAAC,WAAO;AAAA,EAAI;AAAC,MAAI,KAAG;AACrc,WAAS,KAAI;AAAC,aAAQD,KAAE,GAAEA,KAAE,GAAG,QAAOA;AAAI,SAAGA,IAAG,gCAA8B;AAAK,OAAG,SAAO;AAAA,EAAC;AAAC,MAAI,KAAG,GAAG,wBAAuB,KAAG,GAAG,yBAAwB,KAAG,GAAE+Z,MAAE,MAAKC,MAAE,MAAKC,MAAE,MAAK,KAAG,OAAG,KAAG,OAAG,KAAG,GAAE,KAAG;AAAE,WAASC,MAAG;AAAC,UAAM,MAAM,EAAE,GAAG,CAAC;AAAA,EAAE;AAAC,WAAS,GAAGla,IAAEC,IAAE;AAAC,QAAG,SAAOA;AAAE,aAAM;AAAG,aAAQ,IAAE,GAAE,IAAEA,GAAE,UAAQ,IAAED,GAAE,QAAO;AAAI,UAAG,CAAC,GAAGA,GAAE,IAAGC,GAAE,EAAE;AAAE,eAAM;AAAG,WAAM;AAAA,EAAE;AAChW,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAE;AAAC,SAAGA;AAAEka,UAAE9Z;AAAE,IAAAA,GAAE,gBAAc;AAAK,IAAAA,GAAE,cAAY;AAAK,IAAAA,GAAE,QAAM;AAAE,OAAG,UAAQ,SAAOD,MAAG,SAAOA,GAAE,gBAAc,KAAG;AAAG,IAAAA,KAAE,EAAEyB,IAAEoC,EAAC;AAAE,QAAG,IAAG;AAAC,MAAAhE,KAAE;AAAE,SAAE;AAAC,aAAG;AAAG,aAAG;AAAE,YAAG,MAAIA;AAAE,gBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAAA,MAAG;AAAEoa,cAAED,MAAE;AAAK,QAAA/Z,GAAE,cAAY;AAAK,WAAG,UAAQ;AAAG,QAAAD,KAAE,EAAEyB,IAAEoC,EAAC;AAAA,MAAC,SAAO;AAAA,IAAG;AAAC,OAAG,UAAQ;AAAG,IAAA5D,KAAE,SAAO+Z,OAAG,SAAOA,IAAE;AAAK,SAAG;AAAEC,UAAED,MAAED,MAAE;AAAK,SAAG;AAAG,QAAG9Z;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,WAAOD;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,QAAIA,KAAE,MAAI;AAAG,SAAG;AAAE,WAAOA;AAAA,EAAC;AAC/Y,WAAS,KAAI;AAAC,QAAIA,KAAE,EAAC,eAAc,MAAK,WAAU,MAAK,WAAU,MAAK,OAAM,MAAK,MAAK,KAAI;AAAE,aAAOia,MAAEF,IAAE,gBAAcE,MAAEja,KAAEia,MAAEA,IAAE,OAAKja;AAAE,WAAOia;AAAAA,EAAC;AAAC,WAAS,KAAI;AAAC,QAAG,SAAOD,KAAE;AAAC,UAAIha,KAAE+Z,IAAE;AAAU,MAAA/Z,KAAE,SAAOA,KAAEA,GAAE,gBAAc;AAAA,IAAI;AAAM,MAAAA,KAAEga,IAAE;AAAK,QAAI/Z,KAAE,SAAOga,MAAEF,IAAE,gBAAcE,IAAE;AAAK,QAAG,SAAOha;AAAEga,YAAEha,IAAE+Z,MAAEha;AAAA,SAAM;AAAC,UAAG,SAAOA;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAEga,YAAEha;AAAE,MAAAA,KAAE,EAAC,eAAcga,IAAE,eAAc,WAAUA,IAAE,WAAU,WAAUA,IAAE,WAAU,OAAMA,IAAE,OAAM,MAAK,KAAI;AAAE,eAAOC,MAAEF,IAAE,gBAAcE,MAAEja,KAAEia,MAAEA,IAAE,OAAKja;AAAA,IAAC;AAAC,WAAOia;AAAAA,EAAC;AACje,WAAS,GAAGja,IAAEC,IAAE;AAAC,WAAM,eAAa,OAAOA,KAAEA,GAAED,EAAC,IAAEC;AAAA,EAAC;AACnD,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAE,GAAE,GAAG,IAAEA,GAAE;AAAM,QAAG,SAAO;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,MAAE,sBAAoBD;AAAE,QAAIyB,KAAEuY,KAAEnW,KAAEpC,GAAE,WAAU5B,KAAE,EAAE;AAAQ,QAAG,SAAOA,IAAE;AAAC,UAAG,SAAOgE,IAAE;AAAC,YAAIiW,KAAEjW,GAAE;AAAK,QAAAA,GAAE,OAAKhE,GAAE;AAAK,QAAAA,GAAE,OAAKia;AAAA,MAAC;AAAC,MAAArY,GAAE,YAAUoC,KAAEhE;AAAE,QAAE,UAAQ;AAAA,IAAI;AAAC,QAAG,SAAOgE,IAAE;AAAC,MAAAhE,KAAEgE,GAAE;AAAK,MAAApC,KAAEA,GAAE;AAAU,UAAIgG,KAAEqS,KAAE,MAAKvD,KAAE,MAAKI,KAAE9W;AAAE,SAAE;AAAC,YAAIiC,KAAE6U,GAAE;AAAK,aAAI,KAAG7U,QAAKA;AAAE,mBAAOyU,OAAIA,KAAEA,GAAE,OAAK,EAAC,MAAK,GAAE,QAAOI,GAAE,QAAO,eAAcA,GAAE,eAAc,YAAWA,GAAE,YAAW,MAAK,KAAI,IAAGlV,KAAEkV,GAAE,gBAAcA,GAAE,aAAW3W,GAAEyB,IAAEkV,GAAE,MAAM;AAAA,aAAM;AAAC,cAAIoC,KAAE;AAAA,YAAC,MAAKjX;AAAA,YAAE,QAAO6U,GAAE;AAAA,YAAO,eAAcA,GAAE;AAAA,YACngB,YAAWA,GAAE;AAAA,YAAW,MAAK;AAAA,UAAI;AAAE,mBAAOJ,MAAG9O,KAAE8O,KAAEwC,IAAEe,KAAErY,MAAG8U,KAAEA,GAAE,OAAKwC;AAAEgB,cAAE,SAAOjY;AAAE,gBAAIA;AAAA,QAAC;AAAC,QAAA6U,KAAEA,GAAE;AAAA,MAAI,SAAO,SAAOA,MAAGA,OAAI9W;AAAG,eAAO0W,KAAEuD,KAAErY,KAAE8U,GAAE,OAAK9O;AAAE,SAAGhG,IAAExB,GAAE,aAAa,MAAI,KAAG;AAAI,MAAAA,GAAE,gBAAcwB;AAAE,MAAAxB,GAAE,YAAU6Z;AAAE,MAAA7Z,GAAE,YAAUsW;AAAE,QAAE,oBAAkB9U;AAAA,IAAC;AAAC,IAAAzB,KAAE,EAAE;AAAY,QAAG,SAAOA,IAAE;AAAC,MAAA6D,KAAE7D;AAAE;AAAG,QAAAH,KAAEgE,GAAE,MAAKkW,IAAE,SAAOla,IAAE,MAAIA,IAAEgE,KAAEA,GAAE;AAAA,aAAWA,OAAI7D;AAAA,IAAE;AAAM,eAAO6D,OAAI,EAAE,QAAM;AAAG,WAAM,CAAC5D,GAAE,eAAc,EAAE,QAAQ;AAAA,EAAC;AAC9X,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAE,MAAK,IAAEA,GAAE;AAAM,QAAG,SAAO;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,MAAE,sBAAoBD;AAAE,QAAIyB,KAAE,EAAE,UAASoC,KAAE,EAAE,SAAQhE,KAAEI,GAAE;AAAc,QAAG,SAAO4D,IAAE;AAAC,QAAE,UAAQ;AAAK,UAAIiW,KAAEjW,KAAEA,GAAE;AAAK;AAAG,QAAAhE,KAAEG,GAAEH,IAAEia,GAAE,MAAM,GAAEA,KAAEA,GAAE;AAAA,aAAWA,OAAIjW;AAAG,SAAGhE,IAAEI,GAAE,aAAa,MAAI,KAAG;AAAI,MAAAA,GAAE,gBAAcJ;AAAE,eAAOI,GAAE,cAAYA,GAAE,YAAUJ;AAAG,QAAE,oBAAkBA;AAAA,IAAC;AAAC,WAAM,CAACA,IAAE4B,EAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAA,EAAE;AACrW,WAAS,GAAGzB,IAAEC,IAAE;AAAC,QAAI,IAAE8Z,KAAEtY,KAAE,GAAI,GAACoC,KAAE5D,GAAC,GAAGJ,KAAE,CAAC,GAAG4B,GAAE,eAAcoC,EAAC;AAAE,IAAAhE,OAAI4B,GAAE,gBAAcoC,IAAE,KAAG;AAAI,IAAApC,KAAEA,GAAE;AAAM,OAAG,GAAG,KAAK,MAAK,GAAEA,IAAEzB,EAAC,GAAE,CAACA,EAAC,CAAC;AAAE,QAAGyB,GAAE,gBAAcxB,MAAGJ,MAAG,SAAOoa,OAAGA,IAAE,cAAc,MAAI,GAAE;AAAC,QAAE,SAAO;AAAK,SAAG,GAAE,GAAG,KAAK,MAAK,GAAExY,IAAEoC,IAAE5D,EAAC,GAAE,QAAO,IAAI;AAAE,UAAG,SAAOka;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAK,KAAG,OAAK,GAAG,GAAEla,IAAE4D,EAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAG7D,IAAEC,IAAE,GAAE;AAAC,IAAAD,GAAE,SAAO;AAAM,IAAAA,KAAE,EAAC,aAAYC,IAAE,OAAM,EAAC;AAAE,IAAAA,KAAE8Z,IAAE;AAAY,aAAO9Z,MAAGA,KAAE,EAAC,YAAW,MAAK,QAAO,KAAI,GAAE8Z,IAAE,cAAY9Z,IAAEA,GAAE,SAAO,CAACD,EAAC,MAAI,IAAEC,GAAE,QAAO,SAAO,IAAEA,GAAE,SAAO,CAACD,EAAC,IAAE,EAAE,KAAKA,EAAC;AAAA,EAAE;AAClf,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAxB,GAAE,QAAM;AAAE,IAAAA,GAAE,cAAYwB;AAAE,OAAGxB,EAAC,KAAG,GAAGD,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,WAAO,EAAE,WAAU;AAAC,SAAGA,EAAC,KAAG,GAAGD,EAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAY,IAAAA,KAAEA,GAAE;AAAM,QAAG;AAAC,UAAI,IAAEC,GAAG;AAAC,aAAM,CAAC,GAAGD,IAAE,CAAC;AAAA,IAAC,SAAOyB,IAAN;AAAS,aAAM;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAE;AAAC,QAAIC,KAAE,GAAGD,IAAE,CAAC;AAAE,aAAOC,MAAG,GAAGA,IAAED,IAAE,GAAE,EAAE;AAAA,EAAC;AAClQ,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAE;AAAK,mBAAa,OAAOD,OAAIA,KAAEA,GAAG;AAAE,IAAAC,GAAE,gBAAcA,GAAE,YAAUD;AAAE,IAAAA,KAAE,EAAC,SAAQ,MAAK,aAAY,MAAK,OAAM,GAAE,UAAS,MAAK,qBAAoB,IAAG,mBAAkBA,GAAC;AAAE,IAAAC,GAAE,QAAMD;AAAE,IAAAA,KAAEA,GAAE,WAAS,GAAG,KAAK,MAAK+Z,KAAE/Z,EAAC;AAAE,WAAM,CAACC,GAAE,eAAcD,EAAC;AAAA,EAAC;AAC5P,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAzB,KAAE,EAAC,KAAIA,IAAE,QAAOC,IAAE,SAAQ,GAAE,MAAKwB,IAAE,MAAK,KAAI;AAAE,IAAAxB,KAAE8Z,IAAE;AAAY,aAAO9Z,MAAGA,KAAE,EAAC,YAAW,MAAK,QAAO,KAAI,GAAE8Z,IAAE,cAAY9Z,IAAEA,GAAE,aAAWD,GAAE,OAAKA,OAAI,IAAEC,GAAE,YAAW,SAAO,IAAEA,GAAE,aAAWD,GAAE,OAAKA,MAAGyB,KAAE,EAAE,MAAK,EAAE,OAAKzB,IAAEA,GAAE,OAAKyB,IAAExB,GAAE,aAAWD;AAAI,WAAOA;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,WAAO,GAAI,EAAC;AAAA,EAAa;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE,GAAI;AAACkW,QAAE,SAAO/Z;AAAE,IAAA6D,GAAE,gBAAc,GAAG,IAAE5D,IAAE,GAAE,QAAO,WAASwB,KAAE,OAAKA,EAAC;AAAA,EAAC;AAC9Y,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE,GAAE;AAAG,IAAApC,KAAE,WAASA,KAAE,OAAKA;AAAE,QAAI5B,KAAE;AAAO,QAAG,SAAOma,KAAE;AAAC,UAAIF,KAAEE,IAAE;AAAc,MAAAna,KAAEia,GAAE;AAAQ,UAAG,SAAOrY,MAAG,GAAGA,IAAEqY,GAAE,IAAI,GAAE;AAAC,QAAAjW,GAAE,gBAAc,GAAG5D,IAAE,GAAEJ,IAAE4B,EAAC;AAAE;AAAA,MAAM;AAAA,IAAC;AAACsY,QAAE,SAAO/Z;AAAE,IAAA6D,GAAE,gBAAc,GAAG,IAAE5D,IAAE,GAAEJ,IAAE4B,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAEC,IAAE;AAAC,WAAO,GAAG,SAAQ,GAAED,IAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAO,GAAG,MAAK,GAAED,IAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAO,GAAG,GAAE,GAAED,IAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAO,GAAG,GAAE,GAAED,IAAEC,EAAC;AAAA,EAAC;AAChX,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG,eAAa,OAAOA;AAAE,aAAOD,KAAEA,GAAG,GAACC,GAAED,EAAC,GAAE,WAAU;AAAC,QAAAC,GAAE,IAAI;AAAA,MAAC;AAAE,QAAG,SAAOA,MAAG,WAASA;AAAE,aAAOD,KAAEA,MAAIC,GAAE,UAAQD,IAAE,WAAU;AAAC,QAAAC,GAAE,UAAQ;AAAA,MAAI;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAE,SAAO,KAAG,WAAS,IAAE,EAAE,OAAO,CAACD,EAAC,CAAC,IAAE;AAAK,WAAO,GAAG,GAAE,GAAE,GAAG,KAAK,MAAKC,IAAED,EAAC,GAAE,CAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAA,EAAE;AAAA,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE,GAAE;AAAG,IAAAA,KAAE,WAASA,KAAE,OAAKA;AAAE,QAAIwB,KAAE,EAAE;AAAc,QAAG,SAAOA,MAAG,SAAOxB,MAAG,GAAGA,IAAEwB,GAAE,EAAE;AAAE,aAAOA,GAAE;AAAG,MAAE,gBAAc,CAACzB,IAAEC,EAAC;AAAE,WAAOD;AAAA,EAAC;AAC7Z,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE,GAAE;AAAG,IAAAA,KAAE,WAASA,KAAE,OAAKA;AAAE,QAAIwB,KAAE,EAAE;AAAc,QAAG,SAAOA,MAAG,SAAOxB,MAAG,GAAGA,IAAEwB,GAAE,EAAE;AAAE,aAAOA,GAAE;AAAG,IAAAzB,KAAEA,GAAG;AAAC,MAAE,gBAAc,CAACA,IAAEC,EAAC;AAAE,WAAOD;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAG,OAAK,KAAG;AAAI,aAAOD,GAAE,cAAYA,GAAE,YAAU,OAAG,KAAG,OAAIA,GAAE,gBAAc;AAAE,OAAG,GAAEC,EAAC,MAAI,IAAE,GAAI,GAAC8Z,IAAE,SAAO,GAAE,MAAI,GAAE/Z,GAAE,YAAU;AAAI,WAAOC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAI,IAAEkZ;AAAEA,UAAE,MAAI,KAAG,IAAE,IAAE,IAAE;AAAE,IAAAnZ,GAAE,IAAE;AAAE,QAAIyB,KAAE,GAAG;AAAW,OAAG,aAAW,CAAE;AAAC,QAAG;AAAC,MAAAzB,GAAE,KAAE,GAAEC,GAAG;AAAA,IAAA,UAAC;AAAQkZ,YAAE,GAAE,GAAG,aAAW1X;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,WAAO,GAAE,EAAG;AAAA,EAAa;AAC1d,WAAS,GAAGzB,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE,GAAGzB,EAAC;AAAE,QAAE,EAAC,MAAKyB,IAAE,QAAO,GAAE,eAAc,OAAG,YAAW,MAAK,MAAK,KAAI;AAAE,QAAG,GAAGzB,EAAC;AAAE,SAAGC,IAAE,CAAC;AAAA,aAAU,IAAE,GAAGD,IAAEC,IAAE,GAAEwB,EAAC,GAAE,SAAO,GAAE;AAAC,UAAIoC,KAAE+V;AAAI,SAAG,GAAE5Z,IAAEyB,IAAEoC,EAAC;AAAE,SAAG,GAAE5D,IAAEwB,EAAC;AAAA,IAAC;AAAA,EAAC;AAC/K,WAAS,GAAGzB,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE,GAAGzB,EAAC,GAAE6D,KAAE,EAAC,MAAKpC,IAAE,QAAO,GAAE,eAAc,OAAG,YAAW,MAAK,MAAK,KAAI;AAAE,QAAG,GAAGzB,EAAC;AAAE,SAAGC,IAAE4D,EAAC;AAAA,SAAM;AAAC,UAAIhE,KAAEG,GAAE;AAAU,UAAG,MAAIA,GAAE,UAAQ,SAAOH,MAAG,MAAIA,GAAE,WAASA,KAAEI,GAAE,qBAAoB,SAAOJ;AAAG,YAAG;AAAC,cAAIia,KAAE7Z,GAAE,mBAAkBwH,KAAE5H,GAAEia,IAAE,CAAC;AAAE,UAAAjW,GAAE,gBAAc;AAAG,UAAAA,GAAE,aAAW4D;AAAE,cAAG,GAAGA,IAAEqS,EAAC,GAAE;AAAC,gBAAIvD,KAAEtW,GAAE;AAAY,qBAAOsW,MAAG1S,GAAE,OAAKA,IAAE,GAAG5D,EAAC,MAAI4D,GAAE,OAAK0S,GAAE,MAAKA,GAAE,OAAK1S;AAAG,YAAA5D,GAAE,cAAY4D;AAAE;AAAA,UAAM;AAAA,QAAC,SAAO8S,IAAN;AAAA,QAAU,UAAA;AAAA,QAAS;AAAA,UAAE,GAAG3W,IAAEC,IAAE4D,IAAEpC,EAAC;AAAE,eAAO,MAAIoC,KAAE+V,IAAC,GAAG,GAAG,GAAE5Z,IAAEyB,IAAEoC,EAAC,GAAE,GAAG,GAAE5D,IAAEwB,EAAC;AAAA,IAAE;AAAA,EAAC;AAC/c,WAAS,GAAGzB,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAU,WAAOA,OAAI+Z,OAAG,SAAO9Z,MAAGA,OAAI8Z;AAAAA,EAAC;AAAC,WAAS,GAAG/Z,IAAEC,IAAE;AAAC,SAAG,KAAG;AAAG,QAAI,IAAED,GAAE;AAAQ,aAAO,IAAEC,GAAE,OAAKA,MAAGA,GAAE,OAAK,EAAE,MAAK,EAAE,OAAKA;AAAG,IAAAD,GAAE,UAAQC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAG,OAAK,IAAE,UAAS;AAAC,UAAIwB,KAAExB,GAAE;AAAM,MAAAwB,MAAGzB,GAAE;AAAa,WAAGyB;AAAE,MAAAxB,GAAE,QAAM;AAAE,SAAGD,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAC9P,MAAI,KAAG,EAAC,aAAY,IAAG,aAAYka,KAAE,YAAWA,KAAE,WAAUA,KAAE,qBAAoBA,KAAE,oBAAmBA,KAAE,iBAAgBA,KAAE,SAAQA,KAAE,YAAWA,KAAE,QAAOA,KAAE,UAASA,KAAE,eAAcA,KAAE,kBAAiBA,KAAE,eAAcA,KAAE,kBAAiBA,KAAE,sBAAqBA,KAAE,OAAMA,KAAE,0BAAyB,MAAE,GAAE,KAAG,EAAC,aAAY,IAAG,aAAY,SAASla,IAAEC,IAAE;AAAC,OAAI,EAAC,gBAAc,CAACD,IAAE,WAASC,KAAE,OAAKA,EAAC;AAAE,WAAOD;AAAA,EAAC,GAAE,YAAW,IAAG,WAAU,IAAG,qBAAoB,SAASA,IAAEC,IAAE,GAAE;AAAC,QAAE,SAAO,KAAG,WAAS,IAAE,EAAE,OAAO,CAACD,EAAC,CAAC,IAAE;AAAK,WAAO;AAAA,MAAG;AAAA,MAC3f;AAAA,MAAE,GAAG,KAAK,MAAKC,IAAED,EAAC;AAAA,MAAE;AAAA,IAAC;AAAA,EAAC,GAAE,iBAAgB,SAASA,IAAEC,IAAE;AAAC,WAAO,GAAG,SAAQ,GAAED,IAAEC,EAAC;AAAA,EAAC,GAAE,oBAAmB,SAASD,IAAEC,IAAE;AAAC,WAAO,GAAG,GAAE,GAAED,IAAEC,EAAC;AAAA,EAAC,GAAE,SAAQ,SAASD,IAAEC,IAAE;AAAC,QAAI,IAAE,GAAE;AAAG,IAAAA,KAAE,WAASA,KAAE,OAAKA;AAAE,IAAAD,KAAEA,GAAC;AAAG,MAAE,gBAAc,CAACA,IAAEC,EAAC;AAAE,WAAOD;AAAA,EAAC,GAAE,YAAW,SAASA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE,GAAI;AAAC,IAAAxB,KAAE,WAAS,IAAE,EAAEA,EAAC,IAAEA;AAAE,IAAAwB,GAAE,gBAAcA,GAAE,YAAUxB;AAAE,IAAAD,KAAE,EAAC,SAAQ,MAAK,aAAY,MAAK,OAAM,GAAE,UAAS,MAAK,qBAAoBA,IAAE,mBAAkBC,GAAC;AAAE,IAAAwB,GAAE,QAAMzB;AAAE,IAAAA,KAAEA,GAAE,WAAS,GAAG,KAAK,MAAK+Z,KAAE/Z,EAAC;AAAE,WAAM,CAACyB,GAAE,eAAczB,EAAC;AAAA,EAAC,GAAE,QAAO,SAASA,IAAE;AAAC,QAAIC,KACrf,GAAE;AAAG,IAAAD,KAAE,EAAC,SAAQA,GAAC;AAAE,WAAOC,GAAE,gBAAcD;AAAA,EAAC,GAAE,UAAS,IAAG,eAAc,IAAG,kBAAiB,SAASA,IAAE;AAAC,WAAO,GAAE,EAAG,gBAAcA;AAAA,EAAC,GAAE,eAAc,WAAU;AAAC,QAAIA,KAAE,GAAG,KAAE,GAAEC,KAAED,GAAE;AAAG,IAAAA,KAAE,GAAG,KAAK,MAAKA,GAAE,EAAE;AAAE,OAAE,EAAG,gBAAcA;AAAE,WAAM,CAACC,IAAED,EAAC;AAAA,EAAC,GAAE,kBAAiB,WAAU;AAAA,EAAE,GAAC,sBAAqB,SAASA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEsY,KAAElW,KAAE,GAAI;AAAC,QAAG4V,KAAE;AAAC,UAAG,WAAS;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAE,EAAG;AAAA,IAAA,OAAK;AAAC,UAAExZ,GAAG;AAAC,UAAG,SAAOka;AAAE,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAK,KAAG,OAAK,GAAG1Y,IAAExB,IAAE,CAAC;AAAA,IAAC;AAAC,IAAA4D,GAAE,gBAAc;AAAE,QAAIhE,KAAE,EAAC,OAAM,GAAE,aAAYI,GAAC;AAAE,IAAA4D,GAAE,QAAMhE;AAAE,OAAG,GAAG;AAAA,MAAK;AAAA,MAAK4B;AAAA,MACpf5B;AAAA,MAAEG;AAAA,IAAC,GAAE,CAACA,EAAC,CAAC;AAAE,IAAAyB,GAAE,SAAO;AAAK,OAAG,GAAE,GAAG,KAAK,MAAKA,IAAE5B,IAAE,GAAEI,EAAC,GAAE,QAAO,IAAI;AAAE,WAAO;AAAA,EAAC,GAAE,OAAM,WAAU;AAAC,QAAID,KAAE,GAAI,GAACC,KAAEka,IAAE;AAAiB,QAAGV,KAAE;AAAC,UAAI,IAAE;AAAG,UAAIhY,KAAE;AAAG,WAAGA,KAAE,EAAE,KAAG,KAAG,GAAGA,EAAC,IAAE,IAAI,SAAS,EAAE,IAAE;AAAE,MAAAxB,KAAE,MAAIA,KAAE,MAAI;AAAE,UAAE;AAAK,UAAE,MAAIA,MAAG,MAAI,EAAE,SAAS,EAAE;AAAG,MAAAA,MAAG;AAAA,IAAG;AAAM,UAAE,MAAKA,KAAE,MAAIA,KAAE,MAAI,EAAE,SAAS,EAAE,IAAE;AAAI,WAAOD,GAAE,gBAAcC;AAAA,EAAC,GAAE,0BAAyB,MAAE,GAAE,KAAG;AAAA,IAAC,aAAY;AAAA,IAAG,aAAY;AAAA,IAAG,YAAW;AAAA,IAAG,WAAU;AAAA,IAAG,qBAAoB;AAAA,IAAG,oBAAmB;AAAA,IAAG,iBAAgB;AAAA,IAAG,SAAQ;AAAA,IAAG,YAAW;AAAA,IAAG,QAAO;AAAA,IAAG,UAAS,WAAU;AAAC,aAAO,GAAG,EAAE;AAAA,IAAC;AAAA,IACrhB,eAAc;AAAA,IAAG,kBAAiB,SAASD,IAAE;AAAC,UAAIC,KAAE;AAAK,aAAO,GAAGA,IAAE+Z,IAAE,eAAcha,EAAC;AAAA,IAAC;AAAA,IAAE,eAAc,WAAU;AAAC,UAAIA,KAAE,GAAG,EAAE,EAAE,IAAGC,KAAE,KAAK;AAAc,aAAM,CAACD,IAAEC,EAAC;AAAA,IAAC;AAAA,IAAE,kBAAiB;AAAA,IAAG,sBAAqB;AAAA,IAAG,OAAM;AAAA,IAAG,0BAAyB;AAAA,EAAE,GAAE,KAAG,EAAC,aAAY,IAAG,aAAY,IAAG,YAAW,IAAG,WAAU,IAAG,qBAAoB,IAAG,oBAAmB,IAAG,iBAAgB,IAAG,SAAQ,IAAG,YAAW,IAAG,QAAO,IAAG,UAAS,WAAU;AAAC,WAAO,GAAG,EAAE;AAAA,EAAC,GAAE,eAAc,IAAG,kBAAiB,SAASD,IAAE;AAAC,QAAIC,KAAE,GAAI;AAAC,WAAO,SACzf+Z,MAAE/Z,GAAE,gBAAcD,KAAE,GAAGC,IAAE+Z,IAAE,eAAcha,EAAC;AAAA,EAAC,GAAE,eAAc,WAAU;AAAC,QAAIA,KAAE,GAAG,EAAE,EAAE,IAAGC,KAAE,GAAI,EAAC;AAAc,WAAM,CAACD,IAAEC,EAAC;AAAA,EAAC,GAAE,kBAAiB,IAAG,sBAAqB,IAAG,OAAM,IAAG,0BAAyB,MAAE;AAAE,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG;AAAC,UAAI,IAAE,IAAGwB,KAAExB;AAAE;AAAG,aAAG,GAAGwB,EAAC,GAAEA,KAAEA,GAAE;AAAA,aAAaA;AAAG,UAAIoC,KAAE;AAAA,IAAC,SAAOhE,IAAN;AAAS,MAAAgE,KAAE,+BAA6BhE,GAAE,UAAQ,OAAKA,GAAE;AAAA,IAAK;AAAC,WAAM,EAAC,OAAMG,IAAE,QAAOC,IAAE,OAAM4D,IAAE,QAAO,KAAI;AAAA,EAAC;AAAC,WAAS,GAAG7D,IAAEC,IAAE,GAAE;AAAC,WAAM,EAAC,OAAMD,IAAE,QAAO,MAAK,OAAM,QAAM,IAAE,IAAE,MAAK,QAAO,QAAMC,KAAEA,KAAE,KAAI;AAAA,EAAC;AACzd,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG;AAAC,cAAQ,MAAMA,GAAE,KAAK;AAAA,IAAC,SAAO,GAAN;AAAS,iBAAW,WAAU;AAAC,cAAM;AAAA,MAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,KAAG,eAAa,OAAO,UAAQ,UAAQ;AAAI,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAE,GAAG,IAAG,CAAC;AAAE,MAAE,MAAI;AAAE,MAAE,UAAQ,EAAC,SAAQ,KAAI;AAAE,QAAIwB,KAAExB,GAAE;AAAM,MAAE,WAAS,WAAU;AAAC,aAAK,KAAG,MAAG,KAAGwB;AAAG,SAAGzB,IAAEC,EAAC;AAAA,IAAC;AAAE,WAAO;AAAA,EAAC;AAC3Q,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAE,GAAG,IAAG,CAAC;AAAE,MAAE,MAAI;AAAE,QAAIwB,KAAEzB,GAAE,KAAK;AAAyB,QAAG,eAAa,OAAOyB,IAAE;AAAC,UAAIoC,KAAE5D,GAAE;AAAM,QAAE,UAAQ,WAAU;AAAC,eAAOwB,GAAEoC,EAAC;AAAA,MAAC;AAAE,QAAE,WAAS,WAAU;AAAC,WAAG7D,IAAEC,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIJ,KAAEG,GAAE;AAAU,aAAOH,MAAG,eAAa,OAAOA,GAAE,sBAAoB,EAAE,WAAS,WAAU;AAAC,SAAGG,IAAEC,EAAC;AAAE,qBAAa,OAAOwB,OAAI,SAAO,KAAG,KAAG,oBAAI,IAAI,CAAC,IAAI,CAAC,IAAE,GAAG,IAAI,IAAI;AAAG,UAAImZ,KAAE3a,GAAE;AAAM,WAAK,kBAAkBA,GAAE,OAAM,EAAC,gBAAe,SAAO2a,KAAEA,KAAE,GAAE,CAAC;AAAA,IAAC;AAAG,WAAO;AAAA,EAAC;AACnb,WAAS,GAAG5a,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAU,QAAG,SAAOyB,IAAE;AAAC,MAAAA,KAAEzB,GAAE,YAAU,IAAI;AAAG,UAAI6D,KAAE,oBAAI;AAAI,MAAApC,GAAE,IAAIxB,IAAE4D,EAAC;AAAA,IAAC;AAAM,MAAAA,KAAEpC,GAAE,IAAIxB,EAAC,GAAE,WAAS4D,OAAIA,KAAE,oBAAI,OAAIpC,GAAE,IAAIxB,IAAE4D,EAAC;AAAG,IAAAA,GAAE,IAAI,CAAC,MAAIA,GAAE,IAAI,CAAC,GAAE7D,KAAE,GAAG,KAAK,MAAKA,IAAEC,IAAE,CAAC,GAAEA,GAAE,KAAKD,IAAEA,EAAC;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,OAAE;AAAC,UAAIC;AAAE,UAAGA,KAAE,OAAKD,GAAE;AAAI,QAAAC,KAAED,GAAE,eAAcC,KAAE,SAAOA,KAAE,SAAOA,GAAE,aAAW,OAAG,QAAG;AAAG,UAAGA;AAAE,eAAOD;AAAE,MAAAA,KAAEA,GAAE;AAAA,IAAM,SAAO,SAAOA;AAAG,WAAO;AAAA,EAAI;AAChW,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAG,OAAK7D,GAAE,OAAK;AAAG,aAAOA,OAAIC,KAAED,GAAE,SAAO,SAAOA,GAAE,SAAO,KAAI,EAAE,SAAO,QAAO,EAAE,SAAO,QAAO,MAAI,EAAE,QAAM,SAAO,EAAE,YAAU,EAAE,MAAI,MAAIC,KAAE,GAAG,IAAG,CAAC,GAAEA,GAAE,MAAI,GAAE,GAAG,GAAEA,IAAE,CAAC,KAAI,EAAE,SAAO,IAAGD;AAAE,IAAAA,GAAE,SAAO;AAAM,IAAAA,GAAE,QAAM6D;AAAE,WAAO7D;AAAA,EAAC;AAAC,MAAI,KAAG,GAAG,mBAAkB,KAAG;AAAG,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAxB,GAAE,QAAM,SAAOD,KAAE,GAAGC,IAAE,MAAK,GAAEwB,EAAC,IAAE,GAAGxB,IAAED,GAAE,OAAM,GAAEyB,EAAC;AAAA,EAAC;AACnV,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAE,EAAE;AAAO,QAAIhE,KAAEI,GAAE;AAAI,OAAGA,IAAE4D,EAAC;AAAE,IAAApC,KAAE,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE5B,IAAEgE,EAAC;AAAE,QAAE,GAAE;AAAG,QAAG,SAAO7D,MAAG,CAAC;AAAG,aAAOC,GAAE,cAAYD,GAAE,aAAYC,GAAE,SAAO,OAAMD,GAAE,SAAO,CAAC6D,IAAE,GAAG7D,IAAEC,IAAE4D,EAAC;AAAE4V,WAAG,KAAG,GAAGxZ,EAAC;AAAE,IAAAA,GAAE,SAAO;AAAE,OAAGD,IAAEC,IAAEwB,IAAEoC,EAAC;AAAE,WAAO5D,GAAE;AAAA,EAAK;AACzN,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAG,SAAO7D,IAAE;AAAC,UAAIH,KAAE,EAAE;AAAK,UAAG,eAAa,OAAOA,MAAG,CAAC,GAAGA,EAAC,KAAG,WAASA,GAAE,gBAAc,SAAO,EAAE,WAAS,WAAS,EAAE;AAAa,eAAOI,GAAE,MAAI,IAAGA,GAAE,OAAKJ,IAAE,GAAGG,IAAEC,IAAEJ,IAAE4B,IAAEoC,EAAC;AAAE,MAAA7D,KAAE,GAAG,EAAE,MAAK,MAAKyB,IAAExB,IAAEA,GAAE,MAAK4D,EAAC;AAAE,MAAA7D,GAAE,MAAIC,GAAE;AAAI,MAAAD,GAAE,SAAOC;AAAE,aAAOA,GAAE,QAAMD;AAAA,IAAC;AAAC,IAAAH,KAAEG,GAAE;AAAM,QAAG,OAAKA,GAAE,QAAM6D,KAAG;AAAC,UAAIiW,KAAEja,GAAE;AAAc,UAAE,EAAE;AAAQ,UAAE,SAAO,IAAE,IAAE;AAAG,UAAG,EAAEia,IAAErY,EAAC,KAAGzB,GAAE,QAAMC,GAAE;AAAI,eAAO,GAAGD,IAAEC,IAAE4D,EAAC;AAAA,IAAC;AAAC,IAAA5D,GAAE,SAAO;AAAE,IAAAD,KAAE,GAAGH,IAAE4B,EAAC;AAAE,IAAAzB,GAAE,MAAIC,GAAE;AAAI,IAAAD,GAAE,SAAOC;AAAE,WAAOA,GAAE,QAAMD;AAAA,EAAC;AAC1b,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAG,SAAO7D,IAAE;AAAC,UAAIH,KAAEG,GAAE;AAAc,UAAG,GAAGH,IAAE4B,EAAC,KAAGzB,GAAE,QAAMC,GAAE;AAAI,YAAG,KAAG,OAAGA,GAAE,eAAawB,KAAE5B,IAAE,OAAKG,GAAE,QAAM6D;AAAG,iBAAK7D,GAAE,QAAM,YAAU,KAAG;AAAA;AAAS,iBAAOC,GAAE,QAAMD,GAAE,OAAM,GAAGA,IAAEC,IAAE4D,EAAC;AAAA,IAAC;AAAC,WAAO,GAAG7D,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC;AAAA,EAAC;AACxN,WAAS,GAAG7D,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAExB,GAAE,cAAa4D,KAAEpC,GAAE,UAAS5B,KAAE,SAAOG,KAAEA,GAAE,gBAAc;AAAK,QAAG,aAAWyB,GAAE;AAAK,UAAG,OAAKxB,GAAE,OAAK;AAAG,QAAAA,GAAE,gBAAc,EAAC,WAAU,GAAE,WAAU,MAAK,aAAY,KAAI,GAAEsZ,IAAE,IAAG,EAAE,GAAE,MAAI;AAAA,WAAM;AAAC,YAAG,OAAK,IAAE;AAAY,iBAAOvZ,KAAE,SAAOH,KAAEA,GAAE,YAAU,IAAE,GAAEI,GAAE,QAAMA,GAAE,aAAW,YAAWA,GAAE,gBAAc,EAAC,WAAUD,IAAE,WAAU,MAAK,aAAY,KAAI,GAAEC,GAAE,cAAY,MAAKsZ,IAAE,IAAG,EAAE,GAAE,MAAIvZ,IAAE;AAAK,QAAAC,GAAE,gBAAc,EAAC,WAAU,GAAE,WAAU,MAAK,aAAY,KAAI;AAAE,QAAAwB,KAAE,SAAO5B,KAAEA,GAAE,YAAU;AAAE0Z,YAAE,IAAG,EAAE;AAAE,cAAI9X;AAAA,MAAC;AAAA;AAAM,eACtf5B,MAAG4B,KAAE5B,GAAE,YAAU,GAAEI,GAAE,gBAAc,QAAMwB,KAAE,GAAE8X,IAAE,IAAG,EAAE,GAAE,MAAI9X;AAAE,OAAGzB,IAAEC,IAAE4D,IAAE,CAAC;AAAE,WAAO5D,GAAE;AAAA,EAAK;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAI,QAAG,SAAOD,MAAG,SAAO,KAAG,SAAOA,MAAGA,GAAE,QAAM;AAAE,MAAAC,GAAE,SAAO,KAAIA,GAAE,SAAO;AAAA,EAAO;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAIhE,KAAE,GAAG,CAAC,IAAE,KAAG2Z,IAAE;AAAQ,IAAA3Z,KAAE,GAAGI,IAAEJ,EAAC;AAAE,OAAGI,IAAE4D,EAAC;AAAE,QAAE,GAAG7D,IAAEC,IAAE,GAAEwB,IAAE5B,IAAEgE,EAAC;AAAE,IAAApC,KAAE,GAAE;AAAG,QAAG,SAAOzB,MAAG,CAAC;AAAG,aAAOC,GAAE,cAAYD,GAAE,aAAYC,GAAE,SAAO,OAAMD,GAAE,SAAO,CAAC6D,IAAE,GAAG7D,IAAEC,IAAE4D,EAAC;AAAE4V,WAAGhY,MAAG,GAAGxB,EAAC;AAAE,IAAAA,GAAE,SAAO;AAAE,OAAGD,IAAEC,IAAE,GAAE4D,EAAC;AAAE,WAAO5D,GAAE;AAAA,EAAK;AACla,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAG,GAAG,CAAC,GAAE;AAAC,UAAIhE,KAAE;AAAG,SAAGI,EAAC;AAAA,IAAC;AAAM,MAAAJ,KAAE;AAAG,OAAGI,IAAE4D,EAAC;AAAE,QAAG,SAAO5D,GAAE;AAAU,SAAGD,IAAEC,EAAC,GAAE,GAAGA,IAAE,GAAEwB,EAAC,GAAE,GAAGxB,IAAE,GAAEwB,IAAEoC,EAAC,GAAEpC,KAAE;AAAA,aAAW,SAAOzB,IAAE;AAAC,UAAI8Z,KAAE7Z,GAAE,WAAUwH,KAAExH,GAAE;AAAc,MAAA6Z,GAAE,QAAMrS;AAAE,UAAI8O,KAAEuD,GAAE,SAAQnD,KAAE,EAAE;AAAY,mBAAW,OAAOA,MAAG,SAAOA,KAAEA,KAAE,GAAGA,EAAC,KAAGA,KAAE,GAAG,CAAC,IAAE,KAAG6C,IAAE,SAAQ7C,KAAE,GAAG1W,IAAE0W,EAAC;AAAG,UAAI7U,KAAE,EAAE,0BAAyBiX,KAAE,eAAa,OAAOjX,MAAG,eAAa,OAAOgY,GAAE;AAAwB,MAAAf,MAAG,eAAa,OAAOe,GAAE,oCAAkC,eAAa,OAAOA,GAAE,8BAC1drS,OAAIhG,MAAG8U,OAAII,OAAI,GAAG1W,IAAE6Z,IAAErY,IAAEkV,EAAC;AAAE,WAAG;AAAG,UAAI1T,KAAEhD,GAAE;AAAc,MAAA6Z,GAAE,QAAM7W;AAAE,SAAGhD,IAAEwB,IAAEqY,IAAEjW,EAAC;AAAE,MAAA0S,KAAEtW,GAAE;AAAc,MAAAwH,OAAIhG,MAAGwB,OAAIsT,MAAG,GAAG,WAAS,MAAI,eAAa,OAAOzU,OAAI,GAAG7B,IAAE,GAAE6B,IAAEL,EAAC,GAAE8U,KAAEtW,GAAE,iBAAgBwH,KAAE,MAAI,GAAGxH,IAAE,GAAEwH,IAAEhG,IAAEwB,IAAEsT,IAAEI,EAAC,MAAIoC,MAAG,eAAa,OAAOe,GAAE,6BAA2B,eAAa,OAAOA,GAAE,uBAAqB,eAAa,OAAOA,GAAE,sBAAoBA,GAAE,mBAAkB,GAAG,eAAa,OAAOA,GAAE,6BAA2BA,GAAE,8BAA6B,eAAa,OAAOA,GAAE,sBAAoB7Z,GAAE,SAAO,aAClf,eAAa,OAAO6Z,GAAE,sBAAoB7Z,GAAE,SAAO,UAASA,GAAE,gBAAcwB,IAAExB,GAAE,gBAAcsW,KAAGuD,GAAE,QAAMrY,IAAEqY,GAAE,QAAMvD,IAAEuD,GAAE,UAAQnD,IAAElV,KAAEgG,OAAI,eAAa,OAAOqS,GAAE,sBAAoB7Z,GAAE,SAAO,UAASwB,KAAE;AAAA,IAAG,OAAK;AAAC,MAAAqY,KAAE7Z,GAAE;AAAU,SAAGD,IAAEC,EAAC;AAAE,MAAAwH,KAAExH,GAAE;AAAc,MAAA0W,KAAE1W,GAAE,SAAOA,GAAE,cAAYwH,KAAE,GAAGxH,GAAE,MAAKwH,EAAC;AAAE,MAAAqS,GAAE,QAAMnD;AAAE,MAAAoC,KAAE9Y,GAAE;AAAa,MAAAgD,KAAE6W,GAAE;AAAQ,MAAAvD,KAAE,EAAE;AAAY,mBAAW,OAAOA,MAAG,SAAOA,KAAEA,KAAE,GAAGA,EAAC,KAAGA,KAAE,GAAG,CAAC,IAAE,KAAGiD,IAAE,SAAQjD,KAAE,GAAGtW,IAAEsW,EAAC;AAAG,UAAIhR,KAAE,EAAE;AAAyB,OAACzD,KAAE,eAAa,OAAOyD,MAAG,eAAa,OAAOuU,GAAE,4BAC9e,eAAa,OAAOA,GAAE,oCAAkC,eAAa,OAAOA,GAAE,8BAA4BrS,OAAIsR,MAAG9V,OAAIsT,OAAI,GAAGtW,IAAE6Z,IAAErY,IAAE8U,EAAC;AAAE,WAAG;AAAG,MAAAtT,KAAEhD,GAAE;AAAc,MAAA6Z,GAAE,QAAM7W;AAAE,SAAGhD,IAAEwB,IAAEqY,IAAEjW,EAAC;AAAE,UAAInD,KAAET,GAAE;AAAc,MAAAwH,OAAIsR,MAAG9V,OAAIvC,MAAG,GAAG,WAAS,MAAI,eAAa,OAAO6E,OAAI,GAAGtF,IAAE,GAAEsF,IAAE9D,EAAC,GAAEf,KAAET,GAAE,iBAAgB0W,KAAE,MAAI,GAAG1W,IAAE,GAAE0W,IAAElV,IAAEwB,IAAEvC,IAAE6V,EAAC,KAAG,UAAKzU,MAAG,eAAa,OAAOgY,GAAE,8BAA4B,eAAa,OAAOA,GAAE,wBAAsB,eAAa,OAAOA,GAAE,uBAAqBA,GAAE,oBAAoBrY,IAAEf,IAAE6V,EAAC,GAAE,eAAa,OAAOuD,GAAE,8BAC5fA,GAAE,2BAA2BrY,IAAEf,IAAE6V,EAAC,IAAG,eAAa,OAAOuD,GAAE,uBAAqB7Z,GAAE,SAAO,IAAG,eAAa,OAAO6Z,GAAE,4BAA0B7Z,GAAE,SAAO,UAAQ,eAAa,OAAO6Z,GAAE,sBAAoBrS,OAAIzH,GAAE,iBAAeiD,OAAIjD,GAAE,kBAAgBC,GAAE,SAAO,IAAG,eAAa,OAAO6Z,GAAE,2BAAyBrS,OAAIzH,GAAE,iBAAeiD,OAAIjD,GAAE,kBAAgBC,GAAE,SAAO,OAAMA,GAAE,gBAAcwB,IAAExB,GAAE,gBAAcS,KAAGoZ,GAAE,QAAMrY,IAAEqY,GAAE,QAAMpZ,IAAEoZ,GAAE,UAAQvD,IAAE9U,KAAEkV,OAAI,eAAa,OAAOmD,GAAE,sBAAoBrS,OAAIzH,GAAE,iBAAeiD,OACjfjD,GAAE,kBAAgBC,GAAE,SAAO,IAAG,eAAa,OAAO6Z,GAAE,2BAAyBrS,OAAIzH,GAAE,iBAAeiD,OAAIjD,GAAE,kBAAgBC,GAAE,SAAO,OAAMwB,KAAE;AAAA,IAAG;AAAC,WAAO,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE5B,IAAEgE,EAAC;AAAA,EAAC;AACnK,WAAS,GAAG7D,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAE;AAAC,OAAGG,IAAEC,EAAC;AAAE,QAAI6Z,KAAE,OAAK7Z,GAAE,QAAM;AAAK,QAAG,CAACwB,MAAG,CAACqY;AAAE,aAAOjW,MAAG,GAAG5D,IAAE,GAAE,KAAE,GAAE,GAAGD,IAAEC,IAAEJ,EAAC;AAAE,IAAA4B,KAAExB,GAAE;AAAU,OAAG,UAAQA;AAAE,QAAIwH,KAAEqS,MAAG,eAAa,OAAO,EAAE,2BAAyB,OAAKrY,GAAE,OAAM;AAAG,IAAAxB,GAAE,SAAO;AAAE,aAAOD,MAAG8Z,MAAG7Z,GAAE,QAAM,GAAGA,IAAED,GAAE,OAAM,MAAKH,EAAC,GAAEI,GAAE,QAAM,GAAGA,IAAE,MAAKwH,IAAE5H,EAAC,KAAG,GAAGG,IAAEC,IAAEwH,IAAE5H,EAAC;AAAE,IAAAI,GAAE,gBAAcwB,GAAE;AAAM,IAAAoC,MAAG,GAAG5D,IAAE,GAAE,IAAE;AAAE,WAAOA,GAAE;AAAA,EAAK;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAU,IAAAC,GAAE,iBAAe,GAAGD,IAAEC,GAAE,gBAAeA,GAAE,mBAAiBA,GAAE,OAAO,IAAEA,GAAE,WAAS,GAAGD,IAAEC,GAAE,SAAQ,KAAE;AAAE,OAAGD,IAAEC,GAAE,aAAa;AAAA,EAAC;AAC5e,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,OAAI;AAAC,OAAGA,EAAC;AAAE,IAAA5D,GAAE,SAAO;AAAI,OAAGD,IAAEC,IAAE,GAAEwB,EAAC;AAAE,WAAOxB,GAAE;AAAA,EAAK;AAAC,MAAI,KAAG,EAAC,YAAW,MAAK,aAAY,MAAK,WAAU,EAAC;AAAE,WAAS,GAAGD,IAAE;AAAC,WAAM,EAAC,WAAUA,IAAE,WAAU,MAAK,aAAY,KAAI;AAAA,EAAC;AAClM,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAExB,GAAE,cAAa4D,KAAEgW,IAAE,SAAQha,KAAE,OAAGia,KAAE,OAAK7Z,GAAE,QAAM,MAAKwH;AAAE,KAACA,KAAEqS,QAAKrS,KAAE,SAAOzH,MAAG,SAAOA,GAAE,gBAAc,QAAG,OAAK6D,KAAE;AAAI,QAAG4D;AAAE,MAAA5H,KAAE,MAAGI,GAAE,SAAO;AAAA,aAAa,SAAOD,MAAG,SAAOA,GAAE;AAAc,MAAA6D,MAAG;AAAE0V,QAAEM,KAAEhW,KAAE,CAAC;AAAE,QAAG,SAAO7D,IAAE;AAAC,SAAGC,EAAC;AAAE,MAAAD,KAAEC,GAAE;AAAc,UAAG,SAAOD,OAAIA,KAAEA,GAAE,YAAW,SAAOA;AAAG,eAAO,OAAKC,GAAE,OAAK,KAAGA,GAAE,QAAM,IAAE,SAAOD,GAAE,OAAKC,GAAE,QAAM,IAAEA,GAAE,QAAM,YAAW;AAAK,MAAA6Z,KAAErY,GAAE;AAAS,MAAAzB,KAAEyB,GAAE;AAAS,aAAO5B,MAAG4B,KAAExB,GAAE,MAAKJ,KAAEI,GAAE,OAAM6Z,KAAE,EAAC,MAAK,UAAS,UAASA,GAAC,GAAE,OAAKrY,KAAE,MAAI,SAAO5B,MAAGA,GAAE,aAAW,GAAEA,GAAE,eAC7eia,MAAGja,KAAE,GAAGia,IAAErY,IAAE,GAAE,IAAI,GAAEzB,KAAE,GAAGA,IAAEyB,IAAE,GAAE,IAAI,GAAE5B,GAAE,SAAOI,IAAED,GAAE,SAAOC,IAAEJ,GAAE,UAAQG,IAAEC,GAAE,QAAMJ,IAAEI,GAAE,MAAM,gBAAc,GAAG,CAAC,GAAEA,GAAE,gBAAc,IAAGD,MAAG,GAAGC,IAAE6Z,EAAC;AAAA,IAAC;AAAC,IAAAjW,KAAE7D,GAAE;AAAc,QAAG,SAAO6D,OAAI4D,KAAE5D,GAAE,YAAW,SAAO4D;AAAG,aAAO,GAAGzH,IAAEC,IAAE6Z,IAAErY,IAAEgG,IAAE5D,IAAE,CAAC;AAAE,QAAGhE,IAAE;AAAC,MAAAA,KAAE4B,GAAE;AAAS,MAAAqY,KAAE7Z,GAAE;AAAK,MAAA4D,KAAE7D,GAAE;AAAM,MAAAyH,KAAE5D,GAAE;AAAQ,UAAI0S,KAAE,EAAC,MAAK,UAAS,UAAS9U,GAAE,SAAQ;AAAE,aAAKqY,KAAE,MAAI7Z,GAAE,UAAQ4D,MAAGpC,KAAExB,GAAE,OAAMwB,GAAE,aAAW,GAAEA,GAAE,eAAa8U,IAAEtW,GAAE,YAAU,SAAOwB,KAAE,GAAGoC,IAAE0S,EAAC,GAAE9U,GAAE,eAAaoC,GAAE,eAAa;AAAU,eAAO4D,KAAE5H,KAAE,GAAG4H,IAAE5H,EAAC,KAAGA,KAAE,GAAGA,IAAEia,IAAE,GAAE,IAAI,GAAEja,GAAE,SAAO;AAAG,MAAAA,GAAE,SACnfI;AAAE,MAAAwB,GAAE,SAAOxB;AAAE,MAAAwB,GAAE,UAAQ5B;AAAE,MAAAI,GAAE,QAAMwB;AAAE,MAAAA,KAAE5B;AAAE,MAAAA,KAAEI,GAAE;AAAM,MAAA6Z,KAAE9Z,GAAE,MAAM;AAAc,MAAA8Z,KAAE,SAAOA,KAAE,GAAG,CAAC,IAAE,EAAC,WAAUA,GAAE,YAAU,GAAE,WAAU,MAAK,aAAYA,GAAE,YAAW;AAAE,MAAAja,GAAE,gBAAcia;AAAE,MAAAja,GAAE,aAAWG,GAAE,aAAW,CAAC;AAAE,MAAAC,GAAE,gBAAc;AAAG,aAAOwB;AAAA,IAAC;AAAC,IAAA5B,KAAEG,GAAE;AAAM,IAAAA,KAAEH,GAAE;AAAQ,IAAA4B,KAAE,GAAG5B,IAAE,EAAC,MAAK,WAAU,UAAS4B,GAAE,SAAQ,CAAC;AAAE,WAAKxB,GAAE,OAAK,OAAKwB,GAAE,QAAM;AAAG,IAAAA,GAAE,SAAOxB;AAAE,IAAAwB,GAAE,UAAQ;AAAK,aAAOzB,OAAI,IAAEC,GAAE,WAAU,SAAO,KAAGA,GAAE,YAAU,CAACD,EAAC,GAAEC,GAAE,SAAO,MAAI,EAAE,KAAKD,EAAC;AAAG,IAAAC,GAAE,QAAMwB;AAAE,IAAAxB,GAAE,gBAAc;AAAK,WAAOwB;AAAA,EAAC;AACnd,WAAS,GAAGzB,IAAEC,IAAE;AAAC,IAAAA,KAAE,GAAG,EAAC,MAAK,WAAU,UAASA,GAAC,GAAED,GAAE,MAAK,GAAE,IAAI;AAAE,IAAAC,GAAE,SAAOD;AAAE,WAAOA,GAAE,QAAMC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,aAAOA,MAAG,GAAGA,EAAC;AAAE,OAAGxB,IAAED,GAAE,OAAM,MAAK,CAAC;AAAE,IAAAA,KAAE,GAAGC,IAAEA,GAAE,aAAa,QAAQ;AAAE,IAAAD,GAAE,SAAO;AAAE,IAAAC,GAAE,gBAAc;AAAK,WAAOD;AAAA,EAAC;AAC/N,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAE;AAAC,QAAG,GAAE;AAAC,UAAG7Z,GAAE,QAAM;AAAI,eAAOA,GAAE,SAAO,MAAKwB,KAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAE,GAAGzB,IAAEC,IAAE6Z,IAAErY,EAAC;AAAE,UAAG,SAAOxB,GAAE;AAAc,eAAOA,GAAE,QAAMD,GAAE,OAAMC,GAAE,SAAO,KAAI;AAAK,MAAAJ,KAAE4B,GAAE;AAAS,MAAAoC,KAAE5D,GAAE;AAAK,MAAAwB,KAAE,GAAG,EAAC,MAAK,WAAU,UAASA,GAAE,SAAQ,GAAEoC,IAAE,GAAE,IAAI;AAAE,MAAAhE,KAAE,GAAGA,IAAEgE,IAAEiW,IAAE,IAAI;AAAE,MAAAja,GAAE,SAAO;AAAE,MAAA4B,GAAE,SAAOxB;AAAE,MAAAJ,GAAE,SAAOI;AAAE,MAAAwB,GAAE,UAAQ5B;AAAE,MAAAI,GAAE,QAAMwB;AAAE,aAAKxB,GAAE,OAAK,MAAI,GAAGA,IAAED,GAAE,OAAM,MAAK8Z,EAAC;AAAE,MAAA7Z,GAAE,MAAM,gBAAc,GAAG6Z,EAAC;AAAE,MAAA7Z,GAAE,gBAAc;AAAG,aAAOJ;AAAA,IAAC;AAAC,QAAG,OAAKI,GAAE,OAAK;AAAG,aAAO,GAAGD,IAAEC,IAAE6Z,IAAE,IAAI;AAAE,QAAG,SAAOjW,GAAE,MAAK;AAAC,MAAApC,KAAEoC,GAAE,eAAaA,GAAE,YAAY;AAChf,UAAGpC;AAAE,YAAIgG,KAAEhG,GAAE;AAAK,MAAAA,KAAEgG;AAAE,MAAA5H,KAAE,MAAM,EAAE,GAAG,CAAC;AAAE,MAAA4B,KAAE,GAAG5B,IAAE4B,IAAE,MAAM;AAAE,aAAO,GAAGzB,IAAEC,IAAE6Z,IAAErY,EAAC;AAAA,IAAC;AAAC,IAAAgG,KAAE,OAAKqS,KAAE9Z,GAAE;AAAY,QAAG,MAAIyH,IAAE;AAAC,MAAAhG,KAAE0Y;AAAE,UAAG,SAAO1Y,IAAE;AAAC,gBAAOqY,KAAE,CAACA,IAAG;AAAA,UAAA,KAAK;AAAE,YAAAjW,KAAE;AAAE;AAAA,UAAM,KAAK;AAAG,YAAAA,KAAE;AAAE;AAAA,UAAM,KAAK;AAAA,UAAG,KAAK;AAAA,UAAI,KAAK;AAAA,UAAI,KAAK;AAAA,UAAI,KAAK;AAAA,UAAK,KAAK;AAAA,UAAK,KAAK;AAAA,UAAK,KAAK;AAAA,UAAK,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAM,KAAK;AAAA,UAAO,KAAK;AAAA,UAAO,KAAK;AAAA,UAAO,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAQ,KAAK;AAAA,UAAS,KAAK;AAAA,UAAS,KAAK;AAAS,YAAAA,KAAE;AAAG;AAAA,UAAM,KAAK;AAAU,YAAAA,KAAE;AAAU;AAAA,UAAM;AAAQ,YAAAA,KAAE;AAAA,QAAC;AAAC,QAAAA,KAAE,OAAKA,MAAGpC,GAAE,iBAAeqY,OAAI,IAAEjW;AACnf,cAAIA,MAAGA,OAAIhE,GAAE,cAAYA,GAAE,YAAUgE,IAAE,GAAG7D,IAAE6D,EAAC,GAAE,GAAGpC,IAAEzB,IAAE6D,IAAE,EAAE;AAAA,MAAE;AAAC,SAAE;AAAG,MAAApC,KAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;AAAE,aAAO,GAAGzB,IAAEC,IAAE6Z,IAAErY,EAAC;AAAA,IAAC;AAAC,QAAG,SAAOoC,GAAE;AAAK,aAAO5D,GAAE,SAAO,KAAIA,GAAE,QAAMD,GAAE,OAAMC,KAAE,GAAG,KAAK,MAAKD,EAAC,GAAE6D,GAAE,cAAY5D,IAAE;AAAK,IAAAD,KAAEH,GAAE;AAAY,SAAG,GAAGgE,GAAE,WAAW;AAAE,SAAG5D;AAAEwZ,UAAE;AAAG,SAAG;AAAK,aAAOzZ,OAAI,GAAG,QAAM,IAAG,GAAG,QAAM,IAAG,GAAG,QAAM,IAAG,KAAGA,GAAE,IAAG,KAAGA,GAAE,UAAS,KAAGC;AAAG,IAAAA,KAAE,GAAGA,IAAEwB,GAAE,QAAQ;AAAE,IAAAxB,GAAE,SAAO;AAAK,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,IAAAD,GAAE,SAAOC;AAAE,QAAIwB,KAAEzB,GAAE;AAAU,aAAOyB,OAAIA,GAAE,SAAOxB;AAAG,OAAGD,GAAE,QAAOC,IAAE,CAAC;AAAA,EAAC;AACxc,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAIhE,KAAEG,GAAE;AAAc,aAAOH,KAAEG,GAAE,gBAAc,EAAC,aAAYC,IAAE,WAAU,MAAK,oBAAmB,GAAE,MAAKwB,IAAE,MAAK,GAAE,UAASoC,GAAC,KAAGhE,GAAE,cAAYI,IAAEJ,GAAE,YAAU,MAAKA,GAAE,qBAAmB,GAAEA,GAAE,OAAK4B,IAAE5B,GAAE,OAAK,GAAEA,GAAE,WAASgE;AAAA,EAAE;AAC3O,WAAS,GAAG7D,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAExB,GAAE,cAAa4D,KAAEpC,GAAE,aAAY5B,KAAE4B,GAAE;AAAK,OAAGzB,IAAEC,IAAEwB,GAAE,UAAS,CAAC;AAAE,IAAAA,KAAEoY,IAAE;AAAQ,QAAG,OAAKpY,KAAE;AAAG,MAAAA,KAAEA,KAAE,IAAE,GAAExB,GAAE,SAAO;AAAA,SAAQ;AAAC,UAAG,SAAOD,MAAG,OAAKA,GAAE,QAAM;AAAK;AAAE,eAAIA,KAAEC,GAAE,OAAM,SAAOD,MAAG;AAAC,gBAAG,OAAKA,GAAE;AAAI,uBAAOA,GAAE,iBAAe,GAAGA,IAAE,GAAEC,EAAC;AAAA,qBAAU,OAAKD,GAAE;AAAI,iBAAGA,IAAE,GAAEC,EAAC;AAAA,qBAAU,SAAOD,GAAE,OAAM;AAAC,cAAAA,GAAE,MAAM,SAAOA;AAAE,cAAAA,KAAEA,GAAE;AAAM;AAAA,YAAQ;AAAC,gBAAGA,OAAIC;AAAE,oBAAM;AAAE,mBAAK,SAAOD,GAAE,WAAS;AAAC,kBAAG,SAAOA,GAAE,UAAQA,GAAE,WAASC;AAAE,sBAAM;AAAE,cAAAD,KAAEA,GAAE;AAAA,YAAM;AAAC,YAAAA,GAAE,QAAQ,SAAOA,GAAE;AAAO,YAAAA,KAAEA,GAAE;AAAA,UAAO;AAAC,MAAAyB,MAAG;AAAA,IAAC;AAAC8X,QAAEM,KAAEpY,EAAC;AAAE,QAAG,OAAKxB,GAAE,OAAK;AAAG,MAAAA,GAAE,gBAC/e;AAAA;AAAU,cAAO4D;QAAG,KAAK;AAAW,cAAE5D,GAAE;AAAM,eAAI4D,KAAE,MAAK,SAAO;AAAG,YAAA7D,KAAE,EAAE,WAAU,SAAOA,MAAG,SAAO,GAAGA,EAAC,MAAI6D,KAAE,IAAG,IAAE,EAAE;AAAQ,cAAEA;AAAE,mBAAO,KAAGA,KAAE5D,GAAE,OAAMA,GAAE,QAAM,SAAO4D,KAAE,EAAE,SAAQ,EAAE,UAAQ;AAAM,aAAG5D,IAAE,OAAG4D,IAAE,GAAEhE,EAAC;AAAE;AAAA,QAAM,KAAK;AAAY,cAAE;AAAK,UAAAgE,KAAE5D,GAAE;AAAM,eAAIA,GAAE,QAAM,MAAK,SAAO4D,MAAG;AAAC,YAAA7D,KAAE6D,GAAE;AAAU,gBAAG,SAAO7D,MAAG,SAAO,GAAGA,EAAC,GAAE;AAAC,cAAAC,GAAE,QAAM4D;AAAE;AAAA,YAAK;AAAC,YAAA7D,KAAE6D,GAAE;AAAQ,YAAAA,GAAE,UAAQ;AAAE,gBAAEA;AAAE,YAAAA,KAAE7D;AAAA,UAAC;AAAC,aAAGC,IAAE,MAAG,GAAE,MAAKJ,EAAC;AAAE;AAAA,QAAM,KAAK;AAAW,aAAGI,IAAE,OAAG,MAAK,MAAK,MAAM;AAAE;AAAA,QAAM;AAAQ,UAAAA,GAAE,gBAAc;AAAA,MAAI;AAAC,WAAOA,GAAE;AAAA,EAAK;AAC7d,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAKA,GAAE,OAAK,MAAI,SAAOD,OAAIA,GAAE,YAAU,MAAKC,GAAE,YAAU,MAAKA,GAAE,SAAO;AAAA,EAAE;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,aAAOD,OAAIC,GAAE,eAAaD,GAAE;AAAc,UAAIC,GAAE;AAAM,QAAG,OAAK,IAAEA,GAAE;AAAY,aAAO;AAAK,QAAG,SAAOD,MAAGC,GAAE,UAAQD,GAAE;AAAM,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAG,SAAOC,GAAE,OAAM;AAAC,MAAAD,KAAEC,GAAE;AAAM,UAAE,GAAGD,IAAEA,GAAE,YAAY;AAAE,MAAAC,GAAE,QAAM;AAAE,WAAI,EAAE,SAAOA,IAAE,SAAOD,GAAE;AAAS,QAAAA,KAAEA,GAAE,SAAQ,IAAE,EAAE,UAAQ,GAAGA,IAAEA,GAAE,YAAY,GAAE,EAAE,SAAOC;AAAE,QAAE,UAAQ;AAAA,IAAI;AAAC,WAAOA,GAAE;AAAA,EAAK;AAC9a,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,YAAOA,GAAE,KAAG;AAAA,MAAE,KAAK;AAAE,WAAGA,EAAC;AAAE,WAAI;AAAC;AAAA,MAAM,KAAK;AAAE,WAAGA,EAAC;AAAE;AAAA,MAAM,KAAK;AAAE,WAAGA,GAAE,IAAI,KAAG,GAAGA,EAAC;AAAE;AAAA,MAAM,KAAK;AAAE,WAAGA,IAAEA,GAAE,UAAU,aAAa;AAAE;AAAA,MAAM,KAAK;AAAG,YAAIwB,KAAExB,GAAE,KAAK,UAAS4D,KAAE5D,GAAE,cAAc;AAAMsZ,YAAE,IAAG9X,GAAE,aAAa;AAAE,QAAAA,GAAE,gBAAcoC;AAAE;AAAA,MAAM,KAAK;AAAG,QAAApC,KAAExB,GAAE;AAAc,YAAG,SAAOwB,IAAE;AAAC,cAAG,SAAOA,GAAE;AAAW,mBAAO8X,IAAEM,KAAEA,IAAE,UAAQ,CAAC,GAAE5Z,GAAE,SAAO,KAAI;AAAK,cAAG,OAAK,IAAEA,GAAE,MAAM;AAAY,mBAAO,GAAGD,IAAEC,IAAE,CAAC;AAAEsZ,cAAEM,KAAEA,IAAE,UAAQ,CAAC;AAAE,UAAA7Z,KAAE,GAAGA,IAAEC,IAAE,CAAC;AAAE,iBAAO,SAAOD,KAAEA,GAAE,UAAQ;AAAA,QAAI;AAACuZ,YAAEM,KAAEA,IAAE,UAAQ,CAAC;AAAE;AAAA,MAAM,KAAK;AAAG,QAAApY,KAAE,OAAK,IACrfxB,GAAE;AAAY,YAAG,OAAKD,GAAE,QAAM,MAAK;AAAC,cAAGyB;AAAE,mBAAO,GAAGzB,IAAEC,IAAE,CAAC;AAAE,UAAAA,GAAE,SAAO;AAAA,QAAG;AAAC,QAAA4D,KAAE5D,GAAE;AAAc,iBAAO4D,OAAIA,GAAE,YAAU,MAAKA,GAAE,OAAK,MAAKA,GAAE,aAAW;AAAM0V,YAAEM,KAAEA,IAAE,OAAO;AAAE,YAAGpY;AAAE;AAAA;AAAW,iBAAO;AAAA,MAAK,KAAK;AAAA,MAAG,KAAK;AAAG,eAAOxB,GAAE,QAAM,GAAE,GAAGD,IAAEC,IAAE,CAAC;AAAA,IAAC;AAAC,WAAO,GAAGD,IAAEC,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAG,IAAG,IAAG;AACxQ,OAAG,SAASD,IAAEC,IAAE;AAAC,aAAQ,IAAEA,GAAE,OAAM,SAAO,KAAG;AAAC,UAAG,MAAI,EAAE,OAAK,MAAI,EAAE;AAAI,QAAAD,GAAE,YAAY,EAAE,SAAS;AAAA,eAAU,MAAI,EAAE,OAAK,SAAO,EAAE,OAAM;AAAC,UAAE,MAAM,SAAO;AAAE,YAAE,EAAE;AAAM;AAAA,MAAQ;AAAC,UAAG,MAAIC;AAAE;AAAM,aAAK,SAAO,EAAE,WAAS;AAAC,YAAG,SAAO,EAAE,UAAQ,EAAE,WAASA;AAAE;AAAO,YAAE,EAAE;AAAA,MAAM;AAAC,QAAE,QAAQ,SAAO,EAAE;AAAO,UAAE,EAAE;AAAA,IAAO;AAAA,EAAC;AAAE,OAAG,WAAU;AAAA;AACvT,OAAG,SAASD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE7D,GAAE;AAAc,QAAG6D,OAAIpC,IAAE;AAAC,MAAAzB,KAAEC,GAAE;AAAU,SAAG,GAAG,OAAO;AAAE,UAAIJ,KAAE;AAAK,cAAO,GAAC;AAAA,QAAE,KAAK;AAAQ,UAAAgE,KAAE,GAAG7D,IAAE6D,EAAC;AAAE,UAAApC,KAAE,GAAGzB,IAAEyB,EAAC;AAAE,UAAA5B,KAAE,CAAA;AAAG;AAAA,QAAM,KAAK;AAAS,UAAAgE,KAAEoV,IAAE,CAAA,GAAGpV,IAAE,EAAC,OAAM,OAAM,CAAC;AAAE,UAAApC,KAAEwX,IAAE,CAAA,GAAGxX,IAAE,EAAC,OAAM,OAAM,CAAC;AAAE,UAAA5B,KAAE,CAAE;AAAC;AAAA,QAAM,KAAK;AAAW,UAAAgE,KAAE,GAAG7D,IAAE6D,EAAC;AAAE,UAAApC,KAAE,GAAGzB,IAAEyB,EAAC;AAAE,UAAA5B,KAAE,CAAE;AAAC;AAAA,QAAM;AAAQ,yBAAa,OAAOgE,GAAE,WAAS,eAAa,OAAOpC,GAAE,YAAUzB,GAAE,UAAQ;AAAA,MAAG;AAAC,SAAG,GAAEyB,EAAC;AAAE,UAAIqY;AAAE,UAAE;AAAK,WAAInD,MAAK9S;AAAE,YAAG,CAACpC,GAAE,eAAekV,EAAC,KAAG9S,GAAE,eAAe8S,EAAC,KAAG,QAAM9S,GAAE8S;AAAG,cAAG,YAAUA,IAAE;AAAC,gBAAIlP,KAAE5D,GAAE8S;AAAG,iBAAImD,MAAKrS;AAAE,cAAAA,GAAE,eAAeqS,EAAC,MAClf,MAAI,IAAE,KAAI,EAAEA,MAAG;AAAA,UAAG;AAAK,0CAA4BnD,MAAG,eAAaA,MAAG,qCAAmCA,MAAG,+BAA6BA,MAAG,gBAAcA,OAAI,GAAG,eAAeA,EAAC,IAAE9W,OAAIA,KAAE,CAAA,MAAKA,KAAEA,MAAG,IAAI,KAAK8W,IAAE,IAAI;AAAG,WAAIA,MAAKlV,IAAE;AAAC,YAAI8U,KAAE9U,GAAEkV;AAAG,QAAAlP,KAAE,QAAM5D,KAAEA,GAAE8S,MAAG;AAAO,YAAGlV,GAAE,eAAekV,EAAC,KAAGJ,OAAI9O,OAAI,QAAM8O,MAAG,QAAM9O;AAAG,cAAG,YAAUkP;AAAE,gBAAGlP,IAAE;AAAC,mBAAIqS,MAAKrS;AAAE,iBAACA,GAAE,eAAeqS,EAAC,KAAGvD,MAAGA,GAAE,eAAeuD,EAAC,MAAI,MAAI,IAAE,CAAA,IAAI,EAAEA,MAAG;AAAI,mBAAIA,MAAKvD;AAAE,gBAAAA,GAAE,eAAeuD,EAAC,KAAGrS,GAAEqS,QAAKvD,GAAEuD,QAAK,MAAI,IAAE,CAAE,IAAE,EAAEA,MAAGvD,GAAEuD;AAAA,YAAG;AAAM,oBAAIja,OAAIA,KAAE,CAAE,IAAEA,GAAE;AAAA,gBAAK8W;AAAA,gBACpf;AAAA,cAAC,IAAG,IAAEJ;AAAA;AAAM,0CAA4BI,MAAGJ,KAAEA,KAAEA,GAAE,SAAO,QAAO9O,KAAEA,KAAEA,GAAE,SAAO,QAAO,QAAM8O,MAAG9O,OAAI8O,OAAI1W,KAAEA,MAAG,CAAE,GAAE,KAAK8W,IAAEJ,EAAC,KAAG,eAAaI,KAAE,aAAW,OAAOJ,MAAG,aAAW,OAAOA,OAAI1W,KAAEA,MAAG,CAAE,GAAE,KAAK8W,IAAE,KAAGJ,EAAC,IAAE,qCAAmCI,MAAG,+BAA6BA,OAAI,GAAG,eAAeA,EAAC,KAAG,QAAMJ,MAAG,eAAaI,MAAGyC,IAAE,UAASpZ,EAAC,GAAEH,MAAG4H,OAAI8O,OAAI1W,KAAE,CAAA,OAAMA,KAAEA,MAAG,CAAE,GAAE,KAAK8W,IAAEJ,EAAC;AAAA,MAAE;AAAC,YAAI1W,KAAEA,MAAG,CAAE,GAAE,KAAK,SAAQ,CAAC;AAAE,UAAI8W,KAAE9W;AAAE,UAAGI,GAAE,cAAY0W;AAAE,QAAA1W,GAAE,SAAO;AAAA,IAAC;AAAA,EAAC;AAAE,OAAG,SAASD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,UAAIA,OAAIxB,GAAE,SAAO;AAAA,EAAE;AAChe,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAG,CAACwZ;AAAE,cAAOzZ,GAAE,UAAU;AAAA,QAAA,KAAK;AAAS,UAAAC,KAAED,GAAE;AAAK,mBAAQ,IAAE,MAAK,SAAOC;AAAG,qBAAOA,GAAE,cAAY,IAAEA,KAAGA,KAAEA,GAAE;AAAQ,mBAAO,IAAED,GAAE,OAAK,OAAK,EAAE,UAAQ;AAAK;AAAA,QAAM,KAAK;AAAY,cAAEA,GAAE;AAAK,mBAAQyB,KAAE,MAAK,SAAO;AAAG,qBAAO,EAAE,cAAYA,KAAE,IAAG,IAAE,EAAE;AAAQ,mBAAOA,KAAExB,MAAG,SAAOD,GAAE,OAAKA,GAAE,OAAK,OAAKA,GAAE,KAAK,UAAQ,OAAKyB,GAAE,UAAQ;AAAA,MAAI;AAAA,EAAC;AAC5U,WAAS2Y,IAAEpa,IAAE;AAAC,QAAIC,KAAE,SAAOD,GAAE,aAAWA,GAAE,UAAU,UAAQA,GAAE,OAAM,IAAE,GAAEyB,KAAE;AAAE,QAAGxB;AAAE,eAAQ4D,KAAE7D,GAAE,OAAM,SAAO6D;AAAG,aAAGA,GAAE,QAAMA,GAAE,YAAWpC,MAAGoC,GAAE,eAAa,UAASpC,MAAGoC,GAAE,QAAM,UAASA,GAAE,SAAO7D,IAAE6D,KAAEA,GAAE;AAAA;AAAa,WAAIA,KAAE7D,GAAE,OAAM,SAAO6D;AAAG,aAAGA,GAAE,QAAMA,GAAE,YAAWpC,MAAGoC,GAAE,cAAapC,MAAGoC,GAAE,OAAMA,GAAE,SAAO7D,IAAE6D,KAAEA,GAAE;AAAQ,IAAA7D,GAAE,gBAAcyB;AAAE,IAAAzB,GAAE,aAAW;AAAE,WAAOC;AAAA,EAAC;AAC7V,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAExB,GAAE;AAAa,OAAGA,EAAC;AAAE,YAAOA,GAAE,KAAG;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAG,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAE,KAAK;AAAG,eAAOma,IAAEna,EAAC,GAAE;AAAA,MAAK,KAAK;AAAE,eAAO,GAAGA,GAAE,IAAI,KAAG,GAAI,GAACma,IAAEna,EAAC,GAAE;AAAA,MAAK,KAAK;AAAE,QAAAwB,KAAExB,GAAE;AAAU,WAAE;AAAGoZ,YAAE,EAAE;AAAEA,YAAEG,GAAC;AAAE,WAAE;AAAG,QAAA/X,GAAE,mBAAiBA,GAAE,UAAQA,GAAE,gBAAeA,GAAE,iBAAe;AAAM,YAAG,SAAOzB,MAAG,SAAOA,GAAE;AAAM,aAAGC,EAAC,IAAEA,GAAE,SAAO,IAAE,SAAOD,MAAGA,GAAE,cAAc,gBAAc,OAAKC,GAAE,QAAM,SAAOA,GAAE,SAAO,MAAK,SAAO,OAAK,GAAG,EAAE,GAAE,KAAG;AAAO,WAAGD,IAAEC,EAAC;AAAEma,YAAEna,EAAC;AAAE,eAAO;AAAA,MAAK,KAAK;AAAE,WAAGA,EAAC;AAAE,YAAI4D,KAAE,GAAG,GAAG,OAAO;AAC7f,YAAE5D,GAAE;AAAK,YAAG,SAAOD,MAAG,QAAMC,GAAE;AAAU,aAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,EAAC,GAAE7D,GAAE,QAAMC,GAAE,QAAMA,GAAE,SAAO,KAAIA,GAAE,SAAO;AAAA,aAAa;AAAC,cAAG,CAACwB,IAAE;AAAC,gBAAG,SAAOxB,GAAE;AAAU,oBAAM,MAAM,EAAE,GAAG,CAAC;AAAEma,gBAAEna,EAAC;AAAE,mBAAO;AAAA,UAAI;AAAC,UAAAD,KAAE,GAAG,GAAG,OAAO;AAAE,cAAG,GAAGC,EAAC,GAAE;AAAC,YAAAwB,KAAExB,GAAE;AAAU,gBAAEA,GAAE;AAAK,gBAAIJ,KAAEI,GAAE;AAAc,YAAAwB,GAAE,MAAIxB;AAAE,YAAAwB,GAAE,MAAI5B;AAAE,YAAAG,KAAE,OAAKC,GAAE,OAAK;AAAG,oBAAO,GAAG;AAAA,cAAA,KAAK;AAASmZ,oBAAE,UAAS3X,EAAC;AAAE2X,oBAAE,SAAQ3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAA,cAAS,KAAK;AAAA,cAAS,KAAK;AAAQ2X,oBAAE,QAAO3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAA,cAAQ,KAAK;AAAQ,qBAAIoC,KAAE,GAAEA,KAAE,GAAG,QAAOA;AAAIuV,sBAAE,GAAGvV,KAAGpC,EAAC;AAAE;AAAA,cAAM,KAAK;AAAS2X,oBAAE,SAAQ3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAA,cAAM,KAAK;AAAA,cAAQ,KAAK;AAAO2X;AAAAA,kBAAE;AAAA,kBACnhB3X;AAAA,gBAAC;AAAE2X,oBAAE,QAAO3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAU2X,oBAAE,UAAS3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAQ,mBAAGA,IAAE5B,EAAC;AAAEuZ,oBAAE,WAAU3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAS,gBAAAA,GAAE,gBAAc,EAAC,aAAY,CAAC,CAAC5B,GAAE,SAAQ;AAAEuZ,oBAAE,WAAU3X,EAAC;AAAE;AAAA,cAAM,KAAK;AAAW,mBAAGA,IAAE5B,EAAC,GAAEuZ,IAAE,WAAU3X,EAAC;AAAA,YAAC;AAAC,eAAG,GAAE5B,EAAC;AAAE,YAAAgE,KAAE;AAAK,qBAAQiW,MAAKja;AAAE,kBAAGA,GAAE,eAAeia,EAAC,GAAE;AAAC,oBAAIrS,KAAE5H,GAAEia;AAAG,+BAAaA,KAAE,aAAW,OAAOrS,KAAEhG,GAAE,gBAAcgG,OAAI,SAAK5H,GAAE,4BAA0B,GAAG4B,GAAE,aAAYgG,IAAEzH,EAAC,GAAE6D,KAAE,CAAC,YAAW4D,EAAC,KAAG,aAAW,OAAOA,MAAGhG,GAAE,gBAAc,KAAGgG,OAAI,SAAK5H,GAAE,4BAA0B;AAAA,kBAAG4B,GAAE;AAAA,kBAC1egG;AAAA,kBAAEzH;AAAA,gBAAC,GAAE6D,KAAE,CAAC,YAAW,KAAG4D,EAAC,KAAG,GAAG,eAAeqS,EAAC,KAAG,QAAMrS,MAAG,eAAaqS,MAAGV,IAAE,UAAS3X,EAAC;AAAA,cAAC;AAAC,oBAAO,GAAC;AAAA,cAAE,KAAK;AAAQ,mBAAGA,EAAC;AAAE,mBAAGA,IAAE5B,IAAE,IAAE;AAAE;AAAA,cAAM,KAAK;AAAW,mBAAG4B,EAAC;AAAE,mBAAGA,EAAC;AAAE;AAAA,cAAM,KAAK;AAAA,cAAS,KAAK;AAAS;AAAA,cAAM;AAAQ,+BAAa,OAAO5B,GAAE,YAAU4B,GAAE,UAAQ;AAAA,YAAG;AAAC,YAAAA,KAAEoC;AAAE,YAAA5D,GAAE,cAAYwB;AAAE,qBAAOA,OAAIxB,GAAE,SAAO;AAAA,UAAE,OAAK;AAAC,YAAA6Z,KAAE,MAAIjW,GAAE,WAASA,KAAEA,GAAE;AAAc,+CAAiC7D,OAAIA,KAAE,GAAG,CAAC;AAAG,+CAAiCA,KAAE,aAAW,KAAGA,KAAE8Z,GAAE,cAAc,KAAK,GAAE9Z,GAAE,YAAU,sBAAuBA,KAAEA,GAAE,YAAYA,GAAE,UAAU,KACzgB,aAAW,OAAOyB,GAAE,KAAGzB,KAAE8Z,GAAE,cAAc,GAAE,EAAC,IAAGrY,GAAE,GAAE,CAAC,KAAGzB,KAAE8Z,GAAE,cAAc,CAAC,GAAE,aAAW,MAAIA,KAAE9Z,IAAEyB,GAAE,WAASqY,GAAE,WAAS,OAAGrY,GAAE,SAAOqY,GAAE,OAAKrY,GAAE,UAAQzB,KAAE8Z,GAAE,gBAAgB9Z,IAAE,CAAC;AAAE,YAAAA,GAAE,MAAIC;AAAE,YAAAD,GAAE,MAAIyB;AAAE,eAAGzB,IAAEC,IAAE,OAAG,KAAE;AAAE,YAAAA,GAAE,YAAUD;AAAE,eAAE;AAAC,cAAA8Z,KAAE,GAAG,GAAErY,EAAC;AAAE,sBAAO,GAAG;AAAA,gBAAA,KAAK;AAAS2X,sBAAE,UAASpZ,EAAC;AAAEoZ,sBAAE,SAAQpZ,EAAC;AAAE,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAA,gBAAS,KAAK;AAAA,gBAAS,KAAK;AAAQ2X,sBAAE,QAAOpZ,EAAC;AAAE,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAA,gBAAQ,KAAK;AAAQ,uBAAIoC,KAAE,GAAEA,KAAE,GAAG,QAAOA;AAAIuV,wBAAE,GAAGvV,KAAG7D,EAAC;AAAE,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAS2X,sBAAE,SAAQpZ,EAAC;AAAE,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAA,gBAAM,KAAK;AAAA,gBAAQ,KAAK;AAAO2X;AAAAA,oBAAE;AAAA,oBAClfpZ;AAAA,kBAAC;AAAEoZ,sBAAE,QAAOpZ,EAAC;AAAE,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAU2X,sBAAE,UAASpZ,EAAC;AAAE,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAQ,qBAAGzB,IAAEyB,EAAC;AAAE,kBAAAoC,KAAE,GAAG7D,IAAEyB,EAAC;AAAE2X,sBAAE,WAAUpZ,EAAC;AAAE;AAAA,gBAAM,KAAK;AAAS,kBAAA6D,KAAEpC;AAAE;AAAA,gBAAM,KAAK;AAAS,kBAAAzB,GAAE,gBAAc,EAAC,aAAY,CAAC,CAACyB,GAAE,SAAQ;AAAE,kBAAAoC,KAAEoV,IAAE,CAAE,GAACxX,IAAE,EAAC,OAAM,OAAM,CAAC;AAAE2X,sBAAE,WAAUpZ,EAAC;AAAE;AAAA,gBAAM,KAAK;AAAW,qBAAGA,IAAEyB,EAAC;AAAE,kBAAAoC,KAAE,GAAG7D,IAAEyB,EAAC;AAAE2X,sBAAE,WAAUpZ,EAAC;AAAE;AAAA,gBAAM;AAAQ,kBAAA6D,KAAEpC;AAAA,cAAC;AAAC,iBAAG,GAAEoC,EAAC;AAAE,cAAA4D,KAAE5D;AAAE,mBAAIhE,MAAK4H;AAAE,oBAAGA,GAAE,eAAe5H,EAAC,GAAE;AAAC,sBAAI0W,KAAE9O,GAAE5H;AAAG,8BAAUA,KAAE,GAAGG,IAAEuW,EAAC,IAAE,8BAA4B1W,MAAG0W,KAAEA,KAAEA,GAAE,SAAO,QAAO,QAAMA,MAAG,GAAGvW,IAAEuW,EAAC,KAAG,eAAa1W,KAAE,aAAW,OAAO0W,MAAG,eAC7e,KAAG,OAAKA,OAAI,GAAGvW,IAAEuW,EAAC,IAAE,aAAW,OAAOA,MAAG,GAAGvW,IAAE,KAAGuW,EAAC,IAAE,qCAAmC1W,MAAG,+BAA6BA,MAAG,gBAAcA,OAAI,GAAG,eAAeA,EAAC,IAAE,QAAM0W,MAAG,eAAa1W,MAAGuZ,IAAE,UAASpZ,EAAC,IAAE,QAAMuW,MAAG,GAAGvW,IAAEH,IAAE0W,IAAEuD,EAAC;AAAA,gBAAE;AAAC,sBAAO;gBAAG,KAAK;AAAQ,qBAAG9Z,EAAC;AAAE,qBAAGA,IAAEyB,IAAE,KAAE;AAAE;AAAA,gBAAM,KAAK;AAAW,qBAAGzB,EAAC;AAAE,qBAAGA,EAAC;AAAE;AAAA,gBAAM,KAAK;AAAS,0BAAMyB,GAAE,SAAOzB,GAAE,aAAa,SAAQ,KAAG,GAAGyB,GAAE,KAAK,CAAC;AAAE;AAAA,gBAAM,KAAK;AAAS,kBAAAzB,GAAE,WAAS,CAAC,CAACyB,GAAE;AAAS,kBAAA5B,KAAE4B,GAAE;AAAM,0BAAM5B,KAAE,GAAGG,IAAE,CAAC,CAACyB,GAAE,UAAS5B,IAAE,KAAE,IAAE,QAAM4B,GAAE,gBAAc;AAAA,oBAAGzB;AAAA,oBAAE,CAAC,CAACyB,GAAE;AAAA,oBAASA,GAAE;AAAA,oBAClf;AAAA,kBAAE;AAAE;AAAA,gBAAM;AAAQ,iCAAa,OAAOoC,GAAE,YAAU7D,GAAE,UAAQ;AAAA,cAAG;AAAC,sBAAO,GAAG;AAAA,gBAAA,KAAK;AAAA,gBAAS,KAAK;AAAA,gBAAQ,KAAK;AAAA,gBAAS,KAAK;AAAW,kBAAAyB,KAAE,CAAC,CAACA,GAAE;AAAU,wBAAM;AAAA,gBAAE,KAAK;AAAM,kBAAAA,KAAE;AAAG,wBAAM;AAAA,gBAAE;AAAQ,kBAAAA,KAAE;AAAA,cAAE;AAAA,YAAC;AAAC,YAAAA,OAAIxB,GAAE,SAAO;AAAA,UAAE;AAAC,mBAAOA,GAAE,QAAMA,GAAE,SAAO,KAAIA,GAAE,SAAO;AAAA,QAAQ;AAACma,YAAEna,EAAC;AAAE,eAAO;AAAA,MAAK,KAAK;AAAE,YAAGD,MAAG,QAAMC,GAAE;AAAU,aAAGD,IAAEC,IAAED,GAAE,eAAcyB,EAAC;AAAA,aAAM;AAAC,cAAG,aAAW,OAAOA,MAAG,SAAOxB,GAAE;AAAU,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,cAAE,GAAG,GAAG,OAAO;AAAE,aAAG,GAAG,OAAO;AAAE,cAAG,GAAGA,EAAC,GAAE;AAAC,YAAAwB,KAAExB,GAAE;AAAU,gBAAEA,GAAE;AAAc,YAAAwB,GAAE,MAAIxB;AAAE,gBAAGJ,KAAE4B,GAAE,cAAY;AAAE,kBAAGzB,KACvf,IAAG,SAAOA;AAAE,wBAAOA,GAAE,KAAK;AAAA,kBAAA,KAAK;AAAE,uBAAGyB,GAAE,WAAU,GAAE,OAAKzB,GAAE,OAAK,EAAE;AAAE;AAAA,kBAAM,KAAK;AAAE,6BAAKA,GAAE,cAAc,4BAA0B,GAAGyB,GAAE,WAAU,GAAE,OAAKzB,GAAE,OAAK,EAAE;AAAA,gBAAC;AAAA;AAAC,YAAAH,OAAII,GAAE,SAAO;AAAA,UAAE;AAAM,YAAAwB,MAAG,MAAI,EAAE,WAAS,IAAE,EAAE,eAAe,eAAeA,EAAC,GAAEA,GAAE,MAAIxB,IAAEA,GAAE,YAAUwB;AAAA,QAAC;AAAC2Y,YAAEna,EAAC;AAAE,eAAO;AAAA,MAAK,KAAK;AAAGoZ,YAAEQ,GAAC;AAAE,QAAApY,KAAExB,GAAE;AAAc,YAAG,SAAOD,MAAG,SAAOA,GAAE,iBAAe,SAAOA,GAAE,cAAc,YAAW;AAAC,cAAGyZ,OAAG,SAAO,MAAI,OAAKxZ,GAAE,OAAK,MAAI,OAAKA,GAAE,QAAM;AAAK,eAAE,GAAG,GAAI,GAACA,GAAE,SAAO,OAAMJ,KAAE;AAAA,mBAAWA,KAAE,GAAGI,EAAC,GAAE,SAAOwB,MAAG,SAAOA,GAAE,YAAW;AAAC,gBAAG,SAC5fzB,IAAE;AAAC,kBAAG,CAACH;AAAE,sBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,cAAAA,KAAEI,GAAE;AAAc,cAAAJ,KAAE,SAAOA,KAAEA,GAAE,aAAW;AAAK,kBAAG,CAACA;AAAE,sBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,cAAAA,GAAE,MAAII;AAAA,YAAC;AAAM,iBAAI,GAAC,OAAKA,GAAE,QAAM,SAAOA,GAAE,gBAAc,OAAMA,GAAE,SAAO;AAAEma,gBAAEna,EAAC;AAAE,YAAAJ,KAAE;AAAA,UAAE;AAAM,qBAAO,OAAK,GAAG,EAAE,GAAE,KAAG,OAAMA,KAAE;AAAG,cAAG,CAACA;AAAE,mBAAOI,GAAE,QAAM,QAAMA,KAAE;AAAA,QAAI;AAAC,YAAG,OAAKA,GAAE,QAAM;AAAK,iBAAOA,GAAE,QAAM,GAAEA;AAAE,QAAAwB,KAAE,SAAOA;AAAE,QAAAA,QAAK,SAAOzB,MAAG,SAAOA,GAAE,kBAAgByB,OAAIxB,GAAE,MAAM,SAAO,MAAK,OAAKA,GAAE,OAAK,OAAK,SAAOD,MAAG,OAAK6Z,IAAE,UAAQ,KAAG,MAAIQ,QAAIA,MAAE,KAAG,GAAI;AAAG,iBAAOpa,GAAE,gBAAcA,GAAE,SAAO;AAAGma,YAAEna,EAAC;AAAE,eAAO;AAAA,MAAK,KAAK;AAAE,eAAO,GAAI,GACzf,GAAGD,IAAEC,EAAC,GAAE,SAAOD,MAAG,GAAGC,GAAE,UAAU,aAAa,GAAEma,IAAEna,EAAC,GAAE;AAAA,MAAK,KAAK;AAAG,eAAO,GAAGA,GAAE,KAAK,QAAQ,GAAEma,IAAEna,EAAC,GAAE;AAAA,MAAK,KAAK;AAAG,eAAO,GAAGA,GAAE,IAAI,KAAG,GAAE,GAAGma,IAAEna,EAAC,GAAE;AAAA,MAAK,KAAK;AAAGoZ,YAAEQ,GAAC;AAAE,QAAAha,KAAEI,GAAE;AAAc,YAAG,SAAOJ;AAAE,iBAAOua,IAAEna,EAAC,GAAE;AAAK,QAAAwB,KAAE,OAAKxB,GAAE,QAAM;AAAK,QAAA6Z,KAAEja,GAAE;AAAU,YAAG,SAAOia;AAAE,cAAGrY;AAAE,eAAG5B,IAAE,KAAE;AAAA,eAAM;AAAC,gBAAG,MAAIwa,OAAG,SAAOra,MAAG,OAAKA,GAAE,QAAM;AAAK,mBAAIA,KAAEC,GAAE,OAAM,SAAOD,MAAG;AAAC,gBAAA8Z,KAAE,GAAG9Z,EAAC;AAAE,oBAAG,SAAO8Z,IAAE;AAAC,kBAAA7Z,GAAE,SAAO;AAAI,qBAAGJ,IAAE,KAAE;AAAE,kBAAA4B,KAAEqY,GAAE;AAAY,2BAAOrY,OAAIxB,GAAE,cAAYwB,IAAExB,GAAE,SAAO;AAAG,kBAAAA,GAAE,eAAa;AAAE,kBAAAwB,KAAE;AAAE,uBAAI,IAAExB,GAAE,OAAM,SAAO;AAAG,oBAAAJ,KAAE,GAAEG,KAAEyB,IAAE5B,GAAE,SAAO,UAC7eia,KAAEja,GAAE,WAAU,SAAOia,MAAGja,GAAE,aAAW,GAAEA,GAAE,QAAMG,IAAEH,GAAE,QAAM,MAAKA,GAAE,eAAa,GAAEA,GAAE,gBAAc,MAAKA,GAAE,gBAAc,MAAKA,GAAE,cAAY,MAAKA,GAAE,eAAa,MAAKA,GAAE,YAAU,SAAOA,GAAE,aAAWia,GAAE,YAAWja,GAAE,QAAMia,GAAE,OAAMja,GAAE,QAAMia,GAAE,OAAMja,GAAE,eAAa,GAAEA,GAAE,YAAU,MAAKA,GAAE,gBAAcia,GAAE,eAAcja,GAAE,gBAAcia,GAAE,eAAcja,GAAE,cAAYia,GAAE,aAAYja,GAAE,OAAKia,GAAE,MAAK9Z,KAAE8Z,GAAE,cAAaja,GAAE,eAAa,SAAOG,KAAE,OAAK,EAAC,OAAMA,GAAE,OAAM,cAAaA,GAAE,aAAY,IAAG,IAAE,EAAE;AAAQuZ,sBAAEM,KAAEA,IAAE,UAAQ,IAAE,CAAC;AAAE,yBAAO5Z,GAAE;AAAA,gBAAK;AAAC,gBAAAD,KAClgBA,GAAE;AAAA,cAAO;AAAC,qBAAOH,GAAE,QAAMqZ,IAAG,IAAC,OAAKjZ,GAAE,SAAO,KAAIwB,KAAE,MAAG,GAAG5B,IAAE,KAAE,GAAEI,GAAE,QAAM;AAAA,UAAQ;AAAA,aAAK;AAAC,cAAG,CAACwB;AAAE,gBAAGzB,KAAE,GAAG8Z,EAAC,GAAE,SAAO9Z,IAAE;AAAC,kBAAGC,GAAE,SAAO,KAAIwB,KAAE,MAAG,IAAEzB,GAAE,aAAY,SAAO,MAAIC,GAAE,cAAY,GAAEA,GAAE,SAAO,IAAG,GAAGJ,IAAE,IAAE,GAAE,SAAOA,GAAE,QAAM,aAAWA,GAAE,YAAU,CAACia,GAAE,aAAW,CAACL;AAAE,uBAAOW,IAAEna,EAAC,GAAE;AAAA,YAAI;AAAM,kBAAEiZ,IAAC,IAAGrZ,GAAE,qBAAmB,MAAI,eAAa,MAAII,GAAE,SAAO,KAAIwB,KAAE,MAAG,GAAG5B,IAAE,KAAE,GAAEI,GAAE,QAAM;AAAS,UAAAJ,GAAE,eAAaia,GAAE,UAAQ7Z,GAAE,OAAMA,GAAE,QAAM6Z,OAAI,IAAEja,GAAE,MAAK,SAAO,IAAE,EAAE,UAAQia,KAAE7Z,GAAE,QAAM6Z,IAAEja,GAAE,OAAKia;AAAA,QAAE;AAAC,YAAG,SAAOja,GAAE;AAAK,iBAAOI,KAAEJ,GAAE,MAAKA,GAAE,YAC9eI,IAAEJ,GAAE,OAAKI,GAAE,SAAQJ,GAAE,qBAAmBqZ,IAAC,GAAGjZ,GAAE,UAAQ,MAAK,IAAE4Z,IAAE,SAAQN,IAAEM,KAAEpY,KAAE,IAAE,IAAE,IAAE,IAAE,CAAC,GAAExB;AAAEma,YAAEna,EAAC;AAAE,eAAO;AAAA,MAAK,KAAK;AAAA,MAAG,KAAK;AAAG,eAAO,GAAE,GAAGwB,KAAE,SAAOxB,GAAE,eAAc,SAAOD,MAAG,SAAOA,GAAE,kBAAgByB,OAAIxB,GAAE,SAAO,OAAMwB,MAAG,OAAKxB,GAAE,OAAK,KAAG,OAAK,KAAG,gBAAcma,IAAEna,EAAC,GAAEA,GAAE,eAAa,MAAIA,GAAE,SAAO,SAAOma,IAAEna,EAAC,GAAE;AAAA,MAAK,KAAK;AAAG,eAAO;AAAA,MAAK,KAAK;AAAG,eAAO;AAAA,IAAI;AAAC,UAAM,MAAM,EAAE,KAAIA,GAAE,GAAG,CAAC;AAAA,EAAE;AAClX,WAAS,GAAGD,IAAEC,IAAE;AAAC,OAAGA,EAAC;AAAE,YAAOA,GAAE,KAAK;AAAA,MAAA,KAAK;AAAE,eAAO,GAAGA,GAAE,IAAI,KAAG,GAAI,GAACD,KAAEC,GAAE,OAAMD,KAAE,SAAOC,GAAE,QAAMD,KAAE,SAAO,KAAIC,MAAG;AAAA,MAAK,KAAK;AAAE,eAAO,GAAI,GAACoZ,IAAE,EAAE,GAAEA,IAAEG,GAAC,GAAE,GAAI,GAACxZ,KAAEC,GAAE,OAAM,OAAKD,KAAE,UAAQ,OAAKA,KAAE,QAAMC,GAAE,QAAMD,KAAE,SAAO,KAAIC,MAAG;AAAA,MAAK,KAAK;AAAE,eAAO,GAAGA,EAAC,GAAE;AAAA,MAAK,KAAK;AAAGoZ,YAAEQ,GAAC;AAAE,QAAA7Z,KAAEC,GAAE;AAAc,YAAG,SAAOD,MAAG,SAAOA,GAAE,YAAW;AAAC,cAAG,SAAOC,GAAE;AAAU,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAE;AAAA,QAAE;AAAC,QAAAD,KAAEC,GAAE;AAAM,eAAOD,KAAE,SAAOC,GAAE,QAAMD,KAAE,SAAO,KAAIC,MAAG;AAAA,MAAK,KAAK;AAAG,eAAOoZ,IAAEQ,GAAC,GAAE;AAAA,MAAK,KAAK;AAAE,eAAO,GAAI,GAAC;AAAA,MAAK,KAAK;AAAG,eAAO,GAAG5Z,GAAE,KAAK,QAAQ,GAAE;AAAA,MAAK,KAAK;AAAA,MAAG,KAAK;AAAG,eAAO,GAAI,GAC9gB;AAAA,MAAK,KAAK;AAAG,eAAO;AAAA,MAAK;AAAQ,eAAO;AAAA,IAAI;AAAA,EAAC;AAAC,MAAI,KAAG,OAAGqa,MAAE,OAAG,KAAG,eAAa,OAAO,UAAQ,UAAQ,KAAIC,MAAE;AAAK,WAAS,GAAGva,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE;AAAI,QAAG,SAAO;AAAE,UAAG,eAAa,OAAO;AAAE,YAAG;AAAC,YAAE,IAAI;AAAA,QAAC,SAAOyB,IAAN;AAAS+Y,cAAExa,IAAEC,IAAEwB,EAAC;AAAA,QAAC;AAAA;AAAM,UAAE,UAAQ;AAAA,EAAI;AAAC,WAAS,GAAGzB,IAAEC,IAAE,GAAE;AAAC,QAAG;AAAC,QAAG;AAAA,IAAA,SAAOwB,IAAN;AAAS+Y,UAAExa,IAAEC,IAAEwB,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,KAAG;AACxR,WAAS,GAAGzB,IAAEC,IAAE;AAAC,SAAG;AAAG,IAAAD,KAAE,GAAE;AAAG,QAAG,GAAGA,EAAC,GAAE;AAAC,UAAG,oBAAmBA;AAAE,YAAI,IAAE,EAAC,OAAMA,GAAE,gBAAe,KAAIA,GAAE,aAAY;AAAA;AAAO,WAAE;AAAC,eAAG,IAAEA,GAAE,kBAAgB,EAAE,eAAa;AAAO,cAAIyB,KAAE,EAAE,gBAAc,EAAE,aAAY;AAAG,cAAGA,MAAG,MAAIA,GAAE,YAAW;AAAC,gBAAEA,GAAE;AAAW,gBAAIoC,KAAEpC,GAAE,cAAa5B,KAAE4B,GAAE;AAAU,YAAAA,KAAEA,GAAE;AAAY,gBAAG;AAAC,gBAAE,UAAS5B,GAAE;AAAA,YAAQ,SAAOyZ,IAAN;AAAS,kBAAE;AAAK,oBAAM;AAAA,YAAC;AAAC,gBAAIQ,KAAE,GAAErS,KAAE,IAAG8O,KAAE,IAAGI,KAAE,GAAE7U,KAAE,GAAEiX,KAAE/Y,IAAEiD,KAAE;AAAK;AAAE,yBAAO;AAAC,yBAAQsC,QAAI;AAAC,kBAAAwT,OAAI,KAAG,MAAIlV,MAAG,MAAIkV,GAAE,aAAWtR,KAAEqS,KAAEjW;AAAG,kBAAAkV,OAAIlZ,MAAG,MAAI4B,MAAG,MAAIsX,GAAE,aAAWxC,KAAEuD,KAAErY;AAAG,wBAAIsX,GAAE,aAAWe,MACnff,GAAE,UAAU;AAAQ,sBAAG,UAAQxT,KAAEwT,GAAE;AAAY;AAAM,kBAAA9V,KAAE8V;AAAE,kBAAAA,KAAExT;AAAA,gBAAC;AAAC,2BAAO;AAAC,sBAAGwT,OAAI/Y;AAAE,0BAAM;AAAE,kBAAAiD,OAAI,KAAG,EAAE0T,OAAI9S,OAAI4D,KAAEqS;AAAG,kBAAA7W,OAAIpD,MAAG,EAAEiC,OAAIL,OAAI8U,KAAEuD;AAAG,sBAAG,UAAQvU,KAAEwT,GAAE;AAAa;AAAM,kBAAAA,KAAE9V;AAAE,kBAAAA,KAAE8V,GAAE;AAAA,gBAAU;AAAC,gBAAAA,KAAExT;AAAA,cAAC;AAAC,gBAAE,OAAKkC,MAAG,OAAK8O,KAAE,OAAK,EAAC,OAAM9O,IAAE,KAAI8O,GAAC;AAAA,UAAC;AAAM,gBAAE;AAAA,QAAI;AAAC,UAAE,KAAG,EAAC,OAAM,GAAE,KAAI,EAAC;AAAA,IAAC;AAAM,UAAE;AAAK,SAAG,EAAC,aAAYvW,IAAE,gBAAe,EAAC;AAAE,SAAG;AAAG,SAAIua,MAAEta,IAAE,SAAOsa;AAAG,UAAGta,KAAEsa,KAAEva,KAAEC,GAAE,OAAM,OAAKA,GAAE,eAAa,SAAO,SAAOD;AAAE,QAAAA,GAAE,SAAOC,IAAEsa,MAAEva;AAAA;AAAO,eAAK,SAAOua,OAAG;AAAC,UAAAta,KAAEsa;AAAE,cAAG;AAAC,gBAAI7Z,KAAET,GAAE;AAAU,gBAAG,OAAKA,GAAE,QAAM;AAAM,sBAAOA,GAAE,KAAK;AAAA,gBAAA,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAG,KAAK;AAAG;AAAA,gBACxf,KAAK;AAAE,sBAAG,SAAOS,IAAE;AAAC,wBAAIsY,KAAEtY,GAAE,eAAcgZ,KAAEhZ,GAAE,eAAc4E,KAAErF,GAAE,WAAUyH,KAAEpC,GAAE,wBAAwBrF,GAAE,gBAAcA,GAAE,OAAK+Y,KAAE,GAAG/Y,GAAE,MAAK+Y,EAAC,GAAEU,EAAC;AAAE,oBAAApU,GAAE,sCAAoCoC;AAAA,kBAAC;AAAC;AAAA,gBAAM,KAAK;AAAE,sBAAIqP,KAAE9W,GAAE,UAAU;AAAc,wBAAI8W,GAAE,WAASA,GAAE,cAAY,KAAG,MAAIA,GAAE,YAAUA,GAAE,mBAAiBA,GAAE,YAAYA,GAAE,eAAe;AAAE;AAAA,gBAAM,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAE,KAAK;AAAA,gBAAE,KAAK;AAAG;AAAA,gBAAM;AAAQ,wBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,cAAE;AAAA,UAAC,SAAOuC,IAAN;AAASkB,gBAAEva,IAAEA,GAAE,QAAOqZ,EAAC;AAAA,UAAC;AAAC,UAAAtZ,KAAEC,GAAE;AAAQ,cAAG,SAAOD,IAAE;AAAC,YAAAA,GAAE,SAAOC,GAAE;AAAOsa,kBAAEva;AAAE;AAAA,UAAK;AAACua,gBAAEta,GAAE;AAAA,QAAM;AAAC,IAAAS,KAAE;AAAG,SAAG;AAAG,WAAOA;AAAA,EAAC;AAC3f,WAAS,GAAGV,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAExB,GAAE;AAAY,IAAAwB,KAAE,SAAOA,KAAEA,GAAE,aAAW;AAAK,QAAG,SAAOA,IAAE;AAAC,UAAIoC,KAAEpC,KAAEA,GAAE;AAAK,SAAE;AAAC,aAAIoC,GAAE,MAAI7D,QAAKA,IAAE;AAAC,cAAIH,KAAEgE,GAAE;AAAQ,UAAAA,GAAE,UAAQ;AAAO,qBAAShE,MAAG,GAAGI,IAAE,GAAEJ,EAAC;AAAA,QAAC;AAAC,QAAAgE,KAAEA,GAAE;AAAA,MAAI,SAAOA,OAAIpC;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAEC,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAY,IAAAA,KAAE,SAAOA,KAAEA,GAAE,aAAW;AAAK,QAAG,SAAOA,IAAE;AAAC,UAAI,IAAEA,KAAEA,GAAE;AAAK,SAAE;AAAC,aAAI,EAAE,MAAID,QAAKA,IAAE;AAAC,cAAIyB,KAAE,EAAE;AAAO,YAAE,UAAQA,GAAC;AAAA,QAAE;AAAC,YAAE,EAAE;AAAA,MAAI,SAAO,MAAIxB;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAI,QAAG,SAAOC,IAAE;AAAC,UAAI,IAAED,GAAE;AAAU,cAAOA,GAAE,KAAG;AAAA,QAAE,KAAK;AAAE,UAAAA,KAAE;AAAE;AAAA,QAAM;AAAQ,UAAAA,KAAE;AAAA,MAAC;AAAC,qBAAa,OAAOC,KAAEA,GAAED,EAAC,IAAEC,GAAE,UAAQD;AAAA,IAAC;AAAA,EAAC;AAClf,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAU,aAAOC,OAAID,GAAE,YAAU,MAAK,GAAGC,EAAC;AAAG,IAAAD,GAAE,QAAM;AAAK,IAAAA,GAAE,YAAU;AAAK,IAAAA,GAAE,UAAQ;AAAK,UAAIA,GAAE,QAAMC,KAAED,GAAE,WAAU,SAAOC,OAAI,OAAOA,GAAE,KAAI,OAAOA,GAAE,KAAI,OAAOA,GAAE,KAAI,OAAOA,GAAE,KAAI,OAAOA,GAAE;AAAM,IAAAD,GAAE,YAAU;AAAK,IAAAA,GAAE,SAAO;AAAK,IAAAA,GAAE,eAAa;AAAK,IAAAA,GAAE,gBAAc;AAAK,IAAAA,GAAE,gBAAc;AAAK,IAAAA,GAAE,eAAa;AAAK,IAAAA,GAAE,YAAU;AAAK,IAAAA,GAAE,cAAY;AAAA,EAAI;AAAC,WAAS,GAAGA,IAAE;AAAC,WAAO,MAAIA,GAAE,OAAK,MAAIA,GAAE,OAAK,MAAIA,GAAE;AAAA,EAAG;AACna,WAAS,GAAGA,IAAE;AAAC;AAAE,iBAAO;AAAC,eAAK,SAAOA,GAAE,WAAS;AAAC,cAAG,SAAOA,GAAE,UAAQ,GAAGA,GAAE,MAAM;AAAE,mBAAO;AAAK,UAAAA,KAAEA,GAAE;AAAA,QAAM;AAAC,QAAAA,GAAE,QAAQ,SAAOA,GAAE;AAAO,aAAIA,KAAEA,GAAE,SAAQ,MAAIA,GAAE,OAAK,MAAIA,GAAE,OAAK,OAAKA,GAAE,OAAK;AAAC,cAAGA,GAAE,QAAM;AAAE,qBAAS;AAAE,cAAG,SAAOA,GAAE,SAAO,MAAIA,GAAE;AAAI,qBAAS;AAAA;AAAO,YAAAA,GAAE,MAAM,SAAOA,IAAEA,KAAEA,GAAE;AAAA,QAAK;AAAC,YAAG,EAAEA,GAAE,QAAM;AAAG,iBAAOA,GAAE;AAAA,MAAS;AAAA,EAAC;AACzT,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAI,QAAG,MAAIyB,MAAG,MAAIA;AAAE,MAAAzB,KAAEA,GAAE,WAAUC,KAAE,MAAI,EAAE,WAAS,EAAE,WAAW,aAAaD,IAAEC,EAAC,IAAE,EAAE,aAAaD,IAAEC,EAAC,KAAG,MAAI,EAAE,YAAUA,KAAE,EAAE,YAAWA,GAAE,aAAaD,IAAE,CAAC,MAAIC,KAAE,GAAEA,GAAE,YAAYD,EAAC,IAAG,IAAE,EAAE,qBAAoB,SAAO,KAAG,WAAS,KAAG,SAAOC,GAAE,YAAUA,GAAE,UAAQ;AAAA,aAAa,MAAIwB,OAAIzB,KAAEA,GAAE,OAAM,SAAOA;AAAG,WAAI,GAAGA,IAAEC,IAAE,CAAC,GAAED,KAAEA,GAAE,SAAQ,SAAOA;AAAG,WAAGA,IAAEC,IAAE,CAAC,GAAED,KAAEA,GAAE;AAAA,EAAO;AAC1X,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAI,QAAG,MAAIyB,MAAG,MAAIA;AAAE,MAAAzB,KAAEA,GAAE,WAAUC,KAAE,EAAE,aAAaD,IAAEC,EAAC,IAAE,EAAE,YAAYD,EAAC;AAAA,aAAU,MAAIyB,OAAIzB,KAAEA,GAAE,OAAM,SAAOA;AAAG,WAAI,GAAGA,IAAEC,IAAE,CAAC,GAAED,KAAEA,GAAE,SAAQ,SAAOA;AAAG,WAAGA,IAAEC,IAAE,CAAC,GAAED,KAAEA,GAAE;AAAA,EAAO;AAAC,MAAI6a,MAAE,MAAK,KAAG;AAAG,WAAS,GAAG7a,IAAEC,IAAE,GAAE;AAAC,SAAI,IAAE,EAAE,OAAM,SAAO;AAAG,SAAGD,IAAEC,IAAE,CAAC,GAAE,IAAE,EAAE;AAAA,EAAO;AACnR,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAG,MAAI,eAAa,OAAO,GAAG;AAAqB,UAAG;AAAC,WAAG,qBAAqB,IAAG,CAAC;AAAA,MAAC,SAAOwH,IAAN;AAAA,MAAU;AAAA,YAAO,EAAE,KAAG;AAAA,MAAE,KAAK;AAAE6S,eAAG,GAAG,GAAEra,EAAC;AAAA,MAAE,KAAK;AAAE,YAAIwB,KAAEoZ,KAAEhX,KAAE;AAAGgX,cAAE;AAAK,WAAG7a,IAAEC,IAAE,CAAC;AAAE4a,cAAEpZ;AAAE,aAAGoC;AAAE,iBAAOgX,QAAI,MAAI7a,KAAE6a,KAAE,IAAE,EAAE,WAAU,MAAI7a,GAAE,WAASA,GAAE,WAAW,YAAY,CAAC,IAAEA,GAAE,YAAY,CAAC,KAAG6a,IAAE,YAAY,EAAE,SAAS;AAAG;AAAA,MAAM,KAAK;AAAG,iBAAOA,QAAI,MAAI7a,KAAE6a,KAAE,IAAE,EAAE,WAAU,MAAI7a,GAAE,WAAS,GAAGA,GAAE,YAAW,CAAC,IAAE,MAAIA,GAAE,YAAU,GAAGA,IAAE,CAAC,GAAE,GAAGA,EAAC,KAAG,GAAG6a,KAAE,EAAE,SAAS;AAAG;AAAA,MAAM,KAAK;AAAE,QAAApZ,KAAEoZ;AAAE,QAAAhX,KAAE;AAAGgX,cAAE,EAAE,UAAU;AAAc,aAAG;AAClf,WAAG7a,IAAEC,IAAE,CAAC;AAAE4a,cAAEpZ;AAAE,aAAGoC;AAAE;AAAA,MAAM,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAG,KAAK;AAAG,YAAG,CAACyW,QAAI7Y,KAAE,EAAE,aAAY,SAAOA,OAAIA,KAAEA,GAAE,YAAW,SAAOA,MAAI;AAAC,UAAAoC,KAAEpC,KAAEA,GAAE;AAAK,aAAE;AAAC,gBAAI5B,KAAEgE,IAAEiW,KAAEja,GAAE;AAAQ,YAAAA,KAAEA,GAAE;AAAI,uBAASia,OAAI,OAAKja,KAAE,KAAG,GAAG,GAAEI,IAAE6Z,EAAC,IAAE,OAAKja,KAAE,MAAI,GAAG,GAAEI,IAAE6Z,EAAC;AAAG,YAAAjW,KAAEA,GAAE;AAAA,UAAI,SAAOA,OAAIpC;AAAA,QAAE;AAAC,WAAGzB,IAAEC,IAAE,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,YAAG,CAACqa,QAAI,GAAG,GAAEra,EAAC,GAAEwB,KAAE,EAAE,WAAU,eAAa,OAAOA,GAAE;AAAsB,cAAG;AAAC,YAAAA,GAAE,QAAM,EAAE,eAAcA,GAAE,QAAM,EAAE,eAAcA,GAAE,qBAAsB;AAAA,UAAA,SAAOgG,IAAN;AAAS+S,gBAAE,GAAEva,IAAEwH,EAAC;AAAA,UAAC;AAAC,WAAGzH,IAAEC,IAAE,CAAC;AAAE;AAAA,MAAM,KAAK;AAAG,WAAGD,IAAEC,IAAE,CAAC;AAAE;AAAA,MAAM,KAAK;AAAG,UAAE,OAAK,KAAGqa,OAAG7Y,KAAE6Y,QAAI,SAChf,EAAE,eAAc,GAAGta,IAAEC,IAAE,CAAC,GAAEqa,MAAE7Y,MAAG,GAAGzB,IAAEC,IAAE,CAAC;AAAE;AAAA,MAAM;AAAQ,WAAGD,IAAEC,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAY,QAAG,SAAOC,IAAE;AAAC,MAAAD,GAAE,cAAY;AAAK,UAAI,IAAEA,GAAE;AAAU,eAAO,MAAI,IAAEA,GAAE,YAAU,IAAI;AAAI,MAAAC,GAAE,QAAQ,SAASA,IAAE;AAAC,YAAIwB,KAAE,GAAG,KAAK,MAAKzB,IAAEC,EAAC;AAAE,UAAE,IAAIA,EAAC,MAAI,EAAE,IAAIA,EAAC,GAAEA,GAAE,KAAKwB,IAAEA,EAAC;AAAA,MAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AACzQ,WAAS,GAAGzB,IAAEC,IAAE;AAAC,QAAI,IAAEA,GAAE;AAAU,QAAG,SAAO;AAAE,eAAQwB,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,YAAIoC,KAAE,EAAEpC;AAAG,YAAG;AAAC,cAAI5B,KAAEG,IAAE8Z,KAAE7Z,IAAEwH,KAAEqS;AAAE;AAAE,mBAAK,SAAOrS,MAAG;AAAC,sBAAOA,GAAE,KAAG;AAAA,gBAAE,KAAK;AAAEoT,wBAAEpT,GAAE;AAAU,uBAAG;AAAG,wBAAM;AAAA,gBAAE,KAAK;AAAEoT,wBAAEpT,GAAE,UAAU;AAAc,uBAAG;AAAG,wBAAM;AAAA,gBAAE,KAAK;AAAEoT,wBAAEpT,GAAE,UAAU;AAAc,uBAAG;AAAG,wBAAM;AAAA,cAAC;AAAC,cAAAA,KAAEA,GAAE;AAAA,YAAM;AAAC,cAAG,SAAOoT;AAAE,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,aAAGhb,IAAEia,IAAEjW,EAAC;AAAEgX,gBAAE;AAAK,eAAG;AAAG,cAAItE,KAAE1S,GAAE;AAAU,mBAAO0S,OAAIA,GAAE,SAAO;AAAM,UAAA1S,GAAE,SAAO;AAAA,QAAI,SAAO8S,IAAN;AAAS6D,cAAE3W,IAAE5D,IAAE0W,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,QAAG1W,GAAE,eAAa;AAAM,WAAIA,KAAEA,GAAE,OAAM,SAAOA;AAAG,WAAGA,IAAED,EAAC,GAAEC,KAAEA,GAAE;AAAA,EAAO;AACje,WAAS,GAAGD,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE,WAAUyB,KAAEzB,GAAE;AAAM,YAAOA,GAAE,KAAG;AAAA,MAAE,KAAK;AAAA,MAAE,KAAK;AAAA,MAAG,KAAK;AAAA,MAAG,KAAK;AAAG,WAAGC,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,YAAGyB,KAAE,GAAE;AAAC,cAAG;AAAC,eAAG,GAAEzB,IAAEA,GAAE,MAAM,GAAE,GAAG,GAAEA,EAAC;AAAA,UAAC,SAAOgZ,IAAN;AAASwB,gBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,UAAC;AAAC,cAAG;AAAC,eAAG,GAAEhZ,IAAEA,GAAE,MAAM;AAAA,UAAC,SAAOgZ,IAAN;AAASwB,gBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,UAAC;AAAA,QAAC;AAAC;AAAA,MAAM,KAAK;AAAE,WAAG/Y,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,QAAAyB,KAAE,OAAK,SAAO,KAAG,GAAG,GAAE,EAAE,MAAM;AAAE;AAAA,MAAM,KAAK;AAAE,WAAGxB,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,QAAAyB,KAAE,OAAK,SAAO,KAAG,GAAG,GAAE,EAAE,MAAM;AAAE,YAAGzB,GAAE,QAAM,IAAG;AAAC,cAAI6D,KAAE7D,GAAE;AAAU,cAAG;AAAC,eAAG6D,IAAE,EAAE;AAAA,UAAC,SAAOmV,IAAN;AAASwB,gBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,UAAC;AAAA,QAAC;AAAC,YAAGvX,KAAE,MAAIoC,KAAE7D,GAAE,WAAU,QAAM6D,KAAG;AAAC,cAAIhE,KAAEG,GAAE,eAAc8Z,KAAE,SAAO,IAAE,EAAE,gBAAcja,IAAE4H,KAAEzH,GAAE,MAAKuW,KAAEvW,GAAE;AACpf,UAAAA,GAAE,cAAY;AAAK,cAAG,SAAOuW;AAAE,gBAAG;AAAC,0BAAU9O,MAAG,YAAU5H,GAAE,QAAM,QAAMA,GAAE,QAAM,GAAGgE,IAAEhE,EAAC;AAAE,iBAAG4H,IAAEqS,EAAC;AAAE,kBAAInD,KAAE,GAAGlP,IAAE5H,EAAC;AAAE,mBAAIia,KAAE,GAAEA,KAAEvD,GAAE,QAAOuD,MAAG,GAAE;AAAC,oBAAIhY,KAAEyU,GAAEuD,KAAGf,KAAExC,GAAEuD,KAAE;AAAG,4BAAUhY,KAAE,GAAG+B,IAAEkV,EAAC,IAAE,8BAA4BjX,KAAE,GAAG+B,IAAEkV,EAAC,IAAE,eAAajX,KAAE,GAAG+B,IAAEkV,EAAC,IAAE,GAAGlV,IAAE/B,IAAEiX,IAAEpC,EAAC;AAAA,cAAC;AAAC,sBAAOlP,IAAC;AAAA,gBAAE,KAAK;AAAQ,qBAAG5D,IAAEhE,EAAC;AAAE;AAAA,gBAAM,KAAK;AAAW,qBAAGgE,IAAEhE,EAAC;AAAE;AAAA,gBAAM,KAAK;AAAS,sBAAIoD,KAAEY,GAAE,cAAc;AAAY,kBAAAA,GAAE,cAAc,cAAY,CAAC,CAAChE,GAAE;AAAS,sBAAI0F,KAAE1F,GAAE;AAAM,0BAAM0F,KAAE,GAAG1B,IAAE,CAAC,CAAChE,GAAE,UAAS0F,IAAE,KAAE,IAAEtC,OAAI,CAAC,CAACpD,GAAE,aAAW,QAAMA,GAAE,eAAa;AAAA,oBAAGgE;AAAA,oBAAE,CAAC,CAAChE,GAAE;AAAA,oBACnfA,GAAE;AAAA,oBAAa;AAAA,kBAAE,IAAE,GAAGgE,IAAE,CAAC,CAAChE,GAAE,UAASA,GAAE,WAAS,CAAA,IAAG,IAAG,KAAE;AAAA,cAAE;AAAC,cAAAgE,GAAE,MAAIhE;AAAA,YAAC,SAAOmZ,IAAN;AAASwB,kBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,YAAC;AAAA,QAAC;AAAC;AAAA,MAAM,KAAK;AAAE,WAAG/Y,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,YAAGyB,KAAE,GAAE;AAAC,cAAG,SAAOzB,GAAE;AAAU,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAA6D,KAAE7D,GAAE;AAAU,UAAAH,KAAEG,GAAE;AAAc,cAAG;AAAC,YAAA6D,GAAE,YAAUhE;AAAA,UAAC,SAAOmZ,IAAN;AAASwB,gBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,UAAC;AAAA,QAAC;AAAC;AAAA,MAAM,KAAK;AAAE,WAAG/Y,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,YAAGyB,KAAE,KAAG,SAAO,KAAG,EAAE,cAAc;AAAa,cAAG;AAAC,eAAGxB,GAAE,aAAa;AAAA,UAAC,SAAO+Y,IAAN;AAASwB,gBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,UAAC;AAAC;AAAA,MAAM,KAAK;AAAE,WAAG/Y,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE;AAAA,MAAM,KAAK;AAAG,WAAGC,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,QAAA6D,KAAE7D,GAAE;AAAM,QAAA6D,GAAE,QAAM,SAAOhE,KAAE,SAAOgE,GAAE,eAAcA,GAAE,UAAU,WAAShE,IAAE,CAACA,MAClf,SAAOgE,GAAE,aAAW,SAAOA,GAAE,UAAU,kBAAgB,KAAGqV,IAAC;AAAK,QAAAzX,KAAE,KAAG,GAAGzB,EAAC;AAAE;AAAA,MAAM,KAAK;AAAG,QAAA8B,KAAE,SAAO,KAAG,SAAO,EAAE;AAAc,QAAA9B,GAAE,OAAK,KAAGsa,OAAG3D,KAAE2D,QAAIxY,IAAE,GAAG7B,IAAED,EAAC,GAAEsa,MAAE3D,MAAG,GAAG1W,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,YAAGyB,KAAE,MAAK;AAAC,UAAAkV,KAAE,SAAO3W,GAAE;AAAc,eAAIA,GAAE,UAAU,WAAS2W,OAAI,CAAC7U,MAAG,OAAK9B,GAAE,OAAK;AAAG,iBAAIua,MAAEva,IAAE8B,KAAE9B,GAAE,OAAM,SAAO8B,MAAG;AAAC,mBAAIiX,KAAEwB,MAAEzY,IAAE,SAAOyY,OAAG;AAAC,gBAAAtX,KAAEsX;AAAE,gBAAAhV,KAAEtC,GAAE;AAAM,wBAAOA,GAAE,KAAK;AAAA,kBAAA,KAAK;AAAA,kBAAE,KAAK;AAAA,kBAAG,KAAK;AAAA,kBAAG,KAAK;AAAG,uBAAG,GAAEA,IAAEA,GAAE,MAAM;AAAE;AAAA,kBAAM,KAAK;AAAE,uBAAGA,IAAEA,GAAE,MAAM;AAAE,wBAAIvC,KAAEuC,GAAE;AAAU,wBAAG,eAAa,OAAOvC,GAAE,sBAAqB;AAAC,sBAAAe,KAAEwB;AAAE,0BAAEA,GAAE;AAAO,0BAAG;AAAC,wBAAAhD,KAAEwB,IAAEf,GAAE,QACpfT,GAAE,eAAcS,GAAE,QAAMT,GAAE,eAAcS,GAAE,qBAAsB;AAAA,sBAAA,SAAOsY,IAAN;AAASwB,4BAAE/Y,IAAE,GAAEuX,EAAC;AAAA,sBAAC;AAAA,oBAAC;AAAC;AAAA,kBAAM,KAAK;AAAE,uBAAG/V,IAAEA,GAAE,MAAM;AAAE;AAAA,kBAAM,KAAK;AAAG,wBAAG,SAAOA,GAAE,eAAc;AAAC,yBAAG8V,EAAC;AAAE;AAAA,oBAAQ;AAAA,gBAAC;AAAC,yBAAOxT,MAAGA,GAAE,SAAOtC,IAAEsX,MAAEhV,MAAG,GAAGwT,EAAC;AAAA,cAAC;AAAC,cAAAjX,KAAEA,GAAE;AAAA,YAAO;AAAC;AAAE,iBAAIA,KAAE,MAAKiX,KAAE/Y,QAAI;AAAC,kBAAG,MAAI+Y,GAAE,KAAI;AAAC,oBAAG,SAAOjX,IAAE;AAAC,kBAAAA,KAAEiX;AAAE,sBAAG;AAAC,oBAAAlV,KAAEkV,GAAE,WAAUpC,MAAG9W,KAAEgE,GAAE,OAAM,eAAa,OAAOhE,GAAE,cAAYA,GAAE,YAAY,WAAU,QAAO,WAAW,IAAEA,GAAE,UAAQ,WAAS4H,KAAEsR,GAAE,WAAUxC,KAAEwC,GAAE,cAAc,OAAMe,KAAE,WAASvD,MAAG,SAAOA,MAAGA,GAAE,eAAe,SAAS,IAAEA,GAAE,UAAQ,MAAK9O,GAAE,MAAM,UACzf,GAAG,WAAUqS,EAAC;AAAA,kBAAE,SAAOd,IAAN;AAASwB,wBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC,WAAS,MAAID,GAAE,KAAI;AAAC,oBAAG,SAAOjX;AAAE,sBAAG;AAAC,oBAAAiX,GAAE,UAAU,YAAUpC,KAAE,KAAGoC,GAAE;AAAA,kBAAa,SAAOC,IAAN;AAASwB,wBAAExa,IAAEA,GAAE,QAAOgZ,EAAC;AAAA,kBAAC;AAAA,cAAC,YAAU,OAAKD,GAAE,OAAK,OAAKA,GAAE,OAAK,SAAOA,GAAE,iBAAeA,OAAI/Y,OAAI,SAAO+Y,GAAE,OAAM;AAAC,gBAAAA,GAAE,MAAM,SAAOA;AAAE,gBAAAA,KAAEA,GAAE;AAAM;AAAA,cAAQ;AAAC,kBAAGA,OAAI/Y;AAAE,sBAAM;AAAE,qBAAK,SAAO+Y,GAAE,WAAS;AAAC,oBAAG,SAAOA,GAAE,UAAQA,GAAE,WAAS/Y;AAAE,wBAAM;AAAE,gBAAA8B,OAAIiX,OAAIjX,KAAE;AAAM,gBAAAiX,KAAEA,GAAE;AAAA,cAAM;AAAC,cAAAjX,OAAIiX,OAAIjX,KAAE;AAAM,cAAAiX,GAAE,QAAQ,SAAOA,GAAE;AAAO,cAAAA,KAAEA,GAAE;AAAA,YAAO;AAAA,QAAC;AAAC;AAAA,MAAM,KAAK;AAAG,WAAG9Y,IAAED,EAAC;AAAE,WAAGA,EAAC;AAAE,QAAAyB,KAAE,KAAG,GAAGzB,EAAC;AAAE;AAAA,MAAM,KAAK;AAAG;AAAA,MAAM;AAAQ;AAAA,UAAGC;AAAA,UACnfD;AAAA,QAAC,GAAE,GAAGA,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAM,QAAGC,KAAE,GAAE;AAAC,UAAG;AAAC,WAAE;AAAC,mBAAQ,IAAED,GAAE,QAAO,SAAO,KAAG;AAAC,gBAAG,GAAG,CAAC,GAAE;AAAC,kBAAIyB,KAAE;AAAE,oBAAM;AAAA,YAAC;AAAC,gBAAE,EAAE;AAAA,UAAM;AAAC,gBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,QAAE;AAAC,gBAAOA,GAAE,KAAK;AAAA,UAAA,KAAK;AAAE,gBAAIoC,KAAEpC,GAAE;AAAU,YAAAA,GAAE,QAAM,OAAK,GAAGoC,IAAE,EAAE,GAAEpC,GAAE,SAAO;AAAK,gBAAI5B,KAAE,GAAGG,EAAC;AAAE,eAAGA,IAAEH,IAAEgE,EAAC;AAAE;AAAA,UAAM,KAAK;AAAA,UAAE,KAAK;AAAE,gBAAIiW,KAAErY,GAAE,UAAU,eAAcgG,KAAE,GAAGzH,EAAC;AAAE,eAAGA,IAAEyH,IAAEqS,EAAC;AAAE;AAAA,UAAM;AAAQ,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,QAAE;AAAA,MAAC,SAAOvD,IAAN;AAASiE,YAAExa,IAAEA,GAAE,QAAOuW,EAAC;AAAA,MAAC;AAAC,MAAAvW,GAAE,SAAO;AAAA,IAAE;AAAC,IAAAC,KAAE,SAAOD,GAAE,SAAO;AAAA,EAAM;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAACsa,UAAEva;AAAE,OAAGA,EAAK;AAAA,EAAC;AACvb,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,aAAQwB,KAAE,OAAKzB,GAAE,OAAK,IAAG,SAAOua,OAAG;AAAC,UAAI1W,KAAE0W,KAAE1a,KAAEgE,GAAE;AAAM,UAAG,OAAKA,GAAE,OAAKpC,IAAE;AAAC,YAAIqY,KAAE,SAAOjW,GAAE,iBAAe;AAAG,YAAG,CAACiW,IAAE;AAAC,cAAIrS,KAAE5D,GAAE,WAAU0S,KAAE,SAAO9O,MAAG,SAAOA,GAAE,iBAAe6S;AAAE,UAAA7S,KAAE;AAAG,cAAIkP,KAAE2D;AAAE,eAAGR;AAAE,eAAIQ,MAAE/D,OAAI,CAACI;AAAE,iBAAI4D,MAAE1W,IAAE,SAAO0W;AAAG,cAAAT,KAAES,KAAEhE,KAAEuD,GAAE,OAAM,OAAKA,GAAE,OAAK,SAAOA,GAAE,gBAAc,GAAGjW,EAAC,IAAE,SAAO0S,MAAGA,GAAE,SAAOuD,IAAES,MAAEhE,MAAG,GAAG1S,EAAC;AAAE,iBAAK,SAAOhE;AAAG0a,kBAAE1a,IAAE,GAAGA,EAAK,GAAEA,KAAEA,GAAE;AAAQ0a,gBAAE1W;AAAE,eAAG4D;AAAE6S,gBAAE3D;AAAA,QAAC;AAAC,WAAG3W,EAAK;AAAA,MAAC;AAAM,eAAK6D,GAAE,eAAa,SAAO,SAAOhE,MAAGA,GAAE,SAAOgE,IAAE0W,MAAE1a,MAAG,GAAGG,EAAK;AAAA,IAAC;AAAA,EAAC;AACvc,WAAS,GAAGA,IAAE;AAAC,WAAK,SAAOua,OAAG;AAAC,UAAIta,KAAEsa;AAAE,UAAG,OAAKta,GAAE,QAAM,OAAM;AAAC,YAAI,IAAEA,GAAE;AAAU,YAAG;AAAC,cAAG,OAAKA,GAAE,QAAM;AAAM,oBAAOA,GAAE,KAAK;AAAA,cAAA,KAAK;AAAA,cAAE,KAAK;AAAA,cAAG,KAAK;AAAGqa,uBAAG,GAAG,GAAEra,EAAC;AAAE;AAAA,cAAM,KAAK;AAAE,oBAAIwB,KAAExB,GAAE;AAAU,oBAAGA,GAAE,QAAM,KAAG,CAACqa;AAAE,sBAAG,SAAO;AAAE,oBAAA7Y,GAAE,kBAAmB;AAAA,uBAAK;AAAC,wBAAIoC,KAAE5D,GAAE,gBAAcA,GAAE,OAAK,EAAE,gBAAc,GAAGA,GAAE,MAAK,EAAE,aAAa;AAAE,oBAAAwB,GAAE,mBAAmBoC,IAAE,EAAE,eAAcpC,GAAE,mCAAmC;AAAA,kBAAC;AAAC,oBAAI5B,KAAEI,GAAE;AAAY,yBAAOJ,MAAG,GAAGI,IAAEJ,IAAE4B,EAAC;AAAE;AAAA,cAAM,KAAK;AAAE,oBAAIqY,KAAE7Z,GAAE;AAAY,oBAAG,SAAO6Z,IAAE;AAAC,sBAAE;AAAK,sBAAG,SAAO7Z,GAAE;AAAM,4BAAOA,GAAE,MAAM,KAAK;AAAA,sBAAA,KAAK;AAAE,4BACjhBA,GAAE,MAAM;AAAU;AAAA,sBAAM,KAAK;AAAE,4BAAEA,GAAE,MAAM;AAAA,oBAAS;AAAC,qBAAGA,IAAE6Z,IAAE,CAAC;AAAA,gBAAC;AAAC;AAAA,cAAM,KAAK;AAAE,oBAAIrS,KAAExH,GAAE;AAAU,oBAAG,SAAO,KAAGA,GAAE,QAAM,GAAE;AAAC,sBAAEwH;AAAE,sBAAI8O,KAAEtW,GAAE;AAAc,0BAAOA,GAAE;oBAAM,KAAK;AAAA,oBAAS,KAAK;AAAA,oBAAQ,KAAK;AAAA,oBAAS,KAAK;AAAW,sBAAAsW,GAAE,aAAW,EAAE,MAAK;AAAG;AAAA,oBAAM,KAAK;AAAM,sBAAAA,GAAE,QAAM,EAAE,MAAIA,GAAE;AAAA,kBAAI;AAAA,gBAAC;AAAC;AAAA,cAAM,KAAK;AAAE;AAAA,cAAM,KAAK;AAAE;AAAA,cAAM,KAAK;AAAG;AAAA,cAAM,KAAK;AAAG,oBAAG,SAAOtW,GAAE,eAAc;AAAC,sBAAI0W,KAAE1W,GAAE;AAAU,sBAAG,SAAO0W,IAAE;AAAC,wBAAI7U,KAAE6U,GAAE;AAAc,wBAAG,SAAO7U,IAAE;AAAC,0BAAIiX,KAAEjX,GAAE;AAAW,+BAAOiX,MAAG,GAAGA,EAAC;AAAA,oBAAC;AAAA,kBAAC;AAAA,gBAAC;AAAC;AAAA,cAAM,KAAK;AAAA,cAAG,KAAK;AAAA,cAAG,KAAK;AAAA,cAAG,KAAK;AAAA,cAAG,KAAK;AAAA,cAAG,KAAK;AAAG;AAAA,cAClgB;AAAQ,sBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,YAAE;AAACuB,iBAAGra,GAAE,QAAM,OAAK,GAAGA,EAAC;AAAA,QAAC,SAAOgD,IAAN;AAASuX,cAAEva,IAAEA,GAAE,QAAOgD,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAGhD,OAAID,IAAE;AAACua,cAAE;AAAK;AAAA,MAAK;AAAC,UAAEta,GAAE;AAAQ,UAAG,SAAO,GAAE;AAAC,UAAE,SAAOA,GAAE;AAAOsa,cAAE;AAAE;AAAA,MAAK;AAACA,YAAEta,GAAE;AAAA,IAAM;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAE;AAAC,WAAK,SAAOua,OAAG;AAAC,UAAIta,KAAEsa;AAAE,UAAGta,OAAID,IAAE;AAACua,cAAE;AAAK;AAAA,MAAK;AAAC,UAAI,IAAEta,GAAE;AAAQ,UAAG,SAAO,GAAE;AAAC,UAAE,SAAOA,GAAE;AAAOsa,cAAE;AAAE;AAAA,MAAK;AAACA,YAAEta,GAAE;AAAA,IAAM;AAAA,EAAC;AACvS,WAAS,GAAGD,IAAE;AAAC,WAAK,SAAOua,OAAG;AAAC,UAAIta,KAAEsa;AAAE,UAAG;AAAC,gBAAOta,GAAE,KAAG;AAAA,UAAE,KAAK;AAAA,UAAE,KAAK;AAAA,UAAG,KAAK;AAAG,gBAAI,IAAEA,GAAE;AAAO,gBAAG;AAAC,iBAAG,GAAEA,EAAC;AAAA,YAAC,SAAOsW,IAAN;AAASiE,kBAAEva,IAAE,GAAEsW,EAAC;AAAA,YAAC;AAAC;AAAA,UAAM,KAAK;AAAE,gBAAI9U,KAAExB,GAAE;AAAU,gBAAG,eAAa,OAAOwB,GAAE,mBAAkB;AAAC,kBAAIoC,KAAE5D,GAAE;AAAO,kBAAG;AAAC,gBAAAwB,GAAE,kBAAmB;AAAA,cAAA,SAAO8U,IAAN;AAASiE,oBAAEva,IAAE4D,IAAE0S,EAAC;AAAA,cAAC;AAAA,YAAC;AAAC,gBAAI1W,KAAEI,GAAE;AAAO,gBAAG;AAAC,iBAAGA,EAAC;AAAA,YAAC,SAAOsW,IAAN;AAASiE,kBAAEva,IAAEJ,IAAE0W,EAAC;AAAA,YAAC;AAAC;AAAA,UAAM,KAAK;AAAE,gBAAIuD,KAAE7Z,GAAE;AAAO,gBAAG;AAAC,iBAAGA,EAAC;AAAA,YAAC,SAAOsW,IAAN;AAASiE,kBAAEva,IAAE6Z,IAAEvD,EAAC;AAAA,YAAC;AAAA,QAAC;AAAA,MAAC,SAAOA,IAAN;AAASiE,YAAEva,IAAEA,GAAE,QAAOsW,EAAC;AAAA,MAAC;AAAC,UAAGtW,OAAID,IAAE;AAACua,cAAE;AAAK;AAAA,MAAK;AAAC,UAAI9S,KAAExH,GAAE;AAAQ,UAAG,SAAOwH,IAAE;AAAC,QAAAA,GAAE,SAAOxH,GAAE;AAAOsa,cAAE9S;AAAE;AAAA,MAAK;AAAC8S,YAAEta,GAAE;AAAA,IAAM;AAAA,EAAC;AAC7d,MAAI,KAAG,KAAK,MAAK,KAAG,GAAG,wBAAuB,KAAG,GAAG,mBAAkB,KAAG,GAAG,yBAAwB0Z,MAAE,GAAEQ,MAAE,MAAKW,MAAE,MAAKC,MAAE,GAAE,KAAG,GAAE,KAAG,GAAG,CAAC,GAAEV,MAAE,GAAE,KAAG,MAAK,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG,MAAK,KAAG,MAAK,KAAG,GAAE,KAAG,UAAS,KAAG,MAAK,KAAG,OAAG,KAAG,MAAK,KAAG,MAAK,KAAG,OAAG,KAAG,MAAK,KAAG,GAAE,KAAG,GAAE,KAAG,MAAK,KAAG,IAAG,KAAG;AAAE,WAAST,MAAG;AAAC,WAAO,OAAKD,MAAE,KAAGT,IAAC,IAAG,OAAK,KAAG,KAAG,KAAGA;EAAG;AAChU,WAAS,GAAGlZ,IAAE;AAAC,QAAG,OAAKA,GAAE,OAAK;AAAG,aAAO;AAAE,QAAG,OAAK2Z,MAAE,MAAI,MAAIoB;AAAE,aAAOA,MAAE,CAACA;AAAE,QAAG,SAAO,GAAG;AAAW,aAAO,MAAI,OAAK,KAAG,GAAE,IAAI;AAAG,IAAA/a,KAAEmZ;AAAE,QAAG,MAAInZ;AAAE,aAAOA;AAAE,IAAAA,KAAE,OAAO;AAAM,IAAAA,KAAE,WAASA,KAAE,KAAG,GAAGA,GAAE,IAAI;AAAE,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAG,KAAG;AAAG,YAAM,KAAG,GAAE,KAAG,MAAK,MAAM,EAAE,GAAG,CAAC;AAAE,OAAGzB,IAAE,GAAEyB,EAAC;AAAE,QAAG,OAAKkY,MAAE,MAAI3Z,OAAIma;AAAE,MAAAna,OAAIma,QAAI,OAAKR,MAAE,OAAK,MAAI,IAAG,MAAIU,OAAG,GAAGra,IAAE+a,GAAC,IAAG,GAAG/a,IAAEyB,EAAC,GAAE,MAAI,KAAG,MAAIkY,OAAG,OAAK1Z,GAAE,OAAK,OAAK,KAAGiZ,IAAG,IAAC,KAAI,MAAI,GAAI;AAAA,EAAC;AAC1Y,WAAS,GAAGlZ,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE;AAAa,OAAGA,IAAEC,EAAC;AAAE,QAAIwB,KAAE,GAAGzB,IAAEA,OAAIma,MAAEY,MAAE,CAAC;AAAE,QAAG,MAAItZ;AAAE,eAAO,KAAG,GAAG,CAAC,GAAEzB,GAAE,eAAa,MAAKA,GAAE,mBAAiB;AAAA,aAAUC,KAAEwB,KAAE,CAACA,IAAEzB,GAAE,qBAAmBC,IAAE;AAAC,cAAM,KAAG,GAAG,CAAC;AAAE,UAAG,MAAIA;AAAE,cAAID,GAAE,MAAI,GAAG,GAAG,KAAK,MAAKA,EAAC,CAAC,IAAE,GAAG,GAAG,KAAK,MAAKA,EAAC,CAAC,GAAE,GAAG,WAAU;AAAC,iBAAK2Z,MAAE,MAAI;QAAI,CAAC,GAAE,IAAE;AAAA,WAAS;AAAC,gBAAO,GAAGlY,EAAC,GAAG;AAAA,UAAA,KAAK;AAAE,gBAAE;AAAG;AAAA,UAAM,KAAK;AAAE,gBAAE;AAAG;AAAA,UAAM,KAAK;AAAG,gBAAE;AAAG;AAAA,UAAM,KAAK;AAAU,gBAAE;AAAG;AAAA,UAAM;AAAQ,gBAAE;AAAA,QAAE;AAAC,YAAE,GAAG,GAAE,GAAG,KAAK,MAAKzB,EAAC,CAAC;AAAA,MAAC;AAAC,MAAAA,GAAE,mBAAiBC;AAAE,MAAAD,GAAE,eAAa;AAAA,IAAC;AAAA,EAAC;AAC7c,WAAS,GAAGA,IAAEC,IAAE;AAAC,SAAG;AAAG,SAAG;AAAE,QAAG,OAAK0Z,MAAE;AAAG,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAI,IAAE3Z,GAAE;AAAa,QAAG,GAAE,KAAIA,GAAE,iBAAe;AAAE,aAAO;AAAK,QAAIyB,KAAE,GAAGzB,IAAEA,OAAIma,MAAEY,MAAE,CAAC;AAAE,QAAG,MAAItZ;AAAE,aAAO;AAAK,QAAG,OAAKA,KAAE,OAAK,OAAKA,KAAEzB,GAAE,iBAAeC;AAAE,MAAAA,KAAE,GAAGD,IAAEyB,EAAC;AAAA,SAAM;AAAC,MAAAxB,KAAEwB;AAAE,UAAIoC,KAAE8V;AAAEA,aAAG;AAAE,UAAI9Z,KAAE,GAAI;AAAC,UAAGsa,QAAIna,MAAG+a,QAAI9a;AAAE,aAAG,MAAK,KAAGiZ,QAAI,KAAI,GAAGlZ,IAAEC,EAAC;AAAE;AAAG,YAAG;AAAC,aAAE;AAAG;AAAA,QAAK,SAAOwH,IAAN;AAAS,aAAGzH,IAAEyH,EAAC;AAAA,QAAC;AAAA,aAAO;AAAG,SAAI;AAAC,SAAG,UAAQ5H;AAAE8Z,YAAE9V;AAAE,eAAOiX,MAAE7a,KAAE,KAAGka,MAAE,MAAKY,MAAE,GAAE9a,KAAEoa;AAAAA,IAAE;AAAC,QAAG,MAAIpa,IAAE;AAAC,YAAIA,OAAI4D,KAAE,GAAG7D,EAAC,GAAE,MAAI6D,OAAIpC,KAAEoC,IAAE5D,KAAE,GAAGD,IAAE6D,EAAC;AAAI,UAAG,MAAI5D;AAAE,cAAM,IAAE,IAAG,GAAGD,IAAE,CAAC,GAAE,GAAGA,IAAEyB,EAAC,GAAE,GAAGzB,IAAEkZ,IAAC,CAAE,GAAE;AAAE,UAAG,MAAIjZ;AAAE,WAAGD,IAAEyB,EAAC;AAAA,WACjf;AAAC,QAAAoC,KAAE7D,GAAE,QAAQ;AAAU,YAAG,OAAKyB,KAAE,OAAK,CAAC,GAAGoC,EAAC,MAAI5D,KAAE,GAAGD,IAAEyB,EAAC,GAAE,MAAIxB,OAAIJ,KAAE,GAAGG,EAAC,GAAE,MAAIH,OAAI4B,KAAE5B,IAAEI,KAAE,GAAGD,IAAEH,EAAC,KAAI,MAAII;AAAG,gBAAM,IAAE,IAAG,GAAGD,IAAE,CAAC,GAAE,GAAGA,IAAEyB,EAAC,GAAE,GAAGzB,IAAEkZ,IAAC,CAAE,GAAE;AAAE,QAAAlZ,GAAE,eAAa6D;AAAE,QAAA7D,GAAE,gBAAcyB;AAAE,gBAAOxB,IAAC;AAAA,UAAE,KAAK;AAAA,UAAE,KAAK;AAAE,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,UAAE,KAAK;AAAE,eAAGD,IAAE,IAAG,EAAE;AAAE;AAAA,UAAM,KAAK;AAAE,eAAGA,IAAEyB,EAAC;AAAE,iBAAIA,KAAE,eAAaA,OAAIxB,KAAE,KAAG,MAAIiZ,IAAC,GAAG,KAAGjZ,KAAG;AAAC,kBAAG,MAAI,GAAGD,IAAE,CAAC;AAAE;AAAM,cAAA6D,KAAE7D,GAAE;AAAe,mBAAI6D,KAAEpC,QAAKA,IAAE;AAACmY,oBAAC;AAAG,gBAAA5Z,GAAE,eAAaA,GAAE,iBAAe6D;AAAE;AAAA,cAAK;AAAC,cAAA7D,GAAE,gBAAc,GAAG,GAAG,KAAK,MAAKA,IAAE,IAAG,EAAE,GAAEC,EAAC;AAAE;AAAA,YAAK;AAAC,eAAGD,IAAE,IAAG,EAAE;AAAE;AAAA,UAAM,KAAK;AAAE,eAAGA,IAAEyB,EAAC;AAAE,iBAAIA,KAAE,aAChfA;AAAE;AAAM,YAAAxB,KAAED,GAAE;AAAW,iBAAI6D,KAAE,IAAG,IAAEpC,MAAG;AAAC,kBAAIqY,KAAE,KAAG,GAAGrY,EAAC;AAAE,cAAA5B,KAAE,KAAGia;AAAE,cAAAA,KAAE7Z,GAAE6Z;AAAG,cAAAA,KAAEjW,OAAIA,KAAEiW;AAAG,cAAArY,MAAG,CAAC5B;AAAA,YAAC;AAAC,YAAA4B,KAAEoC;AAAE,YAAApC,KAAEyX,IAAC,IAAGzX;AAAE,YAAAA,MAAG,MAAIA,KAAE,MAAI,MAAIA,KAAE,MAAI,OAAKA,KAAE,OAAK,OAAKA,KAAE,OAAK,MAAIA,KAAE,MAAI,OAAKA,KAAE,OAAK,OAAK,GAAGA,KAAE,IAAI,KAAGA;AAAE,gBAAG,KAAGA,IAAE;AAAC,cAAAzB,GAAE,gBAAc,GAAG,GAAG,KAAK,MAAKA,IAAE,IAAG,EAAE,GAAEyB,EAAC;AAAE;AAAA,YAAK;AAAC,eAAGzB,IAAE,IAAG,EAAE;AAAE;AAAA,UAAM,KAAK;AAAE,eAAGA,IAAE,IAAG,EAAE;AAAE;AAAA,UAAM;AAAQ,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAC,OAAGA,IAAEkZ,IAAC,CAAE;AAAE,WAAOlZ,GAAE,iBAAe,IAAE,GAAG,KAAK,MAAKA,EAAC,IAAE;AAAA,EAAI;AACrX,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE;AAAG,IAAAD,GAAE,QAAQ,cAAc,iBAAe,GAAGA,IAAEC,EAAC,EAAE,SAAO;AAAK,IAAAD,KAAE,GAAGA,IAAEC,EAAC;AAAE,UAAID,OAAIC,KAAE,IAAG,KAAG,GAAE,SAAOA,MAAG,GAAGA,EAAC;AAAG,WAAOD;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAE;AAAC,aAAO,KAAG,KAAGA,KAAE,GAAG,KAAK,MAAM,IAAGA,EAAC;AAAA,EAAC;AAC5L,WAAS,GAAGA,IAAE;AAAC,aAAQC,KAAED,QAAI;AAAC,UAAGC,GAAE,QAAM,OAAM;AAAC,YAAI,IAAEA,GAAE;AAAY,YAAG,SAAO,MAAI,IAAE,EAAE,QAAO,SAAO;AAAG,mBAAQwB,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,gBAAIoC,KAAE,EAAEpC,KAAG5B,KAAEgE,GAAE;AAAY,YAAAA,KAAEA,GAAE;AAAM,gBAAG;AAAC,kBAAG,CAAC,GAAGhE,GAAG,GAACgE,EAAC;AAAE,uBAAM;AAAA,YAAE,SAAOiW,IAAN;AAAS,qBAAM;AAAA,YAAE;AAAA,UAAC;AAAA,MAAC;AAAC,UAAE7Z,GAAE;AAAM,UAAGA,GAAE,eAAa,SAAO,SAAO;AAAE,UAAE,SAAOA,IAAEA,KAAE;AAAA,WAAM;AAAC,YAAGA,OAAID;AAAE;AAAM,eAAK,SAAOC,GAAE,WAAS;AAAC,cAAG,SAAOA,GAAE,UAAQA,GAAE,WAASD;AAAE,mBAAM;AAAG,UAAAC,KAAEA,GAAE;AAAA,QAAM;AAAC,QAAAA,GAAE,QAAQ,SAAOA,GAAE;AAAO,QAAAA,KAAEA,GAAE;AAAA,MAAO;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AACla,WAAS,GAAGD,IAAEC,IAAE;AAAC,IAAAA,MAAG,CAAC;AAAG,IAAAA,MAAG,CAAC;AAAG,IAAAD,GAAE,kBAAgBC;AAAE,IAAAD,GAAE,eAAa,CAACC;AAAE,SAAID,KAAEA,GAAE,iBAAgB,IAAEC,MAAG;AAAC,UAAI,IAAE,KAAG,GAAGA,EAAC,GAAEwB,KAAE,KAAG;AAAE,MAAAzB,GAAE,KAAG;AAAG,MAAAC,MAAG,CAACwB;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAE;AAAC,QAAG,OAAK2Z,MAAE;AAAG,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,OAAI;AAAC,QAAI1Z,KAAE,GAAGD,IAAE,CAAC;AAAE,QAAG,OAAKC,KAAE;AAAG,aAAO,GAAGD,IAAEkZ,IAAG,CAAA,GAAE;AAAK,QAAI,IAAE,GAAGlZ,IAAEC,EAAC;AAAE,QAAG,MAAID,GAAE,OAAK,MAAI,GAAE;AAAC,UAAIyB,KAAE,GAAGzB,EAAC;AAAE,YAAIyB,OAAIxB,KAAEwB,IAAE,IAAE,GAAGzB,IAAEyB,EAAC;AAAA,IAAE;AAAC,QAAG,MAAI;AAAE,YAAM,IAAE,IAAG,GAAGzB,IAAE,CAAC,GAAE,GAAGA,IAAEC,EAAC,GAAE,GAAGD,IAAEkZ,IAAG,CAAA,GAAE;AAAE,QAAG,MAAI;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,IAAAlZ,GAAE,eAAaA,GAAE,QAAQ;AAAU,IAAAA,GAAE,gBAAcC;AAAE,OAAGD,IAAE,IAAG,EAAE;AAAE,OAAGA,IAAEkZ,IAAG,CAAA;AAAE,WAAO;AAAA,EAAI;AACvd,WAAS,GAAGlZ,IAAEC,IAAE;AAAC,QAAI,IAAE0Z;AAAEA,WAAG;AAAE,QAAG;AAAC,aAAO3Z,GAAEC,EAAC;AAAA,IAAC,UAAC;AAAQ0Z,YAAE,GAAE,MAAIA,QAAI,KAAGT,IAAG,IAAC,KAAI,MAAI;IAAK;AAAA,EAAC;AAAC,WAAS,GAAGlZ,IAAE;AAAC,aAAO,MAAI,MAAI,GAAG,OAAK,OAAK2Z,MAAE,MAAI,GAAI;AAAC,QAAI1Z,KAAE0Z;AAAEA,WAAG;AAAE,QAAI,IAAE,GAAG,YAAWlY,KAAE0X;AAAE,QAAG;AAAC,UAAG,GAAG,aAAW,MAAKA,MAAE,GAAEnZ;AAAE,eAAOA,GAAG;AAAA,IAAA,UAAC;AAAQmZ,YAAE1X,IAAE,GAAG,aAAW,GAAEkY,MAAE1Z,IAAE,OAAK0Z,MAAE,MAAI,GAAE;AAAA,IAAE;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,SAAG,GAAG;AAAQN,QAAE,EAAE;AAAA,EAAC;AAChT,WAAS,GAAGrZ,IAAEC,IAAE;AAAC,IAAAD,GAAE,eAAa;AAAK,IAAAA,GAAE,gBAAc;AAAE,QAAI,IAAEA,GAAE;AAAc,WAAK,MAAIA,GAAE,gBAAc,IAAG,GAAG,CAAC;AAAG,QAAG,SAAO8a;AAAE,WAAI,IAAEA,IAAE,QAAO,SAAO,KAAG;AAAC,YAAIrZ,KAAE;AAAE,WAAGA,EAAC;AAAE,gBAAOA,GAAE,KAAK;AAAA,UAAA,KAAK;AAAE,YAAAA,KAAEA,GAAE,KAAK;AAAkB,qBAAOA,MAAG,WAASA,MAAG,GAAE;AAAG;AAAA,UAAM,KAAK;AAAE,eAAE;AAAG4X,gBAAE,EAAE;AAAEA,gBAAEG,GAAC;AAAE;AAAK;AAAA,UAAM,KAAK;AAAE,eAAG/X,EAAC;AAAE;AAAA,UAAM,KAAK;AAAE,eAAE;AAAG;AAAA,UAAM,KAAK;AAAG4X,gBAAEQ,GAAC;AAAE;AAAA,UAAM,KAAK;AAAGR,gBAAEQ,GAAC;AAAE;AAAA,UAAM,KAAK;AAAG,eAAGpY,GAAE,KAAK,QAAQ;AAAE;AAAA,UAAM,KAAK;AAAA,UAAG,KAAK;AAAG,eAAI;AAAA,QAAA;AAAC,YAAE,EAAE;AAAA,MAAM;AAAC0Y,UAAEna;AAAE8a,UAAE9a,KAAE,GAAGA,GAAE,SAAQ,IAAI;AAAE+a,UAAE,KAAG9a;AAAEoa,UAAE;AAAE,SAAG;AAAK,SAAG,KAAG,KAAG;AAAE,SAAG,KAAG;AAAK,QAAG,SAAO,IAAG;AAAC,WAAIpa,KAC1f,GAAEA,KAAE,GAAG,QAAOA;AAAI,YAAG,IAAE,GAAGA,KAAGwB,KAAE,EAAE,aAAY,SAAOA,IAAE;AAAC,YAAE,cAAY;AAAK,cAAIoC,KAAEpC,GAAE,MAAK5B,KAAE,EAAE;AAAQ,cAAG,SAAOA,IAAE;AAAC,gBAAIia,KAAEja,GAAE;AAAK,YAAAA,GAAE,OAAKgE;AAAE,YAAApC,GAAE,OAAKqY;AAAA,UAAC;AAAC,YAAE,UAAQrY;AAAA,QAAC;AAAC,WAAG;AAAA,IAAI;AAAC,WAAOzB;AAAA,EAAC;AAC3K,WAAS,GAAGA,IAAEC,IAAE;AAAC,OAAE;AAAC,UAAI,IAAE6a;AAAE,UAAG;AAAC,WAAE;AAAG,WAAG,UAAQ;AAAG,YAAG,IAAG;AAAC,mBAAQrZ,KAAEsY,IAAE,eAAc,SAAOtY,MAAG;AAAC,gBAAIoC,KAAEpC,GAAE;AAAM,qBAAOoC,OAAIA,GAAE,UAAQ;AAAM,YAAApC,KAAEA,GAAE;AAAA,UAAI;AAAC,eAAG;AAAA,QAAE;AAAC,aAAG;AAAEwY,cAAED,MAAED,MAAE;AAAK,aAAG;AAAG,aAAG;AAAE,WAAG,UAAQ;AAAK,YAAG,SAAO,KAAG,SAAO,EAAE,QAAO;AAACM,gBAAE;AAAE,eAAGpa;AAAE6a,gBAAE;AAAK;AAAA,QAAK;AAAC,WAAE;AAAC,cAAIjb,KAAEG,IAAE8Z,KAAE,EAAE,QAAOrS,KAAE,GAAE8O,KAAEtW;AAAE,UAAAA,KAAE8a;AAAE,UAAAtT,GAAE,SAAO;AAAM,cAAG,SAAO8O,MAAG,aAAW,OAAOA,MAAG,eAAa,OAAOA,GAAE,MAAK;AAAC,gBAAII,KAAEJ,IAAEzU,KAAE2F,IAAEsR,KAAEjX,GAAE;AAAI,gBAAG,OAAKA,GAAE,OAAK,OAAK,MAAIiX,MAAG,OAAKA,MAAG,OAAKA,KAAG;AAAC,kBAAI9V,KAAEnB,GAAE;AAAU,cAAAmB,MAAGnB,GAAE,cAAYmB,GAAE,aAAYnB,GAAE,gBAAcmB,GAAE,eACxenB,GAAE,QAAMmB,GAAE,UAAQnB,GAAE,cAAY,MAAKA,GAAE,gBAAc;AAAA,YAAK;AAAC,gBAAIyD,KAAE,GAAGuU,EAAC;AAAE,gBAAG,SAAOvU,IAAE;AAAC,cAAAA,GAAE,SAAO;AAAK,iBAAGA,IAAEuU,IAAErS,IAAE5H,IAAEI,EAAC;AAAE,cAAAsF,GAAE,OAAK,KAAG,GAAG1F,IAAE8W,IAAE1W,EAAC;AAAE,cAAAA,KAAEsF;AAAE,cAAAgR,KAAEI;AAAE,kBAAIjW,KAAET,GAAE;AAAY,kBAAG,SAAOS,IAAE;AAAC,oBAAIsY,KAAE,oBAAI;AAAI,gBAAAA,GAAE,IAAIzC,EAAC;AAAE,gBAAAtW,GAAE,cAAY+Y;AAAA,cAAC;AAAM,gBAAAtY,GAAE,IAAI6V,EAAC;AAAE,oBAAM;AAAA,YAAC,OAAK;AAAC,kBAAG,OAAKtW,KAAE,IAAG;AAAC,mBAAGJ,IAAE8W,IAAE1W,EAAC;AAAE,mBAAE;AAAG,sBAAM;AAAA,cAAC;AAAC,cAAAsW,KAAE,MAAM,EAAE,GAAG,CAAC;AAAA,YAAC;AAAA,UAAC,WAASkD,OAAGhS,GAAE,OAAK,GAAE;AAAC,gBAAIiS,KAAE,GAAGI,EAAC;AAAE,gBAAG,SAAOJ,IAAE;AAAC,qBAAKA,GAAE,QAAM,WAASA,GAAE,SAAO;AAAK,iBAAGA,IAAEI,IAAErS,IAAE5H,IAAEI,EAAC;AAAE,iBAAG,GAAGsW,IAAE9O,EAAC,CAAC;AAAE,oBAAM;AAAA,YAAC;AAAA,UAAC;AAAC,UAAA5H,KAAE0W,KAAE,GAAGA,IAAE9O,EAAC;AAAE,gBAAI4S,QAAIA,MAAE;AAAG,mBAAO,KAAG,KAAG,CAACxa,EAAC,IAAE,GAAG,KAAKA,EAAC;AAAE,UAAAA,KAAEia;AAAE,aAAE;AAAC,oBAAOja,GAAE,KAAK;AAAA,cAAA,KAAK;AAAE,gBAAAA,GAAE,SAAO;AACpf,gBAAAI,MAAG,CAACA;AAAE,gBAAAJ,GAAE,SAAOI;AAAE,oBAAIqF,KAAE,GAAGzF,IAAE0W,IAAEtW,EAAC;AAAE,mBAAGJ,IAAEyF,EAAC;AAAE,sBAAM;AAAA,cAAE,KAAK;AAAE,gBAAAmC,KAAE8O;AAAE,oBAAI7O,KAAE7H,GAAE,MAAKkX,KAAElX,GAAE;AAAU,oBAAG,OAAKA,GAAE,QAAM,SAAO,eAAa,OAAO6H,GAAE,4BAA0B,SAAOqP,MAAG,eAAa,OAAOA,GAAE,sBAAoB,SAAO,MAAI,CAAC,GAAG,IAAIA,EAAC,KAAI;AAAC,kBAAAlX,GAAE,SAAO;AAAM,kBAAAI,MAAG,CAACA;AAAE,kBAAAJ,GAAE,SAAOI;AAAE,sBAAIqZ,KAAE,GAAGzZ,IAAE4H,IAAExH,EAAC;AAAE,qBAAGJ,IAAEyZ,EAAC;AAAE,wBAAM;AAAA,gBAAC;AAAA,YAAC;AAAC,YAAAzZ,KAAEA,GAAE;AAAA,UAAM,SAAO,SAAOA;AAAA,QAAE;AAAC,WAAG,CAAC;AAAA,MAAC,SAAO,IAAN;AAAU,QAAAI,KAAE;AAAG6a,gBAAI,KAAG,SAAO,MAAIA,MAAE,IAAE,EAAE;AAAQ;AAAA,MAAQ;AAAC;AAAA,IAAK,SAAO;AAAA,EAAE;AAAC,WAAS,KAAI;AAAC,QAAI9a,KAAE,GAAG;AAAQ,OAAG,UAAQ;AAAG,WAAO,SAAOA,KAAE,KAAGA;AAAA,EAAC;AACrd,WAAS,KAAI;AAAC,QAAG,MAAIqa,OAAG,MAAIA,OAAG,MAAIA;AAAEA,YAAE;AAAE,aAAOF,OAAG,OAAK,KAAG,cAAY,OAAK,KAAG,cAAY,GAAGA,KAAEY,GAAC;AAAA,EAAC;AAAC,WAAS,GAAG/a,IAAEC,IAAE;AAAC,QAAI,IAAE0Z;AAAEA,WAAG;AAAE,QAAIlY,KAAE,GAAE;AAAG,QAAG0Y,QAAIna,MAAG+a,QAAI9a;AAAE,WAAG,MAAK,GAAGD,IAAEC,EAAC;AAAE;AAAG,UAAG;AAAC,WAAI;AAAC;AAAA,MAAK,SAAO4D,IAAN;AAAS,WAAG7D,IAAE6D,EAAC;AAAA,MAAC;AAAA,WAAO;AAAG,OAAI;AAAC8V,UAAE;AAAE,OAAG,UAAQlY;AAAE,QAAG,SAAOqZ;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAEX,UAAE;AAAKY,UAAE;AAAE,WAAOV;AAAAA,EAAC;AAAC,WAAS,KAAI;AAAC,WAAK,SAAOS;AAAG,SAAGA,GAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,WAAK,SAAOA,OAAG,CAAC,GAAI;AAAE,SAAGA,GAAC;AAAA,EAAC;AAAC,WAAS,GAAG9a,IAAE;AAAC,QAAIC,KAAE,GAAGD,GAAE,WAAUA,IAAE,EAAE;AAAE,IAAAA,GAAE,gBAAcA,GAAE;AAAa,aAAOC,KAAE,GAAGD,EAAC,IAAE8a,MAAE7a;AAAE,OAAG,UAAQ;AAAA,EAAI;AAC1d,WAAS,GAAGD,IAAE;AAAC,QAAIC,KAAED;AAAE,OAAE;AAAC,UAAI,IAAEC,GAAE;AAAU,MAAAD,KAAEC,GAAE;AAAO,UAAG,OAAKA,GAAE,QAAM,QAAO;AAAC,YAAG,IAAE,GAAG,GAAEA,IAAE,EAAE,GAAE,SAAO,GAAE;AAAC6a,gBAAE;AAAE;AAAA,QAAM;AAAA,MAAC,OAAK;AAAC,YAAE,GAAG,GAAE7a,EAAC;AAAE,YAAG,SAAO,GAAE;AAAC,YAAE,SAAO;AAAM6a,gBAAE;AAAE;AAAA,QAAM;AAAC,YAAG,SAAO9a;AAAE,UAAAA,GAAE,SAAO,OAAMA,GAAE,eAAa,GAAEA,GAAE,YAAU;AAAA,aAAS;AAACqa,gBAAE;AAAES,gBAAE;AAAK;AAAA,QAAM;AAAA,MAAC;AAAC,MAAA7a,KAAEA,GAAE;AAAQ,UAAG,SAAOA,IAAE;AAAC6a,cAAE7a;AAAE;AAAA,MAAM;AAAC6a,YAAE7a,KAAED;AAAA,IAAC,SAAO,SAAOC;AAAG,UAAIoa,QAAIA,MAAE;AAAA,EAAE;AAAC,WAAS,GAAGra,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE0X,KAAEtV,KAAE,GAAG;AAAW,QAAG;AAAC,SAAG,aAAW,MAAKsV,MAAE,GAAE,GAAGnZ,IAAEC,IAAE,GAAEwB,EAAC;AAAA,IAAC,UAAC;AAAQ,SAAG,aAAWoC,IAAEsV,MAAE1X;AAAA,IAAC;AAAC,WAAO;AAAA,EAAI;AAChc,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE;AAAC;AAAG,SAAE;AAAA,WAAS,SAAO;AAAI,QAAG,OAAKkY,MAAE;AAAG,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAE3Z,GAAE;AAAa,QAAI6D,KAAE7D,GAAE;AAAc,QAAG,SAAO;AAAE,aAAO;AAAK,IAAAA,GAAE,eAAa;AAAK,IAAAA,GAAE,gBAAc;AAAE,QAAG,MAAIA,GAAE;AAAQ,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,IAAAA,GAAE,eAAa;AAAK,IAAAA,GAAE,mBAAiB;AAAE,QAAIH,KAAE,EAAE,QAAM,EAAE;AAAW,OAAGG,IAAEH,EAAC;AAAE,IAAAG,OAAIma,QAAIW,MAAEX,MAAE,MAAKY,MAAE;AAAG,WAAK,EAAE,eAAa,SAAO,OAAK,EAAE,QAAM,SAAO,OAAK,KAAG,MAAG,GAAG,IAAG,WAAU;AAAC,SAAE;AAAG,aAAO;AAAA,IAAI,CAAC;AAAG,IAAAlb,KAAE,OAAK,EAAE,QAAM;AAAO,QAAG,OAAK,EAAE,eAAa,UAAQA,IAAE;AAAC,MAAAA,KAAE,GAAG;AAAW,SAAG,aAAW;AAChf,UAAIia,KAAEX;AAAEA,YAAE;AAAE,UAAI1R,KAAEkS;AAAEA,aAAG;AAAE,SAAG,UAAQ;AAAK,SAAG3Z,IAAE,CAAC;AAAE,SAAG,GAAEA,EAAC;AAAE,SAAG,EAAE;AAAE,WAAG,CAAC,CAAC;AAAG,WAAG,KAAG;AAAK,MAAAA,GAAE,UAAQ;AAAE,SAAG,CAAK;AAAE,SAAI;AAAC2Z,YAAElS;AAAE0R,YAAEW;AAAE,SAAG,aAAWja;AAAA,IAAC;AAAM,MAAAG,GAAE,UAAQ;AAAE,WAAK,KAAG,OAAG,KAAGA,IAAE,KAAG6D;AAAG,IAAAhE,KAAEG,GAAE;AAAa,UAAIH,OAAI,KAAG;AAAM,OAAG,EAAE,SAAW;AAAE,OAAGG,IAAEkZ,IAAG,CAAA;AAAE,QAAG,SAAOjZ;AAAE,WAAIwB,KAAEzB,GAAE,oBAAmB,IAAE,GAAE,IAAEC,GAAE,QAAO;AAAI,QAAA4D,KAAE5D,GAAE,IAAGwB,GAAEoC,GAAE,OAAM,EAAC,gBAAeA,GAAE,OAAM,QAAOA,GAAE,OAAM,CAAC;AAAE,QAAG;AAAG,YAAM,KAAG,OAAG7D,KAAE,IAAG,KAAG,MAAKA;AAAE,WAAK,KAAG,MAAI,MAAIA,GAAE,OAAK,GAAE;AAAG,IAAAH,KAAEG,GAAE;AAAa,WAAKH,KAAE,KAAGG,OAAI,KAAG,QAAM,KAAG,GAAE,KAAGA,MAAG,KAAG;AAAE,OAAE;AAAG,WAAO;AAAA,EAAI;AACre,WAAS,KAAI;AAAC,QAAG,SAAO,IAAG;AAAC,UAAIA,KAAE,GAAG,EAAE,GAAEC,KAAE,GAAG,YAAW,IAAEkZ;AAAE,UAAG;AAAC,WAAG,aAAW;AAAKA,cAAE,KAAGnZ,KAAE,KAAGA;AAAE,YAAG,SAAO;AAAG,cAAIyB,KAAE;AAAA,aAAO;AAAC,UAAAzB,KAAE;AAAG,eAAG;AAAK,eAAG;AAAE,cAAG,OAAK2Z,MAAE;AAAG,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,cAAI9V,KAAE8V;AAAEA,iBAAG;AAAE,eAAIY,MAAEva,GAAE,SAAQ,SAAOua,OAAG;AAAC,gBAAI1a,KAAE0a,KAAET,KAAEja,GAAE;AAAM,gBAAG,OAAK0a,IAAE,QAAM,KAAI;AAAC,kBAAI9S,KAAE5H,GAAE;AAAU,kBAAG,SAAO4H,IAAE;AAAC,yBAAQ8O,KAAE,GAAEA,KAAE9O,GAAE,QAAO8O,MAAI;AAAC,sBAAII,KAAElP,GAAE8O;AAAG,uBAAIgE,MAAE5D,IAAE,SAAO4D,OAAG;AAAC,wBAAIzY,KAAEyY;AAAE,4BAAOzY,GAAE,KAAK;AAAA,sBAAA,KAAK;AAAA,sBAAE,KAAK;AAAA,sBAAG,KAAK;AAAG,2BAAG,GAAEA,IAAEjC,EAAC;AAAA,oBAAC;AAAC,wBAAIkZ,KAAEjX,GAAE;AAAM,wBAAG,SAAOiX;AAAE,sBAAAA,GAAE,SAAOjX,IAAEyY,MAAExB;AAAA;AAAO,6BAAK,SAAOwB,OAAG;AAAC,wBAAAzY,KAAEyY;AAAE,4BAAItX,KAAEnB,GAAE,SAAQyD,KAAEzD,GAAE;AAAO,2BAAGA,EAAC;AAAE,4BAAGA,OACnf6U,IAAE;AAAC4D,gCAAE;AAAK;AAAA,wBAAK;AAAC,4BAAG,SAAOtX,IAAE;AAAC,0BAAAA,GAAE,SAAOsC;AAAEgV,gCAAEtX;AAAE;AAAA,wBAAK;AAACsX,8BAAEhV;AAAA,sBAAC;AAAA,kBAAC;AAAA,gBAAC;AAAC,oBAAI7E,KAAEb,GAAE;AAAU,oBAAG,SAAOa,IAAE;AAAC,sBAAIsY,KAAEtY,GAAE;AAAM,sBAAG,SAAOsY,IAAE;AAAC,oBAAAtY,GAAE,QAAM;AAAK,uBAAE;AAAC,0BAAIgZ,KAAEV,GAAE;AAAQ,sBAAAA,GAAE,UAAQ;AAAK,sBAAAA,KAAEU;AAAA,oBAAC,SAAO,SAAOV;AAAA,kBAAE;AAAA,gBAAC;AAACuB,sBAAE1a;AAAA,cAAC;AAAA,YAAC;AAAC,gBAAG,OAAKA,GAAE,eAAa,SAAO,SAAOia;AAAE,cAAAA,GAAE,SAAOja,IAAE0a,MAAET;AAAA;AAAO;AAAE,uBAAK,SAAOS,OAAG;AAAC,kBAAA1a,KAAE0a;AAAE,sBAAG,OAAK1a,GAAE,QAAM;AAAM,4BAAOA,GAAE,KAAK;AAAA,sBAAA,KAAK;AAAA,sBAAE,KAAK;AAAA,sBAAG,KAAK;AAAG,2BAAG,GAAEA,IAAEA,GAAE,MAAM;AAAA,oBAAC;AAAC,sBAAIyF,KAAEzF,GAAE;AAAQ,sBAAG,SAAOyF,IAAE;AAAC,oBAAAA,GAAE,SAAOzF,GAAE;AAAO0a,0BAAEjV;AAAE,0BAAM;AAAA,kBAAC;AAACiV,wBAAE1a,GAAE;AAAA,gBAAM;AAAA,UAAC;AAAC,cAAI6H,KAAE1H,GAAE;AAAQ,eAAIua,MAAE7S,IAAE,SAAO6S,OAAG;AAAC,YAAAT,KAAES;AAAE,gBAAIxD,KAAE+C,GAAE;AAAM,gBAAG,OAAKA,GAAE,eAAa,SAAO,SAClf/C;AAAE,cAAAA,GAAE,SAAO+C,IAAES,MAAExD;AAAA;AAAO;AAAE,qBAAI+C,KAAEpS,IAAE,SAAO6S,OAAG;AAAC,kBAAA9S,KAAE8S;AAAE,sBAAG,OAAK9S,GAAE,QAAM;AAAM,wBAAG;AAAC,8BAAOA,GAAE,KAAG;AAAA,wBAAE,KAAK;AAAA,wBAAE,KAAK;AAAA,wBAAG,KAAK;AAAG,6BAAG,GAAEA,EAAC;AAAA,sBAAC;AAAA,oBAAC,SAAO,IAAN;AAAU+S,0BAAE/S,IAAEA,GAAE,QAAO,EAAE;AAAA,oBAAC;AAAC,sBAAGA,OAAIqS,IAAE;AAACS,0BAAE;AAAK,0BAAM;AAAA,kBAAC;AAAC,sBAAIjB,KAAE7R,GAAE;AAAQ,sBAAG,SAAO6R,IAAE;AAAC,oBAAAA,GAAE,SAAO7R,GAAE;AAAO8S,0BAAEjB;AAAE,0BAAM;AAAA,kBAAC;AAACiB,wBAAE9S,GAAE;AAAA,gBAAM;AAAA,UAAC;AAACkS,gBAAE9V;AAAE,aAAE;AAAG,cAAG,MAAI,eAAa,OAAO,GAAG;AAAsB,gBAAG;AAAC,iBAAG,sBAAsB,IAAG7D,EAAC;AAAA,YAAC,SAAO,IAAN;AAAA,YAAS;AAAE,UAAAyB,KAAE;AAAA,QAAE;AAAC,eAAOA;AAAA,MAAC,UAAC;AAAQ0X,cAAE,GAAE,GAAG,aAAWlZ;AAAA,MAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,IAAAA,KAAE,GAAG,GAAEA,EAAC;AAAE,IAAAA,KAAE,GAAGD,IAAEC,IAAE,CAAC;AAAE,IAAAD,KAAE,GAAGA,IAAEC,IAAE,CAAC;AAAE,IAAAA,KAAE2Z,IAAG;AAAC,aAAO5Z,OAAI,GAAGA,IAAE,GAAEC,EAAC,GAAE,GAAGD,IAAEC,EAAC;AAAA,EAAE;AACze,WAASua,IAAExa,IAAEC,IAAE,GAAE;AAAC,QAAG,MAAID,GAAE;AAAI,SAAGA,IAAEA,IAAE,CAAC;AAAA;AAAO,aAAK,SAAOC,MAAG;AAAC,YAAG,MAAIA,GAAE,KAAI;AAAC,aAAGA,IAAED,IAAE,CAAC;AAAE;AAAA,QAAK,WAAS,MAAIC,GAAE,KAAI;AAAC,cAAIwB,KAAExB,GAAE;AAAU,cAAG,eAAa,OAAOA,GAAE,KAAK,4BAA0B,eAAa,OAAOwB,GAAE,sBAAoB,SAAO,MAAI,CAAC,GAAG,IAAIA,EAAC,IAAG;AAAC,YAAAzB,KAAE,GAAG,GAAEA,EAAC;AAAE,YAAAA,KAAE,GAAGC,IAAED,IAAE,CAAC;AAAE,YAAAC,KAAE,GAAGA,IAAED,IAAE,CAAC;AAAE,YAAAA,KAAE4Z,IAAG;AAAC,qBAAO3Z,OAAI,GAAGA,IAAE,GAAED,EAAC,GAAE,GAAGC,IAAED,EAAC;AAAG;AAAA,UAAK;AAAA,QAAC;AAAC,QAAAC,KAAEA,GAAE;AAAA,MAAM;AAAA,EAAC;AACnV,WAAS,GAAGD,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAEzB,GAAE;AAAU,aAAOyB,MAAGA,GAAE,OAAOxB,EAAC;AAAE,IAAAA,KAAE2Z;AAAI,IAAA5Z,GAAE,eAAaA,GAAE,iBAAe;AAAEma,YAAIna,OAAI+a,MAAE,OAAK,MAAI,MAAIV,OAAG,MAAIA,QAAIU,MAAE,eAAaA,OAAG,MAAI7B,QAAI,KAAG,GAAGlZ,IAAE,CAAC,IAAE,MAAI;AAAG,OAAGA,IAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,UAAIA,OAAI,OAAKD,GAAE,OAAK,KAAGC,KAAE,KAAGA,KAAE,IAAG,OAAK,GAAE,OAAK,KAAG,eAAa,KAAG;AAAW,QAAI,IAAE2Z;AAAI,IAAA5Z,KAAE,GAAGA,IAAEC,EAAC;AAAE,aAAOD,OAAI,GAAGA,IAAEC,IAAE,CAAC,GAAE,GAAGD,IAAE,CAAC;AAAA,EAAE;AAAC,WAAS,GAAGA,IAAE;AAAC,QAAIC,KAAED,GAAE,eAAc,IAAE;AAAE,aAAOC,OAAI,IAAEA,GAAE;AAAW,OAAGD,IAAE,CAAC;AAAA,EAAC;AACjZ,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAE;AAAE,YAAOD,GAAE,KAAG;AAAA,MAAE,KAAK;AAAG,YAAIyB,KAAEzB,GAAE;AAAU,YAAI6D,KAAE7D,GAAE;AAAc,iBAAO6D,OAAI,IAAEA,GAAE;AAAW;AAAA,MAAM,KAAK;AAAG,QAAApC,KAAEzB,GAAE;AAAU;AAAA,MAAM;AAAQ,cAAM,MAAM,EAAE,GAAG,CAAC;AAAA,IAAE;AAAC,aAAOyB,MAAGA,GAAE,OAAOxB,EAAC;AAAE,OAAGD,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI;AAClN,OAAG,SAASA,IAAEC,IAAE,GAAE;AAAC,QAAG,SAAOD;AAAE,UAAGA,GAAE,kBAAgBC,GAAE,gBAAc,GAAG;AAAQ,aAAG;AAAA,WAAO;AAAC,YAAG,OAAKD,GAAE,QAAM,MAAI,OAAKC,GAAE,QAAM;AAAK,iBAAO,KAAG,OAAG,GAAGD,IAAEC,IAAE,CAAC;AAAE,aAAG,OAAKD,GAAE,QAAM,UAAQ,OAAG;AAAA,MAAE;AAAA;AAAM,WAAG,OAAGyZ,OAAG,OAAKxZ,GAAE,QAAM,YAAU,GAAGA,IAAE,IAAGA,GAAE,KAAK;AAAE,IAAAA,GAAE,QAAM;AAAE,YAAOA,GAAE;MAAK,KAAK;AAAE,YAAIwB,KAAExB,GAAE;AAAK,WAAGD,IAAEC,EAAC;AAAE,QAAAD,KAAEC,GAAE;AAAa,YAAI4D,KAAE,GAAG5D,IAAEuZ,IAAE,OAAO;AAAE,WAAGvZ,IAAE,CAAC;AAAE,QAAA4D,KAAE,GAAG,MAAK5D,IAAEwB,IAAEzB,IAAE6D,IAAE,CAAC;AAAE,YAAIhE,KAAE,GAAI;AAAC,QAAAI,GAAE,SAAO;AAAE,qBAAW,OAAO4D,MAAG,SAAOA,MAAG,eAAa,OAAOA,GAAE,UAAQ,WAASA,GAAE,YAAU5D,GAAE,MAAI,GAAEA,GAAE,gBAAc,MAAKA,GAAE,cAC1e,MAAK,GAAGwB,EAAC,KAAG5B,KAAE,MAAG,GAAGI,EAAC,KAAGJ,KAAE,OAAGI,GAAE,gBAAc,SAAO4D,GAAE,SAAO,WAASA,GAAE,QAAMA,GAAE,QAAM,MAAK,GAAG5D,EAAC,GAAE4D,GAAE,UAAQ,IAAG5D,GAAE,YAAU4D,IAAEA,GAAE,kBAAgB5D,IAAE,GAAGA,IAAEwB,IAAEzB,IAAE,CAAC,GAAEC,KAAE,GAAG,MAAKA,IAAEwB,IAAE,MAAG5B,IAAE,CAAC,MAAII,GAAE,MAAI,GAAEwZ,OAAG5Z,MAAG,GAAGI,EAAC,GAAE,GAAG,MAAKA,IAAE4D,IAAE,CAAC,GAAE5D,KAAEA,GAAE;AAAO,eAAOA;AAAA,MAAE,KAAK;AAAG,QAAAwB,KAAExB,GAAE;AAAY,WAAE;AAAC,aAAGD,IAAEC,EAAC;AAAE,UAAAD,KAAEC,GAAE;AAAa,UAAA4D,KAAEpC,GAAE;AAAM,UAAAA,KAAEoC,GAAEpC,GAAE,QAAQ;AAAE,UAAAxB,GAAE,OAAKwB;AAAE,UAAAoC,KAAE5D,GAAE,MAAI,GAAGwB,EAAC;AAAE,UAAAzB,KAAE,GAAGyB,IAAEzB,EAAC;AAAE,kBAAO6D,IAAC;AAAA,YAAE,KAAK;AAAE,cAAA5D,KAAE,GAAG,MAAKA,IAAEwB,IAAEzB,IAAE,CAAC;AAAE,oBAAM;AAAA,YAAE,KAAK;AAAE,cAAAC,KAAE,GAAG,MAAKA,IAAEwB,IAAEzB,IAAE,CAAC;AAAE,oBAAM;AAAA,YAAE,KAAK;AAAG,cAAAC,KAAE,GAAG,MAAKA,IAAEwB,IAAEzB,IAAE,CAAC;AAAE,oBAAM;AAAA,YAAE,KAAK;AAAG,cAAAC,KAAE,GAAG,MAAKA,IAAEwB,IAAE,GAAGA,GAAE,MAAKzB,EAAC,GAAE,CAAC;AAAE,oBAAM;AAAA,UAAC;AAAC,gBAAM,MAAM;AAAA,YAAE;AAAA,YACvgByB;AAAA,YAAE;AAAA,UAAE,CAAC;AAAA,QAAE;AAAC,eAAOxB;AAAA,MAAE,KAAK;AAAE,eAAOwB,KAAExB,GAAE,MAAK4D,KAAE5D,GAAE,cAAa4D,KAAE5D,GAAE,gBAAcwB,KAAEoC,KAAE,GAAGpC,IAAEoC,EAAC,GAAE,GAAG7D,IAAEC,IAAEwB,IAAEoC,IAAE,CAAC;AAAA,MAAE,KAAK;AAAE,eAAOpC,KAAExB,GAAE,MAAK4D,KAAE5D,GAAE,cAAa4D,KAAE5D,GAAE,gBAAcwB,KAAEoC,KAAE,GAAGpC,IAAEoC,EAAC,GAAE,GAAG7D,IAAEC,IAAEwB,IAAEoC,IAAE,CAAC;AAAA,MAAE,KAAK;AAAE,WAAE;AAAC,aAAG5D,EAAC;AAAE,cAAG,SAAOD;AAAE,kBAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAAyB,KAAExB,GAAE;AAAa,UAAAJ,KAAEI,GAAE;AAAc,UAAA4D,KAAEhE,GAAE;AAAQ,aAAGG,IAAEC,EAAC;AAAE,aAAGA,IAAEwB,IAAE,MAAK,CAAC;AAAE,cAAIqY,KAAE7Z,GAAE;AAAc,UAAAwB,KAAEqY,GAAE;AAAQ,cAAGja,GAAE;AAAa,gBAAGA,KAAE,EAAC,SAAQ4B,IAAE,cAAa,OAAG,OAAMqY,GAAE,OAAM,2BAA0BA,GAAE,2BAA0B,aAAYA,GAAE,YAAW,GAAE7Z,GAAE,YAAY,YAChfJ,IAAEI,GAAE,gBAAcJ,IAAEI,GAAE,QAAM,KAAI;AAAC,cAAA4D,KAAE,GAAG,MAAM,EAAE,GAAG,CAAC,GAAE5D,EAAC;AAAE,cAAAA,KAAE,GAAGD,IAAEC,IAAEwB,IAAE,GAAEoC,EAAC;AAAE,oBAAM;AAAA,YAAC,WAASpC,OAAIoC,IAAE;AAAC,cAAAA,KAAE,GAAG,MAAM,EAAE,GAAG,CAAC,GAAE5D,EAAC;AAAE,cAAAA,KAAE,GAAGD,IAAEC,IAAEwB,IAAE,GAAEoC,EAAC;AAAE,oBAAM;AAAA,YAAC;AAAM,mBAAI,KAAG,GAAG5D,GAAE,UAAU,cAAc,UAAU,GAAE,KAAGA,IAAEwZ,MAAE,MAAG,KAAG,MAAK,IAAE,GAAGxZ,IAAE,MAAKwB,IAAE,CAAC,GAAExB,GAAE,QAAM,GAAE;AAAG,kBAAE,QAAM,EAAE,QAAM,KAAG,MAAK,IAAE,EAAE;AAAA,eAAY;AAAC,eAAI;AAAC,gBAAGwB,OAAIoC,IAAE;AAAC,cAAA5D,KAAE,GAAGD,IAAEC,IAAE,CAAC;AAAE,oBAAM;AAAA,YAAC;AAAC,eAAGD,IAAEC,IAAEwB,IAAE,CAAC;AAAA,UAAC;AAAC,UAAAxB,KAAEA,GAAE;AAAA,QAAK;AAAC,eAAOA;AAAA,MAAE,KAAK;AAAE,eAAO,GAAGA,EAAC,GAAE,SAAOD,MAAG,GAAGC,EAAC,GAAEwB,KAAExB,GAAE,MAAK4D,KAAE5D,GAAE,cAAaJ,KAAE,SAAOG,KAAEA,GAAE,gBAAc,MAAK8Z,KAAEjW,GAAE,UAAS,GAAGpC,IAAEoC,EAAC,IAAEiW,KAAE,OAAK,SAAOja,MAAG,GAAG4B,IAAE5B,EAAC,MAAII,GAAE,SAAO,KACnf,GAAGD,IAAEC,EAAC,GAAE,GAAGD,IAAEC,IAAE6Z,IAAE,CAAC,GAAE7Z,GAAE;AAAA,MAAM,KAAK;AAAE,eAAO,SAAOD,MAAG,GAAGC,EAAC,GAAE;AAAA,MAAK,KAAK;AAAG,eAAO,GAAGD,IAAEC,IAAE,CAAC;AAAA,MAAE,KAAK;AAAE,eAAO,GAAGA,IAAEA,GAAE,UAAU,aAAa,GAAEwB,KAAExB,GAAE,cAAa,SAAOD,KAAEC,GAAE,QAAM,GAAGA,IAAE,MAAKwB,IAAE,CAAC,IAAE,GAAGzB,IAAEC,IAAEwB,IAAE,CAAC,GAAExB,GAAE;AAAA,MAAM,KAAK;AAAG,eAAOwB,KAAExB,GAAE,MAAK4D,KAAE5D,GAAE,cAAa4D,KAAE5D,GAAE,gBAAcwB,KAAEoC,KAAE,GAAGpC,IAAEoC,EAAC,GAAE,GAAG7D,IAAEC,IAAEwB,IAAEoC,IAAE,CAAC;AAAA,MAAE,KAAK;AAAE,eAAO,GAAG7D,IAAEC,IAAEA,GAAE,cAAa,CAAC,GAAEA,GAAE;AAAA,MAAM,KAAK;AAAE,eAAO,GAAGD,IAAEC,IAAEA,GAAE,aAAa,UAAS,CAAC,GAAEA,GAAE;AAAA,MAAM,KAAK;AAAG,eAAO,GAAGD,IAAEC,IAAEA,GAAE,aAAa,UAAS,CAAC,GAAEA,GAAE;AAAA,MAAM,KAAK;AAAG,WAAE;AAAC,UAAAwB,KAAExB,GAAE,KAAK;AAAS,UAAA4D,KAAE5D,GAAE;AAAa,UAAAJ,KAAEI,GAAE;AAClf,UAAA6Z,KAAEjW,GAAE;AAAM0V,cAAE,IAAG9X,GAAE,aAAa;AAAE,UAAAA,GAAE,gBAAcqY;AAAE,cAAG,SAAOja;AAAE,gBAAG,GAAGA,GAAE,OAAMia,EAAC,GAAE;AAAC,kBAAGja,GAAE,aAAWgE,GAAE,YAAU,CAAC,GAAG,SAAQ;AAAC,gBAAA5D,KAAE,GAAGD,IAAEC,IAAE,CAAC;AAAE,sBAAM;AAAA,cAAC;AAAA,YAAC;AAAM,mBAAIJ,KAAEI,GAAE,OAAM,SAAOJ,OAAIA,GAAE,SAAOI,KAAG,SAAOJ,MAAG;AAAC,oBAAI4H,KAAE5H,GAAE;AAAa,oBAAG,SAAO4H,IAAE;AAAC,kBAAAqS,KAAEja,GAAE;AAAM,2BAAQ0W,KAAE9O,GAAE,cAAa,SAAO8O,MAAG;AAAC,wBAAGA,GAAE,YAAU9U,IAAE;AAAC,0BAAG,MAAI5B,GAAE,KAAI;AAAC,wBAAA0W,KAAE,GAAG,IAAG,IAAE,CAAC,CAAC;AAAE,wBAAAA,GAAE,MAAI;AAAE,4BAAII,KAAE9W,GAAE;AAAY,4BAAG,SAAO8W,IAAE;AAAC,0BAAAA,KAAEA,GAAE;AAAO,8BAAI7U,KAAE6U,GAAE;AAAQ,mCAAO7U,KAAEyU,GAAE,OAAKA,MAAGA,GAAE,OAAKzU,GAAE,MAAKA,GAAE,OAAKyU;AAAG,0BAAAI,GAAE,UAAQJ;AAAA,wBAAC;AAAA,sBAAC;AAAC,sBAAA1W,GAAE,SAAO;AAAE,sBAAA0W,KAAE1W,GAAE;AAAU,+BAAO0W,OAAIA,GAAE,SAAO;AAAG;AAAA,wBAAG1W,GAAE;AAAA,wBAClf;AAAA,wBAAEI;AAAA,sBAAC;AAAE,sBAAAwH,GAAE,SAAO;AAAE;AAAA,oBAAK;AAAC,oBAAA8O,KAAEA,GAAE;AAAA,kBAAI;AAAA,gBAAC,WAAS,OAAK1W,GAAE;AAAI,kBAAAia,KAAEja,GAAE,SAAOI,GAAE,OAAK,OAAKJ,GAAE;AAAA,yBAAc,OAAKA,GAAE,KAAI;AAAC,kBAAAia,KAAEja,GAAE;AAAO,sBAAG,SAAOia;AAAE,0BAAM,MAAM,EAAE,GAAG,CAAC;AAAE,kBAAAA,GAAE,SAAO;AAAE,kBAAArS,KAAEqS,GAAE;AAAU,2BAAOrS,OAAIA,GAAE,SAAO;AAAG,qBAAGqS,IAAE,GAAE7Z,EAAC;AAAE,kBAAA6Z,KAAEja,GAAE;AAAA,gBAAO;AAAM,kBAAAia,KAAEja,GAAE;AAAM,oBAAG,SAAOia;AAAE,kBAAAA,GAAE,SAAOja;AAAA;AAAO,uBAAIia,KAAEja,IAAE,SAAOia,MAAG;AAAC,wBAAGA,OAAI7Z,IAAE;AAAC,sBAAA6Z,KAAE;AAAK;AAAA,oBAAK;AAAC,oBAAAja,KAAEia,GAAE;AAAQ,wBAAG,SAAOja,IAAE;AAAC,sBAAAA,GAAE,SAAOia,GAAE;AAAO,sBAAAA,KAAEja;AAAE;AAAA,oBAAK;AAAC,oBAAAia,KAAEA,GAAE;AAAA,kBAAM;AAAC,gBAAAja,KAAEia;AAAA,cAAC;AAAC,aAAG9Z,IAAEC,IAAE4D,GAAE,UAAS,CAAC;AAAE,UAAA5D,KAAEA,GAAE;AAAA,QAAK;AAAC,eAAOA;AAAA,MAAE,KAAK;AAAE,eAAO4D,KAAE5D,GAAE,MAAKwB,KAAExB,GAAE,aAAa,UAAS,GAAGA,IAAE,CAAC,GAAE4D,KAAE,GAAGA,EAAC,GAAEpC,KAAEA,GAAEoC,EAAC,GAAE5D,GAAE,SAAO,GAAE,GAAGD,IAAEC,IAAEwB,IAAE,CAAC,GACrfxB,GAAE;AAAA,MAAM,KAAK;AAAG,eAAOwB,KAAExB,GAAE,MAAK4D,KAAE,GAAGpC,IAAExB,GAAE,YAAY,GAAE4D,KAAE,GAAGpC,GAAE,MAAKoC,EAAC,GAAE,GAAG7D,IAAEC,IAAEwB,IAAEoC,IAAE,CAAC;AAAA,MAAE,KAAK;AAAG,eAAO,GAAG7D,IAAEC,IAAEA,GAAE,MAAKA,GAAE,cAAa,CAAC;AAAA,MAAE,KAAK;AAAG,eAAOwB,KAAExB,GAAE,MAAK4D,KAAE5D,GAAE,cAAa4D,KAAE5D,GAAE,gBAAcwB,KAAEoC,KAAE,GAAGpC,IAAEoC,EAAC,GAAE,GAAG7D,IAAEC,EAAC,GAAEA,GAAE,MAAI,GAAE,GAAGwB,EAAC,KAAGzB,KAAE,MAAG,GAAGC,EAAC,KAAGD,KAAE,OAAG,GAAGC,IAAE,CAAC,GAAE,GAAGA,IAAEwB,IAAEoC,EAAC,GAAE,GAAG5D,IAAEwB,IAAEoC,IAAE,CAAC,GAAE,GAAG,MAAK5D,IAAEwB,IAAE,MAAGzB,IAAE,CAAC;AAAA,MAAE,KAAK;AAAG,eAAO,GAAGA,IAAEC,IAAE,CAAC;AAAA,MAAE,KAAK;AAAG,eAAO,GAAGD,IAAEC,IAAE,CAAC;AAAA,IAAC;AAAC,UAAM,MAAM,EAAE,KAAIA,GAAE,GAAG,CAAC;AAAA,EAAE;AAAE,WAAS,GAAGD,IAAEC,IAAE;AAAC,WAAO,GAAGD,IAAEC,EAAC;AAAA,EAAC;AACjZ,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,SAAK,MAAIzB;AAAE,SAAK,MAAI;AAAE,SAAK,UAAQ,KAAK,QAAM,KAAK,SAAO,KAAK,YAAU,KAAK,OAAK,KAAK,cAAY;AAAK,SAAK,QAAM;AAAE,SAAK,MAAI;AAAK,SAAK,eAAaC;AAAE,SAAK,eAAa,KAAK,gBAAc,KAAK,cAAY,KAAK,gBAAc;AAAK,SAAK,OAAKwB;AAAE,SAAK,eAAa,KAAK,QAAM;AAAE,SAAK,YAAU;AAAK,SAAK,aAAW,KAAK,QAAM;AAAE,SAAK,YAAU;AAAA,EAAI;AAAC,WAAS,GAAGzB,IAAEC,IAAE,GAAEwB,IAAE;AAAC,WAAO,IAAI,GAAGzB,IAAEC,IAAE,GAAEwB,EAAC;AAAA,EAAC;AAAC,WAAS,GAAGzB,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAU,WAAM,EAAE,CAACA,MAAG,CAACA,GAAE;AAAA,EAAiB;AACpd,WAAS,GAAGA,IAAE;AAAC,QAAG,eAAa,OAAOA;AAAE,aAAO,GAAGA,EAAC,IAAE,IAAE;AAAE,QAAG,WAASA,MAAG,SAAOA,IAAE;AAAC,MAAAA,KAAEA,GAAE;AAAS,UAAGA,OAAI;AAAG,eAAO;AAAG,UAAGA,OAAI;AAAG,eAAO;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAC/I,WAAS,GAAGA,IAAEC,IAAE;AAAC,QAAI,IAAED,GAAE;AAAU,aAAO,KAAG,IAAE,GAAGA,GAAE,KAAIC,IAAED,GAAE,KAAIA,GAAE,IAAI,GAAE,EAAE,cAAYA,GAAE,aAAY,EAAE,OAAKA,GAAE,MAAK,EAAE,YAAUA,GAAE,WAAU,EAAE,YAAUA,IAAEA,GAAE,YAAU,MAAI,EAAE,eAAaC,IAAE,EAAE,OAAKD,GAAE,MAAK,EAAE,QAAM,GAAE,EAAE,eAAa,GAAE,EAAE,YAAU;AAAM,MAAE,QAAMA,GAAE,QAAM;AAAS,MAAE,aAAWA,GAAE;AAAW,MAAE,QAAMA,GAAE;AAAM,MAAE,QAAMA,GAAE;AAAM,MAAE,gBAAcA,GAAE;AAAc,MAAE,gBAAcA,GAAE;AAAc,MAAE,cAAYA,GAAE;AAAY,IAAAC,KAAED,GAAE;AAAa,MAAE,eAAa,SAAOC,KAAE,OAAK,EAAC,OAAMA,GAAE,OAAM,cAAaA,GAAE,aAAY;AAC3f,MAAE,UAAQD,GAAE;AAAQ,MAAE,QAAMA,GAAE;AAAM,MAAE,MAAIA,GAAE;AAAI,WAAO;AAAA,EAAC;AACxD,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAE;AAAC,QAAIia,KAAE;AAAE,IAAArY,KAAEzB;AAAE,QAAG,eAAa,OAAOA;AAAE,SAAGA,EAAC,MAAI8Z,KAAE;AAAA,aAAW,aAAW,OAAO9Z;AAAE,MAAA8Z,KAAE;AAAA;AAAO;AAAE,gBAAO9Z,IAAG;AAAA,UAAA,KAAK;AAAG,mBAAO,GAAG,EAAE,UAAS6D,IAAEhE,IAAEI,EAAC;AAAA,UAAE,KAAK;AAAG,YAAA6Z,KAAE;AAAE,YAAAjW,MAAG;AAAE;AAAA,UAAM,KAAK;AAAG,mBAAO7D,KAAE,GAAG,IAAG,GAAEC,IAAE4D,KAAE,CAAC,GAAE7D,GAAE,cAAY,IAAGA,GAAE,QAAMH,IAAEG;AAAA,UAAE,KAAK;AAAG,mBAAOA,KAAE,GAAG,IAAG,GAAEC,IAAE4D,EAAC,GAAE7D,GAAE,cAAY,IAAGA,GAAE,QAAMH,IAAEG;AAAA,UAAE,KAAK;AAAG,mBAAOA,KAAE,GAAG,IAAG,GAAEC,IAAE4D,EAAC,GAAE7D,GAAE,cAAY,IAAGA,GAAE,QAAMH,IAAEG;AAAA,UAAE,KAAK;AAAG,mBAAO,GAAG,GAAE6D,IAAEhE,IAAEI,EAAC;AAAA,UAAE;AAAQ,gBAAG,aAAW,OAAOD,MAAG,SAAOA;AAAE,sBAAOA,GAAE,UAAQ;AAAA,gBAAE,KAAK;AAAG,kBAAA8Z,KAAE;AAAG,wBAAM;AAAA,gBAAE,KAAK;AAAG,kBAAAA,KAAE;AAAE,wBAAM;AAAA,gBAAE,KAAK;AAAG,kBAAAA,KAAE;AACpf,wBAAM;AAAA,gBAAE,KAAK;AAAG,kBAAAA,KAAE;AAAG,wBAAM;AAAA,gBAAE,KAAK;AAAG,kBAAAA,KAAE;AAAG,kBAAArY,KAAE;AAAK,wBAAM;AAAA,cAAC;AAAC,kBAAM,MAAM,EAAE,KAAI,QAAMzB,KAAEA,KAAE,OAAOA,IAAE,EAAE,CAAC;AAAA,QAAE;AAAC,IAAAC,KAAE,GAAG6Z,IAAE,GAAE7Z,IAAE4D,EAAC;AAAE,IAAA5D,GAAE,cAAYD;AAAE,IAAAC,GAAE,OAAKwB;AAAE,IAAAxB,GAAE,QAAMJ;AAAE,WAAOI;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAzB,KAAE,GAAG,GAAEA,IAAEyB,IAAExB,EAAC;AAAE,IAAAD,GAAE,QAAM;AAAE,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,IAAAzB,KAAE,GAAG,IAAGA,IAAEyB,IAAExB,EAAC;AAAE,IAAAD,GAAE,cAAY;AAAG,IAAAA,GAAE,QAAM;AAAE,IAAAA,GAAE,YAAU,EAAC,UAAS,MAAE;AAAE,WAAOA;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,IAAAD,KAAE,GAAG,GAAEA,IAAE,MAAKC,EAAC;AAAE,IAAAD,GAAE,QAAM;AAAE,WAAOA;AAAA,EAAC;AAC5W,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,IAAAA,KAAE,GAAG,GAAE,SAAOD,GAAE,WAASA,GAAE,WAAS,CAAE,GAACA,GAAE,KAAIC,EAAC;AAAE,IAAAA,GAAE,QAAM;AAAE,IAAAA,GAAE,YAAU,EAAC,eAAcD,GAAE,eAAc,iBAAgB,MAAK,gBAAeA,GAAE,eAAc;AAAE,WAAOC;AAAA,EAAC;AACtL,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,SAAK,MAAI5D;AAAE,SAAK,gBAAcD;AAAE,SAAK,eAAa,KAAK,YAAU,KAAK,UAAQ,KAAK,kBAAgB;AAAK,SAAK,gBAAc;AAAG,SAAK,eAAa,KAAK,iBAAe,KAAK,UAAQ;AAAK,SAAK,mBAAiB;AAAE,SAAK,aAAW,GAAG,CAAC;AAAE,SAAK,kBAAgB,GAAG,EAAE;AAAE,SAAK,iBAAe,KAAK,gBAAc,KAAK,mBAAiB,KAAK,eAAa,KAAK,cAAY,KAAK,iBAAe,KAAK,eAAa;AAAE,SAAK,gBAAc,GAAG,CAAC;AAAE,SAAK,mBAAiByB;AAAE,SAAK,qBAAmBoC;AAAE,SAAK,kCAC/e;AAAA,EAAI;AAAC,WAAS,GAAG7D,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAErS,IAAE8O,IAAE;AAAC,IAAAvW,KAAE,IAAI,GAAGA,IAAEC,IAAE,GAAEwH,IAAE8O,EAAC;AAAE,UAAItW,MAAGA,KAAE,GAAE,SAAKJ,OAAII,MAAG,MAAIA,KAAE;AAAE,IAAAJ,KAAE,GAAG,GAAE,MAAK,MAAKI,EAAC;AAAE,IAAAD,GAAE,UAAQH;AAAE,IAAAA,GAAE,YAAUG;AAAE,IAAAH,GAAE,gBAAc,EAAC,SAAQ4B,IAAE,cAAa,GAAE,OAAM,MAAK,aAAY,MAAK,2BAA0B,KAAI;AAAE,OAAG5B,EAAC;AAAE,WAAOG;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAE;AAAC,QAAIwB,KAAE,IAAE,UAAU,UAAQ,WAAS,UAAU,KAAG,UAAU,KAAG;AAAK,WAAM,EAAC,UAAS,IAAG,KAAI,QAAMA,KAAE,OAAK,KAAGA,IAAE,UAASzB,IAAE,eAAcC,IAAE,gBAAe,EAAC;AAAA,EAAC;AACpa,WAAS,GAAGD,IAAE;AAAC,QAAG,CAACA;AAAE,aAAO;AAAG,IAAAA,KAAEA,GAAE;AAAgB,OAAE;AAAC,UAAG,GAAGA,EAAC,MAAIA,MAAG,MAAIA,GAAE;AAAI,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,UAAIC,KAAED;AAAE,SAAE;AAAC,gBAAOC,GAAE,KAAK;AAAA,UAAA,KAAK;AAAE,YAAAA,KAAEA,GAAE,UAAU;AAAQ,kBAAM;AAAA,UAAE,KAAK;AAAE,gBAAG,GAAGA,GAAE,IAAI,GAAE;AAAC,cAAAA,KAAEA,GAAE,UAAU;AAA0C,oBAAM;AAAA,YAAC;AAAA,QAAC;AAAC,QAAAA,KAAEA,GAAE;AAAA,MAAM,SAAO,SAAOA;AAAG,YAAM,MAAM,EAAE,GAAG,CAAC;AAAA,IAAE;AAAC,QAAG,MAAID,GAAE,KAAI;AAAC,UAAI,IAAEA,GAAE;AAAK,UAAG,GAAG,CAAC;AAAE,eAAO,GAAGA,IAAE,GAAEC,EAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AACpW,WAAS,GAAGD,IAAEC,IAAE,GAAEwB,IAAEoC,IAAEhE,IAAEia,IAAErS,IAAE8O,IAAE;AAAC,IAAAvW,KAAE,GAAG,GAAEyB,IAAE,MAAGzB,IAAE6D,IAAEhE,IAAEia,IAAErS,IAAE8O,EAAC;AAAE,IAAAvW,GAAE,UAAQ,GAAG,IAAI;AAAE,QAAEA,GAAE;AAAQ,IAAAyB,KAAEmY;AAAI,IAAA/V,KAAE,GAAG,CAAC;AAAE,IAAAhE,KAAE,GAAG4B,IAAEoC,EAAC;AAAE,IAAAhE,GAAE,WAAS,WAASI,MAAG,SAAOA,KAAEA,KAAE;AAAK,OAAG,GAAEJ,IAAEgE,EAAC;AAAE,IAAA7D,GAAE,QAAQ,QAAM6D;AAAE,OAAG7D,IAAE6D,IAAEpC,EAAC;AAAE,OAAGzB,IAAEyB,EAAC;AAAE,WAAOzB;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAIoC,KAAE5D,GAAE,SAAQJ,KAAE+Z,IAAC,GAAGE,KAAE,GAAGjW,EAAC;AAAE,QAAE,GAAG,CAAC;AAAE,aAAO5D,GAAE,UAAQA,GAAE,UAAQ,IAAEA,GAAE,iBAAe;AAAE,IAAAA,KAAE,GAAGJ,IAAEia,EAAC;AAAE,IAAA7Z,GAAE,UAAQ,EAAC,SAAQD,GAAC;AAAE,IAAAyB,KAAE,WAASA,KAAE,OAAKA;AAAE,aAAOA,OAAIxB,GAAE,WAASwB;AAAG,IAAAzB,KAAE,GAAG6D,IAAE5D,IAAE6Z,EAAC;AAAE,aAAO9Z,OAAI,GAAGA,IAAE6D,IAAEiW,IAAEja,EAAC,GAAE,GAAGG,IAAE6D,IAAEiW,EAAC;AAAG,WAAOA;AAAA,EAAC;AAC3b,WAAS,GAAG9Z,IAAE;AAAC,IAAAA,KAAEA,GAAE;AAAQ,QAAG,CAACA,GAAE;AAAM,aAAO;AAAK,YAAOA,GAAE,MAAM;MAAK,KAAK;AAAE,eAAOA,GAAE,MAAM;AAAA,MAAU;AAAQ,eAAOA,GAAE,MAAM;AAAA,IAAS;AAAA,EAAC;AAAC,WAAS,GAAGA,IAAEC,IAAE;AAAC,IAAAD,KAAEA,GAAE;AAAc,QAAG,SAAOA,MAAG,SAAOA,GAAE,YAAW;AAAC,UAAI,IAAEA,GAAE;AAAU,MAAAA,GAAE,YAAU,MAAI,KAAG,IAAEC,KAAE,IAAEA;AAAA,IAAC;AAAA,EAAC;AAAC,WAAS,GAAGD,IAAEC,IAAE;AAAC,OAAGD,IAAEC,EAAC;AAAE,KAACD,KAAEA,GAAE,cAAY,GAAGA,IAAEC,EAAC;AAAA,EAAC;AAAC,WAAS,KAAI;AAAC,WAAO;AAAA,EAAI;AAAC,MAAI,KAAG,eAAa,OAAO,cAAY,cAAY,SAASD,IAAE;AAAC,YAAQ,MAAMA,EAAC;AAAA,EAAC;AAAE,WAAS,GAAGA,IAAE;AAAC,SAAK,gBAAcA;AAAA,EAAC;AAC5b,KAAG,UAAU,SAAO,GAAG,UAAU,SAAO,SAASA,IAAE;AAAC,QAAIC,KAAE,KAAK;AAAc,QAAG,SAAOA;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,OAAGD,IAAEC,IAAE,MAAK,IAAI;AAAA,EAAC;AAAE,KAAG,UAAU,UAAQ,GAAG,UAAU,UAAQ,WAAU;AAAC,QAAID,KAAE,KAAK;AAAc,QAAG,SAAOA,IAAE;AAAC,WAAK,gBAAc;AAAK,UAAIC,KAAED,GAAE;AAAc,SAAG,WAAU;AAAC,WAAG,MAAKA,IAAE,MAAK,IAAI;AAAA,MAAC,CAAC;AAAE,MAAAC,GAAE,MAAI;AAAA,IAAI;AAAA,EAAC;AAAE,WAAS,GAAGD,IAAE;AAAC,SAAK,gBAAcA;AAAA,EAAC;AAC9V,KAAG,UAAU,6BAA2B,SAASA,IAAE;AAAC,QAAGA,IAAE;AAAC,UAAIC,KAAE,GAAE;AAAG,MAAAD,KAAE,EAAC,WAAU,MAAK,QAAOA,IAAE,UAASC,GAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAG,UAAQ,MAAIA,MAAGA,KAAE,GAAG,GAAG,UAAS;AAAI;AAAC,SAAG,OAAO,GAAE,GAAED,EAAC;AAAE,YAAI,KAAG,GAAGA,EAAC;AAAA,IAAC;AAAA,EAAC;AAAE,WAAS,GAAGA,IAAE;AAAC,WAAM,EAAE,CAACA,MAAG,MAAIA,GAAE,YAAU,MAAIA,GAAE,YAAU,OAAKA,GAAE;AAAA,EAAS;AAAC,WAAS,GAAGA,IAAE;AAAC,WAAM,EAAE,CAACA,MAAG,MAAIA,GAAE,YAAU,MAAIA,GAAE,YAAU,OAAKA,GAAE,aAAW,MAAIA,GAAE,YAAU,mCAAiCA,GAAE;AAAA,EAAW;AAAC,WAAS,KAAI;AAAA,EAAE;AACza,WAAS,GAAGA,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAGA,IAAE;AAAC,UAAG,eAAa,OAAOpC,IAAE;AAAC,YAAI5B,KAAE4B;AAAE,QAAAA,KAAE,WAAU;AAAC,cAAIzB,KAAE,GAAG8Z,EAAC;AAAE,UAAAja,GAAE,KAAKG,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI8Z,KAAE,GAAG7Z,IAAEwB,IAAEzB,IAAE,GAAE,MAAK,OAAG,OAAG,IAAG,EAAE;AAAE,MAAAA,GAAE,sBAAoB8Z;AAAE,MAAA9Z,GAAE,MAAI8Z,GAAE;AAAQ,SAAG,MAAI9Z,GAAE,WAASA,GAAE,aAAWA,EAAC;AAAE,SAAI;AAAC,aAAO8Z;AAAA,IAAC;AAAC,WAAKjW,KAAE7D,GAAE;AAAW,MAAAA,GAAE,YAAY6D,EAAC;AAAE,QAAG,eAAa,OAAOpC,IAAE;AAAC,UAAIgG,KAAEhG;AAAE,MAAAA,KAAE,WAAU;AAAC,YAAIzB,KAAE,GAAGuW,EAAC;AAAE,QAAA9O,GAAE,KAAKzH,EAAC;AAAA,MAAC;AAAA,IAAC;AAAC,QAAIuW,KAAE,GAAGvW,IAAE,GAAE,OAAG,MAAK,MAAK,OAAG,OAAG,IAAG,EAAE;AAAE,IAAAA,GAAE,sBAAoBuW;AAAE,IAAAvW,GAAE,MAAIuW,GAAE;AAAQ,OAAG,MAAIvW,GAAE,WAASA,GAAE,aAAWA,EAAC;AAAE,OAAG,WAAU;AAAC,SAAGC,IAAEsW,IAAE,GAAE9U,EAAC;AAAA,IAAC,CAAC;AAAE,WAAO8U;AAAA,EAAC;AAC9d,WAAS,GAAGvW,IAAEC,IAAE,GAAEwB,IAAEoC,IAAE;AAAC,QAAIhE,KAAE,EAAE;AAAoB,QAAGA,IAAE;AAAC,UAAIia,KAAEja;AAAE,UAAG,eAAa,OAAOgE,IAAE;AAAC,YAAI4D,KAAE5D;AAAE,QAAAA,KAAE,WAAU;AAAC,cAAI7D,KAAE,GAAG8Z,EAAC;AAAE,UAAArS,GAAE,KAAKzH,EAAC;AAAA,QAAC;AAAA,MAAC;AAAC,SAAGC,IAAE6Z,IAAE9Z,IAAE6D,EAAC;AAAA,IAAC;AAAM,MAAAiW,KAAE,GAAG,GAAE7Z,IAAED,IAAE6D,IAAEpC,EAAC;AAAE,WAAO,GAAGqY,EAAC;AAAA,EAAC;AAAC,OAAG,SAAS9Z,IAAE;AAAC,YAAOA,GAAE,KAAG;AAAA,MAAE,KAAK;AAAE,YAAIC,KAAED,GAAE;AAAU,YAAGC,GAAE,QAAQ,cAAc,cAAa;AAAC,cAAI,IAAE,GAAGA,GAAE,YAAY;AAAE,gBAAI,MAAI,GAAGA,IAAE,IAAE,CAAC,GAAE,GAAGA,IAAEiZ,IAAC,CAAE,GAAE,OAAKS,MAAE,OAAK,KAAGT,IAAC,IAAG,KAAI;QAAM;AAAC;AAAA,MAAM,KAAK;AAAG,WAAG,WAAU;AAAC,cAAIjZ,KAAE,GAAGD,IAAE,CAAC;AAAE,cAAG,SAAOC,IAAE;AAAC,gBAAI2a,KAAEhB,IAAG;AAAC,eAAG3Z,IAAED,IAAE,GAAE4a,EAAC;AAAA,UAAC;AAAA,QAAC,CAAC,GAAE,GAAG5a,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAC/b,OAAG,SAASA,IAAE;AAAC,QAAG,OAAKA,GAAE,KAAI;AAAC,UAAIC,KAAE,GAAGD,IAAE,SAAS;AAAE,UAAG,SAAOC,IAAE;AAAC,YAAI,IAAE2Z,IAAG;AAAC,WAAG3Z,IAAED,IAAE,WAAU,CAAC;AAAA,MAAC;AAAC,SAAGA,IAAE,SAAS;AAAA,IAAC;AAAA,EAAC;AAAE,OAAG,SAASA,IAAE;AAAC,QAAG,OAAKA,GAAE,KAAI;AAAC,UAAIC,KAAE,GAAGD,EAAC,GAAE,IAAE,GAAGA,IAAEC,EAAC;AAAE,UAAG,SAAO,GAAE;AAAC,YAAIwB,KAAEmY,IAAG;AAAC,WAAG,GAAE5Z,IAAEC,IAAEwB,EAAC;AAAA,MAAC;AAAC,SAAGzB,IAAEC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAE,OAAG,WAAU;AAAC,WAAOkZ;AAAAA,EAAC;AAAE,OAAG,SAASnZ,IAAEC,IAAE;AAAC,QAAI,IAAEkZ;AAAE,QAAG;AAAC,aAAOA,MAAEnZ,IAAEC,GAAC;AAAA,IAAE,UAAC;AAAQkZ,YAAE;AAAA,IAAC;AAAA,EAAC;AAClS,OAAG,SAASnZ,IAAEC,IAAE,GAAE;AAAC,YAAOA,IAAG;AAAA,MAAA,KAAK;AAAQ,WAAGD,IAAE,CAAC;AAAE,QAAAC,KAAE,EAAE;AAAK,YAAG,YAAU,EAAE,QAAM,QAAMA,IAAE;AAAC,eAAI,IAAED,IAAE,EAAE;AAAY,gBAAE,EAAE;AAAW,cAAE,EAAE,iBAAiB,gBAAc,KAAK,UAAU,KAAGC,EAAC,IAAE,iBAAiB;AAAE,eAAIA,KAAE,GAAEA,KAAE,EAAE,QAAOA,MAAI;AAAC,gBAAIwB,KAAE,EAAExB;AAAG,gBAAGwB,OAAIzB,MAAGyB,GAAE,SAAOzB,GAAE,MAAK;AAAC,kBAAI6D,KAAE,GAAGpC,EAAC;AAAE,kBAAG,CAACoC;AAAE,sBAAM,MAAM,EAAE,EAAE,CAAC;AAAE,iBAAGpC,EAAC;AAAE,iBAAGA,IAAEoC,EAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAC;AAAA,MAAM,KAAK;AAAW,WAAG7D,IAAE,CAAC;AAAE;AAAA,MAAM,KAAK;AAAS,QAAAC,KAAE,EAAE,OAAM,QAAMA,MAAG,GAAGD,IAAE,CAAC,CAAC,EAAE,UAASC,IAAE,KAAE;AAAA,IAAC;AAAA,EAAC;AAAE,OAAG;AAAG,OAAG;AACpa,MAAI,KAAG,EAAC,uBAAsB,OAAG,QAAO,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,EAAC,GAAE,KAAG,EAAC,yBAAwB,IAAG,YAAW,GAAE,SAAQ,UAAS,qBAAoB,YAAW;AACzJ,MAAI,KAAG,EAAC,YAAW,GAAG,YAAW,SAAQ,GAAG,SAAQ,qBAAoB,GAAG,qBAAoB,gBAAe,GAAG,gBAAe,mBAAkB,MAAK,6BAA4B,MAAK,6BAA4B,MAAK,eAAc,MAAK,yBAAwB,MAAK,yBAAwB,MAAK,iBAAgB,MAAK,oBAAmB,MAAK,gBAAe,MAAK,sBAAqB,GAAG,wBAAuB,yBAAwB,SAASD,IAAE;AAAC,IAAAA,KAAE,GAAGA,EAAC;AAAE,WAAO,SAAOA,KAAE,OAAKA,GAAE;AAAA,EAAS,GAAE,yBAAwB,GAAG,2BAC/f,IAAG,6BAA4B,MAAK,iBAAgB,MAAK,cAAa,MAAK,mBAAkB,MAAK,iBAAgB,MAAK,mBAAkB,iCAAgC;AAAE,MAAG,gBAAc,OAAO,gCAA+B;AAAC,QAAI,KAAG;AAA+B,QAAG,CAAC,GAAG,cAAY,GAAG;AAAc,UAAG;AAAC,aAAG,GAAG,OAAO,EAAE,GAAE,KAAG;AAAA,MAAE,SAAOA,IAAN;AAAA;EAAU;AAA2D,0BAAA,qDAAC;AAC1X,0BAAA,eAAC,SAASA,IAAEC,IAAE;AAAC,QAAI,IAAE,IAAE,UAAU,UAAQ,WAAS,UAAU,KAAG,UAAU,KAAG;AAAK,QAAG,CAAC,GAAGA,EAAC;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,WAAO,GAAGD,IAAEC,IAAE,MAAK,CAAC;AAAA,EAAC;AAAE,0BAAA,aAAmB,SAASD,IAAEC,IAAE;AAAC,QAAG,CAAC,GAAGD,EAAC;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAI,IAAE,OAAGyB,KAAE,IAAGoC,KAAE;AAAG,aAAO5D,MAAG,WAASA,OAAI,SAAKA,GAAE,wBAAsB,IAAE,OAAI,WAASA,GAAE,qBAAmBwB,KAAExB,GAAE,mBAAkB,WAASA,GAAE,uBAAqB4D,KAAE5D,GAAE;AAAqB,IAAAA,KAAE,GAAGD,IAAE,GAAE,OAAG,MAAK,MAAK,GAAE,OAAGyB,IAAEoC,EAAC;AAAE,IAAA7D,GAAE,MAAIC,GAAE;AAAQ,OAAG,MAAID,GAAE,WAASA,GAAE,aAAWA,EAAC;AAAE,WAAO,IAAI,GAAGC,EAAC;AAAA,EAAC;AACrf,0BAAA,cAAoB,SAASD,IAAE;AAAC,QAAG,QAAMA;AAAE,aAAO;AAAK,QAAG,MAAIA,GAAE;AAAS,aAAOA;AAAE,QAAIC,KAAED,GAAE;AAAgB,QAAG,WAASC,IAAE;AAAC,UAAG,eAAa,OAAOD,GAAE;AAAO,cAAM,MAAM,EAAE,GAAG,CAAC;AAAE,MAAAA,KAAE,OAAO,KAAKA,EAAC,EAAE,KAAK,GAAG;AAAE,YAAM,MAAM,EAAE,KAAIA,EAAC,CAAC;AAAA,IAAE;AAAC,IAAAA,KAAE,GAAGC,EAAC;AAAE,IAAAD,KAAE,SAAOA,KAAE,OAAKA,GAAE;AAAU,WAAOA;AAAA,EAAC;AAAmB,0BAAA,YAAC,SAASA,IAAE;AAAC,WAAO,GAAGA,EAAC;AAAA,EAAC;AAAiB,0BAAA,UAAC,SAASA,IAAEC,IAAE,GAAE;AAAC,QAAG,CAAC,GAAGA,EAAC;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,WAAO,GAAG,MAAKD,IAAEC,IAAE,MAAG,CAAC;AAAA,EAAC;AAC5X,0BAAA,cAAC,SAASD,IAAEC,IAAE,GAAE;AAAC,QAAG,CAAC,GAAGD,EAAC;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAIyB,KAAE,QAAM,KAAG,EAAE,mBAAiB,MAAKoC,KAAE,OAAGhE,KAAE,IAAGia,KAAE;AAAG,aAAO,KAAG,WAAS,MAAI,SAAK,EAAE,wBAAsBjW,KAAE,OAAI,WAAS,EAAE,qBAAmBhE,KAAE,EAAE,mBAAkB,WAAS,EAAE,uBAAqBia,KAAE,EAAE;AAAqB,IAAA7Z,KAAE,GAAGA,IAAE,MAAKD,IAAE,GAAE,QAAM,IAAE,IAAE,MAAK6D,IAAE,OAAGhE,IAAEia,EAAC;AAAE,IAAA9Z,GAAE,MAAIC,GAAE;AAAQ,OAAGD,EAAC;AAAE,QAAGyB;AAAE,WAAIzB,KAAE,GAAEA,KAAEyB,GAAE,QAAOzB;AAAI,YAAEyB,GAAEzB,KAAG6D,KAAE,EAAE,aAAYA,KAAEA,GAAE,EAAE,OAAO,GAAE,QAAM5D,GAAE,kCAAgCA,GAAE,kCAAgC,CAAC,GAAE4D,EAAC,IAAE5D,GAAE,gCAAgC;AAAA,UAAK;AAAA,UACvhB4D;AAAA,QAAC;AAAE,WAAO,IAAI,GAAG5D,EAAC;AAAA,EAAC;AAAE,0BAAA,SAAe,SAASD,IAAEC,IAAE,GAAE;AAAC,QAAG,CAAC,GAAGA,EAAC;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,WAAO,GAAG,MAAKD,IAAEC,IAAE,OAAG,CAAC;AAAA,EAAC;AAAE,0BAAA,yBAA+B,SAASD,IAAE;AAAC,QAAG,CAAC,GAAGA,EAAC;AAAE,YAAM,MAAM,EAAE,EAAE,CAAC;AAAE,WAAOA,GAAE,uBAAqB,GAAG,WAAU;AAAC,SAAG,MAAK,MAAKA,IAAE,OAAG,WAAU;AAAC,QAAAA,GAAE,sBAAoB;AAAK,QAAAA,GAAE,MAAI;AAAA,MAAI,CAAC;AAAA,IAAC,CAAC,GAAE,QAAI;AAAA,EAAE;AAAE,0BAAA,0BAAgC;AAC/U,0BAAA,sCAA4C,SAASA,IAAEC,IAAE,GAAEwB,IAAE;AAAC,QAAG,CAAC,GAAG,CAAC;AAAE,YAAM,MAAM,EAAE,GAAG,CAAC;AAAE,QAAG,QAAMzB,MAAG,WAASA,GAAE;AAAgB,YAAM,MAAM,EAAE,EAAE,CAAC;AAAE,WAAO,GAAGA,IAAEC,IAAE,GAAE,OAAGwB,EAAC;AAAA,EAAC;AAAE,0BAAA,UAAgB;;AChU7L,aAAS,WAAW;AAElB,UACE,OAAO,mCAAmC,eAC1C,OAAO,+BAA+B,aAAa,YACnD;AACA;AAAA,MACD;AAWD,UAAI;AAEF,uCAA+B,SAAS,QAAQ;AAAA,MACjD,SAAQ,KAAP;AAGA,gBAAQ,MAAM,GAAG;AAAA,MAClB;AAAA,IACF;AAE0C;AAGzC;AACA,MAAAyT,QAAA,UAAiB3N;AAAAA,IAGnB;AAAA;;;;AC5BA,MAAIyT,yBAAuB;AAE3B,MAAA,yBAAiBA;ACFjB,MAAI,uBAAuBzT;AAE3B,WAAS,gBAAgB;AAAA,EAAE;AAC3B,WAAS,yBAAyB;AAAA,EAAE;AACpC,yBAAuB,oBAAoB;AAE3C,MAAA,2BAAiB,WAAW;AAC1B,aAAS,KAAK,OAAO,UAAU,eAAe,UAAU,cAAc,QAAQ;AAC5E,UAAI,WAAW,sBAAsB;AAEnC;AAAA,MACD;AACD,UAAI,MAAM,IAAI;AAAA,QACZ;AAAA,MAGN;AACI,UAAI,OAAO;AACX,YAAM;AAAA,IACV;AACE,SAAK,aAAa;AAClB,aAAS,UAAU;AACjB,aAAO;AAAA,IAEX;AAEE,QAAI,iBAAiB;AAAA,MACnB,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MAER,KAAK;AAAA,MACL,SAAS;AAAA,MACT,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAO;AAAA,MAEP,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,IACvB;AAEE,mBAAe,YAAY;AAE3B,WAAO;AAAA,EACT;AClDO;AAGL0T,cAAc,UAAG1T;EACnB;;AChBA,IAAAiQ,SAAA,aAAqB;AAErB,QAAI0D,UAAS3T,MAAAA;AAEC,IAAA4T,wBAAuBD,OAAM;AAE3C,QAAIE,cAAavF,UAAAA;AAEjB,QAAIwF,eAAcF,wBAAuBC,WAAU;AAEnD,aAASD,wBAAuB,KAAK;AAAE,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAK;AAAA,IAAG;AAE/F,aAASG,iBAAgB,UAAU,aAAa;AAAE,UAAI,EAAE,oBAAoB,cAAc;AAAE,cAAM,IAAI,UAAU,mCAAmC;AAAA,MAAE;AAAA,IAAI;AAEzJ,aAASC,4BAA2B3b,OAAM,MAAM;AAAE,UAAI,CAACA,OAAM;AAAE,cAAM,IAAI,eAAe,2DAA2D;AAAA,MAAI;AAAC,aAAO,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS,cAAc,OAAOA;AAAA,IAAO;AAEhP,aAAS4b,WAAU,UAAU,YAAY;AAAE,UAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,cAAM,IAAI,UAAU,6DAA6D,OAAO,UAAU;AAAA,MAAE;AAAG,eAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,YAAY,OAAO,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,UAAI;AAAY,eAAO,iBAAiB,OAAO,eAAe,UAAU,UAAU,IAAI,SAAS,YAAY;AAAA,IAAa;AAE9e,aAAS,mBAAmB,OAAO;AACjC,UAAIrV,YAAW,CAAA;AACf,aAAO;AAAA,QACL,IAAI,SAAS,GAAG,SAAS;AACvB,UAAAA,UAAS,KAAK,OAAO;AAAA,QACtB;AAAA,QACD,KAAK,SAAS,IAAI,SAAS;AACzB,UAAAA,YAAWA,UAAS,OAAO,SAAUsB,IAAG;AACtC,mBAAOA,OAAM;AAAA,UACrB,CAAO;AAAA,QACF;AAAA,QACD,KAAK,SAASgU,OAAM;AAClB,iBAAO;AAAA,QACR;AAAA,QACD,KAAK,SAAS3a,KAAI,UAAU;AAC1B,kBAAQ;AACR,UAAAqF,UAAS,QAAQ,SAAU,SAAS;AAClC,mBAAO,QAAQ,KAAK;AAAA,UAC5B,CAAO;AAAA,QACF;AAAA,MACL;AAAA,IACC;AAED,aAAS,UAAU,UAAU;AAC3B,aAAO,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK;AAAA,IAChD;AAED,QAAI,WAAW;AAEf,aAASuV,oBAAmB,cAAc;AACxC,UAAI,uBAAuB;AAE3B,UAAI,cAAc,4BAA4B,aAAa;AAE3D,UAAIC,YAAW,SAAU,YAAY;AACnC,QAAAH,WAAUG,WAAU,UAAU;AAE9B,iBAASA,YAAW;AAClB,cAAIC,QAAO,OAAO;AAElB,UAAAN,iBAAgB,MAAMK,SAAQ;AAE9B,mBAAS,OAAO,UAAU,QAAQ,OAAO,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACnF,iBAAK,QAAQ,UAAU;AAAA,UACxB;AAED,iBAAO,QAAQC,UAAS,QAAQL,4BAA2B,MAAM,WAAW,KAAK,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,QAAQ,MAAM,UAAU,mBAAmB,MAAM,MAAM,KAAK,GAAGK,SAAQL,4BAA2B,OAAO,IAAI;AAAA,QACxO;AAED,QAAAI,UAAS,UAAU,kBAAkB,SAAS,kBAAkB;AAC9D,cAAI;AAEJ,iBAAO,OAAO,CAAA,GAAI,KAAK,eAAe,KAAK,SAAS;AAAA,QAC1D;AAEI,QAAAA,UAAS,UAAU,4BAA4B,SAAS,0BAA0B,WAAW;AAC3F,cAAI,KAAK,MAAM,UAAU,UAAU,OAAO;AACxC,iBAAK,QAAQ,IAAI,UAAU,KAAK;AAAA,UACjC;AAAA,QACP;AAEI,QAAAA,UAAS,UAAU,SAAS,SAAS,SAAS;AAC5C,iBAAO,KAAK,MAAM;AAAA,QACxB;AAEI,eAAOA;AAAA,MACX,EAAIT,QAAO,SAAS;AAElB,MAAAS,UAAS,qBAAqB,wBAAwB,CAAA,GAAI,sBAAsB,eAAeN,aAAY,QAAQ,OAAO,YAAY;AAEtI,UAAI,WAAW,SAAU,aAAa;AACpC,QAAAG,WAAUK,WAAU,WAAW;AAE/B,iBAASA,YAAW;AAClB,cAAI,QAAQ,QAAQ;AAEpB,UAAAP,iBAAgB,MAAMO,SAAQ;AAE9B,mBAAS,QAAQ,UAAU,QAAQ,OAAO,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACzF,iBAAK,SAAS,UAAU;AAAA,UACzB;AAED,iBAAO,SAAS,UAAU,SAASN,4BAA2B,MAAM,YAAY,KAAK,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,SAAS,OAAO,QAAQ;AAAA,YACrJ,OAAO,OAAO,SAAU;AAAA,UAChC,GAAS,OAAO,WAAW,WAAY;AAC/B,mBAAO,SAAS;AAAA,cACd,OAAO,OAAO,SAAU;AAAA,YAClC,CAAS;AAAA,UACF,GAAE,SAASA,4BAA2B,QAAQ,KAAK;AAAA,QACrD;AAED,QAAAM,UAAS,UAAU,oBAAoB,SAAS,oBAAoB;AAClE,cAAI,KAAK,QAAQ,cAAc;AAC7B,iBAAK,QAAQ,aAAa,GAAG,KAAK,QAAQ;AAAA,UAC3C;AAAA,QACP;AAEI,QAAAA,UAAS,UAAU,uBAAuB,SAAS,uBAAuB;AACxE,cAAI,KAAK,QAAQ,cAAc;AAC7B,iBAAK,QAAQ,aAAa,IAAI,KAAK,QAAQ;AAAA,UAC5C;AAAA,QACP;AAEI,QAAAA,UAAS,UAAU,WAAW,SAASC,YAAW;AAChD,cAAI,KAAK,QAAQ,cAAc;AAC7B,mBAAO,KAAK,QAAQ,aAAa,IAAG;AAAA,UAC5C,OAAa;AACL,mBAAO;AAAA,UACR;AAAA,QACP;AAEI,QAAAD,UAAS,UAAU,SAAS,SAAS,SAAS;AAC5C,iBAAO,UAAU,KAAK,MAAM,QAAQ,EAAE,KAAK,MAAM,KAAK;AAAA,QAC5D;AAEI,eAAOA;AAAA,MACX,EAAIX,QAAO,SAAS;AAElB,eAAS,gBAAgB,wBAAwB,CAAA,GAAI,sBAAsB,eAAeG,aAAY,QAAQ,QAAQ;AAGtH,aAAO;AAAA,QACL,UAAUM;AAAA,QACV;AAAA,MACJ;AAAA,IACC;AAED,IAAAnE,SAAA,UAAkBkE;AAClB,IAAAxG,QAAiB,UAAAsC,SAAQ;AAAA;;ACjJzB,MAAIuE,YAAU,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,WAAW,SAAU,KAAK;AAAE,WAAO,OAAO;AAAA,EAAI,IAAK,SAAU,KAAK;AAAE,WAAO,OAAO,OAAO,WAAW,cAAc,IAAI,gBAAgB,UAAU,QAAQ,OAAO,YAAY,WAAW,OAAO;AAAA,EAAI;AAE1Q,WAASR,6BAA2B3b,OAAM,MAAM;AAAE,QAAI,CAACA,OAAM;AAAE,YAAM,IAAI,eAAe,2DAA2D;AAAA,IAAI;AAAC,WAAO,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS,cAAc,OAAOA;AAAA,EAAO;AAEhP,WAAS4b,YAAU,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU,6DAA6D,OAAO,UAAU;AAAA,IAAI;AAAC,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,YAAY,OAAO,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,QAAI;AAAY,aAAO,iBAAiB,OAAO,eAAe,UAAU,UAAU,IAAI,SAAS,YAAY;AAAA,EAAa;AAE9e,WAASF,kBAAgB,UAAU,aAAa;AAAE,QAAI,EAAE,oBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU,mCAAmC;AAAA,IAAE;AAAA,EAAI;AAEzJ,MAAI,eAAe,mBAAmB,IAAI;AAE1C,MAAI,YAAY,WAAY;AAC1B,aAASU,aAAY;AACnB,UAAI,QAAQ;AAEZV,wBAAgB,MAAMU,UAAS;AAE/B,WAAK,aAAa;AAElB,gCAA0B,QAAQ,SAAUC,KAAI;AAC9C,eAAOA,IAAG,KAAK;AAAA,MACrB,CAAK;AAAA,IACF;AAED,IAAAD,WAAU,UAAU,WAAW,SAAS,SAAS,SAAS,UAAU;AAClE,UAAI,SAAS;AAEb,aAAO,QAAQ,UAAU,KAAK,WAAY;AACxC,YAAI,YAAY;AAEhB,YAAI,OAAO,YAAY,YAAY;AACjC,sBAAY,QAAQ,OAAO,KAAK;AAAA,QACxC,OAAa;AACL,sBAAY;AAAA,QACb;AAED,YAAI,aAAa,MAAM;AACrB,cAAI;AAAU;AACd;AAAA,QACD;AAED,eAAO,QAAQ,OAAO,OAAO,CAAE,GAAE,OAAO,OAAO,SAAS;AAExD,YAAI,WAAW,OAAO,WAAW,IAAI,SAAU,UAAU;AACvD,iBAAO,SAAQ;AAAA,QACvB,CAAO;AAED,eAAO,QAAQ,IAAI,QAAQ,EAAE,KAAK,WAAY;AAC5C,cAAI,UAAU;AACZ,mBAAO,SAAQ;AAAA,UAChB;AAAA,QACT,CAAO;AAAA,MACP,CAAK;AAAA,IACL;AAEE,IAAAA,WAAU,UAAU,YAAY,SAAS,UAAU,IAAI;AACrD,WAAK,WAAW,KAAK,EAAE;AAAA,IAC3B;AAEE,IAAAA,WAAU,UAAU,cAAc,SAAS,YAAY,IAAI;AACzD,WAAK,aAAa,KAAK,WAAW,OAAO,SAAUnc,IAAG;AACpD,eAAOA,OAAM;AAAA,MACnB,CAAK;AAAA,IACL;AAEE,WAAOmc;AAAA,EACT;AAEA,MAAI,cAAc,CAAA;AAElB,MAAI,YAAY,SAAU,kBAAkB;AAC1CR,gBAAUU,YAAW,gBAAgB;AAErC,aAASA,aAAY;AACnB,UAAIN,QAAO,QAAQ;AAEnBN,wBAAgB,MAAMY,UAAS;AAE/B,eAAS,OAAO,UAAU,QAAQ,OAAO,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACnF,aAAK,QAAQ,UAAU;AAAA,MACxB;AAED,aAAO,QAAQN,UAAS,SAASL,6BAA2B,MAAM,iBAAiB,KAAK,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,SAAS,OAAO,QAAQ,CAAA,GAAI,OAAO,YAAY,CAAE,GAAE,OAAO,YAAY,OAAO,OAAO,WAAW,WAAY;AAChP,eAAO,IAAI,QAAQ,SAAU,SAAS;AACpC,cAAI,CAAC,OAAO,WAAW;AACrB,mBAAO,SAAS,aAAa,OAAO;AAAA,UAC9C,OAAe;AACL;UACD;AAAA,QACT,CAAO;AAAA,MACF,GAAEK,SAAQL,6BAA2B,QAAQ,IAAI;AAAA,IACnD;AAED,IAAAW,WAAU,UAAU,uBAAuB,SAAS,uBAAuB;AACzE,WAAK,YAAY;AACjB,WAAK,aAAY;AAAA,IACrB;AAEE,IAAAA,WAAU,UAAU,eAAe,SAAS,eAAe;AACzD,UAAI,SAAS;AAEb,WAAK,UAAU,QAAQ,SAAU,WAAW;AAC1C,kBAAU,YAAY,OAAO,QAAQ;AAAA,MAC3C,CAAK;AAAA,IACL;AAEE,IAAAA,WAAU,UAAU,mBAAmB,SAAS,iBAAiBpc,MAAK,YAAY;AAChF,UAAI,SAAS;AAEb,WAAK,aAAY;AAEjB,UAAIA,SAAQ,MAAM;AAChB,cAAM,IAAI,MAAM,6DAA6D;AAAA,MAC9E;AAED,UAAI,UAAUA;AACd,UAAI,YAAY,WAAW,IAAI,SAAU,eAAe;AACtD,YAAI,WAAW;AAEf,aAAK,OAAO,kBAAkB,cAAc,cAAcic,UAAQ,aAAa,OAAO,YAAY,yBAAyB,WAAW;AACpI,qBAAW;AAAA,QACnB,OAAa;AACL,qBAAW,QAAQ,IAAI,aAAa;AAEpC,cAAI,CAAC,UAAU;AACb,uBAAW,IAAI;AACf,oBAAQ,IAAI,eAAe,QAAQ;AAAA,UACpC;AAAA,QACF;AAED,iBAAS,YAAY,OAAO,QAAQ;AACpC,iBAAS,UAAU,OAAO,QAAQ;AAElC,eAAO;AAAA,MACb,CAAK;AAED,WAAK,YAAY;AACjB,aAAO;AAAA,IACX;AAEE,IAAAG,WAAU,UAAU,SAAS,SAAS,SAAS;AAC7C,UAAI,SAAS;AAEb,aAAO,MAAM;AAAA,QACX,aAAa;AAAA,QACb;AAAA,QACA,SAAUpc,MAAK;AACb,iBAAO,OAAO,MAAM,SAAS,MAAM,MAAM,OAAO,iBAAiBA,MAAK,OAAO,MAAM,EAAE,CAAC;AAAA,QACvF;AAAA,MACP;AAAA,IACA;AAEE,WAAOoc;AAAA,EACT,EAAE,MAAM,SAAS;AAEjB,WAAS,SAAS,OAAO;AACvB,WAAO,MAAM;AAAA,MACX,aAAa;AAAA,MACb;AAAA,MACA,SAAU,WAAW;AACnB,YAAI,WAAW,IAAI,IAAI,SAAS;AAEhC,YAAI,MAAM,QAAQ;AAChB,gBAAM,OAAO,QAAQ,SAAU,UAAU;AACvC,qBAAS,IAAI,SAAS,aAAa,QAAQ;AAAA,UACrD,CAAS;AAAA,QACF;AAED,eAAO,MAAM;AAAA,UACX,aAAa;AAAA,UACb,EAAE,OAAO,SAAU;AAAA,UACnB,MAAM;AAAA,QACd;AAAA,MACK;AAAA,IACL;AAAA,EACA;AAEA,MAAI,4BAA4B,CAAE;ACnLlC,WAASH,UAAQ,KAAK;AAAE;AAA2B,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAO,OAAOA;AAAA,MAAI;AAAA,IAAK,OAAM;AAAEJ,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,MAAI;AAAA,IAAG;AAAG,WAAOJ,UAAQ,GAAG;AAAA,EAAI;AAE1X,WAAST,kBAAgB,UAAU,aAAa;AAAE,QAAI,EAAE,oBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU,mCAAmC;AAAA,IAAE;AAAA,EAAI;AAEzJ,WAASE,YAAU,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU,oDAAoD;AAAA,IAAI;AAAC,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,QAAI;AAAYY,wBAAgB,UAAU,UAAU;AAAA,EAAI;AAEjY,WAASA,kBAAgBzG,IAAGlV,IAAG;AAAE2b,wBAAkB,OAAO,kBAAkB,SAASA,iBAAgBzG,IAAGlV,IAAG;AAAE,MAAAkV,GAAE,YAAYlV;AAAG,aAAOkV;AAAA,IAAE;AAAI,WAAOyG,kBAAgBzG,IAAGlV,EAAC;AAAA,EAAI;AAE1K,WAAS4b,eAAa,SAAS;AAAE,QAAI,4BAA4BC,4BAAyB;AAAI,WAAO,WAAY;AAAE,UAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;AAAA,MAAE,OAAQ;AAAE,iBAAS,MAAM,MAAM,MAAM,SAAS;AAAA;AAAK,aAAOhB,6BAA2B,MAAM,MAAM;AAAA,IAAE;AAAA,EAAK;AAErZ,WAASA,6BAA2B3b,OAAM,MAAM;AAAE,QAAI,SAASmc,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,aAAO;AAAA,IAAO;AAAC,WAAOS,yBAAuB5c,KAAI;AAAA,EAAI;AAEjL,WAAS4c,yBAAuB5c,OAAM;AAAE,QAAIA,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe,2DAA2D;AAAA;AAAK,WAAOA;AAAA,EAAO;AAEtK,WAAS0c,8BAA4B;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,WAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,MAAM,IAAI,WAAY;AAAA,MAAE,CAAA,CAAC;AAAG,aAAO;AAAA,IAAO,SAAQzY,IAAP;AAAY,aAAO;AAAA;EAAU;AAEpU,WAAS0Y,kBAAgB5G,IAAG;AAAE4G,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,iBAAgB5G,IAAG;AAAE,aAAOA,GAAE,aAAa,OAAO,eAAeA,EAAC;AAAA,IAAI;AAAE,WAAO4G,kBAAgB5G,EAAC;AAAA,EAAI;AAE7M,WAAS8G,kBAAgB,KAAKhd,MAAK,OAAO;AAAE,QAAIA,QAAO,KAAK;AAAE,aAAO,eAAe,KAAKA,MAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAM,CAAA;AAAA,IAAE,OAAQ;AAAE,UAAIA,QAAO;AAAA,IAAM;AAAG,WAAO;AAAA,EAAM;AAIjN,MAAI,uBAAoC,yBAAU,YAAY;AAC5D+b,gBAAUkB,uBAAsB,UAAU;AAE1C,QAAI,SAASL,eAAaK,qBAAoB;AAE9C,aAASA,wBAAuB;AAC9B,UAAI;AAEJpB,wBAAgB,MAAMoB,qBAAoB;AAE1C,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA,MACxB;AAED,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDD,wBAAgBD,yBAAuB,KAAK,GAAG,SAAS;AAAA,QACtD,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,aAAa;AAAA,MACnB,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,kBAAkB,WAAY;AAC3E,YAAI,cAAc,MAAM,OACpB,SAAS,YAAY,QACrB,cAAc,YAAY;AAE9B,YAAI,QAAQ;AACV,mBAAS,cAAc,MAAM,EAAE,MAAM,eAAe;AAAA,QAC5D,OAAa;AACL,cAAIrc,QAAO,cAAc,OAAO;AAChC,mBAAS,cAAc,MAAM,EAAE,MAAM,eAAe,GAAG,OAAOA,OAAM,IAAI;AAAA,QACzE;AAED,cAAM,SAAS;AAAA,UACb,QAAQ,CAAC;AAAA,QACjB,CAAO;AAAA,MACP,CAAK;AAEDsc,wBAAgBD,yBAAuB,KAAK,GAAG,aAAa,WAAY;AACtE,YAAI,WAAW,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAEnF,cAAM,SAAS;AAAA,UACb;AAAA,QACR,CAAO;AAAA,MACP,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,oBAAoB,SAAU,cAAc;AACzF,YAAIrc,QAAO,eAAe,OAAO;AACjC,iBAAS,cAAc,MAAM,EAAE,MAAM,eAAe,GAAG,OAAOA,OAAM,IAAI;AAAA,MAC9E,CAAK;AAED,aAAO;AAAA,IACR;AAED,WAAOuc;AAAA,EACT,EAAE,SAAS;AC9EI,WAASC,aAAW;AACjCA,iBAAW,OAAO,SAAS,OAAO,OAAO,KAAI,IAAK,SAAUpb,SAAQ;AAClE,eAAS7B,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,YAAI,SAAS,UAAUA;AACvB,iBAASD,QAAO,QAAQ;AACtB,cAAI,OAAO,UAAU,eAAe,KAAK,QAAQA,IAAG,GAAG;AACrD,YAAA8B,QAAO9B,QAAO,OAAOA;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AACD,aAAO8B;AAAA,IACX;AACE,WAAOob,WAAS,MAAM,MAAM,SAAS;AAAA,EACvC;ACbA,WAAS,QAAQ,IAAI;AACnB,QAAI,QAAQ,uBAAO,OAAO,IAAI;AAC9B,WAAO,SAAU,KAAK;AACpB,UAAI,MAAM,SAAS;AAAW,cAAM,OAAO,GAAG,GAAG;AACjD,aAAO,MAAM;AAAA,IACjB;AAAA,EACA;ACJA,MAAI,kBAAkB;AAEtB,MAAI,cAA6B;AAAA,IAAQ,SAAU5c,OAAM;AACvD,aAAO,gBAAgB,KAAKA,KAAI,KAAKA,MAAK,WAAW,CAAC,MAAM,OAEzDA,MAAK,WAAW,CAAC,MAAM,OAEvBA,MAAK,WAAW,CAAC,IAAI;AAAA,IAC1B;AAAA,EAEA;ACWA,WAAS,YAAY,KAAK;AACxB,QAAI,IAAI,OAAO;AAEb,aAAO,IAAI;AAAA,IACZ;AAKD,aAASL,KAAI,GAAGA,KAAI,SAAS,YAAY,QAAQA,MAAK;AACpD,UAAI,SAAS,YAAYA,IAAG,cAAc,KAAK;AAE7C,eAAO,SAAS,YAAYA;AAAA,MAC7B;AAAA,IACF;AAAA,EACH;AAEA,WAAS,mBAAmB,SAAS;AACnC,QAAI,MAAM,SAAS,cAAc,OAAO;AACxC,QAAI,aAAa,gBAAgB,QAAQ,GAAG;AAE5C,QAAI,QAAQ,UAAU,QAAW;AAC/B,UAAI,aAAa,SAAS,QAAQ,KAAK;AAAA,IACxC;AAED,QAAI,YAAY,SAAS,eAAe,EAAE,CAAC;AAC3C,QAAI,aAAa,UAAU,EAAE;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,aAA0B,2BAAY;AAExC,aAASkd,YAAW,SAAS;AAC3B,UAAI,QAAQ;AAEZ,WAAK,aAAa,SAAU,KAAK;AAC/B,YAAI;AAEJ,YAAI,MAAM,KAAK,WAAW,GAAG;AAC3B,cAAI,MAAM,gBAAgB;AACxB,qBAAS,MAAM,eAAe;AAAA,UACxC,WAAmB,MAAM,SAAS;AACxB,qBAAS,MAAM,UAAU;AAAA,UACnC,OAAe;AACL,qBAAS,MAAM;AAAA,UAChB;AAAA,QACT,OAAa;AACL,mBAAS,MAAM,KAAK,MAAM,KAAK,SAAS,GAAG;AAAA,QAC5C;AAED,cAAM,UAAU,aAAa,KAAK,MAAM;AAExC,cAAM,KAAK,KAAK,GAAG;AAAA,MACzB;AAEI,WAAK,WAAW,QAAQ,WAAW,SAAY,OAAwC,QAAQ;AAC/F,WAAK,OAAO;AACZ,WAAK,MAAM;AACX,WAAK,QAAQ,QAAQ;AAErB,WAAK,MAAM,QAAQ;AACnB,WAAK,YAAY,QAAQ;AACzB,WAAK,UAAU,QAAQ;AACvB,WAAK,iBAAiB,QAAQ;AAC9B,WAAK,SAAS;AAAA,IACf;AAED,QAAI,SAASA,YAAW;AAExB,WAAO,UAAU,SAAS,QAAQhc,QAAO;AACvC,MAAAA,OAAM,QAAQ,KAAK,UAAU;AAAA,IACjC;AAEE,WAAO,SAAS,SAASM,QAAO,MAAM;AAIpC,UAAI,KAAK,OAAO,KAAK,WAAW,OAAQ,OAAO,GAAG;AAChD,aAAK,WAAW,mBAAmB,IAAI,CAAC;AAAA,MACzC;AAED,UAAI,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS;AAcvC,UAAI,KAAK,UAAU;AACjB,YAAI,QAAQ,YAAY,GAAG;AAE3B,YAAI;AAGF,gBAAM,WAAW,MAAM,MAAM,SAAS,MAAM;AAAA,QAC7C,SAAQ2C,IAAP;AAAA,QAID;AAAA,MACP,OAAW;AACL,YAAI,YAAY,SAAS,eAAe,IAAI,CAAC;AAAA,MAC9C;AAED,WAAK;AAAA,IACT;AAEE,WAAO,QAAQ,SAAS,QAAQ;AAE9B,WAAK,KAAK,QAAQ,SAAU,KAAK;AAC/B,eAAO,IAAI,cAAc,IAAI,WAAW,YAAY,GAAG;AAAA,MAC7D,CAAK;AACD,WAAK,OAAO;AACZ,WAAK,MAAM;AAAA,IAKf;AAEE,WAAO+Y;AAAA,EACT,EAAG;AClJH,MAAI,8BAA8B,SAASC,6BAA4B,OAAO,QAAQzd,QAAO;AAC3F,QAAIkX,YAAW;AACf,QAAI3G,aAAY;AAEhB,WAAO,MAAM;AACX,MAAA2G,YAAW3G;AACX,MAAAA,aAAY,KAAI;AAEhB,UAAI2G,cAAa,MAAM3G,eAAc,IAAI;AACvC,eAAOvQ,UAAS;AAAA,MACjB;AAED,UAAI,MAAMuQ,UAAS,GAAG;AACpB;AAAA,MACD;AAEDnO;IACD;AAED,WAAO,MAAM,OAAO,QAAQ;AAAA,EAC9B;AAEA,MAAI,UAAU,SAASsb,SAAQ,QAAQ,QAAQ;AAE7C,QAAI1d,SAAQ;AACZ,QAAIuQ,aAAY;AAEhB,OAAG;AACD,cAAQ,MAAMA,UAAS,GAAC;AAAA,QACtB,KAAK;AAEH,cAAIA,eAAc,MAAM,KAAI,MAAO,IAAI;AAKrC,mBAAOvQ,UAAS;AAAA,UACjB;AAED,iBAAOA,WAAU,4BAA4B,WAAW,GAAG,QAAQA,MAAK;AACxE;AAAA,QAEF,KAAK;AACH,iBAAOA,WAAU,QAAQuQ,UAAS;AAClC;AAAA,QAEF,KAAK;AAEH,cAAIA,eAAc,IAAI;AAEpB,mBAAO,EAAEvQ,UAAS,KAAM,MAAK,KAAK,QAAQ;AAC1C,mBAAOA,UAAS,OAAOA,QAAO;AAC9B;AAAA,UACD;AAAA,QAIH;AACE,iBAAOA,WAAU,KAAKuQ,UAAS;AAAA,MAClC;AAAA,IACL,SAAWA,aAAYnO;AAErB,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,SAASub,UAAS,OAAO,QAAQ;AAC9C,WAAO,QAAQ,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC;AAAA,EAC9C;AAGA,MAAI,gBAA+B,oBAAI;AACvC,MAAI,SAAS,SAASC,QAAO,SAAS;AACpC,QAAI,QAAQ,SAAS,UAAU,CAAC,QAAQ,UAExC,QAAQ,SAAS,GAAG;AAClB;AAAA,IACD;AAED,QAAI,QAAQ,QAAQ,OAChB,SAAS,QAAQ;AACrB,QAAI,iBAAiB,QAAQ,WAAW,OAAO,UAAU,QAAQ,SAAS,OAAO;AAEjF,WAAO,OAAO,SAAS,QAAQ;AAC7B,eAAS,OAAO;AAChB,UAAI,CAAC;AAAQ;AAAA,IACd;AAGD,QAAI,QAAQ,MAAM,WAAW,KAAK,MAAM,WAAW,CAAC,MAAM,MAEvD,CAAC,cAAc,IAAI,MAAM,GAAG;AAC7B;AAAA,IACD;AAID,QAAI,gBAAgB;AAClB;AAAA,IACD;AAED,kBAAc,IAAI,SAAS,IAAI;AAC/B,QAAI,SAAS,CAAA;AACb,QAAI,QAAQ,SAAS,OAAO,MAAM;AAClC,QAAI,cAAc,OAAO;AAEzB,aAAStd,KAAI,GAAG6W,KAAI,GAAG7W,KAAI,MAAM,QAAQA,MAAK;AAC5C,eAASQ,KAAI,GAAGA,KAAI,YAAY,QAAQA,MAAKqW,MAAK;AAChD,gBAAQ,MAAMA,MAAK,OAAO7W,MAAK,MAAMA,IAAG,QAAQ,QAAQ,YAAYQ,GAAE,IAAI,YAAYA,MAAK,MAAM,MAAMR;AAAA,MACxG;AAAA,IACF;AAAA,EACH;AACA,MAAI,cAAc,SAASud,aAAY,SAAS;AAC9C,QAAI,QAAQ,SAAS,QAAQ;AAC3B,UAAI,QAAQ,QAAQ;AAEpB,UACA,MAAM,WAAW,CAAC,MAAM,OACxB,MAAM,WAAW,CAAC,MAAM,IAAI;AAE1B,gBAAQ,YAAY;AACpB,gBAAQ,QAAQ;AAAA,MACjB;AAAA,IACF;AAAA,EACH;AAgHA,WAAS,OAAO,OAAO1O,SAAQ;AAC7B,YAAQ,KAAK,OAAOA,OAAM,GAAC;AAAA,MAEzB,KAAK;AACH,eAAO,SAAS,WAAW,QAAQ;AAAA,MAGrC,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MAEL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MAEL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MAEL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,SAAS,QAAQ;AAAA,MAG1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,SAAS,QAAQ,MAAM,QAAQ,KAAK,QAAQ;AAAA,MAGrD,KAAK;AAAA,MACL,KAAK;AACH,eAAO,SAAS,QAAQ,KAAK,QAAQ;AAAA,MAGvC,KAAK;AACH,eAAO,SAAS,QAAQ,KAAK,UAAU,QAAQ;AAAA,MAGjD,KAAK;AACH,eAAO,SAAS,QAAQpN,UAAQ,OAAO,kBAAkB,SAAS,aAAa,KAAK,WAAW,IAAI;AAAA,MAGrG,KAAK;AACH,eAAO,SAAS,QAAQ,KAAK,eAAeA,UAAQ,OAAO,eAAe,EAAE,IAAI;AAAA,MAGlF,KAAK;AACH,eAAO,SAAS,QAAQ,KAAK,mBAAmBA,UAAQ,OAAO,6BAA6B,EAAE,IAAI;AAAA,MAGpG,KAAK;AACH,eAAO,SAAS,QAAQ,KAAKA,UAAQ,OAAO,UAAU,UAAU,IAAI;AAAA,MAGtE,KAAK;AACH,eAAO,SAAS,QAAQ,KAAKA,UAAQ,OAAO,SAAS,gBAAgB,IAAI;AAAA,MAG3E,KAAK;AACH,eAAO,SAAS,SAASA,UAAQ,OAAO,SAAS,EAAE,IAAI,SAAS,QAAQ,KAAKA,UAAQ,OAAO,QAAQ,UAAU,IAAI;AAAA,MAGpH,KAAK;AACH,eAAO,SAASA,UAAQ,OAAO,sBAAsB,OAAO,SAAS,IAAI,IAAI;AAAA,MAG/E,KAAK;AACH,eAAOA,UAAQA,UAAQA,UAAQ,OAAO,gBAAgB,SAAS,IAAI,GAAG,eAAe,SAAS,IAAI,GAAG,OAAO,EAAE,IAAI;AAAA,MAGpH,KAAK;AAAA,MACL,KAAK;AACH,eAAOA,UAAQ,OAAO,qBAAqB,SAAS,QAAa;AAAA,MAGnE,KAAK;AACH,eAAOA,UAAQA,UAAQ,OAAO,qBAAqB,SAAS,gBAAgB,KAAK,cAAc,GAAG,cAAc,SAAS,IAAI,SAAS,QAAQ;AAAA,MAGhJ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAOA,UAAQ,OAAO,mBAAmB,SAAS,MAAM,IAAI;AAAA,MAG9D,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAEH,YAAI,OAAO,KAAK,IAAI,IAAIoN,UAAS;AAAG,kBAAQ,OAAO,OAAOA,UAAS,CAAC,GAAC;AAAA,YAEnE,KAAK;AAEH,kBAAI,OAAO,OAAOA,UAAS,CAAC,MAAM;AAAI;AAAA,YAGxC,KAAK;AACH,qBAAOpN,UAAQ,OAAO,oBAAoB,OAAO,SAAS,YAAiB,OAAO,OAAO,OAAOoN,UAAS,CAAC,KAAK,MAAM,OAAO,QAAQ,IAAI;AAAA,YAG1I,KAAK;AACH,qBAAO,CAAC,QAAQ,OAAO,SAAS,IAAI,OAAOpN,UAAQ,OAAO,WAAW,gBAAgB,GAAGoN,OAAM,IAAI,QAAQ;AAAA,UAC7G;AACD;AAAA,MAGF,KAAK;AAEH,YAAI,OAAO,OAAOA,UAAS,CAAC,MAAM;AAAK;AAAA,MAGzC,KAAK;AACH,gBAAQ,OAAO,OAAO,OAAO,KAAK,IAAI,KAAK,CAAC,QAAQ,OAAO,YAAY,KAAK,GAAG,GAAC;AAAA,UAE9E,KAAK;AACH,mBAAOpN,UAAQ,OAAO,KAAK,MAAM,MAAM,IAAI;AAAA,UAG7C,KAAK;AACH,mBAAOA,UAAQ,OAAO,yBAAyB,OAAO,UAAU,OAAO,OAAO,EAAE,MAAM,KAAK,YAAY,MAAM,YAAiB,SAAS,WAAgB,KAAK,SAAS,IAAI;AAAA,QAC5K;AAED;AAAA,MAGF,KAAK;AACH,gBAAQ,OAAO,OAAOoN,UAAS,EAAE,GAAC;AAAA,UAEhC,KAAK;AACH,mBAAO,SAAS,QAAQ,KAAKpN,UAAQ,OAAO,sBAAsB,IAAI,IAAI;AAAA,UAG5E,KAAK;AACH,mBAAO,SAAS,QAAQ,KAAKA,UAAQ,OAAO,sBAAsB,OAAO,IAAI;AAAA,UAG/E,KAAK;AACH,mBAAO,SAAS,QAAQ,KAAKA,UAAQ,OAAO,sBAAsB,IAAI,IAAI;AAAA,QAC7E;AAED,eAAO,SAAS,QAAQ,KAAK,QAAQ;AAAA,IACxC;AAED,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,SAAS+b,UAAS,SAAS9d,QAAO,UAAU,UAAU;AACnE,QAAI,QAAQ,SAAS;AAAI,UAAI,CAAC,QAAQ;AAAW,gBAAQ,QAAQ,MAAI;AAAA,UACnE,KAAK;AACH,oBAAQ,YAAY,OAAO,QAAQ,OAAO,QAAQ,MAAM;AACxD;AAAA,UAEF,KAAK;AACH,mBAAO,UAAU,CAACoB,OAAK,SAAS;AAAA,cAC9B,OAAOW,UAAQ,QAAQ,OAAO,KAAK,MAAM,MAAM;AAAA,YACvD,CAAO,CAAC,GAAG,QAAQ;AAAA,UAEf,KAAK;AACH,gBAAI,QAAQ;AAAQ,qBAAO,QAAQ,QAAQ,OAAO,SAAU,OAAO;AACjE,wBAAQ,MAAM,OAAO,uBAAuB,GAAC;AAAA,kBAE3C,KAAK;AAAA,kBACL,KAAK;AACH,2BAAO,UAAU,CAACX,OAAK,SAAS;AAAA,sBAC9B,OAAO,CAACW,UAAQ,OAAO,eAAe,MAAM,MAAM,IAAI,CAAC;AAAA,oBACrE,CAAa,CAAC,GAAG,QAAQ;AAAA,kBAGf,KAAK;AACH,2BAAO,UAAU,CAACX,OAAK,SAAS;AAAA,sBAC9B,OAAO,CAACW,UAAQ,OAAO,cAAc,MAAM,SAAS,UAAU,CAAC;AAAA,oBAC7E,CAAa,GAAGX,OAAK,SAAS;AAAA,sBAChB,OAAO,CAACW,UAAQ,OAAO,cAAc,MAAM,MAAM,IAAI,CAAC;AAAA,oBACpE,CAAa,GAAGX,OAAK,SAAS;AAAA,sBAChB,OAAO,CAACW,UAAQ,OAAO,cAAc,KAAK,UAAU,CAAC;AAAA,oBACnE,CAAa,CAAC,GAAG,QAAQ;AAAA,gBAChB;AAED,uBAAO;AAAA,cACf,CAAO;AAAA,QACJ;AAAA;AAAA,EACH;AAEA,MAAI,uBAAuB,CAAC,QAAQ;AAEpC,MAAI,cAAc,SAASgc,aAAY,SAAS;AAC9C,QAAI1d,OAAM,QAAQ;AAMlB,QAAKA,SAAQ,OAAO;AAClB,UAAI,YAAY,SAAS,iBAAiB,mCAAmC;AAK7E,YAAM,UAAU,QAAQ,KAAK,WAAW,SAAUa,OAAM;AAOtD,YAAI,uBAAuBA,MAAK,aAAa,cAAc;AAE3D,YAAI,qBAAqB,QAAQ,GAAG,MAAM,IAAI;AAC5C;AAAA,QACD;AACD,iBAAS,KAAK,YAAYA,KAAI;AAC9B,QAAAA,MAAK,aAAa,UAAU,EAAE;AAAA,MACpC,CAAK;AAAA,IACF;AAED,QAAI,gBAAgB,QAAQ,iBAAiB;AAS7C,QAAI,WAAW,CAAA;AACf,QAAI;AACJ,QAAI,iBAAiB,CAAA;AAErB;AACE,kBAAY,QAAQ,aAAa,SAAS;AAC1C,YAAM,UAAU,QAAQ;AAAA,QAExB,SAAS,iBAAiB,0BAA2Bb,OAAM,KAAM;AAAA,QAAG,SAAUa,OAAM;AAClF,cAAI,SAASA,MAAK,aAAa,cAAc,EAAE,MAAM,GAAG;AAExD,mBAASZ,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK;AACtC,qBAAS,OAAOA,OAAM;AAAA,UACvB;AAED,yBAAe,KAAKY,KAAI;AAAA,QAC9B;AAAA,MAAK;AAAA,IACF;AAED,QAAI;AAEJ,QAAI,qBAAqB,CAAC,QAAQ,WAAW;AAW7C;AACE,UAAI;AACJ,UAAI,oBAAoB,CAACmW,aAUrB,UAAU,SAAU,MAAM;AAC5B,qBAAa,OAAO,IAAI;AAAA,MACzB,CAAA,CAAC;AACF,UAAI,aAAa,WAAW,mBAAmB,OAAO,eAAe,iBAAiB,CAAC;AAEvF,UAAI,SAAS,SAAS2G,QAAOha,SAAQ;AACnC,eAAO,UAAU,QAAQA,OAAM,GAAG,UAAU;AAAA,MAClD;AAEI,gBAAU,SAASlC,QAAO,UAAU,YAAY,OAAO,aAAa;AAClE,uBAAe;AAUf,eAAO,WAAW,WAAW,MAAM,WAAW,SAAS,MAAM,WAAW,MAAM;AAE9E,YAAI,aAAa;AACf,gBAAM,SAAS,WAAW,QAAQ;AAAA,QACnC;AAAA,MACP;AAAA,IACG;AAED,QAAI,QAAQ;AAAA,MACV,KAAKzB;AAAA,MACL,OAAO,IAAI,WAAW;AAAA,QACpB,KAAKA;AAAA,QACL;AAAA,QACA,OAAO,QAAQ;AAAA,QACf,QAAQ,QAAQ;AAAA,QAChB,SAAS,QAAQ;AAAA,QACjB,gBAAgB,QAAQ;AAAA,MAC9B,CAAK;AAAA,MACD,OAAO,QAAQ;AAAA,MACf;AAAA,MACA,YAAY,CAAE;AAAA,MACd,QAAQ;AAAA,IACZ;AACE,UAAM,MAAM,QAAQ,cAAc;AAClC,WAAO;AAAA,EACT;ACpkBA,MAAI,YAAY;AAChB,WAAS,oBAAoB,YAAY,kBAAkB,YAAY;AACrE,QAAI,eAAe;AACnB,eAAW,MAAM,GAAG,EAAE,QAAQ,SAAU,WAAW;AACjD,UAAI,WAAW,eAAe,QAAW;AACvC,yBAAiB,KAAK,WAAW,aAAa,GAAG;AAAA,MACvD,OAAW;AACL,wBAAgB,YAAY;AAAA,MAC7B;AAAA,IACL,CAAG;AACD,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB,SAAS4d,gBAAe,OAAO,YAAY,aAAa;AAC3E,QAAI,YAAY,MAAM,MAAM,MAAM,WAAW;AAE7C,SAKC,gBAAgB,SAIjB,cAAc,UAAW,MAAM,WAAW,eAAe,QAAW;AAClE,YAAM,WAAW,aAAa,WAAW;AAAA,IAC1C;AAAA,EACH;AACA,MAAI,eAAe,SAASC,cAAa,OAAO,YAAY,aAAa;AACvE,mBAAe,OAAO,YAAY,WAAW;AAC7C,QAAI,YAAY,MAAM,MAAM,MAAM,WAAW;AAE7C,QAAI,MAAM,SAAS,WAAW,UAAU,QAAW;AACjD,UAAI,UAAU;AAEd,SAAG;AACiB,cAAM,OAAO,eAAe,UAAU,MAAM,YAAY,IAAI,SAAS,MAAM,OAAO,IAAI;AAExG,kBAAU,QAAQ;AAAA,MACxB,SAAa,YAAY;AAAA,IACtB;AAAA,EACH;ACtCA,WAAS,QAAQ5b,MAAK;AAMpB,QAAI+F,KAAI;AAER,QAAI8O,IACA7W,KAAI,GACJ,MAAMgC,KAAI;AAEd,WAAO,OAAO,GAAG,EAAEhC,IAAG,OAAO,GAAG;AAC9B,MAAA6W,KAAI7U,KAAI,WAAWhC,EAAC,IAAI,OAAQgC,KAAI,WAAW,EAAEhC,EAAC,IAAI,QAAS,KAAKgC,KAAI,WAAW,EAAEhC,EAAC,IAAI,QAAS,MAAMgC,KAAI,WAAW,EAAEhC,EAAC,IAAI,QAAS;AACxI,MAAA6W,MAECA,KAAI,SAAU,eAAeA,OAAM,MAAM,SAAU;AACpD,MAAAA,MAEAA,OAAM;AACN,MAAA9O,MAEC8O,KAAI,SAAU,eAAeA,OAAM,MAAM,SAAU,OAEnD9O,KAAI,SAAU,eAAeA,OAAM,MAAM,SAAU;AAAA,IACrD;AAGD,YAAQ,KAAG;AAAA,MACT,KAAK;AACH,QAAAA,OAAM/F,KAAI,WAAWhC,KAAI,CAAC,IAAI,QAAS;AAAA,MAEzC,KAAK;AACH,QAAA+H,OAAM/F,KAAI,WAAWhC,KAAI,CAAC,IAAI,QAAS;AAAA,MAEzC,KAAK;AACH,QAAA+H,MAAK/F,KAAI,WAAWhC,EAAC,IAAI;AACzB,QAAA+H,MAECA,KAAI,SAAU,eAAeA,OAAM,MAAM,SAAU;AAAA,IACvD;AAID,IAAAA,MAAKA,OAAM;AACX,IAAAA,MAECA,KAAI,SAAU,eAAeA,OAAM,MAAM,SAAU;AACpD,aAASA,KAAIA,OAAM,QAAQ,GAAG,SAAS,EAAE;AAAA,EAC3C;ACpDA,MAAI,eAAe;AAAA,IACjB,yBAAyB;AAAA,IACzB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,iBAAiB;AAAA,IAEjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,aAAa;AAAA,EACf;ACzCA,MAAI,iBAAiB;AACrB,MAAI,iBAAiB;AAErB,MAAI,mBAAmB,SAAS8V,kBAAiB,UAAU;AACzD,WAAO,SAAS,WAAW,CAAC,MAAM;AAAA,EACpC;AAEA,MAAI,qBAAqB,SAASC,oBAAmB,OAAO;AAC1D,WAAO,SAAS,QAAQ,OAAO,UAAU;AAAA,EAC3C;AAEA,MAAI,mBAAkC,wBAAQ,SAAU,WAAW;AACjE,WAAO,iBAAiB,SAAS,IAAI,YAAY,UAAU,QAAQ,gBAAgB,KAAK,EAAE;EAC5F,CAAC;AAED,MAAI,oBAAoB,SAASC,mBAAkBhe,MAAK,OAAO;AAC7D,YAAQA,MAAG;AAAA,MACT,KAAK;AAAA,MACL,KAAK,iBACH;AACE,YAAI,OAAO,UAAU,UAAU;AAC7B,iBAAO,MAAM,QAAQ,gBAAgB,SAAUoC,QAAO,IAAI,IAAI;AAC5D6b,uBAAS;AAAA,cACP,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,MAAMA;AAAAA,YACpB;AACY,mBAAO;AAAA,UACnB,CAAW;AAAA,QACF;AAAA,MACF;AAAA,IACJ;AAED,QAAIC,aAASle,UAAS,KAAK,CAAC,iBAAiBA,IAAG,KAAK,OAAO,UAAU,YAAY,UAAU,GAAG;AAC7F,aAAO,QAAQ;AAAA,IAChB;AAED,WAAO;AAAA,EACT;AA8BA,MAAI,6BAA6B;AAEjC,WAAS,oBAAoB,aAAa,YAAY,eAAe;AACnE,QAAI,iBAAiB,MAAM;AACzB,aAAO;AAAA,IACR;AAED,QAAI,cAAc,qBAAqB,QAAW;AAKhD,aAAO;AAAA,IACR;AAED,YAAQ,OAAO,eAAa;AAAA,MAC1B,KAAK,WACH;AACE,eAAO;AAAA,MACR;AAAA,MAEH,KAAK,UACH;AACE,YAAI,cAAc,SAAS,GAAG;AAC5Bie,qBAAS;AAAA,YACP,MAAM,cAAc;AAAA,YACpB,QAAQ,cAAc;AAAA,YACtB,MAAMA;AAAAA,UAClB;AACU,iBAAO,cAAc;AAAA,QACtB;AAED,YAAI,cAAc,WAAW,QAAW;AACtC,cAAIlc,QAAO,cAAc;AAEzB,cAAIA,UAAS,QAAW;AAGtB,mBAAOA,UAAS,QAAW;AACzBkc,yBAAS;AAAA,gBACP,MAAMlc,MAAK;AAAA,gBACX,QAAQA,MAAK;AAAA,gBACb,MAAMkc;AAAAA,cACtB;AACc,cAAAlc,QAAOA,MAAK;AAAA,YACb;AAAA,UACF;AAED,cAAI4B,UAAS,cAAc,SAAS;AAMpC,iBAAOA;AAAA,QACR;AAED,eAAO,uBAAuB,aAAa,YAAY,aAAa;AAAA,MACrE;AAAA,MAEH,KAAK,YACH;AACE,YAAI,gBAAgB,QAAW;AAC7B,cAAI,iBAAiBsa;AACrB,cAAI,SAAS,cAAc,WAAW;AACtCA,qBAAS;AACT,iBAAO,oBAAoB,aAAa,YAAY,MAAM;AAAA,QAG3D;AAED;AAAA,MACD;AAAA,IAiBJ;AAGD,QAAI,cAAc,MAAM;AACtB,aAAO;AAAA,IACR;AAED,QAAI,SAAS,WAAW;AACxB,WAAO,WAAW,SAAY,SAAS;AAAA,EACzC;AAEA,WAAS,uBAAuB,aAAa,YAAY,KAAK;AAC5D,QAAI,SAAS;AAEb,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,eAAShe,KAAI,GAAGA,KAAI,IAAI,QAAQA,MAAK;AACnC,kBAAU,oBAAoB,aAAa,YAAY,IAAIA,GAAE,IAAI;AAAA,MAClE;AAAA,IACL,OAAS;AACL,eAAS,QAAQ,KAAK;AACpB,YAAI,QAAQ,IAAI;AAEhB,YAAI,OAAO,UAAU,UAAU;AAC7B,cAAI,cAAc,QAAQ,WAAW,WAAW,QAAW;AACzD,sBAAU,OAAO,MAAM,WAAW,SAAS;AAAA,UACrD,WAAmB,mBAAmB,KAAK,GAAG;AACpC,sBAAU,iBAAiB,IAAI,IAAI,MAAM,kBAAkB,MAAM,KAAK,IAAI;AAAA,UAC3E;AAAA,QACT,OAAa;AACL,cAAI,SAAS,2BAA2B,OAAuC;AAC7E,kBAAM,IAAI,MAAM,0BAA0B;AAAA,UAC3C;AAED,cAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,MAAM,OAAO,aAAa,cAAc,QAAQ,WAAW,MAAM,QAAQ,SAAY;AACtH,qBAAS,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;AACxC,kBAAI,mBAAmB,MAAM,GAAG,GAAG;AACjC,0BAAU,iBAAiB,IAAI,IAAI,MAAM,kBAAkB,MAAM,MAAM,GAAG,IAAI;AAAA,cAC/E;AAAA,YACF;AAAA,UACX,OAAe;AACL,gBAAI,eAAe,oBAAoB,aAAa,YAAY,KAAK;AAErE,oBAAQ,MAAI;AAAA,cACV,KAAK;AAAA,cACL,KAAK,iBACH;AACE,0BAAU,iBAAiB,IAAI,IAAI,MAAM,eAAe;AACxD;AAAA,cACD;AAAA,cAEH,SACE;AAKE,0BAAU,OAAO,MAAM,eAAe;AAAA,cACvC;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAED,WAAO;AAAA,EACT;AAEA,MAAI,eAAe;AASnB,MAAIge;AACJ,MAAI,kBAAkB,SAASE,iBAAgB,MAAM,YAAY,aAAa;AAC5E,QAAI,KAAK,WAAW,KAAK,OAAO,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,GAAG,WAAW,QAAW;AACxG,aAAO,KAAK;AAAA,IACb;AAED,QAAI,aAAa;AACjB,QAAIxa,UAAS;AACbsa,eAAS;AACT,QAAI,UAAU,KAAK;AAEnB,QAAI,WAAW,QAAQ,QAAQ,QAAQ,QAAW;AAChD,mBAAa;AACb,MAAAta,WAAU,oBAAoB,aAAa,YAAY,OAAO;AAAA,IAClE,OAAS;AAKL,MAAAA,WAAU,QAAQ;AAAA,IACnB;AAGD,aAAS1D,KAAI,GAAGA,KAAI,KAAK,QAAQA,MAAK;AACpC,MAAA0D,WAAU,oBAAoB,aAAa,YAAY,KAAK1D,GAAE;AAE9D,UAAI,YAAY;AAKd,QAAA0D,WAAU,QAAQ1D;AAAA,MACnB;AAAA,IACF;AAYD,iBAAa,YAAY;AACzB,QAAI,iBAAiB;AACrB,QAAImC;AAEJ,YAAQA,SAAQ,aAAa,KAAKuB,OAAM,OAAO,MAAM;AACnD,wBAAkB,MAClBvB,OAAM;AAAA,IACP;AAED,QAAI,OAAOgc,QAAWza,OAAM,IAAI;AAehC,WAAO;AAAA,MACL;AAAA,MACA,QAAQA;AAAA,MACR,MAAMsa;AAAAA,IACV;AAAA,EACA;ACtTA,MAAI,eAAe,SAASI,cAAa1N,SAAQ;AAC/C,WAAOA,QAAM;AAAA,EACf;AAEA,MAAI,qBAAqB2N,QAAM,wBAA6BA,QAAM,wBAA6B;AAC/F,MAAI,2CAA4C,sBAAsB;ACGtE,MAAI,sBAAqCC,sBAAa,QAAA;AAAA,IAMtD,OAAO,gBAAgB,cAA6B,4BAAY;AAAA,MAC9D,KAAK;AAAA,IACP,CAAC,IAAI;AAAA,EAAI;AAMW,sBAAoB;AAKxC,MAAI,mBAAmB,SAASC,kBAAiB,MAAM;AAErD,WAAoBC,sBAAU,QAAA,WAAC,SAAU,OAAO,KAAK;AAEnD,UAAI,QAAQC,yBAAW,mBAAmB;AAC1C,aAAO,KAAK,OAAO,OAAO,GAAG;AAAA,IACjC,CAAG;AAAA,EACH;AAEA,MAAI,eAA8BH,sBAAa,QAAA,cAAC,EAAE;AC/BlD,MAAI,2BAA2B;AAE/B,MAAI,2BAA2B,SAASI,0BAAyB3e,MAAK;AACpE,WAAOA,SAAQ;AAAA,EACjB;AAEA,MAAI,8BAA8B,SAAS4e,6BAA4B,KAAK;AAC1E,WAAO,OAAO,QAAQ,YAGtB,IAAI,WAAW,CAAC,IAAI,KAAK,2BAA2B;AAAA,EACtD;AACA,MAAI,4BAA4B,SAASC,2BAA0B,KAAK,SAAS,QAAQ;AACvF,QAAI;AAEJ,QAAI,SAAS;AACX,UAAI,2BAA2B,QAAQ;AACvC,0BAAoB,IAAI,yBAAyB,2BAA2B,SAAU,UAAU;AAC9F,eAAO,IAAI,sBAAsB,QAAQ,KAAK,yBAAyB,QAAQ;AAAA,MAChF,IAAG;AAAA,IACL;AAED,QAAI,OAAO,sBAAsB,cAAc,QAAQ;AACrD,0BAAoB,IAAI;AAAA,IACzB;AAED,WAAO;AAAA,EACT;AAIA,MAAI,YAAY,SAASC,WAAU,MAAM;AACvC,QAAI,QAAQ,KAAK,OACb,aAAa,KAAK,YAClB,cAAc,KAAK;AACvB,mBAAe,OAAO,YAAY,WAAW;AACjC,6CAAyC,WAAY;AAC/D,aAAO,aAAa,OAAO,YAAY,WAAW;AAAA,IACtD,CAAG;AAED,WAAO;AAAA,EACT;AAEA,MAAI,eAAe,SAASC,cAAa,KAAK,SAAS;AAOrD,QAAI,SAAS,IAAI,mBAAmB;AACpC,QAAI,UAAU,UAAU,IAAI,kBAAkB;AAC9C,QAAI;AACJ,QAAI;AAEJ,QAAI,YAAY,QAAW;AACzB,uBAAiB,QAAQ;AACzB,wBAAkB,QAAQ;AAAA,IAC3B;AAED,QAAI,oBAAoB,0BAA0B,KAAK,SAAS,MAAM;AACtE,QAAI,2BAA2B,qBAAqB,4BAA4B,OAAO;AACvF,QAAI,cAAc,CAAC,yBAAyB,IAAI;AAChD,WAAO,WAAY;AACjB,UAAI,OAAO;AACX,UAAIpb,UAAS,UAAU,IAAI,qBAAqB,SAAY,IAAI,iBAAiB,MAAM,CAAC,IAAI,CAAA;AAE5F,UAAI,mBAAmB,QAAW;AAChC,QAAAA,QAAO,KAAK,WAAW,iBAAiB,GAAG;AAAA,MAC5C;AAED,UAAI,KAAK,MAAM,QAAQ,KAAK,GAAG,QAAQ,QAAW;AAChD,QAAAA,QAAO,KAAK,MAAMA,SAAQ,IAAI;AAAA,MACpC,OAAW;AAKL,QAAAA,QAAO,KAAK,KAAK,GAAG,EAAE;AACtB,YAAI,MAAM,KAAK;AACf,YAAI1D,KAAI;AAER,eAAOA,KAAI,KAAKA,MAAK;AAKnB,UAAA0D,QAAO,KAAK,KAAK1D,KAAI,KAAK,GAAGA,GAAE;AAAA,QAChC;AAAA,MACF;AAGD,UAAI,SAAS,iBAAiB,SAAU,OAAO,OAAO,KAAK;AACzD,YAAI,WAAW,eAAe,MAAM,MAAM;AAC1C,YAAI,YAAY;AAChB,YAAI,sBAAsB,CAAA;AAC1B,YAAI,cAAc;AAElB,YAAI,MAAM,SAAS,MAAM;AACvB,wBAAc,CAAA;AAEd,mBAASD,QAAO,OAAO;AACrB,wBAAYA,QAAO,MAAMA;AAAA,UAC1B;AAED,sBAAY,QAAQ0e,yBAAW,YAAY;AAAA,QAC5C;AAED,YAAI,OAAO,MAAM,cAAc,UAAU;AACvC,sBAAY,oBAAoB,MAAM,YAAY,qBAAqB,MAAM,SAAS;AAAA,QAC9F,WAAiB,MAAM,aAAa,MAAM;AAClC,sBAAY,MAAM,YAAY;AAAA,QAC/B;AAED,YAAI,aAAa,gBAAgB/a,QAAO,OAAO,mBAAmB,GAAG,MAAM,YAAY,WAAW;AAClG,qBAAa,MAAM,MAAM,MAAM,WAAW;AAE1C,YAAI,oBAAoB,QAAW;AACjC,uBAAa,MAAM;AAAA,QACpB;AAED,YAAI,yBAAyB,eAAe,sBAAsB,SAAY,4BAA4B,QAAQ,IAAI;AACtH,YAAI,WAAW,CAAA;AAEf,iBAAS,QAAQ,OAAO;AACtB,cAAI,eAAe,SAAS;AAAM;AAElC,cACA,uBAAuB,IAAI,GAAG;AAC5B,qBAAS,QAAQ,MAAM;AAAA,UACxB;AAAA,QACF;AAED,iBAAS,YAAY;AACrB,iBAAS,MAAM;AACf,eAAoBqb,sBAAa,QAAA,cAACC,MAAQ,QAAA,UAAE,MAAmBD,sBAAAA,QAAAA,cAAc,WAAW;AAAA,UACtF;AAAA,UACA;AAAA,UACA,aAAa,OAAO,aAAa;AAAA,QAClC,CAAA,GAAgBA,sBAAa,QAAA,cAAC,UAAU,QAAQ,CAAC;AAAA,MACxD,CAAK;AACD,aAAO,cAAc,mBAAmB,SAAY,iBAAiB,aAAa,OAAO,YAAY,WAAW,UAAU,QAAQ,eAAe,QAAQ,QAAQ,eAAe;AAChL,aAAO,eAAe,IAAI;AAC1B,aAAO,iBAAiB;AACxB,aAAO,iBAAiB;AACxB,aAAO,mBAAmBrb;AAC1B,aAAO,wBAAwB;AAC/B,aAAO,eAAe,QAAQ,YAAY;AAAA,QACxC,OAAO,SAAS,QAAQ;AACtB,cAAI,oBAAoB,UAAa,OAAuC;AAC1E,mBAAO;AAAA,UACR;AAGD,iBAAO,MAAM;AAAA,QACd;AAAA,MACP,CAAK;AAED,aAAO,gBAAgB,SAAU,SAAS,aAAa;AACrD,eAAOob,cAAa,SAAS7B,WAAS,CAAA,GAAI,SAAS,aAAa;AAAA,UAC9D,mBAAmB,0BAA0B,QAAQ,aAAa,IAAI;AAAA,QACvE,CAAA,CAAC,EAAE,MAAM,QAAQvZ,OAAM;AAAA,MAC9B;AAEI,aAAO;AAAA,IACX;AAAA,EACA;ACrKA,MAAI,OAAO;AAAA,IAAC;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAW;AAAA,IAAS;AAAA,IAAS;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAO;AAAA,IAAO;AAAA,IAAO;AAAA,IAAc;AAAA,IAAQ;AAAA,IAAM;AAAA,IAAU;AAAA,IAAU;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAAO;AAAA,IAAY;AAAA,IAAQ;AAAA,IAAY;AAAA,IAAM;AAAA,IAAO;AAAA,IAAW;AAAA,IAAO;AAAA,IAAU;AAAA,IAAO;AAAA,IAAM;AAAA,IAAM;AAAA,IAAM;AAAA,IAAS;AAAA,IAAY;AAAA,IAAc;AAAA,IAAU;AAAA,IAAU;AAAA,IAAQ;AAAA,IAAM;AAAA,IAAM;AAAA,IAAM;AAAA,IAAM;AAAA,IAAM;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAU;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAK;AAAA,IAAU;AAAA,IAAO;AAAA,IAAS;AAAA,IAAO;AAAA,IAAO;AAAA,IAAU;AAAA,IAAS;AAAA,IAAU;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAAO;AAAA,IAAQ;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAY;AAAA,IAAQ;AAAA,IAAS;AAAA,IAAO;AAAA,IAAY;AAAA,IAAU;AAAA,IAAM;AAAA,IAAY;AAAA,IAAU;AAAA,IAAU;AAAA,IAAK;AAAA,IAAS;AAAA,IAAW;AAAA,IAAO;AAAA,IAAY;AAAA,IAAK;AAAA,IAAM;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAW;AAAA,IAAU;AAAA,IAAS;AAAA,IAAU;AAAA,IAAQ;AAAA,IAAU;AAAA,IAAS;AAAA,IAAO;AAAA,IAAW;AAAA,IAAO;AAAA,IAAS;AAAA,IAAS;AAAA,IAAM;AAAA,IAAY;AAAA,IAAS;AAAA,IAAM;AAAA,IAAS;AAAA,IAAQ;AAAA,IAAS;AAAA,IAAM;AAAA,IAAS;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAS;AAAA,IAC77B;AAAA,IAAU;AAAA,IAAY;AAAA,IAAQ;AAAA,IAAW;AAAA,IAAiB;AAAA,IAAK;AAAA,IAAS;AAAA,IAAQ;AAAA,IAAkB;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAAW;AAAA,IAAW;AAAA,IAAY;AAAA,IAAkB;AAAA,IAAQ;AAAA,IAAQ;AAAA,IAAO;AAAA,IAAQ;AAAA,EAAO;AAE5M,MAAI,YAAY,aAAa;AAC7B,OAAK,QAAQ,SAAU,SAAS;AAE9B,cAAU,WAAW,UAAU,OAAO;AAAA,EACxC,CAAC;AChBD,MAAI,gBAAgB;AAAA,IAClB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,MAAI,YAAY;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IAET,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,QAAQ;AAAA,EACV;ACrCA,MAAI,kBAAkBub,UAAO,KAAK,EAAE;AAAA,IAClC,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAYC,UAAM;AAAA,IAClB,WAAW,YAAY,OAAOA,UAAM,OAAO;AAAA,IAC3C,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,WAAW;AAAA,MACT,SAAS;AAAA,MACT,QAAQ;AAAA,IACT;AAAA,IACD,SAAS;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACH,CAAC;AACD,kBAAgB,cAAc;AACf,WAAS,kBAAkB,OAAO;AAC/C,WAAoB,sBAAM,cAAc,iBAAiB;AAAA,MACvD,SAAS,MAAM;AAAA,IACnB,GAAkB,sBAAM,cAAc,OAAO;AAAA,MACzC,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,IAChB,GAAkB,sBAAM,cAAc,SAAS,MAAM,aAAa,GAAgB,sBAAM,cAAc,QAAQ,MAAM,qBAAqB,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAChL,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,OAAO;AAAA,MAC1C,WAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAM;AAAA,IACV,CAAG,GAAgB,sBAAM,cAAc,QAAQ,MAAmB,sBAAM,cAAc,QAAQ;AAAA,MAC1F,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,GAAgB,sBAAM,cAAc,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,GAAgB,sBAAM,cAAc,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,GAAgB,sBAAM,cAAc,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,GAAgB,sBAAM,cAAc,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,GAAgB,sBAAM,cAAc,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,GAAgB,sBAAM,cAAc,QAAQ;AAAA,MAC3C,IAAI;AAAA,MACJ,GAAG;AAAA,IACP,CAAG,CAAC,CAAC,CAAC;AAAA,EACN;;;AC1EA,MAAIC,YAAU;AAGd,MAAIC,iBAAe;AASnB,WAASC,eAAa,OAAO;AAC3B,WAAO,CAAC,CAAC,SAAS,OAAO,SAAS;AAAA,EACpC;AAGA,MAAIC,gBAAc,OAAO;AAGzB,MAAI,aAAa,SAAS,UAAU;AAGpC,MAAIC,mBAAiBD,cAAY;AAMjC,MAAI,cAAcA,cAAY;AAG9B,MAAIE,eAAa;AAAA,IAAO,MACtB,WAAW,KAAKD,gBAAc,EAAE,QAAQ,uBAAuB,MAAM,EACpE,QAAQ,0DAA0D,OAAO,IAAI;AAAA,EAChF;AAUA,WAASE,YAAU,QAAQ1f,MAAK;AAC9B,QAAI,QAAQ,UAAU,OAAO,SAAY,OAAOA;AAChD,WAAO,SAAS,KAAK,IAAI,QAAQ;AAAA,EACnC;AAkBA,WAAS2f,aAAW,OAAO;AAIzB,WAAO9Q,WAAS,KAAK,KAAK,YAAY,KAAK,KAAK,KAAKuQ;AAAAA,EACvD;AAsBA,WAASvQ,WAAS,OAAO;AAGvB,QAAIzN,QAAO,OAAO;AAClB,WAAO,CAAC,CAAC,UAAUA,SAAQ,YAAYA,SAAQ;AAAA,EACjD;AAkBA,WAAS,SAAS,OAAO;AACvB,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,IACR;AACD,QAAIue,aAAW,KAAK,GAAG;AACrB,aAAOF,aAAW,KAAK,WAAW,KAAK,KAAK,CAAC;AAAA,IAC9C;AACD,WAAOH,eAAa,KAAK,KAAKD,eAAa,KAAK,KAAK;AAAA,EACvD;AAEA,MAAA,oBAAiBK;AChIjB,MAAIA,cAAY5X;AAGhB,MAAI8X,oBAAkB;AAGtB,MAAIC,cAAY,KAAK,KACjB,YAAYH,YAAU,MAAM,KAAK;AAgBrC,MAAI/Y,QAAM,aAAa,WAAW;AAChC,WAAO,IAAI,OAAO;EACpB;AAiEA,WAASmZ,WAAS,MAAM,MAAM,SAAS;AACrC,QAAI,MACA,cACA,QACA,OACA,SACA,WACA,cACA,aAAa,GACb,UAAU,OACV,WAAW;AAEf,QAAI,OAAO,QAAQ,YAAY;AAC7B,YAAM,IAAI,UAAUF,iBAAe;AAAA,IACpC;AACD,WAAO,OAAO,IAAI,IAAK,CAAC,QAAQ;AAChC,QAAI,YAAY,MAAM;AACpB,UAAI,UAAU;AACd,iBAAW;AAAA,IACf,WAAa/Q,WAAS,OAAO,GAAG;AAC5B,gBAAU,CAAC,CAAC,QAAQ;AACpB,gBAAU,aAAa,WAAWgR,YAAU,CAAC,QAAQ,WAAW,GAAG,IAAI;AACvE,iBAAW,cAAc,UAAU,CAAC,CAAC,QAAQ,WAAW;AAAA,IACzD;AAED,aAAS,SAAS;AAChB,UAAI,WAAW;AACb,qBAAa,SAAS;AAAA,MACvB;AACD,UAAI,cAAc;AAChB,qBAAa,YAAY;AAAA,MAC1B;AACD,mBAAa;AACb,qBAAe,YAAY,eAAe;AAAA,IAC3C;AAED,aAAS,SAAS,UAAU1b,KAAI;AAC9B,UAAIA,KAAI;AACN,qBAAaA,GAAE;AAAA,MAChB;AACD,qBAAe,YAAY,eAAe;AAC1C,UAAI,UAAU;AACZ,qBAAawC,MAAG;AAChB,iBAAS,KAAK,MAAM,SAAS,IAAI;AACjC,YAAI,CAAC,aAAa,CAAC,cAAc;AAC/B,iBAAO,UAAU;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAED,aAAS,UAAU;AACjB,UAAI,YAAY,QAAQA,MAAK,IAAG;AAChC,UAAI,aAAa,KAAK,YAAY,MAAM;AACtC,iBAAS,cAAc,YAAY;AAAA,MACzC,OAAW;AACL,oBAAY,WAAW,SAAS,SAAS;AAAA,MAC1C;AAAA,IACF;AAED,aAAS,aAAa;AACpB,eAAS,UAAU,SAAS;AAAA,IAC7B;AAED,aAAS,YAAY;AACnB,aAAO;AACP,cAAQA,MAAG;AACX,gBAAU;AACV,qBAAe,aAAa,aAAa,CAAC;AAE1C,UAAI,YAAY,OAAO;AACrB,YAAI,cAAc,WAAW,CAAC;AAAA,MACpC,OAAW;AACL,YAAI,CAAC,gBAAgB,CAAC,SAAS;AAC7B,uBAAa;AAAA,QACd;AACD,YAAI,YAAY,WAAW,QAAQ,aAC/B,WAAW,aAAa,KAAK,YAAY;AAE7C,YAAI,UAAU;AACZ,cAAI,cAAc;AAChB,2BAAe,aAAa,YAAY;AAAA,UACzC;AACD,uBAAa;AACb,mBAAS,KAAK,MAAM,SAAS,IAAI;AAAA,QAClC,WACQ,CAAC,cAAc;AACtB,yBAAe,WAAW,YAAY,SAAS;AAAA,QAChD;AAAA,MACF;AACD,UAAI,YAAY,WAAW;AACzB,oBAAY,aAAa,SAAS;AAAA,MACnC,WACQ,CAAC,aAAa,SAAS,SAAS;AACvC,oBAAY,WAAW,SAAS,IAAI;AAAA,MACrC;AACD,UAAI,aAAa;AACf,mBAAW;AACX,iBAAS,KAAK,MAAM,SAAS,IAAI;AAAA,MAClC;AACD,UAAI,YAAY,CAAC,aAAa,CAAC,cAAc;AAC3C,eAAO,UAAU;AAAA,MAClB;AACD,aAAO;AAAA,IACR;AACD,cAAU,SAAS;AACnB,WAAO;AAAA,EACT;AAsBA,WAASkI,WAAS,OAAO;AAGvB,QAAIzN,QAAO,OAAO;AAClB,WAAO,CAAC,CAAC,UAAUA,SAAQ,YAAYA,SAAQ;AAAA,EACjD;AAEA,MAAA2e,oBAAiBD;;ACvOjB,SAAO,eAAeE,cAAS,cAAc;AAAA,IAC3C,OAAO;AAAA,EACT,CAAC;AAED,MAAI9C,aAAW,OAAO,UAAU,SAAUpb,SAAQ;AAAE,aAAS7B,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AAAE,UAAI,SAAS,UAAUA;AAAI,eAASD,QAAO,QAAQ;AAAE,YAAI,OAAO,UAAU,eAAe,KAAK,QAAQA,IAAG,GAAG;AAAE,UAAA8B,QAAO9B,QAAO,OAAOA;AAAA,QAAO;AAAA,MAAA;AAAA;AAAK,WAAO8B;AAAA;AAExO,eAAA,UAAG;AAIlB,MAAI,2BAA2B,CAAC,aAAa,kBAAkB,sBAAsB,qBAAqB,qBAAqB,2BAA2B,iBAAiB,sBAAsB,2BAA2B,cAAc,sBAAsB,kBAAkB,eAAe,oBAAoB,aAAa,aAAa,kBAAkB,aAAa,mBAAmB,kBAAkB,cAAc,mBAAmB,sBAAsB,sBAAsB,4BAA4B,eAAe,qBAAqB,YAAY;AAE5iB,MAAI,WAAW,CAAC,OAAO,UAAU,MAAM,GAAG;AAE1C,WAAS,WAAW9B,MAAK,OAAO;AAC9B,WAAO,SAAS,OAAO,SAAU,KAAKigB,MAAK;AACzC,aAAO,IAAIA,OAAMjgB,KAAI,GAAG,YAAW,IAAKA,KAAI,OAAO,CAAC,KAAK,OAAO;AAAA,IACjE,GAAE,CAAE,CAAA;AAAA,EACP;AAEA,WAAS,WAAW,OAAO;AACzB,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,SAAU,KAAKA,MAAK;AACnD,aAAO,yBAAyB,QAAQA,IAAG,MAAM,KAAKkd,WAAS,CAAA,GAAI,KAAK,WAAWld,MAAK,MAAMA,KAAI,CAAC,IAAI;AAAA,IACxG,GAAE,KAAK;AAAA,EACV;ACxBA,SAAO,eAAekgB,QAAS,cAAc;AAAA,IAC3C,OAAO;AAAA,EACT,CAAC;AACc,SAAA,UAAG;AAElB,MAAIhD,aAAW,OAAO,UAAU,SAAUpb,SAAQ;AAAE,aAAS7B,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AAAE,UAAI,SAAS,UAAUA;AAAI,eAASD,QAAO,QAAQ;AAAE,YAAI,OAAO,UAAU,eAAe,KAAK,QAAQA,IAAG,GAAG;AAAE,UAAA8B,QAAO9B,QAAO,OAAOA;AAAA,QAAO;AAAA,MAAA;AAAA;AAAK,WAAO8B;AAAA;AAEvP,MAAIqe,iBAAe,WAAY;AAAE,aAAS,iBAAiBre,SAAQ,OAAO;AAAE,eAAS7B,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AAAE,YAAImgB,cAAa,MAAMngB;AAAI,QAAAmgB,YAAW,aAAaA,YAAW,cAAc;AAAO,QAAAA,YAAW,eAAe;AAAM,YAAI,WAAWA;AAAY,UAAAA,YAAW,WAAW;AAAM,eAAO,eAAete,SAAQse,YAAW,KAAKA,WAAU;AAAA,MAAE;AAAA,IAAI;AAAC,WAAO,SAAU,aAAa,YAAY,aAAa;AAAE,UAAI;AAAY,yBAAiB,YAAY,WAAW,UAAU;AAAG,UAAI;AAAa,yBAAiB,aAAa,WAAW;AAAG,aAAO;AAAA,IAAc;AAAA,EAAG,EAAA;AAEjjB,MAAI,QAAQ;AAEZ,MAAI,SAAStY,MAAAA;AAEb,MAAI,UAAU4T,yBAAuB,MAAM;AAE3C,MAAI,aAAatF,UAAAA;AAEjB,MAAI,cAAcsF,yBAAuB,UAAU;AAEnD,MAAI2E,YAAU1X;AAEd,MAAI2X,aAAW5E,yBAAuB2E,SAAO;AAE7C,MAAI,cAAc7I;AAElB,MAAI,eAAekE,yBAAuB,WAAW;AAErD,WAASA,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/F,WAASG,kBAAgB,UAAU,aAAa;AAAE,QAAI,EAAE,oBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU,mCAAmC;AAAA,IAAE;AAAA,EAAI;AAEzJ,WAASC,6BAA2B3b,OAAM,MAAM;AAAE,QAAI,CAACA,OAAM;AAAE,YAAM,IAAI,eAAe,2DAA2D;AAAA,IAAI;AAAC,WAAO,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS,cAAc,OAAOA;AAAA,EAAO;AAEhP,WAAS4b,YAAU,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU,6DAA6D,OAAO,UAAU;AAAA,IAAI;AAAC,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,YAAY,OAAO,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,QAAI;AAAY,aAAO,iBAAiB,OAAO,eAAe,UAAU,UAAU,IAAI,SAAS,YAAY;AAAA,EAAa;AAE9e,WAAS,mBAAmB,KAAK;AAAE,QAAI,MAAM,QAAQ,GAAG,GAAG;AAAE,eAAS9b,KAAI,GAAG,OAAO,MAAM,IAAI,MAAM,GAAGA,KAAI,IAAI,QAAQA,MAAK;AAAE,aAAKA,MAAK,IAAIA;AAAA,MAAG;AAAG,aAAO;AAAA,IAAO,OAAM;AAAE,aAAO,MAAM,KAAK,GAAG;AAAA;EAAM;AAEnM,WAAS,aAAa0D,SAAQ;AAC5B,WAAO,OAAO,KAAKA,OAAM,EAAE,OAAO,SAAU,KAAK3D,MAAK;AACpD,aAAO,IAAIA,YAAW,aAAa,SAAS2D,QAAO3D,KAAI,GAAG;AAAA,IAC3D,GAAE,CAAE,CAAA;AAAA,EACP;AAEA,MAAI2D,WAAS,aAAa;AAAA,IACxB,SAAS;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,MAAM;AAAA,IACP;AAAA,IAED,KAAK;AAAA,MACH,UAAU;AAAA,MACV,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,SAAS;AAAA,IACV;AAAA,IAED,WAAW;AAAA,MACT,SAAS;AAAA,IACV;AAAA,IAED,gBAAgB;AAAA,MACd,eAAe;AAAA,IAChB;AAAA,IAED,WAAW;AAAA,MACT,SAAS;AAAA,IACV;AAAA,IAED,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,IACT;AAAA,IAED,YAAY;AAAA,MACV,SAAS;AAAA,IACV;AAAA,IAED,cAAc;AAAA,MACZ,YAAY;AAAA,IACb;AAAA,IAED,aAAa;AAAA,MACX,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,IACX;AAAA,IAED,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS;AAAA,IACV;AAAA,EACH,CAAC;AAED,WAAS,eAAe,UAAU;AAChC,WAAO,CAAC,QAAQ,OAAO,SAAS,QAAQ,EAAE,IAAI,SAAU3C,IAAG;AACzD,aAAOA,KAAI,MAAM,WAAW,MAAO;AAAA,IACvC,CAAG;AAAA,EACH;AAEA,WAAS,cAAc,MAAM,OAAO;AAClC,QAAI,QAAQ,KAAK;AACjB,QAAI,YAAY,KAAK;AACrB,QAAI,kBAAkB,KAAK;AAC3B,QAAI,WAAW,KAAK;AACpB,QAAIiI,YAAW,KAAK;AACpB,QAAI,YAAY,KAAK;AACrB,QAAIvI,QAAO,MAAM;AACjB,QAAI,aAAa,MAAM;AACvB,QAAI,YAAY,MAAM;AACtB,QAAI,aAAa,MAAM;AAEvB,QAAI,WAAW;AACf,QAAI,UAAU,QAAQA,QAAO,MAAM,MAAMA,QAAO;AAEhD,aAAS,YAAY,UAAU;AAC7B,aAAO,QAAQ,MAAMA,QAAO,MAAM,MAAM,WAAWA,QAAO;AAAA,IAC3D;AAED,YAAQuI,WAAQ;AAAA,MACd,KAAK;AACH,mBAAW;AAAA,UACT,OAAO;AAAA,UACP,MAAM,YAAY,IAAI,MAAM;AAAA,QACpC;AACM;AAAA,MACF,KAAK;AACH,mBAAW;AAAA,UACT,MAAM,YAAY,YAAY,SAAS,IAAI;AAAA,UAC3C,OAAO;AAAA,QACf;AACM;AAAA,MACF,KAAK;AACH,mBAAW;AAAA,UACT,KAAK,YAAY,IAAI,MAAM;AAAA,UAC3B,QAAQ;AAAA,QAChB;AACM;AAAA,MACF,KAAK;AACH,mBAAW;AAAA,UACT,KAAK,YAAY,YAAY,UAAU,IAAI;AAAA,UAC3C,QAAQ;AAAA,QAChB;AACM;AAAA,IACH;AAED,QAAI,cAAc,eAAe,QAAQ;AAEzC,WAAO,CAACtF,SAAO,OAAU,GAAA,aAAa,SAAS;AAAA,MAC7C,YAAY,CAAE,EAAC,OAAO,mBAAmB,WAAW,GAAG,CAAC,CAAC,aAAa,0BAA0B,WAAW,MAAO,GAAG,CAAC,EAAE,OAAO,SAAU4V,IAAG;AAC1I,eAAOA;AAAA,MACb,CAAK,EAAE,KAAK,GAAG;AAAA,IACf,CAAG,GAAG,YAAe,GAAA,aAAa,SAAS,QAAQ,GAAG,cAAc5V,SAAO,cAAc,CAAC,aAAaA,SAAO,YAAY,CAAC,aAAa,eAAe;AAAA,EACvJ;AAEA,WAAS,aAAa,OAAO,OAAO;AAClC,QAAI,UAAU,MAAM;AACpB,QAAI,WAAW,MAAM;AACrB,QAAI,WAAW,MAAM;AACrB,QAAI,YAAY,MAAM;AACtB,QAAI,sBAAsB,MAAM;AAEhC,WAAO,CAACA,SAAO,MAAS,GAAA,aAAa,SAAS;AAAA,MAC5C,YAAY,aAAa,WAAW,MAAO;AAAA,IAC/C,CAAG,GAAG,UAAU,YAAY,iBAAiBA,SAAO,gBAAgB,CAAC,aAAaA,SAAO,WAAW,uBAAuB,aAAaA,SAAO,WAAW,uBAAuB,CAAC,aAAaA,SAAO,YAAY;AAAA,EAClN;AAEA,WAAS,iBAAiBsF,WAAU;AAClC,QAAI,eAAe;AACnB,QAAIvI,QAAO;AAEX,YAAQuI,WAAQ;AAAA,MACd,KAAK;AACH,uBAAe;AAAA,UACb,OAAO,CAACvI,QAAO;AAAA,UACf,OAAOA;AAAA,UACP,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,QAChB;AACM;AAAA,MACF,KAAK;AACH,uBAAe;AAAA,UACb,MAAM,CAACA,QAAO;AAAA,UACd,OAAOA;AAAA,UACP,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,QAChB;AACM;AAAA,MACF,KAAK;AACH,uBAAe;AAAA,UACb,QAAQ,CAACA,QAAO;AAAA,UAChB,QAAQA;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,QAChB;AACM;AAAA,MACF,KAAK;AACH,uBAAe;AAAA,UACb,KAAK,CAACA,QAAO;AAAA,UACb,QAAQA;AAAA,UACR,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,QAChB;AACM;AAAA,IACH;AAED,WAAO,CAACiD,SAAO,UAAS,GAAI,aAAa,SAAS,YAAY,CAAC;AAAA,EACjE;AAEA,WAAS,YAAYsF,WAAU,WAAW,YAAY;AACpD,WAAOA,cAAa,UAAUA,cAAa,UAAU,YAAY;AAAA,EACnE;AAEA,MAAI,QAAQ,QAAQ,SAAS,SAAU,YAAY;AACjD8S,gBAAUwE,OAAM,UAAU;AAE1B,aAASA,MAAK,OAAO;AACnB1E,wBAAgB,MAAM0E,KAAI;AAE1B,UAAI,QAAQzE,6BAA2B,MAAM,OAAO,eAAeyE,KAAI,EAAE,KAAK,MAAM,KAAK,CAAC;AAE1F,YAAM,gBAAgB,WAAY;AAChC,cAAM,SAAS,EAAE,qBAAqB,MAAO,CAAA;AAAA,MACnD;AAEI,YAAM,UAAU,WAAY;AAC1B,YAAI,CAAC,MAAM,MAAM,WAAW;AAC1B,gBAAM,SAAS,EAAE,aAAa,KAAM,CAAA;AAAA,QACrC;AAAA,MACP;AAEI,YAAM,iBAAiB,WAAY;AACjC,YAAI,MAAM,MAAM,YAAY,UAAU;AACpC,gBAAM,MAAM,mBAAmB,MAAM,MAAM,gBAAgB,KAAK;AAAA,QACjE;AAAA,MACP;AAEI,YAAM,eAAe,WAAY;AAC/B,YAAI,OAAO,uBAAuB;AAChC,iBAAO,sBAAsB,MAAM,iBAAiB,KAAK,OAAO,IAAI,CAAC;AAAA,QAC7E,OAAa;AACL,gBAAM,iBAAiB,IAAI;AAAA,QAC5B;AAAA,MACP;AAEI,YAAM,mBAAmB,SAAU,cAAc;AAC/C,YAAI,YAAY;AAAA,UACd,WAAW,OAAO;AAAA,UAClB,YAAY,OAAO;AAAA,QAC3B;AAEM,YAAI,cAAc;AAChB,gBAAM,SAASrD,WAAS,CAAA,GAAI,WAAW;AAAA,YACrC,YAAY;AAAA,YACZ,kBAAkB;AAAA,UACnB,CAAA,CAAC;AAEF,gBAAM,6BAA4B;AAAA,QAC1C,OAAa;AACL,gBAAM,SAAS,SAAS;AAAA,QACzB;AAAA,MACP;AAEI,YAAM,sBAAsB,WAAY;AACtC,cAAM,SAAS;AAAA,UACb,YAAY;AAAA,UACZ,kBAAkB;AAAA,QAC1B,CAAO;AAAA,MACP;AAEI,YAAM,mCAAmCoD,WAAS,SAAS,MAAM,qBAAqB,EAAE;AAExF,YAAM,qBAAqB,WAAY;AACrC,cAAM,SAAS,EAAE,YAAY,MAAO,CAAA;AAAA,MAC1C;AAEI,YAAM,kBAAkB,WAAY;AAClC,cAAM,SAAS,EAAE,YAAY,KAAM,CAAA;AAAA,MACzC;AAEI,YAAM,gBAAgB,WAAY;AAChC,cAAM,SAAS,EAAE,YAAY,MAAO,CAAA;AAAA,MAC1C;AAEI,YAAM,kBAAkB,SAAUlc,IAAG;AACnC,YAAI,CAAC,MAAM,MAAM,cAAc,MAAM,MAAM;AAAkB;AAC7D,QAAAA,GAAE,eAAc;AAEhB,YAAI,cAAc,MAAM;AACxB,YAAI6E,YAAW,YAAY;AAC3B,YAAI,QAAQ,YAAY;AACxB,YAAI,cAAc,MAAM;AACxB,YAAI,YAAY,YAAY;AAC5B,YAAI,aAAa,YAAY;AAC7B,YAAI,eAAe,YAAY;AAC/B,YAAIpD,KAAIzB,GAAE;AACV,YAAI0B,KAAI1B,GAAE;AAEV,YAAI1D,QAAO;AAEX,gBAAQuI,WAAQ;AAAA,UACd,KAAK;AACH,YAAAvI,QAAO,QAAQmF,KAAI,YAAYA;AAC/B;AAAA,UACF,KAAK;AACH,YAAAnF,QAAO,SAAS,YAAYmF,MAAK,YAAY,YAAYA;AACzD;AAAA,UACF,KAAK;AACH,YAAAnF,QAAO,QAAQoF,KAAI,aAAaA;AAChC;AAAA,UACF,KAAK;AACH,YAAApF,QAAO,SAAS,aAAaoF,MAAK,aAAa,aAAaA;AAC5D;AAAA,QACH;AAED,cAAM,MAAM,gBAAgB,MAAM,MAAM,aAAapF,KAAI;AAEzD,YAAI,CAAC,cAAc;AACjB,gBAAM,SAAS,EAAE,MAAMA,MAAM,CAAA;AAAA,QAC9B;AAAA,MACP;AAEI,YAAM,QAAQ;AAAA,QACZ,cAAc,OAAO,MAAM,SAAS;AAAA,QACpC,MAAM,MAAM,QAAQ,MAAM;AAAA,QAC1B,aAAa,CAAC,MAAM;AAAA,QACpB,WAAW,OAAO,WAAW,eAAe,OAAO;AAAA,QACnD,YAAY,OAAO,WAAW,eAAe,OAAO;AAAA,QACpD,qBAAqB;AAAA,QACrB,kBAAkB;AAAA,MACxB;AACI,aAAO;AAAA,IACR;AAEDyf,mBAAaI,OAAM,CAAC;AAAA,MAClB,KAAK;AAAA,MACL,OAAO,SAAS,oBAAoB;AAClC,eAAO,iBAAiB,WAAW,KAAK,aAAa;AACrD,eAAO,iBAAiB,aAAa,KAAK,eAAe;AACzD,eAAO,iBAAiB,UAAU,KAAK,YAAY;AAEnD,YAAI,CAAC,OAAO,WAAW;AACrB,eAAK,iBAAgB;AAAA,QACtB;AAAA,MACF;AAAA,IACL,GAAK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,SAAS,uBAAuB;AACrC,eAAO,oBAAoB,WAAW,KAAK,aAAa;AACxD,eAAO,oBAAoB,aAAa,KAAK,eAAe;AAC5D,eAAO,oBAAoB,UAAU,KAAK,YAAY;AAAA,MACvD;AAAA,IACL,GAAK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,SAAS,0BAA0B,WAAW;AACnD,YAAI,eAAe,OAAO,UAAU,SAAS;AAE7C,aAAK,SAAS,EAAE,aAA4B,CAAA;AAE5C,YAAI,gBAAgB,KAAK,MAAM,SAAS,UAAU,MAAM;AACtD,eAAK,SAAS,EAAE,MAAM,UAAU,KAAM,CAAA;AAAA,QACvC,WAAU,KAAK,MAAM,UAAU,UAAU,OAAO;AAC/C,eAAK,WAAW,SAAS;AAAA,QAC1B;AAED,YAAI,KAAK,MAAM,cAAc,UAAU,WAAW;AAChD,eAAK,SAAS;AAAA,YACZ,qBAAqB;AAAA,UAC/B,CAAS;AAAA,QACF;AAAA,MACF;AAAA,IACL,GAAK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,SAAS,WAAW,OAAO;AAChC,YAAI,SAAS,KAAK;AAClB,YAAI,YAAY,OAAO;AACvB,YAAI,aAAa,OAAO;AAGxB,aAAK,SAAS;AAAA,UACZ,MAAM,MAAM,QAAQ,KAAK,MAAM,OAAO,YAAY,MAAM,UAAU,WAAW,UAAU,IAAI,YAAY,MAAM,UAAU,WAAW,UAAU,IAAI,KAAK,MAAM;AAAA,QACnK,CAAO;AAAA,MACF;AAAA,IACL,GAAK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,SAAS,mBAAmB,WAAW;AAC5C,YAAI,SAAS;AAEb,YAAI,KAAK,MAAM,cAAc,UAAU,WAAW;AAChD,cAAI,CAAC,KAAK,MAAM,WAAW;AACzB,mBAAO,WAAW,WAAY;AAC5B,qBAAO,OAAO;YAC1B,GAAa,KAAK,MAAM,QAAQ;AAAA,UAChC,OAAe;AACL,iBAAK,SAAS,EAAE,aAAa,MAAO,CAAA;AAAA,UACrC;AAED,iBAAO,WAAW,WAAY;AAC5B,mBAAO,OAAO,SAAS,EAAE,qBAAqB,MAAO,CAAA;AAAA,UACtD,GAAE,CAAC;AAAA,QACL;AAAA,MACF;AAAA,IACL,GAAK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,SAAS,SAAS;AACvB,YAAI,SAAS,KAAK;AAClB,YAAI,WAAW,OAAO;AACtB,YAAI,SAAS,OAAO;AACpB,YAAI,UAAU,OAAO;AACrB,YAAItX,YAAW,OAAO;AACtB,YAAI,YAAY,OAAO;AACvB,YAAI,UAAU,KAAK;AACnB,YAAI,aAAa,QAAQ;AACzB,YAAIvI,QAAO,QAAQ;AACnB,YAAI,cAAc,QAAQ;AAG1B,YAAI,YAAY,OAAO,OAAO,MAAM,QAAQ,CAAC,CAAA,CAAE,EAAE,OAAO,mBAAmB,aAAa,KAAK,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC;AACjH,YAAI,aAAa,OAAO,OAAO,MAAM,QAAQ,CAAC,CAAA,CAAE,EAAE,OAAO,mBAAmB,cAAc,KAAK,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC;AACnH,YAAI,gBAAgB,OAAO,OAAO,MAAM,QAAQ,CAAC,CAAA,CAAE,EAAE,OAAO,mBAAmB,iBAAiBuI,SAAQ,CAAC,CAAC,CAAC;AAE3G,eAAO,QAAQ,QAAQ;AAAA,UACrB;AAAA,UACA,EAAE,OAAO,OAAO,OAAO,CAAE,GAAEtF,SAAO,SAAS,EAAE,OAAc,CAAE,EAAG;AAAA,UAChE,YAAY,UAAU,CAAC,eAAe,QAAQ,QAAQ,cAAc,OAAO,EAAE,OAAO,WAAW,SAAS,KAAK,eAAc,CAAE;AAAA,UAC7H,QAAQ,QAAQ;AAAA,YACd;AAAA,YACA,EAAE,OAAO,WAAY;AAAA,YACrB,QAAQ,QAAQ,cAAc,OAAO;AAAA,cAAE,OAAO;AAAA,cAC5C,aAAa,KAAK;AAAA,aAAiB;AAAA,YACrC,QAAQ,QAAQ;AAAA,cACd;AAAA,cACA,EAAE,OAAOA,SAAO,YAAa;AAAA,cAC7B,OAAO,aAAa,aAAa,SAAS;AAAA,gBACxC,UAAUsF;AAAA,gBACV;AAAA,gBACA,MAAMvI;AAAA,gBACN;AAAA,cACD,CAAA,IAAI;AAAA,YACN;AAAA,UACF;AAAA,QACT;AAAA,MACK;AAAA,IACF,CAAA,CAAC;AAEF,WAAO6f;AAAA,EACT,EAAE,OAAO,SAAS,GAAG,OAAO,YAAY;AAAA,IACtC,UAAU,YAAY,QAAQ,MAAM,CAAC,QAAQ,SAAS,OAAO,QAAQ,CAAC;AAAA,IACtE,QAAQ,YAAY,QAAQ;AAAA,IAC5B,OAAO,YAAY,QAAQ;AAAA,IAC3B,MAAM,YAAY,QAAQ;AAAA,IAC1B,aAAa,YAAY,QAAQ;AAAA,IACjC,SAAS,YAAY,QAAQ,MAAM,CAAC,QAAQ,eAAe,QAAQ,CAAC;AAAA,IACpE,WAAW,YAAY,QAAQ;AAAA,IAC/B,iBAAiB,YAAY,QAAQ;AAAA,IACrC,cAAc,YAAY,QAAQ;AAAA,IAClC,UAAU,YAAY,QAAQ;AAAA,IAC9B,WAAW,YAAY,QAAQ;AAAA,IAC/B,UAAU,YAAY,QAAQ;AAAA,EAChC,GAAG,OAAO,eAAe;AAAA,IACvB,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,IACT,UAAU;AAAA,EACZ,GAAG;AACH,SAAA,UAAkB;ACpelB,SAAO,eAAeC,OAAS,cAAc;AAAA,IAC3C,OAAO;AAAA,EACT,CAAC;AACD,MAAe9Q,aAAA8Q,MAAA,UAAG;AAElB,MAAI,QAAQ1Y;AAEZ,MAAI,SAAS4T,yBAAuB,KAAK;AAEzC,WAASA,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/FhM,eAAe8Q,MAAA,UAAG,OAAO;ACbzB,WAASlE,UAAQ,KAAK;AAAE;AAA2B,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAO,OAAOA;AAAA,MAAI;AAAA,IAAK,OAAM;AAAEJ,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,MAAI;AAAA,IAAG;AAAG,WAAOJ,UAAQ,GAAG;AAAA,EAAI;AAE1X,WAAST,kBAAgB,UAAU,aAAa;AAAE,QAAI,EAAE,oBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU,mCAAmC;AAAA,IAAE;AAAA,EAAI;AAEzJ,WAAS4E,oBAAkB3e,SAAQ,OAAO;AAAE,aAAS7B,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AAAE,UAAImgB,cAAa,MAAMngB;AAAI,MAAAmgB,YAAW,aAAaA,YAAW,cAAc;AAAO,MAAAA,YAAW,eAAe;AAAM,UAAI,WAAWA;AAAY,QAAAA,YAAW,WAAW;AAAM,aAAO,eAAete,SAAQse,YAAW,KAAKA,WAAU;AAAA;EAAM;AAE7T,WAASD,eAAa,aAAa,YAAY,aAAa;AAAE,QAAI;AAAYM,0BAAkB,YAAY,WAAW,UAAU;AAAG,QAAI;AAAaA,0BAAkB,aAAa,WAAW;AAAG,WAAO;AAAA,EAAc;AAEvN,WAAS1E,YAAU,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU,oDAAoD;AAAA,IAAI;AAAC,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,QAAI;AAAYY,wBAAgB,UAAU,UAAU;AAAA,EAAI;AAEjY,WAASA,kBAAgBzG,IAAGlV,IAAG;AAAE2b,wBAAkB,OAAO,kBAAkB,SAASA,iBAAgBzG,IAAGlV,IAAG;AAAE,MAAAkV,GAAE,YAAYlV;AAAG,aAAOkV;AAAA,IAAE;AAAI,WAAOyG,kBAAgBzG,IAAGlV,EAAC;AAAA,EAAI;AAE1K,WAAS4b,eAAa,SAAS;AAAE,QAAI,4BAA4BC,4BAAyB;AAAI,WAAO,WAAY;AAAE,UAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;AAAA,MAAE,OAAQ;AAAE,iBAAS,MAAM,MAAM,MAAM,SAAS;AAAA;AAAK,aAAOhB,6BAA2B,MAAM,MAAM;AAAA,IAAE;AAAA,EAAK;AAErZ,WAASA,6BAA2B3b,OAAM,MAAM;AAAE,QAAI,SAASmc,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,aAAO;AAAA,IAAO;AAAC,WAAOS,yBAAuB5c,KAAI;AAAA,EAAI;AAEjL,WAAS4c,yBAAuB5c,OAAM;AAAE,QAAIA,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe,2DAA2D;AAAA;AAAK,WAAOA;AAAA,EAAO;AAEtK,WAAS0c,8BAA4B;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,WAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,MAAM,IAAI,WAAY;AAAA,MAAE,CAAA,CAAC;AAAG,aAAO;AAAA,IAAO,SAAQzY,IAAP;AAAY,aAAO;AAAA;EAAU;AAEpU,WAAS0Y,kBAAgB5G,IAAG;AAAE4G,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,iBAAgB5G,IAAG;AAAE,aAAOA,GAAE,aAAa,OAAO,eAAeA,EAAC;AAAA,IAAI;AAAE,WAAO4G,kBAAgB5G,EAAC;AAAA,EAAI;AAMtM,MAAI,UAAUgJ,UAAO,KAAK,EAAE;AAAA,IACjC,SAAS;AAAA,IACT,WAAW;AAAA,IACX,cAAc,aAAa,OAAOC,UAAM,MAAM;AAAA,EAChD,CAAC;AACD,UAAQ,cAAc;AACf,MAAI,YAAYD,UAAO,KAAK,EAAE;AAAA,IACnC,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC;AACD,YAAU,cAAc;AACjB,MAAI,YAAYA,UAAO,KAAK,EAAE;AAAA,IACnC,OAAOC,UAAM;AAAA,IACb,eAAe;AAAA,IACf,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,YAAYA,UAAM;AAAA,IACnB;AAAA,IACD,WAAW;AAAA,MACT,SAAS;AAAA,IACV;AAAA,EACH,GAAG,SAAU,OAAO;AAClB,WAAO;AAAA,MACL,cAAc,MAAM,aAAa,aAAa,OAAOA,UAAM,IAAI,IAAI;AAAA,IACvE;AAAA,EACA,CAAC;AACD,YAAU,cAAc;AACjB,MAAI,MAAmB,yBAAU,kBAAkB;AACxDpD,gBAAU2E,MAAK,gBAAgB;AAE/B,QAAI,SAAS9D,eAAa8D,IAAG;AAE7B,aAASA,OAAM;AACb7E,wBAAgB,MAAM6E,IAAG;AAEzB,aAAO,OAAO,MAAM,MAAM,SAAS;AAAA,IACpC;AAEDP,mBAAaO,MAAK,CAAC;AAAA,MACjB,KAAK;AAAA,MACL,OAAO,SAAS,SAAS;AACvB,YAAI,QAAQ;AAEZ,eAAoB,sBAAM,cAAc,WAAW;AAAA,UACjD,YAAY,KAAK,MAAM,UAAU,KAAK,QAAQ,KAAK;AAAA,UACnD,SAAS,SAAS,UAAU;AAC1B,aAAC,MAAM,QAAQ,KAAK,YAAY,WAAY;AAAA,YAAA,GAAI,MAAM,MAAM,KAAK;AAAA,UAClE;AAAA,QACT,GAAS,KAAK,MAAM,QAAQ;AAAA,MACvB;AAAA,IACF,CAAA,CAAC;AAEF,WAAOA;AAAA,EACT,EAAE,MAAM,SAAS;AACjB,MAAI,eAAe;AAAA,IACjB,MAAMC,UAAAA,QAAU,OAAO;AAAA,EACzB;AACO,MAAI,iBAAiBzB,UAAO,KAAK,EAAE;AAAA,IACxC,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,EACb,CAAC;AACD,iBAAe,cAAc;AACtB,MAAI,WAAwB,yBAAU,mBAAmB;AAC9DnD,gBAAU6E,WAAU,iBAAiB;AAErC,QAAI,UAAUhE,eAAagE,SAAQ;AAEnC,aAASA,YAAW;AAClB/E,wBAAgB,MAAM+E,SAAQ;AAE9B,aAAO,QAAQ,MAAM,MAAM,SAAS;AAAA,IACrC;AAEDT,mBAAaS,WAAU,CAAC;AAAA,MACtB,KAAK;AAAA,MACL,OAAO,SAAS,SAAS;AACvB,eAAoB,sBAAM,cAAc,gBAAgB,MAAM,KAAK,MAAM,SAAS;AAAA,UAChF,OAAO,KAAK,QAAQ,KAAK;AAAA,QAC1B,CAAA,CAAC;AAAA,MACH;AAAA,IACF,CAAA,CAAC;AAEF,WAAOA;AAAA,EACT,EAAE,MAAM,SAAS;AACjB,WAAS,eAAe;AAAA,IACtB,MAAMD,UAAAA,QAAU,OAAO;AAAA,EACzB;AACO,MAAI,OAAoB,yBAAU,mBAAmB;AAC1D5E,gBAAU8E,OAAM,iBAAiB;AAEjC,QAAI,UAAUjE,eAAaiE,KAAI;AAE/B,aAASA,QAAO;AACdhF,wBAAgB,MAAMgF,KAAI;AAE1B,aAAO,QAAQ,MAAM,MAAM,SAAS;AAAA,IACrC;AAEDV,mBAAaU,OAAM,CAAC;AAAA,MAClB,KAAK;AAAA,MACL,OAAO,SAAS,kBAAkB;AAChC,eAAO;AAAA,UACL,MAAM;AAAA,YACJ,UAAU,KAAK,MAAM;AAAA,YACrB,eAAe,KAAK,MAAM;AAAA,UAC3B;AAAA,QACT;AAAA,MACK;AAAA,IACL,GAAK;AAAA,MACD,KAAK;AAAA,MACL,OAAO,SAAS,SAAS;AACvB,eAAoB,sBAAM,cAAc,WAAW,MAAM,KAAK,MAAM,QAAQ;AAAA,MAC7E;AAAA,IACF,CAAA,CAAC;AAEF,WAAOA;AAAA,EACT,EAAE,MAAM,SAAS;AACjB,OAAK,oBAAoB;AAAA,IACvB,MAAMF,UAAS,QAAC;AAAA,EAClB;;;;ACtJA,aAASrE,SAAQ,KAAK;AACpB;AAEA,aAAQ7G,QAAA,UAAiB6G,WAAU,cAAc,OAAO,UAAU,YAAY,OAAO,OAAO,WAAW,SAAUI,MAAK;AACpH,eAAO,OAAOA;AAAA,MACf,IAAG,SAAUA,MAAK;AACjB,eAAOA,QAAO,cAAc,OAAO,UAAUA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,MACzH,GAAEjH,QAA4B,QAAA,aAAA,MAAMA,QAAO,QAAQ,aAAaA,QAAO,SAAU6G,SAAQ,GAAG;AAAA,IAC9F;AACD,IAAA7G,QAAA,UAAiB6G,UAAS7G,QAA4B,QAAA,aAAA,MAAMA,QAAO,QAAQ,aAAaA,QAAO;AAAA;;ACT/F,QAAI6G,WAAUxU,kBAAuB;AACrC,aAAS,sBAAsB;AAE7B,MAAA2N,QAAiB,UAAA,sBAAsB,SAASqL,uBAAsB;AACpE,eAAO/I;AAAA,MACX,GAAKtC,QAAA,QAAA,aAA4B,MAAMA,QAAO,QAAQ,aAAaA,QAAO;AACxE,UAAIsC,WAAU,CAAE,GACd,KAAK,OAAO,WACZgJ,UAAS,GAAG,gBACZC,kBAAiB,OAAO,kBAAkB,SAAU,KAAKhhB,MAAK,MAAM;AAClE,YAAIA,QAAO,KAAK;AAAA,MACjB,GACDihB,WAAU,cAAc,OAAO,SAAS,SAAS,CAAE,GACnD,iBAAiBA,SAAQ,YAAY,cACrC,sBAAsBA,SAAQ,iBAAiB,mBAC/C,oBAAoBA,SAAQ,eAAe;AAC7C,eAASC,QAAO,KAAKlhB,MAAK,OAAO;AAC/B,eAAO,OAAO,eAAe,KAAKA,MAAK;AAAA,UACrC;AAAA,UACA,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,UAAU;AAAA,QAChB,CAAK,GAAG,IAAIA;AAAA,MACT;AACD,UAAI;AACF,QAAAkhB,QAAO,CAAA,GAAI,EAAE;AAAA,MACd,SAAQ,KAAP;AACA,QAAAA,UAAS,SAASA,QAAO,KAAKlhB,MAAK,OAAO;AACxC,iBAAO,IAAIA,QAAO;AAAA,QACxB;AAAA,MACG;AACD,eAASyD,MAAK,SAAS,SAAStD,OAAM,aAAa;AACjD,YAAI,iBAAiB,WAAW,QAAQ,qBAAqB,YAAY,UAAU,WACjF,YAAY,OAAO,OAAO,eAAe,SAAS,GAClD,UAAU,IAAIghB,SAAQ,eAAe,CAAE,CAAA;AACzC,eAAOH,gBAAe,WAAW,WAAW;AAAA,UAC1C,OAAO,iBAAiB,SAAS7gB,OAAM,OAAO;AAAA,QAC/C,CAAA,GAAG;AAAA,MACL;AACD,eAAS,SAAS,IAAI,KAAK,KAAK;AAC9B,YAAI;AACF,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,KAAK,GAAG,KAAK,KAAK,GAAG;AAAA,UAC7B;AAAA,QACK,SAAQ,KAAP;AACA,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,KAAK;AAAA,UACb;AAAA,QACK;AAAA,MACF;AACD,MAAA4X,SAAQ,OAAOtU;AACf,UAAI,mBAAmB,CAAA;AACvB,eAAS,YAAY;AAAA,MAAE;AACvB,eAAS,oBAAoB;AAAA,MAAE;AAC/B,eAAS,6BAA6B;AAAA,MAAE;AACxC,UAAI2d,qBAAoB,CAAA;AACxB,MAAAF,QAAOE,oBAAmB,gBAAgB,WAAY;AACpD,eAAO;AAAA,MACX,CAAG;AACD,UAAI,WAAW,OAAO,gBACpB,0BAA0B,YAAY,SAAS,SAAS,OAAO,CAAA,CAAE,CAAC,CAAC;AACrE,iCAA2B,4BAA4B,MAAML,QAAO,KAAK,yBAAyB,cAAc,MAAMK,qBAAoB;AAC1I,UAAI,KAAK,2BAA2B,YAAY,UAAU,YAAY,OAAO,OAAOA,kBAAiB;AACrG,eAAS,sBAAsB,WAAW;AACxC,SAAC,QAAQ,SAAS,QAAQ,EAAE,QAAQ,SAAU,QAAQ;AACpD,UAAAF,QAAO,WAAW,QAAQ,SAAU,KAAK;AACvC,mBAAO,KAAK,QAAQ,QAAQ,GAAG;AAAA,UACvC,CAAO;AAAA,QACP,CAAK;AAAA,MACF;AACD,eAAS,cAAc,WAAW,aAAa;AAC7C,iBAAS,OAAO,QAAQ,KAAK,SAAS,QAAQ;AAC5C,cAAI,SAAS,SAAS,UAAU,SAAS,WAAW,GAAG;AACvD,cAAI,YAAY,OAAO,MAAM;AAC3B,gBAAI,SAAS,OAAO,KAClB,QAAQ,OAAO;AACjB,mBAAO,SAAS,YAAY5E,SAAQ,KAAK,KAAKyE,QAAO,KAAK,OAAO,SAAS,IAAI,YAAY,QAAQ,MAAM,OAAO,EAAE,KAAK,SAAUM,QAAO;AACrI,qBAAO,QAAQA,QAAO,SAAS,MAAM;AAAA,YACtC,GAAE,SAAU,KAAK;AAChB,qBAAO,SAAS,KAAK,SAAS,MAAM;AAAA,YAC9C,CAAS,IAAI,YAAY,QAAQ,KAAK,EAAE,KAAK,SAAU,WAAW;AACxD,qBAAO,QAAQ,WAAW,QAAQ,MAAM;AAAA,YACzC,GAAE,SAAU,OAAO;AAClB,qBAAO,OAAO,SAAS,OAAO,SAAS,MAAM;AAAA,YACvD,CAAS;AAAA,UACF;AACD,iBAAO,OAAO,GAAG;AAAA,QAClB;AACD,YAAI;AACJ,QAAAL,gBAAe,MAAM,WAAW;AAAA,UAC9B,OAAO,SAAS,MAAM,QAAQ,KAAK;AACjC,qBAAS,6BAA6B;AACpC,qBAAO,IAAI,YAAY,SAAU,SAAS,QAAQ;AAChD,uBAAO,QAAQ,KAAK,SAAS,MAAM;AAAA,cAC/C,CAAW;AAAA,YACF;AACD,mBAAO,kBAAkB,kBAAkB,gBAAgB,KAAK,4BAA4B,0BAA0B,IAAI;UAC3H;AAAA,QACP,CAAK;AAAA,MACF;AACD,eAAS,iBAAiB,SAAS7gB,OAAM,SAAS;AAChD,YAAI,QAAQ;AACZ,eAAO,SAAU,QAAQ,KAAK;AAC5B,cAAI,gBAAgB;AAAO,kBAAM,IAAI,MAAM,8BAA8B;AACzE,cAAI,gBAAgB,OAAO;AACzB,gBAAI,YAAY;AAAQ,oBAAM;AAC9B,mBAAO,WAAU;AAAA,UAClB;AACD,eAAK,QAAQ,SAAS,QAAQ,QAAQ,MAAM,SAAO;AACjD,gBAAI,WAAW,QAAQ;AACvB,gBAAI,UAAU;AACZ,kBAAI,iBAAiB,oBAAoB,UAAU,OAAO;AAC1D,kBAAI,gBAAgB;AAClB,oBAAI,mBAAmB;AAAkB;AACzC,uBAAO;AAAA,cACR;AAAA,YACF;AACD,gBAAI,WAAW,QAAQ;AAAQ,sBAAQ,OAAO,QAAQ,QAAQ,QAAQ;AAAA,qBAAa,YAAY,QAAQ,QAAQ;AAC7G,kBAAI,qBAAqB;AAAO,sBAAM,QAAQ,aAAa,QAAQ;AACnE,sBAAQ,kBAAkB,QAAQ,GAAG;AAAA,YAC/C;AAAe,2BAAa,QAAQ,UAAU,QAAQ,OAAO,UAAU,QAAQ,GAAG;AAC1E,oBAAQ;AACR,gBAAI,SAAS,SAAS,SAASA,OAAM,OAAO;AAC5C,gBAAI,aAAa,OAAO,MAAM;AAC5B,kBAAI,QAAQ,QAAQ,OAAO,cAAc,kBAAkB,OAAO,QAAQ;AAAkB;AAC5F,qBAAO;AAAA,gBACL,OAAO,OAAO;AAAA,gBACd,MAAM,QAAQ;AAAA,cAC1B;AAAA,YACS;AACD,wBAAY,OAAO,SAAS,QAAQ,aAAa,QAAQ,SAAS,SAAS,QAAQ,MAAM,OAAO;AAAA,UACjG;AAAA,QACP;AAAA,MACG;AACD,eAAS,oBAAoB,UAAU,SAAS;AAC9C,YAAI,aAAa,QAAQ,QACvB,SAAS,SAAS,SAAS;AAC7B,YAAI,WAAc;AAAQ,iBAAO,QAAQ,WAAW,MAAM,YAAY,cAAc,SAAS,SAAS,cAAc,QAAQ,SAAS,UAAU,QAAQ,MAAM,QAAW,oBAAoB,UAAU,OAAO,GAAG,YAAY,QAAQ,WAAW,aAAa,eAAe,QAAQ,SAAS,SAAS,QAAQ,MAAM,IAAI,UAAU,sCAAsC,aAAa,UAAU,IAAI;AAClY,YAAI,SAAS,SAAS,QAAQ,SAAS,UAAU,QAAQ,GAAG;AAC5D,YAAI,YAAY,OAAO;AAAM,iBAAO,QAAQ,SAAS,SAAS,QAAQ,MAAM,OAAO,KAAK,QAAQ,WAAW,MAAM;AACjH,YAAI,OAAO,OAAO;AAClB,eAAO,OAAO,KAAK,QAAQ,QAAQ,SAAS,cAAc,KAAK,OAAO,QAAQ,OAAO,SAAS,SAAS,aAAa,QAAQ,WAAW,QAAQ,SAAS,QAAQ,QAAQ,MAAM,SAAY,QAAQ,WAAW,MAAM,oBAAoB,QAAQ,QAAQ,SAAS,SAAS,QAAQ,MAAM,IAAI,UAAU,kCAAkC,GAAG,QAAQ,WAAW,MAAM;AAAA,MACpW;AACD,eAAS,aAAa,MAAM;AAC1B,YAAI,QAAQ;AAAA,UACV,QAAQ,KAAK;AAAA,QACnB;AACI,aAAK,SAAS,MAAM,WAAW,KAAK,KAAK,KAAK,SAAS,MAAM,aAAa,KAAK,IAAI,MAAM,WAAW,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,MACzI;AACD,eAAS,cAAc,OAAO;AAC5B,YAAI,SAAS,MAAM,cAAc;AACjC,eAAO,OAAO,UAAU,OAAO,OAAO,KAAK,MAAM,aAAa;AAAA,MAC/D;AACD,eAASghB,SAAQ,aAAa;AAC5B,aAAK,aAAa,CAAC;AAAA,UACjB,QAAQ;AAAA,QACd,CAAK,GAAG,YAAY,QAAQ,cAAc,IAAI,GAAG,KAAK,MAAM,IAAE;AAAA,MAC3D;AACD,eAAS,OAAO,UAAU;AACxB,YAAI,UAAU;AACZ,cAAI,iBAAiB,SAAS;AAC9B,cAAI;AAAgB,mBAAO,eAAe,KAAK,QAAQ;AACvD,cAAI,cAAc,OAAO,SAAS;AAAM,mBAAO;AAC/C,cAAI,CAAC,MAAM,SAAS,MAAM,GAAG;AAC3B,gBAAIlhB,KAAI,IACN8B,QAAO,SAASA,QAAO;AACrB,qBAAO,EAAE9B,KAAI,SAAS;AAAS,oBAAI8gB,QAAO,KAAK,UAAU9gB,EAAC;AAAG,yBAAO8B,MAAK,QAAQ,SAAS9B,KAAI8B,MAAK,OAAO,OAAIA;AAC9G,qBAAOA,MAAK,QAAQ,QAAWA,MAAK,OAAO,MAAIA;AAAA,YAC3D;AACQ,mBAAOA,MAAK,OAAOA;AAAA,UACpB;AAAA,QACF;AACD,eAAO;AAAA,UACL,MAAM;AAAA,QACZ;AAAA,MACG;AACD,eAAS,aAAa;AACpB,eAAO;AAAA,UACL,OAAO;AAAA,UACP,MAAM;AAAA,QACZ;AAAA,MACG;AACD,aAAO,kBAAkB,YAAY,4BAA4Bif,gBAAe,IAAI,eAAe;AAAA,QACjG,OAAO;AAAA,QACP,cAAc;AAAA,MAClB,CAAG,GAAGA,gBAAe,4BAA4B,eAAe;AAAA,QAC5D,OAAO;AAAA,QACP,cAAc;AAAA,MACf,CAAA,GAAG,kBAAkB,cAAcE,QAAO,4BAA4B,mBAAmB,mBAAmB,GAAGnJ,SAAQ,sBAAsB,SAAU,QAAQ;AAC9J,YAAI,OAAO,cAAc,OAAO,UAAU,OAAO;AACjD,eAAO,CAAC,CAAC,SAAS,SAAS,qBAAqB,yBAAyB,KAAK,eAAe,KAAK;AAAA,MACtG,GAAKA,SAAQ,OAAO,SAAU,QAAQ;AAClC,eAAO,OAAO,iBAAiB,OAAO,eAAe,QAAQ,0BAA0B,KAAK,OAAO,YAAY,4BAA4BmJ,QAAO,QAAQ,mBAAmB,mBAAmB,IAAI,OAAO,YAAY,OAAO,OAAO,EAAE,GAAG;AAAA,MAC9O,GAAKnJ,SAAQ,QAAQ,SAAU,KAAK;AAChC,eAAO;AAAA,UACL,SAAS;AAAA,QACf;AAAA,MACA,GAAK,sBAAsB,cAAc,SAAS,GAAGmJ,QAAO,cAAc,WAAW,qBAAqB,WAAY;AAClH,eAAO;AAAA,MACR,CAAA,GAAGnJ,SAAQ,gBAAgB,eAAeA,SAAQ,QAAQ,SAAU,SAAS,SAAS5X,OAAM,aAAa,aAAa;AACrH,mBAAW,gBAAgB,cAAc;AACzC,YAAI,OAAO,IAAI,cAAcsD,MAAK,SAAS,SAAStD,OAAM,WAAW,GAAG,WAAW;AACnF,eAAO4X,SAAQ,oBAAoB,OAAO,IAAI,OAAO,KAAK,KAAM,EAAC,KAAK,SAAU,QAAQ;AACtF,iBAAO,OAAO,OAAO,OAAO,QAAQ,KAAK;QAC/C,CAAK;AAAA,MACF,GAAE,sBAAsB,EAAE,GAAGmJ,QAAO,IAAI,mBAAmB,WAAW,GAAGA,QAAO,IAAI,gBAAgB,WAAY;AAC/G,eAAO;AAAA,MACR,CAAA,GAAGA,QAAO,IAAI,YAAY,WAAY;AACrC,eAAO;AAAA,MACR,CAAA,GAAGnJ,SAAQ,OAAO,SAAU,KAAK;AAChC,YAAI,SAAS,OAAO,GAAG,GACrBvS,QAAO,CAAA;AACT,iBAASxF,QAAO;AAAQ,UAAAwF,MAAK,KAAKxF,IAAG;AACrC,eAAOwF,MAAK,WAAW,SAASzD,QAAO;AACrC,iBAAOyD,MAAK,UAAS;AACnB,gBAAIxF,OAAMwF,MAAK;AACf,gBAAIxF,QAAO;AAAQ,qBAAO+B,MAAK,QAAQ/B,MAAK+B,MAAK,OAAO,OAAIA;AAAA,UAC7D;AACD,iBAAOA,MAAK,OAAO,MAAIA;AAAA,QAC7B;AAAA,MACG,GAAEgW,SAAQ,SAAS,QAAQoJ,SAAQ,YAAY;AAAA,QAC9C,aAAaA;AAAA,QACb,OAAO,SAAS,MAAM,eAAe;AACnC,cAAI,KAAK,OAAO,GAAG,KAAK,OAAO,GAAG,KAAK,OAAO,KAAK,QAAQ,QAAW,KAAK,OAAO,OAAI,KAAK,WAAW,MAAM,KAAK,SAAS,QAAQ,KAAK,MAAM,QAAW,KAAK,WAAW,QAAQ,aAAa,GAAG,CAAC;AAAe,qBAAS,QAAQ;AAAM,sBAAQ,KAAK,OAAO,CAAC,KAAKJ,QAAO,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,KAAK,QAAQ;AAAA,QACrU;AAAA,QACD,MAAM,SAAS,OAAO;AACpB,eAAK,OAAO;AACZ,cAAI,aAAa,KAAK,WAAW,GAAG;AACpC,cAAI,YAAY,WAAW;AAAM,kBAAM,WAAW;AAClD,iBAAO,KAAK;AAAA,QACb;AAAA,QACD,mBAAmB,SAAS,kBAAkBhS,YAAW;AACvD,cAAI,KAAK;AAAM,kBAAMA;AACrB,cAAI,UAAU;AACd,mBAAS,OAAO,KAAK,QAAQ;AAC3B,mBAAO,OAAO,OAAO,SAAS,OAAO,MAAMA,YAAW,QAAQ,OAAO,KAAK,WAAW,QAAQ,SAAS,QAAQ,QAAQ,MAAM,SAAY,CAAC,CAAC;AAAA,UAC3I;AACD,mBAAS9O,KAAI,KAAK,WAAW,SAAS,GAAGA,MAAK,GAAG,EAAEA,IAAG;AACpD,gBAAI,QAAQ,KAAK,WAAWA,KAC1B,SAAS,MAAM;AACjB,gBAAI,WAAW,MAAM;AAAQ,qBAAO,OAAO,KAAK;AAChD,gBAAI,MAAM,UAAU,KAAK,MAAM;AAC7B,kBAAI,WAAW8gB,QAAO,KAAK,OAAO,UAAU,GAC1C,aAAaA,QAAO,KAAK,OAAO,YAAY;AAC9C,kBAAI,YAAY,YAAY;AAC1B,oBAAI,KAAK,OAAO,MAAM;AAAU,yBAAO,OAAO,MAAM,UAAU,IAAE;AAChE,oBAAI,KAAK,OAAO,MAAM;AAAY,yBAAO,OAAO,MAAM,UAAU;AAAA,cACjE,WAAU,UAAU;AACnB,oBAAI,KAAK,OAAO,MAAM;AAAU,yBAAO,OAAO,MAAM,UAAU,IAAE;AAAA,cAC5E,OAAiB;AACL,oBAAI,CAAC;AAAY,wBAAM,IAAI,MAAM,wCAAwC;AACzE,oBAAI,KAAK,OAAO,MAAM;AAAY,yBAAO,OAAO,MAAM,UAAU;AAAA,cACjE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACD,QAAQ,SAAS,OAAO3f,OAAM,KAAK;AACjC,mBAASnB,KAAI,KAAK,WAAW,SAAS,GAAGA,MAAK,GAAG,EAAEA,IAAG;AACpD,gBAAI,QAAQ,KAAK,WAAWA;AAC5B,gBAAI,MAAM,UAAU,KAAK,QAAQ8gB,QAAO,KAAK,OAAO,YAAY,KAAK,KAAK,OAAO,MAAM,YAAY;AACjG,kBAAI,eAAe;AACnB;AAAA,YACD;AAAA,UACF;AACD,2BAAiB,YAAY3f,SAAQ,eAAeA,UAAS,aAAa,UAAU,OAAO,OAAO,aAAa,eAAe,eAAe;AAC7I,cAAI,SAAS,eAAe,aAAa,aAAa,CAAA;AACtD,iBAAO,OAAO,OAAOA,OAAM,OAAO,MAAM,KAAK,gBAAgB,KAAK,SAAS,QAAQ,KAAK,OAAO,aAAa,YAAY,oBAAoB,KAAK,SAAS,MAAM;AAAA,QACjK;AAAA,QACD,UAAU,SAAS,SAAS,QAAQ,UAAU;AAC5C,cAAI,YAAY,OAAO;AAAM,kBAAM,OAAO;AAC1C,iBAAO,YAAY,OAAO,QAAQ,eAAe,OAAO,OAAO,KAAK,OAAO,OAAO,MAAM,aAAa,OAAO,QAAQ,KAAK,OAAO,KAAK,MAAM,OAAO,KAAK,KAAK,SAAS,UAAU,KAAK,OAAO,SAAS,aAAa,OAAO,QAAQ,aAAa,KAAK,OAAO,WAAW;AAAA,QACrQ;AAAA,QACD,QAAQ,SAAS,OAAO,YAAY;AAClC,mBAASnB,KAAI,KAAK,WAAW,SAAS,GAAGA,MAAK,GAAG,EAAEA,IAAG;AACpD,gBAAI,QAAQ,KAAK,WAAWA;AAC5B,gBAAI,MAAM,eAAe;AAAY,qBAAO,KAAK,SAAS,MAAM,YAAY,MAAM,QAAQ,GAAG,cAAc,KAAK,GAAG;AAAA,UACpH;AAAA,QACF;AAAA,QACD,SAAS,SAAS,OAAO,QAAQ;AAC/B,mBAASA,KAAI,KAAK,WAAW,SAAS,GAAGA,MAAK,GAAG,EAAEA,IAAG;AACpD,gBAAI,QAAQ,KAAK,WAAWA;AAC5B,gBAAI,MAAM,WAAW,QAAQ;AAC3B,kBAAI,SAAS,MAAM;AACnB,kBAAI,YAAY,OAAO,MAAM;AAC3B,oBAAI,SAAS,OAAO;AACpB,8BAAc,KAAK;AAAA,cACpB;AACD,qBAAO;AAAA,YACR;AAAA,UACF;AACD,gBAAM,IAAI,MAAM,uBAAuB;AAAA,QACxC;AAAA,QACD,eAAe,SAAS,cAAc,UAAU,YAAY,SAAS;AACnE,iBAAO,KAAK,WAAW;AAAA,YACrB,UAAU,OAAO,QAAQ;AAAA,YACzB;AAAA,YACA;AAAA,UACR,GAAS,WAAW,KAAK,WAAW,KAAK,MAAM,SAAY;AAAA,QACtD;AAAA,MACF,GAAE8X;AAAA,IACJ;AACD,IAAAtC,QAAA,UAAiB,qBAAqBA,QAA4B,QAAA,aAAA,MAAMA,QAAO,QAAQ,aAAaA,QAAO;AAAA;AC7S3G,MAAI,UAAU3N,qBAAwC,QAAA;MACtD,cAAiB;AAGjB,MAAI;AACF,yBAAqB;AAAA,EACvB,SAAS,sBAAP;AACA,QAAI,OAAO,eAAe,UAAU;AAClC,iBAAW,qBAAqB;AAAA,IACpC,OAAS;AACL,eAAS,KAAK,wBAAwB,EAAE,OAAO;AAAA,IAChD;AAAA,EACH;ACwBA,WAAS,WAAW,aAAa,SAAS;AAGxC,QAAI,cACA,aACA,kBACA,UACA,aACA;AAEJ,cAAU,WAAW;AACrB,kBAAc,QAAQ,eAAe;AACrC,uBAAmB,QAAQ,eAAe;AAC1C,kBAAc,QAAQ,eAAe;AACrC,eAAW,QAAQ,YAAY,IAAI,WAAW,QAAQ,YAAY;AAClE,kBAAc,QAAQ,eAAe,CAAC,KAAK,QAAQ,OAAO,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,OAAO,QAAQ,QAAQ,WAAW,KAAK,OAAO,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,KAAK,KAAK,UAAU,QAAQ,OAAO,OAAO,OAAO,WAAW,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAEjS,aAASwZ,UAAS;AAEhB,WAAK,MAAM;AACX,WAAK,QAAQ;AACb,WAAK,eAAe;AACpB,WAAK,OAAO;AAAA,QACV,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,SAAS;AAAA,MACf;AACI,WAAK,WAAW;AAChB,WAAK,aAAa,KAAK,aAAa,KAAK,YAAY,KAAK,aAAa;AAEvE,WAAK,QAAQ;AAAA,QACX,YAAY,SAAU,MAAM,EAAE;AAAA,QAC9B,cAAc,+FAA+F,MAAM,GAAG;AAAA,QACtH,cAAc,kBAAkB,MAAM,GAAG;AAAA,QACzC,UAAU,SAAU,MAAM,KAAK;AAC7B,mBAASrhB,KAAE,GAAGA,KAAE,IAAI,QAAQA,MAAK;AAC/B,gBAAI,SAAS,IAAIA,KAAI;AACnB,qBAAO;AAAA,YACR;AAAA,UACF;AACD,iBAAO;AAAA,QACR;AAAA,MACF;AAED,WAAK,cAAc,WAAY;AAE7B,YAAI,aAAa,IACb,UAAU,CAAE,GACZ,QAAQ;AAEZ,eAAO,KAAK,MAAM,OAAO,KAAK,GAAG,MAAM,KAAK;AAC1C,cAAI,KAAK,OAAO,KAAK,MAAM,QAAQ;AACjC,mBAAO,QAAQ,SAAO,QAAQ,KAAK,EAAE,IAAE,CAAC,IAAI,QAAQ;AAAA,UACrD;AAED,uBAAa,KAAK,MAAM,OAAO,KAAK,GAAG;AACvC,eAAK;AACL,eAAK;AAEL,cAAI,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,UAAU,GAAG;AAC1D,gBAAI,QAAQ,QAAQ;AAClB,sBAAQ;AAAA,YACT;AACD,iBAAK;AACL;AAAA,UACD,WACQ,OAAO;AACd,gBAAI,KAAK,mBAAmB,KAAK,UAAU;AACzC,sBAAQ,KAAK,IAAI;AACjB,uBAASA,KAAE,GAAGA,KAAE,KAAK,cAAcA,MAAK;AACtC,wBAAQ,KAAK,KAAK,aAAa;AAAA,cAChC;AACD,mBAAK,kBAAkB;AAAA,YACxB,OACG;AACF,sBAAQ,KAAK,GAAG;AAChB,mBAAK;AAAA,YACN;AACD,oBAAQ;AAAA,UACT;AACD,kBAAQ,KAAK,UAAU;AAAA,QACxB;AACD,eAAO,QAAQ,SAAO,QAAQ,KAAK,EAAE,IAAE;AAAA,MACxC;AAED,WAAK,kBAAkB,SAAU,MAAM;AACrC,YAAI,KAAK,OAAO,KAAK,MAAM,QAAQ;AACjC,iBAAO,CAAC,IAAI,QAAQ;AAAA,QACrB;AAED,YAAI,UAAU;AACd,YAAI,YAAY,IAAI,OAAO,OAAS,OAAO,SAAU,KAAK;AAC1D,kBAAU,YAAY,KAAK;AAC3B,YAAI,YAAY,UAAU,KAAK,KAAK,KAAK;AACzC,YAAI,aAAa,YAAU,UAAU,QAAM,KAAK,MAAM;AACtD,YAAG,KAAK,MAAM,YAAY;AACxB,oBAAU,KAAK,MAAM,UAAU,KAAK,KAAK,UAAU;AACnD,eAAK,MAAM;AAAA,QACZ;AACD,eAAO;AAAA,MACR;AAED,WAAK,aAAa,SAAU,KAAI;AAC9B,YAAI,KAAK,KAAK,MAAM,UAAU;AAC5B,eAAK,KAAK,MAAM;AAChB,eAAK,KAAK,MAAM,KAAK,KAAK,MAAM,YAAY,KAAK;AAAA,QAClD,OACI;AACH,eAAK,KAAK,MAAM,WAAW;AAC3B,eAAK,KAAK,MAAM,KAAK,KAAK,MAAM,YAAY,KAAK;AAAA,QAClD;AACD,aAAK,KAAK,MAAM,KAAK,KAAK,MAAM,WAAW,YAAY,KAAK,KAAK;AACjE,aAAK,KAAK,SAAS,MAAM,KAAK,KAAK,MAAM;AAAA,MAC1C;AAED,WAAK,eAAe,SAAU,KAAK;AACjC,YAAI,KAAK,KAAK,MAAM,UAAU;AAC5B,cAAI,cAAc,KAAK,KAAK;AAC5B,iBAAO,aAAa;AAClB,gBAAI,MAAM,KAAK,KAAK,MAAM,aAAa,aAAa;AAClD;AAAA,YACD;AACD,0BAAc,KAAK,KAAK,cAAc;AAAA,UACvC;AACD,cAAI,aAAa;AACf,iBAAK,eAAe,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM;AACpD,iBAAK,KAAK,SAAS,KAAK,KAAK,cAAc;AAAA,UAC5C;AACD,iBAAO,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM,WAAW;AAClD,iBAAO,KAAK,KAAK,MAAM,KAAK,KAAK,MAAM;AACvC,cAAI,KAAK,KAAK,MAAM,YAAY,GAAG;AACjC,mBAAO,KAAK,KAAK,MAAM;AAAA,UACxB,OACI;AACH,iBAAK,KAAK,MAAM;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAED,WAAK,UAAU,WAAY;AACzB,YAAI,aAAa,IACb,UAAU,CAAE,GACZ,QAAQ,OACR,WAAW;AAEf,WAAG;AACD,cAAI,KAAK,OAAO,KAAK,MAAM,QAAQ;AACjC,mBAAO,QAAQ,SAAO,QAAQ,KAAK,EAAE,IAAE,CAAC,IAAI,QAAQ;AAAA,UACrD;AAED,uBAAa,KAAK,MAAM,OAAO,KAAK,GAAG;AACvC,eAAK;AACL,eAAK;AAEL,cAAI,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,UAAU,GAAG;AAC1D,oBAAQ;AACR,iBAAK;AACL;AAAA,UACD;AAED,cAAI,eAAe,OAAO,eAAe,KAAK;AAC5C,gBAAI,CAAC,QAAQ,MAAM,QAAQ,OAAO,KAAK;AACrC,4BAAc,KAAK,gBAAgB,UAAU;AAC7C,sBAAQ;AAAA,YACT;AAAA,UACF;AAED,cAAI,eAAe,KAAK;AACtB,oBAAQ;AAAA,UACT;AAED,cAAI,QAAQ,UAAU,QAAQ,QAAQ,SAAO,OAAO,OAAO,eAAe,OACnE,OAAO;AACZ,gBAAI,KAAK,mBAAmB,KAAK,UAAU;AACzC,mBAAK,cAAc,OAAO,OAAO;AACjC,mBAAK,kBAAkB;AAAA,YACxB,OACI;AACH,sBAAQ,KAAK,GAAG;AAChB,mBAAK;AAAA,YACN;AACD,oBAAQ;AAAA,UACT;AACD,cAAI,eAAe,KAAK;AACpB,wBAAY,KAAK,MAAM;AAAA,UAC1B;AACD,kBAAQ,KAAK,UAAU;AAAA,QAC/B,SAAe,eAAe;AAExB,YAAI,eAAe,QAAQ,KAAK,EAAE;AAClC,YAAI;AACJ,YAAI,aAAa,QAAQ,GAAG,KAAK,IAAI;AACnC,sBAAY,aAAa,QAAQ,GAAG;AAAA,QACrC,OACI;AACH,sBAAY,aAAa,QAAQ,GAAG;AAAA,QACrC;AACD,YAAIshB,aAAY,aAAa,UAAU,GAAG,SAAS,EAAE;AACrD,YAAI,aAAa,OAAO,aAAa,SAAO,CAAC,MAAM,OAC/C,KAAK,MAAM,SAASA,YAAW,KAAK,MAAM,YAAY,GAAG;AAC3D,eAAK,WAAW;AAAA,QACjB,WACQA,eAAc,UAAU;AAC/B,eAAK,WAAWA,UAAS;AACzB,eAAK,WAAW;AAAA,QACjB,WACQA,eAAc,SAAS;AAC9B,eAAK,WAAWA,UAAS;AACzB,eAAK,WAAW;AAAA,QACjB,WACQ,KAAK,MAAM,SAASA,YAAW,WAAW,GAAG;AACpD,cAAIC,WAAU,KAAK,gBAAgB,OAAKD,aAAU,KAAK,YAAY;AACnE,kBAAQ,KAAKC,QAAO;AAEpB,cAAI,YAAY,KAAK,KAAK,MAAM,SAAS,KAAK,MAAM,OAAO,YAAY,CAAC,GAAG,KAAK,MAAM,UAAU,GAAE;AAC9F,oBAAQ,OAAO,GAAG,GAAG,KAAK,MAAM,OAAO,YAAY,CAAC,CAAC;AAAA,UACxD;AACD,oBAAU,KAAK,MAAM;AACrB,cAAI,KAAK,MAAM,SAAS,KAAK,MAAM,OAAO,UAAU,CAAC,GAAG,KAAK,MAAM,UAAU,GAAE;AAC3E,oBAAQ,KAAK,KAAK,MAAM,OAAO,UAAU,CAAC,CAAC;AAAA,UAC9C;AACD,eAAK,WAAW;AAAA,QACjB,WACQD,WAAU,OAAO,CAAC,MAAM,KAAK;AACpC,cAAIA,WAAU,QAAQ,KAAK,KAAK,IAAI;AAClC,gBAAI,aAAa,QAAQ,KAAK,KAAK,IAAI;AACrC,kBAAIC,WAAU,KAAK,gBAAgB,OAAO,YAAY;AACtD,sBAAQ,KAAKA,QAAO;AAAA,YACrB;AACD,iBAAK,WAAW;AAAA,UACjB,WACQD,WAAU,QAAQ,QAAQ,KAAK,IAAI;AAC1C,iBAAK,WAAW;AAChB,iBAAK,SAAQ;AAAA,UACd,WACQA,WAAU,QAAQ,SAAS,KAAK,IAAI;AAC3C,gBAAIC,WAAU,KAAK,gBAAgB,OAAO,YAAY;AACtD,oBAAQ,KAAKA,QAAO;AACpB,iBAAK,WAAW;AAAA,UACjB,OACI;AACH,gBAAIA,WAAU,KAAK,gBAAgB,OAAO,YAAY;AACtD,oBAAQ,KAAKA,QAAO;AACpB,iBAAK,WAAW;AAAA,UACjB;AAAA,QACF,OACI;AACH,cAAID,WAAU,OAAO,CAAC,MAAM,KAAK;AAC/B,iBAAK,aAAaA,WAAU,UAAU,CAAC,CAAC;AACxC,iBAAK,WAAW;AAAA,UACjB,OACI;AACH,iBAAK,WAAWA,UAAS;AACzB,iBAAK,WAAW;AAAA,UACjB;AACD,cAAI,KAAK,MAAM,SAASA,YAAW,KAAK,MAAM,YAAY,GAAG;AAC3D,iBAAK,cAAc,MAAM,KAAK,MAAM;AAAA,UACrC;AAAA,QACF;AACD,eAAO,QAAQ,KAAK,EAAE;AAAA,MACvB;AAED,WAAK,kBAAkB,SAAUrI,YAAW,UAAU;AAEpD,YAAI,YAAY,SAAS,YAAW,EAAG,QAAQA,UAAS,KAAK,IAAI;AAC/D,iBAAO;AAAA,QACR;AACD,YAAI,aAAa;AACjB,YAAI,UAAU;AACd,YAAI,QAAQ;AACZ,WAAG;AAED,cAAI,KAAK,OAAO,KAAK,MAAM,QAAQ;AACjC,mBAAO;AAAA,UACR;AAED,uBAAa,KAAK,MAAM,OAAO,KAAK,GAAG;AACvC,eAAK;AAEL,cAAI,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,UAAU,GAAG;AAC1D,gBAAI,CAAC,OAAO;AACV,mBAAK;AACL;AAAA,YACD;AACD,gBAAI,eAAe,QAAQ,eAAe,MAAM;AAC9C,yBAAW;AAOX,mBAAK,kBAAkB;AACvB;AAAA,YACD;AAAA,UACF;AACD,qBAAW;AACX,eAAK;AACL,kBAAQ;AAAA,QAGhB,SAAe,QAAQ,YAAa,EAAC,QAAQA,UAAS,KAAK;AACrD,eAAO;AAAA,MACR;AAED,WAAK,YAAY,WAAY;AAC3B,YAAIuI;AAEJ,YAAI,KAAK,eAAe,mBAAmB,KAAK,eAAe,gBAAgB;AAC9E,cAAIrgB,QAAO,KAAK,WAAW,OAAO,CAAC;AACnC,UAAAqgB,SAAQ,KAAK,gBAAgBrgB,KAAI;AAChC,cAAI,OAAOqgB,WAAU,UAAU;AAC7B,mBAAOA;AAAA,UACR;AACD,iBAAO,CAACA,QAAO,QAAQrgB,KAAI;AAAA,QAC5B;AACD,YAAI,KAAK,iBAAiB,WAAW;AACnC,UAAAqgB,SAAQ,KAAK;AACb,cAAI,OAAOA,WAAU,UAAU;AAC7B,mBAAOA;AAAA,UACR,OACI;AACH,mBAAO,CAACA,QAAO,YAAY;AAAA,UAC5B;AAAA,QACF;AAED,YAAI,KAAK,iBAAiB,OAAO;AAC/B,UAAAA,SAAQ,KAAK;AACb,cAAI,OAAOA,WAAU,UAAU;AAC7B,mBAAOA;AAAA,UACR,OACI;AACH,gBAAI,gBAAgB,YAAY,KAAK;AACrC,mBAAO,CAACA,QAAO,aAAa;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAED,WAAK,kBAAkB,SAAU,OAAO;AACtC,gBAAQ,KAAK,eAAe,SAAS;AACrC,YAAI,QAAQ;AACV,iBAAO;AAET,eAAO,MAAM,QAAQ,CAAC,EAAE,KAAK,KAAK,aAAa;AAAA,MAChD;AAGD,WAAK,UAAU,SAAU,WAAWC,mBAAkBC,cAAaC,WAAUC,cAAa;AAExF,aAAK,QAAQ,aAAa;AAC1B,aAAK,SAAS;AACd,aAAK,mBAAmBH;AACxB,aAAK,gBAAgB;AACrB,aAAK,cAAcC;AACnB,aAAK,cAAcE;AACnB,aAAK,eAAe;AACpB,aAAK,WAAWD;AAChB,aAAK,kBAAkB;AAEvB,iBAAS3hB,KAAE,GAAGA,KAAE,KAAK,aAAaA,MAAK;AACrC,eAAK,iBAAiB,KAAK;AAAA,QAC5B;AAED,aAAK,gBAAgB,SAAU,QAAQ,KAAK;AAC1C,eAAK,kBAAkB;AACvB,cAAI,CAAC,OAAO,CAAC,IAAI,QAAQ;AACvB;AAAA,UACD;AACD,cAAI,CAAC,QAAQ;AACX,mBAAO,KAAK,MAAM,SAAS,IAAI,IAAI,SAAO,IAAI,KAAK,MAAM,UAAU,GAAG;AACpE,kBAAI,IAAG;AAAA,YACR;AAAA,UACF;AACD,cAAI,KAAK,IAAI;AACb,mBAASA,KAAE,GAAGA,KAAE,KAAK,cAAcA,MAAK;AACtC,gBAAI,KAAK,KAAK,aAAa;AAAA,UAC5B;AAAA,QACF;AAED,aAAK,cAAc,SAAUW,OAAM;AACjC,eAAK,OAAO,KAAKA,KAAI;AAAA,QACtB;AAED,aAAK,SAAS,WAAY;AACxB,eAAK;AAAA,QACN;AAED,aAAK,WAAW,WAAY;AAC1B,cAAI,KAAK,eAAe,GAAG;AACzB,iBAAK;AAAA,UACN;AAAA,QACF;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAID,mBAAe,IAAI0gB;AACnB,iBAAa,QAAQ,aAAa,kBAAkB,aAAa,UAAU,WAAW;AAEtF,WAAO,MAAM;AACT,UAAI/H,KAAI,aAAa;AACrB,mBAAa,aAAaA,GAAE;AAC5B,mBAAa,aAAaA,GAAE;AAE9B,UAAI,aAAa,eAAe,UAAU;AACxC;AAAA,MACD;AAED,cAAQ,aAAa,YAAU;AAAA,QAC7B,KAAK;AACH,uBAAa,cAAc,OAAO,aAAa,MAAM;AACrD,uBAAa,YAAY,aAAa,UAAU;AAChD,uBAAa,OAAM;AACnB,uBAAa,eAAe;AAC5B;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,uBAAa,cAAc,OAAO,aAAa,MAAM;AACrD,uBAAa,YAAY,aAAa,UAAU;AAChD,uBAAa,eAAe;AAC5B;AAAA,QACF,KAAK;AAEH,cAAI,aAAa,eAAe,gBAAgB,aAAa,cAAc,IAAI;AAC3E,gBAAI,WAAW,aAAa,WAAW,MAAM,KAAK,EAAE;AACpD,gBAAI,iCAAiC,aAAa,OAAO,aAAa,OAAO,SAAQ,GAAG,MAAM,WAAW;AACzG,gBAAI,mCAAmC,QAAQ,+BAA+B,OAAO;AACjF,2BAAa,cAAc,MAAM,aAAa,MAAM;AAAA,UAC3D;AACD,uBAAa,YAAY,aAAa,UAAU;AAChD,uBAAa,eAAe;AAC5B;AAAA,QACF,KAAK;AAEH,cAAI,YAAY,aAAa,WAAW,MAAM,gBAAgB;AAC9D,cAAI,CAAC,aAAa,CAAC,aAAa,MAAM,SAAS,UAAU,IAAI,WAAW,GAAE;AACtE,yBAAa,cAAc,OAAO,aAAa,MAAM;AAAA,UACxD;AACD,uBAAa,YAAY,aAAa,UAAU;AAChD,uBAAa,eAAe;AAC5B;AAAA,QACF,KAAK;AACH,cAAI,aAAa,eAAe,IAAI;AAClC,yBAAa,YAAY,aAAa,UAAU;AAAA,UACjD;AACD,uBAAa,eAAe;AAC5B;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,cAAI,aAAa,eAAe,IAAI;AAClC,yBAAa,OAAO,KAAK,IAAI;AAC7B,gBAAI3Y,QAAO,aAAa;AACxB,gBAAI,aAAa,cAAc,aAAa;AAC1C,kBAAI,cAAc,OAAO,eAAe,cAAc;AAAA,YAClE,WAAqB,aAAa,cAAc,YAAY;AAChD,kBAAI,cAAc,OAAO,gBAAgB,cAAc;AAAA,YACxD;AAED,gBAAI,QAAQ,kBAAkB,QAAQ;AACpC,kBAAI,sBAAsB;AAAA,YACtC,WAAqB,QAAQ,kBAAkB,YAAY;AAC/C,kBAAI,sBAAsB,CAAC,aAAa;AAAA,YACpD,OAAiB;AACL,kBAAI,sBAAsB;AAAA,YAC3B;AAED,gBAAI,cAAc,aAAa,gBAAgB,mBAAmB;AAClE,gBAAI,aAAa;AAEf,cAAAA,QAAO,YAAYA,MAAK,QAAQ,QAAQ,WAAW,GAAG,OAAO;AAAA,YACzE,OAAiB;AAEL,kBAAI,QAAQA,MAAK,MAAM,MAAM,EAAE;AAC/B,kBAAI,SAAS,MAAM,MAAM,WAAW,EAAE,GAAG,MAAM,aAAa,aAAa,EAAE,SAAS;AACpF,kBAAI,WAAW,aAAa,gBAAgB,sBAAqB,MAAM;AACvE,cAAAA,QAAOA,MAAK,QAAQ,QAAQ,WAAW,EAC/B,QAAQ,eAAe,OAAO,QAAQ,EACtC,QAAQ,QAAQ,EAAE;AAAA,YAC3B;AACD,gBAAIA,OAAM;AACR,2BAAa,YAAYA,KAAI;AAC7B,2BAAa,cAAc,MAAM,aAAa,MAAM;AAAA,YACrD;AAAA,UACF;AACD,uBAAa,eAAe;AAC5B;AAAA,MACH;AACD,mBAAa,aAAa,aAAa;AACvC,mBAAa,YAAY,aAAa;AAAA,IACvC;AACD,WAAO,aAAa,OAAO,KAAK,EAAE;AAAA,EACpC;AAEA,MAAA2F,SAAiB;AAAA,IACf,aAAa;AAAA,EACf;ACngBA,MAAIub,WAAS,KAAK,UAAU,KAAK;AAKjC,MAAI,MAAM;AAEV,MAAI7hB,MAAI;AACR,SAAOA,OAAK;AAGV,WAAOA,IAAE,SAAS,EAAE;AAAA,EACtB;AAEAA,QAAI;AACJ,SAAOA,QAAM,IAAI;AACf,WAAOA,IAAE,SAAS,EAAE,EAAE,YAAa;AAAA,EACrC;MAEA,gBAAiB,SAAUS,OAAM;AAC/B,QAAIyD,MAAK;AACT,QAAI,QAAQ2d,SAAO,gBAAgB,IAAI,WAAWphB,SAAQ,EAAE,CAAC;AAC7DT,UAAIS,SAAQ;AAGZ,WAAOT,OAAK;AAKV,MAAAkE,OAAM,IAAI,MAAMlE,OAAK;AAAA,IACtB;AACD,WAAOkE;AAAA,EACT;;ACrDe,WAAS,mBAAmB,YAAY,UAAU;AAC/D,QAAI,YAAY,WAAW,OAAO,uBAAuB,WAAW,UAAU,KAAK,UAAU;AAE7F,QAAI,UAAU,SAAS4d,SAAQ,IAAI;AACjC,UAAI,WAAW,WAAW;AAC1B,eAAS,EAAE;AACX,eAAS,IAAI,UAAU,WAAW,KAAK;AAAA,IAC3C;AAEE,QAAI,WAAW,OAAO,qBAAqB;AACzC,iBAAW,OAAO,sBAAsB;AAAA,IAC5C,OAAS;AACL,iBAAW,WAAW;AAAA,IACvB;AAAA,EACH;ACdA,WAAS,SAAS,UAAU,aAAa,YAAY;AACnD,QAAI,eAAe,aAAa;AAC9B,aAAO;AAAA,IACR;AAED,QAAI,CAAC,YAAY,WAAW,CAAC,YAAY,QAAQ;AAAS,aAAO;AACjE,QAAI,MAAM,YAAY,QAAQ,QAAQ,IAAI,SAAUC,cAAa/hB,IAAG;AAClE,aAAO,SAAS,GAAG,OAAO,UAAU,WAAWA,EAAC,GAAG+hB,cAAa,UAAU;AAAA,IAC9E,CAAG,EAAE,OAAO,SAAUC,MAAK;AACvB,aAAO,MAAM,QAAQA,IAAG,KAAKA,KAAI;AAAA,IACrC,CAAG,EAAE;AACH,WAAO;AAAA,EACT;AAEe,WAAS,WAAW/f,MAAKrB,OAAM;AAC5C,QAAI,OAAO,SAAS,CAAE,GAAEqB,MAAKrB,KAAI;AAEjC,QAAI,MAAM;AACR,aAAO,KAAK,OAAO,SAAU,SAAS,MAAM;AAG1C,YAAI,SAAS,aAAa,QAAQ,QAAQ,SAAS,OAAO,WAAW;AACnE,iBAAO;AAAA,QACR;AAED,gBAAQ,KAAK,IAAI;AACjB,eAAO;AAAA,MACR,GAAE,CAAE,CAAA;AAAA,IACN;AAAA,EACH;AAEA,WAAS,aAAa,UAAU,aAAa,YAAY;AACvD,QAAI,eAAe,aAAa;AAC9B,aAAO;AAAA,IACR;AAED,QAAI,CAAC,YAAY;AAAS,aAAO;AAEjC,QAAI,YAAY,YAAY,YAAY;AACtC,aAAO,SAAS,OAAO,SAAS;AAAA,IACjC;AAED,QAAI,MAAM,YAAY,QAAQ,IAAI,SAAUmhB,cAAa/hB,IAAG;AAC1D,aAAO,aAAa,GAAG,OAAO,UAAU,WAAWA,EAAC,GAAG+hB,cAAa,UAAU;AAAA,IAClF,CAAG,EAAE,OAAO,SAAUC,MAAK;AACvB,aAAO,MAAM,QAAQA,IAAG,KAAKA,KAAI;AAAA,IACrC,CAAG,EAAE;AACH,WAAO;AAAA,EACT;AAEO,WAAS,eAAe/f,MAAKrB,OAAM;AACxC,QAAI,OAAO,aAAa,CAAE,GAAEqB,MAAKrB,KAAI;AAErC,QAAI,MAAM;AACR,aAAO,KAAK,OAAO,SAAU,SAAS,MAAM;AAC1C,gBAAQ,KAAK,IAAI;AAEjB,YAAI,SAAS,WAAW;AACtB,kBAAQ,KAAK,SAAS;AAAA,QACvB;AAED,eAAO;AAAA,MACR,GAAE,CAAE,CAAA;AAAA,IACN;AAAA,EACH;AC/De,WAAS,sBAAsB;AAC5C,WAAO;AAAA,EACT;ACDA,WAASyb,UAAQ,KAAK;AAAE;AAA2B,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAO,OAAOA;AAAA,MAAI;AAAA,IAAK,OAAM;AAAEJ,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,MAAI;AAAA,IAAG;AAAG,WAAOJ,UAAQ,GAAG;AAAA,EAAI;AAE1X,WAAS4F,qBAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQliB,MAAK,KAAK;AAAE,QAAI;AAAE,UAAI,OAAO,IAAIA,MAAK,GAAG;AAAG,UAAI,QAAQ,KAAK;AAAA,aAAgB,OAAP;AAAgB,aAAO,KAAK;AAAG;AAAA,IAAS;AAAC,QAAI,KAAK,MAAM;AAAE,cAAQ,KAAK;AAAA,WAAU;AAAE,cAAQ,QAAQ,KAAK,EAAE,KAAK,OAAO,MAAM;AAAA;EAAM;AAEzQ,WAASmiB,oBAAkB,IAAI;AAAE,WAAO,WAAY;AAAE,UAAIhiB,QAAO,MAAM,OAAO;AAAW,aAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAAE,YAAI,MAAM,GAAG,MAAMA,OAAM,IAAI;AAAG,iBAAS,MAAM,OAAO;AAAE+hB,+BAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ,KAAK;AAAA,QAAI;AAAC,iBAAS,OAAO,KAAK;AAAEA,+BAAmB,KAAK,SAAS,QAAQ,OAAO,QAAQ,SAAS,GAAG;AAAA;AAAK,cAAM,MAAS;AAAA,OAAI;AAAA,IAAI;AAAA,EAAG;AAErY,WAAS,eAAe,KAAKjiB,IAAG;AAAE,WAAO,gBAAgB,GAAG,KAAK,sBAAsB,KAAKA,EAAC,KAAK,4BAA4B,KAAKA,EAAC,KAAK,iBAAgB;AAAA,EAAK;AAE9J,WAAS,mBAAmB;AAAE,UAAM,IAAI,UAAU,2IAA2I;AAAA,EAAI;AAEjM,WAAS,4BAA4BiW,IAAG,QAAQ;AAAE,QAAI,CAACA;AAAG;AAAQ,QAAI,OAAOA,OAAM;AAAU,aAAO,kBAAkBA,IAAG,MAAM;AAAG,QAAIjV,KAAI,OAAO,UAAU,SAAS,KAAKiV,EAAC,EAAE,MAAM,GAAG,EAAE;AAAG,QAAIjV,OAAM,YAAYiV,GAAE;AAAa,MAAAjV,KAAIiV,GAAE,YAAY;AAAM,QAAIjV,OAAM,SAASA,OAAM;AAAO,aAAO,MAAM,KAAKiV,EAAC;AAAG,QAAIjV,OAAM,eAAe,2CAA2C,KAAKA,EAAC;AAAG,aAAO,kBAAkBiV,IAAG,MAAM;AAAA,EAAI;AAEha,WAAS,kBAAkB,KAAK,KAAK;AAAE,QAAI,OAAO,QAAQ,MAAM,IAAI;AAAQ,YAAM,IAAI;AAAQ,aAASjW,KAAI,GAAG,OAAO,IAAI,MAAM,GAAG,GAAGA,KAAI,KAAKA,MAAK;AAAE,WAAKA,MAAK,IAAIA;AAAA,IAAK;AAAC,WAAO;AAAA,EAAO;AAEvL,WAAS,sBAAsB,KAAKA,IAAG;AAAE,QAAI,OAAO,WAAW,eAAe,EAAE,OAAO,YAAY,OAAO,GAAG;AAAI;AAAQ,QAAI,OAAO,CAAA;AAAI,QAAI,KAAK;AAAM,QAAI,KAAK;AAAO,QAAI,KAAK;AAAW,QAAI;AAAE,eAAS,KAAK,IAAI,OAAO,UAAS,GAAI,IAAI,EAAE,MAAM,KAAK,GAAG,KAAI,GAAI,OAAO,KAAK,MAAM;AAAE,aAAK,KAAK,GAAG,KAAK;AAAG,YAAIA,MAAK,KAAK,WAAWA;AAAG;AAAA,MAAM;AAAA,aAAY,KAAP;AAAc,WAAK;AAAM,WAAK;AAAA,cAAe;AAAE,UAAI;AAAE,YAAI,CAAC,MAAM,GAAG,aAAa;AAAM,aAAG;MAAY,UAAW;AAAE,YAAI;AAAI,gBAAM;AAAA,MAAK;AAAA,IAAA;AAAG,WAAO;AAAA,EAAO;AAEze,WAAS,gBAAgB,KAAK;AAAE,QAAI,MAAM,QAAQ,GAAG;AAAG,aAAO;AAAA,EAAM;AAErE,WAAS4b,kBAAgB,UAAU,aAAa;AAAE,QAAI,EAAE,oBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU,mCAAmC;AAAA,IAAE;AAAA,EAAI;AAEzJ,WAASE,YAAU,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU,oDAAoD;AAAA,IAAI;AAAC,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,QAAI;AAAYY,wBAAgB,UAAU,UAAU;AAAA,EAAI;AAEjY,WAASA,kBAAgBzG,IAAGlV,IAAG;AAAE2b,wBAAkB,OAAO,kBAAkB,SAASA,iBAAgBzG,IAAGlV,IAAG;AAAE,MAAAkV,GAAE,YAAYlV;AAAG,aAAOkV;AAAA,IAAE;AAAI,WAAOyG,kBAAgBzG,IAAGlV,EAAC;AAAA,EAAI;AAE1K,WAAS4b,eAAa,SAAS;AAAE,QAAI,4BAA4BC,4BAAyB;AAAI,WAAO,WAAY;AAAE,UAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;AAAA,MAAE,OAAQ;AAAE,iBAAS,MAAM,MAAM,MAAM,SAAS;AAAA;AAAK,aAAOhB,6BAA2B,MAAM,MAAM;AAAA,IAAE;AAAA,EAAK;AAErZ,WAASA,6BAA2B3b,OAAM,MAAM;AAAE,QAAI,SAASmc,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,aAAO;AAAA,IAAO;AAAC,WAAOS,yBAAuB5c,KAAI;AAAA,EAAI;AAEjL,WAAS4c,yBAAuB5c,OAAM;AAAE,QAAIA,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe,2DAA2D;AAAA;AAAK,WAAOA;AAAA,EAAO;AAEtK,WAAS0c,8BAA4B;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,WAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,MAAM,IAAI,WAAY;AAAA,MAAE,CAAA,CAAC;AAAG,aAAO;AAAA,IAAO,SAAQzY,IAAP;AAAY,aAAO;AAAA;EAAU;AAEpU,WAAS0Y,kBAAgB5G,IAAG;AAAE4G,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,iBAAgB5G,IAAG;AAAE,aAAOA,GAAE,aAAa,OAAO,eAAeA,EAAC;AAAA,IAAI;AAAE,WAAO4G,kBAAgB5G,EAAC;AAAA,EAAI;AAE7M,WAAS8G,kBAAgB,KAAKhd,MAAK,OAAO;AAAE,QAAIA,QAAO,KAAK;AAAE,aAAO,eAAe,KAAKA,MAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAM,CAAA;AAAA,IAAE,OAAQ;AAAE,UAAIA,QAAO;AAAA,IAAM;AAAG,WAAO;AAAA,EAAM;AASjN,MAAI,sBAAsB;AAAA,IACxB,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,MAAI,eAAe;AACnB,MAAI,gBAAgB;AACpB,MAAI,cAAc;AAAA,IAAC;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACA;AACO,WAAS,mBAAmBL,QAAO,OAAO;AAC/C,QAAI,WAAWA,SAAQ;AACvB,WAAO,KAAK,MAAM,SAAS,WAAW,KAAK,MAAM,QAAQ,EAAE;AAAA,EAC7D;AACO,WAAS,YAAYuB,SAAQ;AAClC,WAAO,OAAO,KAAKA,QAAO,KAAK,EAAE,OAAO,SAAU,KAAKL,OAAMlB,QAAO;AAClE,UAAI,YAAYA,UAAS,YAAY,SAAS,mBAAmBA,QAAO,YAAY,MAAM,IAAIA;AAC9F,UAAIkB,SAAQ,YAAY;AACxB,aAAO;AAAA,IACR,GAAE,CAAE,CAAA;AAAA,EACP;AACO,WAAS,WAAW,SAAS;AAClC,QAAIA;AACJ,QAAIiB,UAAS;AAEb,WAAO,CAACjB,SAAQiB,SAAQ;AACtB,UAAIA,QAAO,YAAY;AACrB,QAAAjB,QAAOiB;AAAA,MACR;AAED,MAAAA,UAASA,QAAO;AAAA,IACjB;AAED,WAAOjB;AAAA,EACT;AACO,WAAS,eAAe,aAAa;AAC1C,QAAI,YAAY,YAAY;AAC5B,QAAI,QAAQ,CAAA;AAEZ,QAAI,UAAU,OAAO;AACnB,cAAQ,UAAU,eAAe,UAAU,MAAM,MAAK;AAAA,IAC1D,OAAS;AACL,kBAAY,IAAI,aAAa,UAAU,MAAM,UAAU,IAAI,SAAUA,OAAM;AACzE,gBAAQ,MAAM,OAAOA,MAAK,KAAK;AAAA,MACrC,CAAK;AAAA,IACF;AAED,YAAQ,MAAM,OAAO,SAAU,KAAK,MAAM;AACxC,UAAI,IAAI,QAAQ,IAAI,MAAM,IAAI;AAC5B,YAAI,KAAK,IAAI;AAAA,MACd;AAED,aAAO;AAAA,IACR,GAAE,EAAE,EAAE,IAAI,SAAUwB,IAAG;AACtB,aAAOA,GAAE;IACb,CAAG;AACD,WAAO;AAAA,EACT;AACO,WAAS,eAAe,WAAW;AACxC,WAAO;AAAA,MACL,MAAM,UAAU;AAAA,MAChB,OAAO,UAAU;AAAA,MACjB,QAAQ,UAAU;AAAA,MAClB,MAAM,UAAU;AAAA,MAChB,MAAM,UAAU;AAAA,MAChB,IAAI,UAAU;AAAA,IAClB;AAAA,EACA;AACO,WAAS,mBAAmB,aAAa;AAC9C,QAAI,aAAa,cAAc,WAAW,YAAY,MAAM;AAC5D,QAAI,YAAY,YAAY;AAC5B,QAAI,cAAc,WAAW,kBAAkB,UAAU,QAAO,EAAG,OAAO;AAC1E,QAAI,mBAAmB,CAAA;AAEvB,QAAI,aAAa;AACf,UAAI,QAAQ,YAAY;AAExB,aAAO,OAAO;AACZ,yBAAiB,KAAK,MAAM,SAAS;AACrC,gBAAQ,MAAM;AAAA,MACf;AAAA,IACF;AAED,WAAO;AAAA,MACL,IAAI,OAAQ;AAAA,MACZ,OAAO;AAAA,MACP,WAAW,KAAK,IAAK;AAAA,MACrB,aAAa;AAAA,MACb,MAAM;AAAA,MACN,WAAW;AAAA,MACX,kBAAkB+f,OAAAA,YAAY,iBAAiB,KAAK,IAAI,GAAG;AAAA,QACzD,UAAU;AAAA,QACV,aAAa;AAAA,MACnB,CAAK;AAAA,IACL;AAAA,EACA;AACO,WAAS,oBAAoBvJ,UAAS,qBAAqB;AAChE,QAAI,aAAa,wBAAwB,QAAQ,sBAAsB;AACvE,WAAOA,SAAQ,MAAM,YAAY,YAAY;AAAA,EAC/C;AACO,WAAS,oBAAoBA,UAAS,qBAAqB,IAAI,UAAU;AAC9E,QAAI,cAAc,GAAG,QAAQ,0BAA0B;AACvD,QAAI;AAAa;AACjB,QAAI,aAAa,oBAAoBA,UAAS,mBAAmB;AACjE,eAAW,QAAQ,mBAAmB,QAAQ,CAAC;AAC/C,WAAO;AAAA,EACT;AAEA,MAAI,uBAAoC,yBAAU,YAAY;AAC5DkD,gBAAUsG,uBAAsB,UAAU;AAE1C,QAAI,SAASzF,eAAayF,qBAAoB;AAE9C,aAASA,sBAAqB,aAAa,OAAO;AAChD,UAAI;AAEJxG,wBAAgB,MAAMwG,qBAAoB;AAE1C,cAAQ,OAAO,KAAK,IAAI;AAExBrF,wBAAgBD,yBAAuB,KAAK,GAAG,SAAS;AAAA,QACtD,aAAa,SAASuF,eAAc;AAAA,QAAE;AAAA,QACtC,MAAM;AAAA,QACN,OAAO,CAAE;AAAA,QACT,QAAQ,CAAE;AAAA,QACV,YAAY,CAAE;AAAA,QACd,aAAa,CAAE;AAAA,QACf,SAAS,CAAE;AAAA,QACX,YAAY,CAAE;AAAA,QACd,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,WAAW,KAAK,MAAM,OAAO,aAAa,QAAQ,aAAa,CAAC,KAAK,CAAE;AAAA,QACvE,YAAY;AAAA,MAClB,CAAK;AAEDtF,wBAAgBD,yBAAuB,KAAK,GAAG,kBAAkB,WAAY;AAC3E,cAAM,SAAS;AAAA,UACb,YAAY,OAAO,OAAO,CAAA,GAAI,qBAAqB;AAAA,YACjD,QAAQ;AAAA,UAClB,CAAS;AAAA,QACT,CAAO;AAAA,MACP,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,oBAAoB,WAAY;AAC7E,YAAI,SAAS,MAAM,MAAM;AAEzB,YAAI,OAAO,aAAa;AACtB,mBAAS,oBAAoB,aAAa,OAAO,WAAW;AAAA,QAC7D;AAED,YAAI,OAAO,aAAa;AACtB,mBAAS,oBAAoB,SAAS,OAAO,OAAO;AAAA,QACrD;AAED,cAAM,SAAS;AAAA,UACb,YAAY;AAAA,QACpB,CAAO;AAAA,MACP,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,6BAA6B,SAAUjb,SAAQ;AAC5F,YAAIjB,QAAO,WAAWiB,OAAM;AAE5B,YAAIjB,UAASA,MAAK,WAAW,QAAQA,MAAK,WAAW,KAAK,KAAK,SAAS,SAASA,MAAK,WAAW,OAAO;AACtG,cAAI,wBAAwBA,MAAK,sBAAuB,GACpD6C,OAAM,sBAAsB,KAC5B,OAAO,sBAAsB,MAC7B,QAAQ,sBAAsB,OAC9B,SAAS,sBAAsB;AAEnC,gBAAM,SAAS;AAAA,YACb,YAAY;AAAA,cACV,KAAKA,OAAM,OAAO;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA,QAAQ;AAAA,YACT;AAAA,UACX,CAAS;AAAA,QACT,OAAa;AACL,gBAAM,SAAS;AAAA,YACb,YAAY,OAAO,OAAO,CAAA,GAAI,qBAAqB;AAAA,cACjD,QAAQ;AAAA,YACpB,CAAW;AAAA,UACX,CAAS;AAAA,QACF;AAAA,MACP,CAAK;AAEDsZ,wBAAgBD,yBAAuB,KAAK,GAAG,oBAAoB,SAAUjb,SAAQ;AACnF,YAAIjB,QAAO,WAAWiB,OAAM;AAE5B,YAAIjB,OAAM;AACR,cAAI,cAAc,MAAM,MAAM;AAC9B,cAAI,OAAO,WAAW,YAAY,KAAK,YAAY,IAAI,OAAOA,MAAK,WAAW,UAAU,CAAC;AAEzF,gBAAM,SAAS;AAAA,YACb,YAAY;AAAA,UACtB,CAAS;AAAA,QACF;AAED,cAAM,SAAS;AAAA,UACb,YAAY;AAAA,QACpB,CAAO;AAAA,MACP,CAAK;AAEDmc,wBAAgBD,yBAAuB,KAAK,GAAG,gBAAgB,WAAY;AACzE,YAAI,eAAe,OAAO,uBAAuB,KAAK,IAAK,CAAA;AAC3D,YAAI,CAAC;AAAc;AACnB,YAAI,YAAY,CAAC;AAAA,UACf,MAAM;AAAA,UACN,WAAW,KAAK,IAAK;AAAA,UACrB,UAAU,MAAM,MAAM,MAAM,IAAI,OAAQ;AAAA,QACzC,CAAA,EAAE,OAAO,MAAM,MAAM,SAAS;AAE/B,cAAM,SAAS;AAAA,UACb;AAAA,QACR,CAAO;AAED,eAAO,aAAa,QAAQ,eAAe,KAAK,UAAU,SAAS,CAAC;AAAA,MAC1E,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,gBAAgB,SAAU,UAAU;AACjF,YAAIuF,eAAc,MAAM,MAAM;AAC9B,YAAI,aAAa,MAAM,MAAM;AAC7B,YAAI,cAAc,WAAW;AAC7B,YAAI,WAAWA,aAAY,OAAO;AAAA,UAChC,QAAQ,YAAY;AAAA,UACpB,SAAS,YAAY;AAAA,UACrB,KAAK,YAAY,OAAO,aAAa,SAAS,QAAQ;AAAA,QAC9D,CAAO;AAED,cAAM,SAAS;AAAA,UACb,SAAS,CAAC,mBAAmB,QAAQ,CAAC;AAAA,UACtC,OAAO;AAAA,QACf,CAAO;AAED,mBAAW,YAAY,QAAQ;AAAA,MACrC,CAAK;AAEDtF,wBAAgBD,yBAAuB,KAAK,GAAG,kBAAkB,SAAU,UAAU;AACnF,YAAI,YAAY,MAAM,MAAM;AAC5B,YAAI,gBAAgB,UAAU,QAAQ,QAAQ;AAC9C,kBAAU,OAAO,eAAe,CAAC;AAEjC,cAAM,SAAS;AAAA,UACb,WAAW,CAAA,EAAG,OAAO,SAAS;AAAA,QACtC,CAAO;AAED,eAAO,aAAa,QAAQ,eAAe,KAAK,UAAU,SAAS,CAAC;AAAA,MAC1E,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,mBAAmB,SAAU,MAAM;AAChF,YAAI7a,OAAM,KAAK,KACXrB,QAAO,KAAK;AAChB,YAAI,UAAU,MAAM,MAAM,MAAM;AAChC,YAAI,OAAO,eAAeqB,MAAKrB,KAAI;AAEnC,YAAI,MAAM;AACR,kBAAQ,IAAI,KAAK,OAAO,SAAUA,OAAM,UAAU;AAChD,mBAAOA,MAAK;AAAA,UACtB,GAAW,OAAO,CAAC;AAAA,QACnB,OAAa;AACL,kBAAQ,IAAIA,KAAI;AAAA,QACjB;AAAA,MACP,CAAK;AAEDmc,wBAAgBD,yBAAuB,KAAK,GAAG,qBAAqB,SAAUpd,QAAO;AACnF,eAAO,MAAM,SAAS;AAAA,UACpB,qBAAqBA;AAAA,QAC7B,CAAO;AAAA,MACP,CAAK;AAEDqd,wBAAgBD,yBAAuB,KAAK,GAAG,mBAAmB,SAAUpd,QAAO;AACjF,YAAI2iB,eAAc,MAAM,MAAM;AAC9B,YAAI,cAAc,MAAM,MAAM,QAAQ3iB,QAAO;AAC7C,YAAI,aAAa,MAAM,MAAM;AAC7B,YAAI,WAAW2iB,aAAY,OAAO;AAAA,UAChC,QAAQ,YAAY;AAAA,UACpB,SAAS,YAAY;AAAA,UACrB,KAAK,YAAY,OAAO,aAAa,YAAY,IAAI,QAAQ;AAAA,QACrE,CAAO;AACD,mBAAW,YAAY,QAAQ;AAC/B,mBAAW,IAAI;AACf,YAAI,KAAK,WAAW,MAAM,GAAG,aAAa,YAAY,SAAS,EAAE,QAAQ,gBAAgB,KAAK,EAAE,QAAQ,4BAA4B,IAAI;AACxI,mBAAW,SAAS,EAAE;AAEtB,cAAM,SAAS;AAAA,UACb,OAAO;AAAA,UACP,qBAAqB3iB;AAAA,QAC7B,CAAO;AAAA,MACP,CAAK;AAED,YAAM,aAAa,SAAS,MAAM,aAAa,6CAA6B,KAAK,SAAU,OAAO;AAChG,YAAI4iB,kBAAiB,MAAM;AAC3B,eAAO,IAAIA,gBAAe,MAAM,UAAU;AAAA,MAC3C,CAAA,IAAI,QAA0B,QAAA,EAAA,KAAA,MAAA,YAAA,EAAC,KAAK,SAAU,OAAO;AACpD,YAAIC,gBAAe,MAAM;AACzB,eAAO,IAAIA,cAAY;AAAA,MAC7B,CAAK;AACD,YAAM,QAAQ,OAAO,OAAO,CAAE,GAAE,MAAM,OAAO;AAAA,QAC3C,aAAa,oBAAyB;AAAA,QACtC,MAAM;AAAA,QACN,OAAO,YAAY;AAAA,QACnB,YAAY,YAAY,YAAY,MAAM,MAAM;AAAA,QAChD,SAAS,CAAC;AAAA,UACR,OAAO,YAAY;AAAA,UACnB,WAAW,KAAK,IAAK;AAAA,QAC7B,CAAO;AAAA,MACP,CAAK;AACD,yBAAmB,aAAa,SAAU,IAAI,UAAU,UAAU;AAChE,YAAI,iBAAiB,oBAAoB,MAAM,MAAM,SAAS,MAAM,MAAM,qBAAqB,IAAI,QAAQ;AAE3G,YAAI,YAAY,gBAAgB;AAC9B,cAAI,kBAAkB,eAAe,gBAAgB,CAAC,GAClDre,MAAK,gBAAgB,GAAG;AAE5B,cAAIhE,QAAO4c,yBAAuB,KAAK;AAEvCoF,8BAAgCrB,4BAAoB,KAAK,SAAS,UAAU;AAC1E,gBAAI,YAAY,oBAAoB,qBAAqB7c,OAAM,WAAW4U;AAE1E,mBAAOiI,YAAoB,KAAK,SAAS,SAAS,UAAU;AAC1D,qBAAO,GAAG;AACR,wBAAQ,SAAS,OAAO,SAAS,MAAI;AAAA,kBACnC,KAAK;AACH,6BAAS,OAAO;AAChB,2BAAO,MAAM;AAAA,kBAEf,KAAK;AACH,iCAAa,SAAS;AACtB,6BAAS,OAAO;AAChB,2BAAO,QAAQ,IAAI,CAAC,WAAW,KAAK;AAAA,sBAClC,GAAG,SAAS,IAAI,OAAQ;AAAA,sBACxB,GAAG,SAAS,IAAI,OAAQ;AAAA,sBACxB,IAAI3c;AAAA,oBACxB,CAAmB,GAAG,WAAW,KAAK;AAAA,sBAClB,GAAG,eAAe,SAAS,SAAS;AAAA,sBACpC,GAAG,eAAe,SAAS,SAAS;AAAA,sBACpC,IAAIA;AAAA,oBACL,CAAA,CAAC,CAAC;AAAA,kBAEL,KAAK;AACH,yCAAqB,SAAS;AAC9B,0CAAsB,eAAe,oBAAoB,CAAC;AAC1D,oBAAAF,QAAO,oBAAoB,GAAG;AAC9B,gCAAY,oBAAoB,GAAG;AACnC,oBAAA4U,WAAU,eAAe,IAAI,SAAU,MAAM;AAC3C,6BAAO,KAAK,OAAO1U,MAAK,OAAO,OAAO,CAAE,GAAE,MAAM;AAAA,wBAC9C,MAAMF;AAAA,wBACN,aAAa;AAAA,wBACb;AAAA,sBACD,CAAA,IAAI;AAAA,oBACzB,CAAmB;AACD,oBAAA9D,MAAK,SAAS;AAAA,sBACZ,SAAS0Y;AAAA,oBAC7B,CAAmB;AAAA,kBAEH,KAAK;AAAA,kBACL,KAAK;AACH,2BAAO,SAAS;gBACnB;AAAA,cACF;AAAA,YACF,GAAE,OAAO;AAAA,UACX,CAAA,CAAC,EAAC;AAAA,QACJ;AAED,cAAM,SAAS;AAAA,UACb,OAAO;AAAA,UACP,YAAY,YAAY,SAAS,MAAM;AAAA,UACvC,aAAa,eAAe,QAAQ;AAAA,UACpC,SAAS,kBAAkB,MAAM,MAAM;AAAA,UACvC,qBAAqB,iBAAiB,IAAI,MAAM,MAAM;AAAA,UACtD,qBAAqB,iBAAiB,QAAQ,MAAM,MAAM;AAAA,QAClE,CAAO;AAAA,MACP,CAAK;AACD,aAAO;AAAA,IACR;AAED,WAAOwJ;AAAA,EACT,EAAE,SAAS;ACxbX,WAAS/F,UAAQ,KAAK;AAAE;AAA2B,QAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAEA,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAO,OAAOA;AAAA,MAAI;AAAA,IAAK,OAAM;AAAEJ,kBAAU,SAASA,SAAQI,MAAK;AAAE,eAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,MAAI;AAAA,IAAG;AAAG,WAAOJ,UAAQ,GAAG;AAAA,EAAI;AAE1X,WAAST,kBAAgB,UAAU,aAAa;AAAE,QAAI,EAAE,oBAAoB,cAAc;AAAE,YAAM,IAAI,UAAU,mCAAmC;AAAA,IAAE;AAAA,EAAI;AAEzJ,WAASE,YAAU,UAAU,YAAY;AAAE,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,YAAM,IAAI,UAAU,oDAAoD;AAAA,IAAI;AAAC,aAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,QAAI;AAAYY,wBAAgB,UAAU,UAAU;AAAA,EAAI;AAEjY,WAASA,kBAAgBzG,IAAGlV,IAAG;AAAE2b,wBAAkB,OAAO,kBAAkB,SAASA,iBAAgBzG,IAAGlV,IAAG;AAAE,MAAAkV,GAAE,YAAYlV;AAAG,aAAOkV;AAAA,IAAE;AAAI,WAAOyG,kBAAgBzG,IAAGlV,EAAC;AAAA,EAAI;AAE1K,WAAS4b,eAAa,SAAS;AAAE,QAAI,4BAA4BC,4BAAyB;AAAI,WAAO,WAAY;AAAE,UAAI,QAAQC,kBAAgB,OAAO,GAAG;AAAQ,UAAI,2BAA2B;AAAE,YAAI,YAAYA,kBAAgB,IAAI,EAAE;AAAa,iBAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;AAAA,MAAE,OAAQ;AAAE,iBAAS,MAAM,MAAM,MAAM,SAAS;AAAA;AAAK,aAAOhB,6BAA2B,MAAM,MAAM;AAAA,IAAE;AAAA,EAAK;AAErZ,WAASA,6BAA2B3b,OAAM,MAAM;AAAE,QAAI,SAASmc,UAAQ,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,aAAO;AAAA,IAAO;AAAC,WAAOS,yBAAuB5c,KAAI;AAAA,EAAI;AAEjL,WAAS4c,yBAAuB5c,OAAM;AAAE,QAAIA,UAAS,QAAQ;AAAE,YAAM,IAAI,eAAe,2DAA2D;AAAA;AAAK,WAAOA;AAAA,EAAO;AAEtK,WAAS0c,8BAA4B;AAAE,QAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,aAAO;AAAO,QAAI,QAAQ,UAAU;AAAM,aAAO;AAAO,QAAI,OAAO,UAAU;AAAY,aAAO;AAAM,QAAI;AAAE,WAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,MAAM,IAAI,WAAY;AAAA,MAAE,CAAA,CAAC;AAAG,aAAO;AAAA,IAAO,SAAQzY,IAAP;AAAY,aAAO;AAAA;EAAU;AAEpU,WAAS0Y,kBAAgB5G,IAAG;AAAE4G,wBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,iBAAgB5G,IAAG;AAAE,aAAOA,GAAE,aAAa,OAAO,eAAeA,EAAC;AAAA,IAAI;AAAE,WAAO4G,kBAAgB5G,EAAC;AAAA,EAAI;AAE7M,WAAS8G,kBAAgB,KAAKhd,MAAK,OAAO;AAAE,QAAIA,QAAO,KAAK;AAAE,aAAO,eAAe,KAAKA,MAAK,EAAE,OAAc,YAAY,MAAM,cAAc,MAAM,UAAU,KAAM,CAAA;AAAA,IAAE,OAAQ;AAAE,UAAIA,QAAO;AAAA,IAAM;AAAG,WAAO;AAAA,EAAM;AAIjN,MAAI,yBAAsC,yBAAU,YAAY;AAC9D+b,gBAAU0G,yBAAwB,UAAU;AAE5C,QAAI,SAAS7F,eAAa6F,uBAAsB;AAEhD,aAASA,0BAAyB;AAChC,UAAI;AAEJ5G,wBAAgB,MAAM4G,uBAAsB;AAE5C,eAAS,OAAO,UAAU,QAAQ,OAAO,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,MAAM,QAAQ;AACvF,aAAK,QAAQ,UAAU;AAAA,MACxB;AAED,cAAQ,OAAO,KAAK,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AAErDzF,wBAAgBD,yBAAuB,KAAK,GAAG,SAAS;AAAA,QACtD,mBAAmB;AAAA,MACzB,CAAK;AAEDC,wBAAgBD,yBAAuB,KAAK,GAAG,mBAAmB,WAAY;AAC5E,cAAM,SAAS;AAAA,UACb,mBAAmB,CAAC,MAAM,MAAM;AAAA,QACxC,CAAO;AAAA,MACP,CAAK;AAED,aAAO;AAAA,IACR;AAED,WAAO0F;AAAA,EACT,EAAE,SAAS;ACpDX,MAAI,YAAY,CAAC,UAAU,SAAS,UAAU,QAAQ,QAAQ,MAAM,WAAW,SAAS,WAAW,OAAO,OAAO;AACjH,MAAI,eAAe;AAAA,IACjB,OAAO,CAAC,aAAa,cAAc,UAAU,cAAc,SAAS,KAAK;AAAA,IACzE,KAAK,CAAC,aAAa,cAAc,UAAU,cAAc,SAAS,KAAK;AAAA,EACzE;AACA,MAAI,SAAS,CAAC,aAAa,cAAc,QAAQ;AAEjD,WAAS,YAAY,WAAW,OAAO,UAAU;AAC/C,WAAO,MAAM,OAAO,SAAU,KAAKniB,OAAM;AACvC,UAAI,YAAY,SAASA,QAAO;AAC9B,YAAIA,SAAQ,SAASA,OAAM,OAAO,SAAU,QAAQ,SAAS;AAC3D,iBAAO,WAAW,OAAO,QAAQ,OAAO,MAAM,MAAM,CAAC,UAAUA,OAAM,WAAW,UAAUA,OAAM,WAAW,UAAUA,OAAM,SAAS;AACpI,iBAAO;AAAA,QACR,GAAE,CAAE,CAAA;AAAA,MACX,OAAW;AACL,YAAIA,UAAS,WAAW,SAASA,SAAQ,UAAUA;AAAA,MACpD;AAED,aAAO;AAAA,IACR,GAAE,CAAE,CAAA;AAAA,EACP;AAEO,WAAS,6BAA6B,WAAW;AACtD,WAAO,YAAY,WAAW,WAAW,YAAY;AAAA,EACvD;AACO,WAAS,8BAA8B,WAAW;AACvD,WAAO,YAAY,WAAW,UAAU,MAAM,GAAG,CAAC,CAAC;AAAA,EACrD;ACzBO,MAAI,YAAY4e,UAAO,KAAK,EAAE;AAAA,IACnC,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AACD,YAAU,cAAc;AACjB,MAAI,eAAeA,UAAO,KAAK,EAAE;AAAA,IACtC,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ,GAAG,SAAU,MAAM;AACjB,QAAI,OAAO,KAAK,MACZ,MAAM,KAAK,KACX,aAAa,KAAK,YAClB,WAAW,KAAK,UAChB,WAAW,KAAK;AACpB,WAAO;AAAA,MACL,UAAU,OAAO,IAAI;AAAA,MACrB,YAAY,MAAM,eAAeC,UAAM,SAAS;AAAA,MAChD,SAAS,aAAa,KAAK;AAAA,MAC3B,UAAU,WAAW,GAAG,OAAO,UAAU,IAAI,IAAI;AAAA,MACjD,UAAU,WAAW,GAAG,OAAO,UAAU,IAAI,IAAI;AAAA,IACrD;AAAA,EACA,CAAC;AACD,eAAa,cAAc;;;ACvB3B,0BAAO,aAAc;AAErB,0BAAA,UAAkB,SAAU,KAAK3Z,OAAM;AACrC,QAAI1D,UAAS,CAAA;AAEb,aAAS7B,MAAK,KAAK;AACjB,UAAIuF,MAAK,QAAQvF,EAAC,KAAK;AAAG;AAC1B,UAAI,CAAC,OAAO,UAAU,eAAe,KAAK,KAAKA,EAAC;AAAG;AACnD,MAAA6B,QAAO7B,MAAK,IAAIA;AAAA,IACjB;AAED,WAAO6B;AAAA,EACT;;ACZA4gB,mBAAO,aAAc;AAErBA,mBAAA,UAAkB,SAAU,UAAU,aAAa;AACjD,QAAI,EAAE,oBAAoB,cAAc;AACtC,YAAM,IAAI,UAAU,mCAAmC;AAAA,IACxD;AAAA,EACH;;;;ACPA,MAAI,OAAO,KAAK;AAChB,MAAIC,UAAQ,KAAK;MACjB,aAAiB,SAAUC,KAAI;AAC7B,WAAO,MAAMA,MAAK,CAACA,GAAE,IAAI,KAAKA,MAAK,IAAID,UAAQ,MAAMC,GAAE;AAAA,EACzD;MCJA,WAAiB,SAAUA,KAAI;AAC7B,QAAIA,OAAM;AAAW,YAAM,UAAU,2BAA2BA,GAAE;AAClE,WAAOA;AAAA,EACT;ACJA,MAAIC,cAAY/a;AAChB,MAAIyN,YAAUa;MAGd,YAAiB,SAAU,WAAW;AACpC,WAAO,SAAU,MAAM,KAAK;AAC1B,UAAI5R,KAAI,OAAO+Q,UAAQ,IAAI,CAAC;AAC5B,UAAItV,KAAI4iB,YAAU,GAAG;AACrB,UAAI3L,KAAI1S,GAAE;AACV,UAAIjE,IAAGC;AACP,UAAIP,KAAI,KAAKA,MAAKiX;AAAG,eAAO,YAAY,KAAK;AAC7C,MAAA3W,KAAIiE,GAAE,WAAWvE,EAAC;AAClB,aAAOM,KAAI,SAAUA,KAAI,SAAUN,KAAI,MAAMiX,OAAM1W,KAAIgE,GAAE,WAAWvE,KAAI,CAAC,KAAK,SAAUO,KAAI,QACxF,YAAYgE,GAAE,OAAOvE,EAAC,IAAIM,KAC1B,YAAYiE,GAAE,MAAMvE,IAAGA,KAAI,CAAC,KAAKM,KAAI,SAAU,OAAOC,KAAI,SAAU;AAAA,IAC5E;AAAA,EACA;AChBA,MAAA,WAAiB;;ACCjB,MAAIsiB,WAASC,QAAc,UAAG,OAAO,UAAU,eAAe,OAAO,QAAQ,OACzE,SAAS,OAAO,QAAQ,eAAe,KAAK,QAAQ,OAAO,OAE3D,SAAS,aAAa;AAC1B,MAAI,OAAO,OAAO;AAAU,UAAMD;;ACLlC,MAAItT,SAAOwT,MAAc,UAAG,EAAE,SAAS,SAAQ;AAC/C,MAAI,OAAO,OAAO;AAAU,UAAMxT;MCDlC,aAAiB,SAAUoT,KAAI;AAC7B,QAAI,OAAOA,OAAM;AAAY,YAAM,UAAUA,MAAK,qBAAqB;AACvE,WAAOA;AAAA,EACT;ACFA,MAAI,YAAY9a;AAChB,MAAA,OAAiB,SAAU,IAAI,MAAMgH,SAAQ;AAC3C,cAAU,EAAE;AACZ,QAAI,SAAS;AAAW,aAAO;AAC/B,YAAQA,SAAM;AAAA,MACZ,KAAK;AAAG,eAAO,SAAUvO,IAAG;AAC1B,iBAAO,GAAG,KAAK,MAAMA,EAAC;AAAA,QAC5B;AAAA,MACI,KAAK;AAAG,eAAO,SAAUA,IAAGC,IAAG;AAC7B,iBAAO,GAAG,KAAK,MAAMD,IAAGC,EAAC;AAAA,QAC/B;AAAA,MACI,KAAK;AAAG,eAAO,SAAUD,IAAGC,IAAG,GAAG;AAChC,iBAAO,GAAG,KAAK,MAAMD,IAAGC,IAAG,CAAC;AAAA,QAClC;AAAA,IACG;AACD,WAAO,WAAyB;AAC9B,aAAO,GAAG,MAAM,MAAM,SAAS;AAAA,IACnC;AAAA,EACA;;MCnBA,YAAiB,SAAUoiB,KAAI;AAC7B,WAAO,OAAOA,QAAO,WAAWA,QAAO,OAAO,OAAOA,QAAO;AAAA,EAC9D;ACFA,MAAI/T,aAAW/G;MACf,YAAiB,SAAU8a,KAAI;AAC7B,QAAI,CAAC/T,WAAS+T,GAAE;AAAG,YAAM,UAAUA,MAAK,oBAAoB;AAC5D,WAAOA;AAAA,EACT;MCJA,SAAiB,SAAU,MAAM;AAC/B,QAAI;AACF,aAAO,CAAC,CAAC;IACV,SAAQxe,IAAP;AACA,aAAO;AAAA,IACR;AAAA,EACH;ACLA,MAAA,eAAiB,CAAC0D,OAAoB,WAAY;AAChD,WAAO,OAAO,eAAe,IAAI,KAAK,EAAE,KAAK,WAAY;AAAE,aAAO;AAAA,IAAI,EAAA,CAAE,EAAE,KAAK;AAAA,EACjF,CAAC;;;;;;;ACHD,QAAI+G,YAAW/G;AACf,QAAIqN,YAAWiB,QAAoB,QAAC;AAEpC,QAAI,KAAKvH,UAASsG,SAAQ,KAAKtG,UAASsG,UAAS,aAAa;AAChD,iBAAG,SAAUyN,KAAI;AAC7B,aAAO,KAAKzN,UAAS,cAAcyN,GAAE,IAAI,CAAA;AAAA;;;ACL3C,MAAA,gBAAiB,CAAC9a,gBAA6B,CAACsO,OAAoB,WAAY;AAC9E,WAAO,OAAO,eAAezN,kBAAwB,EAAC,KAAK,GAAG,KAAK,EAAE,KAAK,WAAY;AAAE,aAAO;AAAA,IAAE,EAAI,CAAA,EAAE,KAAK;AAAA,EAC9G,CAAC;ACDD,MAAIkG,aAAW/G;AAGf,MAAA,eAAiB,SAAU8a,KAAIjI,IAAG;AAChC,QAAI,CAAC9L,WAAS+T,GAAE;AAAG,aAAOA;AAC1B,QAAI,IAAI;AACR,QAAIjI,MAAK,QAAQ,KAAKiI,IAAG,aAAa,cAAc,CAAC/T,WAAS,MAAM,GAAG,KAAK+T,GAAE,CAAC;AAAG,aAAO;AACzF,QAAI,QAAQ,KAAKA,IAAG,YAAY,cAAc,CAAC/T,WAAS,MAAM,GAAG,KAAK+T,GAAE,CAAC;AAAG,aAAO;AACnF,QAAI,CAACjI,MAAK,QAAQ,KAAKiI,IAAG,aAAa,cAAc,CAAC/T,WAAS,MAAM,GAAG,KAAK+T,GAAE,CAAC;AAAG,aAAO;AAC1F,UAAM,UAAU,yCAAyC;AAAA,EAC3D;ACXA,MAAIK,aAAWnb;AACf,MAAIob,mBAAiB9M;AACrB,MAAI+M,gBAAcxa;AAClB,MAAIya,OAAK,OAAO;AAEhB,YAAA,IAAY5L,eAA4B,OAAO,iBAAiB,SAASwJ,gBAAezG,IAAGC,IAAG,YAAY;AACxGyI,eAAS1I,EAAC;AACV,IAAAC,KAAI2I,cAAY3I,IAAG,IAAI;AACvByI,eAAS,UAAU;AACnB,QAAIC;AAAgB,UAAI;AACtB,eAAOE,KAAG7I,IAAGC,IAAG,UAAU;AAAA,MAC9B,SAAWpW,IAAP;AAAA,MAAyB;AAC3B,QAAI,SAAS,cAAc,SAAS;AAAY,YAAM,UAAU,0BAA0B;AAC1F,QAAI,WAAW;AAAY,MAAAmW,GAAEC,MAAK,WAAW;AAC7C,WAAOD;AAAA,EACT;ACfA,MAAA,gBAAiB,SAAU,QAAQ,OAAO;AACxC,WAAO;AAAA,MACL,YAAY,EAAE,SAAS;AAAA,MACvB,cAAc,EAAE,SAAS;AAAA,MACzB,UAAU,EAAE,SAAS;AAAA,MACrB;AAAA,IACJ;AAAA,EACA;ACPA,MAAI6I,OAAKtb;AACT,MAAIub,eAAajN;MACjB,QAAiBzN,eAA4B,SAAU,QAAQ3I,MAAK,OAAO;AACzE,WAAOojB,KAAG,EAAE,QAAQpjB,MAAKqjB,aAAW,GAAG,KAAK,CAAC;AAAA,EAC/C,IAAI,SAAU,QAAQrjB,MAAK,OAAO;AAChC,WAAOA,QAAO;AACd,WAAO;AAAA,EACT;ACPA,MAAIwf,mBAAiB,CAAE,EAAC;AACxB,MAAA,OAAiB,SAAUoD,KAAI5iB,MAAK;AAClC,WAAOwf,iBAAe,KAAKoD,KAAI5iB,IAAG;AAAA,EACpC;ACHA,MAAI8iB,WAAShb,QAAAA;AACb,MAAI0H,SAAO4G,MAAAA;AACX,MAAI,MAAMzN;AACV,MAAI2a,SAAO9L;AACX,MAAII,QAAMH;AACV,MAAI8L,cAAY;AAEhB,MAAIC,YAAU,SAAUpiB,OAAM,MAAM,QAAQ;AAC1C,QAAI,YAAYA,QAAOoiB,UAAQ;AAC/B,QAAI,YAAYpiB,QAAOoiB,UAAQ;AAC/B,QAAI,YAAYpiB,QAAOoiB,UAAQ;AAC/B,QAAI,WAAWpiB,QAAOoiB,UAAQ;AAC9B,QAAI,UAAUpiB,QAAOoiB,UAAQ;AAC7B,QAAI,UAAUpiB,QAAOoiB,UAAQ;AAC7B,QAAIzL,WAAU,YAAYvI,SAAOA,OAAK,UAAUA,OAAK,QAAQ,CAAA;AAC7D,QAAI,WAAWuI,SAAQwL;AACvB,QAAIzhB,UAAS,YAAYghB,WAAS,YAAYA,SAAO,SAASA,SAAO,SAAS,CAAE,GAAES;AAClF,QAAIvjB,MAAK,KAAK;AACd,QAAI;AAAW,eAAS;AACxB,SAAKA,QAAO,QAAQ;AAElB,YAAM,CAAC,aAAa8B,WAAUA,QAAO9B,UAAS;AAC9C,UAAI,OAAO4X,MAAIG,UAAS/X,IAAG;AAAG;AAE9B,YAAM,MAAM8B,QAAO9B,QAAO,OAAOA;AAEjC,MAAA+X,SAAQ/X,QAAO,aAAa,OAAO8B,QAAO9B,SAAQ,aAAa,OAAOA,QAEpE,WAAW,MAAM,IAAI,KAAK8iB,QAAM,IAEhC,WAAWhhB,QAAO9B,SAAQ,MAAO,SAAU0Z,IAAG;AAC9C,YAAIG,KAAI,SAAUtZ,IAAGC,IAAG,GAAG;AACzB,cAAI,gBAAgBkZ,IAAG;AACrB,oBAAQ,UAAU,QAAM;AAAA,cACtB,KAAK;AAAG,uBAAO,IAAIA;cACnB,KAAK;AAAG,uBAAO,IAAIA,GAAEnZ,EAAC;AAAA,cACtB,KAAK;AAAG,uBAAO,IAAImZ,GAAEnZ,IAAGC,EAAC;AAAA,YAC1B;AAAC,mBAAO,IAAIkZ,GAAEnZ,IAAGC,IAAG,CAAC;AAAA,UACvB;AAAC,iBAAOkZ,GAAE,MAAM,MAAM,SAAS;AAAA,QACxC;AACM,QAAAG,GAAE0J,eAAa7J,GAAE6J;AACjB,eAAO1J;AAAA,MAER,EAAE,GAAG,IAAI,YAAY,OAAO,OAAO,aAAa,IAAI,SAAS,MAAM,GAAG,IAAI;AAE3E,UAAI,UAAU;AACZ,SAAC9B,SAAQ,YAAYA,SAAQ,UAAU,CAAA,IAAK/X,QAAO;AAEnD,YAAIoB,QAAOoiB,UAAQ,KAAK,YAAY,CAAC,SAASxjB;AAAMsjB,iBAAK,UAAUtjB,MAAK,GAAG;AAAA,MAC5E;AAAA,IACF;AAAA,EACH;AAEAwjB,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZA,YAAQ,IAAI;AACZ,MAAA,UAAiBA;;;AC7DjB,IAAA/N,QAAA,UAAiB3N;AAAAA;ACAjB,MAAA,aAAiB,CAAE;ACAnB,MAAImH,aAAW,CAAE,EAAC;MAElB,OAAiB,SAAU2T,KAAI;AAC7B,WAAO3T,WAAS,KAAK2T,GAAE,EAAE,MAAM,GAAG,EAAE;AAAA,EACtC;ACHA,MAAIa,QAAM3b;AAEV,MAAA,WAAiB,OAAO,GAAG,EAAE,qBAAqB,CAAC,IAAI,SAAS,SAAU8a,KAAI;AAC5E,WAAOa,MAAIb,GAAE,KAAK,WAAWA,IAAG,MAAM,EAAE,IAAI,OAAOA,GAAE;AAAA,EACvD;ACJA,MAAI,UAAU9a;AACd,MAAIyN,YAAUa;MACd,aAAiB,SAAUwM,KAAI;AAC7B,WAAO,QAAQrN,UAAQqN,GAAE,CAAC;AAAA,EAC5B;ACJA,MAAIC,cAAY/a;AAChB,MAAIrF,QAAM,KAAK;MACf,YAAiB,SAAUmgB,KAAI;AAC7B,WAAOA,MAAK,IAAIngB,MAAIogB,YAAUD,GAAE,GAAG,gBAAgB,IAAI;AAAA,EACzD;ACLA,MAAIC,cAAY/a;AAChB,MAAI,MAAM,KAAK;AACf,MAAI,MAAM,KAAK;AACf,MAAA,mBAAiB,SAAUnI,QAAOmP,SAAQ;AACxC,IAAAnP,SAAQkjB,YAAUljB,MAAK;AACvB,WAAOA,SAAQ,IAAI,IAAIA,SAAQmP,SAAQ,CAAC,IAAI,IAAInP,QAAOmP,OAAM;AAAA,EAC/D;ACJA,MAAI4U,cAAY5b;AAChB,MAAI,WAAWsO;AACf,MAAI,kBAAkBzN;MACtB,iBAAiB,SAAU,aAAa;AACtC,WAAO,SAAU,OAAO5I,KAAI,WAAW;AACrC,UAAIwa,KAAImJ,YAAU,KAAK;AACvB,UAAI5U,UAAS,SAASyL,GAAE,MAAM;AAC9B,UAAI5a,SAAQ,gBAAgB,WAAWmP,OAAM;AAC7C,UAAI;AAGJ,UAAI,eAAe/O,OAAMA;AAAI,eAAO+O,UAASnP,QAAO;AAClD,kBAAQ4a,GAAE5a;AAEV,cAAI,SAAS;AAAO,mBAAO;AAAA,QAEjC;AAAA;AAAW,eAAMmP,UAASnP,QAAOA;AAAS,cAAI,eAAeA,UAAS4a,IAAG;AACnE,gBAAIA,GAAE5a,YAAWI;AAAI,qBAAO,eAAeJ,UAAS;AAAA,UAC1D;AAAM,aAAO,CAAC,eAAe;AAAA,IAC7B;AAAA,EACA;;ACtBA,MAAI6P,SAAO1H,MAAAA;AACX,MAAIgb,WAAS1M,QAAAA;AACb,MAAI,SAAS;AACb,MAAIuN,UAAQb,SAAO,YAAYA,SAAO,UAAU,CAAA;AAEhD,GAACc,kBAAiB,SAAU5jB,MAAK,OAAO;AACtC,WAAO2jB,QAAM3jB,UAAS2jB,QAAM3jB,QAAO,UAAU,SAAY,QAAQ,CAAA;AAAA,EACnE,GAAG,YAAY,EAAE,EAAE,KAAK;AAAA,IACtB,SAASwP,OAAK;AAAA,IACd,MAA8B;AAAA,IAC9B,WAAW;AAAA,EACb,CAAC;ACXD,MAAIrL,OAAK;AACT,MAAI,KAAK,KAAK;MACd,OAAiB,SAAUnE,MAAK;AAC9B,WAAO,UAAU,OAAOA,SAAQ,SAAY,KAAKA,MAAK,OAAO,EAAEmE,OAAK,IAAI,SAAS,EAAE,CAAC;AAAA,EACtF;ACJA,MAAI+C,WAASY,QAAAA,QAAqB,MAAM;AACxC,MAAI+b,QAAMzN;MACV,aAAiB,SAAUpW,MAAK;AAC9B,WAAOkH,SAAOlH,UAASkH,SAAOlH,QAAO6jB,MAAI7jB,IAAG;AAAA,EAC9C;ACJA,MAAI4X,QAAM9P;AACV,MAAI4b,cAAYtN;AAChB,MAAI0N,iBAAenb,eAA6B,KAAK;AACrD,MAAIob,aAAWvM,WAAyB,UAAU;AAElD,MAAA,sBAAiB,SAAU,QAAQ,OAAO;AACxC,QAAI+C,KAAImJ,YAAU,MAAM;AACxB,QAAIzjB,KAAI;AACR,QAAI,SAAS,CAAA;AACb,QAAID;AACJ,SAAKA,QAAOua;AAAG,UAAIva,QAAO+jB;AAAUnM,cAAI2C,IAAGva,IAAG,KAAK,OAAO,KAAKA,IAAG;AAElE,WAAO,MAAM,SAASC;AAAG,UAAI2X,MAAI2C,IAAGva,OAAM,MAAMC,KAAI,GAAG;AACrD,SAAC6jB,eAAa,QAAQ9jB,IAAG,KAAK,OAAO,KAAKA,IAAG;AAAA,MAC9C;AACD,WAAO;AAAA,EACT;ACfA,MAAA,eACE,gGACA,MAAM,GAAG;ACFX,MAAIgkB,UAAQlc;AACZ,MAAImc,gBAAc7N;MAElB,cAAiB,OAAO,QAAQ,SAAS5Q,MAAK+U,IAAG;AAC/C,WAAOyJ,QAAMzJ,IAAG0J,aAAW;AAAA,EAC7B;ACNA,MAAIb,OAAKtb;AACT,MAAImb,aAAW7M;AACf,MAAI8N,YAAUvb;AAEd,MAAA,aAAiB6O,eAA4B,OAAO,mBAAmB,SAAS,iBAAiB+C,IAAG,YAAY;AAC9G0I,eAAS1I,EAAC;AACV,QAAI/U,QAAO0e,UAAQ,UAAU;AAC7B,QAAIpV,UAAStJ,MAAK;AAClB,QAAIvF,KAAI;AACR,QAAIua;AACJ,WAAO1L,UAAS7O;AAAGmjB,WAAG,EAAE7I,IAAGC,KAAIhV,MAAKvF,OAAM,WAAWua,GAAE;AACvD,WAAOD;AAAA,EACT;;;;;;;ACZA,QAAIpF,YAAWrN,QAAoB,QAAC;AACpC,YAAiBqN,aAAYA,UAAS;;;ACAtC,MAAI8N,aAAWnb;AACf,MAAI,MAAMsO;AACV,MAAI,cAAczN;AAClB,MAAIob,aAAWvM,WAAyB,UAAU;AAClD,MAAI,QAAQ,WAAY;AAAA,EAAA;AACxB,MAAI+L,cAAY;AAGhB,MAAI,aAAa,WAAY;AAE3B,QAAI,SAAS9L,oBAAyB,QAAQ;AAC9C,QAAIxX,KAAI,YAAY;AACpB,QAAIkkB,MAAK;AACT,QAAIC,MAAK;AACT,QAAI;AACJ,WAAO,MAAM,UAAU;AACvBC,iBAAkB,EAAC,YAAY,MAAM;AACrC,WAAO,MAAM;AAGb,qBAAiB,OAAO,cAAc;AACtC,mBAAe,KAAI;AACnB,mBAAe,MAAMF,MAAK,WAAWC,MAAK,sBAAsBD,MAAK,YAAYC,GAAE;AACnF,mBAAe,MAAK;AACpB,iBAAa,eAAe;AAC5B,WAAOnkB;AAAK,aAAO,WAAWsjB,aAAW,YAAYtjB;AACrD,WAAO,WAAU;AAAA,EACnB;MAEA,gBAAiB,OAAO,UAAU,SAAS0Q,QAAO4J,IAAG,YAAY;AAC/D,QAAI;AACJ,QAAIA,OAAM,MAAM;AACd,YAAMgJ,eAAaN,WAAS1I,EAAC;AAC7B,eAAS,IAAI;AACb,YAAMgJ,eAAa;AAEnB,aAAOQ,cAAYxJ;AAAA,IACvB;AAAS,eAAS;AAChB,WAAO,eAAe,SAAY,SAAS,IAAI,QAAQ,UAAU;AAAA,EACnE;;ACxCA,MAAI,QAAQzS,QAAAA,QAAqB,KAAK;AACtC,MAAI+b,QAAMzN;AACV,MAAIkO,WAAS3b,QAAoB,QAAC;AAClC,MAAI,aAAa,OAAO2b,YAAU;AAElC,MAAI,WAAWC,KAAA,UAAiB,SAAU,MAAM;AAC9C,WAAO,MAAM,UAAU,MAAM,QAC3B,cAAcD,SAAO,UAAU,aAAaA,WAAST,OAAK,YAAY,IAAI;AAAA,EAC9E;AAEA,WAAS,QAAQ;ACVjB,MAAI,MAAM/b,UAAwB;AAClC,MAAI8P,QAAMxB;AACV,MAAIoO,QAAM7b,KAAAA,QAAkB,aAAa;AAEzC,MAAA,kBAAiB,SAAUia,KAAI,KAAK,MAAM;AACxC,QAAIA,OAAM,CAAChL,MAAIgL,MAAK,OAAOA,MAAKA,IAAG,WAAW4B,KAAG;AAAG,UAAI5B,KAAI4B,OAAK,EAAE,cAAc,MAAM,OAAO,IAAG,CAAE;AAAA,EACrG;ACLA,MAAI7T,WAAS7I;AACb,MAAI,aAAasO;AACjB,MAAIqO,mBAAiB9b;AACrB,MAAI,oBAAoB,CAAA;AAGxB6O,QAAmB,mBAAmBC,KAAAA,QAAkB,UAAU,GAAG,WAAY;AAAE,WAAO;AAAA,EAAK,CAAE;AAEjG,MAAA,cAAiB,SAAU,aAAaiN,OAAM3iB,OAAM;AAClD,gBAAY,YAAY4O,SAAO,mBAAmB,EAAE,MAAM,WAAW,GAAG5O,KAAI,EAAC,CAAE;AAC/E0iB,qBAAe,aAAaC,QAAO,WAAW;AAAA,EAChD;ACXA,MAAI,UAAU5c;MACd,YAAiB,SAAU8a,KAAI;AAC7B,WAAO,OAAO,QAAQA,GAAE,CAAC;AAAA,EAC3B;ACHA,MAAIhL,QAAM9P;AACV,MAAI6c,aAAWvO;AACf,MAAI,WAAWzN,WAAyB,UAAU;AAClD,MAAIic,gBAAc,OAAO;AAEzB,MAAA,aAAiB,OAAO,kBAAkB,SAAUrK,IAAG;AACrD,IAAAA,KAAIoK,WAASpK,EAAC;AACd,QAAI3C,MAAI2C,IAAG,QAAQ;AAAG,aAAOA,GAAE;AAC/B,QAAI,OAAOA,GAAE,eAAe,cAAcA,cAAaA,GAAE,aAAa;AACpE,aAAOA,GAAE,YAAY;AAAA,IACtB;AAAC,WAAOA,cAAa,SAASqK,gBAAc;AAAA,EAC/C;ACVA,MAAIpB,YAAUpN;AACd,MAAIyO,aAAWlc,UAAAA;AACf,MAAI2a,SAAO9L;AACX,MAAIsN,cAAYrN;AAChB,MAAI,cAAc4M;AAClB,MAAII,mBAAiBM;AACrB,MAAI,iBAAiBC;AACrB,MAAIC,aAAWC,KAAAA,QAAkB,UAAU;AAC3C,MAAI,QAAQ,EAAE,CAAA,EAAG,QAAQ,UAAU,CAAE,EAAC,KAAI;AAC1C,MAAI,cAAc;AAClB,MAAI,OAAO;AACX,MAAI,SAAS;AAEb,MAAI,aAAa,WAAY;AAAE,WAAO;AAAA;AAEtC,MAAA,cAAiB,SAAU,MAAMR,OAAM,aAAa3iB,OAAM,SAAS,QAAQ,QAAQ;AACjF,gBAAY,aAAa2iB,OAAM3iB,KAAI;AACnC,QAAI,YAAY,SAAU,MAAM;AAC9B,UAAI,CAAC,SAAS,QAAQkU;AAAO,eAAOA,OAAM;AAC1C,cAAQ,MAAI;AAAA,QACV,KAAK;AAAM,iBAAO,SAASzQ,QAAO;AAAE,mBAAO,IAAI,YAAY,MAAM,IAAI;AAAA;QACrE,KAAK;AAAQ,iBAAO,SAAS,SAAS;AAAE,mBAAO,IAAI,YAAY,MAAM,IAAI;AAAA;MAC/E;AAAM,aAAO,SAAS,UAAU;AAAE,eAAO,IAAI,YAAY,MAAM,IAAI;AAAA;IACnE;AACE,QAAIgf,OAAME,QAAO;AACjB,QAAI,aAAa,WAAW;AAC5B,QAAI,aAAa;AACjB,QAAIzO,SAAQ,KAAK;AACjB,QAAI,UAAUA,OAAMgP,eAAahP,OAAM,gBAAgB,WAAWA,OAAM;AACxE,QAAI,WAAW,WAAW,UAAU,OAAO;AAC3C,QAAI,WAAW,UAAU,CAAC,aAAa,WAAW,UAAU,SAAS,IAAI;AACzE,QAAI,aAAayO,SAAQ,UAAUzO,OAAM,WAAW,UAAU;AAC9D,QAAI,SAASjW,MAAKohB;AAElB,QAAI,YAAY;AACd,MAAAA,qBAAoB,eAAe,WAAW,KAAK,IAAI,KAAM,CAAA,CAAC;AAC9D,UAAIA,uBAAsB,OAAO,aAAaA,mBAAkB,MAAM;AAEpEqD,yBAAerD,oBAAmBoD,MAAK,IAAI;AAAA,MAG5C;AAAA,IACF;AAED,QAAI,cAAc,WAAW,QAAQ,SAAS,QAAQ;AACpD,mBAAa;AACb,iBAAW,SAAS,SAAS;AAAE,eAAO,QAAQ,KAAK,IAAI;AAAA;IACxD;AAED,QAAiB,WAAY,SAAS,cAAc,CAACvO,OAAMgP,cAAY;AACrE3B,aAAKrN,QAAOgP,YAAU,QAAQ;AAAA,IAC/B;AAEDH,gBAAUJ,SAAQ;AAClBI,gBAAUN,QAAO;AACjB,QAAI,SAAS;AACX,gBAAU;AAAA,QACR,QAAQ,aAAa,WAAW,UAAU,MAAM;AAAA,QAChD,MAAM,SAAS,WAAW,UAAU,IAAI;AAAA,QACxC,SAAS;AAAA,MACf;AACI,UAAI;AAAQ,aAAKxkB,QAAO,SAAS;AAC/B,cAAI,EAAEA,QAAOiW;AAAQ4O,uBAAS5O,QAAOjW,MAAK,QAAQA,KAAI;AAAA,QACvD;AAAA;AAAMwjB,kBAAQA,UAAQ,IAAIA,UAAQ,KAAK,SAAS,aAAakB,OAAM,OAAO;AAAA,IAC5E;AACD,WAAO;AAAA,EACT;ACnEA,MAAI,MAAM5c,UAAwB,IAAI;AAGtCsO,cAA0B,QAAQ,UAAU,SAAU,UAAU;AAC9D,SAAK,KAAK,OAAO,QAAQ;AACzB,SAAK,KAAK;AAAA,EAEZ,GAAG,WAAY;AACb,QAAImE,KAAI,KAAK;AACb,QAAI5a,SAAQ,KAAK;AACjB,QAAI;AACJ,QAAIA,UAAS4a,GAAE;AAAQ,aAAO,EAAE,OAAO,QAAW,MAAM;AACxD,YAAQ,IAAIA,IAAG5a,MAAK;AACpB,SAAK,MAAM,MAAM;AACjB,WAAO,EAAE,OAAO,OAAO,MAAM,MAAK;AAAA,EACpC,CAAC;AChBD,MAAA,YAAiB,SAAU,MAAM,OAAO;AACtC,WAAO,EAAE,OAAc,MAAM,CAAC,CAAC,KAAI;AAAA,EACrC;ACAA,MAAI,OAAOyW;AACX,MAAI0O,cAAYnc;AAChB,MAAI+a,cAAYlM;AAM0B,cAAC,OAAO,SAAS,SAAU,UAAU,MAAM;AACnF,SAAK,KAAKkM,YAAU,QAAQ;AAC5B,SAAK,KAAK;AACV,SAAK,KAAK;AAAA,EAEZ,GAAG,WAAY;AACb,QAAInJ,KAAI,KAAK;AACb,QAAI,OAAO,KAAK;AAChB,QAAI5a,SAAQ,KAAK;AACjB,QAAI,CAAC4a,MAAK5a,UAAS4a,GAAE,QAAQ;AAC3B,WAAK,KAAK;AACV,aAAO,KAAK,CAAC;AAAA,IACd;AACD,QAAI,QAAQ;AAAQ,aAAO,KAAK,GAAG5a,MAAK;AACxC,QAAI,QAAQ;AAAU,aAAO,KAAK,GAAG4a,GAAE5a,OAAM;AAC7C,WAAO,KAAK,GAAG,CAACA,QAAO4a,GAAE5a,OAAM,CAAC;AAAA,EAClC,GAAG,QAAQ;AAGXmlB,cAAU,YAAYA,YAAU;AC5BhC,MAAIhC,WAAS1M,QAAAA;AACb,MAAI,OAAOzN;AACX,MAAImc,cAAYtN;AAChB,MAAI,gBAAgBC,KAAAA,QAAkB,aAAa;AAEnD,MAAI,eAAgB,wbAIS,MAAM,GAAG;AAEtC,WAASxX,MAAI,GAAGA,MAAI,aAAa,QAAQA,OAAK;AAC5C,QAAI,OAAO,aAAaA;AACxB,QAAI,aAAa6iB,SAAO;AACxB,QAAI,QAAQ,cAAc,WAAW;AACrC,QAAI,SAAS,CAAC,MAAM;AAAgB,WAAK,OAAO,eAAe,IAAI;AACnEgC,gBAAU,QAAQA,YAAU;AAAA,EAC9B;;AClBA,UAAA,IAAYhd,KAAAA;ACEZ,MAAAkI,aAAiBrH,QAAkC,EAAE,UAAU;;ACF/D,IAAA8M,QAAiB,UAAA,EAAE,WAAW3N,YAA+C,YAAY;;;;ACAzF,MAAIqd,SAAOrd,KAAkB,MAAM;AACnC,MAAI+G,aAAWuH;AACf,MAAIwB,QAAMjP;AACV,MAAI,UAAU6O,UAAwB;AACtC,MAAI,KAAK;AACT,MAAI,eAAe,OAAO,gBAAgB,WAAY;AACpD,WAAO;AAAA,EACT;AACA,MAAI,SAAS,CAACC,OAAoB,WAAY;AAC5C,WAAO,aAAa,OAAO,kBAAkB,CAAA,CAAE,CAAC;AAAA,EAClD,CAAC;AACD,MAAI,UAAU,SAAUmL,KAAI;AAC1B,YAAQA,KAAIuC,QAAM,EAAE,OAAO;AAAA,MACzB,GAAG,MAAM,EAAE;AAAA,MACX,GAAG,CAAE;AAAA,IACN,EAAA,CAAE;AAAA,EACL;AACA,MAAI,UAAU,SAAUvC,KAAIjS,SAAQ;AAElC,QAAI,CAAC9B,WAAS+T,GAAE;AAAG,aAAO,OAAOA,OAAM,WAAWA,OAAM,OAAOA,OAAM,WAAW,MAAM,OAAOA;AAC7F,QAAI,CAAChL,MAAIgL,KAAIuC,MAAI,GAAG;AAElB,UAAI,CAAC,aAAavC,GAAE;AAAG,eAAO;AAE9B,UAAI,CAACjS;AAAQ,eAAO;AAEpB,cAAQiS,GAAE;AAAA,IAEX;AAAC,WAAOA,IAAGuC,QAAM;AAAA,EACpB;AACA,MAAI,UAAU,SAAUvC,KAAIjS,SAAQ;AAClC,QAAI,CAACiH,MAAIgL,KAAIuC,MAAI,GAAG;AAElB,UAAI,CAAC,aAAavC,GAAE;AAAG,eAAO;AAE9B,UAAI,CAACjS;AAAQ,eAAO;AAEpB,cAAQiS,GAAE;AAAA,IAEX;AAAC,WAAOA,IAAGuC,QAAM;AAAA,EACpB;AAEA,MAAI,WAAW,SAAUvC,KAAI;AAC3B,QAAI,UAAU,KAAK,QAAQ,aAAaA,GAAE,KAAK,CAAChL,MAAIgL,KAAIuC,MAAI;AAAG,cAAQvC,GAAE;AACzE,WAAOA;AAAA,EACT;AACA,MAAI,OAAOwC,MAAA,UAAiB;AAAA,IAC1B,KAAKD;AAAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACF;ACnDA,MAAI3V,SAAO4G,MAAAA;AAEX,MAAIiP,WAAS7N;AACb,MAAIwJ,mBAAiBvJ,UAAwB;MAC7C,aAAiB,SAAU,MAAM;AAC/B,QAAIwJ,WAAUzR,OAAK,WAAWA,OAAK,SAAmB,CAAE;AACxD,QAAI,KAAK,OAAO,CAAC,KAAK,OAAO,EAAE,QAAQyR;AAAUD,uBAAeC,UAAS,MAAM,EAAE,OAAOoE,SAAO,EAAE,IAAI,EAAC,CAAE;AAAA,EAC1G;;ACRS,cAAA,IAAG,OAAO;;ACAV,aAAA,IAAG,CAAA,EAAG;ACCf,MAAI,UAAUvd;AACd,MAAI,OAAOsO;AACX,MAAIkP,QAAM3c;MACV,YAAiB,SAAUia,KAAI;AAC7B,QAAI,SAAS,QAAQA,GAAE;AACvB,QAAI,aAAa,KAAK;AACtB,QAAI,YAAY;AACd,UAAI2C,WAAU,WAAW3C,GAAE;AAC3B,UAAI4C,UAASF,MAAI;AACjB,UAAIrlB,KAAI;AACR,UAAID;AACJ,aAAOulB,SAAQ,SAAStlB;AAAG,YAAIulB,QAAO,KAAK5C,KAAI5iB,OAAMulB,SAAQtlB,KAAI;AAAG,iBAAO,KAAKD,IAAG;AAAA,IACpF;AAAC,WAAO;AAAA,EACX;ACbA,MAAIyjB,QAAM3b;MACV,WAAiB,MAAM,WAAW,SAAS2d,SAAQ,KAAK;AACtD,WAAOhC,MAAI,GAAG,KAAK;AAAA,EACrB;;;ACHA,MAAIO,UAAQlc;AACZ,MAAI,aAAasO,aAA4B,OAAO,UAAU,WAAW;AAEhE,cAAA,IAAG,OAAO,uBAAuB,SAASsP,qBAAoBnL,IAAG;AACxE,WAAOyJ,QAAMzJ,IAAG,UAAU;AAAA,EAC5B;ACLA,MAAImJ,cAAY5b;AAChB,MAAI6d,SAAOvP,YAA0B;AACrC,MAAInH,aAAW,CAAE,EAAC;AAElB,MAAI,cAAc,OAAO,UAAU,YAAY,UAAU,OAAO,sBAC5D,OAAO,oBAAoB,MAAM,IAAI;AAEzC,MAAI,iBAAiB,SAAU2T,KAAI;AACjC,QAAI;AACF,aAAO+C,OAAK/C,GAAE;AAAA,IACf,SAAQxe,IAAP;AACA,aAAO,YAAY;IACpB;AAAA,EACH;AAEA,iBAAA,IAAmB,SAASshB,qBAAoB9C,KAAI;AAClD,WAAO,eAAe3T,WAAS,KAAK2T,GAAE,KAAK,oBAAoB,eAAeA,GAAE,IAAI+C,OAAKjC,YAAUd,GAAE,CAAC;AAAA,EACxG;;AClBA,MAAI,MAAM9a;AACV,MAAIub,eAAajN;AACjB,MAAIsN,cAAY/a;AAChB,MAAIwa,gBAAc3L;AAClB,MAAII,QAAMH;AACV,MAAI,iBAAiB4M;AACrB,MAAIuB,SAAO,OAAO;AAET,cAAA,IAAGb,eAA4Ba,SAAO,SAAS,yBAAyBrL,IAAGC,IAAG;AACrF,IAAAD,KAAImJ,YAAUnJ,EAAC;AACf,IAAAC,KAAI2I,cAAY3I,IAAG,IAAI;AACvB,QAAI;AAAgB,UAAI;AACtB,eAAOoL,OAAKrL,IAAGC,EAAC;AAAA,MACpB,SAAWpW,IAAP;AAAA,MAAyB;AAC3B,QAAIwT,MAAI2C,IAAGC,EAAC;AAAG,aAAO6I,aAAW,CAAC,IAAI,EAAE,KAAK9I,IAAGC,EAAC,GAAGD,GAAEC,GAAE;AAAA,EAC1D;ACbA,MAAIsI,WAAShb,QAAAA;AACb,MAAI,MAAMsO;AACV,MAAI,cAAczN;AAClB,MAAI6a,YAAUhM;AACd,MAAI,WAAWC,UAAAA;AACf,MAAI,OAAO4M,MAAkB,QAAC;AAC9B,MAAI,SAASU;AACb,MAAI,SAASC,QAAAA;AACb,MAAI,iBAAiBE;AACrB,MAAI,MAAMW;AACV,MAAI,MAAMC,KAAAA;AACV,MAAI,SAASC;AACb,MAAI,YAAYC;AAChB,MAAI,WAAWC;AACf,MAAIR,YAAUS;AACd,MAAIjD,aAAWkD;AACf,MAAItX,aAAWuX;AACf,MAAIzB,aAAW0B;AACf,MAAI,YAAYC;AAChB,MAAI,cAAcC;AAClB,MAAI,aAAaC;AACjB,MAAIC,YAAUC;AACd,MAAI,UAAUC;AACd,MAAI,QAAQC;AACZ,MAAI,QAAQC;AACZ,MAAI,MAAMC;AACV,MAAI9C,UAAQ+C;AACZ,MAAI,OAAO,MAAM;AACjB,MAAI,KAAK,IAAI;AACb,MAAI,OAAO,QAAQ;AACnB,MAAI,UAAUjE,SAAO;AACrB,MAAI,QAAQA,SAAO;AACnB,MAAI,aAAa,SAAS,MAAM;AAChC,MAAI,YAAY;AAChB,MAAI,SAAS,IAAI,SAAS;AAC1B,MAAI,eAAe,IAAI,aAAa;AACpC,MAAI,SAAS,CAAE,EAAC;AAChB,MAAI,iBAAiB,OAAO,iBAAiB;AAC7C,MAAI,aAAa,OAAO,SAAS;AACjC,MAAI,YAAY,OAAO,YAAY;AACnC,MAAI,cAAc,OAAO;AACzB,MAAI,aAAa,OAAO,WAAW,cAAc,CAAC,CAAC,MAAM;AACzD,MAAI,UAAUA,SAAO;AAErB,MAAI,SAAS,CAAC,WAAW,CAAC,QAAQ,cAAc,CAAC,QAAQ,WAAW;AAGpE,MAAI,gBAAgB,eAAe,OAAO,WAAY;AACpD,WAAO2D,UAAQ,GAAG,CAAE,GAAE,KAAK;AAAA,MACzB,KAAK,WAAY;AAAE,eAAO,GAAG,MAAM,KAAK,EAAE,OAAO,EAAC,CAAE,EAAE;AAAA,MAAI;AAAA,IAC9D,CAAG,CAAC,EAAE,KAAK;AAAA,EACX,CAAC,IAAI,SAAU7D,KAAI5iB,MAAK2Z,IAAG;AACzB,QAAI,YAAY,KAAK,aAAa3Z,IAAG;AACrC,QAAI;AAAW,aAAO,YAAYA;AAClC,OAAG4iB,KAAI5iB,MAAK2Z,EAAC;AACb,QAAI,aAAaiJ,QAAO;AAAa,SAAG,aAAa5iB,MAAK,SAAS;AAAA,EACrE,IAAI;AAEJ,MAAI,OAAO,SAAU,KAAK;AACxB,QAAI,MAAM,WAAW,OAAOymB,UAAQ,QAAQ,UAAU;AACtD,QAAI,KAAK;AACT,WAAO;AAAA,EACT;AAEA,MAAIO,aAAW,cAAc,OAAO,QAAQ,YAAY,WAAW,SAAUpE,KAAI;AAC/E,WAAO,OAAOA,OAAM;AAAA,EACtB,IAAI,SAAUA,KAAI;AAChB,WAAOA,eAAc;AAAA,EACvB;AAEA,MAAI,kBAAkB,SAAS5B,gBAAe4B,KAAI5iB,MAAK2Z,IAAG;AACxD,QAAIiJ,QAAO;AAAa,sBAAgB,WAAW5iB,MAAK2Z,EAAC;AACzDsJ,eAASL,GAAE;AACX,IAAA5iB,OAAM,YAAYA,MAAK,IAAI;AAC3BijB,eAAStJ,EAAC;AACV,QAAI,IAAI,YAAY3Z,IAAG,GAAG;AACxB,UAAI,CAAC2Z,GAAE,YAAY;AACjB,YAAI,CAAC,IAAIiJ,KAAI,MAAM;AAAG,aAAGA,KAAI,QAAQ,WAAW,GAAG,CAAA,CAAE,CAAC;AACtD,QAAAA,IAAG,QAAQ5iB,QAAO;AAAA,MACxB,OAAW;AACL,YAAI,IAAI4iB,KAAI,MAAM,KAAKA,IAAG,QAAQ5iB;AAAM,UAAA4iB,IAAG,QAAQ5iB,QAAO;AAC1D,QAAA2Z,KAAI8M,UAAQ9M,IAAG,EAAE,YAAY,WAAW,GAAG,KAAK,EAAC,CAAE;AAAA,MACpD;AAAC,aAAO,cAAciJ,KAAI5iB,MAAK2Z,EAAC;AAAA,IAClC;AAAC,WAAO,GAAGiJ,KAAI5iB,MAAK2Z,EAAC;AAAA,EACxB;AACA,MAAI,oBAAoB,SAAS,iBAAiBiJ,KAAIpI,IAAG;AACvDyI,eAASL,GAAE;AACX,QAAIpd,QAAO,SAASgV,KAAI,UAAUA,EAAC,CAAC;AACpC,QAAIva,KAAI;AACR,QAAIiX,KAAI1R,MAAK;AACb,QAAIxF;AACJ,WAAOkX,KAAIjX;AAAG,sBAAgB2iB,KAAI5iB,OAAMwF,MAAKvF,OAAMua,GAAExa,KAAI;AACzD,WAAO4iB;AAAA,EACT;AACA,MAAI,UAAU,SAASjS,QAAOiS,KAAIpI,IAAG;AACnC,WAAOA,OAAM,SAAYiM,UAAQ7D,GAAE,IAAI,kBAAkB6D,UAAQ7D,GAAE,GAAGpI,EAAC;AAAA,EACzE;AACA,MAAI,wBAAwB,SAASyM,sBAAqBjnB,MAAK;AAC7D,QAAI4Z,KAAI,OAAO,KAAK,MAAM5Z,OAAM,YAAYA,MAAK,IAAI,CAAC;AACtD,QAAI,SAAS,eAAe,IAAI,YAAYA,IAAG,KAAK,CAAC,IAAI,WAAWA,IAAG;AAAG,aAAO;AACjF,WAAO4Z,MAAK,CAAC,IAAI,MAAM5Z,IAAG,KAAK,CAAC,IAAI,YAAYA,IAAG,KAAK,IAAI,MAAM,MAAM,KAAK,KAAK,QAAQA,QAAO4Z,KAAI;AAAA,EACvG;AACA,MAAI,4BAA4B,SAAS,yBAAyBgJ,KAAI5iB,MAAK;AACzE,IAAA4iB,MAAK,UAAUA,GAAE;AACjB,IAAA5iB,OAAM,YAAYA,MAAK,IAAI;AAC3B,QAAI4iB,QAAO,eAAe,IAAI,YAAY5iB,IAAG,KAAK,CAAC,IAAI,WAAWA,IAAG;AAAG;AACxE,QAAI2Z,KAAI,KAAKiJ,KAAI5iB,IAAG;AACpB,QAAI2Z,MAAK,IAAI,YAAY3Z,IAAG,KAAK,EAAE,IAAI4iB,KAAI,MAAM,KAAKA,IAAG,QAAQ5iB;AAAO,MAAA2Z,GAAE,aAAa;AACvF,WAAOA;AAAA,EACT;AACA,MAAI,uBAAuB,SAAS+L,qBAAoB9C,KAAI;AAC1D,QAAI,QAAQ,KAAK,UAAUA,GAAE,CAAC;AAC9B,QAAI,SAAS,CAAA;AACb,QAAI3iB,KAAI;AACR,QAAID;AACJ,WAAO,MAAM,SAASC,IAAG;AACvB,UAAI,CAAC,IAAI,YAAYD,OAAM,MAAMC,KAAI,KAAKD,QAAO,UAAUA,QAAO;AAAM,eAAO,KAAKA,IAAG;AAAA,IACxF;AAAC,WAAO;AAAA,EACX;AACA,MAAI,yBAAyB,SAASknB,uBAAsBtE,KAAI;AAC9D,QAAI,QAAQA,QAAO;AACnB,QAAI,QAAQ,KAAK,QAAQ,YAAY,UAAUA,GAAE,CAAC;AAClD,QAAI,SAAS,CAAA;AACb,QAAI3iB,KAAI;AACR,QAAID;AACJ,WAAO,MAAM,SAASC,IAAG;AACvB,UAAI,IAAI,YAAYD,OAAM,MAAMC,KAAI,MAAM,QAAQ,IAAI,aAAaD,IAAG,IAAI;AAAO,eAAO,KAAK,WAAWA,KAAI;AAAA,IAC7G;AAAC,WAAO;AAAA,EACX;AAGA,MAAI,CAAC,YAAY;AACf,cAAU,SAASskB,UAAS;AAC1B,UAAI,gBAAgB;AAAS,cAAM,UAAU,8BAA8B;AAC3E,UAAI,MAAM,IAAI,UAAU,SAAS,IAAI,UAAU,KAAK,MAAS;AAC7D,UAAI,OAAO,SAAU,OAAO;AAC1B,YAAI,SAAS;AAAa,eAAK,KAAK,WAAW,KAAK;AACpD,YAAI,IAAI,MAAM,MAAM,KAAK,IAAI,KAAK,SAAS,GAAG;AAAG,eAAK,QAAQ,OAAO;AACrE,sBAAc,MAAM,KAAK,WAAW,GAAG,KAAK,CAAC;AAAA,MACnD;AACI,UAAI,eAAe;AAAQ,sBAAc,aAAa,KAAK,EAAE,cAAc,MAAM,KAAK,KAAM,CAAA;AAC5F,aAAO,KAAK,GAAG;AAAA,IACnB;AACE,aAAS,QAAQ,YAAY,YAAY,SAASrV,YAAW;AAC3D,aAAO,KAAK;AAAA,IAChB,CAAG;AAED,UAAM,IAAI;AACV,QAAI,IAAI;AACRkY,gBAA0B,IAAI,QAAQ,IAAI;AAC1CC,eAAyB,IAAI;AAC7B,UAAM,IAAI;AAEV,QAAI,eAAe,CAACC,UAAuB;AACzC,eAAS,aAAa,wBAAwB,uBAAuB,IAAI;AAAA,IAC1E;AAED,WAAO,IAAI,SAAU,MAAM;AACzB,aAAO,KAAK,IAAI,IAAI,CAAC;AAAA,IACzB;AAAA,EACA;AAEO,YAAC7D,UAAQ,IAAIA,UAAQ,IAAIA,UAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,QAAS,CAAA;AAE5E,WAAS,aAEP,iHACA,MAAM,GAAG,GAAG/iB,MAAI,GAAG,WAAW,SAASA;AAAG,QAAI,WAAWA,MAAI;AAE/D,WAAS,mBAAmBujB,QAAM,IAAI,KAAK,GAAG,IAAI,GAAG,iBAAiB,SAAS;AAAI,cAAU,iBAAiB,IAAI;AAElHR,YAAQA,UAAQ,IAAIA,UAAQ,IAAI,CAAC,YAAY,UAAU;AAAA,IAErD,OAAO,SAAUxjB,MAAK;AACpB,aAAO,IAAI,gBAAgBA,QAAO,EAAE,IAChC,eAAeA,QACf,eAAeA,QAAO,QAAQA,IAAG;AAAA,IACtC;AAAA,IAED,QAAQ,SAAS,OAAO,KAAK;AAC3B,UAAI,CAACgnB,WAAS,GAAG;AAAG,cAAM,UAAU,MAAM,mBAAmB;AAC7D,eAAShnB,QAAO;AAAgB,YAAI,eAAeA,UAAS;AAAK,iBAAOA;AAAA,IACzE;AAAA,IACD,WAAW,WAAY;AAAE,eAAS;AAAA,IAAO;AAAA,IACzC,WAAW,WAAY;AAAE,eAAS;AAAA,IAAQ;AAAA,EAC5C,CAAC;AAEDwjB,YAAQA,UAAQ,IAAIA,UAAQ,IAAI,CAAC,YAAY,UAAU;AAAA,IAErD,QAAQ;AAAA,IAER,gBAAgB;AAAA,IAEhB,kBAAkB;AAAA,IAElB,0BAA0B;AAAA,IAE1B,qBAAqB;AAAA,IAErB,uBAAuB;AAAA,EACzB,CAAC;AAID,MAAI,sBAAsB,OAAO,WAAY;AAAE,UAAM,EAAE,CAAC;AAAA,EAAE,CAAE;AAE5DA,YAAQA,UAAQ,IAAIA,UAAQ,IAAI,qBAAqB,UAAU;AAAA,IAC7D,uBAAuB,SAAS0D,uBAAsBtE,KAAI;AACxD,aAAO,MAAM,EAAE+B,WAAS/B,GAAE,CAAC;AAAA,IAC5B;AAAA,EACH,CAAC;AAGD,WAASY,UAAQA,UAAQ,IAAIA,UAAQ,KAAK,CAAC,cAAc,OAAO,WAAY;AAC1E,QAAI7I,KAAI;AAIR,WAAO,WAAW,CAACA,EAAC,CAAC,KAAK,YAAY,WAAW,EAAE,GAAGA,GAAC,CAAE,KAAK,QAAQ,WAAW,OAAOA,EAAC,CAAC,KAAK;AAAA,EACjG,CAAC,IAAI,QAAQ;AAAA,IACX,WAAW,SAAS3D,WAAU4L,KAAI;AAChC,UAAI,OAAO,CAACA,GAAE;AACd,UAAI3iB,KAAI;AACR,UAAI,UAAU;AACd,aAAO,UAAU,SAASA;AAAG,aAAK,KAAK,UAAUA,KAAI;AACrD,kBAAY,WAAW,KAAK;AAC5B,UAAI,CAAC4O,WAAS,QAAQ,KAAK+T,QAAO,UAAaoE,WAASpE,GAAE;AAAG;AAC7D,UAAI,CAAC6C,UAAQ,QAAQ;AAAG,mBAAW,SAAUzlB,MAAK,OAAO;AACvD,cAAI,OAAO,aAAa;AAAY,oBAAQ,UAAU,KAAK,MAAMA,MAAK,KAAK;AAC3E,cAAI,CAACgnB,WAAS,KAAK;AAAG,mBAAO;AAAA,QACnC;AACI,WAAK,KAAK;AACV,aAAO,WAAW,MAAM,OAAO,IAAI;AAAA,IACpC;AAAA,EACH,CAAC;AAGD,UAAQ,WAAW,iBAAiBM,MAAmB,QAAQ,YAAY,cAAc,QAAQ,WAAW,OAAO;AAEnH,iBAAe,SAAS,QAAQ;AAEhC,iBAAe,MAAM,QAAQ,IAAI;AAEjC,iBAAexE,SAAO,MAAM,QAAQ,IAAI;ACrPhB,aAAC,eAAe;ACAhB,aAAC,YAAY;MCIrC,SAAiBrL,MAA8B,QAAC;;ACJhD,IAAAhC,QAAiB,UAAA,EAAE,WAAW3N,QAAsC,YAAY;;ACEhFyf,YAAO,aAAc;AAErB,MAAI,YAAYzf,WAAAA;AAEhB,MAAI,aAAa4T,yBAAuB,SAAS;AAEjD,MAAI,UAAUtF,SAAAA;AAEd,MAAI,WAAWsF,yBAAuB,OAAO;AAE7C,MAAIY,YAAU,OAAO,SAAS,YAAY,cAAc,OAAO,WAAW,YAAY,WAAW,SAAU,KAAK;AAAE,WAAO,OAAO;AAAA,EAAM,IAAG,SAAU,KAAK;AAAE,WAAO,OAAO,OAAO,SAAS,YAAY,cAAc,IAAI,gBAAgB,SAAS,WAAW,QAAQ,SAAS,QAAQ,YAAY,WAAW,OAAO;AAAA;AAEjT,WAASZ,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/F,YAAA,UAAkB,OAAO,SAAS,YAAY,cAAcY,UAAQ,WAAW,OAAO,MAAM,WAAW,SAAU,KAAK;AACpH,WAAO,OAAO,QAAQ,cAAc,cAAcA,UAAQ,GAAG;AAAA,EAC/D,IAAI,SAAU,KAAK;AACjB,WAAO,OAAO,OAAO,SAAS,YAAY,cAAc,IAAI,gBAAgB,SAAS,WAAW,QAAQ,SAAS,QAAQ,YAAY,WAAW,OAAO,QAAQ,cAAc,cAAcA,UAAQ,GAAG;AAAA,EACxM;AClBAkL,8BAAO,aAAc;AAErB,MAAIC,aAAW3f;AAEf,MAAI4f,aAAWhM,yBAAuB+L,UAAQ;AAE9C,WAAS/L,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/F8L,8BAAA,UAAkB,SAAUrnB,OAAM,MAAM;AACtC,QAAI,CAACA,OAAM;AACT,YAAM,IAAI,eAAe,2DAA2D;AAAA,IACrF;AAED,WAAO,UAAU,OAAO,SAAS,cAAc,eAAc,GAAIunB,WAAS,SAAS,IAAI,OAAO,YAAY,OAAO,SAAS,cAAc,OAAOvnB;AAAA,EACjJ;;;;;;;;;ACdA,QAAI0O,YAAW/G;AACf,QAAImb,YAAW7M;AACf,QAAI7N,SAAQ,SAAUgS,IAAGtE,QAAO;AAC9B,MAAAgN,UAAS1I,EAAC;AACV,UAAI,CAAC1L,UAASoH,MAAK,KAAKA,WAAU;AAAM,cAAM,UAAUA,SAAQ,2BAA2B;AAAA,IAC7F;AACA,gBAAiB;AAAA,MACf,KAAK,OAAO,mBAAmB,eAAe,CAAE,IAC9C,SAAU,MAAM,OAAO5U,MAAK;AAC1B,YAAI;AACF,UAAAA,OAAMsH,KAAkB,SAAS,MAAM6O,YAA0B,EAAE,OAAO,WAAW,WAAW,EAAE,KAAK,CAAC;AACxG,UAAAnW,KAAI,MAAM,CAAA,CAAE;AACZ,kBAAQ,EAAE,gBAAgB;AAAA,QAC3B,SAAQ+C,IAAP;AAAY,kBAAQ;AAAA,QAAO;AAC7B,eAAO,SAASujB,gBAAepN,IAAGtE,QAAO;AACvC,UAAA1N,OAAMgS,IAAGtE,MAAK;AACd,cAAI;AAAO,YAAAsE,GAAE,YAAYtE;AAAA;AACpB,YAAA5U,KAAIkZ,IAAGtE,MAAK;AACjB,iBAAOsE;AAAA,QACf;AAAA,MACA,EAAM,CAAE,GAAE,KAAK,IAAI;AAAA,MACjB,OAAOhS;AAAA;;;ACtBT,MAAIib,YAAU1b;AACd0b,YAAQA,UAAQ,GAAG,UAAU,EAAE,gBAAgBpN,iBAAA,EAAwB,KAAK;ACD5E,MAAA,iBAAiBA,MAAAA,QAA+B,OAAO;;ACDvD,IAAAX,QAAiB,UAAA,EAAE,WAAW3N,gBAAuD,YAAY;;;ACAjG,MAAI0b,YAAU1b;AAEd0b,YAAQA,UAAQ,GAAG,UAAU,EAAE,QAAQpN,cAA2B,CAAE;ACDpE,MAAIwR,YAAUxR,MAA8B,QAAC;AAC7C,MAAA,SAAiB,SAASzF,QAAO6J,IAAGb,IAAG;AACrC,WAAOiO,UAAQ,OAAOpN,IAAGb,EAAC;AAAA,EAC5B;;ACJA,IAAAlE,QAAiB,UAAA,EAAE,WAAW3N,QAA6C,YAAY;;ACEvF+f,aAAO,aAAc;AAErB,MAAIlL,oBAAkB7U,iBAAAA;AAEtB,MAAI,mBAAmB4T,yBAAuBiB,iBAAe;AAE7D,MAAI,UAAUvG,SAAAA;AAEd,MAAI,WAAWsF,yBAAuB,OAAO;AAE7C,MAAI+L,aAAW9e;AAEf,MAAI+e,aAAWhM,yBAAuB+L,UAAQ;AAE9C,WAAS/L,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/FmM,aAAA,UAAkB,SAAU,UAAU,YAAY;AAChD,QAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAC3D,YAAM,IAAI,UAAU,8DAA8D,OAAO,eAAe,cAAc,eAAc,GAAIH,WAAS,SAAS,UAAU,EAAE;AAAA,IACvK;AAED,aAAS,gBAAgB,SAAS,SAAS,cAAc,WAAW,WAAW;AAAA,MAC7E,aAAa;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,cAAc;AAAA,MACf;AAAA,IACL,CAAG;AACD,QAAI;AAAY,uBAAiB,WAAc,GAAA,iBAAiB,SAAS,UAAU,UAAU,IAAI,SAAS,YAAY;AAAA,EACxH;;;;;;;;;AC9BA,QAAII,eAAchgB;AAClB,QAAIoc,WAAU9N;AACd,QAAI2R,QAAOpf;AACX,QAAI2c,OAAM9N;AACV,QAAImN,YAAWlN;AACf,QAAIuQ,WAAU3D;AACd,QAAI,UAAU,OAAO;AAGrB,oBAAiB,CAAC,WAAWU,OAAoB,WAAY;AAC3D,UAAIvL,KAAI,CAAA;AACR,UAAIC,KAAI,CAAA;AAER,UAAIkB,KAAI;AACR,UAAIT,KAAI;AACR,MAAAV,GAAEmB,MAAK;AACP,MAAAT,GAAE,MAAM,EAAE,EAAE,QAAQ,SAAUpD,IAAG;AAAE,QAAA2C,GAAE3C,MAAKA;AAAA,MAAI,CAAA;AAC9C,aAAO,QAAQ,CAAA,GAAI0C,EAAC,EAAEmB,OAAM,KAAK,OAAO,KAAK,QAAQ,CAAE,GAAElB,EAAC,CAAC,EAAE,KAAK,EAAE,KAAKS;AAAA,IAC1E,CAAA,IAAI,SAASzD,QAAO3U,SAAQ,QAAQ;AACnC,UAAI8Y,KAAI+J,UAAS7iB,OAAM;AACvB,UAAI,OAAO,UAAU;AACrB,UAAInC,SAAQ;AACZ,UAAI,aAAaooB,MAAK;AACtB,UAAIvC,UAASF,KAAI;AACjB,aAAO,OAAO3lB,QAAO;AACnB,YAAIgb,KAAIqN,SAAQ,UAAUroB,SAAQ;AAClC,YAAI6F,QAAO,aAAa0e,SAAQvJ,EAAC,EAAE,OAAO,WAAWA,EAAC,CAAC,IAAIuJ,SAAQvJ,EAAC;AACpE,YAAI7L,UAAStJ,MAAK;AAClB,YAAI/E,KAAI;AACR,YAAIT;AACJ,eAAO8O,UAASrO,IAAG;AACjB,UAAAT,OAAMwF,MAAK/E;AACX,cAAI,CAACqnB,gBAAetC,QAAO,KAAK7K,IAAG3a,IAAG;AAAG,YAAA4a,GAAE5a,QAAO2a,GAAE3a;AAAA,QACrD;AAAA,MACF;AAAC,aAAO4a;AAAA,IACV,IAAG;;;ACpCJ,MAAI4I,YAAU1b;AAEd0b,YAAQA,UAAQ,IAAIA,UAAQ,GAAG,UAAU,EAAE,QAAQpN,qBAAA,GAA6B;ACFhF,MAAAK,WAAiBL,MAAAA,QAA+B,OAAO;;ACDvD,IAAAX,QAAiB,UAAA,EAAE,WAAW3N,UAA6C,YAAY;;ACEvFoV,aAAO,aAAc;AAErB,MAAI,UAAUpV,SAAAA;AAEd,MAAI,WAAW4T,yBAAuB,OAAO;AAE7C,WAASA,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/F,aAAA,UAAkB,SAAS,WAAW,SAAU5Z,SAAQ;AACtD,aAAS7B,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACzC,UAAI,SAAS,UAAUA;AAEvB,eAASD,QAAO,QAAQ;AACtB,YAAI,OAAO,UAAU,eAAe,KAAK,QAAQA,IAAG,GAAG;AACrD,UAAA8B,QAAO9B,QAAO,OAAOA;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAED,WAAO8B;AAAA,EACT;;ACrBA,MAAI0hB,YAAU1b;AACd,MAAI,OAAOsO,MAAAA;AACX,MAAI,QAAQzN;AACZ,MAAA,aAAiB,SAAU,KAAK,MAAM;AACpC,QAAI,MAAM,KAAK,UAAU,CAAE,GAAE,QAAQ,OAAO;AAC5C,QAAI,MAAM,CAAA;AACV,QAAI,OAAO,KAAK,EAAE;AAClB6a,cAAQA,UAAQ,IAAIA,UAAQ,IAAI,MAAM,WAAY;AAAE,SAAG,CAAC;AAAA,IAAE,CAAE,GAAG,UAAU,GAAG;AAAA,EAC9E;ACRA,MAAImB,aAAW7c;AACf,MAAI,QAAQsO;AAEY,aAAC,QAAQ,WAAY;AAC3C,WAAO,SAAS5Q,MAAKod,KAAI;AACvB,aAAO,MAAM+B,WAAS/B,GAAE,CAAC;AAAA,IAC7B;AAAA,EACA,CAAC;ACPD,MAAA,OAAiBxM,MAAAA,QAA+B,OAAO;;ACDvD,IAAAX,QAAiB,UAAA,EAAE,WAAW3N,MAA2C,YAAY;;;;;ACErF,IAAAiQ,SAAA,aAAqB;AAErB,QAAIkQ,aAAYngB,WAAAA;AAEhB,QAAIogB,cAAaxM,wBAAuBuM,UAAS;AAEjD,IAAAlQ,SAAQ,aAAaoQ;AAErB,aAASzM,wBAAuB,KAAK;AAAE,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,IAAG;AAEjG,aAASyM,SAAQ,KAAK;AACpB,UAAI/mB,QAAO,OAAO,UAAU,SAAS,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE;AAC1D,UAAIA,UAAS,YAAY,OAAO,IAAI8mB,YAAW,gBAAgB,YAAY;AACzE,eAAO;AAAA,MACR;AAED,UAAI9mB,UAAS,YAAY,IAAI,gBAAgB,UAAU,eAAe,QAAQ;AAE5E,eAAO;AAAA,MACR;AAED,aAAOA;AAAA,IACT;AAAA;;;ACvBwB,aAAC,uBAAuB,WAAY;AAC1D,WAAOgV,eAA8B;AAAA,EACvC,CAAC;ACFD,MAAI,UAAUA,MAA8B,QAAC;AAC7C,MAAA,sBAAiB,SAASsP,qBAAoB9C,KAAI;AAChD,WAAO,QAAQ,oBAAoBA,GAAE;AAAA,EACvC;;ACJA,IAAAnN,QAAiB,UAAA,EAAE,WAAW3N,qBAA6D,YAAY;;;;;ACEvG,IAAAiQ,SAAA,aAAqB;AAErB,QAAIqQ,aAAYtgB;AAEhB,QAAIugB,aAAY3M,wBAAuB0M,UAAS;AAEhD,QAAI3M,UAASrF,MAAAA;AAEb,QAAIkS,WAAU5M,wBAAuBD,OAAM;AAE3C,QAAIE,cAAahT,UAAAA;AAEjB,QAAIiT,eAAcF,wBAAuBC,WAAU;AAEnD,aAASD,wBAAuB,KAAK;AAAE,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,IAAG;AAEjG,QAAI6M,aAAY,SAASA,WAAU,MAAM;AACvC,UAAI,UAAU,KAAK,SACf,aAAa,KAAK,YAClB,WAAW,KAAK,UAChB,WAAW,KAAK,UAChB,UAAU,KAAK;AACnB,aAAOD,SAAQ,WAAW;AAAA,QACxB;AAAA,SACA,GAAID,WAAU,YAAY,CAAA,GAAI,QAAQ,kBAAkB,UAAU,GAAG,EAAE,SAAkB;AAAA,QACzFC,SAAQ,WAAW;AAAA,UACjB;AAAA,UACA,QAAQ,CAAC,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU;AAAA,UAC9D;AAAA,UACA,eAAe,YAAYA,SAAQ,WAAW;AAAA,YAC5C;AAAA,YACA,QAAQ,CAAC,aAAa,gBAAgB,CAAC;AAAA,YACvC;AAAA,UACD;AAAA,QACF;AAAA,MACL;AAAA,IACA;AAEA,IAAAC,WAAU,YAAY;AAAA,MACpB,SAAS3M,aAAY,WAAW,KAAK;AAAA,MACrC,YAAYA,aAAY,WAAW,MAAM,CAAC,UAAU,QAAQ,CAAC;AAAA,MAC7D,UAAUA,aAAY,WAAW,KAAK;AAAA,MACtC,UAAUA,aAAY,WAAW,OAAO;AAAA,MACxC,SAASA,aAAY,WAAW,KAAK;AAAA,IACvC;AAEA,IAAA2M,WAAU,eAAe;AAAA,MACvB,YAAY;AAAA,IACd;AAEA,IAAAxQ,SAAQ,aAAawQ;AAAA;;;;ACnDrB,MAAI,MAAMzgB;AACV,MAAI,MAAMsO,KAAAA,QAAkB,aAAa;AAEzC,MAAI,MAAM,IAAI,WAAY;AAAE,WAAO;AAAA,EAAY,EAAA,CAAE,KAAK;AAGtD,MAAI,SAAS,SAAUwM,KAAI5iB,MAAK;AAC9B,QAAI;AACF,aAAO4iB,IAAG5iB;AAAA,IACd,SAAWoE,IAAP;AAAA,IAAyB;AAAA,EAC7B;MAEA,WAAiB,SAAUwe,KAAI;AAC7B,QAAIrI,IAAGK,IAAGnB;AACV,WAAOmJ,QAAO,SAAY,cAAcA,QAAO,OAAO,SAElD,QAAQhI,KAAI,OAAOL,KAAI,OAAOqI,GAAE,GAAG,GAAG,MAAM,WAAWhI,KAEvD,MAAM,IAAIL,EAAC,KAEVd,KAAI,IAAIc,EAAC,MAAM,YAAY,OAAOA,GAAE,UAAU,aAAa,cAAcd;AAAA,EAChF;ACtBA,MAAI+O,YAAU1gB;AACd,MAAImd,aAAW7O,KAAAA,QAAkB,UAAU;AAC3C,MAAI0O,cAAYnc;AAChB,MAAA,yBAAiB6O,MAAkB,QAAC,oBAAoB,SAAUoL,KAAI;AACpE,QAAIA,OAAM;AAAW,aAAOA,IAAGqC,eAC1BrC,IAAG,iBACHkC,YAAU0D,UAAQ5F,GAAE;AAAA,EAC3B;ACPA,MAAI,WAAW9a;AACf,MAAIkU,QAAM5F;AACV,MAAA,mBAAiBzN,MAAkB,QAAC,cAAc,SAAUia,KAAI;AAC9D,QAAI,SAAS5G,MAAI4G,GAAE;AACnB,QAAI,OAAO,UAAU;AAAY,YAAM,UAAUA,MAAK,mBAAmB;AACzE,WAAO,SAAS,OAAO,KAAKA,GAAE,CAAC;AAAA,EACjC;;ACJA,IAAAnN,QAAA,UAAiB9M;AAAAA;;ACFjB,IAAA8M,QAAiB,UAAA,EAAE,WAAW3N,YAAAA,SAA4C,YAAY;;;ACEtF,IAAAiQ,SAAA,aAAqB;AAErB,QAAI0Q,iBAAgB3gB,cAAAA;AAEpB,QAAI4gB,iBAAgBhN,wBAAuB+M,cAAa;AAExD,QAAI,uBAAuBrS,sBAAAA;AAE3B,QAAI,wBAAwBsF,wBAAuB,oBAAoB;AAEvE,QAAIiN,SAAQhgB,OAAAA;AAEZ,QAAIigB,UAASlN,wBAAuBiN,MAAK;AAEzC,IAAA5Q,SAAQ,aAAa8Q;AAErB,aAASnN,wBAAuB,KAAK;AAAE,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,IAAG;AAEjG,aAAS,UAAUta,OAAM,YAAY;AACnC,UAAIA,UAAS,UAAU;AACrB,gBAAW,GAAAwnB,QAAO,YAAY,UAAU,EAAE;AAAA,MAC9C,WAAaxnB,UAAS,SAAS;AAC3B,eAAO,WAAW;AAAA,MACnB;AAED,aAAO;AAAA,IACR;AAED,aAAS,cAAc,YAAY;AACjC,aAAO,OAAO,WAAW,QAAQ;AAAA,IAClC;AAED,aAAS,WAAWA,OAAM,YAAY,gBAAgB;AACpD,UAAIT,QAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,UAAI,KAAK,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE7E,UAAI,MAAM;AAEV,UAAIS,UAAS,UAAU;AACrB,YAAIoE,SAAW,GAAA,sBAAsB,YAAY,UAAU;AAE3D,YAAI,gBAAgB;AAClB,UAAAA,MAAK,KAAK,mBAAmB,OAAO,SAAY,cAAc;AAAA,QAC/D;AAED,QAAAA,QAAOA,MAAK,MAAM7E,OAAM,KAAK,CAAC;AAE9B,cAAM;AAAA,UACJ,SAAS6E,MAAK,IAAI,SAAUxF,MAAK;AAC/B,mBAAO,EAAE,KAAKA,MAAK,OAAO,WAAWA;UAC7C,CAAO;AAAA,QACP;AAAA,MACA,WAAaoB,UAAS,SAAS;AAC3B,cAAM;AAAA,UACJ,SAAS,WAAW,MAAMT,OAAM,KAAK,CAAC,EAAE,IAAI,SAAU,KAAKmoB,MAAK;AAC9D,mBAAO,EAAE,KAAKA,OAAMnoB,OAAM,OAAO,IAAG;AAAA,UAC5C,CAAO;AAAA,QACP;AAAA,MACA,OAAS;AACL,YAAI,MAAM;AACV,YAAI,UAAU,CAAA;AACd,YAAI,OAAO;AAEX,YAAI,QAAQ,cAAc,UAAU;AAEpC,iBAASsnB,aAAY,YAAYc,YAAW,MAAM,QAAQd,UAAS,GAAG,KAAK,GAAGA,aAAYc,YAAWd,cAAgB,GAAAS,eAAc,YAAYT,UAAS,OAAK;AAC3J,cAAI;AAEJ,cAAIc,WAAU;AACZ,gBAAI,MAAMd,WAAU;AAAQ;AAC5B,mBAAOA,WAAU;AAAA,UACzB,OAAa;AACL,iBAAKA,WAAU;AACf,gBAAI,GAAG;AAAM;AACb,mBAAO,GAAG;AAAA,UACX;AAED,cAAI,OAAO;AAEX,cAAI,MAAM,IAAI;AACZ,mBAAO;AACP;AAAA,UACD;AACD,cAAItnB,SAAQ,KAAK;AACf,gBAAI,SAAS,MAAM,QAAQ,IAAI,GAAG;AAChC,kBAAI,OAAO,KAAK,OAAO,YAAY,OAAO,KAAK,OAAO,UAAU;AAC9D,wBAAQ,KAAK,EAAE,KAAK,KAAK,IAAI,OAAO,KAAK,GAAE,CAAE;AAAA,cACzD,OAAiB;AACL,wBAAQ,KAAK;AAAA,kBACX,KAAK,YAAY,MAAM;AAAA,kBACvB,OAAO;AAAA,oBACL,SAAS,KAAK;AAAA,oBACd,WAAW,KAAK;AAAA,kBACjB;AAAA,gBACf,CAAa;AAAA,cACF;AAAA,YACX,OAAe;AACL,sBAAQ,KAAK,EAAE,KAAK,KAAK,OAAO,KAAI,CAAE;AAAA,YACvC;AAAA,UACF;AACD;AAAA,QACD;AAED,cAAM;AAAA,UACJ,SAAS,CAAC;AAAA,UACV;AAAA,QACN;AAAA,MACG;AAED,aAAO;AAAA,IACR;AAED,aAAS,UAAUA,OAAM,IAAI,OAAO;AAClC,UAAI,SAAS,CAAA;AACb,aAAO,KAAKA,QAAO,QAAQ,OAAO;AAChC,gBAAQ,QAAQ;AAAA,MACjB;AACD,eAASV,KAAIU,OAAMV,MAAK,IAAIA,MAAK,OAAO;AACtC,eAAO,KAAK,EAAE,MAAMA,IAAG,IAAI,KAAK,IAAI,IAAIA,KAAI,QAAQ,CAAC,EAAG,CAAA;AAAA,MACzD;AAED,aAAO;AAAA,IACR;AAED,aAAS4oB,sBAAqBznB,OAAM,YAAY,gBAAgB,OAAO;AACrE,UAAIT,QAAO,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAC/E,UAAI,KAAK,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAE7E,UAAI,kBAAkB,WAAW,KAAK,MAAMS,OAAM,YAAY,cAAc;AAE5E,UAAI,CAAC,OAAO;AACV,eAAO,gBAAiB,EAAC;AAAA,MAC1B;AAED,UAAI,WAAW,KAAK;AACpB,UAAI0N,UAAS,KAAK,IAAI,KAAKnO,OAAM,UAAUS,OAAM,UAAU,CAAC;AAE5D,UAAIA,UAAS,YAAY;AACvB,YAAI0N,WAAU,SAAS,QAAQ,GAAG;AAChC,iBAAO,gBAAgBnO,OAAM,EAAE,EAAE;AAAA,QAClC;AAAA,MACL,OAAS;AACL,YAAImO,WAAU,SAAS,CAAC,UAAU;AAChC,iBAAO,gBAAgBnO,OAAM,EAAE,EAAE;AAAA,QAClC;AAAA,MACF;AAED,UAAI,iBAAiB;AACrB,UAAIS,UAAS,YAAY;AACvB,YAAI,mBAAmB,gBAAgBT,OAAMA,QAAO,QAAQ,CAAC,GACzD,UAAU,iBAAiB,SAC3B,UAAU,iBAAiB;AAE/B,yBAAiB,UAAU,CAAE,EAAC,OAAO,SAAS,UAAUA,QAAO,OAAOA,QAAO,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI;AAAA,MAC1G,OAAS;AACL,yBAAiB,WAAW,UAAUA,OAAM,IAAI,KAAK,IAAI,CAAE,EAAC,OAAO,gBAAgB,GAAG,QAAQ,CAAC,EAAE,SAAS,UAAU,QAAQ,GAAGmO,UAAS,GAAG,KAAK,GAAG,gBAAgBA,UAAS,GAAGA,UAAS,CAAC,EAAE,OAAO;AAAA,MACnM;AAED,aAAO;AAAA,IACT;AAAA;;;AC/JA,IAAAiJ,SAAA,aAAqB;AAErB,QAAIqQ,aAAYtgB;AAEhB,QAAIugB,aAAY3M,wBAAuB0M,UAAS;AAEhD,QAAI,mBAAmBhS;AAEvB,QAAI,mBAAmBsF,wBAAuB,gBAAgB;AAE9D,QAAI,8BAA8B/S;AAElC,QAAI,8BAA8B+S,wBAAuB,2BAA2B;AAEpF,QAAI,aAAalE;AAEjB,QAAI,aAAakE,wBAAuB,UAAU;AAElD,QAAID,UAAShE,MAAAA;AAEb,QAAI6Q,WAAU5M,wBAAuBD,OAAM;AAE3C,QAAIE,cAAa0I,UAAAA;AAEjB,QAAIzI,eAAcF,wBAAuBC,WAAU;AAEnD,QAAI,aAAaoJ;AAEjB,QAAI,cAAcrJ,wBAAuB,UAAU;AAEnD,aAASA,wBAAuB,KAAK;AAAE,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,IAAG;AAEjG,QAAIsN,aAAY,SAAU,kBAAkB;AAC1C,OAAA,GAAI,WAAW,YAAYA,YAAW,gBAAgB;AAEtD,eAASA,WAAU,OAAO;AACxB,SAAA,GAAI,iBAAiB,YAAY,MAAMA,UAAS;AAEhD,YAAI,SAAQ,GAAI,4BAA4B,YAAY,MAAM,iBAAiB,KAAK,MAAM,KAAK,CAAC;AAEhG,cAAM,QAAQ,EAAE,UAAU,MAAK;AAE/B,cAAM,cAAc,MAAM,YAAY,KAAK,KAAK;AAChD,eAAO;AAAA,MACR;AAED,MAAAA,WAAU,UAAU,SAAS,SAAS,SAAS;AAC7C,YAAI,SAAS,KAAK,OACd,UAAU,OAAO,SACjBroB,QAAO,OAAO,MACd,KAAK,OAAO,IACZ,mBAAmB,OAAO,kBAC1B,WAAW,OAAO;AAGtB,eAAO,KAAK,MAAM,WAAW2nB,SAAQ,WAAW;AAAA,UAC9C;AAAA,UACA,QAAQ,aAAa,KAAK,MAAM,QAAQ;AAAA,UACxC,iBAAiB,KAAK,OAAO3nB,OAAM,EAAE;AAAA,QAC3C,IAAQ2nB,SAAQ,WAAW;AAAA,UACrB;AAAA,cACID,WAAU,YAAY,IAAI,QAAQ,aAAa,KAAK,MAAM,QAAQ,GAAG;AAAA,YACvE,SAAS,KAAK;AAAA,UACtB,CAAO;AAAA,UACDC,SAAQ,WAAW,cAAc,YAAY,YAAY;AAAA,YACvD;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,SAAS,KAAK;AAAA,YACd,YAAY;AAAA,UACpB,CAAO;AAAA,UACD3nB,QAAO,UAAU;AAAA,QACvB;AAAA,MACA;AAEE,MAAAqoB,WAAU,UAAU,cAAc,SAASC,eAAc;AACvD,aAAK,SAAS,EAAE,UAAU,CAAC,KAAK,MAAM,SAAQ,CAAE;AAAA,MACpD;AAEE,aAAOD;AAAA,IACR,EAACV,SAAQ,WAAW,SAAS;AAE9B,IAAAU,WAAU,YAAY;AAAA,MACpB,SAASpN,aAAY,WAAW,KAAK;AAAA,MACrC,MAAMA,aAAY,WAAW,OAAO;AAAA,MACpC,IAAIA,aAAY,WAAW,OAAO;AAAA,MAClC,kBAAkBA,aAAY,WAAW,KAAK;AAAA,MAC9C,UAAUA,aAAY,WAAW,OAAO;AAAA,IAC1C;AACA,IAAA7D,SAAQ,aAAaiR;AAAA;;;;;;;ACzFrB,MAAAjR,SAAA,aAAqB;AAErB,UAAI4Q,SAAQ7gB,OAAAA;AAEZ,UAAI8gB,UAASlN,wBAAuBiN,MAAK;AAEzC,UAAI,mBAAmBvS;AAEvB,UAAI,mBAAmBsF,wBAAuB,gBAAgB;AAE9D,UAAI,8BAA8B/S;AAElC,UAAI,8BAA8B+S,wBAAuB,2BAA2B;AAEpF,UAAI,aAAalE;AAEjB,UAAI,aAAakE,wBAAuB,UAAU;AAElD,UAAI0M,aAAY3Q;AAEhB,UAAI4Q,aAAY3M,wBAAuB0M,UAAS;AAEhD,UAAI3M,UAAS4I,MAAAA;AAEb,UAAIiE,WAAU5M,wBAAuBD,OAAM;AAE3C,UAAIE,cAAaoJ,UAAAA;AAEjB,UAAInJ,eAAcF,wBAAuBC,WAAU;AAEnD,UAAI,aAAaqJ;AAEjB,UAAI,cAActJ,wBAAuB,UAAU;AAEnD,UAAI,wBAAwBwJ;AAE5B,UAAI,yBAAyBxJ,wBAAuB,qBAAqB;AAEzE,UAAI,YAAYmK;AAEhB,UAAI,aAAanK,wBAAuB,SAAS;AAEjD,UAAI,aAAaoK;AAEjB,UAAI,cAAcpK,wBAAuB,UAAU;AAEnD,eAASA,wBAAuB,KAAK;AAAE,eAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,MAAG;AAMjG,eAAS,iBAAiB,OAAO/a,OAAM,IAAI;AACzC,YAAI,WAAW,MAAM,UACjB,OAAO,MAAM,MACb,kBAAkB,MAAM,iBACxB,gBAAgB,MAAM,eACtB,UAAU,MAAM,SAChBuoB,oBAAmB,MAAM,kBACzB,iBAAiB,MAAM;AAE3B,YAAI,aAAa,CAAA;AAEjB,SAAA,GAAI,uBAAuB,YAAY,UAAU,MAAM,gBAAgB,iBAAiBvoB,OAAM,EAAE,EAAE,QAAQ,SAAU,OAAO;AACzH,cAAI,MAAM,IAAI;AACZ,uBAAW,KAAK2nB,SAAQ,WAAW,cAAc,YAAY,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,OAAO;AAAA,cAC5G,KAAK,gBAAgB,MAAM,OAAO,MAAM,MAAM;AAAA,cAC9C,MAAM,MAAM;AAAA,cACZ,IAAI,MAAM;AAAA,cACV;AAAA,YACD,CAAA,CAAC,CAAC;AAAA,UACT,OAAW;AACL,gBAAIroB,OAAM,MAAM,KACZ,QAAQ,MAAM;AAElB,gBAAI,aAAa,cAAc,QAAQ,KAAK,MAAM;AAElD,gBAAIa,QAAOynB,SAAQ,WAAW,cAAc,WAAW,aAAgB,GAAAD,WAAU,YAAY,CAAE,GAAE,OAAO,EAAE,kBAAkBa,mBAAkB,mBAAoC;AAAA,cAChL,KAAK,WAAWlpB;AAAA,cAChB,SAAS,CAACA,IAAG,EAAE,OAAO,OAAO;AAAA,cAC7B,OAAOkpB,kBAAiB,KAAK;AAAA,cAC7B,eAAe,CAAA,EAAG,OAAO,eAAe,CAAC,KAAK,CAAC;AAAA,cAC/C;AAAA,cACA,UAAU;AAAA,YACX,CAAA,CAAC;AAEF,gBAAIroB,UAAS,OAAO;AAClB,yBAAW,KAAKA,KAAI;AAAA,YACrB;AAAA,UACF;AAAA,QACL,CAAG;AAED,eAAO;AAAA,MACR;AAED,eAAS,kBAAkB,OAAO;AAEhC,YAAI,WAAW,MAAM,oBAAoB,CAAC,MAAM,aAAa,MAAM,iBAAiB,MAAM,SAAS,MAAM,MAAM,MAAM,KAAK,IAAI;AAC9H,eAAO;AAAA,UACL;AAAA,QACJ;AAAA,MACC;AAED,UAAIsoB,kBAAiB,SAAU,kBAAkB;AAC/C,SAAA,GAAI,WAAW,YAAYA,iBAAgB,gBAAgB;AAE3D,iBAASA,gBAAe,OAAO;AAC7B,WAAA,GAAI,iBAAiB,YAAY,MAAMA,eAAc;AAErD,cAAI,SAAQ,GAAI,4BAA4B,YAAY,MAAM,iBAAiB,KAAK,MAAM,KAAK,CAAC;AAEhG,gBAAM,cAAc,WAAY;AAC9B,gBAAI,MAAM,MAAM,YAAY;AAC1B,oBAAM,SAAS,EAAE,UAAU,CAAC,MAAM,MAAM,SAAQ,CAAE;AAAA,YACnD;AAAA,UACP;AAEI,gBAAM,QAAQ,kBAAkB,KAAK;AACrC,iBAAO;AAAA,QACR;AAED,QAAAA,gBAAe,UAAU,4BAA4B,SAAS,0BAA0B,WAAW;AACjG,cAAI,YAAY,kBAAkB,SAAS;AAC3C,cAAI,kBAAkB,KAAK,KAAK,EAAE,aAAa,UAAU,UAAU;AACjE,iBAAK,SAAS,SAAS;AAAA,UACxB;AAAA,QACL;AAEE,QAAAA,gBAAe,UAAU,wBAAwB,SAAS,sBAAsB,WAAW,WAAW;AACpG,cAAI,SAAS;AAEb,iBAAO,CAAC,EAAK,GAAAP,QAAO,YAAY,SAAS,EAAE,KAAK,SAAU5oB,MAAK;AAC7D,mBAAOA,SAAQ,oBAAoBA,SAAQ,YAAY,UAAUA,MAAK,KAAK,GAAG,MAAM,OAAO,MAAMA,MAAK,KAAK,GAAG,IAAI,UAAUA,UAAS,OAAO,MAAMA;AAAA,UACnJ,CAAA,KAAK,UAAU,aAAa,KAAK,MAAM;AAAA,QAC5C;AAEE,QAAAmpB,gBAAe,UAAU,SAAS,SAAS,SAAS;AAClD,cAAI,SAAS,KAAK,OACdC,iBAAgB,OAAO,eACvB,oBAAoB,OAAO,mBAC3B,WAAW,OAAO,UAClB,OAAO,OAAO,MACd,WAAW,OAAO,UAClB,mBAAmB,OAAO,kBAC1B,UAAU,OAAO,SACjB,kBAAkB,OAAO,iBACzB,UAAU,OAAO,SACjBC,iBAAgB,OAAO,eACvB,aAAa,OAAO;AACxB,cAAI,WAAW,KAAK,MAAM;AAE1B,cAAI,mBAAmB,YAAY,YAAY,KAAK,MAAM,UAAU,IAAI,kBAAqB,GAAAhB,WAAU,YAAY,CAAE,GAAE,KAAK,OAAO,EAAE,OAAO,KAAK,MAAM,QAAQ,EAAC,CAAE,CAAC,IAAI;AAEvK,cAAI,WAAWC,SAAQ,WAAW;AAAA,YAChC;AAAA,YACA,QAAQ,sBAAsB,QAAQ;AAAA,YACtC;AAAA,UACN;AACI,cAAI,qBAAqBc,eAAc,UAAU,MAAM,UAAU,iBAAiB,MAAM,eAAe,CAAC;AACxG,cAAI,cAAc,CAAC,SAAS,UAAU,UAAU,UAAU;AAE1D,iBAAO,WAAWd,SAAQ,WAAW;AAAA,YACnC;AAAA,YACA,QAAQ,MAAM,QAAW,CAAC,UAAU,EAAE,OAAO,WAAW,CAAC;AAAA,YACzDA,SAAQ,WAAW;AAAA,cACjB;AAAA,cACA,QAAQ,MAAM,QAAW,CAAC,kBAAkB,EAAE,OAAO,WAAW,CAAC;AAAA,cACjE;AAAA,YACD;AAAA,UACP,IAAQA,SAAQ,WAAW;AAAA,YACrB;AAAA,YACA,QAAQ,MAAM,QAAW,CAAC,YAAY,EAAE,OAAO,WAAW,CAAC;AAAA,YAC3D,cAAcA,SAAQ,WAAW,cAAc,YAAY,YAAY;AAAA,cACrE;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS,KAAK;AAAA,YACtB,CAAO;AAAA,YACDA,SAAQ,WAAW;AAAA,cACjB;AAAA,eACA,GAAID,WAAU,YAAY,CAAA,GAAI,QAAQ,MAAM,QAAW,CAAC,CAAC,SAAS,iBAAiB,CAAC,EAAE,OAAO,WAAW,CAAC,GAAG;AAAA,gBAC1G,SAAS,KAAK;AAAA,cACxB,CAAS;AAAA,cACDgB,eAAc,MAAM,QAAW,WAAW;AAAA,YAC3C;AAAA,YACDf,SAAQ,WAAW;AAAA,cACjB;AAAA,eACA,GAAID,WAAU,YAAY,CAAA,GAAI,QAAQ,MAAM,QAAW,CAAC,sBAAsB,EAAE,OAAO,WAAW,CAAC,GAAG;AAAA,gBACpG,SAAS,KAAK;AAAA,cACxB,CAAS;AAAA,cACD;AAAA,YACD;AAAA,YACDC,SAAQ,WAAW;AAAA,cACjB;AAAA,cACA,QAAQ,MAAM,QAAW,CAAC,oBAAoB,EAAE,OAAO,WAAW,CAAC;AAAA,cACnE;AAAA,YACD;AAAA,UACP;AAAA,QACA;AAEE,eAAOa;AAAA,MACR,EAACb,SAAQ,WAAW,SAAS;AAE9B,MAAAa,gBAAe,YAAY;AAAA,QACzB,eAAevN,aAAY,WAAW,KAAK;AAAA,QAC3C,mBAAmBA,aAAY,WAAW;AAAA,QAC1C,UAAUA,aAAY,WAAW,OAAO;AAAA,QACxC,MAAMA,aAAY,WAAW;AAAA,QAC7B,UAAUA,aAAY,WAAW,KAAK;AAAA,QACtC,kBAAkBA,aAAY,WAAW,KAAK;AAAA,QAC9C,SAASA,aAAY,WAAW,KAAK;AAAA,QACrC,iBAAiBA,aAAY,WAAW;AAAA,QACxC,SAASA,aAAY,WAAW,QAAQA,aAAY,WAAW,UAAU,CAACA,aAAY,WAAW,QAAQA,aAAY,WAAW,MAAM,CAAC,CAAC,EAAE;AAAA,QAC1I,eAAeA,aAAY,WAAW,KAAK;AAAA,QAC3C,kBAAkBA,aAAY,WAAW;AAAA,QACzC,OAAOA,aAAY,WAAW,OAAO;AAAA,QACrC,gBAAgBA,aAAY,WAAW,UAAU,CAACA,aAAY,WAAW,MAAMA,aAAY,WAAW,IAAI,CAAC;AAAA,QAC3G,YAAYA,aAAY,WAAW;AAAA,QACnC,YAAYA,aAAY,WAAW;AAAA,MACrC;AACA,MAAAuN,gBAAe,eAAe;AAAA,QAC5B,MAAM,CAAE;AAAA,QACR,eAAe,CAAE;AAAA,QACjB,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AACA,MAAApR,SAAQ,aAAaoR;AAAA;;;;;;;;;AClOrB,MAAApR,SAAA,aAAqB;AAErB,UAAIqQ,aAAYtgB;AAEhB,UAAIugB,aAAY3M,wBAAuB0M,UAAS;AAEhD,UAAI,4BAA4BhS;AAEhC,UAAI,4BAA4BsF,wBAAuB,yBAAyB;AAEhF,UAAI,uBAAuB/S,sBAAAA;AAE3B,UAAI,wBAAwB+S,wBAAuB,oBAAoB;AAEvE,UAAID,UAASjE,MAAAA;AAEb,UAAI8Q,WAAU5M,wBAAuBD,OAAM;AAE3C,UAAIE,cAAalE,UAAAA;AAEjB,UAAImE,eAAcF,wBAAuBC,WAAU;AAEnD,UAAI,kBAAkB0I;AAEtB,UAAI,mBAAmB3I,wBAAuB,eAAe;AAE7D,eAASA,wBAAuB,KAAK;AAAE,eAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,MAAG;AAIjG,eAAS,iBAAiB,MAAM;AAC9B,YAAI,OAAM,GAAI,sBAAsB,YAAY,IAAI,EAAE;AACtD,eAAO,MAAM,OAAO,QAAQ,IAAI,SAAS;AAAA,MAC1C;AAGD,UAAI4N,kBAAiB,SAASA,gBAAe,MAAM;AACjD,YAAI,OAAO,KAAK,MACZ,SAAY,GAAA,0BAA0B,YAAY,MAAM,CAAC,MAAM,CAAC;AACpE,eAAOhB,SAAQ,WAAW,cAAc,iBAAiB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,OAAO;AAAA,UACxG;AAAA,UACA,UAAU;AAAA,UACV,mBAAmB,MAAM,aAAa,UAAU,YAAY;AAAA,UAC5D;AAAA,UACA,aAAgB,GAAA,sBAAsB,YAAY,IAAI,EAAE,SAAS;AAAA,QAClE,CAAA,CAAC;AAAA,MACJ;AAEA,MAAAiB,gBAAe,YAAY;AAAA,QACzB,MAAM1N,aAAY,WAAW;AAAA,QAC7B,UAAUA,aAAY,WAAW;AAAA,MACnC;AAEA,MAAA7D,SAAQ,aAAauR;AAAA;;;;;;;;;;ACrDrB,MAAAvR,SAAA,aAAqB;AAErB,UAAIqQ,aAAYtgB;AAEhB,UAAIugB,aAAY3M,wBAAuB0M,UAAS;AAEhD,UAAI,4BAA4BhS;AAEhC,UAAI,4BAA4BsF,wBAAuB,yBAAyB;AAEhF,UAAID,UAAS9S,MAAAA;AAEb,UAAI2f,WAAU5M,wBAAuBD,OAAM;AAE3C,UAAIE,cAAanE,UAAAA;AAEjB,UAAIoE,eAAcF,wBAAuBC,WAAU;AAEnD,UAAI,kBAAkBlE;AAEtB,UAAI,mBAAmBiE,wBAAuB,eAAe;AAE7D,eAASA,wBAAuB,KAAK;AAAE,eAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,MAAG;AAIjG,eAAS,iBAAiB,MAAM;AAC9B,eAAO,KAAK,SAAS,OAAO,KAAK,WAAW,IAAI,UAAU;AAAA,MAC3D;AAGD,UAAI6N,iBAAgB,SAASA,eAAc,MAAM;AAC/C,YAAI,OAAO,KAAK,MACZ,SAAY,GAAA,0BAA0B,YAAY,MAAM,CAAC,MAAM,CAAC;AACpE,eAAOjB,SAAQ,WAAW,cAAc,iBAAiB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,OAAO;AAAA,UACxG;AAAA,UACA,UAAU;AAAA,UACV,mBAAmB;AAAA,UACnB;AAAA,UACA,YAAY,KAAK,SAAS;AAAA,QAC3B,CAAA,CAAC;AAAA,MACJ;AAEA,MAAAkB,eAAc,YAAY;AAAA,QACxB,MAAM3N,aAAY,WAAW;AAAA,MAC/B;AAEA,MAAA7D,SAAQ,aAAawR;AAAA;;;;;AChDrB,MAAI1a,aAAW/G;AACf,MAAI,QAAQ,KAAK;AACjB,MAAA,aAAiB,SAASwH,WAAUsT,KAAI;AACtC,WAAO,CAAC/T,WAAS+T,GAAE,KAAK,SAASA,GAAE,KAAK,MAAMA,GAAE,MAAMA;AAAA,EACxD;ACJA,MAAI,UAAU9a;AACd,MAAI,YAAYsO;AAChB,MAAI,MAAM,KAAK;AAEf,UAAQ,QAAQ,GAAG,UAAU;AAAA,IAC3B,eAAe,SAASoT,eAAc,QAAQ;AAC5C,aAAO,UAAU,MAAM,KAAK,IAAI,MAAM,KAAK;AAAA,IAC5C;AAAA,EACH,CAAC;ACRD,MAAA,gBAAiBpT,MAAAA,QAA+B,OAAO;;ACDvD,IAAAX,QAAiB,UAAA,EAAE,WAAW3N,eAAsD,YAAY;;;;;;;;ACEhG,MAAAiQ,SAAA,aAAqB;AAErB,UAAIqQ,aAAYtgB;AAEhB,UAAIugB,aAAY3M,wBAAuB0M,UAAS;AAEhD,UAAI,4BAA4BhS;AAEhC,UAAI,4BAA4BsF,wBAAuB,yBAAyB;AAEhF,UAAI+M,iBAAgB9f,cAAAA;AAEpB,UAAI+f,iBAAgBhN,wBAAuB+M,cAAa;AAExD,UAAI,iBAAiBjR,gBAAAA;AAErB,UAAI,kBAAkBkE,wBAAuB,cAAc;AAE3D,MAAA3D,SAAQ,aAAa0R;AAErB,UAAIhO,UAAShE,MAAAA;AAEb,UAAI6Q,WAAU5M,wBAAuBD,OAAM;AAE3C,UAAI,kBAAkB4I;AAEtB,UAAI,mBAAmB3I,wBAAuB,eAAe;AAE7D,eAASA,wBAAuB,KAAK;AAAE,eAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,MAAG;AAIjG,eAAS,iBAAiB,MAAM,OAAO;AACrC,YAAI,QAAQ;AACZ,YAAI,UAAU;AACd,aAAQ,GAAA,gBAAgB,YAAY,KAAK,IAAI,GAAG;AAC9C,kBAAQ,KAAK;AAAA,QACjB,OAAS;AAEL,mBAASuM,aAAY,MAAMc,YAAW,MAAM,QAAQd,UAAS,GAAG,KAAK,GAAGA,aAAYc,YAAWd,cAAgB,GAAAS,eAAc,YAAYT,UAAS,OAAK;AAGrJ,gBAAIc,WAAU;AACZ,kBAAI,MAAMd,WAAU;AAAQ;AACrB,cAAAA,WAAU;AAAA,YACzB,OAAa;AACL,mBAAKA,WAAU;AACf,kBAAI,GAAG;AAAM;AACN,iBAAG;AAAA,YACX;AAID,gBAAI,SAAS,QAAQ,IAAI,OAAO;AAC9B,wBAAU;AACV;AAAA,YACD;AACD,qBAAS;AAAA,UACV;AAAA,QACF;AACD,gBAAa,UAAU,MAAM,MAAM,QAAQ,OAAO,UAAU,IAAI,YAAY;AAAA,MAC7E;AAGD,eAASwB,kBAAiB,OAAO;AAC/B,YAAI,SAAQ,GAAI,0BAA0B,YAAY,OAAO,CAAA,CAAE;AAE/D,eAAOnB,SAAQ,WAAW,cAAc,iBAAiB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,OAAO;AAAA,UACxG,UAAU;AAAA,UACV,mBAAmB;AAAA,UACnB;AAAA,QACD,CAAA,CAAC;AAAA,MACJ;AAAA;;;;;ACxEA,IAAAtQ,SAAA,aAAqB;AAErB,QAAI0D,UAAS3T,MAAAA;AAEb,QAAIwgB,WAAU5M,wBAAuBD,OAAM;AAE3C,QAAIE,cAAavF,UAAAA;AAEjB,QAAIwF,eAAcF,wBAAuBC,WAAU;AAEnD,aAASD,wBAAuB,KAAK;AAAE,aAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,IAAG;AAMjG,QAAIgO,iBAAgB,SAASA,eAAc,MAAM;AAC/C,UAAI,WAAW,KAAK,UAChB,UAAU,KAAK,SACfL,iBAAgB,KAAK,eACrB,UAAU,KAAK,SACfM,iBAAgB,KAAK,eACrB,QAAQ,KAAK,OACb,cAAc,KAAK;AACvB,aAAOrB,SAAQ,WAAW;AAAA,QACxB;AAAA,QACA,QAAQ,SAAS,UAAU,OAAO;AAAA,QAClCA,SAAQ,WAAW;AAAA,UACjB;AAAA,UACA,QAAQ,CAAC,SAAS,YAAY,GAAG,UAAU,OAAO;AAAA,UAClDe,eAAc,SAAS,UAAU,OAAO,KAAK;AAAA,QAC9C;AAAA,QACDf,SAAQ,WAAW;AAAA,UACjB;AAAA,UACA,QAAQ,aAAa,UAAU,OAAO;AAAA,UACtCqB,eAAc,MAAM,QAAW,CAAC,YAAY,KAAK,GAAG,KAAK,EAAE,OAAO,OAAO,CAAC;AAAA,QAC3E;AAAA,MACL;AAAA,IACA;AAEA,IAAAD,eAAc,YAAY;AAAA,MACxB,UAAU9N,aAAY,WAAW,OAAO;AAAA,MACxC,SAASA,aAAY,WAAW,KAAK;AAAA,MACrC,eAAeA,aAAY,WAAW,KAAK;AAAA,MAC3C,SAASA,aAAY,WAAW,QAAQA,aAAY,WAAW,UAAU,CAACA,aAAY,WAAW,QAAQA,aAAY,WAAW,MAAM,CAAC,CAAC,EAAE;AAAA,MAC1I,eAAeA,aAAY,WAAW,KAAK;AAAA,MAC3C,OAAOA,aAAY,WAAW;AAAA,MAC9B,aAAaA,aAAY,WAAW;AAAA,IACtC;AAEA,IAAA8N,eAAc,eAAe;AAAA,MAC3B,aAAa,SAAS,YAAY,OAAO;AACvC,eAAO;AAAA,MACR;AAAA,IACH;AAEA,IAAA3R,SAAQ,aAAa2R;AAAA;;;;;;;ACxDrB,MAAA3R,SAAA,aAAqB;AAErB,UAAIqQ,aAAYtgB;AAEhB,UAAIugB,aAAY3M,wBAAuB0M,UAAS;AAEhD,UAAI,4BAA4BhS;AAEhC,UAAI,4BAA4BsF,wBAAuB,yBAAyB;AAEhF,UAAID,UAAS9S,MAAAA;AAEb,UAAI2f,WAAU5M,wBAAuBD,OAAM;AAE3C,UAAIE,cAAanE,UAAAA;AAEjB,UAAIoE,eAAcF,wBAAuBC,WAAU;AAEnD,UAAI,WAAWlE;AAEf,UAAI,YAAYiE,wBAAuB,QAAQ;AAE/C,UAAI,kBAAkB2I;AAEtB,UAAI,mBAAmB3I,wBAAuB,eAAe;AAE7D,UAAI,iBAAiBqJ;AAErB,UAAI,kBAAkBrJ,wBAAuB,cAAc;AAE3D,UAAI,oBAAoBsJ;AAExB,UAAI,qBAAqBtJ,wBAAuB,iBAAiB;AAEjE,UAAI,iBAAiBwJ;AAErB,UAAI,kBAAkBxJ,wBAAuB,cAAc;AAE3D,eAASA,wBAAuB,KAAK;AAAE,eAAO,OAAO,IAAI,aAAa,MAAM,EAAE,WAAW,IAAK;AAAA,MAAG;AAEjG,UAAIkO,YAAW,SAASA,UAAS,MAAM;AACrC,YAAIR,iBAAgB,KAAK,eACrB,UAAU,KAAK,SACfC,iBAAgB,KAAK,eACrB,UAAU,KAAK,SACf,QAAQ,KAAK,OACbM,iBAAgB,KAAK,eACrB,eAAe,KAAK,cACpB,QAAO,GAAI,0BAA0B,YAAY,MAAM,CAAC,iBAAiB,WAAW,iBAAiB,WAAW,SAAS,iBAAiB,cAAc,CAAC;AAE7J,YAAI,WAAW,aAAa,KAAK,IAAI,YAAW,GAAI,UAAU,YAAY,KAAK;AAE/E,YAAI,kBAAkB;AAAA,UACpB,eAAeP;AAAA,UACf,KAAK,QAAQ;AAAA,UACb;AAAA,UACA,eAAeC;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA,eAAeM;AAAA,QACnB;AAEE,YAAI,mBAAkB,GAAItB,WAAU,YAAY,CAAE,GAAE,MAAM,iBAAiB;AAAA,UACzE,MAAM;AAAA,UACN;AAAA,QACJ,CAAG;AAED,gBAAQ,UAAQ;AAAA,UACd,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,iBAAiB,YAAY,eAAe;AAAA,UACtF,KAAK;AACH,mBAAOA,SAAQ,WAAW,cAAc,gBAAgB,YAAY,eAAe;AAAA,UACrF,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAOA,SAAQ,WAAW,cAAc,mBAAmB,YAAY,eAAe;AAAA,UACxF,KAAK;AACH,mBAAOA,SAAQ,WAAW,cAAc,gBAAgB,aAAgB,GAAAD,WAAU,YAAY,CAAE,GAAE,iBAAiB,EAAE,aAAa,SAAS,YAAY,KAAK;AACxJ,qBAAO,MAAM,MAAM;AAAA,YACpB,EAAA,CAAE,CAAC;AAAA,UACR,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,gBAAgB,YAAY,eAAe;AAAA,UACrF,KAAK;AACH,mBAAOA,SAAQ,WAAW,cAAc,gBAAgB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,iBAAiB;AAAA,cACjH,aAAa,SAAS,YAAY,KAAK;AACrC,uBAAO,MAAM,SAAS;AAAA,cACvB;AAAA,YACF,CAAA,CAAC;AAAA,UACJ,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,gBAAgB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,iBAAiB;AAAA,cACjH,aAAa,SAAS,YAAY,KAAK;AACrC,uBAAO,IAAI;cACZ;AAAA,YACF,CAAA,CAAC;AAAA,UACJ,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,gBAAgB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,iBAAiB,EAAE,aAAa,SAAS,cAAc;AACrJ,qBAAO;AAAA,YACR,EAAA,CAAE,CAAC;AAAA,UACR,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,gBAAgB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,iBAAiB,EAAE,aAAa,SAAS,cAAc;AACrJ,qBAAO;AAAA,YACR,EAAA,CAAE,CAAC;AAAA,UACR,KAAK;AAAA,UACL,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,gBAAgB,aAAY,GAAID,WAAU,YAAY,CAAA,GAAI,iBAAiB;AAAA,cACjH,aAAa,SAAS,YAAY,KAAK;AACrC,uBAAO,IAAI;cACZ;AAAA,YACF,CAAA,CAAC;AAAA,UACJ,KAAK;AACH,mBAAOC,SAAQ,WAAW,cAAc,gBAAgB,YAAY,eAAe;AAAA,UACrF;AACE,mBAAOA,SAAQ,WAAW,cAAc,gBAAgB,aAAgB,GAAAD,WAAU,YAAY,CAAE,GAAE,iBAAiB,EAAE,aAAa,SAAS,YAAY,KAAK;AACxJ,qBAAO,MAAM,WAAW;AAAA,YACzB,EAAA,CAAE,CAAC;AAAA,QACT;AAAA,MACH;AAEA,MAAAuB,UAAS,YAAY;AAAA,QACnB,eAAehO,aAAY,WAAW,KAAK;AAAA,QAC3C,SAASA,aAAY,WAAW,QAAQA,aAAY,WAAW,UAAU,CAACA,aAAY,WAAW,QAAQA,aAAY,WAAW,MAAM,CAAC,CAAC,EAAE;AAAA,QAC1I,eAAeA,aAAY,WAAW,KAAK;AAAA,QAC3C,SAASA,aAAY,WAAW,KAAK;AAAA,QACrC,OAAOA,aAAY,WAAW;AAAA,QAC9B,eAAeA,aAAY,WAAW,KAAK;AAAA,QAC3C,cAAcA,aAAY,WAAW,KAAK;AAAA,MAC5C;AAEA,MAAA7D,SAAQ,aAAa6R;AAAA;;;;;;;;ACtIrB,MAAI,UAAU9hB;AACd,MAAI,WAAWsO,KAAAA,QAAkB,UAAU;AAC3C,MAAI,YAAYzN;AAChB,MAAA,kBAAiB6O,MAAkB,QAAC,aAAa,SAAUoL,KAAI;AAC7D,QAAIrI,KAAI,OAAOqI,GAAE;AACjB,WAAOrI,GAAE,cAAc,UAClB,gBAAgBA,MAEhB,UAAU,eAAe,QAAQA,EAAC,CAAC;AAAA,EAC1C;;ACPA,IAAA9E,QAAA,UAAiB9M;AAAAA;;ACFjB,IAAA8M,QAAiB,UAAA,EAAE,WAAW3N,WAAAA,SAA2C,YAAY;;ACErF+hB,kBAAO,aAAc;AAErB,MAAI,eAAe/hB,aAAAA;AAEnB,MAAI,eAAe4T,yBAAuB,YAAY;AAEtD,MAAI,gBAAgBtF,cAAAA;AAEpB,MAAI,gBAAgBsF,yBAAuB,aAAa;AAExD,WAASA,yBAAuB,KAAK;AAAE,WAAO,OAAO,IAAI,aAAa,MAAM,EAAE,SAAS,IAAG;AAAA,EAAK;AAE/F,kBAAA,UAAkB,WAAY;AAC5B,aAAS,cAAc,KAAKzb,IAAG;AAC7B,UAAI,OAAO,CAAA;AACX,UAAI,KAAK;AACT,UAAI,KAAK;AACT,UAAI,KAAK;AAET,UAAI;AACF,iBAAS,MAAM,GAAG,cAAc,SAAS,GAAG,GAAG,IAAI,EAAE,MAAM,KAAK,GAAG,KAAM,GAAE,OAAO,KAAK,MAAM;AAC3F,eAAK,KAAK,GAAG,KAAK;AAElB,cAAIA,MAAK,KAAK,WAAWA;AAAG;AAAA,QAC7B;AAAA,MACF,SAAQ,KAAP;AACA,aAAK;AACL,aAAK;AAAA,MACX,UAAc;AACR,YAAI;AACF,cAAI,CAAC,MAAM,GAAG;AAAW,eAAG;QACpC,UAAgB;AACR,cAAI;AAAI,kBAAM;AAAA,QACf;AAAA,MACF;AAED,aAAO;AAAA,IACR;AAED,WAAO,SAAU,KAAKA,IAAG;AACvB,UAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,eAAO;AAAA,MACb,YAAmB,GAAA,aAAa,SAAS,OAAO,GAAG,CAAC,GAAG;AACjD,eAAO,cAAc,KAAKA,EAAC;AAAA,MACjC,OAAW;AACL,cAAM,IAAI,UAAU,sDAAsD;AAAA,MAC3E;AAAA,IACL;AAAA,EACA,EAAC;ACxCD,MAAI2f,oBAAkB;AAGtB,MAAI,cAAc;AAGlB,MAAI,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,GACnB,aAAa,GACb,mBAAmB,IACnB,eAAe,IACf,qBAAqB,IACrB,WAAW,KACX,aAAa,KACb,YAAY;AAGhB,MAAIkK,aAAW,IAAI,GACfC,qBAAmB,kBACnB,cAAc,uBACdC,QAAM,IAAI;AAGd,MAAI,YAAY;AAAA,IACd,CAAC,OAAO,QAAQ;AAAA,IAChB,CAAC,QAAQ,SAAS;AAAA,IAClB,CAAC,WAAW,aAAa;AAAA,IACzB,CAAC,SAAS,UAAU;AAAA,IACpB,CAAC,cAAc,gBAAgB;AAAA,IAC/B,CAAC,QAAQ,SAAS;AAAA,IAClB,CAAC,WAAW,YAAY;AAAA,IACxB,CAAC,gBAAgB,kBAAkB;AAAA,IACnC,CAAC,SAAS,UAAU;AAAA,EACtB;AAGA,MAAI5K,YAAU,qBACV6K,WAAS,8BACTC,cAAY;AAMhB,MAAI,eAAe;AAGnB,MAAIC,WAAS;AAGb,MAAI,gBAAgB,6CAChB,gBAAgB,qCAChB,iBAAiB;AAGrB,MAAIC,eAAa;AAGjB,MAAIC,eAAa;AAGjB,MAAI,eAAe;AAGnB,MAAIC,cAAY;AAGhB,MAAI,WAAW;AAGf,MAAIC,iBAAe;AAGnB,MAAIC,eAAa,OAAO1H,kBAAU,YAAYA,kBAAUA,eAAO,WAAW,UAAUA;AAGpF,MAAI2H,aAAW,OAAO,QAAQ,YAAY,QAAQ,KAAK,WAAW,UAAU;AAG5E,MAAIxkB,SAAOukB,gBAAcC,cAAY,SAAS,aAAa,EAAC;AAY5D,WAASrkB,QAAM,MAAM,SAAS,MAAM;AAClC,YAAQ,KAAK,QAAM;AAAA,MACjB,KAAK;AAAG,eAAO,KAAK,KAAK,OAAO;AAAA,MAChC,KAAK;AAAG,eAAO,KAAK,KAAK,SAAS,KAAK,EAAE;AAAA,MACzC,KAAK;AAAG,eAAO,KAAK,KAAK,SAAS,KAAK,IAAI,KAAK,EAAE;AAAA,MAClD,KAAK;AAAG,eAAO,KAAK,KAAK,SAAS,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,IAC5D;AACD,WAAO,KAAK,MAAM,SAAS,IAAI;AAAA,EACjC;AAWA,WAAS,UAAU,OAAO,UAAU;AAClC,QAAIzG,SAAQ,IACRmP,UAAS,QAAQ,MAAM,SAAS;AAEpC,WAAO,EAAEnP,SAAQmP,SAAQ;AACvB,UAAI,SAAS,MAAMnP,SAAQA,QAAO,KAAK,MAAM,OAAO;AAClD;AAAA,MACD;AAAA,IACF;AACD,WAAO;AAAA,EACT;AAWA,WAAS,cAAc,OAAO,OAAO;AACnC,QAAImP,UAAS,QAAQ,MAAM,SAAS;AACpC,WAAO,CAAC,CAACA,WAAU,YAAY,OAAO,OAAO,CAAC,IAAI;AAAA,EACpD;AAaA,WAAS,cAAc,OAAO,WAAW,WAAW,WAAW;AAC7D,QAAIA,UAAS,MAAM,QACfnP,SAAQ,aAAa,YAAY,IAAI;AAEzC,WAAQ,YAAYA,WAAU,EAAEA,SAAQmP,SAAS;AAC/C,UAAI,UAAU,MAAMnP,SAAQA,QAAO,KAAK,GAAG;AACzC,eAAOA;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACT;AAWA,WAAS,YAAY,OAAO,OAAO,WAAW;AAC5C,QAAI,UAAU,OAAO;AACnB,aAAO,cAAc,OAAO,WAAW,SAAS;AAAA,IACjD;AACD,QAAIA,SAAQ,YAAY,GACpBmP,UAAS,MAAM;AAEnB,WAAO,EAAEnP,SAAQmP,SAAQ;AACvB,UAAI,MAAMnP,YAAW,OAAO;AAC1B,eAAOA;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACT;AASA,WAAS,UAAU,OAAO;AACxB,WAAO,UAAU;AAAA,EACnB;AAUA,WAAS,aAAa,OAAO,aAAa;AACxC,QAAImP,UAAS,MAAM,QACf,SAAS;AAEb,WAAOA,WAAU;AACf,UAAI,MAAMA,aAAY,aAAa;AACjC;AAAA,MACD;AAAA,IACF;AACD,WAAO;AAAA,EACT;AAUA,WAAS,SAAS,QAAQ9O,MAAK;AAC7B,WAAO,UAAU,OAAO,SAAY,OAAOA;AAAA,EAC7C;AASA,WAAS,aAAa,OAAO;AAG3B,QAAI,SAAS;AACb,QAAI,SAAS,QAAQ,OAAO,MAAM,YAAY,YAAY;AACxD,UAAI;AACF,iBAAS,CAAC,EAAE,QAAQ;AAAA,MAC1B,SAAaoE,IAAP;AAAA,MAAY;AAAA,IACf;AACD,WAAO;AAAA,EACT;AAWA,WAAS,eAAe,OAAO,aAAa;AAC1C,QAAIzE,SAAQ,IACRmP,UAAS,MAAM,QACf,WAAW,GACX,SAAS,CAAA;AAEb,WAAO,EAAEnP,SAAQmP,SAAQ;AACvB,UAAI,QAAQ,MAAMnP;AAClB,UAAI,UAAU,eAAe,UAAU,aAAa;AAClD,cAAMA,UAAS;AACf,eAAO,cAAcA;AAAA,MACtB;AAAA,IACF;AACD,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,SAAS,WACrB4f,gBAAc,OAAO;AAGzB,MAAI,aAAatZ,OAAK;AAGtB,MAAI,aAAc,WAAW;AAC3B,QAAI4d,OAAM,SAAS,KAAK,cAAc,WAAW,QAAQ,WAAW,KAAK,YAAY,EAAE;AACvF,WAAOA,OAAO,mBAAmBA,OAAO;AAAA,EAC1C,EAAC;AAGD,MAAI,eAAe,UAAU;AAG7B,MAAIrE,mBAAiBD,cAAY;AAOjC,MAAImL,mBAAiBnL,cAAY;AAGjC,MAAI,aAAa;AAAA,IAAO,MACtB,aAAa,KAAKC,gBAAc,EAAE,QAAQ,cAAc,MAAM,EAC7D,QAAQ,0DAA0D,OAAO,IAAI;AAAA,EAChF;AAGA,MAAI,eAAe,OAAO;AAG1B,MAAIK,cAAY,KAAK,KACjB8K,cAAY,KAAK;AAGrB,MAAI,iBAAkB,WAAW;AAC/B,QAAI,OAAO,UAAU,QAAQ,gBAAgB,GACzC,OAAO,UAAU;AAErB,WAAQ,QAAQ,KAAK,SAAS,IAAK,OAAO;AAAA,EAC5C,EAAC;AAUD,WAAS,WAAW1U,QAAO;AACzB,WAAOpH,WAASoH,MAAK,IAAI,aAAaA,MAAK,IAAI,CAAA;AAAA,EACjD;AAUA,WAAS,aAAa,OAAO;AAC3B,QAAI,CAACpH,WAAS,KAAK,KAAK,SAAS,KAAK,GAAG;AACvC,aAAO;AAAA,IACR;AACD,QAAI,UAAW8Q,aAAW,KAAK,KAAK,aAAa,KAAK,IAAK,aAAa;AACxE,WAAO,QAAQ,KAAK,SAAS,KAAK,CAAC;AAAA,EACrC;AAaA,WAAS,YAAY,MAAM,UAAU,SAAS,WAAW;AACvD,QAAI,YAAY,IACZ,aAAa,KAAK,QAClB,gBAAgB,QAAQ,QACxB,YAAY,IACZ,aAAa,SAAS,QACtB,cAAcE,YAAU,aAAa,eAAe,CAAC,GACrD,SAAS,MAAM,aAAa,WAAW,GACvC,cAAc,CAAC;AAEnB,WAAO,EAAE,YAAY,YAAY;AAC/B,aAAO,aAAa,SAAS;AAAA,IAC9B;AACD,WAAO,EAAE,YAAY,eAAe;AAClC,UAAI,eAAe,YAAY,YAAY;AACzC,eAAO,QAAQ,cAAc,KAAK;AAAA,MACnC;AAAA,IACF;AACD,WAAO,eAAe;AACpB,aAAO,eAAe,KAAK;AAAA,IAC5B;AACD,WAAO;AAAA,EACT;AAaA,WAAS,iBAAiB,MAAM,UAAU,SAAS,WAAW;AAC5D,QAAI,YAAY,IACZ,aAAa,KAAK,QAClB,eAAe,IACf,gBAAgB,QAAQ,QACxB,aAAa,IACb,cAAc,SAAS,QACvB,cAAcA,YAAU,aAAa,eAAe,CAAC,GACrD,SAAS,MAAM,cAAc,WAAW,GACxC,cAAc,CAAC;AAEnB,WAAO,EAAE,YAAY,aAAa;AAChC,aAAO,aAAa,KAAK;AAAA,IAC1B;AACD,QAAI,SAAS;AACb,WAAO,EAAE,aAAa,aAAa;AACjC,aAAO,SAAS,cAAc,SAAS;AAAA,IACxC;AACD,WAAO,EAAE,eAAe,eAAe;AACrC,UAAI,eAAe,YAAY,YAAY;AACzC,eAAO,SAAS,QAAQ,iBAAiB,KAAK;AAAA,MAC/C;AAAA,IACF;AACD,WAAO;AAAA,EACT;AAUA,WAAS,UAAU,QAAQ,OAAO;AAChC,QAAIlgB,SAAQ,IACRmP,UAAS,OAAO;AAEpB,cAAU,QAAQ,MAAMA,OAAM;AAC9B,WAAO,EAAEnP,SAAQmP,SAAQ;AACvB,YAAMnP,UAAS,OAAOA;AAAA,IACvB;AACD,WAAO;AAAA,EACT;AAYA,WAAS,WAAW,MAAM,SAAS,SAAS;AAC1C,QAAI,SAAS,UAAU,WACnB,OAAO,WAAW,IAAI;AAE1B,aAAS,UAAU;AACjB,UAAI,KAAM,QAAQ,SAASsG,UAAQ,gBAAgB,UAAW,OAAO;AACrE,aAAO,GAAG,MAAM,SAAS,UAAU,MAAM,SAAS;AAAA,IACnD;AACD,WAAO;AAAA,EACT;AAUA,WAAS,WAAW,MAAM;AACxB,WAAO,WAAW;AAIhB,UAAI,OAAO;AACX,cAAQ,KAAK,QAAM;AAAA,QACjB,KAAK;AAAG,iBAAO,IAAI;AAAA,QACnB,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,EAAE;AAAA,QAC/B,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,IAAI,KAAK,EAAE;AAAA,QACxC,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,QACjD,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,QAC1D,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,QACnE,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,QAC5E,KAAK;AAAG,iBAAO,IAAI,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,EAAE;AAAA,MACtF;AACD,UAAI,cAAc,WAAW,KAAK,SAAS,GACvC,SAAS,KAAK,MAAM,aAAa,IAAI;AAIzC,aAAO4I,WAAS,MAAM,IAAI,SAAS;AAAA,IACvC;AAAA,EACA;AAWA,WAAS,YAAY,MAAM,SAAS,OAAO;AACzC,QAAI,OAAO,WAAW,IAAI;AAE1B,aAAS,UAAU;AACjB,UAAIC,UAAS,UAAU,QACnB,OAAO,MAAMA,OAAM,GACnBnP,SAAQmP,SACR,cAAc,UAAU,OAAO;AAEnC,aAAOnP,UAAS;AACd,aAAKA,UAAS,UAAUA;AAAA,MACzB;AACD,UAAI,UAAWmP,UAAS,KAAK,KAAK,OAAO,eAAe,KAAKA,UAAS,OAAO,cACzE,CAAE,IACF,eAAe,MAAM,WAAW;AAEpC,MAAAA,WAAU,QAAQ;AAClB,UAAIA,UAAS,OAAO;AAClB,eAAO;AAAA,UACL;AAAA,UAAM;AAAA,UAAS;AAAA,UAAc,QAAQ;AAAA,UAAa;AAAA,UAClD;AAAA,UAAM;AAAA,UAAS;AAAA,UAAW;AAAA,UAAW,QAAQA;AAAA,QAAM;AAAA,MACtD;AACD,UAAI,KAAM,QAAQ,SAAS7I,UAAQ,gBAAgB,UAAW,OAAO;AACrE,aAAOG,QAAM,IAAI,MAAM,IAAI;AAAA,IAC5B;AACD,WAAO;AAAA,EACT;AAqBA,WAAS,aAAa,MAAM,SAAS,SAAS,UAAU,SAAS,eAAe,cAAc,QAAQ,KAAK,OAAO;AAChH,QAAI,QAAQ,UAAU,UAClB,SAAS,UAAU,WACnB,YAAY,UAAU,eACtB,YAAY,WAAW,aAAa,mBACpC,SAAS,UAAU,WACnB,OAAO,YAAY,SAAY,WAAW,IAAI;AAElD,aAAS,UAAU;AACjB,UAAI0I,UAAS,UAAU,QACnB,OAAO,MAAMA,OAAM,GACnBnP,SAAQmP;AAEZ,aAAOnP,UAAS;AACd,aAAKA,UAAS,UAAUA;AAAA,MACzB;AACD,UAAI,WAAW;AACb,YAAI,cAAc,UAAU,OAAO,GAC/B,eAAe,aAAa,MAAM,WAAW;AAAA,MAClD;AACD,UAAI,UAAU;AACZ,eAAO,YAAY,MAAM,UAAU,SAAS,SAAS;AAAA,MACtD;AACD,UAAI,eAAe;AACjB,eAAO,iBAAiB,MAAM,eAAe,cAAc,SAAS;AAAA,MACrE;AACD,MAAAmP,WAAU;AACV,UAAI,aAAaA,UAAS,OAAO;AAC/B,YAAI,aAAa,eAAe,MAAM,WAAW;AACjD,eAAO;AAAA,UACL;AAAA,UAAM;AAAA,UAAS;AAAA,UAAc,QAAQ;AAAA,UAAa;AAAA,UAClD;AAAA,UAAM;AAAA,UAAY;AAAA,UAAQ;AAAA,UAAK,QAAQA;AAAA,QAC/C;AAAA,MACK;AACD,UAAI,cAAc,SAAS,UAAU,MACjC,KAAK,YAAY,YAAY,QAAQ;AAEzC,MAAAA,UAAS,KAAK;AACd,UAAI,QAAQ;AACV,eAAO,QAAQ,MAAM,MAAM;AAAA,MACjC,WAAe,UAAUA,UAAS,GAAG;AAC/B,aAAK,QAAO;AAAA,MACb;AACD,UAAI,SAAS,MAAMA,SAAQ;AACzB,aAAK,SAAS;AAAA,MACf;AACD,UAAI,QAAQ,SAAS7I,UAAQ,gBAAgB,SAAS;AACpD,aAAK,QAAQ,WAAW,EAAE;AAAA,MAC3B;AACD,aAAO,GAAG,MAAM,aAAa,IAAI;AAAA,IAClC;AACD,WAAO;AAAA,EACT;AAcA,WAAS,cAAc,MAAM,SAAS,SAAS,UAAU;AACvD,QAAI,SAAS,UAAU,WACnB,OAAO,WAAW,IAAI;AAE1B,aAAS,UAAU;AACjB,UAAI,YAAY,IACZ,aAAa,UAAU,QACvB,YAAY,IACZ,aAAa,SAAS,QACtB,OAAO,MAAM,aAAa,UAAU,GACpC,KAAM,QAAQ,SAASA,UAAQ,gBAAgB,UAAW,OAAO;AAErE,aAAO,EAAE,YAAY,YAAY;AAC/B,aAAK,aAAa,SAAS;AAAA,MAC5B;AACD,aAAO,cAAc;AACnB,aAAK,eAAe,UAAU,EAAE;AAAA,MACjC;AACD,aAAOG,QAAM,IAAI,SAAS,UAAU,MAAM,IAAI;AAAA,IAC/C;AACD,WAAO;AAAA,EACT;AAmBA,WAAS,cAAc,MAAM,SAAS,UAAU,aAAa,SAAS,UAAU,SAAS,QAAQ,KAAK,OAAO;AAC3G,QAAI,UAAU,UAAU,YACpB,aAAa,UAAU,UAAU,QACjC,kBAAkB,UAAU,SAAY,SACxC,cAAc,UAAU,WAAW,QACnC,mBAAmB,UAAU,SAAY;AAE7C,eAAY,UAAU,eAAe;AACrC,eAAW,EAAE,UAAU,qBAAqB;AAE5C,QAAI,EAAE,UAAU,mBAAmB;AACjC,iBAAW,EAAE,YAAY;AAAA,IAC1B;AAED,QAAI,SAAS,SAAS,MAAM,SAAS,SAAS,aAAa,YAAY,kBAAkB,iBAAiB,QAAQ,KAAK,KAAK;AAC5H,WAAO,cAAc;AACrB,WAAO,gBAAgB,QAAQ,MAAM,OAAO;AAAA,EAC9C;AA4BA,WAAS,WAAW,MAAM,SAAS,SAAS,UAAU,SAAS,QAAQ,KAAK,OAAO;AACjF,QAAI,YAAY,UAAU;AAC1B,QAAI,CAAC,aAAa,OAAO,QAAQ,YAAY;AAC3C,YAAM,IAAI,UAAUwZ,iBAAe;AAAA,IACpC;AACD,QAAI9Q,UAAS,WAAW,SAAS,SAAS;AAC1C,QAAI,CAACA,SAAQ;AACX,iBAAW,EAAE,eAAe;AAC5B,iBAAW,UAAU;AAAA,IACtB;AACD,UAAM,QAAQ,SAAY,MAAM+Q,YAAU,UAAU,GAAG,GAAG,CAAC;AAC3D,YAAQ,UAAU,SAAY,QAAQ,UAAU,KAAK;AACrD,IAAA/Q,WAAU,UAAU,QAAQ,SAAS;AAErC,QAAI,UAAU,oBAAoB;AAChC,UAAI,gBAAgB,UAChB,eAAe;AAEnB,iBAAW,UAAU;AAAA,IACtB;AAED,QAAI,UAAU;AAAA,MACZ;AAAA,MAAM;AAAA,MAAS;AAAA,MAAS;AAAA,MAAU;AAAA,MAAS;AAAA,MAAe;AAAA,MAC1D;AAAA,MAAQ;AAAA,MAAK;AAAA,IACjB;AAEE,WAAO,QAAQ;AACf,cAAU,QAAQ;AAClB,cAAU,QAAQ;AAClB,eAAW,QAAQ;AACnB,cAAU,QAAQ;AAClB,YAAQ,QAAQ,KAAK,QAAQ,MAAM,OAC9B,YAAY,IAAI,KAAK,SACtB+Q,YAAU,QAAQ,KAAK/Q,SAAQ,CAAC;AAEpC,QAAI,CAAC,SAAS,WAAW,aAAa,mBAAmB;AACvD,iBAAW,EAAE,aAAa;AAAA,IAC3B;AACD,QAAI,CAAC,WAAW,WAAW,WAAW;AACpC,UAAI,SAAS,WAAW,MAAM,SAAS,OAAO;AAAA,IAC/C,WAAU,WAAW,cAAc,WAAW,kBAAkB;AAC/D,eAAS,YAAY,MAAM,SAAS,KAAK;AAAA,IAC7C,YAAc,WAAW,gBAAgB,YAAY,YAAY,kBAAkB,CAAC,QAAQ,QAAQ;AAChG,eAAS,cAAc,MAAM,SAAS,SAAS,QAAQ;AAAA,IAC3D,OAAS;AACL,eAAS,aAAa,MAAM,QAAW,OAAO;AAAA,IAC/C;AACD,WAAO,gBAAgB,QAAQ,MAAM,OAAO;AAAA,EAC9C;AASA,WAAS,UAAU,MAAM;AACvB,QAAI,SAAS;AACb,WAAO,OAAO;AAAA,EAChB;AAUA,WAAS,UAAU,QAAQ9O,MAAK;AAC9B,QAAI,QAAQ,SAAS,QAAQA,IAAG;AAChC,WAAO,aAAa,KAAK,IAAI,QAAQ;AAAA,EACvC;AASA,WAAS,eAAe,QAAQ;AAC9B,QAAIoC,SAAQ,OAAO,MAAM,aAAa;AACtC,WAAOA,SAAQA,OAAM,GAAG,MAAM,cAAc,IAAI;EAClD;AAUA,WAAS,kBAAkB,QAAQ,SAAS;AAC1C,QAAI0M,UAAS,QAAQ,QACjB,YAAYA,UAAS;AAEzB,YAAQ,cAAcA,UAAS,IAAI,OAAO,MAAM,QAAQ;AACxD,cAAU,QAAQ,KAAKA,UAAS,IAAI,OAAO,GAAG;AAC9C,WAAO,OAAO,QAAQ,eAAe,yBAAyB,UAAU,QAAQ;AAAA,EAClF;AAUA,WAAS,QAAQ,OAAOA,SAAQ;AAC9B,IAAAA,UAASA,WAAU,OAAOib,qBAAmBjb;AAC7C,WAAO,CAAC,CAACA,YACN,OAAO,SAAS,YAAY,SAAS,KAAK,KAAK,OAC/C,QAAQ,MAAM,QAAQ,KAAK,KAAK,QAAQA;AAAA,EAC7C;AASA,WAAS,SAAS,MAAM;AACtB,WAAO,CAAC,CAAC,cAAe,cAAc;AAAA,EACxC;AAYA,WAAS,QAAQ,OAAO,SAAS;AAC/B,QAAI,YAAY,MAAM,QAClBA,UAAS6b,YAAU,QAAQ,QAAQ,SAAS,GAC5C,WAAW,UAAU,KAAK;AAE9B,WAAO7b,WAAU;AACf,UAAInP,SAAQ,QAAQmP;AACpB,YAAMA,WAAU,QAAQnP,QAAO,SAAS,IAAI,SAASA,UAAS;AAAA,IAC/D;AACD,WAAO;AAAA,EACT;AAYA,MAAI,kBAAkB,CAAC,iBAAiB,WAAW,SAAS,SAAS,WAAW,SAAS;AACvF,QAAI,SAAU,YAAY;AAC1B,WAAO,eAAe,SAAS,YAAY;AAAA,MACzC,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,SAAS,SAAS,kBAAkB,QAAQ,kBAAkB,eAAe,MAAM,GAAG,OAAO,CAAC,CAAC;AAAA,IACnG,CAAG;AAAA,EACH;AASA,WAAS,SAAS,MAAM;AACtB,QAAI,QAAQ,MAAM;AAChB,UAAI;AACF,eAAO,aAAa,KAAK,IAAI;AAAA,MACnC,SAAayE,IAAP;AAAA,MAAY;AACd,UAAI;AACF,eAAQ,OAAO;AAAA,MACrB,SAAaA,IAAP;AAAA,MAAY;AAAA,IACf;AACD,WAAO;AAAA,EACT;AAUA,WAAS,kBAAkB,SAAS,SAAS;AAC3C,cAAU,WAAW,SAAS,MAAM;AAClC,UAAI,QAAQ,OAAO,KAAK;AACxB,UAAK,UAAU,KAAK,MAAO,CAAC,cAAc,SAAS,KAAK,GAAG;AACzD,gBAAQ,KAAK,KAAK;AAAA,MACnB;AAAA,IACL,CAAG;AACD,WAAO,QAAQ;EACjB;AA2CA,WAAS,MAAM,MAAM,OAAO,OAAO;AACjC,YAAQ,QAAQ,SAAY;AAC5B,QAAI,SAAS,WAAW,MAAM,YAAY,QAAW,QAAW,QAAW,QAAW,QAAW,KAAK;AACtG,WAAO,cAAc,MAAM;AAC3B,WAAO;AAAA,EACT;AAmBA,WAASub,aAAW,OAAO;AAGzB,QAAI,MAAM9Q,WAAS,KAAK,IAAI6b,iBAAe,KAAK,KAAK,IAAI;AACzD,WAAO,OAAOtL,aAAW,OAAO6K;AAAAA,EAClC;AA2BA,WAASpb,WAAS,OAAO;AACvB,QAAIzN,QAAO,OAAO;AAClB,WAAO,CAAC,CAAC,UAAUA,SAAQ,YAAYA,SAAQ;AAAA,EACjD;AA0BA,WAASke,eAAa,OAAO;AAC3B,WAAO,CAAC,CAAC,SAAS,OAAO,SAAS;AAAA,EACpC;AAmBA,WAAS0H,WAAS,OAAO;AACvB,WAAO,OAAO,SAAS,YACpB1H,eAAa,KAAK,KAAKoL,iBAAe,KAAK,KAAK,KAAKR;AAAAA,EAC1D;AAyBA,WAAS,SAAS,OAAO;AACvB,QAAI,CAAC,OAAO;AACV,aAAO,UAAU,IAAI,QAAQ;AAAA,IAC9B;AACD,YAAQU,WAAS,KAAK;AACtB,QAAI,UAAUd,cAAY,UAAU,CAACA,YAAU;AAC7C,UAAI,OAAQ,QAAQ,IAAI,KAAK;AAC7B,aAAO,OAAO;AAAA,IACf;AACD,WAAO,UAAU,QAAQ,QAAQ;AAAA,EACnC;AA4BA,WAAS,UAAU,OAAO;AACxB,QAAI,SAAS,SAAS,KAAK,GACvB,YAAY,SAAS;AAEzB,WAAO,WAAW,SAAU,YAAY,SAAS,YAAY,SAAU;AAAA,EACzE;AAyBA,WAASc,WAAS,OAAO;AACvB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACR;AACD,QAAI5D,WAAS,KAAK,GAAG;AACnB,aAAOgD;AAAAA,IACR;AACD,QAAInb,WAAS,KAAK,GAAG;AACnB,UAAI,QAAQ,OAAO,MAAM,WAAW,aAAa,MAAM,QAAS,IAAG;AACnE,cAAQA,WAAS,KAAK,IAAK,QAAQ,KAAM;AAAA,IAC1C;AACD,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,UAAU,IAAI,QAAQ,CAAC;AAAA,IAC/B;AACD,YAAQ,MAAM,QAAQsb,UAAQ,EAAE;AAChC,QAAIU,YAAWR,aAAW,KAAK,KAAK;AACpC,WAAQQ,aAAYP,YAAU,KAAK,KAAK,IACpCC,eAAa,MAAM,MAAM,CAAC,GAAGM,YAAW,IAAI,CAAC,IAC5CT,aAAW,KAAK,KAAK,IAAIJ,QAAM,CAAC;AAAA,EACvC;AAqBA,WAAS,SAAS,OAAO;AACvB,WAAO,WAAW;AAChB,aAAO;AAAA,IACX;AAAA,EACA;AAkBA,WAAS,SAAS,OAAO;AACvB,WAAO;AAAA,EACT;AAGA,QAAM,cAAc,CAAA;AAEpB,MAAA,eAAiB;AC5sCF,QAAA,mBAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,SAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,QAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,cAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,gBAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,eAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,kBAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,iBAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,SAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,SAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,SAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,UAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,aAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,WAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,WAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,WAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,SAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,OAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,SAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,YAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,cAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,WAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,YAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,UAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,YAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,QAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,UAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,QAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,UAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,MAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,aAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,eAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,cAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;ACnBe,QAAA,cAAA;AAAA,IACb,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,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AI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,KAAI,MAAK,KAAI,KAAI,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,MAAK,MAAK,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,GAAG,GAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAW,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,KAAI,KAAI,GAAG,GAAE,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EA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,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI,GAAE,GAAE,MAAK,OAAM,KAAI,MAAK,KAAI,MAAK,MAAK,MAAK,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAK,EAAA,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,KAAI,KAAI,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,MAAK,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,KAAI,MAAK,KAAI,KAAI,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,MAAK,MAAK,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,KAAI,KAAI,KAAI,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,MAAM,GAAE,CAAC,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,KAAI,MAAK,KAAI,MAAK,OAAM,MAAK,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,MAAK,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,KAAI,KAAI,KAAI,MAAK,MAAK,OAAM,MAAK,QAAO,MAAK,OAAM,MAAK,OAAM,MAAK,MAAK,OAAM,MAAK,QAAO,QAAO,KAAI,KAAI,KAAI,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,MAAK,OAAM,QAAO,QAAO,KAAI,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,QAAO,SAAQ,SAAQ,MAAK,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,MAAK,OAAM,KAAI,KAAI,MAAK,QAAO,MAAK,OAAM,MAAK,OAAM,MAAK,OAAM,KAAI,QAAO,QAAO,QAAO,QAAO,MAAK,MAAK,MAAK,MAAK,SAAQ,OAAM,QAAO,OAAM,QAAO,OAAM,QAAO,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK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,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,MAAK,GAAG,GAAE,IAAG,CAAA,GAAG,CAAA,GAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,MAAK,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAc,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI,KAAI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,OAAM,OAAM,OAAM,UAAS,OAAM,MAAK,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,QAAO,OAAM,OAAM,MAAK,QAAO,OAAM,OAAM,MAAK,MAAK,QAAO,OAAM,UAAS,OAAM,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,QAAO,MAAK,UAAS,MAAK,QAAO,OAAM,MAAK,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,MAAK,OAAM,SAAQ,QAAO,OAAM,QAAO,MAAK,OAAM,MAAK,SAAQ,QAAO,MAAK,OAAM,OAAM,UAAS,QAAO,QAAO,QAAO,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,MAAK,QAAO,MAAK,QAAO,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,MAAK,MAAK,QAAO,OAAM,QAAO,OAAM,MAAK,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,QAAO,OAAM,MAAK,OAAM,MAAK,QAAO,MAAK,OAAM,QAAO,MAAK,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,MAAK,QAAO,OAAM,SAAQ,OAAM,OAAM,MAAK,OAAM,MAAK,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,MAAK,OAAM,QAAO,OAAM,MAAK,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,MAAK,MAAK,OAAM,QAAO,SAAQ,OAAM,MAAK,MAAK,QAAO,OAAM,MAAK,OAAM,SAAQ,QAAO,QAAO,QAAO,MAAK,OAAM,OAAM,QAAO,QAAO,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,IAAI,GAAE,CAAC,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,UAAQ,SAAQ,QAAO,MAAK,OAAM,MAAK,MAAK,MAAK,OAAM,MAAK,QAAO,MAAK,OAAM,SAAQ,MAAK,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK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,OAAM,QAAO,QAAO,QAAO,IAAI,GAAE,CAAC,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,QAAO,MAAK,MAAK,OAAM,MAAK,QAAO,QAAO,MAAK,MAAK,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,SAAQ,OAAM,OAAM,QAAO,QAAO,OAAM,MAAK,OAAM,MAAK,QAAO,OAAM,MAAK,MAAK,QAAO,OAAM,QAAO,SAAQ,MAAK,MAAK,SAAQ,MAAK,OAAM,MAAK,QAAO,MAAK,QAAO,OAAM,OAAM,MAAK,OAAM,MAAK,MAAK,QAAO,OAAM,OAAM,QAAO,QAAO,SAAQ,MAAK,QAAO,OAAM,KAAI,QAAO,SAAQ,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,QAAO,MAAK,MAAK,MAAK,OAAM,OAAM,SAAQ,QAAO,MAAK,OAAM,MAAK,MAAK,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,MAAK,QAAO,QAAO,UAAQ,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,MAAK,QAAO,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,QAAO,MAAK,OAAM,SAAQ,OAAM,QAAO,QAAO,MAAK,MAAK,MAAK,OAAM,SAAQ,OAAM,OAAM,MAAK,SAAQ,MAAK,OAAM,QAAO,SAAQ,MAAK,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,MAAK,KAAI,OAAM,SAAQ,MAAK,QAAO,MAAK,QAAO,OAAM,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,QAAO,QAAO,MAAK,OAAM,MAAK,MAAK,QAAO,MAAK,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,QAAO,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM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,OAAM,MAAK,OAAM,MAAK,QAAO,QAAO,QAAO,QAAO,MAAK,MAAK,QAAO,MAAK,OAAM,QAAO,QAAO,MAAK,MAAK,MAAK,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,QAAO,OAAM,SAAQ,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,IAAI,GAAE,CAAC,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,SAAQ,MAAK,QAAO,OAAM,OAAM,SAAQ,QAAO,QAAO,OAAM,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,QAAO,OAAM,QAAO,MAAK,QAAO,OAAM,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,OAAM,OAAM,MAAK,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,SAAQ,OAAM,QAAO,MAAK,QAAO,OAAM,QAAO,QAAO,QAAO,SAAQ,QAAO,QAAO,OAAM,SAAQ,SAAQ,QAAO,OAAM,MAAK,QAAO,OAAM,OAAM,OAAM,SAAQ,QAAO,QAAO,OAAM,OAAM,SAAQ,QAAO,QAAO,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,QAAO,MAAK,SAAQ,SAAQ,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,MAAK,QAAO,MAAK,QAAO,MAAK,MAAK,QAAO,MAAK,QAAO,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,SAAQ,SAAQ,QAAO,QAAO,OAAM,MAAK,QAAO,QAAO,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,QAAO,MAAK,OAAM,OAAM,QAAO,OAAM,OAAM,QAAO,QAAO,MAAK,QAAO,QAAO,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,SAAQ,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,QAAO,MAAK,SAAQ,OAAM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M,QAAO,QAAO,MAAK,MAAK,SAAQ,OAAM,SAAQ,OAAM,MAAK,OAAM,OAAM,QAAO,MAAK,MAAK,OAAM,QAAO,MAAK,QAAO,SAAQ,MAAK,QAAO,MAAK,QAAO,MAAK,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,QAAO,OAAM,MAAK,QAAO,MAAK,OAAM,MAAK,QAAO,MAAK,OAAM,QAAO,SAAQ,OAAM,MAAK,QAAO,MAAK,MAAK,MAAK,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,SAAQ,OAAM,MAAK,QAAO,QAAO,MAAK,OAAM,MAAK,QAAO,OAAM,QAAO,MAAK,MAAK,OAAM,QAAO,QAAO,MAAK,MAAK,MAAK,MAAK,SAAQ,OAAM,MAAK,QAAO,QAAO,OAAM,MAAK,QAAO,QAAO,SAAQ,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,KAAK,GAAE,CAAC,QAAO,SAAQ,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,QAAO,SAAQ,OAAM,QAAO,OAAM,MAAK,QAAO,SAAQ,MAAK,QAAO,OAAM,SAAQ,OAAM,MAAK,OAAM,QAAO,QAAO,QAAO,MAAK,QAAO,OAAM,MAAK,MAAK,MAAK,QAAO,OAAM,QAAO,QAAO,MAAK,QAAO,OAAM,QAAO,MAAK,OAAM,MAAK,MAAK,QAAO,QAAO,OAAM,SAAQ,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,MAAK,SAAQ,OAAM,QAAO,SAAQ,OAAM,OAAM,QAAO,OAAM,QAAO,MAAK,SAAQ,OAAM,QAAO,KAAI,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,SAAQ,OAAM,OAAM,QAAO,SAAQ,MAAK,OAAM,OAAM,QAAO,QAAO,OAAM,MAAK,MAAK,MAAK,MAAK,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,QAAO,OAAM,MAAK,OAAM,QAAO,MAAK,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,QAA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M,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK,OAAM,MAAK,MAAK,QAAO,QAAO,OAAM,OAAM,MAAK,MAAK,OAAM,QAAO,OAAM,OAAM,MAAK,QAAO,OAAM,QAAO,OAAM,QAAO,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,SAAQ,QAAO,MAAK,SAAQ,OAAM,MAAK,MAAK,OAAM,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,SAAQ,MAAK,MAAK,QAAO,QAAO,OAAM,OAAM,MAAK,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,QAAO,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,MAAK,SAAQ,SAAQ,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,MAAK,SAAQ,OAAM,OAAM,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,MAAK,MAAK,QAAO,OAAM,OAAM,OAAM,MAAK,QAAO,MAAK,OAAM,OAAM,SAAQ,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,MAAK,MAAK,SAAQ,QAAO,QAAO,QAAO,MAAK,MAAK,QAAO,MAAK,OAAM,QAAO,QAAO,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,QAAO,QAAO,QAAO,MAAK,OAAM,OAAM,QAAO,OAAM,OAAM,MAAK,MAAK,QAAO,SAAQ,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,MAAK,MAAK,SAAQ,SAAQ,UAAS,MAAK,SAAQ,QAAO,MAAK,QAAO,QAAO,QAAO,MAAK,QAAO,SAAQ,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,MAAK,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,SAAQ,QAAO,KAAK,GAAE,CAAC,OAAM,QAAO,QAAO,MAAK,QAAO,UAAS,QAAO,OAAM,QAAO,OAAM,MAAK,QAAO,MAAK,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,UAAS,OAAM,OAAM,SAAQ,MAAK,QAAO,OAAM,MAAK,OAAM,QAAO,OAAM,MAAK,MAAK,OAAM,QAAO,QAAO,MAAK,QAAO,QAAO,OAAM,QAAO,OAAM,MAAK,QAAO,MAAK,MAAK,OAAM,OAAM,MAAK,QAAO,OAAM,SAAQ,QAAO,OAAM,OAAM,MAAK,MAAK,QAAO,QAAO,MAAK,QAAO,QAAO,MAAK,QAAO,OAAM,OAAM,SAAQ,QAAO,MAAK,OAAM,OAAM,QAAO,SAAQ,OAAM,OAAM,MAAK,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,SAAQ,MAAK,MAAK,SAAQ,OAAM,MAAK,MAAK,QAAO,SAAQ,QAAO,OAAM,QAAO,OAAM,QAAO,MAAK,QAAO,MAAK,OAAM,OAAM,MAAK,QAAO,MAAK,MAAK,OAAM,QAAO,OAAM,MAAK,OAAM,QAAO,MAAK,QAAO,MAAK,MAAK,OAAM,OAAM,QAAO,SAAQ,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,MAAK,QAAO,QAAO,OAAM,SAAQ,QAAO,OAAM,QAAO,OAAM,MAAK,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,QAAO,QAAO,QAAO,MAAK,OAAM,MAAK,OAAM,SAAQ,MAAK,OAAM,OAAM,OAAM,QAAO,QAAO,MAAK,OAAM,QAAO,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,MAAK,QAAO,MAAK,QAAO,MAAK,OAAM,SAAQ,QAAO,OAAM,MAAK,QAAO,QAAO,MAAK,QAAO,OAAM,QAAO,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,OAAM,OAAM,QAAO,SAAQ,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,UAAQ,MAAK,MAAK,OAAM,QAAO,SAAQ,OAAM,SAAQ,OAAM,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAA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O,QAAO,SAAQ,QAAO,OAAM,OAAM,QAAO,MAAK,OAAM,QAAO,OAAM,SAAQ,QAAO,OAAM,OAAM,MAAK,OAAM,KAAI,MAAK,QAAO,QAAO,MAAK,MAAK,OAAM,MAAK,MAAK,QAAO,MAAK,MAAK,QAAO,MAAK,OAAM,OAAM,QAAO,OAAM,QAAO,MAAK,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,QAAO,QAAO,MAAK,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,MAAK,MAAK,OAAM,QAAO,OAAM,MAAK,QAAO,OAAM,SAAQ,MAAK,OAAM,MAAK,QAAO,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,QAAO,MAAK,OAAM,KAAI,MAAK,SAAQ,QAAO,QAAO,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,OAAM,SAAO,MAAK,MAAK,OAAM,QAAO,OAAM,MAAK,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,OAAM,MAAK,MAAK,MAAK,OAAM,MAAK,OAAM,QAAO,MAAK,MAAK,OAAM,QAAO,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,OAAM,MAAK,MAAK,KAAI,MAAK,MAAK,OAAM,OAAM,QAAO,OAAM,OAAM,QAAO,QAAO,MAAK,OAAM,QAAO,MAAK,MAAK,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,SAAQ,SAAQ,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,SAAQ,QAAO,QAAO,OAAM,OAAM,MAAK,QAAO,SAAQ,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,MAAK,SAAQ,MAAK,OAAM,SAAQ,QAAO,OAAM,OAAM,OAAM,OAA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O,KAAI,MAAK,OAAM,QAAO,OAAM,MAAK,QAAO,OAAM,QAAO,SAAQ,QAAO,MAAK,QAAO,QAAO,OAAM,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,QAAO,QAAO,MAAK,QAAO,MAAK,QAAO,SAAQ,QAAO,MAAK,OAAM,QAAO,OAAM,MAAK,MAAK,QAAO,QAAO,OAAM,MAAK,OAAM,MAAK,OAAM,QAAO,SAAQ,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,MAAK,MAAK,QAAO,SAAQ,QAAO,MAAK,MAAK,KAAI,MAAK,MAAK,MAAK,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,OAAM,OAAM,MAAK,QAAO,QAAO,QAAO,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK,MAAK,MAAK,OAAM,QAAO,OAAM,OAAM,MAAK,QAAO,MAAK,OAAM,SAAQ,OAAM,MAAK,OAAM,OAAM,QAAO,QAAO,MAAK,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,QAAO,SAAQ,MAAK,QAAO,MAAK,QAAO,SAAQ,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,QAAO,MAAM,GAAE,CAAC,QAAO,OAAM,MAAK,SAAQ,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK,QAAO,QAAO,MAAK,KAAI,SAAQ,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,SAAQ,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,QAAO,OAAM,SAAQ,QAAO,KAAI,OAAM,QAAO,SAAQ,QAAO,OAAM,SAAQ,QAAO,MAAK,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,QAAO,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,MAAK,OAAM,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,QAA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K,OAAM,MAAK,OAAM,KAAI,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,MAAK,MAAK,OAAM,OAAM,SAAQ,OAAM,QAAO,KAAI,QAAO,OAAM,MAAK,SAAQ,OAAM,OAAM,QAAO,OAAM,MAAK,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,QAAO,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,SAAQ,QAAO,OAAM,OAAM,MAAK,MAAK,OAAM,SAAQ,QAAO,OAAM,OAAM,SAAQ,QAAO,OAAM,OAAM,QAAO,OAAM,MAAK,QAAO,SAAQ,OAAM,QAAO,QAAO,OAAM,QAAO,MAAK,OAAM,QAAO,OAAM,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,MAAK,MAAK,OAAM,SAAQ,OAAM,MAAK,QAAO,MAAK,QAAO,MAAK,OAAM,KAAI,MAAK,OAAM,OAAM,OAAM,OAAM,QAAO,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,SAAQ,QAAO,QAAO,OAAM,OAAM,SAAQ,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,QAAO,MAAK,MAAK,MAAK,QAAO,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,MAAK,QAAO,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,OAAM,QAAO,OAAM,MAAK,MAAI,EAAE,MAAK,SAAQ,MAAK,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,MAAK,MAAK,MAAK,QAAO,OAAM,QAAO,QAAO,OAAM,MAAK,QAAO,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,MAAK,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,SAAQ,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,QAAO,SAAQ,OAAM,MAAK,QAAO,OAAM,KAAK,GAAE,CAAC,KAAI,SAAQ,OAAM,MAAK,MAAK,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,QAAO,QAAO,QAAO,OAAM,SAAQ,QAAO,OAAM,MAAK,MAAK,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,OAAM,OAAM,QAAO,QAAO,MAAK,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,QAAO,MAAK,OAAM,UAAS,MAAK,MAAK,OAAM,SAAQ,MAAK,MAAK,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,MAAK,MAAK,OAAM,MAAK,MAAK,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,QAAO,SAAQ,MAAK,UAAS,MAAK,MAAK,QAAO,MAAK,QAAO,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,QAAO,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,OAAM,QAAO,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,QAAO,QAAO,MAAK,SAAQ,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,MAAK,QAAO,QAAO,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,MAAK,UAAS,SAAQ,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,MAAK,MAAK,MAAK,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,MAAK,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,QAAO,QAAO,MAAK,MAAK,QAAO,OAAM,MAAK,QAAO,OAAM,OAAM,MAAK,QAAO,OAAM,MAAK,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,QAAO,OAAM,OAAM,MAAK,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,QAAO,MAA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M,OAAM,OAAM,MAAK,MAAK,QAAO,QAAO,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,MAAK,MAAK,QAAO,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,QAAO,OAAM,QAAO,QAAO,MAAK,SAAQ,OAAM,MAAK,OAAM,MAAK,MAAK,OAAM,OAAM,QAAO,QAAO,OAAM,MAAK,UAAS,QAAO,MAAK,MAAK,OAAM,OAAM,QAAO,MAAK,QAAO,MAAK,OAAM,MAAK,QAAO,MAAK,SAAQ,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,QAAO,QAAO,MAAK,OAAM,OAAM,MAAK,QAAO,MAAK,QAAO,QAAO,OAAM,MAAK,IAAI,GAAE,CAAC,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,MAAK,QAAO,MAAK,QAAO,MAAK,QAAO,OAAM,MAAK,QAAO,QAAO,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,QAAO,UAAS,OAAM,QAAO,QAAO,MAAK,MAAK,QAAO,QAAO,OAAM,MAAK,QAAO,QAAO,OAAM,MAAK,MAAK,QAAO,OAAM,QAAO,MAAK,QAAO,MAAK,MAAK,QAAO,QAAO,QAAO,OAAM,MAAK,QAAO,OAAM,OAAM,MAAK,OAAM,MAAK,OAAM,OAAM,QAAO,QAAO,MAAK,QAAO,QAAO,MAAK,MAAK,MAAK,QAAO,MAAK,KAAI,MAAK,QAAO,MAAK,MAAK,OAAM,QAAO,MAAK,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,MAAK,MAAK,KAAI,MAAK,OAAM,MAAK,OAAM,MAAK,MAAK,OAAM,QAAO,OAAM,MAAK,MAAK,QAAO,MAAK,MAAK,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,MAAK,MAAK,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,UAAS,MAAK,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,MAAK,OAAM,MAAK,MAAK,QAAO,MAAK,QAAO,OAAM,OAAM,OAAM,QAAO,MAAK,MAAK,MAAK,OAAM,QAAO,OAAM,OAAM,MAAK,MAAK,MAAK,OAAM,OAAM,QAAO,MAAK,SAAQ,OAAM,OAAM,MAAK,MAAK,OAAM,SAAQ,OAAM,QAAO,MAAK,QAAO,OAAM,MAAK,OAAM,OAAM,MAAK,QAAO,MAAK,QAAO,QAAO,MAAK,OAAM,MAAK,MAAK,OAAM,MAAK,QAAO,OAAM,MAAK,UAAQ,QAAO,MAAK,MAAK,QAAO,MAAK,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,OAAM,SAAQ,SAAQ,OAAM,SAAQ,QAAO,OAAM,QAAO,MAAK,SAAQ,QAAO,OAAM,MAAK,QAAO,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,MAAK,QAAO,MAAK,MAAK,QAAO,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,QAAO,MAAK,MAAK,QAAO,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,MAAM,GAAE,CAAC,MAAK,MAAK,QAAO,MAAK,OAAM,OAAM,QAAO,MAAK,OAAM,OAAM,MAAK,QAAO,QAAO,OAAM,QAAO,MAAK,OAAM,QAAO,MAAK,MAAK,MAAK,QAAO,OAAM,OAAM,QAAO,MAAK,SAAQ,OAAM,MAAK,QAAO,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,QAAO,OAAM,QAAO,MAAK,SAAQ,OAAM,OAAM,OAAM,QAAO,MAAK,QAAO,QAAO,OAAM,MAAK,OAAM,MAAK,MAAK,MAAK,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,MAAK,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,MAAK,QAAO,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,QAAO,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,MAAK,QAAO,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,OAAM,MAAK,OAAM,MAAK,MAAK,OAAM,OAAM,MAAK,OAAM,QAAO,MAAK,KAAI,MAAK,MAAK,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,MAAK,OAAM,MAAK,QAAO,OAAM,QAAO,MAAK,OAAM,MAAK,QAAO,MAAK,MAAK,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,MAAK,QAAO,MAAK,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,MAAK,OAAM,OAAM,IAAI,GAAE,CAAC,MAAK,MAAK,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,MAAK,MAAK,KAAI,MAAK,OAAM,MAAK,OAAM,MAAK,MAAK,KAAI,MAAK,MAAK,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,KAAK,GAAE,CAAC,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,KAAK,GAAE,CAAC,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,KAAK,GAAE,CAAC,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,OAAM,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,KAAK,GAAE,CAAC,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,SAAQ,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,OAAM,OAAM,MAAK,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,OAAS,EAAA,EAAA,EAAA,OAAM,MAAK,OAAM,QAAO,OAA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AAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,OAAO,GAAE,CAAC,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,MAAM,GAAE,CAAC,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,SAAS,GAAE,CAAC,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,GAAE,CAAC,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,OAAO,GAAE,CAAC,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,MAAM,GAAE,CAAC,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,KAAK,GAAE,CAAC,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,QAAQ,GAAE,CAAC,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,MAAM,GAAE,CAAC,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,QAAQ,GAAE,CAAC,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,GAAE,CAAC,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,MAAM,GAAE,CAAC,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,KAAK,GAAE,CAAC,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,MAAM,GAAE,CAAC,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,OAAO,GAAE,CAAC,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,KAAK,GAAE,CAAC,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,MAAM,GAAE,CAAC,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAO,GAAE,CAAC,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,MAAM,GAAE,CAAC,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,QAAQ,GAAE,CAAC,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,MAAM,GAAE,CAAC,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,OAAO,GAAE,CAAC,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,MAAM,GAAE,CAAC,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,QAAQ,GAAE,CAAC,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,GAAE,CAAC,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,MAAM,GAAE,CAAC,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,KAAK,GAAE,CAAC,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,KAAI,MAAK,OAAM,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,MAAK,OAAM,MAAK,OAAM,OAAM,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAO,GAAE,CAAC,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,MAAM,GAAE,CAAC,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,OAAO,GAAE,CAAC,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,SAAS,GAAE,CAAC,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,WAAU,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,WAAU,UAAS,UAAS,WAAU,UAAS,WAAU,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,GAAE,CAAC,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,MAAM,GAAE,CAAC,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,MAAM,GAAE,CAAC,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,MAAM,GAAE,CAAC,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,QAAQ,GAAE,CAAC,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,MAAM,GAAE,CAAC,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,OAAO,GAAE,CAAC,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAM,GAAE,CAAC,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,KAAK,GAAE,CAAC,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,MAAM,GAAE,CAAC,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,KAAK,GAAE,CAAC,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,MAAK,OAAM,QAAO,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,OAAM,QAAO,OAAM,QAAO,QAAO,OAAM,OAAM,OAAM,OAAM,OAAM,OAAM,QAAO,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,SAAQ,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,OAAM,QAAO,SAAQ,OAAO,GAAE,CAAC,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,QAAO,QAAO,QAAO,OAAM,QAAO,SAAQ,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,QAAO,QAAO,SAAQ,QAAO,SAAQ,SAAQ,QAAO,QAAO,QAAO,Q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MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,IACD,2BAA2B;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,IACD,oBAAoB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAAA,EACL;ACpPA,SAAO,eAAeC,cAAS,cAAc,EAAE,OAAO,KAAI,CAAE;AAC1CA,eAAA,aAAG;AACrB,MAAI,YAAY/oB;AAChB,MAAI,gBAAgB,SAAUlH,OAAM;AAChC,QAAI,CAACA,SAAQA,MAAK,WAAW,GAAG;AAC5B,aAAO;AAAA,IACV;AACD,WAAO,SAAS,KAAKA,KAAI;AAAA,EAC7B;AACA,MAAI,yBAAyB,SAAUL,IAAGC,IAAG;AACzC,WAAOD,GAAE,YAAW,MAAOC,GAAE,YAAW;AAAA,EAC5C;AAIA,MAAI,aAA4B,WAAY;AACxC,aAASswB,YAAW7X,OAAM;AACtB,UAAIA,UAAS,QAAQ;AAAE,QAAAA,QAAO,UAAU;AAAA,MAAU;AAClD,WAAK,OAAOA;AAAA,IACf;AAQD,IAAA6X,YAAW,UAAU,UAAU,SAAU,YAAY,YAAY;AAC7D,UAAI,eAAe,QAAQ;AAAE,qBAAa;AAAA,MAAI;AAC9C,UAAI,aAAa;AACjB,UAAI,WAAW,WAAW,KAAK,EAAE;AACjC,UAAI,YAAY,CAAC,WAAW,KAAK,QAAQ,GAAG;AACxC,eAAO;AAAA,MACV;AACD,UAAI,OAAO;AACX,UAAI,QAAQ;AACZ,UAAI3gB,QAAO;AACX,aAAQA,QAAO,WAAW,KAAK,KAAK,GAAI;AACpC,YAAI,WAAW,KAAKA,KAAI,GAAG;AACvB;AAAA,QACH;AACD,gBAAQA;AACR;AAAA,MACH;AACD,aAAO;AAAA,IACf;AACI,IAAA2gB,YAAW,UAAU,cAAc,SAAU,YAAY;AACrD,UAAI,aAAa;AACjB,UAAI,QAAQ;AACZ,UAAI3gB,QAAO;AACX,aAAQA,QAAO,WAAW,KAAK,KAAK,GAAI;AACpC,YAAI,CAAC,WAAW,KAAKA,KAAI,GAAG;AACxB;AAAA,QACH;AACD;AAAA,MACH;AACD,aAAQA,QAAO,WAAW,KAAK,KAAK,GAAI;AACpC,YAAI,WAAW,KAAKA,KAAI,GAAG;AACvB;AAAA,QACH;AACD;AAAA,MACH;AACD,aAAO,KAAK,QAAQ,YAAY,QAAQ,CAAC;AAAA,IACjD;AACI,IAAA2gB,YAAW,UAAU,OAAO,SAAU,YAAY;AAC9C,UAAI,WAAW,oBAAoB;AAC/B;AAAA,MACH;AACD,UAAI,cAAc,KAAK,QAAQ,UAAU;AACzC,UAAI,YAAY,WAAW,GAAG;AAC1B;AAAA,MACH;AAGD,UAAI,qBAAqB,KAAK,WAAW,GAAG;AACxC,eAAO,WAAW,iBAAiB,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA,MACjG;AAGD,UAAI,8BAA8B,KAAK,KAAK,mBAAmB,KAAK,SAAU,MAAM;AAChF,eAAO,uBAAuB,MAAM,WAAW;AAAA,MAC3D,CAAS;AACD,UAAI,6BAA6B;AAC7B,eAAO,WAAW,iBAAiB,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA,MACjG;AAGD,UAAI,qCAAqC,KAAK,KAAK,0BAA0B,KAAK,SAAU,MAAM;AAC9F,eAAO,uBAAuB,MAAM,WAAW;AAAA,MAC3D,CAAS;AACD,UAAI,oCAAoC;AACpC,eAAO,WAAW,iBAAiB,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA,MACjG;AAED,UAAI,YAAY,KAAK,KAAK,cAAc,KAAK,SAAU,MAAM;AACzD,eAAO,uBAAuB,MAAM,WAAW;AAAA,MAC3D,CAAS;AACD,UAAI,WAAW,KAAK,YAAY,UAAU;AAC1C,UAAI,WAAW,KAAK,QAAQ,YAAY,YAAY,SAAS,CAAC;AAO9D,UAAI,cAAc,QAAQ,KAAK,UAAU,KAAK,WAAW,KAAK,cAAc,QAAQ,GAAG;AACnF,mBAAW,iBAAiB,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA,MAC1F,WACQ,aAAa,CAAC,cAAc,QAAQ,GAAG;AAG5C,mBAAW,iBAAiB,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,MAAM,CAAC;AAAA,MAC1F;AAAA,IACT;AACI,WAAOA;AAAA,EACX,EAAC;AACiB,eAAA,aAAG;;;ACpHD,EAACpb,kBAAQA,eAAK,iBAAkB,SAAU,IAAI/U,OAAM;AACpE,aAASV,KAAI,GAAG8wB,MAAKpwB,MAAK,QAAQF,KAAI,GAAG,QAAQR,KAAI8wB,KAAI9wB,MAAKQ;AAC1D,SAAGA,MAAKE,MAAKV;AACjB,WAAO;AAAA,EACX;AACA,SAAO,eAAe,QAAS,cAAc,EAAE,OAAO,KAAI,CAAE;AAC5C,SAAA,WAAG;AACnB,WAAS,WAAW;AAK+B;AAC3C;AAAA,IACH;AAAA,EAEL;AACgB,SAAA,WAAG;;;AClBnB,WAAO,SAAS,OAAO,SAAS,OAAO,SAAS,SAAS,KAAK;AAC7D,UAAI,eAAe,CAAC,mBAAmB,mBAAmB,kBAAkB,mBAAmB;AAC/F,UAAIkoB,WAAU,OAAO,UAAU,SAAS,KAAK,GAAG;AAEhD,UAAG,QAAQ,QAAQ,OAAO,QAAQ,aAAa;AAC9C,cAAM,IAAI,UAAU,4CAA4C;AAAA,MAChE,WAAS,CAAC,CAAC,aAAa,QAAQA,QAAO,GAAG;AAC1C,eAAO;MACT,OAAQ;AAEN,YAAI,OAAO,MAAM;AAChB,iBAAO,OAAO,KAAK,GAAG,EAAE,IAAI,SAAUnoB,MAAK;AAC1C,mBAAO,IAAIA;AAAA,UACf,CAAI;AAAA,QACD;AAED,YAAI,SAAS,CAAA;AACb,iBAASM,SAAQ,KAAK;AACrB,cAAI,IAAI,eAAeA,KAAI,GAAG;AAC7B,mBAAO,KAAK,IAAIA,MAAK;AAAA,UACrB;AAAA,QACD;AAED,eAAO;AAAA,MACP;AAAA,IACF;AAEA,QAAqCmV,QAAO,SAAS;AACjD,MAAAA,QAAiB,UAAA,OAAO;AAAA,IAC5B;AAAA;AC5BA,MAAI,kBAAmBC,kBAAQA,eAAK,mBAAoB,SAAU,KAAK;AACnE,WAAQ,OAAO,IAAI,aAAc,MAAM,EAAE,WAAW;EACxD;AACA,SAAO,eAAesb,aAAS,cAAc,EAAE,OAAO,KAAI,CAAE;AAC3CA,cAAA,YAAG;AACpB,MAAIC,aAAWnpB;AAEf,MAAI,kBAAkB,gBAAgBsO,cAAAA,OAAwB;AAU9D,MAAI,YAA2B,WAAY;AACvC,aAAS8a,aAAY;AACjB,UAAI;AACJ,WAAK,SAAS,KAAK,CAAE,GACjB,GAAG,OAAQ,KACX,GAAG,YAAY,UACf,GAAG,YAAY,UACf,GAAG,OAAO,KACV,GAAG,YAAY,UACf,GAAG,YAAY,UACf,GAAG,YAAY,UACf;AACJ,WAAK,WAAW,OAAO,KAAK,KAAK,KAAK;AACtC,WAAK,aAAa,gBAAgB,QAAQ,KAAK,KAAK;AAAA,IACvD;AACD,IAAAA,WAAU,UAAU,OAAO,SAAU,YAAY;AAC7C,UAAI,SAAS,WAAW;AACxB,UAAI,CAAC,QAAQ;AACT;AAAA,MACH;AAGD,UAAI,CAAC,WAAW,eAAe;AAC3B,YAAI,WAAW,KAAK,SAAS,QAAQ,MAAM;AAC3C,YAAI,aAAa,IAAI;AACjB,cAAIlxB,OAAM,KAAK,SAAS;AACxBixB,qBAAS,SAAS,gCAAgCjxB,IAAG;AACrD,qBAAW,aAAaA,IAAG;AAAA,QAC9B;AAAA,MACJ,OACI;AAED,YAAI,aAAa,KAAK,WAAW,QAAQ,MAAM;AAC/C,YAAI,eAAe,IAAI;AACnB,cAAIA,OAAM,KAAK,SAAS;AACxBixB,qBAAS,SAAS,gCAAgC,KAAK,WAAW,WAAW;AAC7E,qBAAW,aAAajxB,IAAG;AAAA,QAC9B;AAAA,MACJ;AAAA,IACT;AACI,WAAOkxB;AAAA,EACX,EAAC;AACgB,cAAA,YAAG;AC1DpB,MAAI,WAAYxb,kBAAQA,eAAK,YAAa,WAAY;AAClD,eAAW,OAAO,UAAU,SAAS6D,IAAG;AACpC,eAAS/U,IAAGvE,KAAI,GAAGgB,KAAI,UAAU,QAAQhB,KAAIgB,IAAGhB,MAAK;AACjD,QAAAuE,KAAI,UAAUvE;AACd,iBAASe,MAAKwD;AAAG,cAAI,OAAO,UAAU,eAAe,KAAKA,IAAGxD,EAAC;AAC1D,YAAAuY,GAAEvY,MAAKwD,GAAExD;AAAA,MAChB;AACD,aAAOuY;AAAA,IACf;AACI,WAAO,SAAS,MAAM,MAAM,SAAS;AAAA,EACzC;AACA,SAAO,eAAe,kBAAS,cAAc,EAAE,OAAO,KAAI,CAAE;AAC5D,mBAAA,aAAoD,iBAAA,4DAA4B,iBAAA,wBAA4D,iBAAA,mDAAsB,UAAA,iBAAA,QAAmC,iBAAA,wCAAoB;AACzN,MAAI,mBAAmB;AACvB,MAAI,eAAenD;AACnB,MAAI,kBAAkBzN;AACtB,MAAI,gBAAgB6O;AACpB,MAAI,oBAAoBC;AACxB,MAAI,mBAAmB4M;AACvB,MAAI,eAAeU;AACnB,MAAI,cAAcC;AAClB,MAAI,WAAWE;AACf,mBAAA,SAAiB;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,UAAU;AAAA,IACV,KAAK;AAAA,EACT;AACA,MAAI,cAA6B,WAAY;AACzC,aAASiM,aAAYvwB,OAAM;AACvB,WAAK,WAAW;AAChB,WAAK,UAAU;AACf,WAAK,SAAS,IAAI,aAAa,WAAWA,KAAI;AAAA,IACjD;AACD,WAAO,eAAeuwB,aAAY,WAAW,WAAW;AAAA,MACpD,KAAK,WAAY;AACb,eAAO,KAAK,SAAS,KAAK,SAAS,SAAS;AAAA,MAC/C;AAAA,MACD,YAAY;AAAA,MACZ,cAAc;AAAA,IACtB,CAAK;AACD,IAAAA,aAAY,UAAU,oBAAoB,SAAUtwB,OAAM;AACtD,UAAI,UAAU,KAAK;AACnB,UAAI,SAAS;AACT,gBAAQ,SAAS,KAAKA,KAAI;AAAA,MAC7B,OACI;AAED,aAAK,QAAQ,KAAKA,KAAI;AAAA,MACzB;AAAA,IACT;AAEI,IAAAswB,aAAY,UAAU,OAAO,SAAUlZ,aAAY;AAC/C,WAAK,SAAS,KAAKA,WAAU;AAAA,IACrC;AACI,IAAAkZ,aAAY,UAAU,WAAW,WAAY;AACzC,aAAO,KAAK,SAAS,SAAS;AAAA,IACtC;AACI,IAAAA,aAAY,UAAU,WAAW,SAAU,QAAQ;AAC/C,UAAI,KAAK,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,GAAG,OAAO,gBAAgB,GAAG,eAAe,cAAc,GAAG;AAC5G,WAAK,kBAAkB,qBAAqB,OAAO,eAAe,WAAW,CAAC;AAC9E,aAAO;AAAA,IACf;AACI,IAAAA,aAAY,UAAU,YAAY,SAAU,QAAQ;AAChD,UAAI,KAAK,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,GAAG,OAAO,gBAAgB,GAAG,eAAe,cAAc,GAAG;AAC5G,WAAK,kBAAkB,WAAW,cAAc,OAAO,eAAe,WAAW,CAAC;AAAA,IAC1F;AACI,IAAAA,aAAY,UAAU,YAAY,SAAU,QAAQ;AAChD,UAAI,KAAK,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,GAAG,OAAO,gBAAgB,GAAG,eAAe,cAAc,GAAG;AAC5G,WAAK,kBAAkB,eAAe,OAAO,eAAe,WAAW,CAAC;AAAA,IAChF;AAEI,IAAAA,aAAY,UAAU,QAAQ,SAAU,QAAQ;AAC5C,UAAI,KAAK,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,GAAG,OAAO,gBAAgB,GAAG,eAAe,cAAc,GAAG;AAC5G,UAAI,cAAc,WAAW,YAAY,QAAQ;AAC7C,aAAK,kBAAkB,sBAAsB,OAAO,eAAe,WAAW,CAAC;AAAA,MAClF;AACD,UAAI,cAAc,KAAK,SAAS,IAAG;AACnC,UAAI,CAAC,aAAa;AACd;AAAA,MACH;AACD,UAAI,YAAY,SAAS,WAAW,GAAG;AACnC;AAAA,MACH;AACD,UAAI,iBAAiB,YAAY,SAAS;AAC1C,UAAI,SAAS,KAAK,OAAO,IAAG;AAC5B,kBAAY,MAAM;AAAA,QACd,OAAO,eAAe,IAAI;AAAA,QAC1B,KAAK,SAAS,MAAM;AAAA,MAChC;AACQ,UAAI,WAAW,KAAK,OAAO,WAAW,eAAe,MAAM,IAAI,OAAO,MAAM;AAC5E,kBAAY,QAAQ,CAAC,eAAe,MAAM,IAAI,OAAO,MAAM;AAC3D,kBAAY,MAAM;AAClB,WAAK,QAAQ,KAAK,WAAW;AAAA,IACrC;AACI,IAAAA,aAAY,UAAU,SAAS,WAAY;AACvC,aAAO,KAAK;AAAA,IACpB;AACI,WAAOA;AAAA,EACX,EAAC;AACkB,mBAAA,cAAG;AACtB,MAAI,gBAAgB,SAAU,SAAS;AACnC,QAAI,YAAY,QAAQ;AAAE,gBAAU,CAAE;AAAA,IAAG;AACzC,QAAI,UAAU,IAAI,gBAAgB;AAClC,QAAI,QAAQ,IAAI,cAAc;AAC9B,QAAI,YAAY,IAAI,kBAAkB,gBAAgB,QAAQ,eAAe;AAC7E,QAAI,aAAa,IAAI,aAAa;AAClC,QAAI,YAAY,IAAI,YAAY;AAGhC,QAAI,iBAAiB,IAAI,iBAAiB,eAAe;AAAA,MACrD,SAAS,CAAC,SAAS,SAAS;AAAA,MAC5B,SAAS,CAAC,YAAY,SAAS;AAAA,IACvC,CAAK;AACD,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACR;AAAA,EACA;AAIA,WAAS,MAAMvwB,OAAM,SAAS;AAC1B,QAAI,KAAK,cAAc,OAAO,GAAG,UAAU,GAAG,SAAS,QAAQ,GAAG,OAAO,YAAY,GAAG,WAAW,iBAAiB,GAAG;AACvH,QAAI,cAAc,IAAI,YAAYA,KAAI;AACtC,QAAI,aAAa,YAAY;AAC7B,WAAO,CAAC,WAAW,QAAQ;AACvB,UAAI,QAAQ,KAAK,UAAU,GAAG;AAC1B,oBAAY,SAAS,OAAO;AAAA,MAC/B,WACQ,MAAM,KAAK,UAAU,GAAG;AAE7B,oBAAY,UAAU,KAAK;AAAA,MAC9B,WACQ,UAAU,KAAK,UAAU,GAAG;AACjC,oBAAY,MAAM,SAAS;AAAA,MAC9B,OACI;AACD,YAAI,CAAC,YAAY,YAAY;AACzB,sBAAY,KAAK,wBAAuB,CAAE;AAAA,QAC7C;AACD,oBAAY,UAAU,cAAc;AAAA,MACvC;AAAA,IACJ;AACD,gBAAY,MAAM,KAAK;AACvB,WAAO,YAAY;EACvB;AACA,MAAa,UAAA,iBAAA,QAAG;AAMhB,WAAS,SAAS,eAAe,SAAS;AACtC,QAAI,KAAK,cAAc,OAAO,GAAG,UAAU,GAAG,SAAS,QAAQ,GAAG,OAAO,YAAY,GAAG,WAAW,iBAAiB,GAAG;AACvH,QAAI,cAAc,IAAI,YAAY,aAAa;AAC/C,QAAI,aAAa,YAAY;AAC7B,WAAO,CAAC,WAAW,QAAQ;AACvB,UAAI,cAAc,WAAW;AAC7B,UAAI,CAAC,aAAa;AACd;AAAA,MACH;AACD,UAAI,YAAY,SAAS,iBAAiB,aAAa,KAAK;AACxD,YAAI,MAAM,KAAK,UAAU,GAAG;AACxB,mBAAS,SAAS,OAAO;AACzB,sBAAY,UAAU,KAAK;AAAA,QAC9B,WACQ,UAAU,KAAK,UAAU,GAAG;AACjC,mBAAS,SAAS,WAAW;AAC7B,sBAAY,MAAM,SAAS;AAAA,QAC9B,WACQ,QAAQ,KAAK,UAAU,GAAG;AAC/B,mBAAS,SAAS,SAAS;AAC3B,sBAAY,SAAS,OAAO;AAAA,QAC/B,OACI;AACD,cAAI,CAAC,YAAY,YAAY;AACzB,qBAAS,SAAS,mCAAmC;AACrD,wBAAY,KAAK,wBAAuB,CAAE;AAAA,UAC7C;AACD,sBAAY,UAAU,cAAc;AAAA,QACvC;AAAA,MACJ,WACQ,YAAY,SAAS,iBAAiB,aAAa,OAAO;AAG/D,oBAAY,kBAAkB,WAAW;AACzC,mBAAW,SAAS,WAAW;AAAA,MAClC,OACI;AACD,YAAI,CAAC,YAAY,YAAY;AACzB,sBAAY,KAAK,wBAAuB,CAAE;AAAA,QAC7C;AACD,oBAAY,kBAAkB,WAAW;AACzC,mBAAW,SAAS,WAAW;AAAA,MAClC;AAAA,IACJ;AAGD,gBAAY,MAAM,KAAK;AACvB,WAAO,SAAS,SAAS,CAAA,GAAI,aAAa,GAAG,EAAE,UAAU,YAAY,OAAQ,EAAA,CAAE;AAAA,EACnF;AACgB,mBAAA,WAAG;AAInB,WAAS,qBAAqBA,OAAM,eAAe,aAAa;AAC5D,WAAO,WAAW,cAAcA,OAAM,eAAe,WAAW;AAAA,EACpE;AAC4B,mBAAA,uBAAG;AAC/B,WAAS,sBAAsBA,OAAM,eAAe,aAAa;AAC7D,WAAO,WAAW,eAAeA,OAAM,eAAe,WAAW;AAAA,EACrE;AAC6B,mBAAA,wBAAG;AAChC,WAAS,eAAeA,OAAM,eAAe,aAAa;AACtD,WAAO,WAAW,OAAOA,OAAM,eAAe,WAAW;AAAA,EAC7D;AACsB,mBAAA,iBAAG;AACzB,WAAS,0BAA0B;AAC/B,WAAO;AAAA,MACH,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,QACD,OAAO,EAAE,QAAQ,KAAK,MAAM,IAAK;AAAA,QACjC,KAAK,EAAE,QAAQ,KAAK,MAAM,IAAK;AAAA,MAClC;AAAA,MACD,OAAO,CAAC,KAAK,GAAG;AAAA,MAChB,UAAU,CAAE;AAAA,IACpB;AAAA,EACA;AAC+B,mBAAA,0BAAG;AAClC,WAAS,WAAWQ,OAAMR,OAAM,eAAe,aAAa;AACxD,WAAO;AAAA,MACH,MAAMQ;AAAA,MACN,KAAKR;AAAA,MACL,OAAOA;AAAA,MACP,KAAK;AAAA,QACD,OAAO,SAAS,aAAa;AAAA,QAC7B,KAAK,SAAS,WAAW;AAAA,MAC5B;AAAA,MACD,OAAO,CAAC,cAAc,QAAQ,YAAY,MAAM;AAAA,IACxD;AAAA,EACA;AACkB,mBAAA,aAAG;AACrB,WAAS,SAAS+F,MAAK;AACnB,WAAO;AAAA,MACH,MAAMA,KAAI;AAAA,MACV,QAAQA,KAAI;AAAA,IACpB;AAAA,EACA;ACrOO,WAAS,cAAc,IAAiB;AAC7C,gBAAY,IAAI,sBAAsB;AAAA,EACxC;AAEA,WAAS,uBAAuB,IAAe;AAEvC,UAAAzF,UAAS,GAAG,IAAI,KAAK;AAC3B,UAAM,aAAa6K,qBAAmB,GAAG,KAAK7K,QAAO,MAAM,SAAS;AAGzD,eAAA,QAAA,EAAU,QAAQ,CAAa,cAAA;AAExC,YAAM,OAAO,GAAG,IAAI,QAAQ,UAAU,GAAG;AACzC,YAAM,SAAS,KAAK,KAAK,KAAK,KAAK;AACnC,UAAI,OAAO,SAASA,QAAO,MAAM,aAAa,KAAK,KAAK,KAAK,QAAQ,CAAC,EAAE,MAAM,OAAO;AACnF;AAAA,MACF;AAGI,UAAAA,QAAO,MAAM,SAASiK,mCAAiC,MAAMjK,QAAO,MAAM,KAAK,GAAG;AACpF;AAAA,MACF;AASA,UAAI,cAAc;AACZ,YAAA,cAAc,UAAU,KAAK;AACnC,YAAMP,QAAO;AACb,YAAM,KAAK,YAAY;AACvB,kBAAY,aAAaA,OAAM,IAAI,CAACE,OAAuB,QAAgB;AACzE,YAAIA,MAAK,QAAQ;AACA,yBAAAA,MAAK,KAAM,MAAM,KAAK,IAAIF,OAAM,GAAG,IAAI,KAAK,KAAK,GAAG;AAAA,QAC1D,WAAAE,MAAK,KAAK,SAAS,cAAc;AAC3B,yBAAA;AAAA,QACjB;AAAA,SACC,CAAC;AAGA,UAAA,0BAA0B,KAAK,WAAW,GAAG;AAC/C;AAAA,MACF;AAGM,YAAA,QAAQgE,QAAM,WAAW;AAG/B,YAAM,YAA0B,CAAA;AAChC,eAAS5E,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACjC,YAAA,MAAMA,IAAG,SAAS,YAAY;AAChC,cAAIA,OAAM,MAAM,SAAS,KACrB,MAAMA,KAAI,GAAG,SAAS,gBACtB,MAAMA,KAAI,GAAG,UAAU,MAAM;AACrB,sBAAA,KAAK,MAAMA,GAAE;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAIG,gBAAA,QAAA,EACA,QAAQ,CAAY,aAAA;AAEnB,YAAI,GAAG,IAAI,QAAQ,UAAU,MAAM,SAAS,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG;AACxE,gBAAA,YAAYiB,QAAO,KAAK,IAAI;AAClC,gBAAM,eAAe,UAAU,MAAM,SAAS,MAAM,KAAK;AACtD,aAAA,OAAO,cAAc,SAAS;AAAA,QACnC;AAAA,MAAA,CACD;AAAA,IAAA,CACJ;AAAA,EACH;AC1EA,QAAMoE,WAAS,IAAI,UAAkB,qBAAqB;AAEnD,WAAS,0BAA0B;AACxC,WAAO,IAAI,OAAe;AAAA,MACxB,KAAKA;AAAAA,MACL,OAAO;AAAA,QACL,KAAK,SAAS,OAAoB;AAChC,iBAAO,eAAe,KAAK;AAAA,QAC7B;AAAA,QAEA,MAAM,IAAiB,OAAe,UAAuB,UAAuB;AAC5E,gBAAA,eAAe,CAAC,EAAE;AAGpB,cAAA,CAAC,GAAG,YAAY;AACX,mBAAA;AAAA,UAAA,WAGE,CAAC,4BAA4B,YAAY,GAAG;AACrD,mBAAO,eAAe,QAAQ;AAAA,UAAA,WAGrB,uBAAuB,cAAc,UAAU,UAAU,kBAAkB,GAAG;AACvF,mBAAO,eAAe,QAAQ;AAAA,UAAA,OAI3B;AACI,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAEO,WAAS,SAAS,OAAoB;AACpC,WAAAA,SAAO,SAAS,KAAK;AAAA,EAC9B;AAEgB,WAAA,SAAS,OAAoB,OAAe;AAE1D,UAAMpE,UAAS,MAAM;AAGjB,QAAA,CAACA,QAAO,MAAM,eAAe;AAC/B;AAAA,IACF;AAGA,UAAM,KAAK,MAAM;AAGjB,UAAM,eAAe,MAAM,QAAQ,MAAM,KAAK;AAC9C,UAAM,YAAY;AAAA,UAAa;AAAA;AAGzB,UAAA,YAAY,kBAAkB,GAAG,GAAG;AAC1C,QAAI,aAAa;AACjB,eAAW,QAAQ,WAAW;AAC5B,YAAM,aAAa,KAAK,KAAK,YAAY,MAAM,uBAAuB;AACtE,UAAI,YAAY;AACd,cAAM,kBAAkB,KAAK,KAAK,YAAY,QAAQ,yBAAyB,SAAS;AAClF,cAAA,cAAcA,QAAO,MAAM,cAAc,cAAc,CAAI,GAAAA,QAAO,KAAK,eAAe,CAAC;AAC7F,YAAI,aAAa;AACZ,aAAA,iBAAiB,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,UAAU,WAAW;AAC3D,uBAAA;AACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,CAAC,YAAY;AACf,YAAM,WAAWA,QAAO,KAAK,MAAM,cAAc;AACjD,YAAM,WAAWA,QAAO,MAAM,cAAc,OAAO,CAAA,GAAI,QAAQ;AAC5D,SAAA,OAAO,GAAG,QAAQ;AAAA,IACvB;AAGO,WAAA;AAAA,EACT;ACtEA,QAAM,yBAAyB;AAE/B,QAAMoE,WAAS,IAAI,UAAyB,SAAS;AAErD,QAAMoT,cAAuB;AAAA,IAC3B,mBAAmB,MAAM;AAChB,aAAA;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,QAAQ,CAAC,OAAoB;AACrB,kBAAA,8BAAc;AACd,kBAAA,iBAAiB,CAAC7X,UAA0B;AAC5C,kBAAA,cAAcA,KAAI,GAAG;AACnB,oBAAAA,MAAK,MAAM,kBAAkB,MAAM;AAC9B,yBAAA;AAAA,gBAAA,WACE,QAAQ,IAAIA,MAAK,MAAM,aAAa,GAAG;AACzC,yBAAA;AAAA,gBAAA,OACF;AACG,0BAAA,IAAIA,MAAK,MAAM,aAAa;AAC7B,yBAAA;AAAA,gBACT;AAAA,cAAA,OACK;AACE,uBAAA;AAAA,cACT;AAAA,YAAA;AAEF,kBAAM,sBAAsB,sBAAsB,GAAG,KAAK,cAAc;AACxE,gCAAoB,QAAQ,CAAa,cAAA;AACvC,iBAAG,cAAc,UAAU,KAAK,UAAU,KAAK,MAAM;AAAA,gBACnD,GAAG,UAAU,KAAK;AAAA,gBAClB,eAAe,OAAO;AAAA,cAAA,CACvB;AACE,iBAAA,QAAQ,wBAAwB,IAAI;AAAA,YAAA,CACxC;AAAA,UACH;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,IAEA,UAAU,MAAM;AACP,aAAA;AAAA,QACL,IAAI,mBAAmB,gBAAgB,iBAAiB,CAAC,cAAc,GAAG,mBAAmB,QAAQ,SAAS,CAAC;AAAA,QAC/G,IAAI,mBAAmB,gBAAgB,qBAAqB,CAAC,YAAY,GAAG,mBAAmB,YAAY,SAAS,CAAC;AAAA,QACrH,IAAI,mBAAmB,gBAAgB,eAAe,CAAI,GAAA,mBAAmB,QAAQ,OAAO,CAAC;AAAA,QAC7F,IAAI,mBAAmB,gBAAgB,mBAAmB,CAAI,GAAA,mBAAmB,YAAY,OAAO,CAAC;AAAA,MAAA;AAAA,IAEzG;AAAA,IAEA,SAAS,MAAM;AACN,aAAA;AAAA,QACL,IAAI,OAAsB;AAAA,UACxB,KAAKyE;AAAAA,UAGL,OAAO;AAAA,YACL,MAAM,CAAC,SAAS,UAAuB;AACrC,qBAAO,cAAc,KAAK;AAAA,YAC5B;AAAA,YACA,OAAO,CAAC,IAAiB,OAAsB,UAAuB,aAA0B;AAC9F,kBAAI,0BAA0B,CAAC,EAAE,GAAG,UAAU,QAAQ,GAAG;AACvD,uBAAO,cAAc,QAAQ;AAAA,cAAA,OACxB;AACE,uBAAA;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IAEL;AAAA,EACF;AAEgB,WAAA,mBAAmB,KAA0B,YAAiC;AACrF,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AACtF,UAAI,YAAY,MAAM;AAChB,YAAA,UAAU,mBAAmB,KAAK;AACtC,YAAI,QAAQ,YAAY;AACtB,oBAAU,QAAQ;QACpB;AACM,cAAAxD,UAAS,QAAQ,KAAK,CAAe,gBAAA;AAEzC,gBAAM,UAAU,YAAY,KAAK,SAAS,MAAM,OAAO,MAAM;AACzD,cAAA,aAAa,eAAe,UAAU;AACjC,mBAAA;AAAA,UACT;AAEA,cAAI,QAAQ,QAAQ;AACX,mBAAA,YAAY,MAAM,MAAM,UAAU;AAAA,UAAA,OACpC;AACL,mBAAO,YAAY,MAAM,MAAM,UAAU,OAAO;AAAA,UAClD;AAAA,QAAA,CACD;AACD,YAAIA,SAAQ;AACI,wBAAA,MAAMA,QAAO,KAAK,KAAK;AAAA,QACvC;AAAA,MACF;AACO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,cAAc,OAAmC;AAExD,UAAMI,OAAM,MAAM;AACZ,UAAA,eAAe,sBAAsBA,MAAK,aAAa;AACzD,QAAA,CAAC,aAAa,QAAQ;AACxB,aAAO;IACT;AAGM,UAAA,+BAAe;AAGf,UAAA,oBAAoB,CAAC,aAA0B,iBAAyB;AACtE,YAAA,WAAW,YAAY,KAAK,KAAK;AAGnC,UAAA,eAAe,SAAS,IAAI,QAAQ;AACxC,UAAI,iBAAiB,QAAW;AACf,uBAAA;AAAA,MACjB;AACA,YAAM,eAAe,eAAe;AAC3B,eAAA,IAAI,UAAU,YAAY;AAEnC,YAAM,OAAO;AAAA,QACX,eAAe,YAAY,KAAK,MAAM;AAAA,QACtC,MAAM,YAAY,KAAK,KAAK;AAAA,QAC5B,OAAO,YAAY,KAAK,MAAM,SAAS;AAAA,QACvC,OAAO,YAAY,KAAK,KAAK,KAAK,OAAO,YAAY,KAAK,KAAK,OAAO,YAAY,KAAK;AAAA,QACvF,UAAU;AAAA,QACV,UAAU,CAAC;AAAA,MAAA;AAIb,UAAI,YAAY,KAAK,KAAK,SAAS,aAAa;AAC9C,cAAM,QAAQ,uBAAuB,YAAY,KAAK,WAAW;AACjE,YAAI,OAAO;AACT,eAAK,QAAQ,MAAM;AAAA,QACrB;AAAA,MACF;AACO,aAAA;AAAA,IAAA;AAIT,UAAM,kBAAqC;AAAA,MACzC,eAAe;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,MACP,UAAU,CAAC;AAAA,IAAA;AAEb,UAAM,aAAkC,CAAA;AACxC,eAAW,KAAK,eAAe;AAC/B,UAAMwB,OAAM,MAAM,WAAW,WAAW,SAAS;AACjD,iBAAa,QAAQ,CAAe,gBAAA;AAElC,YAAM,cAAc,kBAAkB,aAAaA,KAAI,EAAE,QAAQ,CAAC;AAGlE,aAAO,YAAY,SAASA,KAAI,EAAE,OAAO;AACvC,mBAAW,IAAI;AAAA,MACjB;AAGI,MAAAA,OAAE,SAAS,KAAK,WAAW;AAG3B,UAAA,YAAY,SAAS,WAAW;AAClC,mBAAW,KAAK,WAAW;AAAA,MAC7B;AAAA,IAAA,CACD;AAGD,WAAO,gBAAgB;AAAA,EACzB;AAEA,WAAS,yBAAyB,cAAsC;AACtE,WAAO,aAAa,KAAK,CAAA,OAAM,GAAG,QAAQ,sBAAsB,CAAC;AAAA,EACnE;AAEA,WAAS,0BAA0B,cAAsC,UAAuB,UAAuB;AACrH,WACE,aAAa,KAAK,CAAM,OAAA,GAAG,QAAQ,uBAAuB,CAAC,KAC3D,yBAAyB,YAAY,KACrC,uBAAuB,cAAc,UAAU,UAAU,aAAa;AAAA,EAE1E;AAEO,WAAS,WAAW,OAAmC;AACrD,WAAA4B,SAAO,SAAS,KAAK;AAAA,EAC9B;ACxMA,QAAMtF,QAAM,IAAI,UAAyB,aAAa;AAEtD,QAAM,mBAAmB,OAAsB;AAAA,IAc7C,cAAc;AACN,YAAA;AAAA,QAAA,KACJA;AAAAA,QACA,OAAO;AAAA,UACL,MAAM,MAAM;AACV,mBAAO,cAAc;AAAA,UACvB;AAAA,UACA,OAAO,CAAC,OAAoB;AAC1B,gBAAI,KAAK,YAAY,oBAAoB,EAAE,GAAG;AACrC,qBAAA,KAAK,kBAAkB,EAAE;AAAA,YAAA,OAC3B;AACL,qBAAO,cAAc;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,QACA,MAAM,OAAO;AAAA,UACX,QAAQ,CAAC,SAAqB;AAE5B,iBAAK,oBAAoB;AAGzB,gBAAI,KAAK,iBAAiB,KAAK,KAAK,GAAG;AAChC,mBAAA,uBAAuB,MAAM,IAAI;AAAA,YACxC;AAAA,UACF;AAAA,QAAA;AAAA,QAEF,OAAO;AAAA,UACL,aAAa,CAAC,UAAuB;AAC5B,mBAAAA,MAAI,SAAS,KAAK;AAAA,UAC3B;AAAA,QACF;AAAA,MAAA,CACD;AA5CK,kCAAO;AACP,qCAAuB,CAAA;AACvB,sCAAW;AAGX,2CAAkC;AAGlC,4CAAwC;AAGxC,iDAAsB;AAAA,IAkC9B;AAAA,IAEO,KAAK,MAAc,SAAsB;AACvC,aAAA,CAAC,OAAoB,aAAyC;AACnE,YAAI,UAAU;AACP,eAAA,OAAO,CAAC,QAAQ,QAAQ,KAAK,QAAQ,yBAAyB,CAACoxB,YAAmB;AAC9E,mBAAA,SAAS,SAASA,QAAO,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AAAA,UACrE,CAAA,IAAI;AACL,eAAK,UAAU;AACV,eAAA,cAAc,OAAO,QAAQ;AAAA,QACpC;AACO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEO,WAAW,OAAoB;AACpC,aAAOpxB,MAAI,SAAS,KAAK,EAAG,OAAO;AAAA,IACrC;AAAA,IAEO,cAAc;AACZ,aAAA,CAAC,OAAoB,aAAyC;AACnE,cAAM,cAA4BA,MAAI,SAAS,KAAK,EAAG,KAAK,CAAC;AACzD,YAAA,YAAY,WAAW,GAAG;AACrB,iBAAA;AAAA,QACT;AAEA,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AACZ,eAAA,aAAa,IAAI,YAAY,EAAE;AACpC,eAAK,kBAAkB,MAAM;AAC3B,qBAAS,EAAE;AAAA,UAAA,CACZ;AAAA,QACH;AAEO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEO,gBAAgB;AACd,aAAA,KAAK,WAAW,KAAK;AAAA,IAC9B;AAAA,IAEO,WAAW,iBAAiB,MAAM;AAChC,aAAA,CAAC,OAAoB,aAAyC;AAC7D,cAAA,eAAe,MAAM,IAAI,YAAY,MAAM,UAAU,MAAM,MAAM,UAAU,EAAE;AACnF,cAAM,aAAa,iBACf,KAAK,YAAY,YAAY,IAC3B,MAAM,UAAU,KAAK,IACrB,MAAM,UAAU,KAClB,MAAM,UAAU;AAEd,cAAA,gBAAgBA,MAAI,SAAS,KAAK;AACpC,YAAA,cAA4B,cAAc,KAAK,UAAU;AACzD,YAAA,YAAY,WAAW,GAAG;AAExB,cAAA,KAAK,QAAQ,MAAM;AACf,kBAAA,WAAW,KAAK,YAAY,YAAY,IAAI,MAAM,UAAU,OAAO,IAAI,MAAM,UAAU;AAC/E,0BAAA,cAAc,KAAK,GAAG,QAAQ;AACxC,gBAAA,YAAY,WAAW,GAAG;AACrB,qBAAA;AAAA,YACT;AAAA,UAAA,OAEK;AACE,mBAAA;AAAA,UACT;AAAA,QACF;AAEA,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AACZ,eAAA,aAAa,IAAI,YAAY,EAAE;AACpC,eAAK,kBAAkB,MAAM;AAC3B,qBAAS,EAAE;AAAA,UAAA,CACZ;AAAA,QACH;AACO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEO,iBAAiB;AACf,aAAA,CAAC,OAAoB,aAAyC;AAE7D,cAAA,eAAe,MAAM,IAAI,YAAY,MAAM,UAAU,MAAM,MAAM,UAAU,EAAE;AAC7E,cAAA,WAAW,KAAK,YAAY,YAAY,IAAI,MAAM,UAAU,OAAO,IAAI,MAAM,UAAU;AAGvF,cAAA,gBAAgBA,MAAI,SAAS,KAAK;AACxC,YAAI,cAA4B,cAAc,KAAK,GAAG,QAAQ;AAC1D,YAAA,YAAY,WAAW,GAAG;AAExB,cAAA,KAAK,QAAQ,MAAM;AACf,kBAAA,aAAa,KAAK,YAAY,YAAY,IAAI,MAAM,UAAU,KAAK,IAAI,MAAM,UAAU;AAC/E,0BAAA,cAAc,KAAK,UAAU;AACvC,gBAAA,YAAY,WAAW,GAAG;AACrB,qBAAA;AAAA,YACT;AAAA,UAAA,OAEK;AACE,mBAAA;AAAA,UACT;AAAA,QACF;AAGA,YAAI,UAAU;AAEZ,gBAAM,aAAa,YAAY,OAAO,CAAC,gBAAgB,mBAAmB;AACpE,gBAAA,eAAe,OAAO,eAAe,MAAM;AACtC,qBAAA;AAAA,YAAA,OACF;AACE,qBAAA;AAAA,YACT;AAAA,UAAA,CACD;AAED,gBAAM,KAAK,MAAM;AACZ,eAAA,aAAa,IAAI,UAAU;AAChC,eAAK,kBAAkB,MAAM;AAC3B,qBAAS,EAAE;AAAA,UAAA,CACZ;AAAA,QACH;AACO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEO,QAAQY,OAAc;AACpB,aAAA,CAAC,OAAoB,aAAyC;AACnE,YAAI,CAAC,KAAK,iBAAiB,KAAK,GAAG;AAC1B,iBAAA;AAAA,QACT;AAEA,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AACjB,gBAAM,iBAAiB,GAAG,UAAU,MAAM,YAAY,GAAG,UAAU,GAAG;AAClE,cAAAA,MAAK,SAAS,GAAG;AACnB,eAAG,qBAAqB,MAAM,OAAO,KAAKA,OAAM,cAAc,GAAG,KAAK;AAAA,UAAA,OACjE;AACL,eAAG,gBAAgB;AAAA,UACrB;AAEA,eAAK,kBAAkB,MAAM;AAC3B,qBAAS,EAAE;AAAA,UAAA,CACZ;AAAA,QACH;AAEO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEO,WAAWA,OAAc;AACvB,aAAA,CAAC,OAAoB,aAAyC;AAEnE,YAAI,WAAW;AAEX,YAAA,CAAC,KAAK,WAAW;AACZ,iBAAA;AAAA,QACT;AAEA,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AAEX,gBAAA,gBAAgBZ,MAAI,SAAS,KAAK;AAElC,gBAAA,cAA4B,cAAc,KAAK,CAAC;AACtD,sBAAY,QAAQ,CAAc,eAAA;AAChC,kBAAMW,QAAO,GAAG,QAAQ,IAAI,WAAW,IAAI;AAC3C,kBAAM,KAAK,GAAG,QAAQ,IAAI,WAAW,EAAE;AACpC,eAAA,WAAWC,OAAMD,OAAM,EAAE;AAChB,wBAAA;AAAA,UAAA,CACb;AACD,eAAK,kBAAkB,MAAM;AAC3B,qBAAS,EAAE;AAAA,UAAA,CACZ;AAAA,QACH;AAEO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEO,QAAQ;AACN,aAAA,CAAC,OAAoB,aAAyC;AACnE,YAAI,UAAU;AACZ,eAAK,OAAO;AACZ,eAAK,UAAU;AACV,eAAA,cAAc,OAAO,QAAQ;AAAA,QACpC;AACO,eAAA;AAAA,MAAA;AAAA,IAEX;AAAA,IAEQ,cAAc,OAAoB,UAAqC;AAC7E,WAAK,kBAAkB,MAAM;AAC3B,cAAM,KAAK,MAAM;AACd,WAAA,QAAQ,0BAA0B,KAAK;AAC1C,iBAAS,EAAE;AAAA,MAAA,CACZ;AAAA,IACH;AAAA,IAEQ,kBAAkB,IAAgC;AAEpD,UAAA,CAAC,KAAK,WAAW;AACnB,eAAO,cAAc;AAAA,MACvB;AAGA,YAAM,cAA4B,CAAA;AAG5B,YAAAqX,aAAY,gBAAgB,GAAG,GAAG;AAExC,MAAAA,WAAU,QAAQ,CAAY,aAAA;AACtB,cAAAzV,UAAS,KAAK;AACpB,YAAI,CAACA,SAAQ;AACX;AAAA,QACF;AAEI,YAAAF;AAEJ,eAAQA,KAAIE,QAAO,KAAK,SAAS,IAAI,GAAI;AACnC,cAAAF,GAAE,OAAO,IAAI;AACf;AAAA,UACF;AACM,gBAAA1B,QAAO,SAAS,MAAM0B,GAAE;AAC9B,gBAAM,KAAK,SAAS,MAAMA,GAAE,QAAQA,GAAE,GAAG;AACnC,gBAAA,UAAU,CAAC,cAAc;AAC/B,cAAI1B,UAAS,GAAG,UAAU,QAAQ,OAAO,GAAG,UAAU,IAAI;AACxD,oBAAQ,KAAK,kBAAkB;AAAA,UACjC;AACA,sBAAY,KAAK,WAAW,OAAOA,OAAM,IAAI,EAAE,OAAO,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;AAAA,QAC5E;AAAA,MAAA,CACD;AAGM,aAAA,YAAY,SAAS,cAAc,OAAO,GAAG,KAAK,WAAW,IAAI,cAAc;AAAA,IACxF;AAAA,IAEQ,kBAAkBP,IAAe;AACvC,WAAK,WAAW;AACd,MAAAA;AACF,WAAK,WAAW;AAAA,IAClB;AAAA,IAEQ,aAAa,IAAiB,YAAwB;AAC5D,YAAM,YAAY,IAAI,cAAc,GAAG,IAAI,QAAQ,WAAW,IAAI,GAAG,GAAG,IAAI,QAAQ,WAAW,EAAE,CAAC;AAClG,aAAO,GAAG,aAAa,SAAS,EAAE,eAAe;AAAA,IACnD;AAAA,IAEQ,iBAAiB,OAAoB;AACvC,UAAA,KAAK,WAAW;AACZ,cAAA,eAAe,MAAM,IAAI,YAAY,MAAM,UAAU,MAAM,MAAM,UAAU,EAAE;AAC5E,eAAA,KAAK,YAAY,YAAY;AAAA,MAAA,OAC/B;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAAA,IAQQ,uBAAuB,MAAkB;AAE/C,WAAK,oBAAoB;AAGzB,WAAK,iBAAiB,IAAI,iBAAiB,CAAC,YAA8B;AACxE,YAAI,gBAAiC;AAG/B,cAAA,eAAe,CAACS,UAAwB;AACxC,cAAAA,MAAK,aAAaA,MAAK,cAAc;AAChC,mBAAA;AAAA,UACT;AACA,gBAAM,MAAMA;AACL,iBAAA,IAAI,UAAU,SAAS,cAAc,KACrC,IAAI,UAAU,SAAS,kBAAkB;AAAA,QAAA;AAI1C,gBAAA,QAAQ,CAAC,aAAa;AAC5B,kBAAO,SAAS,MAAM;AAAA,YACpB,KAAK;AAEM,uBAAA,WAAW,QAAQ,CAACA,UAAS;AAChC,oBAAA,aAAaA,KAAI,GAAG;AACN,kCAAAA;AAAA,gBAClB;AAAA,cAAA,CACD;AACD;AAAA,YACF,KAAK;AAGC,kBAAA,aAAa,SAAS,MAAM,GAAG;AACjC,gCAAgB,SAAS;AAAA,cAC3B;AACA;AAAA,UACJ;AAAA,QAAA,CACD;AAKD,YAAI,eAAe;AACZ,eAAA,uBAAuB,MAAM,aAAa;AAC/C,eAAK,oBAAoB;AAAA,QAC3B;AAAA,MAAA,CACD;AAED,YAAM,cAAc,gBAAgB,KAAK,MAAM,SAAS;AACxD,UAAI,aAAa;AACf,cAAM,YAAY,KAAK,QAAQ,YAAY,GAAG;AAGzC,aAAA,eAAe,QAAQ,WAAW;AAAA,UACrC,SAAS;AAAA,UACT,WAAW;AAAA,UACX,iBAAiB,CAAC,OAAO;AAAA,QAAA,CAC1B;AAMI,aAAA,sBAAsB,OAAO,WAAW,MAAM;AACjD,eAAK,oBAAoB;AAAA,WACxB,GAAI;AAAA,MACT;AAAA,IACF;AAAA,IAKQ,sBAAsB;AAExB,UAAA,KAAK,mBAAmB,MAAM;AAChC,aAAK,eAAe;AACpB,aAAK,iBAAiB;AAAA,MACxB;AAGI,UAAA,KAAK,wBAAwB,GAAG;AAC3B,eAAA,aAAa,KAAK,mBAAmB;AAC5C,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF;AAAA,IAQQ,uBAAuB,MAAkB,eAAiC;;AAChF,YAAM,cAAc,gBAAgB,KAAK,MAAM,SAAS;AACxD,UAAI,aAAa;AACf,cAAM,YAAY,KAAK,QAAQ,YAAY,GAAG;AAE9C,YAAI,kBAAkB,MAAM;AAEV,0BAAA,UAAU,cAAc,gCAAgC;AAAA,QAC1E;AAEA,YAAI,kBAAkB,QAAQ,kBAAkB,KAAK,eAAe;AAKlE,eAAK,uBAAuB,IAAI;AAChC;AAAA,QACF;AAEA,aAAK,gBAAgB;AAGrB,YAAI,SAAS;AAOb,YAAI,gBAAgB;AACb,iBAAA,mBAAc,iBAAd,mBAA4B,mBAAkB,WAAW;AAC9D,oBAAU,cAAc;AACxB,gBAAM,aAAa,cAAc;AACjC,cAAI,eAAe,MAAM;AACvB;AAAA,UACF;AACgB,0BAAA;AAAA,QAClB;AAIA,cAAM,WAAW,UAAU,eAAe,sBAAsB,SAAS,CAAC;AACjE,iBAAA,OAAO,eAAe,KAAK,MAAM;AAAA,MAC5C;AAAA,IACF;AAAA,IAEQ,UAAU;AACT,aAAA,KAAK,KAAK,SAAS;AAAA,IAC5B;AAAA,IAEQ,YAAYD,OAAc;AAC5B,UAAA,KAAK,WAAW;AACZ,cAAAqW,SAAQ,KAAK;AACnB,YAAIA,QAAO;AACF,iBAAAA,OAAM,KAAKrW,KAAI;AAAA,QAAA,OACjB;AACE,iBAAA;AAAA,QACT;AAAA,MAAA,OACK;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEQ,YAAY;AACd,UAAA;AACK,eAAA,IAAI,OAAO,KAAK,MAAM,CAAC,KAAK,QAAQ,gBAAgB,QAAQ,IAAI;AAAA,MAAA,QACvE;AACO,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,QAAM8X,cAAuB;AAAA,IAC3B,SAAS,MAAM;AACN,aAAA,CAAC,IAAI,WAAA,CAAY;AAAA,IAC1B;AAAA,EACF;AAQgB,WAAA,KAAK,MAAkB,MAAc,SAA+B;AAC3E,WAAA,WAAW,IAAI,EAAE,KAAK,MAAM,OAAO,EAAE,KAAK,OAAO,KAAK,QAAQ;AAAA,EACvE;AAEO,WAAS,WAAW,MAA0B;AACnD,WAAO,WAAW,IAAI,EAAE,WAAW,KAAK,KAAK;AAAA,EAC/C;AAEO,WAAS,YAAY,MAA2B;AAC9C,WAAA,WAAW,IAAI,EAAE,YAAA,EAAc,KAAK,OAAO,KAAK,QAAQ;AAAA,EACjE;AAEO,WAAS,cAAc,MAA2B;AAChD,WAAA,WAAW,IAAI,EAAE,cAAA,EAAgB,KAAK,OAAO,KAAK,QAAQ;AAAA,EACnE;AAEO,WAAS,WAAW,MAA2B;AAC7C,WAAA,WAAW,IAAI,EAAE,WAAA,EAAa,KAAK,OAAO,KAAK,QAAQ;AAAA,EAChE;AAEO,WAAS,eAAe,MAA2B;AACjD,WAAA,WAAW,IAAI,EAAE,eAAA,EAAiB,KAAK,OAAO,KAAK,QAAQ;AAAA,EACpE;AAEgB,WAAA,QAAQ,MAAkB9X,OAAuB;AACxD,WAAA,WAAW,IAAI,EAAE,QAAQA,KAAI,EAAE,KAAK,OAAO,KAAK,QAAQ;AAAA,EACjE;AAEgB,WAAA,WAAW,MAAkBA,OAAc;AAClD,WAAA,WAAW,IAAI,EAAE,WAAWA,KAAI,EAAE,KAAK,OAAO,KAAK,QAAQ;AAAA,EACpE;AAEO,WAAS,MAAM,MAA2B;AACxC,WAAA,WAAW,IAAI,EAAE,MAAA,EAAQ,KAAK,OAAO,KAAK,QAAQ;AAAA,EAC3D;AAEO,WAAS,gBAAgB,OAAsD;AAC7E,WAAAZ,MAAI,SAAS,KAAK;AAAA,EAC3B;AAEA,WAAS,WAAW,MAA8B;AACzC,WAAAA,MAAI,IAAI,KAAK,KAAK;AAAA,EAC3B;AC/gBO,QAAM,+BAA+B;AACrC,QAAM,+BAA+B;AACrC,QAAM,0BAA0B;AA+FhC,WAAS,2BAA2B,WAAsB;AAC/D,UAAMkB,UAAS,UAAU,MAAM,OAAO,KAAK;AAGvC,QAAA,CAAC,UAAU,OAAO;AACb,aAAA;AAAA,IACT;AAGA,QAAI,CAAC,cAAc,WAAWA,QAAO,MAAM,IAAI,GAAG;AACzC,aAAA;AAAA,IACT;AAGA,QAAIA,QAAO,MAAM,QAAQ,CAAC,CAACA,QAAO,MAAM,KAAK,QAAQ,UAAU,MAAM,MAAO,CAAA,GAAG;AACtE,aAAA;AAAA,IACT;AAGA,QAAI,UAAU,MAAM,OAAO,KAAK,KAAK,MAAM;AAClC,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACT;AAKgB,WAAA,sBAAsB,SAA4B,aAAiC;AAEjG,QAAI,CAAC,aAAa;AACT,aAAA;AAAA,IACT;AAGA,QAAI,YAAY,SAAS,YAAY,UAAU,QAAQ,OAAO;AACrD,aAAA;AAAA,IAAA,OACF;AAEE,aAAA,YAAY,OAAO,QAAQ;AAAA,IACpC;AAAA,EACF;AAEgB,WAAA,6BAA6B,IAAiB,KAAa,aAAuC;AAE7G,OAAA,aAAa,IAAI,cAAc,GAAG,IAAI,QAAQ,GAAG,GAAG,GAAG,UAAU,KAAK,CAAC;AAG1E,QAAI,uBAAuBmwB,QAAiB;AAE1C,YAAM,QAAQ,GAAG,UAAU,MAAM,MAAM;AAGpC,SAAA,qBAAqB,aAAa,KAAK;AAGpC,YAAA,QAAQ,UAAQ,GAAG,QAAQ,KAAK,GAAG,UAAU,IAAI,IAAI,CAAC;AAAA,IAAA,OACvD;AACL,SAAG,WAAW,WAAW;AAAA,IAC3B;AAGG,OAAA,QAAQ,8BAA8B,IAAI;AAAA,EAC/C;MCzKA,gBAAkB,WAAW;AAEzB,aAASpF,UAASjT,IAAE;AAAC,aAAOA;AAAA,IAAE;AAE9B,aAAS,WAAWA,IAAE;AAAC,aAAO,OAAOA,OAAK,WAAWA,GAAE,gBAAgBA;AAAA,IAAE;AAEzE,aAAS,oBAAoB5Y,IAAG,KAAI;AAChC,YAAM,OAAO,QAAO,WAAW,MAAM,EAAC,WAAU,IAAG;AAEnD,UAAG,OAAOA,MAAI,YAAW;AACrB,YAAIE,QAAOF;AAEX,QAAAA,KAAI,SAAS+uB,KAAG;AAAC,iBAAO,CAAC,CAACA,IAAG7uB,SAAQ6uB,IAAG7uB,SAAQ;AAAA,QAAG;AAAA,MACtD;AACD,UAAGF,GAAE,WAAW,GAAG;AAEf,YAAIkxB,MAAKlxB;AACT,YAAI,aAAa,IAAI,aAAW,aAAW6rB;AAC3C,YAAIlpB,OAAM,IAAI,OAAO,SAASosB,KAAG,IAAI;AAAC,iBAAOA,MAAK,KAAK,KAAKA,MAAK,KAAK,IAAI;AAAA,QAAE;AAC5E,QAAA/uB,KAAI,SAAS+uB,KAAG,IAAI;AAAC,iBAAOpsB,KAAI,WAAWuuB,IAAGnC,GAAE,CAAC,GAAG,WAAWmC,IAAG,EAAE,CAAC,CAAC;AAAA,QAAE;AAAA,MAC3E;AACD,YAAM,aAAa,EAAC,MAAK,IAAI,MAAK,GAAE;AACpC,UAAG,IAAI,aAAa;AAAY,eAAO,SAASnC,KAAG,IAAG;AAAC,iBAAO,CAAC/uB,GAAE+uB,KAAG,EAAE;AAAA,QAAC;AACvE,aAAO/uB;AAAA,IACV;AAKD,aAASmxB,IAAG,MAAM,KAAK;AAInB,UAAI1rB,KAAK,OAAO,QAAS,cAAc,CAAC,KAAK,UAAW,OAAO;AAC/D,UAAIC,KAAI,oBAAoB,MAAM,GAAG;AACrC,UAAI1F,KAAIyF,KAAI,SAAStF,IAAGC,IAAG;AACX,eAAOqF,GAAEtF,IAAEC,EAAC,KAAKsF,GAAEvF,IAAEC,EAAC;AAAA,MACzB,IACDsF;AACZ,MAAA1F,GAAE,SAASmxB;AACX,aAAOnxB;AAAA,IACV;AACD,IAAAmxB,IAAG,UAAUA;AACb,WAAOA;AAAA,EACX,EAAI;ACxBQ,MAAA,oCAAAC,qBAAL;AACLA,qBAAA,YAAS;AACTA,qBAAA,cAAW;AACXA,qBAAA,WAAQ;AACRA,qBAAA,UAAO;AACPA,qBAAA,gBAAa;AACbA,qBAAA,aAAU;AACVA,qBAAA,YAAS;AACTA,qBAAA,YAAS;AARCA,WAAAA;AAAAA,EAAA,GAAA,mBAAA,CAAA,CAAA;AAWZ,QAAM,uBAAuB,IAAI,IAAoB,OAAO,KAAK,eAAe,EAAE,IAAI,CAACxxB,MAAKL,WAAU,CAACK,MAAKL,MAAK,CAAC,CAAC;AAEnG,WAAA,uBAAuBY,IAAeC,IAAe;AAC5D,WAAA,qBAAqB,IAAID,GAAE,KAAK,IAAK,qBAAqB,IAAIC,GAAE,KAAK;AAAA,EAC9E;AAEgB,WAAA,0BAA0BD,IAAeC,IAAe;AACtE,YAAQD,GAAE,YAAY,MAAMC,GAAE,YAAY;AAAA,EAC5C;AC/BgB,WAAA,2BAA2B,UAAoB,aAAgD,QAAuC;AACpJ,UAAMixB,aAAY,IAAI,UAAU,SAAS,OAAO,oBAAoB;AAEpE,WAAO,IAAI,OAAsB;AAAA,MAC/B,KAAKA;AAAA,MACL,OAAO;AAAA,QACL,OAAO;AACL,iBAAO,cAAc;AAAA,QACvB;AAAA,QACA,MAAM,IAAiB;AAEf,gBAAA,YAAY3mB,iBAAe,CAAAjK,UAAQA,MAAK,SAAS,YAAYA,MAAK,eAAe,CAAC,EAAE,GAAG,SAAS;AACtG,cAAI,cAAc,CAAC,UAAU,OAAO,EAAE,IAAI;AAClC,kBAAA,aAAa,sBAAsB,UAAU,MAAM,GAAG,YAAY,UAAU,IAAI,CAAC;AACvF,mBAAO,cAAc,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC;AAAA,UAAA,OAC3C;AACL,mBAAO,cAAc;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,YAAY,OAAoB;AACvB,iBAAA4wB,WAAU,SAAS,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAEgB,WAAA,sBAAsB,KAAa7wB,OAAc;AACxD,WAAA,WAAW,OAAO,KAAK,MAAM;AAClC,YAAM,cAAc,OAAO,SAAS,cAAc,MAAM;AAC5C,kBAAA,UAAU,IAAI,2BAA2B;AACrD,kBAAY,YAAYA;AACjB,aAAA;AAAA,IAAA,CACR;AAAA,EACH;AAEgB,WAAA,iCAAiC,KAAa8wB,OAAc9wB,OAAc;AACjF,WAAA,WAAW,OAAO,KAAK,MAAM;AAClC,YAAM,YAAY,OAAO,SAAS,cAAc,MAAM;AAEtD,YAAM,UAAU,OAAO,SAAS,cAAc,KAAK;AAC3C,cAAA,UAAU,IAAI,qBAAqB;AACnC,cAAA,aAAa,OAAO8wB,KAAI;AACxB,cAAA,aAAa,aAAa,OAAO;AAEzC,YAAM,UAAU,OAAO,SAAS,cAAc,MAAM;AAC5C,cAAA,UAAU,IAAI,2BAA2B;AACzC,cAAA,UAAU,IAAI,qBAAqB;AAC3C,cAAQ,YAAY9wB;AAEpB,gBAAU,YAAY,OAAO;AAC7B,gBAAU,YAAY,OAAO;AACtB,aAAA;AAAA,IAAA,CACR;AAAA,EACH;AAEgB,WAAA,4BAA4B,KAAauY,KAAcvY,OAAe;AACpF,WAAO,iCAAiC,KAAKuY,IAAG,OAAO,QAASvY,SAAQ,EAAE;AAAA,EAC5E;;AClDgB,WAAA,4BACd,eACAuY,KACiC;AAC1B,WAAA;AAAA,MACL,IAAI;AAAA,MAEJ,aAAa,sBAAsB,eAAeA,GAAE;AAAA,MAEpD,SAAS,CAACwY,gBAA6B;AACrC,eAAOA,YAAW,YAAY;AAAA,MAChC;AAAA,MAEA,QAAQ,CAAC,aAA6B,OAAoBlQ,WAAkB;AAEnE,eAAA,YACJ,OAAO,CAAY,aAAA;;AAClB,iBACEA,OAAM,WAAW,KACjB,SAAS,KAAK,cAAc,QAAQA,MAAK,MAAM,QAC/C,cAAS,aAAT,mBAAmB,KAAK,CAAA,YAAW,QAAQ,QAAQA,MAAK,MAAM;AAAA,QAAE,CAEnE,EACA,OAAO,CAAY,aAAA;AACX,iBAAA,SAAS,QAAQ,KAAK;AAAA,QAC9B,CAAA,EACA;AAAA,UACCmQ,sBAAQ,sBAAsB,EAC3B,OAAO,2BAA2B,EAAE,WAAW,OAAQ,CAAA,EACvD,OAAO,MAAM;AAAA,QAAA;AAAA,MAEtB;AAAA,MAEA,QAAQ,MAAkB,KAAaD,aAAiC;AAEtE,cAAM,oBAAoB,MAAM;AACxB,gBAAA,KAAK,KAAK,MAAM;AACtB,aAAG,YAAY,KAAK,KAAK,MAAM,UAAU,IAAI;AAC1C,aAAA,QAAQ,0BAA0B,KAAK;AAC1C,eAAK,SAAS,EAAE;AAAA,QAAA;AAIlB,YAAIA,aAAY;AAEI;AAGlB,UAAAA,YAAW,QAAQ,KAAK,OAAO,KAAK,UAAU,IAAI;AAGlD,cAAIA,YAAW,iBAAiB;AACxB,kBAAA,KAAK,KAAK,MAAM;AACtB3oB,+BAAiB,GAAG,UAAU,OAAO2oB,YAAW,eAAe,EAAE,EAAE;AAChE,eAAA,QAAQ,0BAA0B,KAAK;AAC1C,iBAAK,SAAS,EAAE;AAAA,UAClB;AAAA,QAAA,OAIK;AACa;QACpB;AACA,eAAO,QAAQ;MACjB;AAAA,MAEA,MAAM;AAAA,QACJ,WAAW;AAAA,QACX,KAAK,aAAW,QAAQ;AAAA,QACxB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,MACd;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,mBAAmB;AAEzB,WAAS,sBAAsB,eAA+BxY,KAAc;AACnE,WAAA,CAACvY,OAAc,YAA8E;AAC5F,YAAAwB,SAAQxB,MAAK,MAAM,gBAAgB;AACzC,UAAIwB,QAAO;AAGT,YAAIA,OAAM,UAAU,KAAK,CAAC,0BAA0B,QAAQ,SAAS,GAAG;AAC/D,iBAAA;AAAA,QACT;AAGM,cAAA,QAAQA,OAAM,GAAG,YAAY;AAGnC,cAAM,cACJ,MAAM,WAAW,IACb,cAAc,OAAO,QAAQ,KAAK;AAAA,UAChC,sBAAsB,QAAQ,UAAU,MAAM+W,IAAG,QAAQ,cAAc,oBAAoB,CAAC;AAAA,QAAA,CAC7F,IACD;AAGC,eAAA;AAAA,UAEL,KAAK,QAAQ,UAAU,OAAO/W,OAAM,GAAG;AAAA,UAGvC,OAAO;AAAA,UAGP,aAAa,MAAM;AACV,mBAAA,QAAQ,QAAQ,aAAa;AAAA,UACtC;AAAA,UAGA;AAAA,QAAA;AAAA,MACF,OACK;AACE,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,mBAA2C,CAAY,aAAA;AAEzD,WAAA,sBAAA,cAAC,WAAM,WAAW,4BAAA,uCACf,SACC,MAAA,sBAAA,cAAC,YACE,sBAAA,cAAA,MAAA,EAAG,WAAW,sBACb,GAAA,sBAAA,cAAC,SAAI,WAAW,yBAAyB,KAAK,SAAS,SAAS,KAAI,IAAI,WAAU,QAAO,CAAA,CAC3F,GACC,sBAAA,cAAA,MAAA,0CACE,OAAI,EAAA,WAAW,sDAAqD,SAAS,IAAK,GAClF,sBAAA,cAAA,OAAA,EAAI,WAAW,0DAA4D,GAAA,SAAS,WAAY,CACnG,CACF,CACF,CACF;AAAA,EAEJ;AAEA,WAAS,0BAA0B,WAAsB;AACvD,UAAMlB,UAAS,UAAU,MAAM,OAAO,KAAK;AAC3C,WAAOA,QAAO,MAAM,YAAY,QAAQ,UAAU,MAAM,OAAO;AAAA,EACjE;AClJO,WAAS,iBAAiB;AACxB,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,cAAc;AAAA,YACd,UAAU,CAAC,EAAE,KAAK,8BAA8B;AAAA,YAChD,QAAwB;AACtB,qBAAO,CAAC,QAAQ,EAAE,OAAO,cAAe,CAAA;AAAA,YAC1C;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS,CAAC;AAAA,YACV,QAAQ;AAAA,cACN,UAAU;AAAA,cACV,OAAO,CAAC,QAAsB,OAAa,WAAqB;AAC9D,uBAAO,aAAa,MAAM;AAAA,cAC5B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEgB,WAAA,oBACd,eACA,iBACAiY,KACW;AACJ,WAAA;AAAA,MACL,UAAU,MAAM,CAAC,IAAI,kBAAkB,eAAe,CAAC;AAAA,MACvD,oBAAoB,MAA0C,CAAC,4BAA4B,eAAeA,GAAE,CAAC;AAAA,IAAA;AAAA,EAEjH;AAEA,QAAM,0BAA0B,mBAAmB;AAAA,IACjD,YAAY,YAAiC;AAC3C;AAAA,QACE,gBAAgB;AAAA,QAChB,CAAC,OAAO;AAAA,QACR,CAAC,OAAoB,aAAyC;AAE5D,cAAI,CAAC,2BAA2B,MAAM,SAAS,GAAG;AACzC,mBAAA;AAAA,UACT;AAGA,cAAI,aAAa,OAAO,MAAM,OAAO,MAAM,WAAW,GAAG;AAChD,mBAAA;AAAA,UACT;AAGI,cAAA,CAAC,WAAW,KAAK,GAAG;AACf,mBAAA;AAAA,UACT;AAEA,cAAI,UAAU;AACZ,kBAAM,OAAO,MAAM,OAAO,MAAM,YAAY;AAC5C,kBAAMtY,QAAO,MAAM,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC;AAC1C,kBAAM,KAAK,MAAM;AACd,eAAA,qBAAqBA,OAAM,KAAK;AACnC,qBAAS,EAAE;AAAA,UACb;AAEO,iBAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;;ACjGA,MAAI,IAAIiH,SAAAA;AACmC;AACzC,iBAAqB,EAAE;AACD,MAAE;AAAA,EAC1B;ACeO,QAAM,QAA8B,CAAS,UAAA;AAClD,UAAM,YAAY,CAAC,YAAY,iBAAiB,wBAAwB,wBAAwB,qBAAqB,EAClH,OAAO,MAAM,WAAW,CAAA,CAAE,EAC1B,KAAK,GAAG;AAEX,UAAM,QAA6B;AAAA,MACjC,GAAG,MAAM;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,IAAA;AAIR,WAAA,sBAAA,cAAC,SAAI,WAAsB,OAAc,iBAAiB,OAAO,gCAAgC,KAC9F,GAAA,MAAM,QACT;AAAA,EAEJ;;ACFA,QAAM,mBAAmB;AAkBlB,WAAS,wBAAyC;AACvD,UAAM,QAAQ,OAAO,SAAS,cAAc,KAAK;AACjD,UAAM,MAAM,WAAW;AACvB,UAAM,MAAM,SAAS;AACd,WAAA,SAAS,KAAK,YAAY,KAAK;AAC/B,WAAA;AAAA,MACL,IAAI;AAAA,MACJ,MAAM,WAAW,KAAK;AAAA,IAAA;AAAA,EAE1B;AAEgB,WAAA,sBAAsB,MAAkB,OAAqC,OAAwB;AAE7G,UAAApH,QAAO,oBAAoB,KAAK;AAChC,UAAA,iBAAiB,8BAA8B,MAAM,MAAM,KAAKA,MAAK,OAAOA,MAAK,MAAM;AAC7F,gBAAY,MAAM,IAAI,CAAC,GAAG,cAAc;AAGxC,UAAM,KAAK,OAAO,sBAAA,cAAC,iBAAiB,EAAA,GAAG,MAAO,CAAA,CAAE;AAAA,EAClD;AAEO,WAAS,uBAAuB,OAAwB;AAC7D,UAAM,KAAK;AACX,UAAM,GAAG;EACX;AAEA,QAAM,kBAA0D,CAAS,UAAA;AAEvE,UAAM,UAAU,CAAC,qBAAqB,EAAE,OAAO,MAAM,GAAG,MAAM,SAAA,IAAa,CAAC,cAAc,IAAI,CAAE,CAAA;AAChG,+CACG,OAAM,EAAA,QAAA,uCACJ,gBAAgB,EAAA,GAAG,OAAO,CAC7B;AAAA,EAEJ;AAEA,QAAM,iBAAyD,CAAS,UAAA;AAChE,UAAAA,QAAO,oBAAoB,KAAK;AACtC,UAAM,aAAa,MAAM,QAAQ,KAAK,UAAU;AAG1C,UAAA,eAAe,MAAM,OAAuB,IAAI;AACtDmxB,UAAAA,QAAAA,UAAU,MAAM;AACd,YAAM,cAAc,aAAa;AACjC,UAAI,aAAa;AACT,cAAA,OAAO,YAAY,uBAAuB,6BAA6B;AAC7E,cAAM,cAAc,KAAK,KAAK,MAAM,aAAa;AACjD,YAAI,aAAa;AACf,gBAAM,WAAW,UAAU,eAAe,sBAAsB,WAAW,CAAC;AAC5E,mBAAS,SAAS,WAA0B;AAAA,QAC9C;AAAA,MACF;AAAA,IAAA,GACC,CAAC,MAAM,aAAa,CAAC;AAGlB,UAAA,mBAAmB,CAAClyB,QAAe,YAAqC;AAC5E,aAAO,CAAC,UAA4B;AAClC,cAAM,eAAe;AACrB,cAAM,gBAAgB;AACtB,gBAAQA,MAAK;AAAA,MAAA;AAAA,IACf;AAIF,UAAM,cAAc,MAAM,QAAQ,KAAK,aAAa,wBAAwB;AAE5E,UAAM,UAAU,CAAC,oBAAoB,EAAE,OAAO,MAAM,QAAQ,KAAK,aAAa,CAAC,+BAA+B,IAAI,CAAE,CAAA;AAGlH,WAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAW,QAAQ,KAAK,GAAG;AAAA,QAC3B,OAAO,EAAE,OAAOe,MAAK,QAAQ,MAAM,QAAQA,MAAK,SAAS,KAAK;AAAA,MAAA;AAAA,MAE9D,sBAAA,cAAC,SACE,MAAA,kBAAkB,MAAM,SAAS,MAAM,YAAY,QAAQ,KAAK,GAChE,sBAAA,cAAA,SAAA,MACE,YAAY,OAAO,YAAY,gBAAgB,GAC/C,MAAM,YAAY,WAAW,IAAI,qBAAqB,KAAK,IAAI,IAClE,CACF;AAAA,IAAA;AAAA,EAGN;AAEA,WAAS,kBAAkB,SAA4B,iBAAyB,OAA4B;AACtG,QAAA,QAAQ,KAAK,QAAQ;AACvB,YAAM,mBAAmB,QAAQ,KAAK,SAAS,QAAQ,KAAK,WAAW;AACvE,YAAM,cAAc,EAAE,SAAS,qDAAkB,SAAS,GAAG;AAE7D,UAAI,kBAAkB;AACpB,cAAM,SAAS,MAAM,cAAc,iBAAiB,WAAW,WAAW;AAExE,eAAA,sBAAA,cAAC,SACC,MAAA,sBAAA,cAAC,MACC,MAAA,sBAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO,EAAE,YAAY,iBAAiB,SAAS,KAAK;AAAA,YACpD,SAAS,MAAM,QAAQ,KAAK,aAAa,kBAAkB;AAAA,UAAA;AAAA,UAE1D;AAAA,QAEL,CAAA,CACF;AAAA,MAAA,OAEG;AACE,eAAA;AAAA,MACT;AAAA,IAAA,OACK;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAIA,WAAS,oBAAoB,OAA4B,YAAoB,kBAAoC;AAC/G,WAAO,MAAM,YAAY,IAAI,CAACixB,aAAYhyB,WAAU;AAClD,YAAM,EAAE,KAAAK,MAAK,SAAS,mBAAmB,OAAO2xB,aAAYhyB,MAAK;AAE/D,aAAA,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAK;AAAA,UACA,OAAO,EAAE,YAAY,aAAa,KAAK;AAAA,UACvC,WAAW;AAAA,UACX,SAAS,iBAAiBL,QAAO,MAAM,OAAO;AAAA,UAC9C,aAAa,iBAAiBA,QAAO,MAAM,OAAO;AAAA,QAAA;AAAA,QAEjD;AAAA,MAAA;AAAA,IACH,CAEH;AAAA,EACH;AAEA,WAAS,sBAAsB,OAA4B,YAAoB,kBAAoC;AAC3G,UAAA,aAAa,qBAAqB,KAAK;AAC7C,WACG,sBAAA,cAAA,MAAA,EAAG,OAAO,EAAE,YAAY,aAAa,KAAK,EAAA,GACxC,MAAM,YAAY,IAAI,CAACgyB,aAAYhyB,WAAU;AACtC,YAAA,EAAE,SAAS,mBAAmB,OAAOgyB,aAAYhyB,QAAO,WAAWA,SAAQ,gBAAgB;AAC1F,aAAA;AAAA,IACR,CAAA,CACH;AAAA,EAEJ;AAEA,WAAS,mBACP,OAEAgyB,aACAhyB,QACA,OACA,kBACA;AAGA,UAAMK,OAAM,MAAM,QAAQ,KAAK,IAAI2xB,WAAU;AAC7C,UAAM,YAAY,OAAOA,gBAAgB,WAAWA,cAAa,CAAA;AAC3D,UAAA,OAAO,MAAM,cAAc,MAAM,QAAQ,KAAK,WAAW,EAAE,GAAG,WAAW,KAAA3xB,KAAK,CAAA;AACpF,UAAM,YAAY,6BAA6BL,WAAU,MAAM,gBAAgB,2BAA2B;AAC1G,UAAM,OACJ,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAK;AAAA,QACA,OAAO,QAAQ,EAAE,OAAO,QAAQ,KAAS,IAAA;AAAA,QACzC;AAAA,QACA,SAAS,mBAAmB,iBAAiBL,QAAO,MAAM,OAAO,IAAI;AAAA,QACrE,aAAa,mBAAmB,iBAAiBA,QAAO,MAAM,OAAO,IAAI;AAAA,MAAA;AAAA,MAExE;AAAA,IAAA;AAGE,WAAA,EAAE,KAAAK,MAAK;EAChB;AAEA,WAAS,qBAAqB,OAA4B;AAEtD,WAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,OAAO,EAAE,YAAY,mBAAmB,KAAK;AAAA,MAAA;AAAA,MAE7C,sBAAA,cAAC,MAAI,MAAA,MAAM,SAAU;AAAA,IAAA;AAAA,EAG3B;AAEA,WAAS,oBAAoB,OAA4B;AAEvD,UAAM,qBAAqB;AAG3B,QAAI,EAAE,QAAQ,aAAa,6BAA6B,IAAI,MAAM,QAAQ;AAC1E,UAAM,EAAE,aAAa,8BAA8B,QAAQ,wBAAwB,IAAI,MAAM,QAAQ;AAGrG,UAAM,aAAa;AACL,kBAAA;AAGd,QAAI,eAAe;AACf,QAAA,MAAM,QAAQ,KAAK,QAAQ;AAC7B,YAAM,mBAAmB,MAAM,QAAQ,KAAK,OAAO;AACnD,UAAI,kBAAkB;AACpB,uBAAe,iBAAiB,SAAS;AAAA,MAC3C;AAAA,IACF;AAGI,QAAA,MAAM,QAAQ,KAAK,YAAY;AAEjC,YAAM,gBAAgB;AACtB,YAAM,eAAe;AACrB,YAAM,eAAe;AACrB,YAAM,aACJ,qBAAqB,KAAK,EAAE,OAAO,CAAC,OAAO,YAAY;AAC9C,eAAA,SAAS,UAAU,eAAe;AAAA,MAAA,GACxC,CAAC,IAAI;AAEH,aAAA;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,eAAe,aAAa;AAAA,MAAA;AAAA,IACtC,OACK;AAEL,YAAM,SACJ,eACA,qBACA,KAAK,IAAI,aAAa,KAAK,IAAI,YAAY,MAAM,YAAY,MAAM,GAAG,gBAAgB;AAGjF,aAAA,EAAE,OAAO;IAClB;AAAA,EACF;AAEA,WAAS,qBAAqB,OAA4B;AACxD,UAAM,EAAE,QAAQ,wBAAwB,IAAI,MAAM,QAAQ;AAC1D,WAAO,MAAM,YAAY,IAAI,CAAC,aAAaL,WAAU;AAC/C,UAAA,MAAM,QAAQ,KAAK,sBAAsB;AAC3C,eAAO,MAAM,QAAQ,KAAK,qBAAqBA,WAAU;AAAA,MAAA,OACpD;AACE,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EACH;AAEA,WAAS,8BAA8B,MAAkB,KAAa,OAAe,QAAgB;AAEnG,UAAM,wBAAwB;AAC9B,UAAM,8BAA8B;AAG9B,UAAA,kBAAkB,KAAK,YAAY,GAAG;AAExC,QAAA+D,OAAM,gBAAgB,SAAS;AACnC,QAAI,OAAO,gBAAgB;AAG3B,QAAIA,OAAM,SAAS,yBAAyB,OAAO,aAAa;AAC9D,MAAAA,OAAM,KAAK,IAAI,gBAAgB,MAAM,SAAS,6BAA6B,2BAA2B;AAAA,IACxG;AAGA,QAAI,OAAO,QAAQ,yBAAyB,OAAO,YAAY;AAC7D,YAAM,eAAe,KAAK,YAAY,KAAK,MAAM,UAAU,IAAI;AAC/D,aAAO,aAAa,QAAQ;AAAA,IAC9B;AAEO,WAAA;AAAA,MACL,MAAM,OAAO;AAAA,MACb,KAAKA,OAAM;AAAA,IAAA;AAAA,EAEf;AClRO,WAAS,oBACdgD,WACA,iBACAyS,KACA,QACA;AACO,WAAA;AAAA,MACL,SAAS,MAAM,CAAC,IAAI,iBAAiBzS,WAAU,iBAAiByS,KAAI,MAAM,CAAC;AAAA,IAAA;AAAA,EAE/E;AAEA,QAAMnZ,QAAM,IAAI,UAA2B,YAAY;AAEvD,QAAM,yBAAyB,OAAwB;AAAA,IA4BrD,YACE0G,WACA,iBACAyS,KACA,QACA;AACM,YAAA;AAAA,QAAA,KACJnZ;AAAAA,QACA,OAAO;AAAA,UACL,MAAM,OAAO,CAAA;AAAA,UACb,OAAO,CAAC,IAAiB,cAA+B;;AAElD,gBAAA,CAAC,KAAK,MAAM;AACd,qBAAO;YACT;AAGA,gBAAI,CAAC,GAAG,cAAc,CAAC,GAAG,kBAAkB,GAAG,cAAc;AAC3D,qBAAO;YACT;AAGA,gBAAI,CAAC,2BAA2B,GAAG,SAAS,GAAG;AAC7C,qBAAO;YACT;AAGM,kBAAA,aAAa,2BAA2B,GAAG,SAAS;AAGtD,gBAAA,WAAW,WAAW,GAAG;AAC3B,qBAAO;YACT;AAEA,kBAAM,UAAU,GAAG,QAAQ,iBAAiB,MAAM;AAGlD,uBAAW,WAAW0G,WAAU;AAE1B,kBAAA,QAAQ,YAAY,SAAS,QAAQ,UAAU,QAAQ,QAAQ,EAAE,IAAI,gBAAgB,EAAE,IAAI;AAC7F,sBAAM,SAAS,QAAQ,YAAY,YAAY,EAAE;AACjD,oBAAI,QAAQ;AAEN,sBAAA;AAIA,sBAAA,QAAQ,SAAO,eAAU,YAAV,mBAAmB,OAClC,OAAO,UAAQ,eAAU,WAAV,mBAAkB,QACjC,QAAQ,QAAQ;AAClB,gCAAY,UAAU,OAAO;AAAA,kBAAA,WAGpB,GAAG,QAAQ,4BAA4B,KACvC,sBAAsB,SAAS,UAAU,OAAO,GAAG;AAC5D;AAAA,kBACF;AAGA,yBAAO,EAAE,SAAS,QAAQ,WAAW,QAAQ;AAAA,gBAC/C;AAAA,cACF;AAAA,YACF;AAGA,mBAAO;UACT;AAAA,QACF;AAAA,QAEA,MAAM,OAAO;AAAA,UACX,QAAQ,CAAC,SAAqB;AAEvB,iBAAA;AAGL,iBAAK,OAAO;AAGP,iBAAA,kBAAkB,MAAM,IAAI;AAAA,UACnC;AAAA,UAEA,SAAS,MAAM;AAEb,iBAAK,kBAAkB;AACvB,mBAAO,SAAS,oBAAoB,WAAW,KAAK,gBAAgB;AAGpE,iBAAK,iBAAiB;AAAA,UACxB;AAAA,QAAA;AAAA,QAGF,OAAO;AAAA,UACL,aAAa,CAAC,UAAuB;;AAC7B,kBAAA,cAAc1G,MAAI,SAAS,KAAK;AACtC,oBAAO,gDAAa,WAAb,mBAAqB;AAAA,UAC9B;AAAA,UAEA,iBAAiB;AAAA,YACf,SAAS,CAAC,MAAkB,UAAiB;AAC3C,oBAAM,UAAU;AAEhB,kBAAI,UAAU;AAGR,oBAAA,aAAa,KAAK,aAAa,eAAe;AAC9C,oBAAA,cAAc,KAAK,aAAa,cAAc;AAEhD,kBAAA,KAAK,qBAAqB;AAC5B,wBAAQ,QAAQ,KAAK;AAAA,kBACnB,KAAK;AACH,yBAAK,mBAAmB;AACd,8BAAA;AACV;AAAA,kBACF,KAAK;AAAA,kBACL,KAAK;AACE,yBAAA,iBAAiB,MAAM,KAAK,aAAa;AACpC,8BAAA;AACV;AAAA,kBACF,KAAK;AACH,yBAAK,gBAAgB,KAAK,IAAI,KAAK,gBAAgB,GAAG,CAAC;AACvD,yBAAK,kBAAkB,IAAI;AACjB,8BAAA;AACV;AAAA,kBACF,KAAK;AACE,yBAAA,gBAAgB,KAAK,IAAI,KAAK,gBAAgB,GAAG,KAAK,YAAY,SAAS,CAAC;AACjF,yBAAK,kBAAkB,IAAI;AACjB,8BAAA;AACV;AAAA,kBACF,KAAK;AACE,yBAAA,gBAAgB,KAAK,IAAI,KAAK,gBAAgB,KAAK,sBAAsB,CAAC;AAC/E,yBAAK,kBAAkB,IAAI;AACjB,8BAAA;AACV;AAAA,kBACF,KAAK;AACH,yBAAK,gBAAgB,KAAK;AAAA,sBACxB,KAAK,gBAAgB,KAAK,mBAAmB;AAAA,sBAC7C,KAAK,YAAY,SAAS;AAAA,oBAAA;AAE5B,yBAAK,kBAAkB,IAAI;AACjB,8BAAA;AACV;AAAA,kBACF,KAAK;AACE,yBAAA,gBAAgB,KAAK,YAAY,SAAS;AAC/C,yBAAK,kBAAkB,IAAI;AACjB,8BAAA;AACV;AAAA,kBACF,KAAK;AACH,yBAAK,gBAAgB;AACrB,yBAAK,kBAAkB,IAAI;AACjB,8BAAA;AACV;AAAA,gBACJ;AAAA,cACF;AAGA,kBAAI,SAAS;AACX,sBAAM,eAAe;AACrB,sBAAM,gBAAgB;AAAA,cACxB;AAGO,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AA/Lc;AAGT,kCAA0B;AAG1B,6CAA0C;AAQ1C,qCAAU;AACV,4CAA4B,CAAA;AAC5B,yCAAyB,CAAA;AACzB,wCAAa;AACb,2CAAgB;AAGhB,6CAAkB,IAAI;AAGb;AA0Kf,WAAK,KAAKmZ;AAGV,WAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,WAAK,oBAAoB,OAAO,UAAU,aAAa,KAAK,gBAAgB;AAC5E,aAAO,SAAS,iBAAiB,WAAW,KAAK,gBAAgB;AAAA,IACnE;AAAA,IAEQ,kBAAkB,MAAkB,gBAAyB;AACnE,YAAM,QAAQnZ,MAAI,SAAS,KAAK,KAAK;AAEjC,WAAA,+BAAO,aAAW,+BAAO,SAAQ;AAGnC,cAAM,iBAAiB,KAAK;AAK5B,cAAM,wBAAwB,YAAY;AAExC,gBAAM,cAAc,MAAM,MAAM,OAAQ,YAAY,KAAK,OAAO,EAAE,SAAS,MAAM,YAAY,KAAM,CAAA;AAGnG,cAAI,CAAC,MAAM,WAAW,CAAC,MAAM,QAAQ;AACnC;AAAA,UACF;AAGM,gBAAA,oBAAoB,CAAC,uBAAkC;;AAEtD,iBAAA,kBAAkB,oBAAoB,CAAC,GAAC,WAAM,YAAN,mBAAe,KAAK,aAAY,cAAc;AAG3F,gBAAI,MAAM,WAAW,MAAM,UAAU,KAAK,YAAY,gBAAgB;AAEpE,oBAAM,uBAAuB,MAAM,QAAQ,SACvC,MAAM,QAAQ,OAAO,KAAK,gBAAgB,KAAK,OAAO,MAAM,OAAO,KAAK,IACxE;AACJ,kBAAI,sBAAsB;AACnB,qBAAA,wBAAwB,sBAAsB,CAAC,CAAC,MAAM,QAAQ,KAAK,YAAY,cAAc;AAAA,cACpG;AAEA,mBAAK,kBAAkB,IAAI;AAAA,YAC7B;AAAA,UAAA;AAIE,cAAA,MAAM,QAAQ,WAAW,GAAG;AAC9B,8BAAkB,WAAW;AAAA,UAAA,OACxB;AACL,kBAAM,mBAAmB;AACzB,8BAAkB,iBAAiB,KAAK;AAClC,kBAAA,kBAAkB,OAAO,YAAY,MAAM;AAE3C,kBAAA,KAAK,YAAY,gBAAgB;AACnC,8BAAc,eAAe;AAAA,cAAA,OACxB;AAEC,sBAAA,SAAS,iBAAiB;AAChC,oBAAI,QAAQ;AACV,gCAAc,eAAe;AAC7B,oCAAkB,MAAM;AAAA,gBAC1B;AAAA,cACF;AAAA,eACC,GAAG;AAAA,UACR;AAAA,QAAA;AAIF,YAAI,MAAM,aAAa,MAAM,QAAQ,QAAQ;AACtC,eAAA,gBAAgB,QAAQ,YAAY;AAEvC,gBAAI,MAAM,WAAW,MAAM,UAAU,KAAK,YAAY,gBAAgB;AAC9D,oBAAA,sBAAsB,MAAM,QAAQ;AAAA,gBACxC,KAAK;AAAA,gBACL,KAAK;AAAA,gBACL,MAAM,OAAO;AAAA,gBACb,MAAM;AAAA,cAAA;AAIR,kBAAI,qBAAqB;AAClB,qBAAA,wBAAwB,qBAAqB,CAAC,CAAC,MAAM,QAAQ,KAAK,YAAY,cAAc;AACjG,qBAAK,kBAAkB,IAAI;AAAA,cAAA,OAItB;AACL,sBAAM,sBAAsB;AAAA,cAC9B;AAAA,YACF;AAAA,UAAA,CACD;AAAA,QAAA,OACI;AAEA,eAAA,gBAAgB,QAAQ,qBAAqB;AAAA,QACpD;AAAA,MAAA,OACK;AAEL,aAAK,iBAAiB;AAAA,MACxB;AAAA,IACF;AAAA,IAEQ,kBAAkB,MAAkB;AAC1C,YAAM,QAAQA,MAAI,SAAS,KAAK,KAAK;AAEjC,UAAA,SAAS,MAAM,YAAY,KAAK,YAAY,SAAS,KAAK,CAAC,MAAM,QAAQ,KAAK,gBAAgB;AAChG,cAAM,QAAQ;AAAA,UACZ,SAAS,MAAM;AAAA,UACf,KAAK,MAAM,OAAQ,OAAO,MAAM,OAAQ,UAAU;AAAA,UAClD,aAAa,KAAK;AAAA,UAClB,eAAe,KAAK;AAAA,UACpB,WAAW,KAAK,GAAG,QAAQ,cAAc,YAAY;AAAA,UACrD,SAAS,CAACL,WAAkB;AACrB,iBAAA,iBAAiB,MAAMA,MAAK;AAAA,UACnC;AAAA,UACA,SAAS,CAACA,WAAkB;AAC1B,iBAAK,gBAAgBA;AACrB,iBAAK,kBAAkB,IAAI;AAAA,UAC7B;AAAA,UACA,IAAI,KAAK;AAAA,QAAA;AAIP,YAAA,KAAK,oBAAoB,MAAM;AACjC,eAAK,kBAAkB;QACzB;AAGsB,8BAAA,MAAM,OAAO,KAAK,eAAe;AAAA,MAAA,OAClD;AAEL,aAAK,oBAAoB;AAAA,MAC3B;AAAA,IACF;AAAA,IAEA,MAAc,iBAAiB,MAAkBA,QAAe;AAE9D,MAAAA,SAAQA,UAAS,KAAK;AAChB,YAAAgyB,cAAa,KAAK,YAAYhyB;AAEpC,YAAM,QAAQK,MAAI,SAAS,KAAK,KAAK;AACjC,UAAA,SAAS,MAAM,SAAS;AAE1B,cAAM,SAAS,MAAM;AAGjB,YAAA,MAAM,QAAQ,SAAS;AAEnB,gBAAA,MAAM,QAAQ,QAAQ,MAAM,OAAO,KAAK,KAAK,YAAYL,OAAM;AAAA,QAAA,WAG5D,MAAM,QAAQ,aAAa;AAE9B,gBAAA,cAAc,MAAM,QAAQ,YAAY,KAAK,MAAM,QAAQ,KAAK,YAAYA,OAAM;AACxF,cAAI,aAAa;AACT,kBAAA,KAAK,KAAK,MAAM;AACO,yCAAA,IAAI,OAAO,KAAK,WAAW;AACxD,iBAAK,SAAS,EAAE;AAAA,UAClB;AAAA,QACF;AAEI,YAAA,CAAC,MAAM,QAAQ,WAAW,CAAC,MAAM,QAAQ,QAAQgyB,WAAU,GAAG;AAChE,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AACA,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAGA,MAAc,qBAAqB;AAIjC,UAAI,KAAK,MAAM;AACb,cAAM,QAAQ3xB,MAAI,SAAS,KAAK,KAAK,KAAK;AACtC,aAAA,+BAAO,WAAU,MAAM,SAAS;AAC9B,cAAA,MAAM,QAAQ,SAAS;AACnB,kBAAA,MAAM,QAAQ,QAAQ,KAAK,MAAM,MAAM,OAAO,KAAK,IAAI;AAAA,UAAA,WACpD,MAAM,QAAQ,aAAa;AACpC,kBAAM,QAAQ,YAAY,KAAK,KAAK,MAAM,QAAQ,IAAI;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAEA,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEQ,mBAAmB;AACzB,WAAK,kBAAkB,CAAA,GAAI,OAAO,IAAI;AACtC,WAAK,oBAAoB;AAAA,IAC3B;AAAA,IAEQ,sBAAsB;AAC5B,UAAI,KAAK,iBAAiB;AACxB,+BAAuB,KAAK,eAAe;AAC3C,aAAK,kBAAkB;AAAA,MACzB;AAAA,IACF;AAAA,IAEQ,oBAAoB;AACnB,aAAA,CAAC,CAAC,KAAK;AAAA,IAChB;AAAA,IAEQ,kBAAkB,aAAwB,YAAqB,gBAAyB;AAC9F,WAAK,iBAAiB;AACjB,WAAA,wBAAwB,aAAa,YAAY,cAAc;AAAA,IACtE;AAAA,IAEQ,wBAAwB,aAAwB,YAAqB,gBAAyB;AACpG,WAAK,cAAc;AACd,WAAA,aAAa,CAAC,CAAC;AAGpB,UAAI,kBAAkB,KAAK,gBAAgB,KAAK,YAAY,SAAS,GAAG;AACtE,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA,IAEQ,qBAAqB;;AAC3B,UAAI,KAAK,MAAM;AACb,cAAM,QAAQA,MAAI,SAAS,KAAK,KAAK,KAAK;AACnC,iBAAA,oCAAO,YAAP,mBAAgB,KAAK,eAAc;AAAA,MAAA,OACrC;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAIA,WAAS,2BAA2B,WAAsB,YAAY,KAAK;AACnE,UAAA,EAAE,MAAU,IAAA;AAClB,WAAO,MAAM,OAAO;AAAA,MAClB,KAAK,IAAI,GAAG,MAAM,eAAe,SAAS;AAAA,MAC1C,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;ACvdO,QAAM,cAAc,MAAM;AAC1B,QAAM,YAAY,CAACkC,SAAyBA,KAAI,WAAW;AAE3D,WAAS,SACd,OACA,OACA,KACA4vB,KACA,UACkB;AAElB,QAAI,UAAU,IAAI;AAChB,cAAQ,YAAY;AAAA,IACtB;AACA,QAAI,QAAQ,IAAI;AACR,YAAA,UAAU,MAAM,GAAG;AAAA,IAC3B;AAGA,UAAM,WAAW,cAAc,OAAO,OAAOA,IAAG,iBAAiB;AACjE,UAAM,SAAS,YAAY,OAAO,KAAKA,IAAG,iBAAiB;AAE3D,UAAM,QAA2B,CAAA;AACjC,QAAI,aAAa;AACjB,WAAO,cAAc,QAAQ;AAE3B,mBAAa,cAAc,OAAO,YAAYA,IAAG,iBAAiB;AAClE,UAAI,cAAc,QAAQ;AACxB;AAAA,MACF;AAGA,YAAM,aAAa,YAAY,OAAO,YAAYA,IAAG,iBAAiB;AACtE,UAAI,eAAe,YAAY;AAC7B;AAAA,MACF;AAGA,UAAI,CAAC,YAAY,MAAM,KAAK,YAAY,YAAY,QAAQ,GAAG;AAC7D,cAAM,WAAW,MAAM,IAAI,YAAY,YAAY,UAAU;AACvD,cAAA;AAAA,UACJ,GAAGA,IAAG,WAAW,QAAQ,EAAE,IAAI,CAAa,cAAA;AACnC,mBAAA;AAAA,cACL,OAAO,aAAa,UAAU;AAAA,cAC9B,KAAK,aAAa,UAAU;AAAA,YAAA;AAAA,UAC9B,CACD;AAAA,QAAA;AAAA,MAEL;AAGa,mBAAA;AAAA,IACf;AAGO,WAAA;AAAA,MACL,SAAS,MAAM;AACb,eAAO,MAAM,SAAS;AAAA,MACxB;AAAA,MACA,MAAM,MAAM;AACN,YAAA,MAAM,SAAS,GAAG;AACpB,iBAAO,MAAM;QAAM,OACd;AACE,iBAAA;AAAA,QACT;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,YAAY5vB,MAAsBvB,OAAc,IAAY,UAAsB;AAErF,QAAA,SAAS,KAAK,CAAY,aAAAuB,KAAI,aAAavB,OAAM,IAAI,QAAQ,CAAC,GAAG;AAC5D,aAAA;AAAA,IACT;AAGM,UAAA,QAAQuB,KAAI,QAAQvB,KAAI;AAC9B,QAAI,MAAM,OAAO,WAAW,MAAM,OAAO,KAAK,KAAK,MAAM;AAChD,aAAA;AAAA,IACT;AAGM,UAAAO,UAASgB,KAAI,KAAK;AACpB,QAAAhB,QAAO,MAAM,QAAQgB,KAAI,aAAavB,OAAM,IAAIO,QAAO,MAAM,IAAI,GAAG;AAChE,YAAAwD,SAAQ,aAAaxC,KAAI,QAAQvB,KAAI,GAAGO,QAAO,MAAM,IAAI;AAC3D,UAAAwD,UAAS,kBAAkB,KAAKxC,KAAI,YAAYwC,OAAM,MAAMA,OAAM,EAAE,CAAC,GAAG;AACnE,eAAA;AAAA,MACT;AAAA,IACF;AAGO,WAAA;AAAA,EACT;AAEgB,WAAA,cAAc,OAAoB,KAAa,YAAoC;AACjG,WAAO,MAAM,UAAU,MAAM,GAAG,GAAG;AACjC,YAAM,WAAW,OAAO,MAAM,KAAK,GAAG;AAClC,UAAA,WAAW,QAAQ,MAAM,mBAAmB;AAC9C;AAAA,MAAA,OACK;AACL;AAAA,MACF;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAEgB,WAAA,cAAc,OAAoB,KAAa,YAAoC;AAE1F,WAAA,OAAO,eAAe;AAC3B,YAAM,WAAW,OAAO,MAAM,KAAK,MAAM,CAAC;AACtC,UAAA,WAAW,QAAQ,MAAM,mBAAmB;AAC9C;AAAA,MAAA,OACK;AACL;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EACT;AAEgB,WAAA,YAAY,OAAoB,KAAa,YAAoC;AAE/F,WAAO,MAAM,UAAU,MAAM,GAAG,GAAG;AACjC,YAAM,WAAW,OAAO,MAAM,KAAK,GAAG;AAClC,UAAA,WAAW,QAAQ,MAAM,mBAAmB;AAC9C;AAAA,MAAA,OACK;AACL;AAAA,MACF;AAAA,IACF;AAGO,WAAA;AAAA,EACT;AAIgB,WAAA,OAAOxC,MAAsB,KAAa;AACxD,QAAI,MAAM,YAAY,KAAK,OAAO,UAAUA,IAAG,GAAG;AACzC,aAAA;AAAA,IAAA,OACF;AACG,cAAAA,KAAI,YAAY,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,KAAK,WAAW,CAAC;AAAA,IACtE;AAAA,EACF;AAEgB,WAAA,cAAchB,SAAgB,OAA0C;AAC/E,WAAA,MAAM,OAAO,CAAA,SAAQ,KAAK,UAAU,EAAE,IAAI,CAAQ,SAAAA,QAAO,MAAM,KAAK,KAAK;AAAA,EAClF;AAEO,WAAS,iBAAiB,MAAc;AACtC,WAAA,KAAK,QAAQ,MAAM,GAAG;AAAA,EAC/B;AC1IgB,WAAA,eACd,MACA,OACmB;AAEb,UAAAA,UAAS,KAAK,MAAM;AAGpB,UAAA,WAAW,cAAcA,SAAQ,KAAK;AAG5C,UAAM4wB,MAAK;AAGO,sBAAA,KAAK,KAAK,EAAE,aAAa;AAEpC,WAAA;AAAA,MACL,UAAU,CAAC,OAAe,QAAkC;AAC1D,eAAO,SAAS,KAAK,OAAO,OAAO,KAAKA,KAAI,QAAQ;AAAA,MACtD;AAAA,MAEA,cAAc,CAAC,QAA8B;AAC3C,eAAO,kBAAkB,KAAK,KAAK,EAAE,aAAa,GAAG;AAAA,MACvD;AAAA,MAEA,aAAa,MAAe;AACnB,eAAA;AAAA,MACT;AAAA,MAEA,cAAc,CAAC,cAA+B;AACtC,cAAA,KAAK,KAAK,MAAM;AACnB,WAAA,aAAa,cAAc,OAAO,GAAG,KAAK,UAAU,OAAO,UAAU,GAAG,CAAC;AAC5E,aAAK,SAAS,EAAE;AAAA,MAClB;AAAA,MAEA,SAAS,CAAC,cAAuC;AACzC,cAAA,OAAO,KAAK,MAAM,IAAI,YAAY,UAAU,OAAO,UAAU,GAAG;AACtE,eAAO,iBAAiB,IAAI;AAAA,MAC9B;AAAA,MAEA,kBAAkB,CAAClxB,UAAiB;AAC5B,cAAA,KAAK,KAAK,MAAM;AACtB,cAAM,iBAAiB,GAAG,UAAU,MAAM,MAAM;AAC7C,WAAA,qBAAqB,KAAK,MAAM,OAAO,KAAKA,OAAM,cAAc,GAAG,KAAK;AAC3E,aAAK,SAAS,EAAE;AAAA,MAClB;AAAA,MAEA,mBAAmB,MAAc;AACxB,eAAA,KAAK,MAAM,UAAU;AAAA,MAC9B;AAAA,MAEA,mBAAmB,MAAc;AACxB,eAAA,KAAK,MAAM,UAAU;AAAA,MAC9B;AAAA,MAEA,iBAAiB,MAAc;AACtB,eAAA,KAAK,MAAM,UAAU;AAAA,MAC9B;AAAA,MAEA,iBAAiB,MAAkB;AACjC,cAAM,aAAa,KAAK,YAAY,KAAK,MAAM,UAAU,IAAI;AAC7D,cAAM,WAAW,KAAK,YAAY,KAAK,MAAM,UAAU,EAAE;AAElD,eAAA;AAAA,UACL,GAAG,KAAK,IAAI,WAAW,MAAM,SAAS,IAAI;AAAA,UAC1C,GAAG,WAAW;AAAA,UACd,OAAO,KAAK,IAAI,WAAW,OAAO,SAAS,IAAI;AAAA,UAC/C,QAAQ,SAAS,SAAS,WAAW;AAAA,QAAA;AAAA,MAEzC;AAAA,MAEA,mBAAmB,MAAM;AACvB,uBAAe,MAAM,KAAK,MAAM,UAAU,MAAM,OAAO,QAAW,GAAG;AAAA,MACvE;AAAA,MAEA,SAAS,MAAM;AACb,0BAAkB,KAAK,KAAK,EAAE,WAAW,IAAI;AAAA,MAC/C;AAAA,IAAA;AAAA,EAEJ;AAMA,QAAM,iBAAiB,IAAI,UAAyB,qBAAqB;AAEzE,WAAS,kBAAkB,OAAoB;AACtC,WAAA,eAAe,IAAI,KAAK;AAAA,EACjC;AAEO,QAAM,0BAA0B,OAAsB;AAAA,IAI3D,cAAc;AACN,YAAA;AAAA,QACJ,KAAK;AAAA,QACL,OAAO;AAAA,UACL,MAAM,MAAM;AACV,mBAAO,cAAc;AAAA,UACvB;AAAA,UACA,OAAO,CAAC,OAAoB;AAC1B,gBAAI,KAAK,UAAU;AAEZ,mBAAA,QAAQ,QAAQ,CAAU,WAAA;AAC7B,uBAAO,YAAY,GAAG,QAAQ,IAAI,OAAO,YAAa,CAAA,CAAC;AAAA,cAAA,CACxD;AAGG,kBAAA,CAAC,GAAG,UAAU,OAAO;AAChB,uBAAA,cAAc,OAAO,GAAG,KAAK;AAAA,kBAClC,WAAW,OAAO,GAAG,UAAU,MAAM,GAAG,UAAU,IAAI,EAAE,OAAO,mBAAA,CAAoB;AAAA,gBAAA,CACpF;AAAA,cACH;AAAA,YACF;AAEA,mBAAO,cAAc;AAAA,UACvB;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,aAAa,CAAC,UAAuB;AAC5B,mBAAA,eAAe,SAAS,KAAK;AAAA,UACtC;AAAA,QACF;AAAA,MAAA,CACD;AAjCK,sCAAW;AACX,qCAA4B,CAAA;AAAA,IAiCpC;AAAA,IAEO,aAAa,KAAa;AACzB,YAAA,SAAS,IAAI,eAAe,GAAG;AAChC,WAAA,QAAQ,KAAK,MAAM;AACjB,aAAA;AAAA,IACT;AAAA,IAEO,eAAe;AACpB,WAAK,WAAW;AAAA,IAClB;AAAA,IAEO,WAAW,MAAkB;AAClC,WAAK,WAAW;AAChB,WAAK,UAAU;AAEf,UAAI,CAAC,KAAK,MAAM,UAAU,OAAO;AACzB,cAAA,KAAK,KAAK,MAAM;AACtBoI,2BAAiB,GAAG,UAAU,EAAE,EAAE,EAAE;AACpC,aAAK,SAAS,EAAE;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,eAAuC;AAAA,IAE3C,YAAY,KAAa;AADjB,iCAAM;AAEZ,WAAK,MAAM;AAAA,IACb;AAAA,IACO,cAAc;AACnB,aAAO,KAAK;AAAA,IACd;AAAA,IACO,YAAY,KAAa;AAC9B,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAEA,QAAM0P,cAAY,MAAM;AACf,WAAA;AAAA,MACL,SAAS,MAAM;AACN,eAAA,CAAC,IAAI,kBAAA,CAAmB;AAAA,MACjC;AAAA,IAAA;AAAA,EAEJ;ACvKA,QAAM,6BAA6B;AACnC,QAAM,qCAAqC;AAC3C,QAAM,sBAAsB;AAE5B,QAAM,sBAAsB,IAAI,UAAyB,0BAA0B;AAE5E,WAAS,uBACdxX,SACA,OACA,UACA,OACA,QACA;AACO,WAAA,IAAI,uBAAuB,cAAcA,SAAQ,KAAK,GAAG,UAAU,OAAO,MAAM;AAAA,EACzF;AAEO,WAAS,mBAAmB,MAAkB;AACnD,mBAAe,IAAI;AAAA,EACrB;AAEgB,WAAA,eAAe,MAAkB,MAAc;AACvD,UAAA,KAAK,KAAK,MAAM;AACnB,OAAA,QAAQ,oCAAoC,IAAI;AAChD,OAAA,QAAQ,0BAA0B,KAAK;AAC1C,SAAK,SAAS,EAAE;AAAA,EAClB;AAEA,QAAM,0BAAN,cAAqC,OAAsB;AAAA,IAQzD,YAAY,UAAsB,UAA4B,OAAsB,QAAsB;AAClG,YAAA;AAAA,QACJ,KAAK;AAAA,QACL,MAAM,CAAC,SAAqB;AAC1B,eAAK,OAAO;AACZ,iBAAO;QACT;AAAA,QACA,OAAO;AAAA,UACL,MAAM,MAAM;AACV,mBAAO,cAAc;AAAA,UACvB;AAAA,UACA,OAAO,CAAC,IAAiB,KAAoB,UAAuB,aAA0B;;AAGxF,iBAAA,UAAK,SAAL,mBAAW,YAAY;AACzB,mBAAK,iBAAiB;AAAA,YACxB;AAGA,gBAAI,CAAC,KAAK,MAAM,sBAAsB,CAAC,KAAK,gBAAgB;AAC1D,qBAAO,cAAc;AAAA,YACvB;AAGA,kBAAM4wB,MAAK,wBAAuB;AAE9B,gBAAA,GAAG,QAAQ,0BAA0B,GAAG;AAGnC,qBAAA,cAAc,OAAO,SAAS,KAAK,oBAAoB,UAAUA,KAAI,UAAU,QAAQ,CAAC;AAAA,YACtF,WAAA,GAAG,QAAQ,kCAAkC,GAAG;AAEnD,oBAAA,OAAO,GAAG,QAAQ,kCAAkC;AAGpD,oBAAA,YAAY,IAAI,KAAK,QAAW,QAAW,CAAQ,SAAA,KAAK,SAAS,IAAI;AAGpE,qBAAA,IAAI,OAAO,SAAS;AAAA,YAAA,WAClB,GAAG,YAAY;AAKxB,kBAAI,QAAQ;AAGZ,kBAAI,YAAY,UAAU,OAAO,SAAS,GAAG;AACjC,0BAAA,UAAU,SAAS,SAAS,KAAK,GAAG,QAAQ,MAAM,CAAA,CAAE;AAGhE,oBAAM,aAAkD,CAAA;AAC7C,yBAAArtB,SAAQ,GAAG,OAAO;AACvB,oBAAAA,iBAAgB,eAAeA,iBAAgB,gBAAgB;AACtD,6BAAA,KAAK,EAAE,MAAMA,MAAK,MAAM,IAAIA,MAAK,IAAI;AAAA,gBAClD;AAAA,cACF;AAGA,oBAAM,eAAe,WAAW;AAAA,gBAC9B,UAAU,QAAQ,IAAI,CAAW,YAAA,EAAE,MAAM,OAAO,OAAO,IAAI,OAAO,IAAM,EAAA;AAAA,cAAA;AAI1E,yBAAWC,UAAS,cAAc;AAChC,sBAAM,UAAU,cAAc,UAAUA,OAAM,MAAMotB,IAAG,iBAAiB;AACxE,sBAAM,QAAQ,YAAY,UAAUptB,OAAM,IAAIotB,IAAG,iBAAiB;AAClE,wBAAQ,MAAM,OAAO,MAAM,KAAK,SAAS,KAAK,CAAC;AAAA,cACjD;AAGA,sBAAQ,MAAM,IAAI,GAAG,SAAS,GAAG,GAAG;AAGpC,oBAAM,YAAY,WAAW;AAAA,gBAC3B,UAAU,QAAQ,IAAI,CAAW,YAAA,EAAE,MAAM,OAAO,OAAO,IAAI,OAAO,IAAM,EAAA;AAAA,cAAA;AAK1E,yBAAWptB,UAAS,WAAW;AAC7B,wBAAQ,MAAM;AAAA,kBACZ,GAAG;AAAA,kBAeH,oBAAoB,UAAUotB,KAAI,UAAU,UAAU,MAAMptB,OAAM,MAAMA,OAAM,EAAE;AAAA,gBAAA;AAAA,cAEpF;AAGO,qBAAA;AAAA,YAAA,WACE,GAAG,cAAc;AAK1B,kBAAI,QAAQ;AAGN,oBAAA,cAAc,MAAM,KAAK,QAAW,QAAW,CAAQ,SAAA,CAAC,CAAC,KAAK,MAAM;AAC1E,kBAAI,YAAY,QAAQ;AAEhB,sBAAA,OAAO,YAAY,GAAG,KAAK;AACjC,sBAAM,EAAE,MAAA/D,OAAM,GAAG,IAAI,YAAY;AACzB,wBAAA,MAAM,OAAO,WAAW;AAGhC,wBAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,OAAOA,OAAM,IAAI,EAAE,OAAO,oBAAoB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAAA,cACnG;AAGO,qBAAA;AAAA,YAAA,OACF;AAEE,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL,aAAa,CAAC,UAAuB;AAC5B,mBAAA,oBAAoB,SAAS,KAAK;AAAA,UAC3C;AAAA,QACF;AAAA,MAAA,CACD;AA7IK,4CAAiB;AAEjB,kCAA0B;AACjB;AA6If,WAAK,QAAQ;AAGb,YAAM,mBAAmB,OAAO,UAAU,YAAY,MAAM;AAC1D,YAAI,KAAK,MAAM;AACI;AACjB,eAAK,iBAAiB;AAGtB,gBAAMqY,KAAI,KAAK;AACf,gBAAM,WAAW,MAAM;;AACjB,iBAAA,KAAAA,GAAE,QAAF,mBAAO,aAAa;AACtB,6BAAeA,EAAC;AAAA,YAClB;AAAA,UAAA;AAKF,qBAAW,UAAU,GAAG;AAIxB,qBAAW,UAAU,GAAI;AAAA,QAC3B;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EACF;AA5KA,MAAM,yBAAN;AAME,gBANI,wBAMmB,MAAK;AAwK9B,WAAS,oBACP,OACA8Y,KACA,UACA,UACA,gBAAgB,OAChBnxB,QAAO,IACP,KAAK,IACS;AAGR,UAAA,+BAAe;AAGrB,UAAM,QAAQ,SAAS,OAAOA,OAAM,IAAImxB,KAAI,QAAQ;AAGpD,UAAM,cAA4B,CAAA;AAGlC,UAAM,eAAyB,CAAA;AAExB,WAAA,MAAM,WAAW;AAChB,YAAA,OAAO,MAAM;AACnB,YAAM,WAAW,MAAM,IAAI,YAAY,KAAK,OAAO,KAAK,GAAG;AAE3D,YAAM,SAAS,SAAS,IAAI,QAAQ,KAAK,CAAA;AACzC,aAAO,KAAK,IAAI;AACP,eAAA,IAAI,UAAU,MAAM;AAEhB,mBAAA,KAAK,iBAAiB,QAAQ,CAAC;AAAA,IAC9C;AAEM,UAAA,iBAA2B,SAAS,WAAW,YAAY;AAEjE,eAAW,iBAAiB,gBAAgB;AACpC,YAAA,SAAwC,SAAS,IAAI,aAAa;AAExE,UAAI,QAAQ;AACV,mBAAWptB,UAAS,QAAQ;AAC1B,gBAAM,QAAyB,CAAA;AAC/B,gBAAM,OAA+B;AAAA,YACnC,MAAM;AAAA,UAAA;AAEJ,cAAA,iBAAiB,MAAM,UAAU,OAAOA,OAAM,SAAS,MAAM,UAAU,QAAQA,OAAM,KAAK;AAC5F,iBAAK,SAAS;AAAA,UAAA,OACT;AACL,kBAAM,QAAQ;AAAA,UAChB;AACY,sBAAA,KAAK,WAAW,OAAOA,OAAM,OAAOA,OAAM,KAAK,OAAO,IAAI,CAAC;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EACT;AAGgB,WAAA,2BAA2B,UAA4B6U,IAA6B;AAE3F,WAAA,CAAC,MAAkB,SAAoD;AAG5E,YAAMuY,MAAK,uBAAuB;AAG5B,YAAA,aAAa,CAAClxB,OAAc,WAAyB;AAClD,eAAA;AAAA,UACL,MAAAA;AAAA,UACA,MAAM,MAAM;AACH;AACP,iBAAK,MAAM;AAAA,UACb;AAAA,QAAA;AAAA,MACF;AAII,YAAAM,UAAS,KAAK,MAAM;AAGpB,YAAA,OAAO,oBAAoB,SAAS,KAAK,KAAK,EAAG,KAAK,KAAK,KAAK,KAAK,GAAG;AAC9E,UAAI,KAAK,QAAQ;AACf,eAAO,EAAE,OAAO,MAAM,IAAI,QAA0B,CAAW,YAAA;AAE7D,gBAAM,EAAE,MAAAP,OAAM,GAAG,IAAI,KAAK;AACpB,gBAAA,OAAO,iBAAiB,KAAK,MAAM,IAAI,YAAYA,OAAM,EAAE,CAAC;AAClE,gBAAM,iBAAiB;AACvB,gBAAM,YAA8B,CAAA;AAC3B,mBAAA,eAAe,MAAM,CAAC,gBAAgC;AAEnD,sBAAA,KAAK,GAAG,YAAY,MAAM,GAAG,cAAc,EAAE,IAAI,CAAc,eAAA;AAChE,qBAAA;AAAA,gBACL,MAAM;AAAA,gBACN,MAAM,MAAM;AACJ,wBAAA,KAAK,KAAK,MAAM;AACtB,qBAAG,aAAa,cAAc,OAAO,GAAG,KAAKA,OAAM,EAAE,CAAC;AACtD,wBAAM,QAAQ,GAAG,UAAU,MAAM,MAAM;AACvC,qBAAG,qBAAqBO,QAAO,KAAK,YAAY,KAAK,GAAG,KAAK;AAC7D8H,qCAAiBrI,QAAO,WAAW,MAAM,EAAE,EAAE;AAC7C,uBAAK,SAAS,EAAE;AAChB,uBAAK,MAAM;AAAA,gBACb;AAAA,cAAA;AAAA,YAEH,CAAA,CAAC;AACF,gBAAI,UAAU,QAAQ;AACpB,wBAAU,KAAK,EAAE,WAAW,KAAM,CAAA;AAAA,YACpC;AAEU,sBAAA,KAAK,WAAW4Y,GAAE,YAAY,GAAG,MAAM,SAAS,WAAW,IAAI,CAAC,CAAC;AAC3E,sBAAU,KAAK,EAAE,WAAW,KAAM,CAAA;AACxB,sBAAA;AAAA,cACR,WAAWA,GAAE,mBAAmB,GAAG,MAAM,SAAS,gBAAgB,IAAI,CAAC;AAAA,YAAA;AAGzE,oBAAQ,SAAS;AAAA,UAAA,CAClB;AAAA,QACF,CAAA;MACH;AAGA,YAAM,WAAWuY,IAAG;AACpB,YAAMziB,MAAK,OAAO,KAAK,MAAM,KAAK,KAAK,GAAG;AACtC,UAAA,SAASA,GAAE,MAAM,gBAAgB;AACnC,cAAM1O,QAAO,cAAc,KAAK,OAAO,KAAK,KAAK,QAAQ;AACzD,cAAM,KAAK,YAAY,KAAK,OAAO,KAAK,KAAK,QAAQ;AAC/C,cAAA,OAAO,iBAAiB,KAAK,MAAM,IAAI,YAAYA,OAAM,EAAE,CAAC;AAC9D,YAAA,SAAS,cAAc,IAAI,GAAG;AACzB,iBAAA,EAAE,OAAO,YAAY;AAAA,YAC1B,WAAW,GAAG4Y,GAAE,UAAU,MAAM,SAAS,MAAM,SAAS,aAAa,IAAI,CAAC;AAAA,UAAA;QAE9E;AAAA,MACF;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAGA,WAAS,eAAe,MAAkB;AAClC,UAAA,KAAK,KAAK,MAAM;AACnB,OAAA,QAAQ,4BAA4B,IAAI;AACxC,OAAA,QAAQ,0BAA0B,KAAK;AAC1C,SAAK,SAAS,EAAE;AAAA,EAClB;;AC5XA,QAAM,sBAAsB;AAE5B,QAAMwY,eAAa;AACnB,QAAMhI,qBAAmB,OAAO,oBACL;AAG3B,QAAM,4BAA4B;AAElC,MAAAiI,cAAiB;AAAA,IACf;AAAA,IACF,YAAED;AAAAA,IACF,kBAAEhI;AAAAA,IACA;AAAA,EACF;AChBA,QAAMnb,UACJ,OAAO,YAAY,YACnB,QAAQ,OACR,QAAQ,IAAI,cACZ,cAAc,KAAK,QAAQ,IAAI,UAAU,IACvC,IAAI,SAAS,QAAQ,MAAM,UAAU,GAAG,IAAI,IAC5C,MAAM;AAAA,EAAE;AAEZ,MAAA,UAAiBA;;ACRjB,UAAM,EAAE,2BAAAqjB,2BAAyB,IAAKnqB;AACtC,UAAM8G,SAAQwH;AACd,IAAA2B,WAAUtC,kBAAiB,CAAE;AAG7B,UAAM1R,MAAKgU,SAAA,KAAa,CAAE;AAC1B,UAAMF,OAAME,SAAA,MAAc,CAAE;AAC5B,UAAMwB,KAAIxB,SAAA,IAAY,CAAE;AACxB,QAAI2C,KAAI;AAER,UAAM,cAAc,CAAC,MAAM,OAAO,aAAa;AAC7C,YAAM/a,SAAQ+a;AACd,MAAA9L,OAAM,MAAMjP,QAAO,KAAK;AACxB,MAAA4Z,GAAE,QAAQ5Z;AACV,MAAAkY,KAAIlY,UAAS;AACb,MAAAoE,IAAGpE,UAAS,IAAI,OAAO,OAAO,WAAW,MAAM,MAAS;AAAA,IACzD;AAQD,gBAAY,qBAAqB,aAAa;AAC9C,gBAAY,0BAA0B,QAAQ;AAM9C,gBAAY,wBAAwB,4BAA4B;AAKhE,gBAAY,eAAe,IAAIkY,KAAI0B,GAAE,0BACd1B,KAAI0B,GAAE,0BACN1B,KAAI0B,GAAE,qBAAqB;AAElD,gBAAY,oBAAoB,IAAI1B,KAAI0B,GAAE,+BACd1B,KAAI0B,GAAE,+BACN1B,KAAI0B,GAAE,0BAA0B;AAK5D,gBAAY,wBAAwB,MAAM1B,KAAI0B,GAAE,sBAC5C1B,KAAI0B,GAAE,wBAAwB;AAElC,gBAAY,6BAA6B,MAAM1B,KAAI0B,GAAE,2BACjD1B,KAAI0B,GAAE,wBAAwB;AAMlC,gBAAY,cAAc,QAAQ1B,KAAI0B,GAAE,8BAC/B1B,KAAI0B,GAAE,2BAA2B;AAE1C,gBAAY,mBAAmB,SAAS1B,KAAI0B,GAAE,mCACrC1B,KAAI0B,GAAE,gCAAgC;AAK/C,gBAAY,mBAAmB,eAAe;AAM9C,gBAAY,SAAS,UAAU1B,KAAI0B,GAAE,yBAC5B1B,KAAI0B,GAAE,sBAAsB;AAWrC,gBAAY,aAAa,KAAK1B,KAAI0B,GAAE,eACjC1B,KAAI0B,GAAE,eACP1B,KAAI0B,GAAE,SAAS;AAEjB,gBAAY,QAAQ,IAAI1B,KAAI0B,GAAE,aAAa;AAK3C,gBAAY,cAAc,WAAW1B,KAAI0B,GAAE,oBACxC1B,KAAI0B,GAAE,oBACP1B,KAAI0B,GAAE,SAAS;AAEjB,gBAAY,SAAS,IAAI1B,KAAI0B,GAAE,cAAc;AAE7C,gBAAY,QAAQ,cAAc;AAKlC,gBAAY,yBAAyB,GAAG1B,KAAI0B,GAAE,iCAAiC;AAC/E,gBAAY,oBAAoB,GAAG1B,KAAI0B,GAAE,4BAA4B;AAErE,gBAAY,eAAe,YAAY1B,KAAI0B,GAAE,4BAChB1B,KAAI0B,GAAE,4BACN1B,KAAI0B,GAAE,wBACV1B,KAAI0B,GAAE,gBACV1B,KAAI0B,GAAE,aACF;AAEzB,gBAAY,oBAAoB,YAAY1B,KAAI0B,GAAE,iCAChB1B,KAAI0B,GAAE,iCACN1B,KAAI0B,GAAE,6BACV1B,KAAI0B,GAAE,qBACV1B,KAAI0B,GAAE,aACF;AAE9B,gBAAY,UAAU,IAAI1B,KAAI0B,GAAE,YAAY1B,KAAI0B,GAAE,eAAe;AACjE,gBAAY,eAAe,IAAI1B,KAAI0B,GAAE,YAAY1B,KAAI0B,GAAE,oBAAoB;AAI3E,gBAAY,UAAU,GAAG,sBACC0Y,4CACIA,8CACAA,4CACF;AAC5B,gBAAY,aAAapa,KAAI0B,GAAE,SAAS,IAAI;AAI5C,gBAAY,aAAa,SAAS;AAElC,gBAAY,aAAa,SAAS1B,KAAI0B,GAAE,kBAAkB,IAAI;AAC9D,IAAAxB,SAAA,mBAA2B;AAE3B,gBAAY,SAAS,IAAIF,KAAI0B,GAAE,aAAa1B,KAAI0B,GAAE,eAAe;AACjE,gBAAY,cAAc,IAAI1B,KAAI0B,GAAE,aAAa1B,KAAI0B,GAAE,oBAAoB;AAI3E,gBAAY,aAAa,SAAS;AAElC,gBAAY,aAAa,SAAS1B,KAAI0B,GAAE,kBAAkB,IAAI;AAC9D,IAAAxB,SAAA,mBAA2B;AAE3B,gBAAY,SAAS,IAAIF,KAAI0B,GAAE,aAAa1B,KAAI0B,GAAE,eAAe;AACjE,gBAAY,cAAc,IAAI1B,KAAI0B,GAAE,aAAa1B,KAAI0B,GAAE,oBAAoB;AAG3E,gBAAY,mBAAmB,IAAI1B,KAAI0B,GAAE,aAAa1B,KAAI0B,GAAE,kBAAkB;AAC9E,gBAAY,cAAc,IAAI1B,KAAI0B,GAAE,aAAa1B,KAAI0B,GAAE,iBAAiB;AAIxE,gBAAY,kBAAkB,SAAS1B,KAAI0B,GAAE,aACrC1B,KAAI0B,GAAE,eAAe1B,KAAI0B,GAAE,iBAAiB,IAAI;AACxD,IAAAxB,SAAA,wBAAgC;AAMhC,gBAAY,eAAe,SAASF,KAAI0B,GAAE,0BAEnB1B,KAAI0B,GAAE,oBACH;AAE1B,gBAAY,oBAAoB,SAAS1B,KAAI0B,GAAE,+BAEnB1B,KAAI0B,GAAE,yBACH;AAG/B,gBAAY,QAAQ,iBAAiB;AAErC,gBAAY,QAAQ,2BAA2B;AAC/C,gBAAY,WAAW,6BAA6B;AAAA;ACnLpD,QAAM,OAAO,CAAC,qBAAqB,SAAS,KAAK;AACjD,QAAM2Y,iBAAe,aACnB,CAAC,UAAU,CAAE,IACX,OAAO,YAAY,WAAW,EAAE,OAAO,KAAM,IAC7C,KAAK,OAAO,CAAApb,OAAK,QAAQA,GAAE,EAAE,OAAO,CAACZ,IAAGY,OAAM;AAC9C,IAAAZ,GAAEY,MAAK;AACP,WAAOZ;AAAA,EACR,GAAE,EAAE;AACP,MAAA,iBAAiBgc;ACVjB,QAAM,UAAU;AAChB,QAAMC,uBAAqB,CAAC5xB,IAAGC,OAAM;AACnC,UAAM,OAAO,QAAQ,KAAKD,EAAC;AAC3B,UAAM,OAAO,QAAQ,KAAKC,EAAC;AAE3B,QAAI,QAAQ,MAAM;AAChB,MAAAD,KAAI,CAACA;AACL,MAAAC,KAAI,CAACA;AAAA,IACN;AAED,WAAOD,OAAMC,KAAI,IACZ,QAAQ,CAAC,OAAQ,KACjB,QAAQ,CAAC,OAAQ,IAClBD,KAAIC,KAAI,KACR;AAAA,EACN;AAEA,QAAM,sBAAsB,CAACD,IAAGC,OAAM2xB,qBAAmB3xB,IAAGD,EAAC;AAE7D,MAAA6xB,gBAAiB;AAAA,IACjB,oBAAED;AAAAA,IACA;AAAA,EACF;ACtBA,QAAM,QAAQrqB;AACd,QAAM,cAAEiqB,cAAY,iBAAgB,IAAK3b;AACzC,QAAM,MAAErS,MAAE,GAAEwV,IAAC,IAAK5Q,KAAyB;AAE3C,QAAMupB,iBAAe1a;AACrB,QAAM,EAAE,mBAAoB,IAAGC;AAC/B,QAAM4a,SAAO;AAAA,IACX,YAAa7f,UAAS,SAAS;AAC7B,gBAAU0f,eAAa,OAAO;AAE9B,UAAI1f,oBAAmB6f,UAAQ;AAC7B,YAAI7f,SAAQ,UAAU,CAAC,CAAC,QAAQ,SAC5BA,SAAQ,sBAAsB,CAAC,CAAC,QAAQ,mBAAmB;AAC7D,iBAAOA;AAAA,QACf,OAAa;AACL,UAAAA,WAAUA,SAAQ;AAAA,QACnB;AAAA,MACP,WAAe,OAAOA,aAAY,UAAU;AACtC,cAAM,IAAI,UAAU,oBAAoBA,UAAS;AAAA,MAClD;AAED,UAAIA,SAAQ,SAASuf,cAAY;AAC/B,cAAM,IAAI;AAAA,UACR,0BAA0BA;AAAAA,QAC3B;AAAA,MACF;AAED,YAAM,UAAUvf,UAAS,OAAO;AAChC,WAAK,UAAU;AACf,WAAK,QAAQ,CAAC,CAAC,QAAQ;AAGvB,WAAK,oBAAoB,CAAC,CAAC,QAAQ;AAEnC,YAAMnQ,KAAImQ,SAAQ,KAAI,EAAG,MAAM,QAAQ,QAAQzO,KAAGwV,IAAE,SAASxV,KAAGwV,IAAE,KAAK;AAEvE,UAAI,CAAClX,IAAG;AACN,cAAM,IAAI,UAAU,oBAAoBmQ,UAAS;AAAA,MAClD;AAED,WAAK,MAAMA;AAGX,WAAK,QAAQ,CAACnQ,GAAE;AAChB,WAAK,QAAQ,CAACA,GAAE;AAChB,WAAK,QAAQ,CAACA,GAAE;AAEhB,UAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAAG;AACnD,cAAM,IAAI,UAAU,uBAAuB;AAAA,MAC5C;AAED,UAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAAG;AACnD,cAAM,IAAI,UAAU,uBAAuB;AAAA,MAC5C;AAED,UAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAAG;AACnD,cAAM,IAAI,UAAU,uBAAuB;AAAA,MAC5C;AAGD,UAAI,CAACA,GAAE,IAAI;AACT,aAAK,aAAa,CAAE;AAAA,MAC1B,OAAW;AACL,aAAK,aAAaA,GAAE,GAAG,MAAM,GAAG,EAAE,IAAI,CAAC8B,QAAO;AAC5C,cAAI,WAAW,KAAKA,GAAE,GAAG;AACvB,kBAAM4oB,OAAM,CAAC5oB;AACb,gBAAI4oB,QAAO,KAAKA,OAAM,kBAAkB;AACtC,qBAAOA;AAAA,YACR;AAAA,UACF;AACD,iBAAO5oB;AAAA,QACf,CAAO;AAAA,MACF;AAED,WAAK,QAAQ9B,GAAE,KAAKA,GAAE,GAAG,MAAM,GAAG,IAAI,CAAE;AACxC,WAAK,OAAQ;AAAA,IACd;AAAA,IAED,SAAU;AACR,WAAK,UAAU,GAAG,KAAK,SAAS,KAAK,SAAS,KAAK;AACnD,UAAI,KAAK,WAAW,QAAQ;AAC1B,aAAK,WAAW,IAAI,KAAK,WAAW,KAAK,GAAG;AAAA,MAC7C;AACD,aAAO,KAAK;AAAA,IACb;AAAA,IAED,WAAY;AACV,aAAO,KAAK;AAAA,IACb;AAAA,IAED,QAAS,OAAO;AACd,YAAM,kBAAkB,KAAK,SAAS,KAAK,SAAS,KAAK;AACzD,UAAI,EAAE,iBAAiBgwB,WAAS;AAC9B,YAAI,OAAO,UAAU,YAAY,UAAU,KAAK,SAAS;AACvD,iBAAO;AAAA,QACR;AACD,gBAAQ,IAAIA,SAAO,OAAO,KAAK,OAAO;AAAA,MACvC;AAED,UAAI,MAAM,YAAY,KAAK,SAAS;AAClC,eAAO;AAAA,MACR;AAED,aAAO,KAAK,YAAY,KAAK,KAAK,KAAK,WAAW,KAAK;AAAA,IACxD;AAAA,IAED,YAAa,OAAO;AAClB,UAAI,EAAE,iBAAiBA,WAAS;AAC9B,gBAAQ,IAAIA,SAAO,OAAO,KAAK,OAAO;AAAA,MACvC;AAED,aACE,mBAAmB,KAAK,OAAO,MAAM,KAAK,KAC1C,mBAAmB,KAAK,OAAO,MAAM,KAAK,KAC1C,mBAAmB,KAAK,OAAO,MAAM,KAAK;AAAA,IAE7C;AAAA,IAED,WAAY,OAAO;AACjB,UAAI,EAAE,iBAAiBA,WAAS;AAC9B,gBAAQ,IAAIA,SAAO,OAAO,KAAK,OAAO;AAAA,MACvC;AAGD,UAAI,KAAK,WAAW,UAAU,CAAC,MAAM,WAAW,QAAQ;AACtD,eAAO;AAAA,MACb,WAAe,CAAC,KAAK,WAAW,UAAU,MAAM,WAAW,QAAQ;AAC7D,eAAO;AAAA,MACb,WAAe,CAAC,KAAK,WAAW,UAAU,CAAC,MAAM,WAAW,QAAQ;AAC9D,eAAO;AAAA,MACR;AAED,UAAIpyB,KAAI;AACR,SAAG;AACD,cAAMM,KAAI,KAAK,WAAWN;AAC1B,cAAMO,KAAI,MAAM,WAAWP;AAC3B,cAAM,sBAAsBA,IAAGM,IAAGC,EAAC;AACnC,YAAID,OAAM,UAAaC,OAAM,QAAW;AACtC,iBAAO;AAAA,QACf,WAAiBA,OAAM,QAAW;AAC1B,iBAAO;AAAA,QACf,WAAiBD,OAAM,QAAW;AAC1B,iBAAO;AAAA,QACf,WAAiBA,OAAMC,IAAG;AAClB;AAAA,QACR,OAAa;AACL,iBAAO,mBAAmBD,IAAGC,EAAC;AAAA,QAC/B;AAAA,MACF,SAAQ,EAAEP;AAAA,IACZ;AAAA,IAED,aAAc,OAAO;AACnB,UAAI,EAAE,iBAAiBoyB,WAAS;AAC9B,gBAAQ,IAAIA,SAAO,OAAO,KAAK,OAAO;AAAA,MACvC;AAED,UAAIpyB,KAAI;AACR,SAAG;AACD,cAAMM,KAAI,KAAK,MAAMN;AACrB,cAAMO,KAAI,MAAM,MAAMP;AACtB,cAAM,sBAAsBA,IAAGM,IAAGC,EAAC;AACnC,YAAID,OAAM,UAAaC,OAAM,QAAW;AACtC,iBAAO;AAAA,QACf,WAAiBA,OAAM,QAAW;AAC1B,iBAAO;AAAA,QACf,WAAiBD,OAAM,QAAW;AAC1B,iBAAO;AAAA,QACf,WAAiBA,OAAMC,IAAG;AAClB;AAAA,QACR,OAAa;AACL,iBAAO,mBAAmBD,IAAGC,EAAC;AAAA,QAC/B;AAAA,MACF,SAAQ,EAAEP;AAAA,IACZ;AAAA,IAID,IAAK,SAASqyB,aAAY;AACxB,cAAQ,SAAO;AAAA,QACb,KAAK;AACH,eAAK,WAAW,SAAS;AACzB,eAAK,QAAQ;AACb,eAAK,QAAQ;AACb,eAAK;AACL,eAAK,IAAI,OAAOA,WAAU;AAC1B;AAAA,QACF,KAAK;AACH,eAAK,WAAW,SAAS;AACzB,eAAK,QAAQ;AACb,eAAK;AACL,eAAK,IAAI,OAAOA,WAAU;AAC1B;AAAA,QACF,KAAK;AAIH,eAAK,WAAW,SAAS;AACzB,eAAK,IAAI,SAASA,WAAU;AAC5B,eAAK,IAAI,OAAOA,WAAU;AAC1B;AAAA,QAGF,KAAK;AACH,cAAI,KAAK,WAAW,WAAW,GAAG;AAChC,iBAAK,IAAI,SAASA,WAAU;AAAA,UAC7B;AACD,eAAK,IAAI,OAAOA,WAAU;AAC1B;AAAA,QAEF,KAAK;AAKH,cACE,KAAK,UAAU,KACf,KAAK,UAAU,KACf,KAAK,WAAW,WAAW,GAC3B;AACA,iBAAK;AAAA,UACN;AACD,eAAK,QAAQ;AACb,eAAK,QAAQ;AACb,eAAK,aAAa,CAAE;AACpB;AAAA,QACF,KAAK;AAKH,cAAI,KAAK,UAAU,KAAK,KAAK,WAAW,WAAW,GAAG;AACpD,iBAAK;AAAA,UACN;AACD,eAAK,QAAQ;AACb,eAAK,aAAa,CAAE;AACpB;AAAA,QACF,KAAK;AAKH,cAAI,KAAK,WAAW,WAAW,GAAG;AAChC,iBAAK;AAAA,UACN;AACD,eAAK,aAAa,CAAE;AACpB;AAAA,QAGF,KAAK;AACH,cAAI,KAAK,WAAW,WAAW,GAAG;AAChC,iBAAK,aAAa,CAAC,CAAC;AAAA,UAC9B,OAAe;AACL,gBAAIryB,KAAI,KAAK,WAAW;AACxB,mBAAO,EAAEA,MAAK,GAAG;AACf,kBAAI,OAAO,KAAK,WAAWA,QAAO,UAAU;AAC1C,qBAAK,WAAWA;AAChB,gBAAAA,KAAI;AAAA,cACL;AAAA,YACF;AACD,gBAAIA,OAAM,IAAI;AAEZ,mBAAK,WAAW,KAAK,CAAC;AAAA,YACvB;AAAA,UACF;AACD,cAAIqyB,aAAY;AAGd,gBAAI,mBAAmB,KAAK,WAAW,IAAIA,WAAU,MAAM,GAAG;AAC5D,kBAAI,MAAM,KAAK,WAAW,EAAE,GAAG;AAC7B,qBAAK,aAAa,CAACA,aAAY,CAAC;AAAA,cACjC;AAAA,YACb,OAAiB;AACL,mBAAK,aAAa,CAACA,aAAY,CAAC;AAAA,YACjC;AAAA,UACF;AACD;AAAA,QAEF;AACE,gBAAM,IAAI,MAAM,+BAA+B,SAAS;AAAA,MAC3D;AACD,WAAK,OAAQ;AACb,WAAK,MAAM,KAAK;AAChB,aAAO;AAAA,IACR;AAAA,EACH;AAEA,MAAAC,WAAiBF;AC9RjB,QAAM,EAAE,WAAY,IAAGvqB;AACvB,QAAM,MAAE/D,MAAE,GAAEwV,IAAC,IAAKnD,KAAyB;AAC3C,QAAMic,WAAS1pB;AAEf,QAAM,eAAe6O;AACrB,QAAMrQ,UAAQ,CAACqL,UAAS,YAAY;AAClC,cAAU,aAAa,OAAO;AAE9B,QAAIA,oBAAmB6f,UAAQ;AAC7B,aAAO7f;AAAA,IACR;AAED,QAAI,OAAOA,aAAY,UAAU;AAC/B,aAAO;AAAA,IACR;AAED,QAAIA,SAAQ,SAAS,YAAY;AAC/B,aAAO;AAAA,IACR;AAED,UAAMhP,KAAI,QAAQ,QAAQO,KAAGwV,IAAE,SAASxV,KAAGwV,IAAE;AAC7C,QAAI,CAAC/V,GAAE,KAAKgP,QAAO,GAAG;AACpB,aAAO;AAAA,IACR;AAED,QAAI;AACF,aAAO,IAAI6f,SAAO7f,UAAS,OAAO;AAAA,IACnC,SAAQ,IAAP;AACA,aAAO;AAAA,IACR;AAAA,EACH;AAEA,MAAA,UAAiBrL;AChCjB,QAAMA,UAAQW;AACd,QAAM0qB,UAAQ,CAAChgB,UAAS,YAAY;AAClC,UAAMwG,KAAI7R,QAAMqL,UAAS,OAAO;AAChC,WAAOwG,KAAIA,GAAE,UAAU;AAAA,EACzB;AACA,MAAA,UAAiBwZ;ACLjB,QAAMrrB,UAAQW;AACd,QAAM2qB,UAAQ,CAACjgB,UAAS,YAAY;AAClC,UAAMhO,KAAI2C,QAAMqL,SAAQ,KAAI,EAAG,QAAQ,UAAU,EAAE,GAAG,OAAO;AAC7D,WAAOhO,KAAIA,GAAE,UAAU;AAAA,EACzB;AACA,MAAA,UAAiBiuB;ACLjB,QAAMJ,WAASvqB;AAEf,QAAM4qB,QAAM,CAAClgB,UAAS,SAAS,SAAS8f,gBAAe;AACrD,QAAI,OAAQ,YAAa,UAAU;AACjC,MAAAA,cAAa;AACb,gBAAU;AAAA,IACX;AAED,QAAI;AACF,aAAO,IAAID;AAAAA,QACT7f,oBAAmB6f,WAAS7f,SAAQ,UAAUA;AAAA,QAC9C;AAAA,MACD,EAAC,IAAI,SAAS8f,WAAU,EAAE;AAAA,IAC5B,SAAQ,IAAP;AACA,aAAO;AAAA,IACR;AAAA,EACH;AACA,MAAA,QAAiBI;ACjBjB,QAAML,WAASvqB;AACf,QAAMV,YAAU,CAAC7G,IAAGC,IAAG,UACrB,IAAI6xB,SAAO9xB,IAAG,KAAK,EAAE,QAAQ,IAAI8xB,SAAO7xB,IAAG,KAAK,CAAC;AAEnD,MAAA,YAAiB4G;ACJjB,QAAMA,YAAUU;AAChB,QAAM6qB,OAAK,CAACpyB,IAAGC,IAAG,UAAU4G,UAAQ7G,IAAGC,IAAG,KAAK,MAAM;AACrD,MAAA,OAAiBmyB;ACFjB,QAAMxrB,UAAQW;AACd,QAAM6qB,OAAKvc;AAEX,QAAMnS,SAAO,CAAC,UAAU,aAAa;AACnC,QAAI0uB,KAAG,UAAU,QAAQ,GAAG;AAC1B,aAAO;AAAA,IACX,OAAS;AACL,YAAMxD,MAAKhoB,QAAM,QAAQ;AACzB,YAAM,KAAKA,QAAM,QAAQ;AACzB,YAAM,SAASgoB,IAAG,WAAW,UAAU,GAAG,WAAW;AACrD,YAAMpf,UAAS,SAAS,QAAQ;AAChC,YAAM,gBAAgB,SAAS,eAAe;AAC9C,iBAAW/P,QAAOmvB,KAAI;AACpB,YAAInvB,SAAQ,WAAWA,SAAQ,WAAWA,SAAQ,SAAS;AACzD,cAAImvB,IAAGnvB,UAAS,GAAGA,OAAM;AACvB,mBAAO+P,UAAS/P;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AACD,aAAO;AAAA,IACR;AAAA,EACH;AACA,MAAA,SAAiBiE;ACtBjB,QAAMouB,WAASvqB;AACf,QAAM+H,UAAQ,CAACtP,IAAG,UAAU,IAAI8xB,SAAO9xB,IAAG,KAAK,EAAE;AACjD,MAAA,UAAiBsP;ACFjB,QAAMwiB,WAASvqB;AACf,QAAMgI,UAAQ,CAACvP,IAAG,UAAU,IAAI8xB,SAAO9xB,IAAG,KAAK,EAAE;AACjD,MAAA,UAAiBuP;ACFjB,QAAMuiB,WAASvqB;AACf,QAAM2nB,UAAQ,CAAClvB,IAAG,UAAU,IAAI8xB,SAAO9xB,IAAG,KAAK,EAAE;AACjD,MAAA,UAAiBkvB;ACFjB,QAAMtoB,UAAQW;AACd,QAAM8qB,eAAa,CAACpgB,UAAS,YAAY;AACvC,UAAM,SAASrL,QAAMqL,UAAS,OAAO;AACrC,WAAQ,UAAU,OAAO,WAAW,SAAU,OAAO,aAAa;AAAA,EACpE;AACA,MAAA,eAAiBogB;ACLjB,QAAMxrB,YAAUU;AAChB,QAAM+qB,aAAW,CAACtyB,IAAGC,IAAG,UAAU4G,UAAQ5G,IAAGD,IAAG,KAAK;AACrD,MAAA,aAAiBsyB;ACFjB,QAAMzrB,YAAUU;AAChB,QAAMgrB,iBAAe,CAACvyB,IAAGC,OAAM4G,UAAQ7G,IAAGC,IAAG,IAAI;AACjD,MAAA,iBAAiBsyB;ACFjB,QAAMT,WAASvqB;AACf,QAAMirB,iBAAe,CAACxyB,IAAGC,IAAG,UAAU;AACpC,UAAM,WAAW,IAAI6xB,SAAO9xB,IAAG,KAAK;AACpC,UAAM,WAAW,IAAI8xB,SAAO7xB,IAAG,KAAK;AACpC,WAAO,SAAS,QAAQ,QAAQ,KAAK,SAAS,aAAa,QAAQ;AAAA,EACrE;AACA,MAAA,iBAAiBuyB;ACNjB,QAAMA,iBAAejrB;AACrB,QAAMkrB,SAAO,CAAC,MAAM,UAAU,KAAK,KAAK,CAACzyB,IAAGC,OAAMuyB,eAAaxyB,IAAGC,IAAG,KAAK,CAAC;AAC3E,MAAA,SAAiBwyB;ACFjB,QAAMD,iBAAejrB;AACrB,QAAMmrB,UAAQ,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC1yB,IAAGC,OAAMuyB,eAAavyB,IAAGD,IAAG,KAAK,CAAC;AAC5E,MAAA,UAAiB0yB;ACFjB,QAAM7rB,YAAUU;AAChB,QAAMsc,OAAK,CAAC7jB,IAAGC,IAAG,UAAU4G,UAAQ7G,IAAGC,IAAG,KAAK,IAAI;AACnD,MAAA,OAAiB4jB;ACFjB,QAAMhd,YAAUU;AAChB,QAAMqc,OAAK,CAAC5jB,IAAGC,IAAG,UAAU4G,UAAQ7G,IAAGC,IAAG,KAAK,IAAI;AACnD,MAAA,OAAiB2jB;ACFjB,QAAM/c,YAAUU;AAChB,QAAMorB,QAAM,CAAC3yB,IAAGC,IAAG,UAAU4G,UAAQ7G,IAAGC,IAAG,KAAK,MAAM;AACtD,MAAA,QAAiB0yB;ACFjB,QAAM9rB,YAAUU;AAChB,QAAMqrB,QAAM,CAAC5yB,IAAGC,IAAG,UAAU4G,UAAQ7G,IAAGC,IAAG,KAAK,KAAK;AACrD,MAAA,QAAiB2yB;ACFjB,QAAM/rB,YAAUU;AAChB,QAAMsrB,QAAM,CAAC7yB,IAAGC,IAAG,UAAU4G,UAAQ7G,IAAGC,IAAG,KAAK,KAAK;AACrD,MAAA,QAAiB4yB;ACFjB,QAAMT,OAAK7qB;AACX,QAAMorB,QAAM9c;AACZ,QAAMgO,OAAKzb;AACX,QAAMwqB,QAAM3b;AACZ,QAAM2M,OAAK1M;AACX,QAAM2b,QAAM/O;AAEZ,QAAMthB,QAAM,CAACxC,IAAG,IAAIC,IAAG,UAAU;AAC/B,YAAQ,IAAE;AAAA,MACR,KAAK;AACH,YAAI,OAAOD,OAAM,UAAU;AACzB,UAAAA,KAAIA,GAAE;AAAA,QACP;AACD,YAAI,OAAOC,OAAM,UAAU;AACzB,UAAAA,KAAIA,GAAE;AAAA,QACP;AACD,eAAOD,OAAMC;AAAA,MAEf,KAAK;AACH,YAAI,OAAOD,OAAM,UAAU;AACzB,UAAAA,KAAIA,GAAE;AAAA,QACP;AACD,YAAI,OAAOC,OAAM,UAAU;AACzB,UAAAA,KAAIA,GAAE;AAAA,QACP;AACD,eAAOD,OAAMC;AAAA,MAEf,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAOmyB,KAAGpyB,IAAGC,IAAG,KAAK;AAAA,MAEvB,KAAK;AACH,eAAO0yB,MAAI3yB,IAAGC,IAAG,KAAK;AAAA,MAExB,KAAK;AACH,eAAO4jB,KAAG7jB,IAAGC,IAAG,KAAK;AAAA,MAEvB,KAAK;AACH,eAAO2yB,MAAI5yB,IAAGC,IAAG,KAAK;AAAA,MAExB,KAAK;AACH,eAAO2jB,KAAG5jB,IAAGC,IAAG,KAAK;AAAA,MAEvB,KAAK;AACH,eAAO4yB,MAAI7yB,IAAGC,IAAG,KAAK;AAAA,MAExB;AACE,cAAM,IAAI,UAAU,qBAAqB,IAAI;AAAA,IAChD;AAAA,EACH;AACA,MAAA,QAAiBuC;ACnDjB,QAAMsvB,WAASvqB;AACf,QAAMX,UAAQiP;AACd,QAAM,EAAE,IAAE,GAAEmD,IAAC,IAAK5Q,KAAyB;AAE3C,QAAM0qB,WAAS,CAAC7gB,UAAS,YAAY;AACnC,QAAIA,oBAAmB6f,UAAQ;AAC7B,aAAO7f;AAAA,IACR;AAED,QAAI,OAAOA,aAAY,UAAU;AAC/B,MAAAA,WAAU,OAAOA,QAAO;AAAA,IACzB;AAED,QAAI,OAAOA,aAAY,UAAU;AAC/B,aAAO;AAAA,IACR;AAED,cAAU,WAAW,CAAE;AAEvB,QAAIpQ,SAAQ;AACZ,QAAI,CAAC,QAAQ,KAAK;AAChB,MAAAA,SAAQoQ,SAAQ,MAAM,GAAG+G,IAAE,OAAO;AAAA,IACtC,OAAS;AASL,UAAIxX;AACJ,cAAQA,QAAO,GAAGwX,IAAE,WAAW,KAAK/G,QAAO,OACtC,CAACpQ,UAASA,OAAM,QAAQA,OAAM,GAAG,WAAWoQ,SAAQ,SACvD;AACA,YAAI,CAACpQ,UACCL,MAAK,QAAQA,MAAK,GAAG,WAAWK,OAAM,QAAQA,OAAM,GAAG,QAAQ;AACnE,UAAAA,SAAQL;AAAA,QACT;AACD,WAAGwX,IAAE,WAAW,YAAYxX,MAAK,QAAQA,MAAK,GAAG,SAASA,MAAK,GAAG;AAAA,MACnE;AAED,SAAGwX,IAAE,WAAW,YAAY;AAAA,IAC7B;AAED,QAAInX,WAAU,MAAM;AAClB,aAAO;AAAA,IACR;AAED,WAAO+E,QAAM,GAAG/E,OAAM,MAAMA,OAAM,MAAM,OAAOA,OAAM,MAAM,OAAO,OAAO;AAAA,EAC3E;AACA,MAAA,WAAiBixB;;;;;;;AClDH,eAAG,SAAUC,UAAS;AAClC,MAAAA,SAAQ,UAAU,OAAO,YAAY,aAAa;AAChD,iBAAS,SAAS,KAAK,MAAM,QAAQ,SAAS,OAAO,MAAM;AACzD,gBAAM,OAAO;AAAA,QACd;AAAA,MACF;AAAA,IACH;;;ACNA,MAAA,UAAiBA;AAEV,YAAC,OAAOnxB;AACR,YAAC,SAASmxB;AAEjB,WAASA,UAAS,MAAM;AACtB,QAAInzB,QAAO;AACX,QAAI,EAAEA,iBAAgBmzB,YAAU;AAC9B,MAAAnzB,QAAO,IAAImzB,UAAS;AAAA,IACrB;AAED,IAAAnzB,MAAK,OAAO;AACZ,IAAAA,MAAK,OAAO;AACZ,IAAAA,MAAK,SAAS;AAEd,QAAI,QAAQ,OAAO,KAAK,YAAY,YAAY;AAC9C,WAAK,QAAQ,SAAU,MAAM;AAC3B,QAAAA,MAAK,KAAK,IAAI;AAAA,MACpB,CAAK;AAAA,IACL,WAAa,UAAU,SAAS,GAAG;AAC/B,eAASF,KAAI,GAAGiX,KAAI,UAAU,QAAQjX,KAAIiX,IAAGjX,MAAK;AAChD,QAAAE,MAAK,KAAK,UAAUF,GAAE;AAAA,MACvB;AAAA,IACF;AAED,WAAOE;AAAA,EACT;AAEAmzB,YAAQ,UAAU,aAAa,SAAUzyB,OAAM;AAC7C,QAAIA,MAAK,SAAS,MAAM;AACtB,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACnE;AAED,QAAIkB,QAAOlB,MAAK;AAChB,QAAIwE,QAAOxE,MAAK;AAEhB,QAAIkB,OAAM;AACR,MAAAA,MAAK,OAAOsD;AAAA,IACb;AAED,QAAIA,OAAM;AACR,MAAAA,MAAK,OAAOtD;AAAA,IACb;AAED,QAAIlB,UAAS,KAAK,MAAM;AACtB,WAAK,OAAOkB;AAAA,IACb;AACD,QAAIlB,UAAS,KAAK,MAAM;AACtB,WAAK,OAAOwE;AAAA,IACb;AAED,IAAAxE,MAAK,KAAK;AACV,IAAAA,MAAK,OAAO;AACZ,IAAAA,MAAK,OAAO;AACZ,IAAAA,MAAK,OAAO;AAEZ,WAAOkB;AAAA,EACT;AAEAuxB,YAAQ,UAAU,cAAc,SAAUzyB,OAAM;AAC9C,QAAIA,UAAS,KAAK,MAAM;AACtB;AAAA,IACD;AAED,QAAIA,MAAK,MAAM;AACb,MAAAA,MAAK,KAAK,WAAWA,KAAI;AAAA,IAC1B;AAED,QAAI,OAAO,KAAK;AAChB,IAAAA,MAAK,OAAO;AACZ,IAAAA,MAAK,OAAO;AACZ,QAAI,MAAM;AACR,WAAK,OAAOA;AAAA,IACb;AAED,SAAK,OAAOA;AACZ,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAOA;AAAA,IACb;AACD,SAAK;AAAA,EACP;AAEAyyB,YAAQ,UAAU,WAAW,SAAUzyB,OAAM;AAC3C,QAAIA,UAAS,KAAK,MAAM;AACtB;AAAA,IACD;AAED,QAAIA,MAAK,MAAM;AACb,MAAAA,MAAK,KAAK,WAAWA,KAAI;AAAA,IAC1B;AAED,QAAI,OAAO,KAAK;AAChB,IAAAA,MAAK,OAAO;AACZ,IAAAA,MAAK,OAAO;AACZ,QAAI,MAAM;AACR,WAAK,OAAOA;AAAA,IACb;AAED,SAAK,OAAOA;AACZ,QAAI,CAAC,KAAK,MAAM;AACd,WAAK,OAAOA;AAAA,IACb;AACD,SAAK;AAAA,EACP;AAEAyyB,YAAQ,UAAU,OAAO,WAAY;AACnC,aAASrzB,KAAI,GAAGiX,KAAI,UAAU,QAAQjX,KAAIiX,IAAGjX,MAAK;AAChD,WAAK,MAAM,UAAUA,GAAE;AAAA,IACxB;AACD,WAAO,KAAK;AAAA,EACd;AAEAqzB,YAAQ,UAAU,UAAU,WAAY;AACtC,aAASrzB,KAAI,GAAGiX,KAAI,UAAU,QAAQjX,KAAIiX,IAAGjX,MAAK;AAChD,cAAQ,MAAM,UAAUA,GAAE;AAAA,IAC3B;AACD,WAAO,KAAK;AAAA,EACd;AAEAqzB,YAAQ,UAAU,MAAM,WAAY;AAClC,QAAI,CAAC,KAAK,MAAM;AACd,aAAO;AAAA,IACR;AAED,QAAI,MAAM,KAAK,KAAK;AACpB,SAAK,OAAO,KAAK,KAAK;AACtB,QAAI,KAAK,MAAM;AACb,WAAK,KAAK,OAAO;AAAA,IACrB,OAAS;AACL,WAAK,OAAO;AAAA,IACb;AACD,SAAK;AACL,WAAO;AAAA,EACT;AAEAA,YAAQ,UAAU,QAAQ,WAAY;AACpC,QAAI,CAAC,KAAK,MAAM;AACd,aAAO;AAAA,IACR;AAED,QAAI,MAAM,KAAK,KAAK;AACpB,SAAK,OAAO,KAAK,KAAK;AACtB,QAAI,KAAK,MAAM;AACb,WAAK,KAAK,OAAO;AAAA,IACrB,OAAS;AACL,WAAK,OAAO;AAAA,IACb;AACD,SAAK;AACL,WAAO;AAAA,EACT;AAEO,YAAC,UAAU,UAAU,SAAU,IAAI,OAAO;AAC/C,YAAQ,SAAS;AACjB,aAAS,SAAS,KAAK,MAAMrzB,KAAI,GAAG,WAAW,MAAMA,MAAK;AACxD,SAAG,KAAK,OAAO,OAAO,OAAOA,IAAG,IAAI;AACpC,eAAS,OAAO;AAAA,IACjB;AAAA,EACH;AAEO,YAAC,UAAU,iBAAiB,SAAU,IAAI,OAAO;AACtD,YAAQ,SAAS;AACjB,aAAS,SAAS,KAAK,MAAMA,KAAI,KAAK,SAAS,GAAG,WAAW,MAAMA,MAAK;AACtE,SAAG,KAAK,OAAO,OAAO,OAAOA,IAAG,IAAI;AACpC,eAAS,OAAO;AAAA,IACjB;AAAA,EACH;AAEAqzB,YAAQ,UAAU,MAAM,SAAUryB,IAAG;AACnC,aAAShB,KAAI,GAAG,SAAS,KAAK,MAAM,WAAW,QAAQA,KAAIgB,IAAGhB,MAAK;AAEjE,eAAS,OAAO;AAAA,IACjB;AACD,QAAIA,OAAMgB,MAAK,WAAW,MAAM;AAC9B,aAAO,OAAO;AAAA,IACf;AAAA,EACH;AAEAqyB,YAAQ,UAAU,aAAa,SAAUryB,IAAG;AAC1C,aAAShB,KAAI,GAAG,SAAS,KAAK,MAAM,WAAW,QAAQA,KAAIgB,IAAGhB,MAAK;AAEjE,eAAS,OAAO;AAAA,IACjB;AACD,QAAIA,OAAMgB,MAAK,WAAW,MAAM;AAC9B,aAAO,OAAO;AAAA,IACf;AAAA,EACH;AAEO,YAAC,UAAU,MAAM,SAAU,IAAI,OAAO;AAC3C,YAAQ,SAAS;AACjB,QAAI,MAAM,IAAIqyB,UAAS;AACvB,aAAS,SAAS,KAAK,MAAM,WAAW,QAAO;AAC7C,UAAI,KAAK,GAAG,KAAK,OAAO,OAAO,OAAO,IAAI,CAAC;AAC3C,eAAS,OAAO;AAAA,IACjB;AACD,WAAO;AAAA,EACT;AAEO,YAAC,UAAU,aAAa,SAAU,IAAI,OAAO;AAClD,YAAQ,SAAS;AACjB,QAAI,MAAM,IAAIA,UAAS;AACvB,aAAS,SAAS,KAAK,MAAM,WAAW,QAAO;AAC7C,UAAI,KAAK,GAAG,KAAK,OAAO,OAAO,OAAO,IAAI,CAAC;AAC3C,eAAS,OAAO;AAAA,IACjB;AACD,WAAO;AAAA,EACT;AAEO,YAAC,UAAU,SAAS,SAAU,IAAI,SAAS;AAChD,QAAI;AACJ,QAAI,SAAS,KAAK;AAClB,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM;AAAA,IACV,WAAa,KAAK,MAAM;AACpB,eAAS,KAAK,KAAK;AACnB,YAAM,KAAK,KAAK;AAAA,IACpB,OAAS;AACL,YAAM,IAAI,UAAU,4CAA4C;AAAA,IACjE;AAED,aAASrzB,KAAI,GAAG,WAAW,MAAMA,MAAK;AACpC,YAAM,GAAG,KAAK,OAAO,OAAOA,EAAC;AAC7B,eAAS,OAAO;AAAA,IACjB;AAED,WAAO;AAAA,EACT;AAEO,YAAC,UAAU,gBAAgB,SAAU,IAAI,SAAS;AACvD,QAAI;AACJ,QAAI,SAAS,KAAK;AAClB,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM;AAAA,IACV,WAAa,KAAK,MAAM;AACpB,eAAS,KAAK,KAAK;AACnB,YAAM,KAAK,KAAK;AAAA,IACpB,OAAS;AACL,YAAM,IAAI,UAAU,4CAA4C;AAAA,IACjE;AAED,aAASA,KAAI,KAAK,SAAS,GAAG,WAAW,MAAMA,MAAK;AAClD,YAAM,GAAG,KAAK,OAAO,OAAOA,EAAC;AAC7B,eAAS,OAAO;AAAA,IACjB;AAED,WAAO;AAAA,EACT;AAEAqzB,YAAQ,UAAU,UAAU,WAAY;AACtC,QAAI,MAAM,IAAI,MAAM,KAAK,MAAM;AAC/B,aAASrzB,KAAI,GAAG,SAAS,KAAK,MAAM,WAAW,MAAMA,MAAK;AACxD,UAAIA,MAAK,OAAO;AAChB,eAAS,OAAO;AAAA,IACjB;AACD,WAAO;AAAA,EACT;AAEAqzB,YAAQ,UAAU,iBAAiB,WAAY;AAC7C,QAAI,MAAM,IAAI,MAAM,KAAK,MAAM;AAC/B,aAASrzB,KAAI,GAAG,SAAS,KAAK,MAAM,WAAW,MAAMA,MAAK;AACxD,UAAIA,MAAK,OAAO;AAChB,eAAS,OAAO;AAAA,IACjB;AACD,WAAO;AAAA,EACT;AAEO,YAAC,UAAU,QAAQ,SAAUU,OAAM,IAAI;AAC5C,SAAK,MAAM,KAAK;AAChB,QAAI,KAAK,GAAG;AACV,YAAM,KAAK;AAAA,IACZ;AACD,IAAAA,QAAOA,SAAQ;AACf,QAAIA,QAAO,GAAG;AACZ,MAAAA,SAAQ,KAAK;AAAA,IACd;AACD,QAAI,MAAM,IAAI2yB,UAAS;AACvB,QAAI,KAAK3yB,SAAQ,KAAK,GAAG;AACvB,aAAO;AAAA,IACR;AACD,QAAIA,QAAO,GAAG;AACZ,MAAAA,QAAO;AAAA,IACR;AACD,QAAI,KAAK,KAAK,QAAQ;AACpB,WAAK,KAAK;AAAA,IACX;AACD,aAASV,KAAI,GAAG,SAAS,KAAK,MAAM,WAAW,QAAQA,KAAIU,OAAMV,MAAK;AACpE,eAAS,OAAO;AAAA,IACjB;AACD,WAAO,WAAW,QAAQA,KAAI,IAAIA,MAAK,SAAS,OAAO,MAAM;AAC3D,UAAI,KAAK,OAAO,KAAK;AAAA,IACtB;AACD,WAAO;AAAA,EACT;AAEO,YAAC,UAAU,eAAe,SAAUU,OAAM,IAAI;AACnD,SAAK,MAAM,KAAK;AAChB,QAAI,KAAK,GAAG;AACV,YAAM,KAAK;AAAA,IACZ;AACD,IAAAA,QAAOA,SAAQ;AACf,QAAIA,QAAO,GAAG;AACZ,MAAAA,SAAQ,KAAK;AAAA,IACd;AACD,QAAI,MAAM,IAAI2yB,UAAS;AACvB,QAAI,KAAK3yB,SAAQ,KAAK,GAAG;AACvB,aAAO;AAAA,IACR;AACD,QAAIA,QAAO,GAAG;AACZ,MAAAA,QAAO;AAAA,IACR;AACD,QAAI,KAAK,KAAK,QAAQ;AACpB,WAAK,KAAK;AAAA,IACX;AACD,aAASV,KAAI,KAAK,QAAQ,SAAS,KAAK,MAAM,WAAW,QAAQA,KAAI,IAAIA,MAAK;AAC5E,eAAS,OAAO;AAAA,IACjB;AACD,WAAO,WAAW,QAAQA,KAAIU,OAAMV,MAAK,SAAS,OAAO,MAAM;AAC7D,UAAI,KAAK,OAAO,KAAK;AAAA,IACtB;AACD,WAAO;AAAA,EACT;AAEAqzB,YAAQ,UAAU,SAAS,SAAU,OAAO,gBAAgBnyB,QAAO;AACjE,QAAI,QAAQ,KAAK,QAAQ;AACvB,cAAQ,KAAK,SAAS;AAAA,IACvB;AACD,QAAI,QAAQ,GAAG;AACb,cAAQ,KAAK,SAAS;AAAA,IACvB;AAED,aAASlB,KAAI,GAAG,SAAS,KAAK,MAAM,WAAW,QAAQA,KAAI,OAAOA,MAAK;AACrE,eAAS,OAAO;AAAA,IACjB;AAED,QAAI,MAAM,CAAE;AACZ,aAASA,KAAI,GAAG,UAAUA,KAAI,aAAaA,MAAK;AAC9C,UAAI,KAAK,OAAO,KAAK;AACrB,eAAS,KAAK,WAAW,MAAM;AAAA,IAChC;AACD,QAAI,WAAW,MAAM;AACnB,eAAS,KAAK;AAAA,IACf;AAED,QAAI,WAAW,KAAK,QAAQ,WAAW,KAAK,MAAM;AAChD,eAAS,OAAO;AAAA,IACjB;AAED,aAASA,KAAI,GAAGA,KAAIkB,OAAM,QAAQlB,MAAK;AACrC,eAAS,OAAO,MAAM,QAAQkB,OAAMlB,GAAE;AAAA,IACvC;AACD,WAAO;AAAA,EACT;AAEAqzB,YAAQ,UAAU,UAAU,WAAY;AACtC,QAAI,OAAO,KAAK;AAChB,QAAI,OAAO,KAAK;AAChB,aAAS,SAAS,MAAM,WAAW,MAAM,SAAS,OAAO,MAAM;AAC7D,UAAItyB,KAAI,OAAO;AACf,aAAO,OAAO,OAAO;AACrB,aAAO,OAAOA;AAAA,IACf;AACD,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,WAAO;AAAA,EACT;AAEA,WAAS,OAAQb,OAAMU,OAAM,OAAO;AAClC,QAAI,WAAWA,UAASV,MAAK,OAC3B,IAAIgC,OAAK,OAAO,MAAMtB,OAAMV,KAAI,IAChC,IAAIgC,OAAK,OAAOtB,OAAMA,MAAK,MAAMV,KAAI;AAEvC,QAAI,SAAS,SAAS,MAAM;AAC1B,MAAAA,MAAK,OAAO;AAAA,IACb;AACD,QAAI,SAAS,SAAS,MAAM;AAC1B,MAAAA,MAAK,OAAO;AAAA,IACb;AAED,IAAAA,MAAK;AAEL,WAAO;AAAA,EACT;AAEA,WAAS,KAAMA,OAAM,MAAM;AACzB,IAAAA,MAAK,OAAO,IAAIgC,OAAK,MAAMhC,MAAK,MAAM,MAAMA,KAAI;AAChD,QAAI,CAACA,MAAK,MAAM;AACd,MAAAA,MAAK,OAAOA,MAAK;AAAA,IAClB;AACD,IAAAA,MAAK;AAAA,EACP;AAEA,WAAS,QAASA,OAAM,MAAM;AAC5B,IAAAA,MAAK,OAAO,IAAIgC,OAAK,MAAM,MAAMhC,MAAK,MAAMA,KAAI;AAChD,QAAI,CAACA,MAAK,MAAM;AACd,MAAAA,MAAK,OAAOA,MAAK;AAAA,IAClB;AACD,IAAAA,MAAK;AAAA,EACP;AAEA,WAASgC,OAAM,OAAOkD,OAAMtD,OAAM,MAAM;AACtC,QAAI,EAAE,gBAAgBI,SAAO;AAC3B,aAAO,IAAIA,OAAK,OAAOkD,OAAMtD,OAAM,IAAI;AAAA,IACxC;AAED,SAAK,OAAO;AACZ,SAAK,QAAQ;AAEb,QAAIsD,OAAM;AACR,MAAAA,MAAK,OAAO;AACZ,WAAK,OAAOA;AAAA,IAChB,OAAS;AACL,WAAK,OAAO;AAAA,IACb;AAED,QAAItD,OAAM;AACR,MAAAA,MAAK,OAAO;AACZ,WAAK,OAAOA;AAAA,IAChB,OAAS;AACL,WAAK,OAAO;AAAA,IACb;AAAA,EACH;AAEA,MAAI;AAEF+F,oBAAA,EAAyBwrB,SAAO;AAAA,EAClC,SAAS,IAAP;AAAA,EAAW;ACtab,QAAM,UAAUxrB;AAEhB,QAAM,MAAM,OAAO,KAAK;AACxB,QAAM,SAAS,OAAO,QAAQ;AAC9B,QAAM,oBAAoB,OAAO,kBAAkB;AACnD,QAAM,cAAc,OAAO,YAAY;AACvC,QAAM,UAAU,OAAO,QAAQ;AAC/B,QAAM,UAAU,OAAO,SAAS;AAChC,QAAM,oBAAoB,OAAO,gBAAgB;AACjD,QAAM,WAAW,OAAO,SAAS;AACjC,QAAM,QAAQ,OAAO,OAAO;AAC5B,QAAM,oBAAoB,OAAO,gBAAgB;AAEjD,QAAM,cAAc,MAAM;AAU1B,QAAM,SAAS;AAAA,IACb,YAAa,SAAS;AACpB,UAAI,OAAO,YAAY;AACrB,kBAAU,EAAE,KAAK,QAAS;AAE5B,UAAI,CAAC;AACH,kBAAU,CAAE;AAEd,UAAI,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,YAAY,QAAQ,MAAM;AACnE,cAAM,IAAI,UAAU,mCAAmC;AAE7C,WAAK,OAAO,QAAQ,OAAO;AAEvC,YAAM8H,MAAK,QAAQ,UAAU;AAC7B,WAAK,qBAAsB,OAAOA,QAAO,aAAc,cAAcA;AACrE,WAAK,eAAe,QAAQ,SAAS;AACrC,UAAI,QAAQ,UAAU,OAAO,QAAQ,WAAW;AAC9C,cAAM,IAAI,UAAU,yBAAyB;AAC/C,WAAK,WAAW,QAAQ,UAAU;AAClC,WAAK,WAAW,QAAQ;AACxB,WAAK,qBAAqB,QAAQ,kBAAkB;AACpD,WAAK,qBAAqB,QAAQ,kBAAkB;AACpD,WAAK,MAAO;AAAA,IACb;AAAA,IAGD,IAAI,IAAK,IAAI;AACX,UAAI,OAAO,OAAO,YAAY,KAAK;AACjC,cAAM,IAAI,UAAU,mCAAmC;AAEzD,WAAK,OAAO,MAAM;AAClB,WAAK,IAAI;AAAA,IACV;AAAA,IACD,IAAI,MAAO;AACT,aAAO,KAAK;AAAA,IACb;AAAA,IAED,IAAI,WAAY,YAAY;AAC1B,WAAK,eAAe,CAAC,CAAC;AAAA,IACvB;AAAA,IACD,IAAI,aAAc;AAChB,aAAO,KAAK;AAAA,IACb;AAAA,IAED,IAAI,OAAQ,IAAI;AACd,UAAI,OAAO,OAAO;AAChB,cAAM,IAAI,UAAU,sCAAsC;AAE5D,WAAK,WAAW;AAChB,WAAK,IAAI;AAAA,IACV;AAAA,IACD,IAAI,SAAU;AACZ,aAAO,KAAK;AAAA,IACb;AAAA,IAGD,IAAI,iBAAkB,IAAI;AACxB,UAAI,OAAO,OAAO;AAChB,aAAK;AAEP,UAAI,OAAO,KAAK,oBAAoB;AAClC,aAAK,qBAAqB;AAC1B,aAAK,UAAU;AACf,aAAK,UAAU,QAAQ,SAAO;AAC5B,cAAI,SAAS,KAAK,mBAAmB,IAAI,OAAO,IAAI,GAAG;AACvD,eAAK,WAAW,IAAI;AAAA,QAC5B,CAAO;AAAA,MACF;AACD,WAAK,IAAI;AAAA,IACV;AAAA,IACD,IAAI,mBAAoB;AAAE,aAAO,KAAK;AAAA,IAAoB;AAAA,IAE1D,IAAI,SAAU;AAAE,aAAO,KAAK;AAAA,IAAS;AAAA,IACrC,IAAI,YAAa;AAAE,aAAO,KAAK,UAAU;AAAA,IAAQ;AAAA,IAEjD,SAAU,IAAI,OAAO;AACnB,cAAQ,SAAS;AACjB,eAAS,SAAS,KAAK,UAAU,MAAM,WAAW,QAAO;AACvD,cAAMvK,QAAO,OAAO;AACpB,oBAAY,MAAM,IAAI,QAAQ,KAAK;AACnC,iBAASA;AAAA,MACV;AAAA,IACF;AAAA,IAED,QAAS,IAAI,OAAO;AAClB,cAAQ,SAAS;AACjB,eAAS,SAAS,KAAK,UAAU,MAAM,WAAW,QAAO;AACvD,cAAMtD,QAAO,OAAO;AACpB,oBAAY,MAAM,IAAI,QAAQ,KAAK;AACnC,iBAASA;AAAA,MACV;AAAA,IACF;AAAA,IAED,OAAQ;AACN,aAAO,KAAK,UAAU,QAAO,EAAG,IAAI,CAAA+U,OAAKA,GAAE,GAAG;AAAA,IAC/C;AAAA,IAED,SAAU;AACR,aAAO,KAAK,UAAU,QAAO,EAAG,IAAI,CAAAA,OAAKA,GAAE,KAAK;AAAA,IACjD;AAAA,IAED,QAAS;AACP,UAAI,KAAK,YACL,KAAK,aACL,KAAK,UAAU,QAAQ;AACzB,aAAK,UAAU,QAAQ,SAAO,KAAK,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC;AAAA,MAChE;AAED,WAAK,SAAS,oBAAI,IAAK;AACvB,WAAK,YAAY,IAAI,QAAS;AAC9B,WAAK,UAAU;AAAA,IAChB;AAAA,IAED,OAAQ;AACN,aAAO,KAAK,UAAU,IAAI,SACxB,QAAQ,MAAM,GAAG,IAAI,QAAQ;AAAA,QAC3B,GAAG,IAAI;AAAA,QACP,GAAG,IAAI;AAAA,QACP,GAAG,IAAI,OAAO,IAAI,UAAU;AAAA,MAC7B,CAAA,EAAE,QAAS,EAAC,OAAO,CAAA9O,OAAKA,EAAC;AAAA,IAC7B;AAAA,IAED,UAAW;AACT,aAAO,KAAK;AAAA,IACb;AAAA,IAED,IAAKhI,MAAK,OAAO,QAAQ;AACvB,eAAS,UAAU,KAAK;AAExB,UAAI,UAAU,OAAO,WAAW;AAC9B,cAAM,IAAI,UAAU,yBAAyB;AAE/C,YAAM2G,OAAM,SAAS,KAAK,IAAK,IAAG;AAClC,YAAM,MAAM,KAAK,mBAAmB,OAAO3G,IAAG;AAE9C,UAAI,KAAK,OAAO,IAAIA,IAAG,GAAG;AACxB,YAAI,MAAM,KAAK,MAAM;AACnB,cAAI,MAAM,KAAK,OAAO,IAAIA,IAAG,CAAC;AAC9B,iBAAO;AAAA,QACR;AAED,cAAMa,QAAO,KAAK,OAAO,IAAIb,IAAG;AAChC,cAAM,OAAOa,MAAK;AAIlB,YAAI,KAAK,UAAU;AACjB,cAAI,CAAC,KAAK;AACR,iBAAK,SAASb,MAAK,KAAK,KAAK;AAAA,QAChC;AAED,aAAK,MAAM2G;AACX,aAAK,SAAS;AACd,aAAK,QAAQ;AACb,aAAK,WAAW,MAAM,KAAK;AAC3B,aAAK,SAAS;AACd,aAAK,IAAI3G,IAAG;AACZ,aAAK,IAAI;AACT,eAAO;AAAA,MACR;AAED,YAAM,MAAM,IAAI,MAAMA,MAAK,OAAO,KAAK2G,MAAK,MAAM;AAGlD,UAAI,IAAI,SAAS,KAAK,MAAM;AAC1B,YAAI,KAAK;AACP,eAAK,SAAS3G,MAAK,KAAK;AAE1B,eAAO;AAAA,MACR;AAED,WAAK,WAAW,IAAI;AACpB,WAAK,UAAU,QAAQ,GAAG;AAC1B,WAAK,OAAO,IAAIA,MAAK,KAAK,UAAU,IAAI;AACxC,WAAK,IAAI;AACT,aAAO;AAAA,IACR;AAAA,IAED,IAAKA,MAAK;AACR,UAAI,CAAC,KAAK,OAAO,IAAIA,IAAG;AAAG,eAAO;AAClC,YAAM,MAAM,KAAK,OAAO,IAAIA,IAAG,EAAE;AACjC,aAAO,CAAC,QAAQ,MAAM,GAAG;AAAA,IAC1B;AAAA,IAED,IAAKA,MAAK;AACR,aAAOgc,MAAI,MAAMhc,MAAK,IAAI;AAAA,IAC3B;AAAA,IAED,KAAMA,MAAK;AACT,aAAOgc,MAAI,MAAMhc,MAAK,KAAK;AAAA,IAC5B;AAAA,IAED,MAAO;AACL,YAAMa,QAAO,KAAK,UAAU;AAC5B,UAAI,CAACA;AACH,eAAO;AAET,UAAI,MAAMA,KAAI;AACd,aAAOA,MAAK;AAAA,IACb;AAAA,IAED,IAAKb,MAAK;AACR,UAAI,MAAM,KAAK,OAAO,IAAIA,IAAG,CAAC;AAAA,IAC/B;AAAA,IAED,KAAM,KAAK;AAET,WAAK,MAAO;AAEZ,YAAM2G,OAAM,KAAK,IAAK;AAEtB,eAASuQ,KAAI,IAAI,SAAS,GAAGA,MAAK,GAAGA,MAAK;AACxC,cAAM,MAAM,IAAIA;AAChB,cAAM,YAAY,IAAI,KAAK;AAC3B,YAAI,cAAc;AAEhB,eAAK,IAAI,IAAI,GAAG,IAAI,CAAC;AAAA,aAClB;AACH,gBAAM,SAAS,YAAYvQ;AAE3B,cAAI,SAAS,GAAG;AACd,iBAAK,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAED,QAAS;AACP,WAAK,OAAO,QAAQ,CAAC,OAAO3G,SAAQgc,MAAI,MAAMhc,MAAK,KAAK,CAAC;AAAA,IAC1D;AAAA,EACH;AAEA,QAAMgc,QAAM,CAAC7b,OAAMH,MAAK,UAAU;AAChC,UAAMa,QAAOV,MAAK,OAAO,IAAIH,IAAG;AAChC,QAAIa,OAAM;AACR,YAAM,MAAMA,MAAK;AACjB,UAAI,QAAQV,OAAM,GAAG,GAAG;AACtB,YAAIA,OAAMU,KAAI;AACd,YAAI,CAACV,MAAK;AACR,iBAAO;AAAA,MACf,OAAW;AACL,YAAI,OAAO;AACT,cAAIA,MAAK;AACP,YAAAU,MAAK,MAAM,MAAM,KAAK,IAAK;AAC7B,UAAAV,MAAK,UAAU,YAAYU,KAAI;AAAA,QAChC;AAAA,MACF;AACD,aAAO,IAAI;AAAA,IACZ;AAAA,EACH;AAEA,QAAM,UAAU,CAACV,OAAM,QAAQ;AAC7B,QAAI,CAAC,OAAQ,CAAC,IAAI,UAAU,CAACA,MAAK;AAChC,aAAO;AAET,UAAM8D,QAAO,KAAK,IAAK,IAAG,IAAI;AAC9B,WAAO,IAAI,SAASA,QAAO,IAAI,SAC3B9D,MAAK,YAAa8D,QAAO9D,MAAK;AAAA,EACpC;AAEA,QAAM,OAAO,CAAAA,UAAQ;AACnB,QAAIA,MAAK,UAAUA,MAAK,MAAM;AAC5B,eAAS,SAASA,MAAK,UAAU,MAC/BA,MAAK,UAAUA,MAAK,QAAQ,WAAW,QAAO;AAI9C,cAAMkF,QAAO,OAAO;AACpB,YAAIlF,OAAM,MAAM;AAChB,iBAASkF;AAAA,MACV;AAAA,IACF;AAAA,EACH;AAEA,QAAM,MAAM,CAAClF,OAAMU,UAAS;AAC1B,QAAIA,OAAM;AACR,YAAM,MAAMA,MAAK;AACjB,UAAIV,MAAK;AACP,QAAAA,MAAK,SAAS,IAAI,KAAK,IAAI,KAAK;AAElC,MAAAA,MAAK,WAAW,IAAI;AACpB,MAAAA,MAAK,OAAO,OAAO,IAAI,GAAG;AAC1B,MAAAA,MAAK,UAAU,WAAWU,KAAI;AAAA,IAC/B;AAAA,EACH;AAEA,QAAM,MAAM;AAAA,IACV,YAAab,MAAK,OAAO8O,SAAQnI,MAAK,QAAQ;AAC5C,WAAK,MAAM3G;AACX,WAAK,QAAQ;AACb,WAAK,SAAS8O;AACd,WAAK,MAAMnI;AACX,WAAK,SAAS,UAAU;AAAA,IACzB;AAAA,EACH;AAEA,QAAM,cAAc,CAACxG,OAAM,IAAIU,OAAM,UAAU;AAC7C,QAAI,MAAMA,MAAK;AACf,QAAI,QAAQV,OAAM,GAAG,GAAG;AACtB,UAAIA,OAAMU,KAAI;AACd,UAAI,CAACV,MAAK;AACR,cAAM;AAAA,IACT;AACD,QAAI;AACF,SAAG,KAAK,OAAO,IAAI,OAAO,IAAI,KAAKA,KAAI;AAAA,EAC3C;AAEA,MAAA,WAAiB;;;;;;;AC5UjB,UAAMyQ,OAAM;AAAA,MACV,YAAalM,QAAO,SAAS;AAC3B,kBAAUwtB,cAAa,OAAO;AAE9B,YAAIxtB,kBAAiBkM,QAAO;AAC1B,cACElM,OAAM,UAAU,CAAC,CAAC,QAAQ,SAC1BA,OAAM,sBAAsB,CAAC,CAAC,QAAQ,mBACtC;AACA,mBAAOA;AAAA,UACf,OAAa;AACL,mBAAO,IAAIkM,OAAMlM,OAAM,KAAK,OAAO;AAAA,UACpC;AAAA,QACF;AAED,YAAIA,kBAAiB6uB,aAAY;AAE/B,eAAK,MAAM7uB,OAAM;AACjB,eAAK,MAAM,CAAC,CAACA,MAAK,CAAC;AACnB,eAAK,OAAQ;AACb,iBAAO;AAAA,QACR;AAED,aAAK,UAAU;AACf,aAAK,QAAQ,CAAC,CAAC,QAAQ;AACvB,aAAK,oBAAoB,CAAC,CAAC,QAAQ;AAGnC,aAAK,MAAMA;AACX,aAAK,MAAMA,OACR,MAAM,IAAI,EAEV,IAAI,CAAAlB,OAAK,KAAK,WAAWA,GAAE,KAAI,CAAE,CAAC,EAIlC,OAAO,OAAK,EAAE,MAAM;AAEvB,YAAI,CAAC,KAAK,IAAI,QAAQ;AACpB,gBAAM,IAAI,UAAU,yBAAyBkB,QAAO;AAAA,QACrD;AAGD,YAAI,KAAK,IAAI,SAAS,GAAG;AAEvB,gBAAM,QAAQ,KAAK,IAAI;AACvB,eAAK,MAAM,KAAK,IAAI,OAAO,OAAK,CAAC,UAAU,EAAE,EAAE,CAAC;AAChD,cAAI,KAAK,IAAI,WAAW,GAAG;AACzB,iBAAK,MAAM,CAAC,KAAK;AAAA,UAClB,WAAU,KAAK,IAAI,SAAS,GAAG;AAE9B,uBAAW,KAAK,KAAK,KAAK;AACxB,kBAAI,EAAE,WAAW,KAAK,MAAM,EAAE,EAAE,GAAG;AACjC,qBAAK,MAAM,CAAC,CAAC;AACb;AAAA,cACD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAED,aAAK,OAAQ;AAAA,MACd;AAAA,MAED,SAAU;AACR,aAAK,QAAQ,KAAK,IACf,IAAI,CAAC,UAAU;AACd,iBAAO,MAAM,KAAK,GAAG,EAAE,KAAM;AAAA,QACrC,CAAO,EACA,KAAK,IAAI,EACT,KAAM;AACT,eAAO,KAAK;AAAA,MACb;AAAA,MAED,WAAY;AACV,eAAO,KAAK;AAAA,MACb;AAAA,MAED,WAAYA,QAAO;AACjB,QAAAA,SAAQA,OAAM,KAAM;AAIpB,cAAM,WAAW,OAAO,KAAK,KAAK,OAAO,EAAE,KAAK,GAAG;AACnD,cAAM,UAAU,cAAc,YAAYA;AAC1C,cAAM,SAAS,MAAM,IAAI,OAAO;AAChC,YAAI,QAAQ;AACV,iBAAO;AAAA,QACR;AAED,cAAM,QAAQ,KAAK,QAAQ;AAE3B,cAAM,KAAK,QAAQX,IAAGwV,GAAE,oBAAoBxV,IAAGwV,GAAE;AACjD,QAAA7U,SAAQA,OAAM,QAAQ,IAAI,cAAc,KAAK,QAAQ,iBAAiB,CAAC;AACvE,QAAAkK,OAAM,kBAAkBlK,MAAK;AAE7B,QAAAA,SAAQA,OAAM,QAAQX,IAAGwV,GAAE,iBAAiB,qBAAqB;AACjE,QAAA3K,OAAM,mBAAmBlK,MAAK;AAG9B,QAAAA,SAAQA,OAAM,QAAQX,IAAGwV,GAAE,YAAY,gBAAgB;AAGvD,QAAA7U,SAAQA,OAAM,QAAQX,IAAGwV,GAAE,YAAY,gBAAgB;AAGvD,QAAA7U,SAAQA,OAAM,MAAM,KAAK,EAAE,KAAK,GAAG;AAKnC,YAAI,YAAYA,OACb,MAAM,GAAG,EACT,IAAI,CAAAqrB,UAAQ,gBAAgBA,OAAM,KAAK,OAAO,CAAC,EAC/C,KAAK,GAAG,EACR,MAAM,KAAK,EAEX,IAAI,CAAAA,UAAQ,YAAYA,OAAM,KAAK,OAAO,CAAC;AAE9C,YAAI,OAAO;AAET,sBAAY,UAAU,OAAO,CAAAA,UAAQ;AACnC,YAAAnhB,OAAM,wBAAwBmhB,OAAM,KAAK,OAAO;AAChD,mBAAO,CAAC,CAACA,MAAK,MAAMhsB,IAAGwV,GAAE,gBAAgB;AAAA,UACjD,CAAO;AAAA,QACF;AACD,QAAA3K,OAAM,cAAc,SAAS;AAK7B,cAAM,WAAW,oBAAI,IAAK;AAC1B,cAAM,cAAc,UAAU,IAAI,CAAAmhB,UAAQ,IAAIwD,YAAWxD,OAAM,KAAK,OAAO,CAAC;AAC5E,mBAAWA,SAAQ,aAAa;AAC9B,cAAI,UAAUA,KAAI,GAAG;AACnB,mBAAO,CAACA,KAAI;AAAA,UACb;AACD,mBAAS,IAAIA,MAAK,OAAOA,KAAI;AAAA,QAC9B;AACD,YAAI,SAAS,OAAO,KAAK,SAAS,IAAI,EAAE,GAAG;AACzC,mBAAS,OAAO,EAAE;AAAA,QACnB;AAED,cAAM,SAAS,CAAC,GAAG,SAAS,OAAM,CAAE;AACpC,cAAM,IAAI,SAAS,MAAM;AACzB,eAAO;AAAA,MACR;AAAA,MAED,WAAYrrB,QAAO,SAAS;AAC1B,YAAI,EAAEA,kBAAiBkM,SAAQ;AAC7B,gBAAM,IAAI,UAAU,qBAAqB;AAAA,QAC1C;AAED,eAAO,KAAK,IAAI,KAAK,CAAC,oBAAoB;AACxC,iBACE,cAAc,iBAAiB,OAAO,KACtClM,OAAM,IAAI,KAAK,CAAC,qBAAqB;AACnC,mBACE,cAAc,kBAAkB,OAAO,KACvC,gBAAgB,MAAM,CAAC,mBAAmB;AACxC,qBAAO,iBAAiB,MAAM,CAAC,oBAAoB;AACjD,uBAAO,eAAe,WAAW,iBAAiB,OAAO;AAAA,cACzE,CAAe;AAAA,YACf,CAAa;AAAA,UAEb,CAAS;AAAA,QAET,CAAK;AAAA,MACF;AAAA,MAGD,KAAM8N,UAAS;AACb,YAAI,CAACA,UAAS;AACZ,iBAAO;AAAA,QACR;AAED,YAAI,OAAOA,aAAY,UAAU;AAC/B,cAAI;AACF,YAAAA,WAAU,IAAI6f,QAAO7f,UAAS,KAAK,OAAO;AAAA,UAC3C,SAAQ,IAAP;AACA,mBAAO;AAAA,UACR;AAAA,QACF;AAED,iBAASvS,KAAI,GAAGA,KAAI,KAAK,IAAI,QAAQA,MAAK;AACxC,cAAI,QAAQ,KAAK,IAAIA,KAAIuS,UAAS,KAAK,OAAO,GAAG;AAC/C,mBAAO;AAAA,UACR;AAAA,QACF;AACD,eAAO;AAAA,MACR;AAAA,IACF;AACD,YAAiB5B;AAEjB,UAAM,MAAM9I;AACZ,UAAM,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,CAAE;AAEnC,UAAMoqB,gBAAe9b;AACrB,UAAMmd,cAAa5qB,kBAAuB;AAC1C,UAAMiG,SAAQ4I;AACd,UAAM6a,UAAS5a;AACf,UAAM;AAAA,MACJ,IAAA1T;AAAA,MACA,GAAAwV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI8K,KAAyB;AAE7B,UAAM,YAAY,OAAK,EAAE,UAAU;AACnC,UAAM,QAAQ,OAAK,EAAE,UAAU;AAI/B,UAAM,gBAAgB,CAAC,aAAa,YAAY;AAC9C,UAAI,SAAS;AACb,YAAM,uBAAuB,YAAY,MAAO;AAChD,UAAI,iBAAiB,qBAAqB,IAAK;AAE/C,aAAO,UAAU,qBAAqB,QAAQ;AAC5C,iBAAS,qBAAqB,MAAM,CAAC,oBAAoB;AACvD,iBAAO,eAAe,WAAW,iBAAiB,OAAO;AAAA,QAC/D,CAAK;AAED,yBAAiB,qBAAqB,IAAK;AAAA,MAC5C;AAED,aAAO;AAAA,IACR;AAKD,UAAM,kBAAkB,CAAC0L,OAAM,YAAY;AACzC,MAAAnhB,OAAM,QAAQmhB,OAAM,OAAO;AAC3B,MAAAA,QAAO,cAAcA,OAAM,OAAO;AAClC,MAAAnhB,OAAM,SAASmhB,KAAI;AACnB,MAAAA,QAAO,cAAcA,OAAM,OAAO;AAClC,MAAAnhB,OAAM,UAAUmhB,KAAI;AACpB,MAAAA,QAAO,eAAeA,OAAM,OAAO;AACnC,MAAAnhB,OAAM,UAAUmhB,KAAI;AACpB,MAAAA,QAAO,aAAaA,OAAM,OAAO;AACjC,MAAAnhB,OAAM,SAASmhB,KAAI;AACnB,aAAOA;AAAA,IACR;AAED,UAAM,MAAM,CAAA5rB,QAAM,CAACA,OAAMA,IAAG,YAAa,MAAK,OAAOA,QAAO;AAS5D,UAAM,gBAAgB,CAAC4rB,OAAM,YAC3BA,MAAK,KAAI,EAAG,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM;AAClC,aAAO,aAAa,GAAG,OAAO;AAAA,IAClC,CAAG,EAAE,KAAK,GAAG;AAEb,UAAM,eAAe,CAACA,OAAM,YAAY;AACtC,YAAMvsB,KAAI,QAAQ,QAAQO,IAAGwV,GAAE,cAAcxV,IAAGwV,GAAE;AAClD,aAAOwW,MAAK,QAAQvsB,IAAG,CAAClC,IAAG8Y,IAAG/X,IAAGrB,IAAGwyB,QAAO;AACzC,QAAA5kB,OAAM,SAASmhB,OAAMzuB,IAAG8Y,IAAG/X,IAAGrB,IAAGwyB,GAAE;AACnC,YAAI;AAEJ,YAAI,IAAIpZ,EAAC,GAAG;AACV,gBAAM;AAAA,QACZ,WAAe,IAAI/X,EAAC,GAAG;AACjB,gBAAM,KAAK+X,WAAU,CAACA,KAAI;AAAA,QAChC,WAAe,IAAIpZ,EAAC,GAAG;AAEjB,gBAAM,KAAKoZ,MAAK/X,SAAQ+X,MAAK,CAAC/X,KAAI;AAAA,QACnC,WAAUmxB,KAAI;AACb,UAAA5kB,OAAM,mBAAmB4kB,GAAE;AAC3B,gBAAM,KAAKpZ,MAAK/X,MAAKrB,MAAKwyB,QACrBpZ,MAAK,CAAC/X,KAAI;AAAA,QACrB,OAAW;AAEL,gBAAM,KAAK+X,MAAK/X,MAAKrB,OAChBoZ,MAAK,CAAC/X,KAAI;AAAA,QAChB;AAED,QAAAuM,OAAM,gBAAgB,GAAG;AACzB,eAAO;AAAA,MACX,CAAG;AAAA,IACF;AAUD,UAAM,gBAAgB,CAACmhB,OAAM,YAC3BA,MAAK,KAAI,EAAG,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM;AAClC,aAAO,aAAa,GAAG,OAAO;AAAA,IAClC,CAAG,EAAE,KAAK,GAAG;AAEb,UAAM,eAAe,CAACA,OAAM,YAAY;AACtC,MAAAnhB,OAAM,SAASmhB,OAAM,OAAO;AAC5B,YAAMvsB,KAAI,QAAQ,QAAQO,IAAGwV,GAAE,cAAcxV,IAAGwV,GAAE;AAClD,YAAMxC,KAAI,QAAQ,oBAAoB,OAAO;AAC7C,aAAOgZ,MAAK,QAAQvsB,IAAG,CAAClC,IAAG8Y,IAAG/X,IAAGrB,IAAGwyB,QAAO;AACzC,QAAA5kB,OAAM,SAASmhB,OAAMzuB,IAAG8Y,IAAG/X,IAAGrB,IAAGwyB,GAAE;AACnC,YAAI;AAEJ,YAAI,IAAIpZ,EAAC,GAAG;AACV,gBAAM;AAAA,QACZ,WAAe,IAAI/X,EAAC,GAAG;AACjB,gBAAM,KAAK+X,SAAQrD,OAAM,CAACqD,KAAI;AAAA,QACpC,WAAe,IAAIpZ,EAAC,GAAG;AACjB,cAAIoZ,OAAM,KAAK;AACb,kBAAM,KAAKA,MAAK/X,OAAM0U,OAAMqD,MAAK,CAAC/X,KAAI;AAAA,UAC9C,OAAa;AACL,kBAAM,KAAK+X,MAAK/X,OAAM0U,OAAM,CAACqD,KAAI;AAAA,UAClC;AAAA,QACF,WAAUoZ,KAAI;AACb,UAAA5kB,OAAM,mBAAmB4kB,GAAE;AAC3B,cAAIpZ,OAAM,KAAK;AACb,gBAAI/X,OAAM,KAAK;AACb,oBAAM,KAAK+X,MAAK/X,MAAKrB,MAAKwyB,QACrBpZ,MAAK/X,MAAK,CAACrB,KAAI;AAAA,YAC9B,OAAe;AACL,oBAAM,KAAKoZ,MAAK/X,MAAKrB,MAAKwyB,QACrBpZ,MAAK,CAAC/X,KAAI;AAAA,YAChB;AAAA,UACT,OAAa;AACL,kBAAM,KAAK+X,MAAK/X,MAAKrB,MAAKwyB,QACrB,CAACpZ,KAAI;AAAA,UACX;AAAA,QACP,OAAW;AACL,UAAAxL,OAAM,OAAO;AACb,cAAIwL,OAAM,KAAK;AACb,gBAAI/X,OAAM,KAAK;AACb,oBAAM,KAAK+X,MAAK/X,MAAKrB,KAClB+V,OAAMqD,MAAK/X,MAAK,CAACrB,KAAI;AAAA,YAClC,OAAe;AACL,oBAAM,KAAKoZ,MAAK/X,MAAKrB,KAClB+V,OAAMqD,MAAK,CAAC/X,KAAI;AAAA,YACpB;AAAA,UACT,OAAa;AACL,kBAAM,KAAK+X,MAAK/X,MAAKrB,OAChB,CAACoZ,KAAI;AAAA,UACX;AAAA,QACF;AAED,QAAAxL,OAAM,gBAAgB,GAAG;AACzB,eAAO;AAAA,MACX,CAAG;AAAA,IACF;AAED,UAAM,iBAAiB,CAACmhB,OAAM,YAAY;AACxC,MAAAnhB,OAAM,kBAAkBmhB,OAAM,OAAO;AACrC,aAAOA,MAAK,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM;AAClC,eAAO,cAAc,GAAG,OAAO;AAAA,MACnC,CAAG,EAAE,KAAK,GAAG;AAAA,IACZ;AAED,UAAM,gBAAgB,CAACA,OAAM,YAAY;AACvC,MAAAA,QAAOA,MAAK,KAAM;AAClB,YAAMvsB,KAAI,QAAQ,QAAQO,IAAGwV,GAAE,eAAexV,IAAGwV,GAAE;AACnD,aAAOwW,MAAK,QAAQvsB,IAAG,CAAC,KAAK,MAAM4W,IAAG/X,IAAGrB,IAAGwyB,QAAO;AACjD,QAAA5kB,OAAM,UAAUmhB,OAAM,KAAK,MAAM3V,IAAG/X,IAAGrB,IAAGwyB,GAAE;AAC5C,cAAM,KAAK,IAAIpZ,EAAC;AAChB,cAAM,KAAK,MAAM,IAAI/X,EAAC;AACtB,cAAM,KAAK,MAAM,IAAIrB,EAAC;AACtB,cAAM,OAAO;AAEb,YAAI,SAAS,OAAO,MAAM;AACxB,iBAAO;AAAA,QACR;AAID,QAAAwyB,MAAK,QAAQ,oBAAoB,OAAO;AAExC,YAAI,IAAI;AACN,cAAI,SAAS,OAAO,SAAS,KAAK;AAEhC,kBAAM;AAAA,UACd,OAAa;AAEL,kBAAM;AAAA,UACP;AAAA,QACP,WAAe,QAAQ,MAAM;AAGvB,cAAI,IAAI;AACN,YAAAnxB,KAAI;AAAA,UACL;AACD,UAAArB,KAAI;AAEJ,cAAI,SAAS,KAAK;AAGhB,mBAAO;AACP,gBAAI,IAAI;AACN,cAAAoZ,KAAI,CAACA,KAAI;AACT,cAAA/X,KAAI;AACJ,cAAArB,KAAI;AAAA,YACd,OAAe;AACL,cAAAqB,KAAI,CAACA,KAAI;AACT,cAAArB,KAAI;AAAA,YACL;AAAA,UACT,WAAiB,SAAS,MAAM;AAGxB,mBAAO;AACP,gBAAI,IAAI;AACN,cAAAoZ,KAAI,CAACA,KAAI;AAAA,YACnB,OAAe;AACL,cAAA/X,KAAI,CAACA,KAAI;AAAA,YACV;AAAA,UACF;AAED,cAAI,SAAS,KAAK;AAChB,YAAAmxB,MAAK;AAAA,UACN;AAED,gBAAM,GAAG,OAAOpZ,MAAK/X,MAAKrB,KAAIwyB;AAAA,QAC/B,WAAU,IAAI;AACb,gBAAM,KAAKpZ,SAAQoZ,QAAO,CAACpZ,KAAI;AAAA,QAChC,WAAU,IAAI;AACb,gBAAM,KAAKA,MAAK/X,OAAMmxB,QACjBpZ,MAAK,CAAC/X,KAAI;AAAA,QAChB;AAED,QAAAuM,OAAM,iBAAiB,GAAG;AAE1B,eAAO;AAAA,MACX,CAAG;AAAA,IACF;AAID,UAAM,eAAe,CAACmhB,OAAM,YAAY;AACtC,MAAAnhB,OAAM,gBAAgBmhB,OAAM,OAAO;AAEnC,aAAOA,MAAK,KAAI,EAAG,QAAQhsB,IAAGwV,GAAE,OAAO,EAAE;AAAA,IAC1C;AAED,UAAM,cAAc,CAACwW,OAAM,YAAY;AACrC,MAAAnhB,OAAM,eAAemhB,OAAM,OAAO;AAClC,aAAOA,MAAK,KAAM,EACf,QAAQhsB,IAAG,QAAQ,oBAAoBwV,GAAE,UAAUA,GAAE,OAAO,EAAE;AAAA,IAClE;AAOD,UAAM,gBAAgB,WAAS,CAAC,IAC9B5Y,OAAM,IAAI,IAAI,IAAI,KAAK8yB,KACvB,IAAI,IAAI,IAAI,IAAI,KAAKlC,QAAO;AAC5B,UAAI,IAAI,EAAE,GAAG;AACX,QAAA5wB,QAAO;AAAA,MACX,WAAa,IAAI,EAAE,GAAG;AAClB,QAAAA,QAAO,KAAK,SAAS,QAAQ,OAAO;AAAA,MACxC,WAAa,IAAI,EAAE,GAAG;AAClB,QAAAA,QAAO,KAAK,MAAM,OAAO,QAAQ,OAAO;AAAA,MACzC,WAAU,KAAK;AACd,QAAAA,QAAO,KAAKA;AAAA,MAChB,OAAS;AACL,QAAAA,QAAO,KAAKA,QAAO,QAAQ,OAAO;AAAA,MACnC;AAED,UAAI,IAAI,EAAE,GAAG;AACX,aAAK;AAAA,MACT,WAAa,IAAI,EAAE,GAAG;AAClB,aAAK,IAAI,CAAC,KAAK;AAAA,MACnB,WAAa,IAAI,EAAE,GAAG;AAClB,aAAK,IAAI,MAAM,CAAC,KAAK;AAAA,MACtB,WAAU,KAAK;AACd,aAAK,KAAK,MAAM,MAAM,MAAM;AAAA,MAC7B,WAAU,OAAO;AAChB,aAAK,IAAI,MAAM,MAAM,CAAC,KAAK;AAAA,MAC/B,OAAS;AACL,aAAK,KAAK;AAAA,MACX;AAED,aAAQ,GAAGA,SAAQ,KAAM,KAAM;AAAA,IAChC;AAED,UAAM,UAAU,CAACU,MAAKmR,UAAS,YAAY;AACzC,eAASvS,KAAI,GAAGA,KAAIoB,KAAI,QAAQpB,MAAK;AACnC,YAAI,CAACoB,KAAIpB,IAAG,KAAKuS,QAAO,GAAG;AACzB,iBAAO;AAAA,QACR;AAAA,MACF;AAED,UAAIA,SAAQ,WAAW,UAAU,CAAC,QAAQ,mBAAmB;AAM3D,iBAASvS,KAAI,GAAGA,KAAIoB,KAAI,QAAQpB,MAAK;AACnC,UAAA2O,OAAMvN,KAAIpB,IAAG,MAAM;AACnB,cAAIoB,KAAIpB,IAAG,WAAWszB,YAAW,KAAK;AACpC;AAAA,UACD;AAED,cAAIlyB,KAAIpB,IAAG,OAAO,WAAW,SAAS,GAAG;AACvC,kBAAM,UAAUoB,KAAIpB,IAAG;AACvB,gBAAI,QAAQ,UAAUuS,SAAQ,SAC1B,QAAQ,UAAUA,SAAQ,SAC1B,QAAQ,UAAUA,SAAQ,OAAO;AACnC,qBAAO;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAGD,eAAO;AAAA,MACR;AAED,aAAO;AAAA,IACT;;;;;;;;;ACzgBA,UAAMkhB,OAAM,OAAO,YAAY;AAE/B,UAAMH,YAAW;AAAA,MACf,WAAW,MAAO;AAChB,eAAOG;AAAA,MACR;AAAA,MAED,YAAa3D,OAAM,SAAS;AAC1B,kBAAUmC,cAAa,OAAO;AAE9B,YAAInC,iBAAgBwD,aAAY;AAC9B,cAAIxD,MAAK,UAAU,CAAC,CAAC,QAAQ,OAAO;AAClC,mBAAOA;AAAA,UACf,OAAa;AACL,YAAAA,QAAOA,MAAK;AAAA,UACb;AAAA,QACF;AAED,QAAAnhB,OAAM,cAAcmhB,OAAM,OAAO;AACjC,aAAK,UAAU;AACf,aAAK,QAAQ,CAAC,CAAC,QAAQ;AACvB,aAAK,MAAMA,KAAI;AAEf,YAAI,KAAK,WAAW2D,MAAK;AACvB,eAAK,QAAQ;AAAA,QACnB,OAAW;AACL,eAAK,QAAQ,KAAK,WAAW,KAAK,OAAO;AAAA,QAC1C;AAED,QAAA9kB,OAAM,QAAQ,IAAI;AAAA,MACnB;AAAA,MAED,MAAOmhB,OAAM;AACX,cAAMvsB,KAAI,KAAK,QAAQ,QAAQO,IAAGwV,GAAE,mBAAmBxV,IAAGwV,GAAE;AAC5D,cAAMlX,KAAI0tB,MAAK,MAAMvsB,EAAC;AAEtB,YAAI,CAACnB,IAAG;AACN,gBAAM,IAAI,UAAU,uBAAuB0tB,OAAM;AAAA,QAClD;AAED,aAAK,WAAW1tB,GAAE,OAAO,SAAYA,GAAE,KAAK;AAC5C,YAAI,KAAK,aAAa,KAAK;AACzB,eAAK,WAAW;AAAA,QACjB;AAGD,YAAI,CAACA,GAAE,IAAI;AACT,eAAK,SAASqxB;AAAA,QACpB,OAAW;AACL,eAAK,SAAS,IAAIrB,QAAOhwB,GAAE,IAAI,KAAK,QAAQ,KAAK;AAAA,QAClD;AAAA,MACF;AAAA,MAED,WAAY;AACV,eAAO,KAAK;AAAA,MACb;AAAA,MAED,KAAMmQ,UAAS;AACb,QAAA5D,OAAM,mBAAmB4D,UAAS,KAAK,QAAQ,KAAK;AAEpD,YAAI,KAAK,WAAWkhB,QAAOlhB,aAAYkhB,MAAK;AAC1C,iBAAO;AAAA,QACR;AAED,YAAI,OAAOlhB,aAAY,UAAU;AAC/B,cAAI;AACF,YAAAA,WAAU,IAAI6f,QAAO7f,UAAS,KAAK,OAAO;AAAA,UAC3C,SAAQ,IAAP;AACA,mBAAO;AAAA,UACR;AAAA,QACF;AAED,eAAOzP,KAAIyP,UAAS,KAAK,UAAU,KAAK,QAAQ,KAAK,OAAO;AAAA,MAC7D;AAAA,MAED,WAAYud,OAAM,SAAS;AACzB,YAAI,EAAEA,iBAAgBwD,cAAa;AACjC,gBAAM,IAAI,UAAU,0BAA0B;AAAA,QAC/C;AAED,YAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,oBAAU;AAAA,YACR,OAAO,CAAC,CAAC;AAAA,YACT,mBAAmB;AAAA,UACpB;AAAA,QACF;AAED,YAAI,KAAK,aAAa,IAAI;AACxB,cAAI,KAAK,UAAU,IAAI;AACrB,mBAAO;AAAA,UACR;AACD,iBAAO,IAAI3iB,OAAMmf,MAAK,OAAO,OAAO,EAAE,KAAK,KAAK,KAAK;AAAA,QAC3D,WAAeA,MAAK,aAAa,IAAI;AAC/B,cAAIA,MAAK,UAAU,IAAI;AACrB,mBAAO;AAAA,UACR;AACD,iBAAO,IAAInf,OAAM,KAAK,OAAO,OAAO,EAAE,KAAKmf,MAAK,MAAM;AAAA,QACvD;AAED,cAAM,2BACH,KAAK,aAAa,QAAQ,KAAK,aAAa,SAC5CA,MAAK,aAAa,QAAQA,MAAK,aAAa;AAC/C,cAAM,2BACH,KAAK,aAAa,QAAQ,KAAK,aAAa,SAC5CA,MAAK,aAAa,QAAQA,MAAK,aAAa;AAC/C,cAAM,aAAa,KAAK,OAAO,YAAYA,MAAK,OAAO;AACvD,cAAM,gCACH,KAAK,aAAa,QAAQ,KAAK,aAAa,UAC5CA,MAAK,aAAa,QAAQA,MAAK,aAAa;AAC/C,cAAM,6BACJhtB,KAAI,KAAK,QAAQ,KAAKgtB,MAAK,QAAQ,OAAO,MACzC,KAAK,aAAa,QAAQ,KAAK,aAAa,SAC1CA,MAAK,aAAa,QAAQA,MAAK,aAAa;AACjD,cAAM,gCACJhtB,KAAI,KAAK,QAAQ,KAAKgtB,MAAK,QAAQ,OAAO,MACzC,KAAK,aAAa,QAAQ,KAAK,aAAa,SAC1CA,MAAK,aAAa,QAAQA,MAAK,aAAa;AAEjD,eACE,2BACA,2BACC,cAAc,gCACf,8BACA;AAAA,MAEH;AAAA,IACF;AAED,iBAAiBwD;AAEjB,UAAMrB,gBAAepqB;AACrB,UAAM,EAAE,IAAA/D,KAAI,GAAAwV,GAAC,IAAKnD,KAAyB;AAC3C,UAAMrT,OAAM4F;AACZ,UAAMiG,SAAQ4I;AACd,UAAM6a,UAAS5a;AACf,UAAM7G,SAAQyT,aAAA;;;ACvId,QAAMzT,UAAQ9I,aAA2B;AACzC,QAAM6rB,cAAY,CAACnhB,UAAS9N,QAAO,YAAY;AAC7C,QAAI;AACF,MAAAA,SAAQ,IAAIkM,QAAMlM,QAAO,OAAO;AAAA,IACjC,SAAQ,IAAP;AACA,aAAO;AAAA,IACR;AACD,WAAOA,OAAM,KAAK8N,QAAO;AAAA,EAC3B;AACA,MAAA,cAAiBmhB;ACTjB,QAAM/iB,UAAQ9I,aAA2B;AAGzC,QAAM8rB,kBAAgB,CAAClvB,QAAO,YAC5B,IAAIkM,QAAMlM,QAAO,OAAO,EAAE,IACvB,IAAI,CAAAqrB,UAAQA,MAAK,IAAI,OAAK,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,KAAM,EAAC,MAAM,GAAG,CAAC;AAEnE,MAAA,kBAAiB6D;ACPjB,QAAMvB,WAASvqB;AACf,QAAM8I,UAAQwF,aAA2B;AAEzC,QAAMyd,kBAAgB,CAAC,UAAUnvB,QAAO,YAAY;AAClD,QAAIhC,OAAM;AACV,QAAI,QAAQ;AACZ,QAAI,WAAW;AACf,QAAI;AACF,iBAAW,IAAIkO,QAAMlM,QAAO,OAAO;AAAA,IACpC,SAAQ,IAAP;AACA,aAAO;AAAA,IACR;AACD,aAAS,QAAQ,CAACsU,OAAM;AACtB,UAAI,SAAS,KAAKA,EAAC,GAAG;AAEpB,YAAI,CAACtW,QAAO,MAAM,QAAQsW,EAAC,MAAM,IAAI;AAEnC,UAAAtW,OAAMsW;AACN,kBAAQ,IAAIqZ,SAAO3vB,MAAK,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACL,CAAG;AACD,WAAOA;AAAA,EACT;AACA,MAAA,kBAAiBmxB;ACxBjB,QAAMxB,WAASvqB;AACf,QAAM8I,UAAQwF,aAA2B;AACzC,QAAM0d,kBAAgB,CAAC,UAAUpvB,QAAO,YAAY;AAClD,QAAIjC,OAAM;AACV,QAAI,QAAQ;AACZ,QAAI,WAAW;AACf,QAAI;AACF,iBAAW,IAAImO,QAAMlM,QAAO,OAAO;AAAA,IACpC,SAAQ,IAAP;AACA,aAAO;AAAA,IACR;AACD,aAAS,QAAQ,CAACsU,OAAM;AACtB,UAAI,SAAS,KAAKA,EAAC,GAAG;AAEpB,YAAI,CAACvW,QAAO,MAAM,QAAQuW,EAAC,MAAM,GAAG;AAElC,UAAAvW,OAAMuW;AACN,kBAAQ,IAAIqZ,SAAO5vB,MAAK,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACL,CAAG;AACD,WAAOA;AAAA,EACT;AACA,MAAA,kBAAiBqxB;ACvBjB,QAAMzB,WAASvqB;AACf,QAAM8I,UAAQwF,aAA2B;AACzC,QAAMgO,OAAKzb;AAEX,QAAMorB,eAAa,CAACrvB,QAAO,UAAU;AACnC,IAAAA,SAAQ,IAAIkM,QAAMlM,QAAO,KAAK;AAE9B,QAAI,SAAS,IAAI2tB,SAAO,OAAO;AAC/B,QAAI3tB,OAAM,KAAK,MAAM,GAAG;AACtB,aAAO;AAAA,IACR;AAED,aAAS,IAAI2tB,SAAO,SAAS;AAC7B,QAAI3tB,OAAM,KAAK,MAAM,GAAG;AACtB,aAAO;AAAA,IACR;AAED,aAAS;AACT,aAASzE,KAAI,GAAGA,KAAIyE,OAAM,IAAI,QAAQ,EAAEzE,IAAG;AACzC,YAAM,cAAcyE,OAAM,IAAIzE;AAE9B,UAAI,SAAS;AACb,kBAAY,QAAQ,CAAC+zB,gBAAe;AAElC,cAAM,UAAU,IAAI3B,SAAO2B,YAAW,OAAO,OAAO;AACpD,gBAAQA,YAAW,UAAQ;AAAA,UACzB,KAAK;AACH,gBAAI,QAAQ,WAAW,WAAW,GAAG;AACnC,sBAAQ;AAAA,YACpB,OAAiB;AACL,sBAAQ,WAAW,KAAK,CAAC;AAAA,YAC1B;AACD,oBAAQ,MAAM,QAAQ,OAAQ;AAAA,UAEhC,KAAK;AAAA,UACL,KAAK;AACH,gBAAI,CAAC,UAAU5P,KAAG,SAAS,MAAM,GAAG;AAClC,uBAAS;AAAA,YACV;AACD;AAAA,UACF,KAAK;AAAA,UACL,KAAK;AAEH;AAAA,UAEF;AACE,kBAAM,IAAI,MAAM,yBAAyB4P,YAAW,UAAU;AAAA,QACjE;AAAA,MACP,CAAK;AACD,UAAI,WAAW,CAAC,UAAU5P,KAAG,QAAQ,MAAM,IAAI;AAC7C,iBAAS;AAAA,MACV;AAAA,IACF;AAED,QAAI,UAAU1f,OAAM,KAAK,MAAM,GAAG;AAChC,aAAO;AAAA,IACR;AAED,WAAO;AAAA,EACT;AACA,MAAA,eAAiBqvB;AC5DjB,QAAMnjB,UAAQ9I,aAA2B;AACzC,QAAMmsB,eAAa,CAACvvB,QAAO,YAAY;AACrC,QAAI;AAGF,aAAO,IAAIkM,QAAMlM,QAAO,OAAO,EAAE,SAAS;AAAA,IAC3C,SAAQ,IAAP;AACA,aAAO;AAAA,IACR;AAAA,EACH;AACA,MAAA8tB,UAAiByB;ACVjB,QAAM5B,WAASvqB;AACf,QAAMyrB,eAAand,kBAAgC;AACnD,QAAM,EAAEsd,KAAAA,MAAK,IAAGH;AAChB,QAAM3iB,UAAQjI,aAA2B;AACzC,QAAMgrB,cAAYnc;AAClB,QAAM4M,OAAK3M;AACX,QAAM0M,OAAKE;AACX,QAAM+O,QAAMrO;AACZ,QAAMoO,QAAMnO;AAEZ,QAAMjf,YAAU,CAACyM,UAAS9N,QAAO,MAAM,YAAY;AACjD,IAAA8N,WAAU,IAAI6f,SAAO7f,UAAS,OAAO;AACrC,IAAA9N,SAAQ,IAAIkM,QAAMlM,QAAO,OAAO;AAEhC,QAAI,MAAM,OAAO,MAAMqrB,OAAM;AAC7B,YAAQ,MAAI;AAAA,MACV,KAAK;AACH,eAAO3L;AACP,gBAAQgP;AACR,eAAOjP;AACP,QAAA4L,QAAO;AACP,gBAAQ;AACR;AAAA,MACF,KAAK;AACH,eAAO5L;AACP,gBAAQgP;AACR,eAAO/O;AACP,QAAA2L,QAAO;AACP,gBAAQ;AACR;AAAA,MACF;AACE,cAAM,IAAI,UAAU,uCAAuC;AAAA,IAC9D;AAGD,QAAI4D,YAAUnhB,UAAS9N,QAAO,OAAO,GAAG;AACtC,aAAO;AAAA,IACR;AAKD,aAASzE,KAAI,GAAGA,KAAIyE,OAAM,IAAI,QAAQ,EAAEzE,IAAG;AACzC,YAAM,cAAcyE,OAAM,IAAIzE;AAE9B,UAAI,OAAO;AACX,UAAI,MAAM;AAEV,kBAAY,QAAQ,CAAC+zB,gBAAe;AAClC,YAAIA,YAAW,WAAWN,OAAK;AAC7B,UAAAM,cAAa,IAAIT,aAAW,SAAS;AAAA,QACtC;AACD,eAAO,QAAQS;AACf,cAAM,OAAOA;AACb,YAAI,KAAKA,YAAW,QAAQ,KAAK,QAAQ,OAAO,GAAG;AACjD,iBAAOA;AAAA,QACf,WAAiB,KAAKA,YAAW,QAAQ,IAAI,QAAQ,OAAO,GAAG;AACvD,gBAAMA;AAAA,QACP;AAAA,MACP,CAAK;AAID,UAAI,KAAK,aAAajE,SAAQ,KAAK,aAAa,OAAO;AACrD,eAAO;AAAA,MACR;AAID,WAAK,CAAC,IAAI,YAAY,IAAI,aAAaA,UACnC,MAAMvd,UAAS,IAAI,MAAM,GAAG;AAC9B,eAAO;AAAA,MACb,WAAe,IAAI,aAAa,SAAS,KAAKA,UAAS,IAAI,MAAM,GAAG;AAC9D,eAAO;AAAA,MACR;AAAA,IACF;AACD,WAAO;AAAA,EACT;AAEA,MAAA,YAAiBzM;AC9EjB,QAAMA,YAAU+B;AAChB,QAAMosB,QAAM,CAAC1hB,UAAS9N,QAAO,YAAYqB,UAAQyM,UAAS9N,QAAO,KAAK,OAAO;AAC7E,MAAA,QAAiBwvB;ACHjB,QAAMnuB,YAAU+B;AAEhB,QAAMqsB,QAAM,CAAC3hB,UAAS9N,QAAO,YAAYqB,UAAQyM,UAAS9N,QAAO,KAAK,OAAO;AAC7E,MAAA,QAAiByvB;ACHjB,QAAMvjB,UAAQ9I,aAA2B;AACzC,QAAMssB,eAAa,CAAC,IAAI,IAAI,YAAY;AACtC,SAAK,IAAIxjB,QAAM,IAAI,OAAO;AAC1B,SAAK,IAAIA,QAAM,IAAI,OAAO;AAC1B,WAAO,GAAG,WAAW,EAAE;AAAA,EACzB;AACA,MAAA,eAAiBwjB;ACHjB,QAAMT,cAAY7rB;AAClB,QAAMV,YAAUgP;AAChB,MAAA,WAAiB,CAAC,UAAU1R,QAAO,YAAY;AAC7C,UAAMrD,OAAM,CAAE;AACd,QAAI,QAAQ;AACZ,QAAIgE,QAAO;AACX,UAAM2T,KAAI,SAAS,KAAK,CAACzY,IAAGC,OAAM4G,UAAQ7G,IAAGC,IAAG,OAAO,CAAC;AACxD,eAAWgS,YAAWwG,IAAG;AACvB,YAAM,WAAW2a,YAAUnhB,UAAS9N,QAAO,OAAO;AAClD,UAAI,UAAU;AACZ,QAAAW,QAAOmN;AACP,YAAI,CAAC,OAAO;AACV,kBAAQA;AAAA,QACT;AAAA,MACP,OAAW;AACL,YAAInN,OAAM;AACR,UAAAhE,KAAI,KAAK,CAAC,OAAOgE,KAAI,CAAC;AAAA,QACvB;AACD,QAAAA,QAAO;AACP,gBAAQ;AAAA,MACT;AAAA,IACF;AACD,QAAI,OAAO;AACT,MAAAhE,KAAI,KAAK,CAAC,OAAO,IAAI,CAAC;AAAA,IACvB;AAED,UAAM,SAAS,CAAE;AACjB,eAAW,CAACoB,MAAKC,IAAG,KAAKrB,MAAK;AAC5B,UAAIoB,SAAQC,MAAK;AACf,eAAO,KAAKD,IAAG;AAAA,MAChB,WAAU,CAACC,QAAOD,SAAQuW,GAAE,IAAI;AAC/B,eAAO,KAAK,GAAG;AAAA,MACrB,WAAe,CAACtW,MAAK;AACf,eAAO,KAAK,KAAKD,MAAK;AAAA,MACvB,WAAUA,SAAQuW,GAAE,IAAI;AACvB,eAAO,KAAK,KAAKtW,MAAK;AAAA,MAC5B,OAAW;AACL,eAAO,KAAK,GAAGD,UAASC,MAAK;AAAA,MAC9B;AAAA,IACF;AACD,UAAM,aAAa,OAAO,KAAK,MAAM;AACrC,UAAM,WAAW,OAAOgC,OAAM,QAAQ,WAAWA,OAAM,MAAM,OAAOA,MAAK;AACzE,WAAO,WAAW,SAAS,SAAS,SAAS,aAAaA;AAAA,EAC5D;AC9CA,QAAMkM,UAAQ9I,aAA8B;AAC5C,QAAMyrB,eAAand,kBAAmC;AACtD,QAAM,EAAE,IAAK,IAAGmd;AAChB,QAAMI,cAAYhrB;AAClB,QAAMvB,YAAUoQ;AAsChB,QAAM6c,WAAS,CAACzyB,MAAK,KAAK,UAAU,CAAA,MAAO;AACzC,QAAIA,SAAQ,KAAK;AACf,aAAO;AAAA,IACR;AAED,IAAAA,OAAM,IAAIgP,QAAMhP,MAAK,OAAO;AAC5B,UAAM,IAAIgP,QAAM,KAAK,OAAO;AAC5B,QAAI,aAAa;AAEjB;AAAO,iBAAW,aAAahP,KAAI,KAAK;AACtC,mBAAW,aAAa,IAAI,KAAK;AAC/B,gBAAM,QAAQ,aAAa,WAAW,WAAW,OAAO;AACxD,uBAAa,cAAc,UAAU;AACrC,cAAI,OAAO;AACT,qBAAS;AAAA,UACV;AAAA,QACF;AAKD,YAAI,YAAY;AACd,iBAAO;AAAA,QACR;AAAA,MACF;AACD,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,CAACA,MAAK,KAAK,YAAY;AAC1C,QAAIA,SAAQ,KAAK;AACf,aAAO;AAAA,IACR;AAED,QAAIA,KAAI,WAAW,KAAKA,KAAI,GAAG,WAAW,KAAK;AAC7C,UAAI,IAAI,WAAW,KAAK,IAAI,GAAG,WAAW,KAAK;AAC7C,eAAO;AAAA,MACb,WAAe,QAAQ,mBAAmB;AACpC,QAAAA,OAAM,CAAC,IAAI2xB,aAAW,WAAW,CAAC;AAAA,MACxC,OAAW;AACL,QAAA3xB,OAAM,CAAC,IAAI2xB,aAAW,SAAS,CAAC;AAAA,MACjC;AAAA,IACF;AAED,QAAI,IAAI,WAAW,KAAK,IAAI,GAAG,WAAW,KAAK;AAC7C,UAAI,QAAQ,mBAAmB;AAC7B,eAAO;AAAA,MACb,OAAW;AACL,cAAM,CAAC,IAAIA,aAAW,SAAS,CAAC;AAAA,MACjC;AAAA,IACF;AAED,UAAM,QAAQ,oBAAI,IAAK;AACvB,QAAInP,KAAID;AACR,eAAW,KAAKviB,MAAK;AACnB,UAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,QAAAwiB,MAAK,SAASA,KAAI,GAAG,OAAO;AAAA,MAClC,WAAe,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AACpD,QAAAD,MAAK,QAAQA,KAAI,GAAG,OAAO;AAAA,MACjC,OAAW;AACL,cAAM,IAAI,EAAE,MAAM;AAAA,MACnB;AAAA,IACF;AAED,QAAI,MAAM,OAAO,GAAG;AAClB,aAAO;AAAA,IACR;AAED,QAAI;AACJ,QAAIC,OAAMD,KAAI;AACZ,iBAAW/c,UAAQgd,IAAG,QAAQD,IAAG,QAAQ,OAAO;AAChD,UAAI,WAAW,GAAG;AAChB,eAAO;AAAA,MACb,WAAe,aAAa,MAAMC,IAAG,aAAa,QAAQD,IAAG,aAAa,OAAO;AAC3E,eAAO;AAAA,MACR;AAAA,IACF;AAGD,eAAWwO,OAAM,OAAO;AACtB,UAAIvO,OAAM,CAACuP,YAAUhB,KAAI,OAAOvO,GAAE,GAAG,OAAO,GAAG;AAC7C,eAAO;AAAA,MACR;AAED,UAAID,OAAM,CAACwP,YAAUhB,KAAI,OAAOxO,GAAE,GAAG,OAAO,GAAG;AAC7C,eAAO;AAAA,MACR;AAED,iBAAW,KAAK,KAAK;AACnB,YAAI,CAACwP,YAAUhB,KAAI,OAAO,CAAC,GAAG,OAAO,GAAG;AACtC,iBAAO;AAAA,QACR;AAAA,MACF;AAED,aAAO;AAAA,IACR;AAED,QAAI,QAAQ;AACZ,QAAI,UAAU;AAGd,QAAI,eAAexO,OACjB,CAAC,QAAQ,qBACTA,IAAG,OAAO,WAAW,SAASA,IAAG,SAAS;AAC5C,QAAI,eAAeC,OACjB,CAAC,QAAQ,qBACTA,IAAG,OAAO,WAAW,SAASA,IAAG,SAAS;AAE5C,QAAI,gBAAgB,aAAa,WAAW,WAAW,KACnDD,IAAG,aAAa,OAAO,aAAa,WAAW,OAAO,GAAG;AAC3D,qBAAe;AAAA,IAChB;AAED,eAAW,KAAK,KAAK;AACnB,iBAAW,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;AAC5D,iBAAW,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;AAC5D,UAAIC,KAAI;AACN,YAAI,cAAc;AAChB,cAAI,EAAE,OAAO,cAAc,EAAE,OAAO,WAAW,UAC3C,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,OAAO;AACzC,2BAAe;AAAA,UAChB;AAAA,QACF;AACD,YAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,mBAAS,SAASA,KAAI,GAAG,OAAO;AAChC,cAAI,WAAW,KAAK,WAAWA,KAAI;AACjC,mBAAO;AAAA,UACR;AAAA,QACF,WAAUA,IAAG,aAAa,QAAQ,CAACuP,YAAUvP,IAAG,QAAQ,OAAO,CAAC,GAAG,OAAO,GAAG;AAC5E,iBAAO;AAAA,QACR;AAAA,MACF;AACD,UAAID,KAAI;AACN,YAAI,cAAc;AAChB,cAAI,EAAE,OAAO,cAAc,EAAE,OAAO,WAAW,UAC3C,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,OAAO;AACzC,2BAAe;AAAA,UAChB;AAAA,QACF;AACD,YAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,kBAAQ,QAAQA,KAAI,GAAG,OAAO;AAC9B,cAAI,UAAU,KAAK,UAAUA,KAAI;AAC/B,mBAAO;AAAA,UACR;AAAA,QACF,WAAUA,IAAG,aAAa,QAAQ,CAACwP,YAAUxP,IAAG,QAAQ,OAAO,CAAC,GAAG,OAAO,GAAG;AAC5E,iBAAO;AAAA,QACR;AAAA,MACF;AACD,UAAI,CAAC,EAAE,aAAaA,OAAMC,QAAO,aAAa,GAAG;AAC/C,eAAO;AAAA,MACR;AAAA,IACF;AAKD,QAAIA,OAAM,YAAY,CAACD,OAAM,aAAa,GAAG;AAC3C,aAAO;AAAA,IACR;AAED,QAAIA,OAAM,YAAY,CAACC,OAAM,aAAa,GAAG;AAC3C,aAAO;AAAA,IACR;AAKD,QAAI,gBAAgB,cAAc;AAChC,aAAO;AAAA,IACR;AAED,WAAO;AAAA,EACT;AAGA,QAAM,WAAW,CAAC7jB,IAAGC,IAAG,YAAY;AAClC,QAAI,CAACD,IAAG;AACN,aAAOC;AAAA,IACR;AACD,UAAMuvB,QAAO3oB,UAAQ7G,GAAE,QAAQC,GAAE,QAAQ,OAAO;AAChD,WAAOuvB,QAAO,IAAIxvB,KACdwvB,QAAO,IAAIvvB,KACXA,GAAE,aAAa,OAAOD,GAAE,aAAa,OAAOC,KAC5CD;AAAA,EACN;AAGA,QAAM,UAAU,CAACA,IAAGC,IAAG,YAAY;AACjC,QAAI,CAACD,IAAG;AACN,aAAOC;AAAA,IACR;AACD,UAAMuvB,QAAO3oB,UAAQ7G,GAAE,QAAQC,GAAE,QAAQ,OAAO;AAChD,WAAOuvB,QAAO,IAAIxvB,KACdwvB,QAAO,IAAIvvB,KACXA,GAAE,aAAa,OAAOD,GAAE,aAAa,OAAOC,KAC5CD;AAAA,EACN;AAEA,MAAA,WAAiB8zB;AClPjB,QAAM,aAAavsB,KAAwB;AAC3C,QAAM,YAAYsO;AAClB,QAAM,SAASzN;AACf,QAAM,cAAc6O;AACpB,QAAMrQ,UAAQsQ;AACd,QAAM,QAAQ4M;AACd,QAAM,QAAQU;AACd,QAAM,MAAMC;AACZ,QAAM,OAAOE;AACb,QAAM,QAAQW;AACd,QAAM,QAAQC;AACd,QAAM,QAAQC;AACd,QAAM,aAAaC;AACnB,QAAM5e,YAAU6e;AAChB,QAAM,WAAWC;AACjB,QAAM,eAAeC;AACrB,QAAM,eAAeC;AACrB,QAAM,OAAOC;AACb,QAAM,QAAQC;AACd,QAAM,KAAKC;AACX,QAAM,KAAKC;AACX,QAAM,KAAKE;AACX,QAAM,MAAMC;AACZ,QAAM,MAAMC;AACZ,QAAM,MAAMC;AACZ,QAAM,MAAMC;AACZ,QAAM,SAASC;AACf,QAAM,aAAaI,kBAA+B;AAClD,QAAM,QAAQC,aAA0B;AACxC,QAAM,YAAYC;AAClB,QAAM,gBAAgBC;AACtB,QAAM,gBAAgBgN;AACtB,QAAM,gBAAgBC;AACtB,QAAM,aAAaC;AACnB,QAAM,aAAaC;AACnB,QAAM,UAAUC;AAChB,QAAM,MAAMC;AACZ,QAAM,MAAMC;AACZ,QAAM,aAAaC;AACnB,QAAM,gBAAgBC;AACtB,QAAM,SAASC;AACf,MAAA,SAAiB;AAAA,IACjB,OAAE5tB;AAAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACF,SAAEC;AAAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,WAAW;AAAA,IACf,KAAK,WAAW;AAAA,IAChB,QAAQ,WAAW;AAAA,IACnB,qBAAqB,UAAU;AAAA,IAC/B,oBAAoB,YAAY;AAAA,IAChC,qBAAqB,YAAY;AAAA,EACnC;ACnEO,WAAS,aAAaxG,OAAc;AACnC,UAAAo0B,UAAS,SAASp0B,KAAI;AACrB,WAAA,OAAO,KAAKo0B,OAAM;AAAA,EAC3B;AAEO,WAAS,aAAa,SAAiB;AACtC,UAAA,UAAU,KAAK,OAAO;AAC5B,WAAO,WAAW,OAAO;AAAA,EAC3B;AAGA,WAAS,SAASp0B,OAAc;AAC9B,UAAM,YAAY,IAAI,YAAYA,MAAK,MAAM;AAC7C,aAASX,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AAC/B,gBAAAA,MAAKW,MAAK,WAAWX,EAAC;AAAA,IAClC;AACA,UAAM,YAAY,MAAM,KAAK,IAAI,WAAW,UAAU,MAAM,CAAC,EAAE,IAAI,CAAAqG,UAAQ,OAAO,aAAaA,KAAI,CAAC;AAC7F,WAAA,UAAU,KAAK,EAAE;AAAA,EAC1B;AAGA,WAAS,WAAW0uB,SAAgB;AAClC,UAAM,QAAQ,IAAI,WAAWA,QAAO,MAAM;AAC1C,aAAS/0B,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AAC/B,YAAAA,MAAK+0B,QAAO,WAAW/0B,EAAC;AAAA,IAChC;AACA,UAAM,YAAY,MAAM,KAAK,IAAI,YAAY,MAAM,MAAM,CAAC,EAAE,IAAI,CAAAqG,UAAQ,OAAO,aAAaA,KAAI,CAAC;AAC1F,WAAA,UAAU,KAAK,EAAE;AAAA,EAC1B;AC1BA,QAAM,kBAAkB;AACxB,QAAM,kBAAkB;AACxB,QAAM,aAAa;AACnB,QAAM,iBAAiB;AACvB,QAAM,eAAe;AACrB,QAAM,eAAe;AACrB,QAAM,eAAe;AACrB,QAAM,wBAAwB,uCAAuC;AAmErD,WAAA,gCACd,UACA,UACA,eACA;AAEA,UAAM,mBAAmB,CAAC,QAAgB,IAAY,IAAY,OAAe;AACxE,aAAA;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MAAA;AAAA,IACV;AAIF,UAAM,YAAsB,CAAA;AAC5B,QAAIlE,SAAQ,cAAc,MAAM,KAAK,QAAQ;AAC7C,WAAOA,UAAS,MAAM;AACV,gBAAA,KAAKA,OAAM,KAAK;AAClB,MAAAA,SAAA,cAAc,MAAM,KAAK,QAAQ;AAAA,IAC3C;AAGA,kBAAc,MAAM,YAAY;AAGzB,WAAA,SAAS,QAAQ,cAAc,OAAO,CAACA,SAAe,IAAY,IAAY,IAAY,OAAe;AAE9G,UAAI6G,YAAW;AACT,YAAA,cAAc,UAAU;AAC9B,UAAI,aAAa;AACJ,QAAAA,YAAA;AAAA,MACb;AAGI,UAAA,cAAc,WAAW,CAAC,CAAC7G,QAAM,MAAM,cAAc,OAAO,GAAG;AAC1DA,eAAAA;AAAAA,MACT;AAGM,YAAA,UAAU,cAAc,WAAW;AACnC,YAAA,EAAE,QAAA2N,SAAQ,QAAQ,WAAW,QAAQ3N,SAAO,IAAI,IAAI,IAAI,EAAE;AAGhE,YAAM,UAA8B;AAAA,QAClC,CAAC,aAAa,cAAc;AAAA,QAC5B,CAAC,iBAAiB6G;AAAA,QAClB,CAAC,eAAe8G;AAAA,QAChB,CAAC,eAAe;AAAA,QAChB,CAAC,eAAe;AAAA,MAAA;AAIZ,YAAA,QAAQ,CAAC,MAAc,UAAkB,GAAG,OAAO,kBAAkB,aAAa,KAAK;AAG7F,YAAM,SACJ,MAAM,YAAY,QAAQ,IAAI,IAC9B,kBACA,MAAM,gBAAgB,QAAQ,SAAS,SAAU,CAAA,IACjD,kBACA,MAAM,cAAc,QAAQ,MAAM,IAClC,kBACA,MAAM,cAAc,QAAQ,MAAM,IAClC,kBACA,MAAM,cAAc,QAAQ,MAAM;AAG9B,YAAA,gBAAgB,aAAa,MAAM;AAMzC,aACEA,UACA,cAAc;AAAA,QACZ,GAAG,wBAAwB,kBAAkB,gBAAgB,kBAAkB;AAAA,QAC/E;AAAA,MAEF,IAAA;AAAA,IAAA,CAEH;AAAA,EACH;AAMgB,WAAA,8BACd4e,SACA,SACe;AAER,WAAA,UAAUA,SAAQ,CAASlN,WAAA;AAEhC,UAAIA,OAAM,MAAM,gBAAgB,OAAOA,OAAM,GAAG;AAC1C,YAAA,OAAOA,OAAM,MAAM,UAAU;AAC/B,UAAAA,OAAM,IAAI,uBAAuBA,OAAM,GAAGA,QAAO,OAAO;AAAA,QAC/C,WAAA,MAAM,QAAQA,OAAM,CAAC,GAAG;AAC3B,gBAAA,WAAWA,OAAM,EAAE;AACzB,mBAASxhB,KAAI,GAAGA,KAAI,UAAUA,MAAK;AACjC,gBAAI,OAAOwhB,OAAM,EAAExhB,QAAO,UAAU;AAClC,cAAAwhB,OAAM,EAAExhB,MAAK,uBAAuBwhB,OAAM,EAAExhB,KAAIwhB,QAAO,OAAO;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEO,aAAAA;AAAA,IAAA,CACR;AAAA,EACH;AAGgB,WAAA,uBAAuB7gB,OAAc,KAAkB,SAA8C;AACnH,YAAQ,QAAQ,CAAU,WAAA;AACjB,MAAAA,QAAA,OAAO,WAAWA,OAAM,GAAG;AAAA,IAAA,CACnC;AACM,WAAAA;AAAA,EACT;AAEgB,WAAA,wBAAwBQ,OAAc,SAAiB,YAAuC;AACrG,WAAA,CAACR,OAAc,QAA6B;AAGjD,YAAM,cAAc,IAAI,MAAM,gBAAgB,aAAa,IAAI,MAAM,gBAAgB;AAG9E,aAAAA,MAAK,QAAQ,SAAS,CAASwB,WAAA;AACpC,cAAM,cAAc,aAAa,WAAWA,MAAK,IAAIA;AAC/C,cAAA,UAAU,wBAAwB,WAAW;AAC/C,YAAA,QAAQ,SAAShB,OAAM;AACzB,cAAI,aAAa;AACf,mBAAO,gCAAgC,QAAQ,QAAQ,QAAQ,MAAM;AAAA,UAAA,OAChE;AACL,mBAAO,QAAQ;AAAA,UACjB;AAAA,QAAA,OACK;AACE,iBAAAgB;AAAA,QACT;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AAIO,WAAS,kCAAkChB,OAAc;AACxD,UAAA,aAAa,yBAAyB,KAAK,GAAG;AACpD,WAAO,CAAC,QAAqB;AACvB,UAAA,IAAI,MAAM,gBAAgB,MAAM;AAC9B,YAAA,IAAI,EAAE,WAAW,KAAK,IAAI,EAAE,GAAG,MAAM,gBAAgB,KAAK;AACtD,gBAAAR,QAAO,IAAI,EAAE,GAAG;AAChB,gBAAAwB,SAAQxB,MAAK,MAAM,UAAU;AACnC,cAAIwB,QAAO;AACH,kBAAA,gBAAgB,wBAAwBA,OAAM,EAAE;AAClD,gBAAA,cAAc,SAAShB,OAAM;AAC/B,qBAAOgB,OAAM;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACO,aAAA;AAAA,IAAA;AAAA,EAEX;AAGgB,WAAA,yBAAyB2N,SAAiB,QAAiB,OAAgB;AACzF,WAAO,IAAI;AAAA,OACRA,WAAU,MACT,wBACA,kBACA,qEACA,kBACA,yBACC,UAAU;AAAA,MACb;AAAA,IAAA;AAAA,EAEJ;AAGO,WAAS,wBAAwBnP,OAAkC;AAClE,UAAA,cAAc,sBAAsB,SAAS,gBAAgB;AACnE,UAAM,SAASA,MAAK,UAAU,aAAaA,MAAK,SAAS,WAAW;AAC9D,UAAA,gBAAgB,aAAa,MAAM;AACnC,UAAA,SAAS,cAAc,MAAM,eAAe;AAC5C,UAAA,aAAa,CAACX,OAAc,aAAa,OAAOA,IAAG,MAAM,eAAe,EAAE,EAAE;AAC3E,WAAA;AAAA,MACL,CAAC,aAAa,WAAW,CAAC;AAAA,MAC1B,CAAC,iBAAiB,SAAS,WAAW,CAAC,GAAG,EAAE;AAAA,MAC5C,CAAC,eAAe,WAAW,CAAC;AAAA,MAC5B,CAAC,eAAe,WAAW,CAAC;AAAA,MAC5B,CAAC,eAAe,WAAW,CAAC;AAAA,IAAA;AAAA,EAEhC;AAMgB,WAAA,gCAAgC,QAAgB8P,SAAgB;AAG9E,UAAM,mBAAmB,IAAI,OAAO,MAAMA,OAAM;AAC1C,UAAA6I,SAAQ,OAAO,MAAM,IAAI,EAAE,IAAI,CAAC1J,OAAMvP,WAAU;AACpD,aAAOA,SAAQ,IAAIuP,MAAK,QAAQ,kBAAkB,EAAE,IAAIA;AAAA,IAAA,CACzD;AACM,WAAA0J,OAAM,KAAK,IAAI;AAAA,EACxB;AChSO,QAAM,gBAAgB;AACtB,QAAM,eAAe;AACrB,QAAM,mBAAmB;ACmChB,WAAA,oBACdqc,MACA/zB,SACA,YACA,SACA,eACA,cACA,mBACA,qBAC2B;AAC3B,UAAM,SAAS,IAAI;AAAA,MACjBA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEK,WAAA,OAAO,MAAM+zB,IAAG;AAAA,EACzB;AAEA,QAAM,OAAO;AAAA,IAQX,YACE/zB,SACA,YACA,SACA,eACA,cACA,mBACA,qBACA;AAfe;AACA;AACA;AACA;AACA;AACA;AAWf,WAAK,SAASA;AACd,WAAK,aAAa;AAClB,WAAK,gBAAgB;AACrB,WAAK,oBAAoB;AAEzB,WAAK,sBAAsB,oBAAoB,MAAM,EAAE,QAAQ;AAC/D,WAAK,WAAW,KAAK,eAAe,SAAS,YAAY;AAAA,IAC3D;AAAA,IAEO,MAAM+zB,MAAgB;AAE3B,YAAM,QAAqB,IAAI,YAAY,KAAK,MAAM;AAGtD,YAAM,SAAS;AACf,YAAM,SAA4B;AAAA,QAChC,UAAU,MAAM,SAAS,KAAK,KAAK;AAAA,QACnC,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,QACrC,cAAc,MAAM,aAAa,KAAK,KAAK;AAAA,QAC3C,SAAS,MAAM,QAAQ,KAAK,KAAK;AAAA,QACjC,UAAU,MAAM,SAAS,KAAK,KAAK;AAAA,QACnC,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,QACrC,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,QACrC,oBAAoB1uB,OAAc;AACzB,iBAAA,OAAO,oBAAoBA,KAAI;AAAA,QACxC;AAAA,QACA,gBAAgBA,OAAc;AACrB,iBAAA,OAAO,gBAAgB,MAAMA,KAAI;AAAA,QAC1C;AAAA,QACA,YAAYooB,SAAuB;AAC1B,iBAAA,YAAY,MAAMA,OAAM;AAAA,QACjC;AAAA,QACA,iBAAiB,MAAM,gBAAgB,KAAK,KAAK;AAAA,QACjD,gBAAgB,MAAM,eAAe,KAAK,KAAK;AAAA,QAC/C,YAAY,MAAM,WAAW,KAAK,KAAK;AAAA,MAAA;AAIzC,UAAI,YAAY;AAAA,QACd,GAAGsG;AAAA,QACH,QAAQ,8BAA8BA,KAAI,QAAQ,KAAK,mBAAmB;AAAA,MAAA;AAItE,YAAA,eAAe,mBAAmB,SAAS;AAGrC,kBAAA,kBAAkB,WAAW,KAAK,UAAU;AAGjD,aAAA,YAAY,UAAU,MAAM;AAG5B,aAAA;AAAA,QACL,KAAK,MAAM,IAAI;AAAA,QACf,eAAe;AAAA,QACf,cAAc,MAAM,aAAa;AAAA,QACjC,eAAe,MAAM,gBAAgB;AAAA,QACrC,eAAeA,KAAI;AAAA,MAAA;AAAA,IAEvB;AAAA,IAEQ,YAAY,QAA2BtG,SAAuB;AAEpE,UAAI,eAAeA;AACd,WAAA,cAAc,QAAQ,CAAU,WAAA;AACpB,uBAAA,OAAO,cAAc,MAAM;AAAA,MAAA,CAC3C;AAGD,mBAAa,QAAQ,CAAO,QAAA,KAAK,WAAW,QAAQ,GAAG,CAAC;AAAA,IAC1D;AAAA,IAEQ,WAAW,QAA2B,KAAkB;;AAEnD,iBAAA,UAAU,KAAK,qBAAqB;AACvC,cAAA,eAAc,YAAO,gBAAP,gCAAqB;AACzC,YAAI,aAAa;AACT,gBAAA,eAAe,wBAAwB,WAAW;AAExD,uBAAa,SAAS,uBAAuB,aAAa,QAAQ,KAAK,KAAK,mBAAmB;AAC/F,iBAAO,UAAU,KAAK,QAAQ,QAAQ,YAAY;AAClD;AAAA,QACF;AAAA,MACF;AAGA,YAAMjoB,YAAW,KAAK,SAAS,IAAI,MAAM;AACzC,iBAAW,WAAWA,WAAU;AAI9B,YAAI,QAAQ,SAAS,QAAQ,MAAM,GAAG,GAAG;AAC/B,kBAAA,QAAQ,QAAQ,GAAG;AAC3B;AAAA,QACF;AAAA,MACF;AAGA,iBAAW,WAAWA,WAAU;AAC1B,YAAA,CAAC,QAAQ,OAAO;AACV,kBAAA,QAAQ,QAAQ,GAAG;AAC3B;AAAA,QACF;AAAA,MACF;AAGO,aAAA,gBAAgB,IAAI,CAAC;AAAA,IAC9B;AAAA,IAEQ,oBAAoBH,OAAc;AAC7B,iBAAA,UAAU,KAAK,mBAAmB;AAC3C,YAAI,OAAO,KAAK,QAAQA,KAAI,GAAG;AACtB,iBAAA;AAAA,QACT;AAAA,MACF;AACO,aAAA;AAAA,IACT;AAAA,IAEQ,gBAAgB,QAA2BA,OAAc;AACpD,iBAAA,UAAU,KAAK,mBAAmB;AAC3C,YAAI,OAAO,KAAK,QAAQA,OAAM,MAAM,GAAG;AACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAGQ,eAAe,SAAuC,cAA8C;AAC1G,YAAMG,YAA+D,CAAA;AAErE,iBAAW,UAAU,SAAS;AAE5B,cAAM,cAAc,OAAO,gBAAgB,CAAC,QAAqB,IAAI;AAGrE,cAAM,WAAW,OAAO,WAAW,OAAO,WAAW,OAAO,CAAA;AAExD,YAAA;AAGJ,YAAI,OAAO,SAAS;AACR,oBAAA,OAAO,QAAQ,KAAK,MAAM;AAAA,QAAA,WAI7B,OAAO,MAAM;AACV,oBAAA,CAAC,QAA2B,QAAqB;AACzD,gBAAI,OAAO,SAAS;AACZ,oBAAA9F,QAAO,OAAO,QAAQ,GAAG;AAC/B,qBAAO,UAAUA,KAAI;AAAA,YACvB;AAAA,UAAA;AAAA,QACF,WAGS,OAAO,MAAM;AACZ,oBAAA,CAAC,QAA2B,QAAqB;AACzD,kBAAM,WAAW,KAAK,OAAO,MAAM,OAAO;AAC1C,kBAAM,OAAO,SAAS,OAAO,SAAS,GAAG,CAAC;AAC1C,mBAAO,SAAS,IAAI;AACpB,gBAAI,OAAO,SAAS;AAClB,qBAAO,UAAU,OAAO,QAAQ,GAAG,CAAC;AAAA,YAAA,OAC/B;AACE,qBAAA,YAAY,YAAY,GAAG,CAAC;AAAA,YACrC;AACA,mBAAO,UAAU,IAAI;AAAA,UAAA;AAAA,QACvB,WAGS,OAAO,OAAO;AACvB,gBAAM,WAAW,KAAK,OAAO,MAAM,OAAO;AAChC,oBAAA,CAAC,QAA2B,QAAqB;AAGzD,uBAAW,eAAe,cAAc;AACtC,kBAAI,YAAY,KAAK,QAAQ,KAAK,MAAM,GAAG;AACzC;AAAA,cACF;AAAA,YACF;AAEA,mBAAO,SAAS,UAAU,SAAS,GAAG,CAAC;AACvC,gBAAI,OAAO,SAAS;AAClB,qBAAO,UAAU,OAAO,QAAQ,GAAG,CAAC;AAAA,YAAA,OAC/B;AACE,qBAAA,YAAY,YAAY,GAAG,CAAC;AAAA,YACrC;AACA,mBAAO,UAAU;AAAA,UAAA;AAAA,QACnB,WAGS,OAAO,MAAM;AACtB,gBAAM,WAAW,KAAK,OAAO,MAAM,OAAO;AAChC,oBAAA,CAAC,QAA2B,QAAqB;AACzD,gBAAI,OAAO,aAAa;AACtB,qBAAO,SAAS,UAAU,SAAS,GAAG,CAAC;AAChC,qBAAA,YAAY,YAAY,GAAG,CAAC;AACnC,qBAAO,UAAU;AAAA,YAAA,OACZ;AACL,kBAAI,UAA6B,CAAA;AACjC,kBAAI,OAAO,SAAS;AACR,0BAAA,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,GAAG,CAAC,CAAC;AAAA,cAClD;AACA,qBAAO,QAAQ,UAAU,SAAS,GAAG,GAAG,OAAO;AAAA,YACjD;AAAA,UAAA;AAAA,QACF,WAGS,OAAO,YAAY;AAClB,oBAAA,CAAC,QAA2B,QAAqB;AAEnD,kBAAA,WAAW,KAAK,OAAO,MAAM;AAC7B,kBAAA,OAAO,kBAAkB,KAAK,cAAc;AAC5C,kBAAAA,QAAO,IAAI,EAAE;AAGZ,mBAAA,SAAS,UAAU,IAAI;AAC9B,mBAAO,UAAUA,KAAI;AACrB,mBAAO,UAAU;AAAA,UAAA;AAAA,QACnB,OACK;AACC,gBAAA,IAAI,MAAM,6CAA6C;AAAA,QAC/D;AAGA,QAAA8F,UAAS,OAAO,SAASA,UAAS,OAAO,UAAU;AAE1C,QAAAA,UAAA,OAAO,OAAO,KAAK;AAAA,UAC1B,OAAO,OAAO;AAAA,UACd;AAAA,QAAA,CACD;AAAA,MACH;AACO,aAAAA;AAAA,IACT;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAShB,YAAYxF,SAAgB;AARX;AACA;AACA;AACT;AACA;AACA;AACA;AAGN,WAAK,SAASA;AACd,WAAK,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,MAAM,MAAM,OAAO,CAAA,GAAI,SAAS,CAAA,EAAI,CAAA;AACtE,WAAK,QAAQ;AACb,WAAK,QAAQ,KAAK;AAClB,WAAK,iBAAiB;AACtB,WAAK,qBAAqB;AAC1B,WAAK,eAAe;AAAA,IACtB;AAAA,IAEO,MAAuB;AAC5B,YAAM,UAA6B,CAAA;AAC3B,cAAA,KAAK,KAAK,IAAM,EAAA,KAAK,cAAc,MAAM,KAAK,MAAM,OAAO,CAAoB;AAC/E,cAAA,KAAK,KAAK,OAAO,MAAM,MAAM,cAAc,MAAM,KAAK,KAAK,CAAoB;AACvF,aAAO,KAAK,OAAO,YAAY,cAAc,CAAA,GAAI,OAAO;AAAA,IAC1D;AAAA,IAEO,eAAyB;AAC9B,aAAO,KAAK;AAAA,IACd;AAAA,IAEO,kBAA2B;AAChC,aAAO,KAAK;AAAA,IACd;AAAA,IAEO,UAAUN,OAAc;AAC7B,UAAI,CAACA,OAAM;AACT;AAAA,MACF;AACM,YAAAO,SAA2B,KAAK,IAAA,EAAM;AACtC,YAAAL,QAAwBK,OAAMA,OAAM,SAAS;AACnD,YAAMN,QAAwB,KAAK,OAAO,KAAKD,OAAM,KAAK,KAAK;AAC/D,YAAM,SAAsC,KAAK,WAAWE,OAAMD,KAAI;AACtE,UAAIC,SAAQ,QAAQ;AACZ,QAAAK,OAAAA,OAAM,SAAS,KAAK;AAAA,MAAA,OACrB;AACL,QAAAA,OAAM,KAAKN,KAAI;AAAA,MACjB;AAAA,IACF;AAAA,IAEO,QAAQO,OAAgB,OAAc,SAA4B;AACvE,YAAMP,QAA2CO,MAAK,cAAc,OAAO,SAAS,KAAK,KAAK;AAC9F,UAAI,CAACP,OAAM;AACF,eAAA;AAAA,MACT;AACI,UAAA,KAAK,MAAM,QAAQ;AACrB,YAAIO,UAAS,KAAK,OAAO,MAAM,MAAM;AAC9B,eAAA,MAAM,KAAKP,KAAI;AAAA,QAAA,OACf;AACL,eAAK,IAAI,EAAE,QAAQ,KAAKA,KAAI;AAAA,QAC9B;AAAA,MACF;AACO,aAAAA;AAAA,IACT;AAAA,IAEO,SAASO,OAAgB,OAAc;AACvC,WAAA,MAAM,KAAK,EAAE,MAAAA,OAAM,OAAO,SAAS,IAAI;AAAA,IAC9C;AAAA,IAEO,YAA6B;AAE5B,YAAA,OAA2B,KAAK,MAAM,IAAI;AAG5C,UAAA,CAAC,KAAK,KAAK,UAAU;AACnB,YAAA,KAAK,MAAM,QAAQ;AACrB,eAAK,QAAQ,KAAK;AAAA,QACpB;AAAA,MACF;AAEA,aAAO,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO;AAAA,IACzD;AAAA,IAEO,SAAS,MAAY;AAC1B,WAAK,QAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,IACvC;AAAA,IAEO,UAAU,MAAY;AAC3B,WAAK,QAAQ,KAAK,cAAc,KAAK,KAAK;AAAA,IAC5C;AAAA,IAEO,aAAa,KAAa;AAC1B,WAAA,SAAS,KAAK,OAAO,MAAM,MAAM,EAAE,KAAK,QAAQ,KAAK,iBAAkB,CAAA;AAAA,IAC9E;AAAA,IAEO,gBAAgBA,OAAc;AACnC,UAAI,CAAC,KAAK,mBAAmB,SAASA,KAAI,GAAG;AACtC,aAAA,mBAAmB,KAAKA,KAAI;AAAA,MACnC;AAAA,IACF;AAAA,IAEO,iBAAiB;AACtB,WAAK,eAAe;AAAA,IACtB;AAAA,IAEO,WAAWA,OAAgB;AAChC,aAAO,KAAK,MAAM,KAAK,CAAS,UAAA,MAAM,SAASA,KAAI;AAAA,IACrD;AAAA,IAEQ,MAA0B;AAChC,aAAO,KAAK,MAAM,KAAK,MAAM,SAAS;AAAA,IACxC;AAAA,IAEQ,WAAWb,IAAoBC,IAAiD;AAClF,UAAAD,MAAKA,GAAE,UAAUC,GAAE,UAAU,KAAK,QAAQD,GAAE,OAAOC,GAAE,KAAK,GAAG;AACxD,eAAA,KAAK,OAAO,KAAOD,GAAE,OAAkBC,GAAE,MAAiBD,GAAE,KAAK;AAAA,MAAA,OACnE;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAGA,WAAS,mBAAmB00B,MAAoC;AAE9D,QAAI,eAAe;AACnB,QAAI,iBAAiB;AACrB,QAAI,UAAuB,EAAE,GAAG,gBAAgB,KAAK;AACxC,iBAAAA,KAAI,QAAQ,CAAO,QAAA;AAC1B,UAAA,IAAI,MAAM,gBAAgB,WAAW;AAErC,YAAA,QAAQ,MAAM,gBAAgB,OAC9B,OAAO,QAAQ,MAAM,YACrB,CAAC,KAAK,KAAK,GAAG,EAAE,SAAS,QAAQ,EAAE,OAAO,QAAQ,EAAE,SAAS,CAAC,CAAC,GAC/D;AACA;AAAA,QAAA,OACK;AACL;AAAA,QACF;AAAA,MACF;AACU,gBAAA;AAAA,IAAA,CACX;AAID,UAAM,aAAa,eAAe;AAClC,QAAI,aAAa,KAAK,aAAaA,KAAI,OAAO,QAAQ;AACpD,UAAI,iBAAiB,cAAc;AAC1B,eAAA;AAAA,MAAA,OACF;AACE,eAAA;AAAA,MACT;AAAA,IAAA,OACK;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAIA,WAAS,kBAAkBA,MAAgB,YAA8B;AAEjE,UAAA,iBAAiB,WAAW,uBAAuB,oBAAoB;AAG7E,UAAM,aAAa,IAAI,KAAaA,KAAI,eAAe,CAAA,GAAI,IAAI,CAAM9wB,QAAAA,IAAG,kBAAkB,CAAC,CAAC;AAG5F,QAAI,YAAY,UAAU8wB,KAAI,QAAQ,CAAO,QAAA;AACvC,UAAA,IAAI,MAAM,gBAAgB,MAAM;AAC5B,cAAAnzB,UAAS,IAAI,EAAE;AACrB,cAAM,OAAOA,QAAO;AAChB,YAAA,KAAK,WAAW,GAAG,GAAG;AAKxB,gBAAMlB,QAAO,gBAAgB,IAAI,EAAE,gBAAgB,WAAW,oBAAoB;AAClF,cACE,wBAAwB,UAAU,KAClC,iBAAiB,MAAM,eAAeA,OAAM,WAAW,iBAAiB,GAAG,IAAI,KAC/E,CAAC,WAAW,IAAI,KAAK,kBAAA,CAAmB,GACxC;AAEO,mBAAA;AAAA,cACL,GAAG,gBAAgB;AAAA,cACnB,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE,gBAAgB,CAAC,KAAK,IAAI,EAAE,aAAa,iBAAiB,CAAC;AAAA,YAAA;AAAA,UACzF,OAGK;AACM,uBAAA,IAAI,KAAK,kBAAmB,CAAA;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAEO,aAAA;AAAA,IAAA,CACR;AAGW,gBAAA,UAAUq0B,KAAI,QAAQ,CAAO,QAAA;AACnC,UAAA,IAAI,MAAM,gBAAgB,QAAQ;AAC9B,cAAA,OAAO,kBAAkB,KAAK,YAAY;AAC5C,YAAA,KAAK,MAAM,CAAC,WAAW,IAAI,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG;AAC1D,iBAAA;AAAA,YACL,GAAG,gBAAgB;AAAA,YACnB,GAAG;AAAA,cACD,IAAI,EAAE;AAAA,cACN,CAAC,IAAI,IAAI,EAAE,cAAc,qBAAqB,IAAI,EAAE,cAAc,oBAAoB;AAAA,cACtF,IAAI,EAAE;AAAA,YACR;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAEO,aAAA;AAAA,IAAA,CACR;AAGM,WAAA;AAAA,MACL,GAAGA;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,IAAA;AAAA,EAEjB;AC9fO,WAAS,sBACd/yB,MACA,YACAkV,SACA,aACA,aACA;AACM,UAAA,WAAWlV,KAAI,MAAM,CAAC;AACtB,UAAA,YAAYA,KAAI,MAAM,CAAC;AAC7B,UAAM,SAAS,IAAI,aAAa,YAAYkV,SAAQ,aAAa,aAAa,SAAS;AACvF,WAAO,WAAW,QAAQ;AAC1B,WAAO,OAAO;EAChB;AAEA,QAAM,aAAqC;AAAA,IAgBzC,YACE,YACAA,SACA,aACA,aACA,OACA;AArBe;AACA;AACA;AACA;AACA;AACA;AACA;AACT;AAEQ;AAEC,8CAA6B,CAAA;AAC7B,wEAAkD;AAClD,qDAAoC,CAAA;AAUnD,WAAK,SAASA;AACd,WAAK,aAAaA,QAAO;AAEzB,WAAK,qBAAqB;AAE1B,WAAK,cAAc;AACP,kBAAA,QAAQ,CAAC,WAA6B;AAC3C,aAAA,YAAY,OAAO,QAAQ,OAAO;AAAA,MAAA,CACxC;AACD,WAAK,cAAc;AACP,kBAAA,QAAQ,CAAC,WAA6B;AAC3C,aAAA,YAAY,OAAO,QAAQ;AAAA,MAAA,CACjC;AAED,WAAK,QAAQ;AACP,YAAA,QAAQ,CAAC,SAA0B;AAClC,aAAA,MAAM,KAAK,MAAM,OAAO;AAAA,MAAA,CAC9B;AAED,WAAK,MAAM;AAAA,QACT,QAAQ,CAAC;AAAA,QACT,sBAAsB;AAAA,QACtB,MAAM,CAAC;AAAA,MAAA;AAET,WAAK,aAAa,CAAC,KAAK,IAAI,MAAM;AAClC,WAAK,cAAc;AACnB,WAAK,UAAU;AAAA,QACb,aAAa;AAAA,MAAA;AAAA,IAEjB;AAAA,IAEO,SAAS;AACP,aAAA;AAAA,QACL,KAAK,KAAK;AAAA,MAAA;AAAA,IAEd;AAAA,IAEO,MAAM,OAAgB;AAC3B,YAAM,YAAY,KAAK,WAAW,KAAK,WAAW,SAAS;AAC3D,gBAAU,KAAK,KAAK;AAAA,IACtB;AAAA,IAEO,WAAWhW,OAAuB,SAAkC;AACzE,YAAMqgB,SAAqB;AAAA,QACzB,GAAGrgB;AAAA,MAAA;AAEL,UAAI,YAAY,QAAW;AACrB,YAAA,OAAO,YAAY,YAAY;AACjC,UAAAqgB,OAAM,IAAI;AACL,eAAA,KAAKA,OAAM,GAAG,OAAuB;AAAA,QAAA,OACrC;AACL,UAAAA,OAAM,IAAI;AAAA,QACZ;AAAA,MACF;AACA,WAAK,MAAMA,MAAK;AAAA,IAClB;AAAA,IAEO,UAAUrgB,OAAuB,QAAkB,2BAA2B,MAAM;AAEzF,UAAI,0BAA0B;AAE5B,cAAM,SAAS;AAAA,UACb,aAAa;AAAA,UACb,OAAO,IAAI,MAAuB;AAAA,UAClC,YAAY;AAAA,QAAA;AAKd,eAAO,QAAQ,CAACP,OAAuB,SAAiBlB,WAAkB;AAExE,cAAIkB,MAAK,QAAQ;AACf,gBAAI,aAAaA,MAAK;AAGlB,gBAAA,OAAO,MAAM,WAAW,KAAKA,MAAK,YAAY,MAAM,MAAM,GAAG;AAC/D,qBAAO,cAAc;AACrB,2BAAa,WAAW;YAC1B;AAGI,gBAAAlB,WAAU,OAAO,aAAa,KAAKkB,MAAK,YAAY,MAAM,MAAM,GAAG;AACrE,qBAAO,aAAa;AACpB,2BAAa,WAAW;YAC1B;AAGI,gBAAA,WAAW,MAAM,OAAO,GAAG;AAChB,2BAAA;AAAA,YACf;AAGI,gBAAA,WAAW,SAAS,GAAG;AAErB,kBAAA,eAAeA,MAAK,aAAa;AAC5B,uBAAA,MAAM,KAAKA,MAAK,KAAK,OAAO,KAAK,YAAYA,MAAK,KAAK,CAAC;AAAA,cAAA,OAC1D;AACE,uBAAA,MAAM,KAAKA,KAAI;AAAA,cACxB;AAAA,YACF;AAAA,UAAA,OACK;AACE,mBAAA,MAAM,KAAKA,KAAI;AAAA,UACxB;AAAA,QAAA,CACD;AAGG,YAAA,OAAO,MAAM,SAAS,GAAG;AAC3B,cAAI,OAAO,aAAa;AACjB,iBAAA,WAAW,gBAAgB,KAAK;AAAA,UACvC;AACK,eAAA,WAAWO,OAAM,MAAM;AAC1B,iBAAK,aAAa,SAAS,KAAK,OAAO,KAAK,CAAC;AAAA,UAAA,CAC9C;AACD,cAAI,OAAO,YAAY;AAChB,iBAAA,WAAW,gBAAgB,KAAK;AAAA,UACvC;AAAA,QACF;AAAA,MAAA,OAGK;AACA,aAAA,WAAWA,OAAM,MAAM;AAC1B,eAAK,aAAa,MAAM;AAAA,QAAA,CACzB;AAAA,MACH;AAAA,IACF;AAAA,IAEO,WAAW,SAAqB;AACrC,YAAM,MAAiB,CAAA;AAClB,WAAA,KAAK,KAAK,OAAO;AACtB,WAAK,MAAM,GAAG;AAAA,IAChB;AAAA,IAEO,UAAU+C,KAAa,SAAoB,UAAoC;AAC/E,WAAA,MAAM,CAACA,OAAM,IAAI,WAAW,IAAI,YAAY,CAAE,CAAA,CAAC;AAAA,IACtD;AAAA,IAEO,UAAUvD,OAAqB;AAEpC,YAAM,0BAA0B,CAAE,GAAG,KAAK,uBAAwB;AAC9D,UAAA,KAAK,QAAQ,wBAAwB;AACf,gCAAA,KAAK,KAAK,GAAG;AAAA,MACvC;AACI,UAAA,KAAK,WAAW,OAAO;AACD,gCAAA,KAAK,KAAM,GAAG;AAAA,MACxC;AAEA,UAAIA,OAAM;AACR,YAAI,UAAU;AACd,cAAM,eAAe,MAAM;AACzB,cAAI,SAAS;AAEP,gBAAA,CAAC,KAAK,QAAQ,aAAa;AAC7B,wBAAU,QAAQ,QAAQ,qBAAqB,CAAC,QAAQ,IAAI,OAAO;AACjE,uBAAO,KAAK,MAAM,GAAG,SAAS,CAAC,EAAE,KAAK,GAAG;AAAA,cAAA,CAC1C;AAAA,YACH;AAGK,iBAAA,WAAW,gBAAgB,KAAK,OAAO;AAClC,sBAAA;AAAA,UACZ;AAAA,QAAA;AAEF,iBAASX,KAAI,GAAGA,KAAIW,MAAK,QAAQX,MAAK;AAC9B,gBAAAoP,MAAKzO,MAAK,OAAOX,EAAC;AACxB,cAAI,KAAK,QAAQ,eAAeoP,QAAO,KAAK;AAC7B;AACR,iBAAA,WAAW,gBAAgB,KAAK;AAAA,UAC5B,WAAA,wBAAwB,SAASA,GAAE,GAAG;AAClC;AACb,iBAAK,iBAAiBA,GAAE;AAAA,UACf,WAAA,KAAK,uBAAuB,IAAIA,GAAE,GAAG;AACjC;AACb,iBAAK,iBAAiB,KAAK,uBAAuB,IAAIA,GAAE,CAAE;AAAA,UAAA,OACrD;AACM,uBAAAA;AAAA,UACb;AAAA,QACF;AACa;MACf;AAAA,IACF;AAAA,IAEO,UAAU,MAAc,OAAe,MAAyB,SAAuB;AACvF,WAAA,WAAW,gBAAgB,MAAM,MAAM;AAE1C,YAAI,MAAM;AACR,eAAK,UAAU,KAAK,IAAI,KAAK,SAAS,KAAK,QAAQ;AAAA,QAAA,OAC9C;AACL,eAAK,UAAU;AAAA,QACjB;AAEA,aAAK,WAAW,MAAM;AACZ;QAAA,CACT;AAGD,aAAK,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;AAAA,MAAA,CACrC;AAAA,IACH;AAAA,IAEO,UAAU,MAAuB;AAEtC,YAAM,WAAW,KAAK,MAAM,KAAK,MAAM;AAGvC,UAAI,SAAS,YAAY,KAAK,EAAE,SAAS,GAAG;AACrC,aAAA,WAAW,gBAAgB,MAAM,MAAM;AAC1C,eAAK,WAAW,QAAQ;AAAA,QAAA,CACzB;AAAA,MACH;AAAA,IACF;AAAA,IAEO,UAAUxO,OAAuB;AACtC,WAAK,YAAYA,MAAK,KAAK,MAAM,MAAMA,KAAI;AAAA,IAC7C;AAAA,IAEO,WAAW,QAAyB;AACzC,aAAO,QAAQ,KAAK,UAAU,KAAK,IAAI,CAAC;AAAA,IAC1C;AAAA,IAEO,aAAa,UAAoB;AAEhC,YAAA,YAAY,CAACA,UAA0B;AAE3C,YAAI,QAAQ,gBAAgBA,MAAK,OAAO,KAAK,WAAW;AAG7C,mBAAA,cAAc,KAAK,aAAa;AACjC,kBAAA,WAAW,cAAc,KAAK;AAAA,QACxC;AAGO,eAAA;AAAA,MAAA;AAIT,UAAI,eAAe;AACnB,YAAM,WAAW,MAAM;AACrB,cAAM,aAAa;AACnB;AACO,eAAA;AAAA,UACL,MAAM,SAAS,MAAM,UAAU;AAAA,UAC/B,OAAO,UAAU,SAAS,MAAM,UAAU,CAAC;AAAA,QAAA;AAAA,MAC7C;AAEF,YAAM,cAAc,MAAM;AACxB;AAAA,MAAA;AAIK,aAAA,eAAe,SAAS,YAAY;AAEzC,YAAIkB,QAAO;AAKP,YAAAA,MAAK,MAAM,SAAS,GAAG;AAEnB,gBAAA,OAAOA,MAAK,MAAM;AAClB,gBAAA,cAAiC,CAACA,MAAK,IAAI;AAG1C,iBAAA,eAAe,SAAS,YAAY;AACzC,YAAAA,QAAO,SAAS;AAGZ,gBAAAA,MAAK,MAAM,KAAK,CAAA,aAAY,SAAS,GAAG,IAAI,CAAC,GAAG;AACtC,0BAAA,KAAKA,MAAK,IAAI;AAAA,YAAA,OACrB;AAEO;AACZ;AAAA,YACF;AAAA,UACF;AAKK,eAAA,YAAY,KAAK,KAAK,IAAI;AAC1B,eAAA,YAAY,KAAK,KAAK,MAAM,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,CAAC;AAC7E,eAAK,YAAY;QAAI,OAChB;AAEL,eAAK,YAAYA,MAAK,KAAK,KAAK,MAAM,MAAMA,MAAK,IAAI;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,IAEO,iBAAiB,UAA6B,eAAyB;AAE5E,UAAImzB,MAAK,oBAAoB,WAAW,aAAa,QAAQ,IAAI;AAGjE,UAAI,eAAe;AACjB,cAAM,UAAoB,CAAA;AAC1B,iBAASj1B,KAAI,GAAGA,KAAIi1B,IAAG,QAAQj1B,MAAK;AAC5B,gBAAAoP,MAAK6lB,IAAG,OAAOj1B,EAAC;AACtB,cAAI,KAAK,iBAAiB,SAASoP,GAAE,GAAG;AAC9B,oBAAA,KAAK,OAAOA,GAAE;AAAA,UAAA,OACjB;AACL,oBAAQ,KAAKA,GAAE;AAAA,UACjB;AAAA,QACF;AACK,QAAA6lB,MAAA,QAAQ,KAAK,EAAE;AAAA,MACtB;AAEK,WAAA,WAAW,gBAAgB,WAAW,MAAM;AAC/C,aAAK,MAAM,UAAU;AACrB,aAAK,MAAMA,GAAE;AAAA,MAAA,CACd;AAAA,IACH;AAAA,IAEO,WAAW,QAA4B,OAAgB90B,IAAe;AACrE,YAAA,gBAAgB,KAAK,QAAQ;AACnC,WAAK,QAAQ,UAAU;AACrB,MAAAA;AACF,WAAK,QAAQ,UAAU;AAAA,IACzB;AAAA,IAEQ,KAAK,WAAsB,SAAqB;AACjD,WAAA,WAAW,KAAK,SAAS;AACtB;AACR,WAAK,WAAW;IAClB;AAAA,IAEQ,uBAAuB;AAG7B,UAAI,KAAK,OAAO,SAAS,cAAc,KAAK,OAAO,WAAW,2BAA2B;AAClF,aAAA,wBAAwB,KAAK,KAAK,GAAG;AAAA,MAC5C;AAGI,UAAA,KAAK,OAAO,WAAW,2BAA2B;AAC/C,aAAA,wBAAwB,KAAK,KAAK,GAAG;AAAA,MAC5C;AAGA,YAAM,sBAAsB,CAAC,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACxG,UAAA,KAAK,OAAO,WAAW,0BAA0B;AACnD,4BAAoB,KAAK,GAAG;AAAA,MAC9B;AACA,WAAK,iBAAiB,KAAK,GAAG,oBAAoB,OAAO,CAAAiP,QAAM,CAAC,KAAK,wBAAwB,SAASA,GAAE,CAAC,CAAC;AAO1G,YAAM,WAAW,KAAK,WAAW,wBAAwB,QAAQ;AAC5D,WAAA,uBAAuB,IAAI,KAAK,QAAQ;AAAA,IAC/C;AAAA,EACF;ACnXO,QAAM,gBAAgB;AAAA,IAe3B,YACEnO,SACA,YACA,QACA,oBACA;AAnBe;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQf,WAAK,SAASA;AAET,WAAA,gBAAgB,WAAW;AAC3B,WAAA,iBAAiB,WAAW;AAC5B,WAAA,UAAU,WAAW;AACrB,WAAA,gBAAgB,WAAW;AAC3B,WAAA,eAAe,WAAW;AAC1B,WAAA,oBAAoB,WAAW;AAC/B,WAAA,sBAAsB,WAAW;AACjC,WAAA,cAAc,WAAW;AACzB,WAAA,cAAc,WAAW;AACzB,WAAA,yBAAyB,WAAW;AAEzC,WAAK,SAAS;AACd,WAAK,qBAAqB;AAAA,IAC5B;AAAA,IAEA,MAAa,cAAc,UAAkBkW,SAA0D;AAErG,iBAAW,kBAAkB,QAAQ;AAGrC,YAAM,WAAW;AAajB,YAAM,UAAUA,QAAO,WAAW,uBAAuB,yBAAyB;AAClF,YAAM,eAAe;AAAA,QACnBA,QAAO;AAAA,QACP;AAAA,UAAC;AAAA,UAAY;AAAA,UAAiB;AAAA,UAAwB;AAAA,UACtD;AAAA,UAAe;AAAA,UAAe;AAAA,UAAoB;AAAA,UAClD;AAAA,QAAkB;AAAA,QACjB,CAAC,OAAO;AAAA,MAAA;AAIN,WAAA,cAAc,QAAQ,CAAgB,iBAAA;AACzC,mBAAW,aAAa,QAAQ;AAAA,MAAA,CACjC;AAGI,WAAA,oBAAoB,QAAQ,CAAU,WAAA;AAC9B,mBAAA,gCAAgC,UAAU,UAAU,MAAM;AAAA,MAAA,CACtE;AAEK,YAAA6d,OAAM,MAAM,KAAK,OAAO,cAAc,UAAU,cAAc,CAAA,CAAE;AACtE,YAAM,SAAS;AAAA,QACbA;AAAA,QACA,KAAK;AAAA,QACL7d,QAAO;AAAA,QACP,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MAAA;AAIF,WAAA,eAAe,QAAQ,CAAiB,kBAAA;AACpC,eAAA,MAAM,cAAc,OAAO,GAAG;AAAA,MAAA,CACtC;AAGM,aAAA;AAAA,IACT;AAAA,IASA,MAAa,gBACXlV,MACA,cACA,oBACA,SACiB;;AAEjB,YAAM,SAAS;AAAA,QACbA;AAAA,QACA,KAAK,mBAAmB;AAAA,QACxB;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MAAA;AAQP,UAAIkV,UAAS;AAAA,QACX,aAAa;AAAA,QACb,CAAC,YAAY,eAAe;AAAA,QAC5B,CAAC,oBAAoB,wBAAwB,OAAO;AAAA,MAAA;AAItD,MAAAA,UAAS,iBAAiBA,SAAQ,sBAAsBA,SAAQ,cAAclV,IAAG,GAAG,EAAE;AAGtF,UAAI,gBAA0B,CAAA;AAC1B,UAAA,CAAC,QAAQ,YAAY;AACvB,sBAAc,KAAK,4BAA4B;AAAA,MACjD;AACA,UAAI,QAAQ,KAAK;AACf,sBAAc,KAAK,OAAO;AAAA,MAC5B;AAEA,UAAI,oBAAoB;AACpB,WAAA,aAAQ,eAAR,mBAAoB,UAAU;AAChC,4BAAoB,CAAC,SAAS,WAAW,UAAU,EAAE,SAAS,QAAQ,WAAW,QAAQ,IACrF,QAAQ,WAAW,WACnB;AAAA,MACN;AACc,oBAAA,KAAK,wBAAwB,mBAAmB;AAG1D,WAAA,aAAQ,eAAR,mBAAoB,QAAQ;AAC9B,sBAAc,KAAK,eAAe,QAAQ,WAAW,MAAM;AAAA,MAC7D;AAGI,WAAA,aAAQ,eAAR,mBAAoB,OAAO;AAC7B,sBAAc,KAAK,mBAAmB;AAAA,MACxC;AAGA,sBAAgB,cAAc,OAAO,YAAY,OAAO,CAAC;AAGrD,UAAA,WAAW,MAAM,KAAK,OAAO,cAAc,OAAO,KAAKkV,SAAQ,aAAa;AAGrE,iBAAA,SAAS,QAAQ,iBAAiB,IAAI;AAI7C,WAAA,aAAQ,eAAR,mBAAoB,QAAQ;AACxB,cAAA,gBAAgB,aAAa,kBAAkB;AACrD,YAAI,iBAAiB+d,OAAAA,IAAW,eAAe,OAAO,GAAG;AACjD,gBAAAle,SAAQ,IAAI,OAAO,uBAAuB,KAAK,QAAQ,WAAW,QAAQ,GAAG,GAAG;AAC3E,qBAAA,SAAS,QAAQA,QAAO,IAAI;AAAA,QACzC;AAAA,MACF;AAGK,WAAA,uBAAuB,QAAQ,CAAiB,kBAAA;AACnD,mBAAW,cAAc,QAAQ;AAAA,MAAA,CAClC;AAGM,aAAA;AAAA,IACT;AAAA,EACF;AAGA,WAAS,aAAa,cAAkC;AAChD,UAAA,eAAe,MAAM,aAAa,OAAO;AAC/C,UAAMzE,WAAU,aAAa,GAAG,QAAQ,WAAW,EAAE,EAAE;AAChD,WAAA4iB,OAAAA,OAAc5iB,QAAO;AAAA,EAC9B;AAGA,WAAS,eAAe4E,SAAgB,YAAsB,UAAoB;AAChF,QAAI,YAAY;AAAA,MACdA;AAAA,MACA;AAAA,MACA,WAAW,IAAI,CAAA,QAAO,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,SAAS,IAAI,CAAO,QAAA,IAAI,KAAK,EAAE,KAAK,EAAE;AAAA,IAAA;AAIpF,eAAW,QAAQ,CAAO,QAAA;AACxB,kBAAY,UAAU,QAAQ,MAAM,KAAK,EAAE;AAAA,IAAA,CAC5C;AAEM,WAAA;AAAA,EACT;AAEA,WAAS,sBAAsBA,SAAgB,cAA4BlV,MAAsB;AAI/F,QAAI,qBAAqB;AAIrB,QAAA,8BAA8BA,IAAG,KACjC,CAAC,mBAAmBA,IAAG,KAAK,aAAa,WAAW,aAAc;AAC9C,4BAAA;AAAA,IACxB;AAKA,QAAIkV,QAAO,WAAW,UAAU,KAAKA,QAAO,WAAW,iBAAiB,GAAG;AACpD,2BAAA;AAAA,IACvB;AAGO,WAAA;AAAA,EACT;AAEA,WAAS,mBAAmBlV,MAAsB;AAC1C,UAAAhB,UAASgB,KAAI,KAAK;AAClB,UAAA,cAAc,CAACrB,UAA0BA,MAAK,SAASK,QAAO,MAAM,cAAcL,MAAK,SAASK,QAAO,MAAM;AACnH,WAAOwK,eAAaxJ,MAAK,WAAW,EAAE,KAAK,CAAQ,SAAA;AAI7C,UAAA,KAAK,KAAK,aAAa,GAAG;AACrB,eAAA;AAAA,MACT;AAGA,UAAI,CAAC,gBAAgB,KAAK,KAAK,UAAU,GAAG;AACnC,eAAA;AAAA,MACT;AAGM,YAAA,WAAW,KAAK,KAAK;AACpB,aAAAwJ,eAAa,UAAU,CAAQ7K,UAAAA,MAAK,SAASK,QAAO,MAAM,UAAU,EAAE,SAAS;AAAA,IAAA,CACvF;AAAA,EACH;AAEA,WAAS,YAAY,SAA8B;AACjD,UAAM,gBAA0B,CAAA;AAChC,QAAI,QAAQ,MAAM;AAChB,UAAI,QAAQ,SAAS,UAAU,QAAQ,SAAS,YAAY;AAC1D,sBAAc,KAAK,aAAa;AAAA,MAAA,OAC3B;AACL,cAAMoJ,UAAS,SAAS,QAAQ,MAAM,EAAE;AACxC,YAAIA,SAAQ;AACV,wBAAc,KAAK,aAAa;AAClB,wBAAA,KAAK,aAAaA,SAAQ;AAAA,QAAA,OACnC;AACL,wBAAc,KAAK,aAAa;AAAA,QAClC;AAAA,MACF;AAAA,IAAA,OACK;AACL,oBAAc,KAAK,aAAa;AAAA,IAClC;AACO,WAAA;AAAA,EACT;AC5Ue,QAAA,YAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,0BAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,cAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,yBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,uBAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,uBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,eAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,WAAA;ACAA,QAAA,eAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,0BAAA;ACAA,QAAA,cAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,0BAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,0BAAA;ACAA,QAAA,WAAA;ACAA,QAAA,eAAA;ACAA,QAAA,YAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,eAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,cAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,cAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,eAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,eAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,YAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,YAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,WAAA;ACAA,QAAA,eAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,aAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,YAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,WAAA;ACAA,QAAA,eAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,eAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,0BAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,wBAAA;ACAA,QAAA,WAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,cAAA;ACAA,QAAA,gBAAA;ACAA,QAAA,oBAAA;ACAA,QAAA,wBAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,uBAAA;ACAA,QAAA,uBAAA;ACAA,QAAA,iBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,kBAAA;ACAA,QAAA,sBAAA;ACAA,QAAA,mBAAA;ACAA,QAAA,uBAAA;ACAA,QAAA,qBAAA;ACAA,QAAA,0BAAA;ACAA,QAAA,yBAAA;ACAA,QAAA,yBAAA;ACAA,QAAA,uBAAA;ACAA,QAAA,wBAAA;ACAA,QAAA,yBAAA;ACAA,QAAA,YAAA;ACAA,QAAA,UAAA;ACsKR,WAAS,wBAAwC;AAC/C,WAAA;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,aAAa;AAAA,QACX,SAAS;AAAA,QACT,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,QACV,eAAe;AAAA,QACf,aAAa;AAAA,QACb,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,aAAa;AAAA,QACb,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,cAAc;AAAA,QACd,KAAK;AAAA,QACL,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,eAAe;AAAA,QACf,UAAU;AAAA,QACV,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,sBAAsB;AAAA,QACtB,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,sBAAsB;AAAA,QACtB,iBAAiB;AAAA,QACjB,sBAAsB;AAAA,QACtB,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,WAAW;AAAA,QACX,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe;AAAA,QACf,oBAAoB;AAAA,QACpB,aAAa;AAAA,QACb,kBAAkB;AAAA,QAClB,aAAa;AAAA,QACb,kBAAkB;AAAA,MACpB;AAAA,MACA,WAAW;AAAA,QACT,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,WAAW;AAAA,QACX,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,UAAU;AAAA,QACV,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,WAAW;AAAA,QACX,KAAK;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,eAAe;AAAA,QACf,UAAU;AAAA,QACV,aAAa;AAAA,QACb,oBAAoB;AAAA,QACpB,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,aAAa;AAAA,QACb,KAAK;AAAA,QACL,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,SAAS+qB;AAAAA,QACT,cAAc;AAAA,QACd,UAAU;AAAA,QACV,eAAe;AAAA,QACf,SAAS;AAAA,QACT,cAAc;AAAA,QACd,UAAU;AAAA,QACV,cAAc;AAAA,QACd,eAAe;AAAA,QACf,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,cAAc;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACP,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,IAAA;AAAA,EAEJ;AC5SgB,WAAA,UAAU5zB,SAAiB0X,KAAc;AAChD,WAAA;AAAA,MACL,GAAI1X,UACA;AAAA,QAAC,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,QAC5C,EAAE,WAAW,KAAK;AAAA,MAAA,IAEnB,CAAC;AAAA,MAEL,EAAE,SAAS,gBAAgB,kBAAkB;AAAA,MAC7C,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,MAC5C,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,qBAAqB;AAAA,MAChD,EAAE,SAAS,gBAAgB,oBAAoB;AAAA,MAC/C,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,eAAe;AAAA,MAC1C,EAAE,SAAS,gBAAgB,kBAAkB;AAAA,MAC7C,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,MAC5C,EAAE,WAAW,KAAK;AAAA,MAClB;AAAA,QACE,MAAM0X,IAAG,QAAQ,cAAc,cAAc;AAAA,QAC7C,SAAS;AAAA,UACP,OAAO;AAAA,YACL,EAAE,SAAS,gBAAgB,qBAAqB;AAAA,YAChD,EAAE,SAAS,gBAAgB,uBAAuB;AAAA,YAClD,EAAE,SAAS,gBAAgB,sBAAsB;AAAA,YACjD,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,wBAAwB;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,kBAAkB;AAAA,MAC7C,EAAE,SAAS,gBAAgB,mBAAmB;AAAA,IAAA;AAAA,EAElD;ACnCgB,WAAA,YAAY,SAAwBA,KAAc,UAA2B;AACpF,WAAA;AAAA,MACL,QAAQ,WAAWA,KAAI,QAAQ;AAAA,MAC/B,QAAQ,WAAW,SAASA,KAAI,QAAQ;AAAA,MACxC,OAAO,UAAU,MAAMA,GAAE;AAAA,IAAA;AAAA,EAE7B;AAEA,WAAS,WAAWA,KAAc,UAA2B;AACpD,WAAA;AAAA,MACL,EAAE,SAAS,gBAAgB,OAAO;AAAA,MAClC,EAAE,SAAS,gBAAgB,GAAG;AAAA,MAC9B,EAAE,SAAS,gBAAgB,UAAU;AAAA,MACrC,EAAE,SAAS,gBAAgB,KAAK;AAAA,MAChC;AAAA,QACE,MAAMA,IAAG,QAAQ,cAAc,MAAM;AAAA,QACrC,SAAS;AAAA,UACP,OAAO;AAAA,YACL,EAAE,SAAS,gBAAgB,UAAU;AAAA,YACrC,EAAE,SAAS,gBAAgB,YAAY;AAAA,YACvC,EAAE,SAAS,gBAAgB,UAAU;AAAA,YACrC,EAAE,SAAS,gBAAgB,UAAU;AAAA,UACvC;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,MAClB;AAAA,QACE,MAAMA,IAAG,QAAQ,cAAc,qBAAqB;AAAA,QACpD,SAAS;AAAA,UACP,OAAO;AAAA,YACL,EAAE,SAAS,gBAAgB,WAAW;AAAA,YACtC,EAAE,SAAS,gBAAgB,YAAY;AAAA,YACvC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,UAAU;AAAA,YACrC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,cAAc;AAAA,YACzC,EAAE,SAAS,gBAAgB,oBAAoB;AAAA,YAC/C,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,aAAa;AAAA,YACxC,EAAE,SAAS,gBAAgB,aAAa;AAAA,YACxC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,mBAAmB;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,iBAAiB,QAAQ,EAAE;AAAA,MACtC,EAAE,SAAS,gBAAgB,WAAW;AAAA,MACtC,EAAE,SAAS,gBAAgB,UAAU;AAAA,MACrC,EAAE,WAAW,UAAU,UAAU,gBAAgB,KAAK,gBAAgB,IAAI,EAAE;AAAA,MAC5E,EAAE,SAAS,gBAAgB,IAAI;AAAA,MAC/B,EAAE,SAAS,gBAAgB,KAAK;AAAA,MAChC,EAAE,WAAW,KAAK;AAAA,MAClB;AAAA,QACE,MAAMA,IAAG,QAAQ,cAAc,KAAK;AAAA,QACpC,SAAS;AAAA,UACP,OAAO;AAAA,YACL,EAAE,SAAS,gBAAgB,WAAW;AAAA,YACtC,EAAE,SAAS,gBAAgB,UAAU;AAAA,YACrC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,UAAU;AAAA,YACrC,EAAE,SAAS,gBAAgB,SAAS;AAAA,YACpC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,UAAU;AAAA,YACrC,EAAE,SAAS,gBAAgB,SAAS;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,gBAAgB;AAAA,MAC3C,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,SAAS;AAAA,IAAA;AAAA,EAExC;AAEA,WAAS,WAAW,SAAwBA,KAAc,UAA2B;AAC7E,UAAA,YAAY,CAAC,CAAC,QAAQ;AACrB,WAAA;AAAA,MACL,EAAE,SAAS,gBAAgB,WAAW;AAAA,MACtC,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,aAAa;AAAA,MACxC,GAAI,UAAU,UAAU,gBAAgB,YAAY,gBAAgB,eAAe,IAC/E;AAAA,QACE,EAAE,WAAW,KAAK;AAAA,QAClB;AAAA,UACE,MAAMA,IAAG,QAAQ,cAAc,iBAAiB;AAAA,UAChD,SAAS;AAAA,YACP,OAAO;AAAA,cACL,GAAI,YACA;AAAA,gBAAE,EAAE,SAAS,gBAAgB,gBAAgB;AAAA,gBAC3C,EAAE,SAAS,gBAAgB,WAAW;AAAA,cAAA,IACxC;AAAA,gBAAE,EAAE,SAAS,gBAAgB,WAAW;AAAA,gBACtC,EAAE,SAAS,gBAAgB,gBAAgB;AAAA,cAAE;AAAA,cAEnD,EAAE,SAAS,gBAAgB,cAAc;AAAA,cACzC,EAAE,SAAS,gBAAgB,cAAc;AAAA,cACzC,EAAE,SAAS,gBAAgB,aAAa;AAAA,cACxC,EAAE,SAAS,gBAAgB,YAAY;AAAA,cACvC,EAAE,SAAS,gBAAgB,cAAc;AAAA,cACzC,EAAE,SAAS,gBAAgB,eAAe;AAAA,cAC1C,EAAE,WAAW,KAAK;AAAA,cAClB,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,cAC5C,EAAE,SAAS,gBAAgB,kBAAkB;AAAA,YAC/C;AAAA,UACF;AAAA,QACF;AAAA,MAAA,IAEF,CAAC;AAAA,MACL,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,MAAM;AAAA,MACjC,EAAE,SAAS,gBAAgB,MAAM;AAAA,MACjC,EAAE,SAAS,gBAAgB,KAAK;AAAA,MAChC,EAAE,SAAS,gBAAgB,UAAU;AAAA,MACrC,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,gBAAgB;AAAA,MAC3C,GAAI,UAAU,UAAU,gBAAgB,UAAU,gBAAgB,gBAAgB,gBAAgB,QAAQ,IACxG;AAAA,QACA,EAAE,WAAW,KAAK;AAAA,QAClB,EAAE,SAAS,gBAAgB,SAAS;AAAA,QACpC,EAAE,SAAS,gBAAgB,eAAe;AAAA,QAC1C,EAAE,SAAS,gBAAgB,SAAS;AAAA,MAAA,IAClC,CAAC;AAAA,MACL,GAAI,UAAU,UAAU,gBAAgB,kBAAkB,gBAAgB,kBAAkB,gBAAgB,kBAAkB,IAC5H;AAAA,QACA,EAAE,WAAW,KAAK;AAAA,QAClB,EAAE,SAAS,gBAAgB,mBAAmB;AAAA,QAC9C,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,QAC5C,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,MAAA,IAC1C,CAAC;AAAA,MACL,EAAE,WAAW,KAAK;AAAA,MAClB,GAAI,UAAU,UAAU,gBAAgB,YAAY,gBAAgB,WAAW,IAC7E;AAAA,QACE;AAAA,UACE,MAAMA,IAAG,QAAQ,cAAc,YAAY;AAAA,UAC3C,SAAS;AAAA,YACP,OAAO;AAAA,cACL,EAAE,SAAS,gBAAgB,WAAW;AAAA,cACtC,EAAE,SAAS,gBAAgB,YAAY;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AAAA,MAAA,IAEF,CAAC;AAAA,MACH,GAAI,UAAU,UAAU,gBAAgB,cAAc,IAClD;AAAA,QACE;AAAA,UACE,MAAMA,IAAG,QAAQ,cAAc,YAAY;AAAA,UAC3C,SAAS;AAAA,YACP,OAAO;AAAA,cACL,EAAE,SAAS,gBAAgB,eAAe;AAAA,cAC1C,EAAE,WAAW,KAAK;AAAA,cAClB,EAAE,SAAS,gBAAgB,eAAe;AAAA,cAC1C,EAAE,SAAS,gBAAgB,sBAAsB;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,MAAA,IAEF,CAAC;AAAA,MACL;AAAA,QACE,MAAMA,IAAG,QAAQ,cAAc,oBAAoB;AAAA,QACnD,SAAS;AAAA,UACP,OAAO;AAAA,YACL,EAAE,SAAS,gBAAgB,MAAM;AAAA,YACjC,EAAE,SAAS,gBAAgB,OAAO;AAAA,YAClC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,OAAO;AAAA,YAClC,EAAE,SAAS,gBAAgB,OAAO;AAAA,YAClC,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,iBAAiB;AAAA,YAC5C,EAAE,WAAW,KAAK;AAAA,YAClB,EAAE,SAAS,gBAAgB,cAAc;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,WAAW,KAAK;AAAA,MAClB,EAAE,SAAS,gBAAgB,gBAAgB;AAAA,MAC3C,EAAE,SAAS,gBAAgB,UAAU;AAAA,MACrC,EAAE,SAAS,gBAAgB,eAAe;AAAA,MAC1C,GAAI,UAAU,UAAU,gBAAgB,MAAM,IAC3C;AAAA,QACD,EAAE,WAAW,KAAK;AAAA,QAClB,EAAE,SAAS,gBAAgB,OAAO;AAAA,QAClC,EAAE,SAAS,gBAAgB,QAAQ;AAAA,MAAA,IAChC,CAAC;AAAA,MACN,EAAE,WAAW,KAAK;AAAA,MAClB;AAAA,QAAE,SAAS,UAAU,UAAU,gBAAgB,WAAW,IACpD,gBAAgB,cAChB,gBAAgB;AAAA,MACtB;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,UAAU,aAA8B,KAAwB;AACvE,eAAW,WAAW,UAAU;AAC9B,UAAI,IAAI,SAAS,QAAQ,EAAE,GAAG;AACrB,eAAA;AAAA,MACT;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAEA,WAAS,iBAAiB,UAA2B;AACnD,WAAO,UAAU,UAAU,gBAAgB,eAAe,IACtD,gBAAgB,kBAChB,gBAAgB;AAAA,EACtB;AC1MgB,WAAA,aAAa,SAAwB,YAA8B,qBAAsC;AAEvH,UAAMhY,SAAsC;AAAA,MAC1C,KAAK;AAAA,QACH,OAAO;AAAA,UACL,SAAS,EAAE,SAAS,MAAM;AAAA,QAC5B;AAAA,QACA,SAAS,gBAAgB,QAAQ,aAAa,iBAAiB;AAAA,MACjE;AAAA,MAEA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,WAAW;AAAA,QACX,UAAU,CAAC,EAAE,KAAK,sBAAsB;AAAA,QACxC,QAAQ;AACC,iBAAA;AAAA,YACL;AAAA,YACA,EAAE,OAAO,iFACG,sBAAsB,IAAI,uBAAuB,IAAI;AAAA,YACjE,CAAC,OAAO,EAAE,OAAO,aAAA,GAAgB,CAAC;AAAA,UAAA;AAAA,QAEtC;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,CAAC,EAAE,KAAK,uBAAuB;AAAA,QACzC,QAAQ;AACC,iBAAA;AAAA,YACL;AAAA,YACA,EAAE,OAAO,gFAAgF,qBAAqB;AAAA,YAC9G,CAAC,OAAO,EAAE,OAAO,aAAA,GAAgB,CAAC;AAAA,UAAA;AAAA,QAEtC;AAAA,MACF;AAAA,MAEA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,UACL,KAAK,CAAC;AAAA,UACN,QAAQ,EAAE,SAAS,EAAE;AAAA,QACvB;AAAA,QACA,WAAW;AAAA,QACX,UAAU;AAAA,UACR;AAAA,YACE,KAAK;AAAA,YACL,SAAS,KAAoB;AAC3B,oBAAMpB,MAAK;AACJ,qBAAA;AAAA,gBACL,KAAKA,IAAG,aAAa,UAAU;AAAA,cAAA;AAAA,YAEnC;AAAA,UACF;AAAA,QACF;AAAA,QACA,MAAMc,OAAuB;AACpB,iBAAA;AAAA,YACL;AAAA,YACA,EAAE,YAAYA,MAAK,MAAM,KAAK,OAAO,yBAAyB,eAAeA,MAAK,MAAM,OAAO;AAAA,YAC/F;AAAA,UAAA;AAAA,QAEJ;AAAA,MACF;AAAA,MAEA,GAAI,QAAQ,aAAa;AAAA,QACvB,aAAa;AAAA,UACX,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,OAAO,CAAC;AAAA,QAEV;AAAA,MAAA,IACE,CAAC;AAAA,IAAA;AAGP,eAAW,YAAY,EAAE,QAAQ,CAACA,UAAqB;AAC/C,MAAAM,OAAAN,MAAK,QAAQA,MAAK;AAAA,IAAA,CACzB;AAGD,UAAM,QAAsC,CAAA;AAC5C,eAAW,YAAY,EAAE,QAAQ,CAAC,SAAqB;AAC/C,YAAA,KAAK,QAAQ,KAAK;AAAA,IAAA,CACzB;AAKD,QAAI,MAAM,MAAM;AACd,YAAM,gBAAgB,WACnB,cACA,OAAO,CAAA,SAAQ,KAAK,gBAAgB,KAAK,SAAS,MAAM,EACxD,IAAI,CAAA,SAAQ,KAAK,IAAI,EACrB,KAAK,GAAG;AACX,YAAM,KAAK,WAAW;AAAA,IACxB;AAGA,WAAO,IAAIsC,SAAO;AAAA,MAChB,OAAAhC;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EACH;;;ACxGA,QAAMuX,cAAY,MAAM;AAGf,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,OAAO;AAAA,YAEP,MAAM7X,OAA4B;AAChC,qBAAOA,MAAK;AAAA,YACd;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP,EAAE,OAAO,gBAAgB,KAAK,MAAM,MAAM,SAAS,CAAC0Y,OAAmBA,GAAE,EAAE;AAAA,cAC3E,EAAE,OAAO,gBAAgB,OAAO,MAAM,MAAM,SAAS,MAAM,IAAI;AAAA,cAC/D,EAAE,OAAO,gBAAgB,WAAW,MAAM,MAAM,SAAS,MAAM,IAAI;AAAA,cACnE;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,SAAS,MAAM,CAAC,QAA2B,QAAqB;AACxD,wBAAAnY,QAAO,IAAI,EAAE,YAAY;AAC/B,wBAAM,QAAQA,UAAS,UAAU,cAAc,MAAM;AACrD,yBAAO,YAAY,CAAC,EAAE,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,EAAE,iBAAiB,EAAE,GAAG,OAAO,GAAG,MAAO,CAAA,CAAC;AAAA,gBAC/F;AAAA,cACF;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,QAAsBP,UAA0B;AACvD,oBAAMD,QAAOC,MAAK;AAClB,qBAAO,UAAUD,KAAI;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AChCA,QAAM8X,cAAuB;AAAA,IAC3B,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,OAAO;AAAA,UACP,UAAU,CAAC,EAAE,KAAK,KAAK;AAAA,UACvB,QAAQ;AACC,mBAAA,CAAC,KAAK,CAAC;AAAA,UAChB;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,YACP,EAAE,OAAO,gBAAgB,MAAM,OAAO,YAAY;AAAA,YAClD,EAAE,OAAO,gBAAgB,OAAO,OAAO,YAAY;AAAA,UACrD;AAAA,UACA,QAAQ,CAAC,QAAsB7X,UAA0B;AAChD,mBAAA,WAAW,gBAAgB,MAAM,MAAM;AACrC,qBAAA,aAAaA,MAAK,OAAO;AAAA,YAAA,CACjC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,UAAU,CAACK,YAAmB;AACrB,aAAA;AAAA,QACL,IAAI,aAAa,gBAAgB,WAAW,CAAC,WAAW,GAAGA,QAAO,MAAM,WAAWA,QAAO,MAAM,SAAS;AAAA,QACzG,IAAI,uBAAuB;AAAA,MAAA;AAAA,IAE/B;AAAA,IAEA,SAAS,CAACA,YAAmB;AAC3B,UAAI,QAAQ;AACZ,aAAO,CAAC,2BAA2BA,QAAO,MAAM,WAAW,MAAM,6DAA6D,CAAM,OAAA;AAClI,YAAI,QAAQ,GAAG;AACT,cAAA,iCAAiC,GAAG,SAAS,GAAG;AAClD,gBAAI,GAAG,YAAY;AACjB;AACO,qBAAA;AAAA,YAAA,OACF;AACE,qBAAA;AAAA,YACT;AAAA,UAAA,OACK;AACE,mBAAA;AAAA,UACT;AAAA,QAAA,OACK;AACE,iBAAA;AAAA,QACT;AAAA,MACD,CAAA,CAAC;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,+BAA+B,mBAAmB;AAAA,IACtD,cAAc;AACZ,YAAM,gBAAgB,iBAAiB,CAAC,GAAG,eAAe;AAAA,IAC5D;AAAA,EACF;AC9CA,QAAM,iBAAiB,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAExC,QAAMwX,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,QAAAtB,SAAQ,IAAA+B,IAAA,IAAO;AAEnC,UAAA,cAAc,iBAAiB,qBAAqB,iBAAiB;AAEpE,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,OAAO,EAAE,SAAS,EAAE;AAAA,cACpB,MAAM,EAAE,SAAS,KAAK;AAAA,cACtB,eAAe,EAAE,SAAS,KAAK;AAAA,cAC/B,GAAI,cAAc,iBAAiB,CAAC;AAAA,YACtC;AAAA,YACA,SAAS;AAAA,YACT,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU;AAAA,cACR,EAAE,KAAK,MAAM,UAAU,aAAa,GAAG,WAAW,EAAE;AAAA,cACpD,EAAE,KAAK,MAAM,UAAU,aAAa,GAAG,WAAW,EAAE;AAAA,cACpD,EAAE,KAAK,MAAM,UAAU,aAAa,GAAG,WAAW,EAAE;AAAA,cACpD,EAAE,KAAK,MAAM,UAAU,aAAa,GAAG,WAAW,EAAE;AAAA,cACpD,EAAE,KAAK,MAAM,UAAU,aAAa,GAAG,WAAW,EAAE;AAAA,cACpD,EAAE,KAAK,MAAM,UAAU,aAAa,GAAG,WAAW,EAAE;AAAA,YACtD;AAAA,YACA,MAAMtY,OAAM;AACV,oBAAM,OAAO,cAAc,oBAAoBA,MAAK,KAAK,IAAI;AAC7D,mBAAK,SAAS,KAAK,SAAmB,IAAI,OAAO,aAAa;AACvD,qBAAA;AAAA,gBACL,MAAMA,MAAK,MAAM;AAAA,gBACjB;AAAA,kBACE,aAAaA,MAAK,MAAM;AAAA,kBACxB,GAAG;AAAA,gBACL;AAAA,gBAEA;AAAA,cAAA;AAAA,YAEJ;AAAA,UACF;AAAA,UAEA,WAAW,MAAM;AACf,gBAAI,aAAa;AACR,qBAAA;AAAA,gBACL,MAAM,CAACK,YAAmBA,QAAO,MAAM;AAAA,gBACvC,QAAQ;AAAA,kBACN,KAAK;AAAA,kBACL,OAAO;AAAA,gBACT;AAAA,gBACA,cAAc;AAAA,cAAA;AAAA,YAChB,OACK;AACE,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,UAEA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,OAAO;AAAA,gBACP,UAAU,CAAC,SAAsB;AAAA,kBAC/B,OAAO,IAAI,EAAE;AAAA,kBACb,eAAe,OAAO;AAAA,kBACtB,GAAI,cAAc,kBAAkB,KAAK,YAAY,IAAI,CAAC;AAAA,gBAAA;AAAA,gBAE5D,aAAa,CAAC,QAAqB,IAAI,EAAE;AAAA,cAC3C;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,QAAsBL,UAA0B;AAChD,qBAAA,WAAW,gBAAgB,QAAQ,MAAM;AACvC,uBAAA,MAAMA,MAAK,MAAM,KAAK;AAC7B,oBAAI,aAAa;AACR,yBAAA,UAAUA,MAAK,MAAM,IAAIA,MAAK,MAAM,SAASA,MAAK,MAAM,QAAQ;AAAA,gBAAA,OAClE;AACL,yBAAO,UAAU;AAAA,gBACnB;AACA,uBAAO,WAAW,MAAM;AACtB,sBAAIA,MAAK,MAAM,UAAU,KAAKuW,QAAO,cAAc,cAAc;AAC/D,oCAAgB,QAAQvW,KAAI;AAAA,kBAAA,OACvB;AACE,2BAAA,aAAaA,MAAK,OAAO;AAAA,kBAClC;AAAA,gBAAA,CACD;AAAA,cAAA,CACF;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,CAACK,YAAmB;AACrB,eAAA;AAAA,UACL,IAAI,eAAeA,SAAQ,gBAAgB,UAAU,GAAG,mBAAmBiY,GAAE,CAAC;AAAA,UAC9E,IAAI,eAAejY,SAAQ,gBAAgB,UAAU,GAAG,mBAAmBiY,GAAE,CAAC;AAAA,UAC9E,IAAI,eAAejY,SAAQ,gBAAgB,UAAU,GAAG,mBAAmBiY,GAAE,CAAC;AAAA,UAC9E,IAAI,eAAejY,SAAQ,gBAAgB,UAAU,GAAG,mBAAmBiY,GAAE,CAAC;AAAA,UAC9E,IAAI,eAAejY,SAAQ,gBAAgB,UAAU,CAAC;AAAA,UACtD,IAAI,eAAeA,SAAQ,gBAAgB,UAAU,CAAC;AAAA,QAAA;AAAA,MAE1D;AAAA,MAEA,YAAY,CAACA,YAAmB;AAC9B,cAAM,QAAQ;AAAA,UACZ;AAAA,YACE,IAAI,OAAO,WAAW,eAAe,SAAS,QAAQ;AAAA,YACtDA,QAAO,MAAM;AAAA,YACb,CAAUkB,YAAA;AAAA,cACR,OAAOA,OAAM,GAAG;AAAA,cAChB,eAAe,OAAO;AAAA,YAAA;AAAA,UAE1B;AAAA,QAAA;AAGF,YAAI,aAAa;AACT,gBAAA,KAAK,0BAA0BlB,OAAM,CAAC;AAAA,QAC9C;AAEO,eAAA;AAAA,MACT;AAAA,MAEA,SAAS,CAACA,YAAmB;AAC3B,eAAO,CAAC,8BAA8BA,QAAO,MAAM,SAASiY,GAAE,CAAC;AAAA,MACjE;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,0BAA0BjY,SAAgB;AACjD,WAAO,IAAI,UAAU,eAAe,CAAC,OAAoBkB,QAAyB,OAAe,QAAgB;AAE/G,YAAM,UAAU8I,uBAAqBhK,QAAO,MAAM,OAAO,EAAE,MAAM,SAAS;AAC1E,UAAI,SAAS;AAEL,cAAA,QAAQ,oBAAoBkB,OAAM,EAAE;AAC1C,YAAI,OAAO;AACT,gBAAM,KAAK,MAAM;AACd,aAAA,cAAc,QAAQ,KAAK,QAAW;AAAA,YACvC,GAAG,QAAQ,KAAK;AAAA,YAChB,GAAG;AAAA,UAAA,CACJ;AACE,aAAA,YAAY,QAAQ,GAAG,GAAG;AACtB,iBAAA;AAAA,QAAA,OACF;AACE,iBAAA;AAAA,QACT;AAAA,MAAA,OACK;AACE,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EACH;AAEA,QAAM,uBAAuB,mBAAmB;AAAA,IAI9C,YAAYlB,SAAgBiD,KAAqB,OAAe,YAAyB;AACjF,YAAAA,KAAI,CAAC,aAAa,KAAK,GAAG,iBAAiBjD,SAAQ,KAAK,GAAG,UAAU;AAJ7D;AACA;AAIT,WAAA,WAAWA,QAAO,MAAM;AAC7B,WAAK,QAAQ;AAAA,IACf;AAAA,IAEO,SAAS,OAAoB;AAC5B,YAAA,YAAY,CAACD,OAAuBA,GAAE,SAAS,KAAK,YAAYA,GAAE,MAAM,UAAU,KAAK;AAC7F,YAAMJ,QAAOiK,iBAAe,SAAS,EAAE,MAAM,SAAS;AACtD,aAAO,CAAC,CAACjK;AAAA,IACX;AAAA,EACF;AAEA,WAAS,mBAAmBsY,KAAc;AACxC,WAAO,kBAAkBA,KAAI,GAAGA,IAAG,QAAQ,cAAc,cAAc,GAAG;AAAA,MACxEA,IAAG,OAAO,YAAY;AAAA,MACtBA,IAAG,OAAO,YAAY;AAAA,IAAA,CACvB;AAAA,EACH;AAEA,WAAS,mBAAmBA,KAAc;AACxC,WAAO,kBAAkBA,KAAI,GAAGA,IAAG,QAAQ,cAAc,iBAAiB,GAAG;AAAA,MAC3EA,IAAG,OAAO,YAAY;AAAA,MACtBA,IAAG,OAAO,YAAY;AAAA,IAAA,CACvB;AAAA,EACH;AACA,WAAS,mBAAmBA,KAAc;AACxC,WAAO,kBAAkBA,KAAI,GAAGA,IAAG,QAAQ,cAAc,qBAAqB,GAAG;AAAA,MAC/EA,IAAG,OAAO,YAAY;AAAA,MACtBA,IAAG,OAAO,YAAY;AAAA,IAAA,CACvB;AAAA,EACH;AAEA,WAAS,mBAAmBA,KAAc;AACxC,WAAO,kBAAkBA,KAAI,GAAGA,IAAG,QAAQ,cAAc,eAAe,GAAG;AAAA,MACzEA,IAAG,OAAO,YAAY;AAAA,MACtBA,IAAG,OAAO,YAAY;AAAA,IAAA,CACvB;AAAA,EACH;AAEA,WAAS,kBAAkBA,KAAc,OAAe,aAAqB,QAA0B,QAAQ,gBAAgB,UAAsB;AAC5I,WAAA;AAAA,MACL,MAAM,YAAYA,KAAI,KAAK;AAAA,MAC3B,UAAU,CAAC,MAAM,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,MACA,OAAO,MAAOA,IAAG,MAAM,aAAa,OAAO,KAAK,OAAO;AAAA,IAAA;AAAA,EAE3D;AAEA,WAAS,YAAYA,KAAc,OAAe;AAChD,UAAM,iBAAiBA,IAAG,QAAQ,cAAc,SAAS;AACzD,WAAO,GAAG,kBAAkB;AAAA,EAC9B;AAEA,WAAS,iBAAiBjY,SAAgB,OAAe;AAChD,WAAA,gBAAgBA,QAAO,MAAM,SAASA,QAAO,MAAM,WAAW,EAAE,MAAA,CAAO;AAAA,EAChF;AAGA,WAAS,aAAa,OAAe,qBAA8B;AACjE,WAAO,CAAC,QAAuB;AAC7B,YAAMnB,MAAK;AACJ,aAAA;AAAA,QACL;AAAA,QACA,aAAaA,IAAG,aAAa,WAAW;AAAA,QACxC,GAAI,sBAAsB,mBAAmBA,KAAI,CAAA,CAAE,IAAI,CAAC;AAAA,MAAA;AAAA,IAC1D;AAAA,EAEJ;AAEA,WAAS,8BAA8B,UAAoBoZ,KAAc;AAChE,WAAA,2BAA2B,UAAU,CAAQtY,UAAA,YAAYsY,KAAItY,MAAK,MAAM,KAAK,CAAC;AAAA,EACvF;AAGA,WAAS,gBAAgB,QAAsBA,OAAuB;AAGpE,UAAM,YAAYA,MAAK,YAAY,MAAM,uBAAuB;AAChE,QAAI,WAAW;AACP,YAAAK,UAASL,MAAK,KAAK;AAClB,aAAA,aAAa,SAAS,KAAKK,QAAO,KAAK,UAAU,KAAK,SAAS,CAAC,CAAC;AACxE,aAAO,aAAaL,MAAK,QAAQ,IAAI,UAAU,GAAG,MAAM,CAAC;AAAA,IAAA,OACpD;AACE,aAAA,aAAaA,MAAK,OAAO;AAAA,IAClC;AAAA,EACF;AChQA,QAAM6X,cAAY,CAAC,YAA8B;AACzC,UAAA,EAAE,IAAAS,IAAO,IAAA;AAER,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,OAAO;AAAA,YACP,UAAU;AAAA,YACV,UAAU,CAAC,EAAE,KAAK,cAAc;AAAA,YAChC,QAAuB;AACrB,qBAAO,CAAC,cAAc,EAAE,OAAO,yCAAyC,CAAC;AAAA,YAC3E;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,OAAO;AAAA,cACT;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,QAAsBtY,UAA0B;AAChD,qBAAA,WAAW,gBAAgB,YAAY,MAAM;AAClD,uBAAO,WAAWA,KAAI;AAAA,cAAA,CACvB;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,CAACK,YAAmB;AAC5B,eAAO,CAAC,IAAI,YAAY,gBAAgB,YAAY,CAAA,GAAIA,QAAO,MAAM,YAAY,CAAC,GAAG,qBAAqBiY,GAAE,CAAC,CAAC;AAAA,MAChH;AAAA,MAEA,YAAY,CAACjY,YAAmB;AAC9B,eAAO,CAAC,kBAAkB,YAAYA,QAAO,MAAM,UAAU,CAAC;AAAA,MAChE;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,qBAAqBiY,KAAc;AACnC,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,YAAY;AAAA,MAC3C,aAAaA,IAAG,QAAQ,cAAc,oCAAoC;AAAA,MAC1E,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,kBAAkBA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAEtG;ACnCA,QAAM,wBAAwB;AAE9B,QAAMT,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,oBAAoB,IAAAS,KAAI,YAAY;AAExD,UAAA,UAAU,oBAAoB,gBAAgB;AAE7C,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UAEN,MAAM;AAAA,YACJ,GAAG,aAAa;AAAA,YAChB,OAAO,EAAE,GAAI,UAAU,iBAAiB,CAAA,EAAI;AAAA,YAC5C,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,oBAAoB;AAAA,gBACpB,UAAU,CAACtY,UAAwB;AACjC,sBAAI,SAAS;AACX,0BAAMd,MAAKc;AACJ,2BAAA,mBAAmBd,KAAI,CAAA,CAAE;AAAA,kBAAA,OAC3B;AACL,2BAAO;kBACT;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMc,OAAuB;AAC3B,oBAAM,YAAY;AACZ,oBAAA,QAAQ,UACV,oBAAoB;AAAA,gBAClB,GAAGA,MAAK;AAAA,gBACR,SAAS,CAAC,GAAGA,MAAK,MAAM,SAAS,SAAS;AAAA,cAAA,CAC3C,IACD;AAAA,gBACE,OAAO;AAAA,cAAA;AAEb,qBAAO,CAAC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AAAA,YACnC;AAAA,UACF;AAAA,UAEA,WAAW;AAAA,YACT,MAAM,CAACA,UAA0B;AACxB,qBAAA,cAAcA,OAAM,OAAO;AAAA,YACpC;AAAA,YACA,YAAY,yBAAyB,kBAAkBsY,KAAI,mBAAmB,mBAAmB;AAAA,UACnG;AAAA,UAEA,WAAW,kBAAkB,kBAAkB,oBAAoBA,GAAE;AAAA,UAErE,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,YAAY;AAAA,cACd;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,QAAsBtY,UAA0B;AAGvD,kBAAI,CAAC,oBAAoBA,MAAK,KAAK,KAAK,iBAAiB,sBAAsB;AAC7E,oBAAID,QAAOC,MAAK;AACV,sBAAA,YAAY,MAAMD,KAAI;AACxB,oBAAA,UAAU,SAAS,GAAG;AACxB,wBAAMwB,SAAQ,UAAU,GAAG,MAAM,+BAA+B;AAChE,sBAAIA,QAAO;AACT,8BAAU,KAAK,GAAGA,OAAM,MAAMA,OAAM,MAAMA,OAAM;AACzC,oBAAAxB,QAAA,UAAU,KAAK,IAAI;AACnB,2BAAA,WAAW,gBAAgB,MAAM,MAAM;AAC5C,6BAAO,iBAAiBA,KAAI;AAAA,oBAAA,CAC7B;AACD;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAEO,qBAAA,WAAW,gBAAgB,WAAW,MAAM;AACjD,oBAAI,SAAS;AACX,wBAAMuD,MAAK,iBAAiB,yBAAyBtD,MAAK,MAAM,KAAK;AACrE,wBAAM,WAAW,iBAAiB,yBAAyBA,MAAK,MAAM,WAAW;AAMjF,wBAAM,UAAU,CAAC,GAAGA,MAAK,MAAM,OAAO;AACtC,sBAAI,CAAC,oBAAoBA,MAAK,KAAK,KAAK,iBAAiB,sBAAsB;AAC7E,4BAAQ,KAAK,qBAAqB;AAAA,kBACpC;AAEO,yBAAA,UAAUsD,KAAI,SAAS,QAAQ;AAAA,gBAAA,OACjC;AACL,yBAAO,UAAU;AAAA,gBACnB;AACO,uBAAA,MAAMtD,MAAK,WAAW;AAAA,cAAA,CAC9B;AAAA,YACH;AAAA,YACA,oBAAoB,kCAAkC;AAAA,YACtD,uBAAuB,CAAC,aAAqB;AAE3C,kBAAI,iBAAiB,sBAAsB;AACzC,2BAAW,SAAS;AAAA,kBAClB,IAAI,OAAO,SAAS,uBAAuB,GAAG;AAAA,kBAC7C,SAAS,IAAI,OAAO,sBAAsB,MAAM;AAAA,gBAAA;AAAA,cAErD;AACO,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,CAACK,YAAmB;AAC5B,cAAM,WAAiC;AAAA,UACrC,IAAI,aAAa,gBAAgB,WAAW,CAAC,GAAGA,QAAO,MAAM,YAAYA,QAAO,MAAM,WAAW,CAAA,CAAE;AAAA,QAAA;AAErG,YAAI,SAAS;AACX,mBAAS,KAAK,IAAI,uBAAuB,kBAAkBiY,KAAI,mBAAmB,mBAAmB,CAAC;AAAA,QACxG;AACO,eAAA;AAAA,MACT;AAAA,MAEA,UAAU,MAAM;AACP,eAAA;AAAA,UACL,EAAE,KAAK,QAAQ,OAAO,SAAS,cAAc;AAAA,UAC7C,EAAE,KAAK,QAAQ,UAAU,SAAS,SAAS;AAAA,UAC3C,EAAE,KAAK,QAAQ,YAAY,SAAS,SAAS;AAAA,QAAA;AAAA,MAEjD;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,+BAA+B,mBAAmB;AAAA,IACtD,YAAY,kBAAoCA,KAAc,WAAqB;AACjF;AAAA,QACE,gBAAgB;AAAA,QAChB,CAAC,cAAc;AAAA,QACf,yBAAyB,kBAAkBA,KAAI,SAAS;AAAA,QACxD;AAAA,UACE,MAAMA,IAAG,QAAQ,cAAc,eAAe;AAAA,UAC9C,aAAaA,IAAG,QAAQ,cAAc,qBAAqB;AAAA,UAC3D,OAAO,gBAAgB;AAAA,UACvB,UAAU;AAAA,UACV,SAAS;AAAA,UACT,OAAO,MACLA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,kBAAkBA,IAAG,OAAO,YAAY;AAAA,QACxF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEA,WAAS,yBAAyB,kBAAoCA,KAAc,WAAqB;AAChG,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAEtF,YAAMjY,UAAS,MAAM;AACrB,YAAM,YAAYgK,uBAAqBhK,QAAO,MAAM,UAAU,EAAE,MAAM,SAAS;AAC/E,UACE,CAAC,aACD,CAAC,gBAAgBA,QAAO,MAAM,YAAYA,QAAO,MAAM,SAAS,EAAE,KAAK,KACvE,CAAC,2BAA2B,MAAM,KAAK,MAAM,SAAS,GACtD;AACO,eAAA;AAAA,MACT;AAEA,qBAAe,qBAAqB;AAClC,YAAI,UAAU;AAEN,gBAAA,iBAAiB,YACnB,EAAE,GAAI,UAAU,KAAK,OAA0B,MAAM,OACrD;AAKJ,cAAI,eAAe,WAAW,eAAe,QAAQ,QAAQ;AACrD,kBAAA,gBAAgB,eAAe,QAAQ;AAC7C,gBAAI,CAAC,iBAAiB,0BAA0B,UAAU,SAAS,aAAa,GAAG;AACjF,6BAAe,OAAO;AACtB,6BAAe,UAAU,eAAe,QAAQ,MAAM,CAAC;AAAA,YACzD;AAAA,UACF;AAGM,gBAAA,SAAS,MAAMiY,IAAG,QAAQ;AAAA,YAC9B;AAAA,YACA,iBAAiB;AAAA,YACjB;AAAA,UAAA;AAEF,cAAI,QAAQ;AAEJ,kBAAA,aAAa,mBAAmB,MAAM;AAG5C,gBAAI,WAAW;AACb,oBAAM,KAAK,MAAM;AACjB,iBAAG,cAAc,UAAU,KAAKjY,QAAO,MAAM,YAAY,UAAU;AACnE,uBAAS,EAAE;AAAA,YAAA,OACN;AACL,oBAAM,kBAAkB,2BAA2B,MAAM,KAAK,MAAM,SAAS;AAC7E,kBAAI,iBAAiB;AACnB,sBAAM,KAAK,MAAM;AACjB,sBAAM2C,SAAQ3C,QAAO,MAAM,WAAW,OAAO,UAAU;AAC/B,wCAAA,IAAI,iBAAiB2C,MAAK;AAClD,yBAAS,EAAE;AAAA,cAAA,OACN;AACW,gCAAA3C,QAAO,MAAM,YAAYA,QAAO,MAAM,WAAW,UAAU,EAAE,OAAO,UAAU,IAAI;AAAA,cACpG;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,MAAM;AACR,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAEmB;AAEZ,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,wBAAwB;AACxB,WAAA,EAAE,IAAI,IAAI,SAAS,CAAA,GAAI,UAAU,CAAI,GAAA,MAAM;EACpD;AAEA,WAAS,mBAAmB,OAAuB;AAC3C,UAAA,WAAW,EAAE,GAAG;AAClB,QAAA,SAAS,WAAW,SAAS,MAAM;AAC5B,eAAA,QAAQ,QAAQ,MAAM,IAAI;AAAA,IACrC;AACO,WAAA;AAAA,EACT;AAIA,WAAS,cAAcL,OAAuB,SAAwB;AACpE,QAAIA,MAAK,MAAM,WAAWA,MAAK,MAAM,QAAQ,QAAQ;AAC7C,YAAAoY,QAAOpY,MAAK,MAAM,QAAQ;AAC5B,UAAA,QAAQ,uBAAuBoY,UAAS,MAAM;AAChD,cAAM7W,SAAQvB,MAAK,YAAY,MAAM,+CAA+C;AACpF,YAAIuB,QAAO;AACT,iBAAOA,OAAM,GAAG,MAAM,GAAG,EAAE,IAAS,KAAA;AAAA,QACtC;AAAA,MACF;AACO,aAAA6W;AAAA,IAAA,OACF;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEA,WAAS,kBAAkB,kBAAoC,oBAAwCE,KAAc;AACnH,WAAO,MAAM;AACP,UAAA,oBAAoB,gBAAgB,GAAG;AAClC,eAAA;AAAA,UACL,MAAM,CAACjY,YAAmBA,QAAO,MAAM;AAAA,UACvC,MAAM,CAACL,UAA0B;AAC/B,kBAAMy0B,QAAiB,CAAA;AACnB,gBAAAz0B,MAAK,MAAM,IAAI;AACjB,cAAAy0B,MAAK,KAAK,IAAIz0B,MAAK,MAAM,IAAI;AAAA,YAC/B;AACI,gBAAAA,MAAK,MAAM,SAAS;AACtB,uBAASZ,KAAE,GAAGA,KAAEY,MAAK,MAAM,QAAQ,QAAQZ,MAAK;AAC9C,gBAAAq1B,MAAK,KAAK,IAAIz0B,MAAK,MAAM,QAAQZ,KAAI;AAAA,cACvC;AACA,kBAAIY,MAAK,MAAM,QAAQ,SAAS,GAAG;AAC3B,sBAAAoY,QAAOpY,MAAK,MAAM,QAAQ;AAChC,oBAAI,mBAAmB,oBAAoB,SAASoY,KAAI,KAAKA,UAAS,OAAO;AAC3E,kBAAAqc,MAAK,KAAKrc,KAAI;AAAA,gBAAA,OACT;AACA,kBAAAqc,MAAA,KAAK,IAAIrc,OAAM;AAAA,gBACtB;AAAA,cACF;AAAA,YACF;AACA,gBAAIpY,MAAK,MAAM,YAAYA,MAAK,MAAM,SAAS,QAAQ;AACrD,cAAAy0B,MAAK,KAAK,GAAGz0B,MAAK,MAAM,SAAS;AAAA,gBAC/B,CAAC,OAAwB,GAAG,KAAK,QAAQ,GAAG,MAAM,OAAO;AAAA,cAAA,EAAK,KAAK,GAAG;AAAA,aACvE;AAAA,YACH;AACO,mBAAAy0B;AAAA,UACT;AAAA,UACA,QAAQ;AAAA,YACN,KAAK;AAAA,YACL,OAAO;AAAA,UACT;AAAA,UACA,QAAQ,MAAM,yBAAyB,kBAAkBnc,KAAI,mBAAmB,mBAAmB;AAAA,QAAA;AAAA,MACrG,OACK;AACE,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAGO,WAAS,oCAA8D;AACtE,UAAA,mCAAmC,uCAAuC;AAEzE,WAAA;AAAA,MACL,MAAM;AAAA,MAGN,OAAO;AAAA,MAEP,SAAS,CAAC,QAAgB,IAAY,IAAY,KAAa,OAAe;AACrE,eAAA;AAAA,UACL,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAAA,MAKA,SAAS,CAAC,gBAAwB;AACzB,eAAA;AAAA,MACT;AAAA,MAIA,YAAY;AAAA,QACV;AAAA,QACA,yBAAyB,QAAW,QAAW,IAAI;AAAA,MACrD;AAAA,MAIA,aAAa,kCAAkC,gCAAgC;AAAA,MAG/E,WAAW,CAACjY,SAAgB,QAA2B,YAAgC;AAErF,cAAM,SAAS,gCAAgC,QAAQ,QAAQ,QAAQ,MAAM;AAGvE,cAAA,cAAc,MAAM,MAAM;AAChC,oBAAY,KAAK,YAAY,GAAG,QAAQ,qCAAqC,QAAQ;AAGrF,eAAO,QAAQA,QAAO,MAAM,YAAY,CAAA,GAAI,CAACA,QAAO,KAAK,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC;AAAA,MACnF;AAAA,IAAA;AAAA,EAEJ;AClWO,WAAS,qBAAqBiY,KAAc;AAC1C,WAAA,IAAI,mBAAmB,gBAAgB,SAAS,CAAA,GAAI,uBAAuBA,GAAE,GAAG;AAAA,MACrF,MAAMA,IAAG,QAAQ,cAAc,SAAS;AAAA,MACxC,aAAaA,IAAG,QAAQ,cAAc,qCAAqC;AAAA,MAC3E,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,SAAS;AAAA,MACT,OAAO,MAAMA,IAAG,OAAO,YAAY;AAAA,IAAA,CACpC;AAAA,EACH;AAEA,iBAAsB,eAAeA,KAAc,OAAoB,UAAqCyV,MAAyB;;AAGnI,UAAM,UAAU;AAChB,UAAM,OAAO,eAAeA,KAAI,KAAK,KAAK;AAC1C,UAAM,cAAc,sBAAsB,MAAM,SAAO,IAAI,WAAW,UAAU,CAAC;AACjF,QAAI,aAAa;AACX,UAAA,oBAAoB,sBAAsB,MAAM,YAAY;AAChE,UAAI,mBAAmB;AACrB,iCAAyB,MAAM,YAAY;AAAA,MAAA,OACtC;AACe,4BAAA;AAAA,MACtB;AACA,UAAI,cAAc;AAClB,UAAI,sBAAsB,MAAM,MAAM,MAAM,SAAS;AACrC,sBAAA;AACd,iCAAyB,MAAM,MAAM;AAAA,MACvC;AACA,UAAI,iBAAiB;AACrB,YAAI,KAAAA,KAAI,KAAK,eAAT,mBAAqB,UAAS,MAAM,OAAO,MAAM,SAAS;AAC3C,2BAAA,KAAAA,KAAI,KAAK,eAAT,mBAAqB,gBAAe;AAAA,MACvD;AACA,cAAQ,OAAO,YAAY,QAAQ,aAAa,EAAE;AAClD,cAAQ,aAAa;AACrB,cAAQ,OAAO;AACf,cAAQ,UAAU;AAAA,IACpB;AAGM,UAAA,SAAS,MAAMzV,IAAG,QAAQ,YAAY,EAAE,MAAM,WAAW,IAAI;AAEnE,QAAI,QAAQ;AACV,YAAM,KAAK,MAAM;AACb,UAAA,OAAO,WAAW,QAAQ;AAG5B,cAAM,aAAa,OAAO;AAG1B,8BAAsB,YAAY,WAAW,OAAO,QAAQ,MAAM;AAC9D,YAAA,OAAO,QAAQ,eAAe,WAAW;AAC3C,gCAAsB,YAAY,cAAc,OAAO,QAAQ,UAAU;AAAA,QAC3E;AACI,YAAA,OAAO,QAAQ,SAAS,MAAM;AACV,gCAAA,YAAY,QAAQ,OAAO;AAAA,QACnD;AAGA,WAAG,cAAcyV,KAAI,KAAKA,KAAI,KAAK,MAAM,UAAU;AAGnD,YAAI,OAAO,YAAY,mCAAS,eAAY,YAAO,YAAP,mBAAgB,UAAU;AACpE,gBAAI,KAAAA,KAAI,KAAK,eAAT,mBAAqB,UAAS,MAAM,OAAO,MAAM,SAAS;AACxD,iBAAA,YAAO,YAAP,mBAAgB,SAAS;AACxB,iBAAA;AAAA,gBACDA,KAAI;AAAA,gBACJA,KAAI,UAAQ,KAAAA,KAAI,KAAK,eAAT,mBAAqB,aAAY;AAAA,gBAC7C,MAAM,OAAO,MAAM,QAAQ;AAAA,kBACzB,EAAE,OAAO,EAAE;AAAA,kBACX,MAAM,OAAO,MAAK,YAAO,YAAP,mBAAgB,OAAO;AAAA,gBAC3C;AAAA,cAAA;AAAA,YACF,OACK;AACF,iBAAA,YAAYA,KAAI,OAAOA,KAAI,UAAQ,KAAAA,KAAI,KAAK,eAAT,mBAAqB,aAAY,CAAC;AAAA,YAC1E;AAAA,UAAA,YACS,YAAO,YAAP,mBAAgB,SAAS;AAC/B,eAAA;AAAA,cACDA,KAAI;AAAA,cACJ,MAAM,OAAO,MAAM,QAAQ;AAAA,gBACzB,EAAE,OAAO,EAAE;AAAA,gBACX,MAAM,OAAO,MAAK,YAAO,YAAP,mBAAgB,OAAO;AAAA,cAC3C;AAAA,YAAA;AAAA,UAEJ;AAAA,QACF;AACA,iBAAS,EAAE;AAAA,MAAA,WAEF,OAAO,WAAW,UAAU;AAC3B,kBAAA,OAAO,UAAUA,IAAG;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,WAAS,uBAAuBzV,KAAc;AACrC,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAEtF,YAAMjY,UAAS,MAAM;AACrB,UAAI,CAAC,WAAWA,QAAO,MAAM,GAAG,EAAE,KAAK,GAAG;AACjC,eAAA;AAAA,MACT;AAEA,qBAAe,qBAAqB;AAClC,YAAI,UAAU;AACN,gBAAA,iBAAiBiY,KAAI,OAAO,QAAQ;AAC1C,cAAI,MAAM;AACR,iBAAK,MAAM;AAAA,UACb;AAAA,QACF;AAAA,MACF;AACmB;AAEZ,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,iBAAe,iBAAiBA,KAAc,OAAoB,UAAqC;AACrG,UAAM,QAAQ;AAAA,MACZ,MAAM,EAAE,IAAI,IAAI,SAAS,CAAC,GAAG,UAAU,GAAE;AAAA,MACzC,SAAS,eAAe;AAAA,IAAA;AAE1B,UAAM,SAAS,MAAMA,IAAG,QAAQ,YAAY,OAAO,KAAK;AACxD,QAAI,QAAQ;AACV,aAAO,MAAM,OAAO,MAAM,GAAG,EAAE,OAAO,CAAC,OAAoB;;AAEzD,cAAM,OAAO,OAAO;AACpB,8BAAsB,MAAM,WAAW,OAAO,QAAQ,MAAM;AACvD,aAAA,WAAW,KAAK,YAAY,CAAA;AAC7B,cAAA,YAAO,YAAP,mBAAgB,gBAAe,WAAW;AAC5C,eAAK,SAAS,KAAK,CAAC,cAAc,OAAO,QAAQ,UAAU,CAAC;AAAA,QAC9D;AACI,cAAA,YAAO,YAAP,mBAAgB,UAAS,OAAO;AAClC,eAAK,SAAS,KAAK,CAAC,QAAQ,OAAO,CAAC;AAAA,QACtC;AACM,cAAAyV,OAAM1jB,uBAAqB,MAAM,OAAO,MAAM,GAAG,EAAE,GAAG,SAAS;AACrE,WAAG,cAAc0jB,KAAI,KAAKA,KAAI,KAAK,MAAM,IAAI;AAGzC,aAAA,YAAO,YAAP,mBAAgB,SAAS;AAC3B,gBAAM,iBAAiB;AAAA,YACrB,MAAM,OAAO,MAAM,QAAQ;AAAA,cACzB,EAAE,OAAO,EAAE;AAAA,cACX,MAAM,OAAO,MAAK,YAAO,YAAP,mBAAgB,OAAO;AAAA,YAC3C;AAAA,YACA,MAAM,OAAO,MAAM,UAAU,OAAO;AAAA,UAAA;AAEtC,aAAG,YAAYA,KAAI,OAAOA,KAAI,QAAQ,GAAG,cAAc;AACvD5lB,6BAAiB4lB,KAAI,QAAQ,eAAe,GAAG,QAAQ,EAAE,EAAE;AAAA,QAC7D;AACA,iBAAS,EAAE;AAAA,MAAA,CACZ;AAAA,IACH;AAAA,EACF;AAEA,WAAS,iBAAgC;AAChC,WAAA;AAAA,MACL,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EAEb;ACnKO,WAAS,oBAAoBzV,KAAc;AACzC,WAAA,IAAI,mBAAmB,gBAAgB,QAAQ,CAAA,GAAI,sBAAsBA,GAAE,GAAG;AAAA,MACnF,MAAMA,IAAG,QAAQ,cAAc,QAAQ;AAAA,MACvC,aAAaA,IAAG,QAAQ,cAAc,2BAA2B;AAAA,MACjE,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,SAAS;AAAA,MACT,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,cAAcA,IAAG,OAAO,YAAY;AAAA,IAAA,CAC/F;AAAA,EACH;AAEA,WAAS,sBAAsBA,KAAc;AACpC,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAEtF,YAAMjY,UAAS,MAAM;AACrB,UAAI,CAAC,WAAWA,QAAO,MAAM,GAAG,EAAE,KAAK,GAAG;AACjC,eAAA;AAAA,MACT;AAEA,qBAAe,oBAAoB;AACjC,YAAI,UAAU;AACZ,gBAAM,SAAS,MAAMiY,IAAG,QAAQ,aAAa;AAC7C,cAAI,QAAQ;AACV,mBAAO,MAAM,OAAO,MAAM,GAAG,EAAE,OAAO,CAAC,OAAoB;AAEnD,oBAAAyV,OAAM1jB,uBAAqB,MAAM,OAAO,MAAM,GAAG,EAAE,GAAG,SAAS;AAG/C,oCAAA,OAAO,MAAM,cAAc;AACjD,iBAAG,cAAc0jB,KAAI,KAAKA,KAAI,KAAK,MAAM,OAAO,IAAI;AAGpD,oBAAM,SAA4B,OAAO,KAAK,QAAQ,CAAO,QAAA;AACpD,uBAAA;AAAA,kBACL1tB,QAAO,MAAM,QAAQ;AAAA,oBACnB,EAAE,OAAO,EAAE;AAAA,oBACXA,QAAO,KAAK,GAAG;AAAA,kBACjB;AAAA,kBACAA,QAAO,MAAM,UAAU,OAAO;AAAA,gBAAA;AAAA,cAChC,CACD;AACD,iBAAG,YAAY0tB,KAAI,OAAOA,KAAI,QAAQ,GAAG,MAAM;AAG/C5lB,iCAAiB4lB,KAAI,QAAQ,OAAO,GAAG,QAAQ,EAAE,EAAE;AAGnD,uBAAS,EAAE;AAAA,YAAA,CACZ;AAAA,UACH;AACA,cAAI,MAAM;AACR,iBAAK,MAAM;AAAA,UACb;AAAA,QACF;AAAA,MACF;AACkB;AAEX,aAAA;AAAA,IAAA;AAAA,EAEX;;ACvCA,QAAM,WAAW;AACjB,QAAM,eAAe;AAErB,QAAMlW,cAAY,CAAC,YAAiD;AAClE,UAAM,EAAE,kBAAkB,QAAAtB,SAAQ,IAAA+B,IAAA,IAAO;AAEzC,QAAI,CAAC,iBAAiB,eAAe,CAAC,iBAAiB,aAAa;AAC3D,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,GAAG;AAAA,YACL;AAAA,YACA,UAAU;AAAA,YACV,SAAS;AAAA,YACT,OAAO;AAAA,YACP,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,SAAS,KAAoB;AACrB,wBAAA,QAA0C,EAAE,YAAY;AACvD,yBAAA;AAAA,oBACL,GAAG;AAAA,oBACH,GAAG,mBAAmB,KAAgB,KAAK;AAAA,kBAAA;AAAA,gBAE/C;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMtY,OAAsC;AAC1C,oBAAM,OAAO;AAAA,gBACX,YAAY;AAAA,gBACZ,GAAG,oBAAoB;AAAA,kBACrB,GAAGA,MAAK;AAAA,kBACR,SAAS,CAAC,GAAGA,MAAK,MAAM,SAAS,UAAU,yBAAyB;AAAA,gBAAA,CACrE;AAAA,cAAA;AAEI,qBAAA,CAAC,OAAO,MAAM,CAAC;AAAA,YACxB;AAAA,UACF;AAAA,UAEA,WAAW,OAAO;AAAA,YAChB,MAAM,CAACK,YAAmBA,QAAO,MAAM;AAAA,YACvC,QAAQ,MAAM,WAAWiY,KAAI,IAAI;AAAA,YACjC,QAAQ;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,YACT;AAAA,UAAA;AAAA,UAGF,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,OAAO;AAAA,gBACP,UAAU,CAAC,SAAsB;AAAA,kBAC/B,GAAG,kBAAkB,KAAK,QAAQ;AAAA,gBAAA;AAAA,gBAEpC,aAAa,CAAC,QAAqB,IAAI,EAAE;AAAA,cAC3C;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,QAAsBtY,UAA0B;AAChD,qBAAA,WAAW,gBAAgB,KAAK,MAAM;AACpC,uBAAA,UAAUA,MAAK,MAAM,IAAIA,MAAK,MAAM,SAASA,MAAK,MAAM,QAAQ;AACvE,uBAAO,WAAW,MAAM;AACtB,yBAAO,WAAWA,KAAI;AAAA,gBAAA,CACvB;AAAA,cAAA,CACF;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,MAAM;AACP,eAAA;AAAA,UACL,EAAE,KAAK,QAAQ,OAAO,SAAS,oBAAoB;AAAA,QAAA;AAAA,MAEvD;AAAA,MAEA,UAAU,MAAM;AACd,cAAM,OAAO;AAAA,UAEX,IAAI,WAAW,gBAAgB,KAAKsY,KAAI,IAAI;AAAA,UAG5C,IAAI,WAAW,gBAAgB,WAAWA,KAAI,OAAO;AAAA,YACnD,MAAMA,IAAG,QAAQ,cAAc,QAAQ;AAAA,YACvC,aAAaA,IAAG,QAAQ,cAAc,gCAAgC;AAAA,YACtE,OAAO,gBAAgB;AAAA,YACvB,UAAU;AAAA,YACV,SAAS;AAAA,YACT,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,WAAWA,IAAG,OAAO,YAAY;AAAA,UAAA,CAC5F;AAAA,QAAA;AAIH,YAAI/B,QAAO,SAAS,SAAS,cAAc,GAAG;AACvC,eAAA;AAAA,YACH,qBAAqB+B,GAAE;AAAA,YACvB,oBAAoBA,GAAE;AAAA,UAAA;AAAA,QAE1B;AAEO,eAAA;AAAA,MACT;AAAA,MAEA,SAAS,CAACjY,YAAmB;AACpB,eAAA;AAAA,UACL,IAAI,OAAO;AAAA,YACT,KAAK,IAAI,UAAU,eAAe;AAAA,YAClC,mBAAmB,CAAC,eAAuC,WAAwB,aAA0B;AACvG,kBAAA,SAAS,UAAU,OAAO;AACrB,uBAAA;AAAA,cACT;AACA,oBAAM,UAAUgK,uBAAqBhK,QAAO,MAAM,GAAG,EAAE,SAAS,SAAS;AACzE,kBAAI,WACC,SAAS,UAAU,WAAW,QAAQ,QAAQ,KAC9C,SAAS,UAAU,SAAS,QAAQ,MAAM,QAAQ,KAAK,WAAW,GAAG;AACxE,sBAAM,KAAK,SAAS;AACpB,sBAAM,MAAM,cAAc,OAAO,GAAG,KAAK,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,KAAK,WAAW,CAAC;AACjG,mBAAG,aAAa,GAAG;AACZ,uBAAA;AAAA,cAAA,OACF;AACE,uBAAA;AAAA,cACT;AAAA,YACF;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MAEL;AAAA,IAAA;AAAA,EAEJ;AAEgB,WAAA,UAAU,OAAoB,UAAqC0tB,MAAyB;AAC1G,UAAM,KAAK,MAAM;AACjB,gBAAY,IAAIA,IAAG;AACnB,aAAS,EAAE;AAAA,EACb;AAEgB,WAAA,YAAY,IAAiBA,MAAyB;AACpE,UAAM,UAAU,GAAG,IAAI,QAAQA,KAAI,MAAM,CAAC;AACpC,UAAA,QAAQ,GAAG,IAAI,QAAQA,KAAI,MAAMA,KAAI,KAAK,WAAW,CAAC;AACtD,UAAA,YAAY,QAAQ,WAAW,KAAK;AAC1C,QAAI,WAAW;AACP,YAAA,kBAAkB,WAAW,SAAS;AACxC,UAAA,mBAAmB,oBAAoB,GAAG;AACzC,WAAA,KAAK,WAAW,eAAe;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AAEA,WAAS,WAAWzV,KAAc,WAAoB;AAC7C,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAItF,YAAMjY,UAAS,MAAM;AACf,YAAA0tB,OAAM,YAAY1jB,uBAAqBhK,QAAO,MAAM,GAAG,EAAE,MAAM,SAAS,IAAI;AAC9E,UAAA,CAAC0tB,QAAO,CAAC,WAAW1tB,QAAO,MAAM,GAAG,EAAE,KAAK,GAAG;AACzC,eAAA;AAAA,MACT;AAEA,qBAAe,eAAe;AAC5B,YAAI,UAAU;AAGZ,gBAAM,WAAW0tB,SAAQ,MAAM,UAAU,SAAS,mBAAmBA,MAAK,KAAK;AAC/E,cAAI,UAAU;AACZ,kBAAM,OAAO,eAAeA,KAAK,KAAK,KAAK;AACvC,gBAAA,mBAAmB,MAAM,CAAC,QAAQ,IAAI,WAAW,UAAU,CAAC,GAAG;AACjE,oBAAM,eAAezV,KAAI,OAAO,UAAUyV,IAAI;AAAA,YAAA,OACzC;AACL,oBAAM,QAAQzV,KAAI,OAAO,UAAUyV,IAAI;AAAA,YACzC;AAAA,UAAA,OACK;AACC,kBAAA,UAAUzV,KAAI,OAAO,QAAQ;AAAA,UACrC;AACA,cAAI,MAAM;AACR,iBAAK,MAAM;AAAA,UACb;AAAA,QACF;AAAA,MACF;AACa;AAEN,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,QAAM,mBAAmB,mBAAmB;AAAA,IAC1C,YAAYhV,KAAqBgV,KAAc,WAAoB,YAAyB;AAC1F,YAAMhV,KAAI,IAAI,WAAWgV,KAAI,SAAS,GAAG,UAAU;AAAA,IACrD;AAAA,EACF;AAEA,iBAAe,UAAUA,KAAc,OAAoB,UAAqC;AAC9F,UAAM,SAAS,MAAMA,IAAG,QAAQ,QAAQ,CAAA,GAAI,KAAK;AACjD,QAAI,QAAQ;AACV,aAAO,MAAM,OAAO,MAAM,GAAG,EAAE,OAAO,CAAC,OAAoB;AACnD,cAAAyV,OAAM1jB,uBAAqB,MAAM,OAAO,MAAM,GAAG,EAAE,GAAG,SAAS;AACrE,WAAG,cAAc0jB,KAAI,KAAKA,KAAI,KAAK,MAAM,OAAO,IAAI;AACpD,iBAAS,EAAE;AAAA,MAAA,CACZ;AAAA,IACH;AAAA,EACF;AAEA,iBAAe,QAAQzV,KAAc,OAAoB,UAAqCyV,MAAyB;AACrH,UAAM,OAAO,eAAeA,KAAI,KAAK,KAAK;AACpC,UAAA,SAAS,MAAMzV,IAAG,QAAQ,QAAQ,MAAM,oBAAoB,IAAI,CAAC;AACvE,QAAI,QAAQ;AACN,UAAA,OAAO,WAAW,QAAQ;AAC5B,cAAM,KAAK,MAAM;AACjB,WAAG,cAAcyV,KAAI,KAAKA,KAAI,KAAK,MAAM,OAAO,IAAI;AACpD,iBAAS,EAAE;AAAA,MAAA,WACF,OAAO,WAAW,UAAU;AAC3B,kBAAA,OAAO,UAAUA,IAAG;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAGA,WAAS,mBAAmBA,MAAyB,OAAoB;AACvE,UAAM,WAAWA,KAAI;AACrB,UAAM,SAASA,KAAI,MAAMA,KAAI,KAAK;AAC3B,WAAA,MAAM,UAAU,OAAO,MAAM,YAAY,MAAM,UAAU,KAAK,MAAM;AAAA,EAC7E;AAEA,WAAS,oBAAoB;AACpB,WAAA,CAAC,OAAoB,aAAyC;AAEnE,YAAM1tB,UAAS,MAAM;AAGjB,UAAA,CAAC,MAAM,UAAU,OAAO;AACnB,eAAA;AAAA,MACT;AAIA,YAAMkB,SAAQ,MAAM,UAAU,MAAM,OAAO,YAAY,MAAM,iCAAiC;AAC9F,UAAI,CAACA,QAAO;AACH,eAAA;AAAA,MACT;AAGA,UAAI,aAAa,OAAOlB,QAAO,MAAM,IAAI,GAAG;AACnC,eAAA;AAAA,MACT;AAGI,UAAA,CAAC,qBAAqB,KAAK,GAAG;AACzB,eAAA;AAAA,MACT;AAGA,UAAI,UAAU;AAEZ,YAAIkB,OAAM,MAAMA,OAAM,GAAG,KAAK,EAAE,WAAW,GAAG;AACrC,iBAAA;AAAA,QACT;AAGM,cAAA,QAAoB,eAAe,CAAA,CAAE;AAC3C,cAAM,cAAcA,OAAM;AAC1B,YAAI,aAAa;AACT,gBAAA,cAAc,YAAY,MAAM,WAAW;AACjD,cAAI,aAAa;AACf,kBAAM,kBAAkB,YAAY;AAC9B,kBAAA,mBAAmB,gBAAgB,MAAM,sCAAsC;AACrF,gBAAI,kBAAkB;AACd,oBAAA,YAAY,iBAAiB,EAAE,IAAI,iBAAiB,IAAI,SAAS,iBAAiB,GAAI,CAAA;AACtF,oBAAA,KAAK,UAAU,MAAM;AACrB,oBAAA,UAAU,UAAU,WAAW,CAAA;AAAA,YACvC;AAAA,UAAA,OACK;AACC,kBAAA,UAAU,CAAC,WAAW;AAAA,UAC9B;AAAA,QACF;AAEA,eAAO,MAAM,OAAO,MAAM,GAAG,EAAE,OAAO,CAAC,OAAoB;AACnD,gBAAAwsB,OAAM1jB,uBAAqB,MAAM,OAAO,MAAM,GAAG,EAAE,GAAG,SAAS;AACrE,aAAG,cAAc0jB,KAAI,KAAKA,KAAI,KAAK,MAAM,KAAK;AACxC,gBAAA,QAAQ,GAAG,UAAU;AACrB,gBAAA,QAAQ,MAAM;AACpB,gBAAM,MAAM,QAAQ,MAAM,OAAO,YAAY;AAC1C,aAAA,YAAY,OAAO,GAAG;AACzB,mBAAS,EAAE;AAAA,QAAA,CACZ;AAAA,MACH;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,sBAAsB1tB,SAAgB,MAAmB;AAChE,WAAO,KAAK,KAAK,EAAE,EAAE,eAAe,KAAK,MAAM,EAAE,GAAG,KAAK,WAAW,EAAE,GAAGA,QAAO,MAAM,GAAG;AAAA,EAC3F;AAEA,WAAS,qBAAqB,OAAoB;AAChD,UAAMA,UAAS,MAAM;AACf,UAAA,EAAE,MAAM,IAAI,MAAM;AACjB,WAAA,sBAAsBA,SAAQ,KAAK;AAAA,EAC5C;AC/TO,QAAM,oBAAoB,YAAY;AAAA,IAC3C,YACEiD,KACA4U,SACA,UACA,cACA,YACA,OACA;AACA,YAAM5U,KAAI4U,SAAQ,UAAU,CAAC,GAAG,SAAS,WAAW,UAAU,cAAc,KAAK,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,UAAU;AAAA,IAClH;AAAA,EACF;AAEO,QAAM,yBAAyB,mBAAmB;AAAA,IACvD,cAAc;AACZ;AAAA,QACE,gBAAgB;AAAA,QAChB,CAAC,WAAW;AAAA,QACZ,CAAC,OAAoB,aAAyC;AAC5D,gBAAM,aAAajO,iBAAe,MAAM,EAAE,MAAM,SAAS;AACzD,cAAI,CAAC,YAAY;AACR,mBAAA;AAAA,UACT;AAEA,cAAI,UAAU;AACZ,kBAAM,KAAK,MAAM;AACjB,kBAAMjK,QAAO,WAAW;AACxB,eAAG,cAAc,WAAW,KAAKA,MAAK,MAAM;AAAA,cAC1C,GAAGA,MAAK;AAAA,cACR,OAAO,CAACA,MAAK,MAAM;AAAA,YAAA,CACpB;AACD,qBAAS,EAAE;AAAA,UACb;AAEO,iBAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,IAEO,SAAS,OAA6B;AACvC,UAAA,KAAK,UAAU,KAAK,GAAG;AACzB,cAAM,WAAWiK,iBAAe,MAAM,EAAE,MAAM,SAAS;AAChD,eAAA,SAAS,KAAK,MAAM;AAAA,MAAA,OACtB;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEgB,WAAA,4BAA4BqO,KAAc,cAAgC;AACjF,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAEtF,UAAItY,QAA+B;AACnC,UAAI,MAAM;AACV,YAAM,cAAciK,iBAAe,MAAM,EAAE,MAAM,SAAS;AAC1D,UAAI,aAAa;AACf,QAAAjK,QAAO,YAAY;AACnB,cAAM,YAAY;AAAA,MACpB;AAGA,UAAI,CAACA,OAAM;AACF,eAAA;AAAA,MACT;AAGA,qBAAe,gBAAgB;AAC7B,YAAI,UAAU;AACZ,gBAAM,SAASA,OAAyB,KAAK,OAAO,UAAUsY,KAAI,YAAY;AAC9E,cAAI,MAAM;AACR,iBAAK,MAAM;AAAA,UACb;AAAA,QACF;AAAA,MACF;AACc;AAEP,aAAA;AAAA,IAAA;AAAA,EAEX;AAEO,QAAM,kCAAkC,mBAAmB;AAAA,IAChE,YAAYA,KAAc,cAAgC;AACxD,YAAM,gBAAgB,oBAAoB,CAAA,GAAI,4BAA4BA,KAAI,YAAY,CAAC;AAAA,IAC7F;AAAA,EACF;AAEA,QAAM,0BAA0B;AAChC,QAAM,mBAAmB;AACzB,QAAM,sBAAsB;AAE5B,iBAAe,SACbtY,OACA,KACA,OACA,UACAsY,KACA,cACe;AAET,UAAAjY,UAASL,MAAK,KAAK;AACzB,UAAM,QAAQA,MAAK;AACnB,UAAM,QAAQ;AAAA,MACZ,GAAG;AAAA,MACH,MAAMA,MAAK,SAASK,QAAO,MAAM,eAAe,SAAS,UAAU,SAAS;AAAA,IAAA;AAI9E,UAAM,iBAAiB,uBAAuB,MAAM,WAAWA,OAAM;AACjE,QAAA,kBAAkB,aAAa,aAAa;AACxC,YAAA,cAAc,mBAAmB,eAAe,KAAK,OAAO,CAAO,QAAA,QAAQ,gBAAgB,IAC7F,mBACA;AAAA,IAAA,OACC;AACL,YAAM,cAAc;AAAA,IACtB;AAGA,UAAM,SAAS,MAAMiY,IAAG,QAAQ,SAAS,OAAO,YAAY;AAG5D,QAAI,QAAQ;AACV,YAAM,KAAK,MAAM;AACX,YAAA,WAAW,OAAO,SAAS,SAAS,UAAUjY,QAAO,MAAM,eAAeA,QAAO,MAAM;AAC1F,SAAA,cAAc,KAAK,UAAU;AAAA,QAC9B,GAAG;AAAA,QACH,GAAG;AAAA,MAAA,CACJ;AAGD,UAAI,aAAa,aAAa;AAGxB,YAAA,OAAO,gBAAgB,yBAAyB;AAClD,cAAI,gBAAgB;AAClB,wBAAY,IAAI,cAAc;AAAA,UAChC;AAAA,mBAES,gBAAgB;AACzB,gBAAM,WAAW,EAAE,IAAI,IAAI,SAAS,CAAA,GAAI,UAAU,CAAC,GAAG,GAAG,eAAe,KAAK,MAAM;AACnF,gCAAsB,UAAU,kBAAkB;AAC5B,gCAAA,UAAU,OAAO,WAAW;AAClD,aAAG,cAAc,eAAe,KAAKA,QAAO,MAAM,KAAK,QAAQ;AAAA,QAAA,OAE1D;AACL,gBAAM,OAAO,GAAG,IAAI,QAAQ,GAAG;AAC/B,gBAAM,UAAU,GAAG,IAAI,QAAQ,MAAML,MAAK,QAAQ;AAC5C,gBAAA6D,SAAQ,KAAK,WAAW,OAAO;AACrC,cAAIA,QAAO;AACT,kBAAM,WAAW,aAAaA,QAAOxD,QAAO,MAAM,KAAK,EAAE,SAAS,CAAC,OAAO,WAAW,EAAE,CAAA;AACvF,gBAAI,UAAU;AACT,iBAAA,KAAKwD,QAAO,QAAQ;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,eAAS,EAAE;AAAA,IACb;AAAA,EACF;AAEA,WAAS,uBAAuB,WAAsBxD,SAAgB;AACpE,WAAO4J,iBAAe,CAAMsN,QAAA;AACnB,aAAAA,IAAG,SAASlX,QAAO,MAAM,OACzB,mBAAmBkX,IAAG,OAAO,kBAAkB;AAAA,IAAA,CACvD,EAAE,SAAS;AAAA,EAEd;AAEA,WAAS,mBAAmB,KAAa;AACvC,WAAO,CAAC,kBAAkB,mBAAmB,EAAE,SAAS,GAAG;AAAA,EAC7D;ACjLO,QAAM,wBAA4C;AAAA,IAIvD,YAAYvX,OAAuB,MAAkB,QAAsB;AAH3D;AACA;AAKd,WAAK,MAAM,OAAO,SAAS,cAAc,IAAI;AACzC,UAAAA,MAAK,MAAM,OAAO;AACf,aAAA,IAAI,aAAa,cAAc,MAAM;AAAA,MAC5C;AAEA,YAAM,YAAY,OAAO,SAAS,cAAc,KAAK;AAC3C,gBAAA,UAAU,IAAI,qBAAqB;AACxC,WAAA,IAAI,YAAY,SAAS;AAG1B,UAAAA,MAAK,MAAM,YAAY,MAAM;AAC/B,aAAK,IAAI,aAAa,gBAAgBA,MAAK,MAAM,UAAU,SAAS,OAAO;AAG3E,cAAM,QAAQ,OAAO,SAAS,cAAc,OAAO;AAC7C,cAAA,UAAU,IAAI,oBAAoB;AAClC,cAAA,aAAa,QAAQ,UAAU;AAC/B,cAAA,UAAUA,MAAK,MAAM;AAC3B,cAAM,kBAAkB;AAClB,cAAA,WAAW,CAAC,KAAK;AACjB,cAAA,iBAAiB,aAAa,CAAC,OAAc;AACjD,aAAG,eAAe;AAAA,QAAA,CACnB;AACK,cAAA,iBAAiB,UAAU,CAAC,OAAc;AACxC,gBAAA,KAAK,KAAK,MAAM;AACtB,aAAG,cAAc,UAAUA,MAAK,MAAM;AAAA,YACpC,GAAGA,MAAK;AAAA,YACR,SAAU,GAAG,OAA4B;AAAA,UAAA,CAC1C;AACDmI,6BAAiB,OAAO,IAAI,CAAC,EAAE,EAAE;AACjC,eAAK,SAAS,EAAE;AAAA,QAAA,CACjB;AACD,kBAAU,YAAY,KAAK;AAAA,MAC7B;AAGA,YAAM,UAAU,OAAO,SAAS,cAAc,KAAK;AAC3C,cAAA,UAAU,IAAI,mBAAmB;AACzC,WAAK,aAAa;AAClB,gBAAU,YAAY,OAAO;AAAA,IAC/B;AAAA,EACF;AAGO,WAAS,yBAAyB,UAAoB;AACpD,WAAA,CAAC,OAAoB,aAAuD;AACjF,YAAM,WAAWkC,uBAAqB,QAAQ,EAAE,MAAM,SAAS;AAC/D,UAAI,CAAC,UAAU;AACN,eAAA;AAAA,MACT;AAEA,UAAI,UAAU;AACZ,cAAM,KAAK,MAAM;AACjB,YAAI,SAAS,KAAK,MAAM,YAAY,MAAM;AACzB,yBAAA,IAAI,UAAU,IAAI;AAAA,QAAA,OAC5B;AACU,yBAAA,IAAI,UAAU,KAAK;AAAA,QACpC;AAEA,iBAAS,EAAE;AAAA,MACb;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEO,WAAS,+BAA+B,UAAoB;AAC1D,WAAA,CAAC,OAAoB,aAAuD;AACjF,YAAM,WAAWA,uBAAqB,QAAQ,EAAE,MAAM,SAAS;AAC/D,UAAI,CAAC,YAAY,SAAS,KAAK,MAAM,YAAY,MAAM;AAC9C,eAAA;AAAA,MACT;AAEA,UAAI,UAAU;AACZ,cAAM,KAAK,MAAM;AACjB,uBAAe,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,OAAO;AACzD,iBAAS,EAAE;AAAA,MACb;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEO,QAAM,+BAA+B,mBAAmB;AAAA,IAC7D,YAAY,UAAoB;AAC9B,YAAM,gBAAgB,eAAe,CAAI,GAAA,yBAAyB,QAAQ,CAAC;AAAA,IAC7E;AAAA,IAEO,SAAS,OAA6B;AACvC,UAAA,KAAK,UAAU,KAAK,GAAG;AACnB,cAAA,WAAWA,uBAAqB,MAAM,OAAO,MAAM,SAAS,EAAE,MAAM,SAAS;AAC5E,eAAA,SAAS,KAAK,MAAM,YAAY;AAAA,MAAA,OAClC;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEO,QAAM,qCAAqC,mBAAmB;AAAA,IAGnE,YAAY,UAAoB;AAC9B,YAAM,gBAAgB,qBAAqB,CAAI,GAAA,+BAA+B,QAAQ,CAAC;AAHjF;AAIN,WAAK,WAAW;AAAA,IAClB;AAAA,IAEO,SAAS,OAA6B;AAC3C,YAAM,WAAWA,uBAAqB,KAAK,QAAQ,EAAE,MAAM,SAAS;AAC7D,aAAA,YAAY,SAAS,KAAK,MAAM;AAAA,IACzC;AAAA,EACF;AAGO,WAAS,2BAA2B;AACzC,WAAO,IAAI,UAAU,iBAAiB,CAAC,OAAoB9I,QAAyB,OAAe,QAAgB;AACjH,YAAMlB,UAAS,MAAM;AAErB,YAAM,WAAWgK,uBAAqBhK,QAAO,MAAM,SAAS,EAAE,MAAM,SAAS;AAC7E,UAAI,UAAU;AAEZ,cAAM,KAAK,MAAM;AAGF,uBAAA,IAAI,UAAUkB,OAAM,EAAE;AAGlC,WAAA,OAAO,OAAO,GAAG;AAGb,eAAA;AAAA,MAAA,OACF;AACE,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EACH;AAOO,WAAS,qBAAqBlB,SAAgB;AAEnD,UAAM+V,SAAQ;AAGd,UAAM,gBAAgB,kBAAkBA,QAAO/V,QAAO,MAAM,WAAW;AAEvE,WAAO,IAAI,UAAU+V,QAAO,CAAC,OAAoB7U,QAAyB,OAAe,QAAgB;AAEvG,YAAM,KAAK,cAAc,QAAQ,OAAOA,QAAO,OAAO,GAAG;AACzD,UAAI,IAAI;AAEN,cAAM,WAAW8I,uBAAqBhK,QAAO,MAAM,SAAS,EAAE,GAAG,SAAS;AAC1E,YAAI,UAAU;AACG,yBAAA,IAAI,UAAUkB,OAAM,EAAE;AAAA,QACvC;AAEO,eAAA;AAAA,MAAA,OACF;AACE,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAAA,EACH;AAEA,WAAS,eAAe,IAAiB,UAAuBmG,QAAgC;AAC9F,OAAG,cAAc,SAAS,KAAK,SAAS,KAAK,MAAM;AAAA,MACjD,GAAG,SAAS,KAAK;AAAA,MACjB,SAASA,WAAU,OAAO,OAAO,OAAOA,WAAU,WAAWA,WAAU,MAAMA;AAAA,IAAA,CAC9E;AAAA,EACH;AAEgB,WAAA,kBAAkBrH,SAAgB,UAAoB,SAAkB;AAEhF,UAAA,OAAOA,QAAO,MAAM,WAAW,OAAO,EAAE,QAAQ,YAAY;AAC5D,UAAAqH,SAAQrH,QAAO,MAAM,UAAU,QAAQ,SAAS,KAAK,CAAC,IAAI,CAAC;AACjE,WAAO,SAAS,KAAKqH,MAAK,EAAE,OAAO,QAAQ;AAAA,EAC7C;AAEA,QAAM,eAAe;AACrB,QAAM,iBAAiB;AAEhB,WAAS,kBAAkBomB,SAA2E;AAEvG,QAAA;AACJ,QAAI,iBAAiB;AAGf,UAAA,eAAe,UAAUA,SAAQ,CAAO,QAAA;AAExC,UAAA,IAAI,MAAM,WAAW,gBAAgB;AACtB,yBAAA;AACV,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QAAA;AAAA,MACL,WAMO,IAAI,MAAM,SAAS,YAAY,QAAW;AACjD,YAAI/tB,QAAO,IAAI;AACf,YAAIA,MAAK,OAAO,CAAC,MAAM,cAAc;AACzB,oBAAA;AACO,2BAAA;AACV,UAAAA,QAAAA,MAAK,MAAM,CAAC;AAAA,QACV,WAAAA,MAAK,OAAO,CAAC,MAAM,gBAAgB;AAClC,oBAAA;AACO,2BAAA;AACV,UAAAA,QAAAA,MAAK,MAAM,CAAC;AAAA,QAAA,OACd;AACK,oBAAA;AAAA,QACZ;AACO,eAAA;AAAA,UACL,GAAG;AAAA,UACH,GAAGA;AAAA,QAAA;AAAA,MACL,OACK;AACE,eAAA;AAAA,MACT;AAAA,IAAA,CACD;AAGM,WAAA;AAAA,MACL,SAAS,YAAY,SAAY,UAAU;AAAA,MAC3C,QAAQ;AAAA,IAAA;AAAA,EAEZ;AC1OO,WAAS,aAAa,UAA6B;AACjD,WAAA,SAAS,OAAoB,UAAsC;AACxE,YAAM,EAAC,OAAO,QAAO,MAAM;AAC3B,YAAM8D,SAAQ,MAAM,WAAW,KAAK,CAAA7D,WAAQA,OAAK,aAAa,KAAKA,OAAK,WAAY,QAAQ,QAAQ;AACpG,UAAI,CAAC6D;AAAc,eAAA;AACnB,UAAI,CAAC;AAAiB,eAAA;AACtB,YAAM7D,QAAO,MAAM,KAAK6D,OAAM,QAAQ,CAAC;AACvC,UAAI7D,MAAK,QAAQ;AACf,eAAO,gBAAgB,OAAO,UAAUA,OAAM6D,MAAK;AAAA;AAE5C,eAAA,cAAc,OAAO,UAAUA,MAAK;AAAA,IAAA;AAAA,EAEjD;AAIO,WAAS,aAAa,UAA6B;AACjD,WAAA,SAAS,OAAO,UAAU;AAC/B,YAAM,EAAC,OAAO,QAAO,MAAM;AACrB,YAAAA,SAAQ,MAAM,WAAW,KAAK,CAAA7D,UAAQA,MAAK,aAAa,KAAKA,MAAK,WAAY,QAAQ,QAAQ;AACpG,UAAI,CAAC6D;AAAc,eAAA;AACnB,YAAM,aAAaA,OAAM;AACzB,UAAI,cAAc;AAAU,eAAA;AAC5B,YAAM,SAASA,OAAM,QAAQ,aAAa,OAAO,MAAM,aAAa,CAAC;AACrE,UAAI,WAAW,QAAQ;AAAiB,eAAA;AAExC,UAAI,UAAU;AACZ,cAAM,eAAe,WAAW,aAAa,WAAW,UAAU,QAAQ,OAAO;AACjF,cAAM,QAAQ,SAAS,KAAK,eAAe,SAAS,OAAA,IAAW,IAAI;AACnE,cAAM/C,SAAQ,IAAI;AAAA,UAAM,SAAS,KAAK,SAAS,OAAO,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC;AAAA,UAC7F,eAAe,IAAI;AAAA,UAAG;AAAA,QAAA;AAC5C,cAAM,SAAS+C,OAAM,OAAO,QAAQA,OAAM;AACjC,iBAAA,MAAM,GAAG,KAAK,IAAI;AAAA,UAAkB,UAAU,eAAe,IAAI;AAAA,UAAI;AAAA,UACjC;AAAA,UAAQ;AAAA,UAAO/C;AAAA,UAAO;AAAA,UAAG;AAAA,QAAA,CAAK,EACjE,eAAA,CAAgB;AAAA,MAC5B;AACO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,gBAAgB,OAAoB,UAAqCd,OAAY6D,QAAkB;AACxG,UAAA,KAAK,MAAM,IAAI,MAAMA,OAAM,KAAK,YAAYA,OAAM,IAAI,IAAIA,OAAM,KAAK;AAC3E,QAAI,MAAM,WAAW;AAGnB,SAAG,KAAK,IAAI;AAAA,QAAkB,MAAM;AAAA,QAAG;AAAA,QAAW;AAAA,QAAK;AAAA,QACzB,IAAI,MAAM,SAAS,KAAK7D,MAAK,KAAK,OAAOA,MAAK,OAAO6D,OAAM,OAAO,KAAM,CAAA,CAAC,GAAG,GAAG,CAAC;AAAA,QAAG;AAAA,QAAG;AAAA,MAAA,CAAK;AACzH,MAAAA,SAAQ,IAAI,UAAU,GAAG,IAAI,QAAQA,OAAM,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,SAAS,GAAGA,OAAM,KAAK;AAAA,IAC/F;AACM,UAAA5C,UAAS,WAAW4C,MAAK;AAC/B,QAAI5C,WAAU;AAAa,aAAA;AACxB,OAAA,KAAK4C,QAAO5C,OAAM;AACrB,UAAM,QAAQ,GAAG,QAAQ,IAAI,KAAK,EAAE,IAAI;AACpC,QAAA,QAAQ,GAAG,KAAK,KAAK;AAAG,SAAG,KAAK,KAAK;AAChC,aAAA,GAAG,gBAAgB;AACrB,WAAA;AAAA,EACT;AAEA,WAAS,cAAc,OAAoB,UAAqC4C,QAAkB;AAChG,UAAM,KAAK,MAAM,IAAI,OAAOA,OAAM;AAElC,aAAS,MAAMA,OAAM,KAAKzE,KAAIyE,OAAM,WAAW,GAAGN,KAAIM,OAAM,YAAYzE,KAAImE,IAAGnE,MAAK;AAC3E,aAAA,KAAK,MAAMA,EAAC,EAAE;AACrB,SAAG,OAAO,MAAM,GAAG,MAAM,CAAC;AAAA,IAC5B;AACM,UAAA,SAAS,GAAG,IAAI,QAAQyE,OAAM,KAAK,GAAG,OAAO,OAAO;AACtD,QAAA,GAAG,QAAQ,IAAIA,OAAM,GAAG,KAAKA,OAAM,QAAQ,OAAO,UAAW;AAAiB,aAAA;AAClF,UAAM,UAAUA,OAAM,cAAc,GAAG,QAAQA,OAAM,YAAY,KAAK;AAChE,UAAA,SAAS,OAAO,KAAK,EAAE,GAAG,cAAc,OAAO,MAAM,EAAE;AAC7D,QAAI,CAAC,OAAO;AAAA,MAAW,eAAe,UAAU,IAAI;AAAA,MAAI,cAAc;AAAA,MAC/C,KAAK,QAAQ,OAAO,QAAQ,SAAS,QAAQ,SAAS,KAAK,IAAI,CAAC;AAAA,IAAC;AAC/E,aAAA;AACT,UAAM,QAAQ,OAAO,KAAK,MAAM,QAAQ,KAAK;AAI7C,OAAG,KAAK,IAAI;AAAA,MAAkB,SAAS,UAAU,IAAI;AAAA,MAAI,OAAO,QAAQ,IAAI;AAAA,MAAI,QAAQ;AAAA,MAAG,MAAM;AAAA,MACnE,IAAI;AAAA,SAAO,UAAU,SAAS,QAAQ,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,CAAC,GAClE,OAAO,QAAQ,SAAS,QAAQ,SAAS,KAAK,KAAK,KAAK,SAAS,KAAK,CAAC,CAAC;AAAA,QACzE,UAAU,IAAI;AAAA,QAAG,QAAQ,IAAI;AAAA,MAAC;AAAA,MAAG,UAAU,IAAI;AAAA,IAAA,CAAE;AAChF,aAAA,GAAG,gBAAgB;AACrB,WAAA;AAAA,EACT;ACpFA,QAAM,eAAe;AACrB,QAAM,gBAAgB;AAEtB,QAAM,oBAAoB;AAC1B,QAAM,2BAA2B;AACjC,QAAM,2BAA2B;AASjC,QAAM,2BAA2B;AAGjB,WAAA,eAAe,UAAoB,cAAgC;AAEjF,UAAMxD,UAAS,SAAS;AAGpB,QAAA,cAAc,CAAC,QAAqB,IAAI;AACxC,QAAA,WAAwC,OAAO,CAAA;AAK7C,UAAA,kBAAkB,CAAC,YAAiB;AACxC,UAAI,aAAa,OAAO;AAChB,cAAA,QAAQ,QAAQ,0BAA0B;AAChD,YAAI,UAAU,gBAAgB,WAAW,CAAC,aAAa,SAAS;AAC9D,iBAAO,gBAAgB;AAAA,QAAA,OAClB;AACE,iBAAA;AAAA,QACT;AAAA,MAAA,OACK;AACL,eAAO,gBAAgB;AAAA,MACzB;AAAA,IAAA;AAIE,QAAA,aAAaA,QAAO,MAAM,cAAc;AAC1C,iBAAW,CAAC,QAAqB;AACzB,cAAA,UAAU,IAAI,EAAE;AACf,eAAA;AAAA,UACL,OAAO,aAAa,QAAQ,QAAQ,qBAAqB;AAAA,UACzD,cAAc,gBAAgB,OAAO;AAAA,UACrC,cAAc,aAAa,QAAQ,QAAQ,0BAA0B,IAAI,gBAAgB;AAAA,QAAA;AAAA,MAC3F;AAEY,oBAAA,CAAC,QAAqB,IAAI,EAAE;AAAA,IAC5C;AAEM,UAAA,mBAAmBA,QAAO,MAAM;AAC/B,WAAA,CAAC,QAA2B,QAAqB;AAGtD,UAAK,aAAaA,QAAO,MAAM,gBAAiB,aAAa,OAAO;AAClE,cAAM,QAAQ,IAAI,EAAE,cAAc,0BAA0B;AACxD,YAAA,UAAU,gBAAgB,SAAS;AACrC,iBAAO,eAAe;AAAA,QACxB;AAAA,MACF;AAEM,YAAA,WAAW,YAAY,GAAG;AAChC,YAAM,QAAQ;AAAA,QAAE,GAAG,SAAS,GAAG;AAAA,QACf,OAAO,SAAS,UAAU,SAAS,GAAG,UAAU,SAAS,GAAG,GAAG,MAAM;AAAA,MAAA;AAE9E,aAAA,SAAS,UAAU,KAAK;AACtB,eAAA,QAAQ,CAAC,UAAyB;AAEzC,YAAIytB,UAAS;AACP,cAAA,aAA0C,EAAE,SAAS;AAG3D,YAAI,aAAa,OAAO;AAGhB,gBAAA,mBAAmB,kBAAkB,KAAK;AAChD,qBAAW,UAAU,iBAAiB;AACtC,UAAAA,UAAS,iBAAiB;AAAA,QAC5B;AAGO,eAAA,SAAS,kBAAkB,UAAU;AAC5C,eAAO,YAAYA,OAAM;AACzB,eAAO,UAAU;AAAA,MAAA,CAClB;AACD,aAAO,UAAU;AAAA,IAAA;AAAA,EAErB;AAEO,WAAS,uBAAuB,cAAgC;AAC9D,WAAA,CAAC,QAAsB9tB,UAA0B;AAEhD,YAAA,UAAU,gBAAgBA,OAAM,YAAY;AAKlD,YAAM,QAAQ,QAAQ,UAAU,gBAAgB,YAAYA,MAAK,MAAM;AAEhE,aAAA,WAAW,gBAAgB,aAAa,MAAM;AACnD,eAAO,WAAW,MAAM;AACtB,iBAAO,MAAM,aAAa,QAAQA,MAAK,MAAM,QAAQ,CAAC;AACtD,iBAAO,WAAW,aAAa,QAAQA,MAAK,MAAM,eAAe,gBAAgB,YAAY;AAC7F,iBAAO,WAAW,aAAa,QAAQ,QAAQ,gBAAgB,YAAY;AAAA,QAAA,CAC5E;AACD,eAAO,WAAW,MAAM;AACtB,UAAAA,MAAK,QAAQ,CAAQ,SAAA,oBAAoB,QAAQ,SAAS,IAAI,CAAC;AAAA,QAAA,CAChE;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,EAEL;AAEO,WAAS,sBAAsB,cAAgC;AAC7D,WAAA,CAAC,QAAsBA,UAA0B;AAC/C,aAAA,WAAW,gBAAgB,YAAY,MAAM;AAC7C,QAAAA,MAAA,QAAQ,UAAQ,oBAAoB,QAAQ,gBAAgBA,OAAM,YAAY,GAAG,IAAI,CAAC;AAAA,MAAA,CAC5F;AAAA,IAAA;AAAA,EAEL;AAWA,WAAS,gBAAgBA,OAAuB,cAAiD;AAC/F,UAAM,UAAU;AAAA,MACd,OAAOA,MAAK,MAAM;AAAA,MAClB,SAAS,aAAa,UAAUA,MAAK,MAAM,iBAAiB,gBAAgB,UAAU;AAAA,IAAA;AAKxF,IAAAA,MAAK,QAAQ,CAAQ,SAAA;AACnB,UAAI,QAAQ,SAAS,KAAK,aAAa,GAAG;AACpC,YAAA,KAAK,aAAa,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,GAAI;AAClD,kBAAQ,QAAQ;AAAA,QAClB;AAAA,MACF;AAAA,IAAA,CACD;AAEM,WAAA;AAAA,EACT;AAEA,WAAS,oBAAoB,QAAsB,SAA0BA,OAAuB;AAC5F,UAAA,UAAUA,MAAK,MAAM;AAE3B,WAAO,WAAW,MAAM;AACtB,MAAAA,MAAK,QAAQ,CAAC,UAA2B,SAASlB,WAAU;AAC1D,YAAI,SAAS,SAASkB,MAAK,KAAK,OAAO,MAAM,WAAW;AACtD,gBAAM,oBAAoB,QAAQ,QAAQ,gBAAgB,QAAQ,gBAAgB;AAC3E,iBAAA,WAAW,mBAAmB,MAAM;AAErC,gBAAA,YAAY,QAAQlB,WAAU,GAAG;AACnC;AAAA,gBACE;AAAA,gBACA,QAAQ;AAAA,gBACR,kBAAkBkB,MAAK,KAAK,QAAQ,SAAS,SAAS,OAAO;AAAA,gBAC7DlB;AAAA,cAAA;AAAA,YACF,OACK;AACL,mCAAqB,QAAQ,QAAQ,SAAS,SAAS,SAASA,MAAK;AAAA,YACvE;AAAA,UAAA,CACD;AAAA,QAAA,OACI;AACL,iBAAO,UAAU,QAAQ;AAAA,QAC3B;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAAA,EACH;AAEA,WAAS,qBAAqB,QAAsB,SAAkB,UAAoBA,QAAe;AACnG,QAAAA,WAAU,KAAK,SAAS;AACnB,aAAA,WAAW,gBAAgB,KAAK,wBAAwB;AAAA,IACjE;AACA,WAAO,aAAa,QAAQ;AAAA,EAC9B;;AC/JA,QAAM2F,WAAS,IAAI,UAAU,MAAM;AAEnC,QAAMoT,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,IAAAS,KAAI,QAAA/B,QAAA,IAAW;AAGzC,UAAM,eAAiC;AAAA,MACrC,OAAO,iBAAiB;AAAA,MACxB,OAAO,iBAAiB;AAAA,MAQxB,SAAS;AAAA,MACT,OAAO,iBAAiB;AAAA,MACxB,aAAaA,QAAO,SAAS,SAAS,oBAAoB;AAAA,IAAA;AAGrD,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,OAAO;AAAA,cACL,SAAS,EAAE,SAAS,KAAK;AAAA,YAC3B;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,UAAU,CAAC,QAAuB;AAChC,wBAAMrX,MAAK;AACX,wBAAM,QAAgC,CAAA;AACtC,sBAAI,aAAa,SAASA,IAAG,aAAa,cAAc,GAAG;AACzD,0BAAM,UAAUA,IAAG,aAAa,cAAc,MAAM;AAAA,kBACtD;AACO,yBAAA;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMc,OAAM;AACV,oBAAM,QAAgC;AAAA,gBACpC,OAAO;AAAA,cAAA;AAET,kBAAI,aAAa,SAASA,MAAK,MAAM,YAAY,MAAM;AACrD,sBAAM,kBAAkBA,MAAK,MAAM,UAAU,SAAS;AAAA,cACxD;AACO,qBAAA,CAAC,MAAM,OAAO,CAAC;AAAA,YACxB;AAAA,UACF;AAAA,UACA,QAAQ,CAAC;AAAA,QACX;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,OAAO;AAAA,YACP,OAAO;AAAA,cACL,OAAO,EAAE,SAAS,MAAM;AAAA,YAC1B;AAAA,YACA,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,UAAU,CAAC,QAAuB;AAChC,wBAAMd,MAAK;AACX,wBAAM,QAAgC,CAAA;AAClC,sBAAAA,IAAG,aAAa,YAAY,GAAG;AACjC,0BAAM,QAAQ;AAAA,kBAChB;AACO,yBAAA;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMc,OAAM;AACV,oBAAM,QAAmC,CAAA;AACzC,oBAAM,QAAQ;AACV,kBAAAA,MAAK,MAAM,OAAO;AACpB,sBAAM,gBAAgB;AAAA,cACxB;AACO,qBAAA,CAAC,MAAM,OAAO,CAAC;AAAA,YACxB;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,SAAS,CAACK,YAAmB,eAAeA,QAAO,MAAM,aAAa,YAAY;AAAA,cACpF;AAAA,YACF;AAAA,YACA,QAAQ,sBAAsB,YAAY;AAAA,UAC5C;AAAA,UAEA,WAAW,aAAa,eAAe,cAAciY,GAAE;AAAA,QACzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,OAAO;AAAA,YACP,OAAO;AAAA,cACL,OAAO,EAAE,SAAS,MAAM;AAAA,cACxB,OAAO,EAAE,SAAS,EAAE;AAAA,cACpB,cAAc,EAAE,SAAS,gBAAgB,aAAa;AAAA,cACtD,cAAc,EAAE,SAAS,gBAAgB,aAAa;AAAA,YACxD;AAAA,YACA,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,SAAS,KAAoB;AAC3B,wBAAMpZ,MAAK;AAEX,wBAAM,QAAgC,CAAA;AAChC,wBAAA,QAAQA,IAAG,aAAa,YAAY;AAE1C,sBAAI,aAAa,OAAO;AAChB,0BAAAw1B,SAAuBx1B,IAAG,aAAa,OAAO;AACpD,wBAAI,CAACw1B,QAAO;AACV,4BAAM,QAAQ;AAAA,oBAAA,OACT;AACL,4BAAM,QAAQ,SAASA,QAAO,EAAE,KAAK;AAAA,oBACvC;AAAA,kBACF;AAEA,sBAAI,aAAa,OAAO;AACtB,wBAAI,aAAa,WAAWx1B,IAAG,aAAa,cAAc,GAAG;AAC3D,4BAAM,eAAe,gBAAgB;AAAA,oBAAA,OAChC;AACL,4BAAM,eAAe,kBAAkBA,IAAG,aAAa,MAAM,CAAC;AAAA,oBAChE;AACM,0BAAA,cAAcA,IAAG,aAAa,mBAAmB;AACvD,wBAAI,aAAa;AACf,4BAAM,eAAe;AAAA,oBACvB;AAAA,kBACF;AAEO,yBAAA;AAAA,gBACT;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMc,OAAM;AACV,oBAAM,QAAmC,CAAA;AACzC,oBAAM,QAAQ;AACV,kBAAAA,MAAK,MAAM,OAAO;AACpB,sBAAM,gBAAgB;AAAA,cACxB;AACA,kBAAI,aAAa,SAASA,MAAK,MAAM,UAAU,GAAG;AAC1C,sBAAA,QAAQA,MAAK,MAAM;AAAA,cAC3B;AACA,kBAAI,aAAa,OAAO;AACtB,sBAAMO,QAAO,kBAAkBP,MAAK,MAAM,YAAY;AACtD,oBAAIO,OAAM;AACR,wBAAM,OAAOA;AAAA,gBACf;AACA,oBAAI,aAAa,SAAS;AACxB,sBAAIP,MAAK,MAAM,iBAAiB,gBAAgB,SAAS;AACvD,0BAAM,kBAAkB;AAAA,kBAC1B;AAAA,gBACF;AACM,sBAAA,uBAAuBA,MAAK,MAAM;AAAA,cAC1C;AACO,qBAAA,CAAC,MAAM,OAAO,CAAC;AAAA,YACxB;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,SAAS,CAACK,YAAmB,eAAeA,QAAO,MAAM,cAAc,YAAY;AAAA,cACrF;AAAA,YACF;AAAA,YACA,QAAQ,uBAAuB,YAAY;AAAA,UAC7C;AAAA,UAEA,WAAW,aAAa,gBAAgB,cAAciY,GAAE;AAAA,QAC1D;AAAA,MACF;AAAA,MAEA,SAAS,MAAM;AACb,cAAM,UAAoB,CAAA;AAC1B,YAAI,aAAa,OAAO;AACd,kBAAA;AAAA,YACN,IAAI,OAAO;AAAA,cACT,KAAK7T;AAAAA,cACL,OAAO;AAAA,gBACL,WAAW;AAAA,kBACT,UAAUzE,OAAuB,MAAkB,QAAkC;AACnF,2BAAO,IAAI,wBAAwBA,OAAM,MAAM,MAAsB;AAAA,kBACvE;AAAA,gBACF;AAAA,cACF;AAAA,YAAA,CACD;AAAA,UAAA;AAAA,QAEL;AACO,eAAA;AAAA,MACT;AAAA,MAEA,UAAU,CAACK,YAAmB;AAC5B,cAAM,WAAW;AAAA,UACf,IAAI;AAAA,YACF,gBAAgB;AAAA,YAChB,CAAC;AAAA,YACDA,QAAO,MAAM;AAAA,YACbA,QAAO,MAAM;AAAA,YACb,qBAAqBiY,GAAE;AAAA,YACvBA,IAAG;AAAA,UACL;AAAA,UACA,IAAI;AAAA,YACF,gBAAgB;AAAA,YAChB,CAAC;AAAA,YACDjY,QAAO,MAAM;AAAA,YACbA,QAAO,MAAM;AAAA,YACb,sBAAsBiY,GAAE;AAAA,YACxBA,IAAG;AAAA,UACL;AAAA,UACA,IAAI,mBAAmB,gBAAgB,cAAc,CAAC,KAAK,GAAG,aAAajY,QAAO,MAAM,SAAS,CAAC;AAAA,UAClG,IAAI,mBAAmB,gBAAgB,cAAc,CAAC,WAAW,GAAG,aAAaA,QAAO,MAAM,SAAS,CAAC;AAAA,UACxG,IAAI,mBAAmB,gBAAgB,eAAe,CAAC,OAAO,GAAG,cAAcA,QAAO,MAAM,SAAS,CAAC;AAAA,UACtG,IAAI,iBAAiB;AAAA,QAAA;AAEvB,YAAI,aAAa,OAAO;AACtB,mBAAS,KAAK,IAAI,0BAA0BiY,KAAI,YAAY,CAAC;AAAA,QAC/D;AACA,YAAI,aAAa,OAAO;AACb,mBAAA;AAAA,YACP,IAAI,uBAAuBjY,QAAO,MAAM,SAAS;AAAA,YACjD,IAAI,6BAA6BA,QAAO,MAAM,SAAS;AAAA,UAAA;AAAA,QAE3D;AACO,eAAA;AAAA,MACT;AAAA,MAEA,UAAU,CAACA,YAAmB;AACrB,eAAA;AAAA,UACL,EAAE,KAAK,QAAQ,OAAO,SAAS,cAAcA,QAAO,MAAM,SAAS,EAAE;AAAA,UACrE,EAAE,KAAK,QAAQ,KAAK,SAAS,aAAaA,QAAO,MAAM,SAAS,EAAE;AAAA,UAClE,EAAE,KAAK,QAAQ,UAAU,SAAS,aAAaA,QAAO,MAAM,SAAS,EAAE;AAAA,QAAA;AAAA,MAE3E;AAAA,MAEA,YAAY,CAACA,YAAmB;AAE9B,cAAM,UAAU,MAAM;AACb,iBAAA;AAAA,YACL,OAAOiY,IAAG,MAAM,YAAkB,MAAA;AAAA,UAAA;AAAA,QACpC;AAGI,cAAA,iBAAiB,CAAC,UAAuB;AAC7C,iBAAO,CAACjO,uBAAqBhK,QAAO,MAAM,OAAO,EAAE,MAAM,SAAS;AAAA,QAAA;AAGpE,cAAM,QAAQ;AAAA,UACZ,6BAA6B,kBAAkBA,QAAO,MAAM,aAAa,gBAAgB,OAAO;AAAA,UAChG;AAAA,YACE;AAAA,YACAA,QAAO,MAAM;AAAA,YACb;AAAA,YACA,CAAAkB,YAAU,EAAE,OAAO,CAACA,OAAM,IAAI,OAAO;YACrC,CAACA,QAAOvB,UAASA,MAAK,aAAaA,MAAK,MAAM,UAAU,CAACuB,OAAM;AAAA,UACjE;AAAA,QAAA;AAEF,YAAI,aAAa,OAAO;AACtB,gBAAM,KAAK,yBAAA,GAA4B,qBAAqBlB,OAAM,CAAC;AAAA,QACrE;AACO,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,aAAaE,OAAc,cAAgC+X,KAAc;AAChF,WAAO,MAAM;AACJ,aAAA;AAAA,QACL,MAAM,CAACjY,YAAmBA,QAAO,MAAME;AAAA,QACvC,QAAQ,MAAM,4BAA4B+X,KAAI,YAAY;AAAA,QAC1D,QAAQ;AAAA,UACN,KAAK;AAAA,UACL,OAAO;AAAA,QACT;AAAA,QACA,cAAc;AAAA,MAAA;AAAA,IAChB;AAAA,EAEJ;AAEA,WAAS,kBAAkB,OAAuC;AAChE,YAAQ,OAAO;AAAA,MACb,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AACZ,eAAA;AAAA,MACT,KAAK,gBAAgB;AACZ,eAAA;AAAA,MACT,KAAK,gBAAgB;AACZ,eAAA;AAAA,MACT,KAAK,gBAAgB;AACZ,eAAA;AAAA,MACT,KAAK,gBAAgB;AACZ,eAAA;AAAA,MACT;AACS,eAAA;AAAA,IACX;AAAA,EACF;AAEA,WAAS,kBAAkB/X,OAAsC;AAC/D,YAAQA,OAAM;AAAA,MACZ,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB;AACE,eAAO,gBAAgB;AAAA,IAC3B;AAAA,EACF;AAKA,WAAS,qBAAqB+X,KAAc;AACnC,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,aAAa;AAAA,MAC5C,aAAaA,IAAG,QAAQ,cAAc,8BAA8B;AAAA,MACpE,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,mBAAmBA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAEvG;AAEA,WAAS,sBAAsBA,KAAc;AACpC,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,eAAe;AAAA,MAC9C,aAAaA,IAAG,QAAQ,cAAc,8BAA8B;AAAA,MACpE,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MACLA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,oBAAoBA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAE5F;AC5WgB,WAAA,oBAAoBqc,QAAmB,MAAuB;AAK5E,QAAIA,OAAM,UAAU;AACd,UAAA;AACA,UAAA;AACA,UAAA;AACJ,UAAI,YAAY;AAChB,YAAM,sBAAsB,sBAAsB,CAAC,cAAc,aAAa,GAAGA,OAAM,QAAQ;AACpF,iBAAA,MAAM,oBAAoB,aAAa;AAC1C,cAAA,CAACx1B,MAAK,KAAK,IAAI;AACrB,YAAI,cAAc;AACZ,cAAA,eAAe,sBAAsB,KAAK;AAChD,YAAI,cAAc;AACH,uBAAA,OAAO,aAAa,QAAQ;AACrC,cAAA,qBAAqB,aAAa,IAAI,GAAG;AAC3C,gBAAIA,SAAQ,cAAc;AACxB,sBAAQ,aAAa;AACrB,sBAAQ,aAAa;AAAA,YAAA,WACZA,SAAQ,eAAe;AAChC,uBAAS,aAAa;AACtB,sBAAQ,SAAS,aAAa;AAAA,YAChC;AACc,0BAAA;AAAA,UAChB;AAAA,QACF;AACA,YAAI,CAAC,aAAa;AACI,8BAAA,KAAK,KAAK,EAAE;AAAA,QAClC;AAAA,MACF;AACA,UAAI,SAAS,QAAQ;AACnB,oBAAY,qBAAqB,OAAO,QAAQ,MAAM,SAAS;AAAA,MACjE;AACO,aAAA;AAAA,QACL,GAAGw1B;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,oBAAoB;AAAA,MAAA;AAAA,IAChC,OACK;AACE,aAAAA;AAAA,IACT;AAAA,EACF;AAEgB,WAAA,uBAAuB,KAAuB,gBAAwB;AAC7E,WAAA;AAAA,MACL,cAAc,IAAI,gBAAgB;AAAA,MAClC,eAAe,IAAI,iBAAiB;AAAA,MACpC,gBAAgB,qBAAqB,cAAc;AAAA,IAAA;AAAA,EAEvD;AAEO,WAAS,gBAAgB90B,OAAqB;AACnD,WAAO,CAAC,CAACA,SAAQA,MAAK,SAAS,YAAY;AAAA,EAC7C;AAEgB,WAAA,oBAAoB,KAAa,MAAkB;AAC7D,QAAA,iBAAkB,KAAK,IAAoB;AAC/C,QAAI,iBAAiB,GAAG;AACtB,UAAI,KAAK;AACP,cAAM,WAAW,KAAK,MAAM,IAAI,QAAQ,GAAG;AAC3C,cAAM,kBAAkBqK,6BAA2B,UAAU,CAAAqN,QAAMA,IAAG,OAAO;AAC7E,YAAI,iBAAiB;AACnB,gBAAM,WAAW,KAAK,SAAS,gBAAgB,MAAM,CAAC;AACrC,2BAAA,uBAAuB,SAAS,IAAmB,EAAE;AAAA,QACxE;AAAA,MACF;AAAA,IACF;AAEO,WAAA;AAAA,EACT;AAEO,WAAS,kBAAkB7R,OAAc;AAC9C,WAAOA,MACJ,SAAS,EACT,YAAY,EACZ,WAAW,MAAM;AAAA,EACtB;ACjFA,iBAAsB,YACpB1F,OACA,MACA,UACA,MACA,UACA,cACA,iBACA;AAEM,UAAAK,UAAS,KAAK,MAAM;AAG1B,QAAI,UAAU,SAAS;AACnB,QAAAs0B,SAAoB,EAAE,KAAK;AAC3B,QAAA;AACJ,QAAI,QAAyB,CAAA;AAC7B,QAAI30B,SAAQ,QAAQA,MAAK,SAAS,UAAU;AAElC,MAAA20B,SAAA;AAAA,QACN,GAAI30B,MAAK;AAAA,QACT,SAAS,aAAaK,QAAO,MAAM,SAASL,MAAK,cAAcA,MAAK,MAAM;AAAA,MAAA;AAIpE,MAAA20B,SAAA;AAAA,QACN,GAAGA;AAAA,QACH,UAAU,kBAAkBA,OAAM,QAAQ;AAAA,MAAA;AAKpC,MAAAA,SAAA,oBAAoBA,QAAO,IAAI;AAGnC,UAAA,aAAat0B,QAAO,MAAM,OAAO;AACnC,gBAAQL,MAAK;AACF,mBAAAA,MAAK,MAAM,KAAK,CAAA,SAAQ,KAAK,SAASK,QAAO,MAAM,IAAI;AAClE,YAAI,UAAU;AACN,UAAAs0B,OAAA,SAAS,SAAS,MAAM;AAAA,QAChC;AAAA,MACF;AAGA,gBAAU30B,MAAK;AAAA,IAAA,OACV;AAEG,MAAA20B,SAAA,SAAS,OAAOA,MAAK,EAAE;AAAA,IACjC;AAGM,UAAAp0B,QAAO,aAAa,KAAK,MAAM,OAAO,MAAM,QAAQ,UAAU,QAAQ,UAAU;AAGhF,UAAA,eAAgBA,UAAS,UAAU,UACnB,aAAa,SAAS,SAAS,cAAc,KAC5C;AACvB,QAAI,cAAc;AAEhB,MAAAo0B,OAAM,MAAM,sBAAsBA,QAAO,aAAa,KAAK;AAC3D,+BAAyBA,QAAO,aAAa;AAE7C,MAAAA,OAAM,QAAQ,sBAAsBA,QAAO,eAAe,KAAK;AAC/D,+BAAyBA,QAAO,eAAe;AAE/C,MAAAA,OAAM,MAAM,sBAAsBA,QAAO,aAAa,KAAK;AAC3D,+BAAyBA,QAAO,aAAa;AAAA,IAC/C;AAEM,UAAA,SAAS,MAAM,SAAS,QAAQ;AAAA,MACpCA;AAAA,MAAO;AAAA,MAAMp0B,UAAS,UAAU;AAAA,MAAQ;AAAA,IAAA;AAE1C,QAAI,QAAQ;AAIV,UAAIA,UAAS,UAAU,UAAUo0B,OAAM,YAAY,OAAO,SAAS;AACjE,YAAI,OAAO,SAAS;AACR,oBAAA,SAAS,KAAK,KAAK,MAAM,OAAO,KAAK,OAAO,OAAO,CAAC;AAAA,QAAA,OACzD;AACL,oBAAU,SAAS;AAAA,QACrB;AAAA,MACF;AAGA,UAAI,cAAc;AAEhB,YAAI,OAAO,KAAK;AACQ,gCAAA,QAAQ,eAAe,OAAO,GAAG;AAAA,QAAA,OAClD;AACL,mCAAyB,QAAQ,aAAa;AAAA,QAChD;AAEA,YAAI,OAAO,OAAO;AACZ,cAAA,OAAO,UAAU,WAAW;AACR,kCAAA,QAAQ,iBAAiB,OAAO,KAAK;AAAA,UAAA,OACtD;AACL,qCAAyB,QAAQ,eAAe;AAAA,UAClD;AAAA,QACF;AAEA,YAAI,OAAO,KAAK;AACQ,gCAAA,QAAQ,eAAe,OAAO,GAAG;AAAA,QAAA,OAClD;AACL,mCAAyB,QAAQ,aAAa;AAAA,QAChD;AAAA,MACF;AAGA,UAAI,WAAW,OAAO;AACtB,UAAI,OAAO,OAAO;AAEhB,cAAM,QAAQ,OAAO,SAAS,OAAO,UAAU,aAAa,KAAK,OAAO;AAExE,YAAI,OAAO,OAAO;AAChB,cAAI,QAAQ,OAAO;AACf,cAAA,gBAAgB,KAAK,GAAG;AAClB,oBAAA,KAAK,IAAI,OAAO,GAAG;AAAA,UAC7B;AACA,qBAAW,YAAY;AACvB,mBAAS,KAAK,CAAC,cAAc,QAAQ,KAAK,CAAC;AAAA,QAC7C;AAEI,YAAA,OAAO,UAAU,UAAU,gBAAgB,CAAC,gBAAgB,OAAO,OAAO,OAAO,QAAQ,IAAI,GAAG;AAClG,qBAAW,YAAY;AACvB,mBAAS,KAAK,CAAC,eAAe,OAAO,SAAS,KAAK,CAAC;AAAA,QACtD;AAAA,MACF;AAGA,YAAM,aAAa,EAAE,GAAG,QAAQ,SAAS;AAGrC,UAAA,aAAat0B,QAAO,MAAM,OAAO;AACnC,YAAI,UAAU;AACJ,kBAAA,SAAS,cAAc,KAAK;AACpC,cAAI,WAAW,QAAQ;AACV,uBAAA,SAAS,KAAK,OAAO,EAAE,GAAG,SAAS,OAAO,MAAM,WAAW,OAAQ,CAAA;AAAA,UAChF;AAAA,QAAA,WACS,WAAW,QAAQ;AACjB,qBAAAA,QAAO,MAAM,KAAK,OAAO,EAAE,MAAM,WAAW,QAAQ;AAAA,QACjE;AACI,YAAA,WAAW,UAAU,UAAU;AACzB,kBAAA,SAAS,SAAS,KAAK;AAAA,QACjC;AAAA,MACF;AAGA,YAAM,WAAW,SAAS,cAAc,YAAY,SAAS,KAAK;AAGlE,UAAI,UAAU;AACZ,4BAAoB,MAAM,QAAQ;AAAA,MACpC;AAAA,IACF;AAEA,QAAI,MAAM;AACR,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAGA,WAAS,gBAAgB,OAA2B,QAA4B,MAA8B;AACxG,QAAA,SAAS,UAAU,MAAM;AAC3B,aAAO,qBAAqB,OAAO,QAAQ,MAAM,KAAK;AAAA,IAAA,OACjD;AACE,aAAA;AAAA,IACT;AAAA,EACF;ACpLgB,WAAA,eAAe,aAA0B,OAAwB;AACxE,WAAA,WAAW,KAAK,YAAY,KAAK,YAAY,MAAM,YAAY,KAAK,UAAU,KAAK;AAAA,EAC5F;ACDA,QAAMuwB,cAAY,IAAI,UAAU,sBAAsB;AAE/C,WAAS,2BAA2B;AACzC,WAAO,IAAI,OAAsB;AAAA,MAC/B,KAAKA;AAAAA,MACL,OAAO;AAAA,QACL,OAAO;AACL,iBAAO,cAAc;AAAA,QACvB;AAAA,QACA,MAAM,IAAiB,QAAuB,WAAwB,UAAuB;AAE3F,cAAI,GAAG,UAAU,SAAS,GAAG,qBAAqB,eAAe;AAC/D,mBAAO,cAAc;AAAA,UACvB;AAEA,gBAAMvwB,UAAS,SAAS;AACxB,gBAAM,cAA4B,CAAA;AAC/B,aAAA,IAAI,aAAa,GAAG,UAAU,MAAM,GAAG,UAAU,IAAI,CAACL,OAAM,QAAQ;AACjE,gBAAA,CAACK,QAAO,MAAM,OAAOA,QAAO,MAAM,MAAM,EAAE,SAASL,MAAK,IAAI,GAAG;AACrD,0BAAA,KAAK,eAAe,EAAE,MAAAA,OAAM,OAAO,EAAE,OAAO,0BAA2B,CAAA,CAAC;AAAA,YACtF;AAAA,UAAA,CACD;AAED,iBAAO,cAAc,OAAO,GAAG,KAAK,WAAW;AAAA,QACjD;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,YAAY,OAAoB;AACvB,iBAAA4wB,YAAU,SAAS,KAAK;AAAA,QACjC;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AC/BgB,WAAA,iBAAiB,WAA4B,MAAgC;AACpF,WAAA,IAAI,QAAQ,CAAW,YAAA;AACtB,YAAA,SAAS,UAAU,iBAAiB,IAAI;AAC1C,UAAA,OAAO,WAAY,UAAU;AAC/B,gBAAQ,MAAM;AAAA,MAAA,OACT;AACL,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA,IAAA,CACD;AAAA,EAEH;;ACTO,WAAS,wBAAwB;AACtC,UAAM7C,OAAM,OAAO,SAAS,cAAc,KAAK;AAC3C,IAAAA,KAAA,UAAU,IAAI,qBAAqB;AAChC,WAAAA;AAAA,EACT;AAEgB,WAAA,uBAAuB,OAAuB7uB,KAAiB;AAC1E,IAAAA,IAAA,UAAU,IAAI,0BAA0B;AAC3C,UAAM,OAAOA,GAAE;AAAA,EACjB;AAEO,WAAS,YACd,MACA,SACA,aACA,OACA;AAEA,UAAM,QAAQ,OAAO,SAAS,cAAc,MAAM;AAClD,UAAM,kBAAkB;AACxB,UAAM,UAAU;AAAA,MACd;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAEF,UAAM,MAAM,WAAW;AACvB,UAAM,MAAM,SAAS;AACT,gBAAA,OAAO,SAAS,KAAK;AAGjC,QAAI,aAAa;AACT,YAAA,WAAW,IAAI,iBAAiB,CAAiB,kBAAA;AACrD,sBAAc,QAAQ,CAAY,aAAA;AACvB,mBAAA,aAAa,QAAQ,CAAQc,UAAA;AACpC,gBAAIA,UAAS,OAAO;AAClB,uBAAS,WAAW;AACR;YACd;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MAAA,CACF;AACQ,eAAA,QAAQ,KAAK,KAAK,EAAE,YAAY,OAAO,WAAW,MAAM,SAAS,KAAM,CAAA;AAAA,IAClF;AAEO,WAAA;AAAA,EACT;AAEO,WAAS,kBAAkB20B,QAAe,SAAmB,OAAe,OAAmC;AACpH,UAAM,SAAS,OAAO,SAAS,cAAc,QAAQ;AAC9C,WAAA,UAAU,IAAI,iBAAiB;AACtC,WAAO,QAAQ;AACH,gBAAA,QAAQ,SAAS,KAAK;AAClC,UAAM,UAAU,OAAO,SAAS,cAAc,KAAK;AACnD,YAAQ,MAAMA;AACN,YAAA,aAAa,aAAa,OAAO;AACzC,WAAO,OAAO,OAAO;AACd,WAAA;AAAA,EACT;AAEgB,WAAA,iBAAiB50B,OAAc,SAAoB,OAAmC;AACpG,UAAM,QAAQ,OAAO,SAAS,cAAc,OAAO;AACnD,UAAM,YAAYA;AACZ,UAAA,UAAU,IAAI,gBAAgB;AACxB,gBAAA,OAAO,SAAS,KAAK;AAC1B,WAAA;AAAA,EACT;AAEgB,WAAA,kBAAkB,SAAmB,SAAoB,OAAmC;AAC1G,UAAMgM,UAAS,OAAO,SAAS,cAAc,QAAQ;AACrD,kBAAcA,SAAQ,OAAO;AACtB,IAAAA,QAAA,UAAU,IAAI,iBAAiB;AAC/B,IAAAA,QAAA,UAAU,IAAI,sBAAsB;AAC/B,gBAAAA,SAAQ,SAAS,KAAK;AAC3B,WAAAA;AAAA,EACT;AAEA,WAAS,cAAc,WAAwB,SAAmB;AAChE,YAAQ,QAAQ,CAAU,WAAA;AACxB,YAAM,WAAW,OAAO,SAAS,cAAc,QAAQ;AACvD,eAAS,QAAQ;AACjB,eAAS,cAAc;AACvB,gBAAU,OAAO,QAAQ;AAAA,IAAA,CAC1B;AAAA,EACH;AAEgB,WAAA,oBAAoB,SAAoB,OAAmC;AACzF,UAAM,QAAQ,OAAO,SAAS,cAAc,OAAO;AAC7C,UAAA,UAAU,IAAI,mBAAmB;AACvC,UAAM,OAAO;AACD,gBAAA,OAAO,SAAS,KAAK;AAC1B,WAAA;AAAA,EACT;AAEgB,WAAA,gBAAgB,YAAoB,SAAoB,OAAmC;AACnG,UAAA,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,OAAO;AACP,UAAA,UAAU,IAAI,eAAe;AAC7B,UAAA,UAAU,IAAI,sBAAsB;AAC9B,gBAAA,OAAO,SAAS,KAAK;AAC3B,UAAA,MAAM,QAAQ,aAAa;AAC1B,WAAA;AAAA,EACT;AC3EA,QAAM,aAAa;AACnB,QAAM,cAAc;AAEpB,QAAM,2BAA2B;AAE1B,WAAS,oBAAoB,WAAwB;AAEhD,cAAA,UAAU,IAAI,6BAA6B,gCAAgC;AAGrF,cAAU,MAAM,WAAW;AAG3B,cAAU,MAAM,UAAU;AAG1B,cAAU,MAAM,WAAW;AAGpB,WAAA;AAAA,EACT;AAEO,WAAS,qBAAqB,KAAuB;AAE1D,UAAM,oBAAoB,IAAI,MAAM,SAAS,CAAC,IAAI,aAAa,UAAU;AAGnE,UAAA,qBAAqB,IAAI,MAAM,UAAU,IAAI,MAAM,WAAW,UAAU,CAAC,IAAI,aAAa,WAAW;AAEpG,WAAA,CAAC,qBAAqB,CAAC;AAAA,EAChC;AAOO,WAAS,eACd,WACA,WACA,KACA,mBACA,MACAuM,KACA/B,SACU;AAEA,cAAA,UAAU,IAAI,wBAAwB;AAGhD,UAAM,2BAA2B,MAAM;AACrC;AAAA,QACE;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,MAAM,MAAM,MAAM;AAAA,QAClB,MAAM,MAAM,OAAO;AAAA,QACnB,MAAM,MAAM,MAAM;AAAA,MAAA;AAAA,IACpB;AAIF,UAAM,cAAc,MAAM;AAExB,YAAM,KAAK;AAGX,YAAM,OAAO,uBAAuB,KAAK,kBAAmB,CAAA;AAC5D,YAAM,MAAM,aAAa,qBAAqB,MAAM,MAAM,MAAS,GAAA,MAAM,MAAM,OAAA,GAAU,MAAM,IAAI,CAAC;AAAA,IAAA;AAItG,UAAM,iBAAiB,MAAM;AACrB,YAAA,QAAQ,MAAM,MAAM,MAAM;AAChC,YAAM,SAAS,MAAM,MAAM,UAAA,IAAe,IAAI,eAAe,IAAI,cAAe,QAAQ,MAAM,MAAM,OAAO;AACrG,YAAA,MAAM,UAAU,MAAM;AACH;IAAA;AAI3B,UAAM,kBAAkB,MAAM;AACtB,YAAA,SAAS,MAAM,MAAM,OAAO;AAClC,YAAM,QAAQ,MAAM,MAAM,UAAA,IAAe,IAAI,cAAc,IAAI,eAAgB,SAAS,MAAM,MAAM,MAAM;AACpG,YAAA,MAAM,SAAS,KAAK;AACD;IAAA;AAI3B,UAAM,iBAAiB,MAAM;AACrB,YAAA,YAAY,mBAAmB,GAAG,EAAE;AAC1C,YAAM,iBAAiB;AAEjB,YAAA,QAAQ,MAAM,MAAM,MAAM;AAChC,YAAM,cAAc,aAAa,OAAO,WAAW,cAAc;AACjE,UAAI,eAAe,aAAa,aAAa,MAAM,MAAM,MAAA,GAAS,cAAc;AAChF,UAAI,gBAAgB,MAAM,MAAM,OAAO,KAAK,eAAe,KAAK;AAC/C,uBAAA;AAAA,MACjB;AACM,YAAA,MAAM,SAAS,YAAY;AAE3B,YAAA,SAAS,MAAM,MAAM,OAAO;AAClC,YAAM,eAAe,aAAa,QAAQ,WAAW,cAAc;AAC7D,YAAA,MAAM,UAAU,aAAa,cAAc,MAAM,MAAM,MAAA,GAAS,cAAc,CAAC;AAE5D;IAAA;AAI3B,UAAM,cAAc,MAAM;AACxB,YAAM,cAAc;AACpB;AAAA,QACE,YAAY;AAAA,QACZ,uBAAuB,KAAK,mBAAmB;AAAA,QAC/C,YAAY,KAAK;AAAA,QACjB;AAAA,QACA+B;AAAA,QACA/B;AAAA,QACA;AAAA,MAAA;AAAA,IACF;AAIF,UAAM,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA+B,IAAG;AAAA,MACHA,IAAG,QAAQ;AAAA,IAAA;AAIb,UAAM,SAAS;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,MACZ,MAAM;AAAA,MACN;AAAA,IAAA;AAEF,cAAU,OAAO,MAAM;AAGhB,WAAA;AAAA,MACL,QAAQ,MAAM;AACZ,cAAM,KAAK;AAAA,MACb;AAAA,MACA,QAAQ,MAAM;AACF,kBAAA,UAAU,OAAO,wBAAwB;AACnD,eAAO,OAAO;AACd,cAAM,OAAO;AAAA,MACf;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,YACP,MACA,WACA,KACA,QACA,gBACA,iBACA,gBACA,aACA,UACA,eACA;AAEA,UAAM,QAAQ,YAAY,MAAM,CAAE,CAAA;AAG5B,UAAA,kBAAkB,KAAK,IAAI;AACjC,oBAAgB,YAAY,KAAK;AAGjC,UAAM,iBAAiB,MAAM;AAC3B,YAAM,qBAAqB;AACrB,YAAA,YAAY,gBAAgB;AAC5B,YAAA,WAAW,UAAU;AACrB,YAAA,MAAM,MAAM,SAAS,MAAM,UAAU,MAAM,SAAS,SAAS,IAAI;AACvE,YAAM,eAAe,SAAS,OAAO,qBAAqB,UAAU;AACpE,UAAI,cAAc;AAChB,cAAM,MAAM,QAAQ;AACpB,cAAM,MAAM,OAAO,SAAS,OAAO,UAAU,OAAO;AAAA,MAAA,OAC/C;AACL,cAAM,MAAM,OAAO;AACnB,cAAM,MAAM,QAAQ,UAAU,QAAQ,SAAS,QAAQ;AAAA,MACzD;AAAA,IAAA;AAII,UAAA,2BAA2B,kCAAkC,IAAI;AACvE,QAAI,0BAA0B;AACH,+BAAA,iBAAiB,UAAU,cAAc;AAAA,IACpE;AAGA,UAAM,gBAAgB,OAAO,YAAY,gBAAgB,EAAE;AAG3D,UAAM,QAAQ;AACd,UAAM,OAAO,KAAK;AACZ,UAAA,aAAa,CAAC,QAAqB,iBAAyB;AAChE,6BAAuB,OAAO,MAAM;AACpC,UAAI,cAAc;AAChB,cAAM,cAAc,OAAO,SAAS,cAAc,MAAM;AAC5C,oBAAA,MAAM,QAAQ,eAAe;AACzC,+BAAuB,OAAO,WAAW;AAAA,MAC3C;AAAA,IAAA;AAII,UAAA,eAAe,CAAC,iBAAiB,qBAAqB;AACtD,UAAA,SAAS,iBAAiB,IAAI;AACpC,eAAW,QAAQ,CAAC;AACd,UAAA,SAAS,gBAAgB,GAAG,YAAY;AAC9C,WAAO,WAAW;AAClB,eAAW,QAAQ,CAAC;AAGpB,UAAM,eAAe;AACf,UAAA,SAAS,iBAAiB,IAAI;AACpC,eAAW,QAAQ,CAAC;AACpB,UAAM,SAAS,gBAAgB,GAAG,cAAc,EAAE,OAAO,cAAc;AACvE,WAAO,WAAW;AAClB,eAAW,QAAQ,CAAC;AACd,UAAA,aAAa,iBAAiB,UAAU,CAAC,qBAAqB,GAAG,EAAE,OAAO,aAAA,CAAc;AAC9F,eAAW,YAAY,EAAE;AAGnB,UAAA,cAAc,kBAAkB,aAAa,YAAY;AAC/D,gBAAY,WAAW,MAAM;AAI3B,aAAO,MAAM;AACb,kBAAY,MAAM;AAGJ;AAGC;IAAA;AAEjB,eAAW,aAAa,EAAE;AAG1B,UAAM,kBAAkB,OAAO,SAAS,cAAc,KAAK;AAC3D,UAAM,eAAe;AACrB,iBAAa,UAAU;AACvB,oBAAgB,OAAO,YAAY;AACnC,eAAW,iBAAiB,CAAC;AAC7B,UAAM,YAAY,iBAAiB,cAAc,YAAY,CAAC;AAC9D,eAAW,WAAW,EAAE;AAGxB,UAAM,YAAY;AAAA,MAChB,SAAS;AAAA,MACT,CAAC,iCAAiC;AAAA,MAClC,cAAc,iBAAiB;AAAA,IAAA;AAEjC,cAAU,UAAU;AACpB,2BAAuB,OAAO,SAAS;AAGvC,QAAI,IAAI,UAAU;AACT,aAAA,WAAW,QAAQ,CAAC;AAAA,IAAA,OACtB;AACL,UAAI,SAAS;AAAA,IACf;AAGA,UAAM,gBAAgB,MAAM;AACpB,YAAA,gBAAgB,YAAY,UAAU;AAE5C,UAAI,eAAe;AACjB,qBAAa,UAAU;AACvB,qBAAa,WAAW;AAAA,MAAA,OACnB;AACL,qBAAa,WAAW;AAAA,MAC1B;AAEO,aAAA,MAAM,UAAU,gBAAgB,SAAS;AACrC,iBAAA,MAAM,UAAU,gBAAgB,KAAK;AAAA,IAAA;AAEpC;AAGR,UAAA,SAAS,CAAC,UAA4B;AACpC,YAAA,QAAQ,WAAW,MAAM,KAAK;AAChC,UAAA,MAAM,KAAK,GAAG;AACT,eAAA;AAAA,MACT;AACA,UAAI,QAAQ,GAAG;AACN,eAAA;AAAA,MAAA,OACF;AACE,eAAA;AAAA,MACT;AAAA,IAAA;AAGI,UAAA,WAAW,CAAC,UAAkB;AAClC,aAAO,QAAQ,UAAU,OAAO,YAAY,KAAK;AAAA,IAAA;AAE7C,UAAA,YAAY,CAAC,WAAmB;AACpC,aAAO,QAAQ,UAAU,QAAQ,YAAY,KAAK;AAAA,IAAA;AAG7C,WAAA;AAAA,MAEL,IAAI;AAAA,MAKJ,MAAM,MAAM;AACJ,cAAAzY,QAAO,mBAAmB,GAAG;AACnC,oBAAY,QAAQA,MAAK;AACzB,iBAASA,MAAK,KAAK;AACnB,kBAAUA,MAAK,MAAM;AAGP;AAGC;MACjB;AAAA,MAEA,UAAU,MAAM;AACC;MACjB;AAAA,MAEA,QAAQ,MAAM;AACZ,YAAI,0BAA0B;AACH,mCAAA,oBAAoB,UAAU,cAAc;AAAA,QACvE;AACA,sBAAc,aAAa;AAC3B,cAAM,OAAO;AAAA,MACf;AAAA,MAEA,OAAO;AAAA,QACL,OAAO,MAAM,OAAO,MAAM,KAAK,mBAAmB,GAAG,EAAE;AAAA,QACvD;AAAA,QACA,QAAQ,MAAM,OAAO,MAAM,KAAK,mBAAmB,GAAG,EAAE;AAAA,QACxD;AAAA,QACA,OAAO,MAAM,YAAY;AAAA,QACzB,UAAU,CAAC,UAAmB,YAAY,QAAQ;AAAA,QAClD,WAAW,MAAM,aAAa;AAAA,QAC9B,cAAc,CAAC,SAAkB;AAC3B,cAAA,CAAC,aAAa,UAAU;AAC1B,yBAAa,UAAU;AAAA,UACzB;AAAA,QACF;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,aACP,KACA,WACA,WACA,mBACA,WACA,OACA,UACA,kBACA;AACM,UAAA,SAAS,SAAS,cAAc,MAAM;AAC5C,WAAO,kBAAkB;AACzB,WAAO,UAAU,IAAI,0BAA0B,uBAAuB,+BAA+B;AACrG,WAAO,MAAM,WAAW;AACxB,WAAO,MAAM,SAAS;AACtB,WAAO,MAAM,QAAQ;AACrB,WAAO,MAAM,SAAS;AAEtB,UAAM,oBAAoB,CAAC,CAAC,SAAS,KAAK;AAEpC,UAAA,gBAAgB,CAAC,OAAmB;AACxC,SAAG,eAAe;AAElB,YAAM,aAAa,IAAI;AACvB,YAAM,cAAc,IAAI;AAExB,YAAM,SAAS,GAAG;AAClB,YAAM,SAAS,GAAG;AAElB,YAAM,iBAAiB;AAEjB,YAAA,gBAAgB,CAAC0D,OAAkB;AAEjC,cAAA,SAASA,GAAE,QAAQ;AACnB,cAAA,SAASA,GAAE,QAAQ;AAErB,YAAA;AACA,YAAA;AACJ,YAAI,aAAa;AACf,cAAI,UAAU,QAAQ;AACpB,oBAAQ,aAAa;AACZ,qBAAA,cAAc,UAAU,cAAc;AAAA,UAAA,OAC1C;AACL,qBAAS,cAAc;AACf,oBAAA,aAAa,UAAU,aAAa;AAAA,UAC9C;AAAA,QAAA,OACK;AACL,kBAAQ,aAAa;AACrB,mBAAS,cAAc;AAAA,QACzB;AAGA,cAAM,eAAe,aAAa,OAAO,SAAS,cAAc;AAChE,YAAI,gBAAgB,MAAA,CAAO,KAAK,eAAe,KAAK;AAC1C,kBAAA;AACR,mBAAS,SAAS,cAAc;AAAA,QAClC;AAGA,cAAM,QAAQ,sBAAsB,UAAA,EAAY,KAAK,OAAO,eAAe;AAC3E,YAAI,OAAO;AACc,iCAAA,WAAW,OAAO,OAAO,cAAc;AAAA,QAChE;AAEI,YAAA,MAAM,QAAQ,QAAQ;AACtB,YAAA,aAAa,YAAY,aAAa,OAAO,SAAS,cAAc,IAAI,MAAA,CAAO;AAC/E,YAAA,MAAM,SAAS,SAAS;AACxB,YAAA,aAAa,aAAa,aAAa,QAAQ,SAAS,cAAc,IAAI,MAAA,CAAO;AAE5E;MAAA;AAGL,YAAA,cAAc,CAACA,OAAkB;AACrC,QAAAA,GAAE,eAAe;AAGjB,YAAI,mBAAmB;AACd,iBAAA,sBAAuBA,GAAmB,SAAS;AACnD,iBAAA,oBAAoB,eAAe,aAAa;AAChD,iBAAA,oBAAoB,aAAa,WAAW;AAAA,QAAA,OAC9C;AACI,mBAAA,oBAAoB,aAAa,aAAa;AAC9C,mBAAA,oBAAoB,WAAW,WAAW;AAAA,QACrD;AAGiB;MAAA;AAGnB,UAAI,mBAAmB;AACd,eAAA,kBAAmB,GAAoB,SAAS;AAChD,eAAA,iBAAiB,eAAe,aAAa;AAC7C,eAAA,iBAAiB,aAAa,WAAW;AAAA,MAAA,OAC3C;AACI,iBAAA,iBAAiB,aAAa,aAAa;AAC3C,iBAAA,iBAAiB,WAAW,WAAW;AAAA,MAClD;AAAA,IAAA;AAGF,QAAI,mBAAmB;AACd,aAAA,iBAAiB,eAAe,aAAa;AAAA,IAAA,OAC/C;AACE,aAAA,iBAAiB,aAAa,aAAa;AAAA,IACpD;AAEO,WAAA;AAAA,EACT;AAKA,WAAS,mBAAmB,KAAuB;AAE3C,UAAA,QAAQ,IAAI,aAAa,UAAU;AACnC,UAAA,SAAS,IAAI,aAAa,WAAW;AAGvC,QAAA,CAAC,SAAS,CAAC,QAAQ;AACd,aAAA;AAAA,QACL,OAAO,IAAI,gBAAgB,IAAI;AAAA,QAC/B,QAAQ,IAAI,iBAAiB,IAAI;AAAA,QACjC,MAAM;AAAA,MAAA;AAAA,IACR,OAGK;AACD,UAAA,gBAAgB,sBAAsB,KAAK;AAC3C,UAAA,iBAAiB,sBAAsB,MAAM;AAEjD,UAAI,CAAC,eAAe;AACF,wBAAA;AAAA,UACd,MAAM,eAAgB,QAAQ,IAAI,cAAc,IAAI;AAAA,UACpD,MAAM,eAAgB;AAAA,QAAA;AAAA,MAE1B;AAEA,UAAI,CAAC,gBAAgB;AACF,yBAAA;AAAA,UACf,MAAM,cAAc,QAAQ,IAAI,eAAe,IAAI;AAAA,UACnD,MAAM,cAAc;AAAA,QAAA;AAAA,MAExB;AAEO,aAAA;AAAA,QACL,OAAO,cAAc;AAAA,QACrB,QAAQ,eAAe;AAAA,QACvB,MAAM,cAAc;AAAA,MAAA;AAAA,IAExB;AAAA,EACF;AAEA,WAAS,oBACP,MACAoxB,QACA,KACA,mBACA,OACA,QACA,MACA;AAEO,WAAA,SAAS,aAAa,KAAK;AAGlC,QAAI,WAAW,kBAAkBA,OAAM,KAAK,MAAM,QAAmC;AAC1E,eAAA,SAAS,OAAO,CAAA,UAAS,CAAC,CAAC,cAAc,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;AACrF,aAAS,KAAK,CAAC,cAAc,QAAQ,IAAI,CAAC;AAC1C,UAAM,OAAO,uBAAuB,KAAK,kBAAmB,CAAA;AACxD,QAAA,CAAC,gBAAgB,QAAQ,IAAI,KAAK,CAAC,qBAAqB,OAAO,QAAQ,MAAM,KAAK,GAAG;AACvF,eAAS,KAAK,CAAC,eAAe,SAAS,IAAI,CAAC;AAAA,IAC9C;AAGM,UAAA,KAAK,KAAK,MAAM;AAGtB,OAAG,cAAcA,OAAM,KAAKA,OAAM,KAAK,MAAM,EAAE,GAAGA,OAAM,KAAK,OAAO,SAAU,CAAA;AAG9E,UAAM,YAAY,KAAK;AACvB,QAAI,UAAU,qBAAqB,iBAAiB,UAAU,UAAU,SAASA,OAAM,KAAK;AAC1F,SAAG,aAAa,cAAc,OAAO,GAAG,KAAKA,OAAM,GAAG,CAAC;AAAA,IACzD;AAGA,SAAK,SAAS,EAAE;AAAA,EAClB;AAIO,WAAS,oBACd30B,OACA,KACA,QACA,gBACA;AAEA,QAAI,gBAAgB,YAAY;AAChC,QAAI,gBAAgB,UAAU;AAC9B,QAAI,gBAAgB,WAAW;AAI/B,QAAI,QAAQ;AACV,aAAO,MAAM,WAAW;AACxB,aAAO,MAAM,gBAAgB;AAC7B,aAAO,MAAM,SAAS;AACtB,aAAO,MAAM,YAAY;AACzB,aAAO,MAAM,eAAe;AAC5B,aAAO,MAAM,cAAc;AAC3B,aAAO,MAAM,aAAa;AAC1B,aAAO,MAAM,UAAU;AACvB,aAAO,MAAM,aAAa;AAC1B,aAAO,MAAM,gBAAgB;AAC7B,aAAO,MAAM,eAAe;AAC5B,aAAO,MAAM,cAAc;AAC3B,aAAO,MAAM,UAAU;AAAA,IACzB;AAGI,QAAAA,MAAK,MAAM,UAAU;AAEvB,YAAM,WAAW,kBAAkBA,MAAK,MAAM,QAAQ;AAGrD,eAAqC,QAAQ,CAAQ,SAAA;AAEpD,cAAMb,OAAM,KAAK;AACjB,YAAI,QAAQ,KAAK;AAGjB,YAAIA,SAAQ,cAAc;AACxB,cAAI,QAAQ;AACJ,kBAAA,YAAY,CAAC,QAAgB,QAAgB,OAAO,MAAM,YAAY,QAAQ,GAAG;AAC/E,oBAAA,kBAAkB,OAAO,SAAS,SAAS;AAC3C,oBAAA,kBAAkB,OAAO,kBAAkB,SAAS;AACpD,oBAAA,kBAAkB,OAAO,wBAAwB,SAAS;AAChD,8BAAA,OAAO,WAAW,SAAS;AAAA,UAC/C;AAMM,gBAAA,eAAe,CAAC,QAAgB,QAAgB,IAAI,MAAM,YAAY,QAAQ,GAAG;AAC/E,kBAAA,kBAAkB,OAAO,uBAAuB,YAAY;AAC5D,kBAAA,kBAAkB,OAAO,uBAAuB,YAAY;AAC5D,kBAAA,kBAAkB,OAAO,WAAW,YAAY;AAAA,QAAA,WAC/CA,SAAQ,cAAc;AAEzB,gBAAA,YAAY,sBAAsB,KAAK;AAC7C,cAAI,WAAW;AACH,sBAAA,OAAO,UAAU,QAAQ;AAC/B,gBAAA,qBAAqB,UAAU,IAAI,GAAG;AACxC,kBAAI,aAAa,YAAY,UAAU,OAAO,UAAU,IAAI;AACxD,kBAAA,MAAM,QAAQ,aAAa,UAAU,MAAM,UAAU,MAAM,cAAc,IAAI;AAAA,YACnF;AAAA,UACF;AAGA,cAAI,CAAC,IAAI,aAAa,UAAU,GAAG;AACjC,gBAAI,MAAM,QAAQ;AAAA,UACpB;AAAA,QAAA,WACSA,SAAQ,eAAe;AAE1B,gBAAA,aAAa,sBAAsB,KAAK;AAC9C,cAAI,YAAY;AACH,uBAAA,OAAO,WAAW,QAAQ;AACjC,gBAAA,qBAAqB,WAAW,IAAI,GAAG;AACzC,kBAAI,aAAa,aAAa,WAAW,OAAO,WAAW,IAAI;AAC3D,kBAAA,MAAM,SAAS,aAAa,WAAW,MAAM,WAAW,MAAM,cAAc,IAAI;AAAA,YACtF;AAAA,UACF;AAGA,cAAI,CAAC,IAAI,aAAa,WAAW,GAAG;AAClC,gBAAI,MAAM,SAAS;AAAA,UACrB;AAAA,QAAA,WAIS,UAAUA,SAAQ,cAAc;AACzC,kBAAQ,OAAO;AAAA,YACb,KAAK;AAAA,YACL,KAAK;AACH,qBAAO,MAAM,WAAW;AACxB;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,qBAAO,MAAM,gBAAgB;AAC7B;AAAA,UACJ;AAAA,QACF;AAAA,MAAA,CACD;AAID,UAAI,QAAQ;AACV,cAAM,QAAQ,sBAAsBa,MAAK,OAAO,eAAe;AAC3D,YAAA,SAAU,UAAU,WAAY;AAClC,cAAI,QAAuB;AAC3B,gBAAM,YAAY,sBAAsB,IAAI,MAAM,KAAK;AACvD,cAAI,WAAW;AACb,oBAAQ,UAAU;AAAA,UAAA,OACb;AACC,kBAAA,OAAO,uBAAuB,KAAK,cAAc;AACvD,oBAAQ,KAAK;AAAA,UACf;AACA,cAAI,UAAU,MAAM;AACK,mCAAA,QAAQ,OAAO,OAAO,cAAc;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAGA,UAAI,gBAAgB,IAAI,aAAa,UAAU,CAAC,GAAG;AACjD,YAAI,MAAM,SAAS;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAGA,WAAS,uBAAuBd,KAAiB,OAAe,OAAe,gBAAwB;AACrG,UAAM,cAAc,iBAAiB;AACrC,QAAI,cAAc,GAAG;AACnB,UAAI,UAAU,QAAQ;AACjB,QAAAA,IAAA,MAAM,cAAc,cAAc;AAAA,MAAA,WAC5B,UAAU,SAAS;AACzB,QAAAA,IAAA,MAAM,aAAa,cAAc;AAAA,MAAA,WAC3B,UAAU,UAAU;AAC1B,QAAAA,IAAA,MAAM,aAAc,cAAY,IAAK;AACrC,QAAAA,IAAA,MAAM,cAAcA,IAAG,MAAM;AAAA,MAClC;AAAA,IAAA,OACK;AACL,MAAAA,IAAG,MAAM,aAAa;AACtB,MAAAA,IAAG,MAAM,cAAc;AAAA,IACzB;AAAA,EACF;;ACtsBO,WAAS,qBACdqB,OACA+X,KACA/B,SACA,QACA,kBACU;AACH,WAAA;AAAA,MACL,IAAI,OAAO;AAAA,QACT,KAAK,IAAI,UAAU,GAAGhW,iBAAgB;AAAA,QACtC,OAAO;AAAA,UACL,WAAW;AAAA,YACT,CAACA,QAAO,CAACP,OAAuB,MAAkB,WAAqC;AAC9E,qBAAA,IAAI,cAAcA,OAAM,MAAM,QAAwBsY,KAAI/B,SAAQ,QAAQ,gBAAgB;AAAA,YACnG;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,EAEL;AAEA,QAAM,cAAkC;AAAA,IA0BtC,YACEvW,OACA,MACA,QACA,UACA,cACA,cACA,kBACA;AAhCe;AACT;AACS;AACA;AACA;AACA;AACA;AACA;AAGD;AACC;AACD;AACC;AAGT;AAGA;AACA;AACA;AACA,gDAA0C;AAY1C,YAAAK,UAASL,MAAK,KAAK;AACpB,WAAA,OAAOA,MAAK,SAASK,QAAO,MAAM,QAAQ,UAAU,QAAQ,UAAU;AAG3E,WAAK,OAAOL;AACZ,WAAK,OAAO;AACZ,WAAK,SAAS;AACT,WAAA,kBAAkB,yBAAyB,gBAAgB;AAChE,WAAK,kBAAkB,iBAAiB;AACxC,WAAK,WAAW;AAChB,WAAK,eAAe;AACpB,WAAK,WAAW;AAChB,WAAK,YAAY;AAGjB,YAAM,gBAAgB,MAAM;AACpB,cAAA,KAAK,KAAK,MAAM;AACtB,WAAG,aAAa,cAAc,OAAO,GAAG,KAAK,OAAQ,CAAA,CAAC;AACtD,aAAK,SAAS,EAAE;AAAA,MAAA;AAIlB,YAAM,iBAAiB,MAAM;AACb;AACd;AAAA,UACE,KAAK;AAAA,UACL,uBAAuB,KAAK,KAAK,KAAK,gBAAgB;AAAA,UACtD,KAAK,KAAK;AAAA,UACV,KAAK;AAAA,UACL;AAAA,UACA;AAAA,UACA,KAAK;AAAA,QAAA;AAAA,MACP;AAKI,YAAA,mBAAmB,CAAC,OAAmB;AAC3C,WAAG,gBAAgB;AAAA,MAAA;AAIhB,WAAA,MAAM,SAAS,cAAc,KAAK;AAClC,WAAA,IAAI,UAAU,IAAI,QAAQ;AAC1B,WAAA,IAAI,SAAS,MAAM;AACtB,aAAK,YAAY;AAAA,MAAA;AAEd,WAAA,IAAI,UAAU,MAAM;AACvB,aAAK,YAAY;AAAA,MAAA;AAEnB,WAAK,IAAI,UAAU;AACnB,WAAK,IAAI,aAAa;AAGlB,UAAA,KAAK,SAAS,UAAU,QAAQ;AAE7B,aAAA,MAAM,SAAS,cAAc,QAAQ;AACrC,aAAA,IAAI,UAAU,IAAI,WAAW;AAG5B,cAAA,YAAY,SAAS,cAAc,KAAK;AAC9C,kBAAU,kBAAkB;AACvB,aAAA,IAAI,OAAO,SAAS;AAGf,kBAAA,OAAO,KAAK,GAAG;AACzB,aAAK,UAAU;AAGV,aAAA,aAAa,SAAS,cAAc,YAAY;AAChD,aAAA,WAAW,UAAU,IAAI,eAAe;AACxC,aAAA,WAAW,UAAU,IAAI,iBAAiB;AAC/C,aAAK,WAAW,UAAU;AAC1B,aAAK,WAAW,aAAa;AAC7B,aAAK,aAAa,KAAK;AAClB,aAAA,IAAI,OAAO,KAAK,UAAU;AAG/B,aAAK,iBAAiB;AAAA,MAAA,OAGjB;AACA,aAAA,MAAM,SAAS,cAAc,MAAM;AAEnC,aAAA,IAAI,OAAO,KAAK,GAAG;AACxB,aAAK,UAAU;AAEf,aAAK,aAAa;AAClB,aAAK,aAAa;AAAA,MACpB;AAGK,WAAA,IAAI,cAAc,CAAC,UAAqB;AACvC,YAAA,MAAM,WAAW,KAAK,KAAK;AAC7B,gBAAM,eAAe;AACrB,gBAAM,gBAAgB;AAAA,QACxB;AAAA,MAAA;AAIF,UAAI,KAAK,iBAAiB;AACxB,4BAAoB,KAAK,GAAG;AAAA,MAC9B;AAGA,WAAK,oBAAoB;AAGzB,WAAK,qBAAqB,aAAa,UAAU,aAAa,MAAM;AAClE,aAAK,gBAAgB;AAAA,MAAA,CACtB;AAAA,IACH;AAAA,IAEO,UAAU;AACf,UAAI,KAAK,oBAAoB;AAC3B,aAAK,mBAAmB;AAAA,MAC1B;AACA,WAAK,mBAAmB;AACxB,WAAK,wBAAwB;AAC7B,WAAK,eAAe;AAAA,IACtB;AAAA,IAEO,aAAa;AAEb,WAAA,IAAI,UAAU,IAAI,0BAA0B;AACjD,UAAI,KAAK,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW;AACrD,aAAK,IAAI,YAAY;AAAA,MACvB;AAGA,WAAK,iBAAiB;AAGtB,WAAK,eAAe;AAAA,IACtB;AAAA,IAEO,eAAe;AAEf,WAAA,IAAI,UAAU,OAAO,0BAA0B;AACpD,UAAI,KAAK,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW;AACrD,aAAK,IAAI,YAAY;AAAA,MACvB;AAGA,WAAK,eAAe;AAAA,IACtB;AAAA,IAGO,OAAOA,OAAuB;AAEnC,UAAIA,MAAK,SAAS,KAAK,KAAK,MAAM;AACzB,eAAA;AAAA,MACT;AAGA,WAAK,OAAOA;AACP,WAAA,YAAY,KAAK,MAAM;AAG1B,YAAI,KAAK,UAAU;AACb,cAAA,qBAAqB,KAAK,GAAI,GAAG;AACnC,iBAAK,SAAS;UAAO,OAChB;AACL,iBAAK,SAAS;AACd,iBAAK,WAAW;AAAA,UAClB;AAAA,QAAA,WAES,KAAK,kBAAkB;AAChC,eAAK,eAAe;AAAA,QACtB;AAAA,MAAA,CACD;AAGM,aAAA;AAAA,IACT;AAAA,IAGO,eAAe,UAAmE;AAChF,aAAA,CAAC,KAAK,cAAc,CAAC,KAAK,WAAW,SAAS,SAAS,MAAM;AAAA,IACtE;AAAA,IAGA,MAAc,YAAY;AAGxB,UAAI,KAAK,oBAAoB;AAC3B,aAAK,mBAAmB;AAAA,MAC1B;AAGM,YAAAgX,OAAM,KAAK,KAAK,MAAM;AACxB,UAAAA,KAAI,MAAM,WAAW,GAAG;AAC1B,aAAK,IAAI,MAAMA;AAAA,MAAA,OACV;AAGC,cAAA,aAAa,UAAUA,IAAG;AAChC,aAAK,IAAI,MAAM,MAAM,iBAAiB,KAAK,SAAS,SAAS,UAAU;AACvE,aAAK,qBAAqB,KAAK,SAAS,QAAQ,cAAc,YAAY,YAAY;AACpF,eAAK,IAAI,MAAM,MAAM,iBAAiB,KAAK,SAAS,SAAS,UAAU,IAAI,MAAM,IAAI,OAAO,QAAQ;AAAA,QAAA,CACrG;AAAA,MACH;AAGA,WAAK,IAAI,QAAQ;AACb,UAAA,KAAK,KAAK,MAAM,OAAO;AACzB,aAAK,IAAI,QAAQ,KAAK,KAAK,MAAM;AAAA,MACnC;AAGA,WAAK,IAAI,MAAM,KAAK,KAAK,eAAe,KAAK,KAAK,MAAM;AAGxD,WAAK,iBAAiB;AAGtB,WAAK,gBAAgB;AAAA,IACvB;AAAA,IAEQ,kBAAkB;AACxB,YAAM,iBAAiB,KAAK,IAAI,cAAc,KAAK,eAAmB,IAAA;AAClD,0BAAA,KAAK,MAAM,KAAK,KAAK,KAAK,aAAa,KAAK,MAAM,MAAM,cAAc;AAAA,IAC5F;AAAA,IAEQ,sBAAsB;AAC5B,YAAM,sBAAsB,MAAM;AAC5B,YAAA,iBAAiB,KAAK,GAAG,GAAG;AAC9B,eAAK,gBAAgB;AACrB,eAAK,wBAAwB;AAAA,QAC/B;AAAA,MAAA;AAEF,WAAK,qBAAqB,OAAO,YAAY,qBAAqB,GAAG;AAAA,IACvE;AAAA,IAEQ,0BAA0B;AAChC,UAAI,KAAK,oBAAoB;AAC3B,sBAAc,KAAK,kBAAkB;AACrC,aAAK,qBAAqB;AAAA,MAC5B;AAAA,IACF;AAAA,IAGQ,iBAAiB;AACnB,UAAA,KAAK,mBAAmB,CAAC,KAAK,aAAa,qBAAqB,KAAK,GAAI,GAAG;AACxE,cAAA,YAAY,OAAO,EAAE,KAAK,KAAK,OAAO,GAAG,MAAM,KAAK,KAAK;AACzD,cAAA,oBAAoB,MAAM,KAAK;AACrC,aAAK,WAAW;AAAA,UAAe;AAAA,UAAW,KAAK;AAAA,UAAK,KAAK;AAAA,UAAM;AAAA,UAChC,KAAK;AAAA,UAAM,KAAK;AAAA,UAAU,KAAK;AAAA,QAAA;AAAA,MAChE;AAAA,IACF;AAAA,IAEQ,iBAAiB;AACvB,UAAI,KAAK,UAAU;AACjB,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,IAEQ,iBAAiB;AACvB,aAAO,KAAK,IAAI,UAAU,SAAS,0BAA0B;AAAA,IAC/D;AAAA,IAEQ,WAAW;AACV,aAAA,KAAK,SAAS,UAAU;AAAA,IACjC;AAAA,IAEQ,iBAAiB;AACvB,aAAO,oBAAoB,KAAK,OAAO,GAAG,KAAK,IAAI;AAAA,IACrD;AAAA,IAEQ,mBAAmB;AAEnB,YAAA,oBAAoB,CAAC,KAAK;AAChC,YAAM,kBAAkB,KAAK,cAAc,KAAK,KAAK,YAAY,WAAW;AACtE,YAAA,YAAY,KAAK,KAAK,MAAM;AAClC,YAAM,wBAAwB,UAAU,SAAS,UAAU,MAAM,KAAA,MAAW,KAAK;AAC3E,YAAAyL,QAAO,qBAAsB,mBAAmB,CAAC;AAGvD,UAAI,KAAK,YAAY;AACnB,YAAI,mBAAmB;AAChB,eAAA,WAAW,MAAM,UAAU;AAChC,eAAK,WAAW,kBAAkB;AAAA,QAAA,OAC7B;AACA,eAAA,WAAW,kBAAkBA,QAAO,UAAU;AACnD,eAAK,WAAW,MAAM,SAASA,QAAO,MAAM;AAC5C,eAAK,WAAW,MAAM,YAAYA,QAAO,MAAM;AAC/C,eAAK,WAAW,MAAM,SAASA,QAAO,MAAM;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAAA,EACF;ACnWO,WAAS,WAAWpiB,SAAgB;AAClC,WAAA;AAAA,MACL,EAAE,KAAK,QAAQ,OAAO,SAAS,SAASA,QAAO,MAAM,QAAQ,IAAI,KAAK,EAAE;AAAA,MACxE,EAAE,KAAK,QAAQ,WAAW,SAAS,mBAAmB;AAAA,MACtD,EAAE,KAAK,QAAQ,WAAW,SAAS,mBAAmB,MAAM,EAAE;AAAA,MAC9D,EAAE,KAAK,QAAQ,YAAY,SAAS,mBAAmB,OAAO,EAAE;AAAA,MAChE,EAAE,KAAK,QAAQ,SAAS,SAAS,mBAAmB,IAAI,EAAE;AAAA,MAC1D,EAAE,KAAK,QAAQ,WAAW,SAAS,mBAAmB,MAAM,EAAE;AAAA,IAAA;AAAA,EAElE;AAEA,WAAS,mBAAmB;AACnB,WAAA,CAAC,OAAoB,aAAyC;AAEnE,YAAM,YAAY,MAAM;AACpB,UAAA,CAAC,UAAU,OAAO;AACb,eAAA;AAAA,MACT;AAGA,YAAMA,UAAS,MAAM;AACf,YAAA,EAAE,MAAM,IAAI,MAAM;AAClB,YAAA,EAAE,aAAiB,IAAA;AACzB,UAAI,iBAAiB,GAAG;AACf,eAAA;AAAA,MACT;AAGM,YAAA,uBAAuB,MAAM,OAAO,SAASA,QAAO,MAAM,UAAU,MAAM,OAAO,eAAe;AACtG,UAAI,sBAAsB;AACxB,YAAI,UAAU;AAEZ,gBAAM,KAAK,MAAM;AACd,aAAA,aAAa,cAAc,OAAO,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAC3D,mBAAS,EAAE;AAAA,QACb;AACO,eAAA;AAAA,MAAA,OACF;AAEL,cAAM,SAAS,MAAM,KAAK,MAAM,QAAQ,CAAC;AACzC,cAAM,cAAc,MAAM,MAAM,MAAM,QAAQ,CAAC;AAC/C,YAAI,cAAc,GAAG;AACnB,gBAAM,eAAe,OAAO,MAAM,cAAc,CAAC;AACjD,cAAI,aAAa,SAASA,QAAO,MAAM,QAAQ;AAC7C,gBAAI,UAAU;AACZ,oBAAM,KAAK,MAAM;AAGjB,kBAAI,MAAM,OAAO,eAAe,GAAG;AACjC,sBAAM,kBAAkB6J,6BAA2B,OAAO,CAAAlK,UAAQA,MAAK,WAAW;AAClF,oBAAI,iBAAiB;AACnB,qBAAG,YAAY,gBAAgB,KAAK,gBAAgB,MAAM,gBAAgB,KAAK,QAAQ;AAAA,gBACzF;AAAA,cACF;AAEA,oBAAM,UAAU,MAAM,MAAM,aAAa,WAAW;AACpD,oBAAM,kBAAkB,cAAc,OAAO,GAAG,KAAK,OAAO;AAC5D,iBAAG,aAAa,eAAe;AAC/B,uBAAS,EAAE;AAAA,YACb;AACO,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,mBAAmB,KAAuC;AAC1D,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAEhF,YAAA,eAAe,CAAC,WAA+B;AACnD,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AACjB,gBAAM,kBAAkB,cAAc,OAAO,MAAM,KAAK,OAAO,GAAG;AAC/D,aAAA,aAAa,eAAe,EAAE,eAAe;AAChD,mBAAS,EAAE;AAAA,QACb;AAAA,MAAA;AAIF,YAAM,sBAAsB,CAAC,QAAqB,QAAQ,UAAU;AAClE,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AACAmI,6BAAA,OAAO,OAAO,QAAQ,OAAO,KAAK,YAAY,SAAS,IAAI,IAAI,CAAC,EAAE,EAAE;AACrF,mBAAS,EAAE;AAAA,QACb;AAAA,MAAA;AAII,YAAA,EAAE,QAAA9H,SAAQ,UAAc,IAAA;AAI3B,WAAA,QAAQ,UAAU,QAAQ,YAC3B,qBAAqB,iBACrB,UAAU,KAAK,SAASA,QAAO,MAAM,QACrC;AACA,cAAM,SAAS,uBAAuBA,QAAO,MAAM,QAAO,SAAS;AACnE,YAAI,UAAU,OAAO,KAAK,aAAa,GAAG;AACxC,8BAAoB,MAAM;AACnB,iBAAA;AAAA,QACT;AAAA,MACF;AAGA,WACG,QAAQ,QAAQ,QAAQ,WACzB,qBAAqB,iBACrB,CAAC,CAACgK,uBAAqBhK,QAAO,MAAM,MAAM,EAAE,SAAS,GACrD;AACA,YAAI,QAAQ,QAAS,QAAQ,UAAU,UAAU,MAAM,iBAAiB,GAAI;AAC1E,gBAAM,SAASgK,uBAAqBhK,QAAO,MAAM,MAAM,EAAE,SAAS;AAClE,cAAI,QAAQ;AACV,yBAAa,MAAM;AACZ,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MAAA,WAGS,UAAU,SAAS,QAAQ,KAAK,eAAe,GAAG,GAAG;AAE9D,cAAM,OAAO,QAAQ,UAAU,QAAQ,OAAO,KAAK;AAG7C,cAAA,EAAE,MAAU,IAAA;AAGlB,cAAM,UAAU,UAAU,KAAK,MAAM,IAAI,QAAQ,OAAO,IAAI,MAAM,UAAU,MAAM,OAAQ,CAAA,GAAG,IAAI;AACjG,YAAI,QAAQ,OAAO;AACjB,gBAAM,SAASiK,mCAAiC,QAAQ,OAAOjK,QAAO,MAAM,MAAM;AAClF,cAAI,QAAQ;AAEL,iBAAA,QAAQ,QAAQ,QAAQ,WAAW,uCAAuC,MAAM,WAAW,GAAG,GAAG;AAC7F,qBAAA;AAAA,YACT;AAEA,gBAAI,SAAS,MAAM,OAAO,KAAK,aAAa,GAAG;AACzB,kCAAA,QAAQ,QAAQ,MAAM;AAAA,YAAA,OAErC;AACL,2BAAa,MAAM;AAAA,YACrB;AACO,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAGO,aAAA;AAAA,IAAA;AAAA,EAEX;ACzIA,QAAMwX,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,IAAAS,KAAI,QAAQ,QAAA/B,YAAW;AAE3C,UAAA,YAAY,yBAAyB,gBAAgB;AAEpD,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,OAAO,mBAAmB,MAAM,SAAS;AAAA,YACzC,SAAS;AAAA,YACT,OAAO;AAAA,YACP,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,gBAAgB;AAAA,gBAChB,SAAS,KAAoB;AAC3B,wBAAMrX,MAAK;AACL,wBAAA,MAAMA,IAAG,cAAc,KAAK;AAC9B,sBAAA,OAAO,IAAI,eAAe,KAAK;AAC1B,2BAAA,kBAAkB,KAAK,SAAS;AAAA,kBAAA,OAClC;AACE,2BAAA;AAAA,sBACL,KAAK;AAAA,sBACL,OAAO;AAAA,oBAAA;AAAA,kBAEX;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMc,OAAuB;AAC3B,qBAAO,CAAC,UAAU,mBAAmBA,OAAM,SAAS,GAAG,CAAC,cAAc,EAAE,OAAO,mBAAmB,CAAC,CAAC;AAAA,YACtG;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,QAAQ,wBAAwB,IAAI;AAAA,YAEpC,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,SAAS,CAACK,YAAmB;AAC3B,wBAAM,eAAe,mBAAmB,MAAM,IAAI,EAAEA,OAAM;AACnD,yBAAA,CAAC,QAA2B,QAAqB;;AACtD,0BAAM,oBAAoB;AAC1B,0BAAM,kBAAkB;AACxB,0BAAM,YAAoC,eAAI,EAAE,qBAAN,mBAAyB,OAAzB,mBAA6B,EAAE;AACrE,yBAAA,qCAAU,OAAM,gBAAgB,OAAO;AACzC,+BAAS,EAAE,GAAG,KAAK,IAAI,EAAE,mBAAmB;AAC5C,mCAAa,QAAQ,QAAQ;AAAA,oBAC/B;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AAAA,YACF;AAAA,YAGA,aAAa,CAACA,SAAgB,KAAkB,WAA8B;AAEtE,oBAAA,kBAAkB,CAACqF,UAAiB;AAClC,sBAAA,QAAQ,mBAAmBA,KAAI;AACrC,oBAAI,OAAO;AACF,yBAAA,QAAQrF,QAAO,MAAM,QAAQ,EAAE,GAAG,OAAO,KAAK,KAAQ,GAAA,CAAE,CAAA;AACxD,yBAAA;AAAA,gBAAA,OACF;AACE,yBAAA;AAAA,gBACT;AAAA,cAAA;AAIF,kBAAI,qBAAqB,GAAG,KAAK,CAAC,gCAAgCA,SAAQ,MAAM,GAAG;AACjF,sBAAM,UAAU,mBAAmB,MAAM,SAAS,EAAEA,OAAM;AAClD,wBAAA,QAAQ,IAAI,EAAE,EAAE;AACjB,uBAAA;AAAA,cAAA,WAEE,iBAAiB,GAAG,GAAG;AACzB,uBAAA,gBAAgB,IAAI,EAAE,iBAAiB;AAAA,cAAA,OACzC;AACE,uBAAA;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UAEA,WAAW,OAAO;AAAA,YAChB,MAAM,CAACA,YAAmBA,QAAO,MAAM;AAAA,YACvC,QAAQ,MAAM,aAAaiY,KAAI/B,SAAQ,SAAS;AAAA,YAChD,QAAQ;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,YACT;AAAA,YACA,gBAAgB;AAAA,YAChB,cAAc;AAAA,UAAA;AAAA,QAElB;AAAA,MACF;AAAA,MAEA,QAAQ,MAAM;AACL,eAAA;AAAA,UACL,CAAC,IAAiB,iBAA+B;AAC3C,gBAAA,iBAAiB,aAAa,MAAM;AACtC,qBAAO,sBAAsB,EAAE;AAAA,YAAA,OAC1B;AACE,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,MAEA,mBAAmB,CAAClW,YAAmB;AAC9B,eAAA;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,YAAY,CAAAL,UAAQA,MAAK,SAASK,QAAO,MAAM;AAAA,YAC/C,QAAQ;AAAA,UACV;AAAA,QAAA;AAAA,MAEJ;AAAA,MAEA,UAAU;AAAA,MAEV,SAAS,MAAM;AACN,eAAA,CAAC,GAAG,qBAAqB,UAAUiY,KAAI/B,SAAQ,QAAQ,gBAAgB,CAAC;AAAA,MACjF;AAAA,IAAA;AAAA,EAEJ;AAEgB,WAAA,6BAA6BlW,SAAgB,MAAmB;AAC9E,WAAO,wBAAwBA,OAAM,EAAE,KAAK,CAAQE,UAAA;AAClD,aAAO,CAAC,CAAC2J,6BAA2B,MAAM,CAAQlK,UAAAA,MAAK,SAASO,KAAI;AAAA,IAAA,CACrE;AAAA,EACH;AAEgB,WAAA,gCAAgCF,SAAgB,QAA2B;AACzF,WAAO,wBAAwBA,OAAM,EAAE,KAAK,OAAO,UAAU;AAAA,EAC/D;AAEA,WAAS,wBAAwBA,SAAgB;AACxC,WAAA,CAACA,QAAO,MAAM,YAAYA,QAAO,MAAM,WAAWA,QAAO,MAAM,eAAe;AAAA,EACvF;AAEA,WAAS,sBAAsB,IAAiB;AACvC,WAAA,YAAY,IAAI,wBAAwB;AAAA,EACjD;AAEA,WAAS,yBAAyB,IAAe;AACzC,UAAAA,UAAS,GAAG,IAAI,KAAK;AAC3B,UAAM,SAAS6K,qBAAmB,GAAG,KAAK7K,QAAO,MAAM,KAAK;AAC5D,WAAO,QAAQ,CAASs0B,WAAA;AAEtB,YAAM,iBAAiB,GAAG,QAAQ,UAAUA,OAAM,GAAG;AAGjD,UAAA,CAAC,eAAe,SAAS;AAE3B,cAAM,WAAW,GAAG,IAAI,QAAQ,eAAe,GAAG;AAGlD,YACE,SAAS,OAAO,SAASt0B,QAAO,MAAM,aACtC,SAAS,OAAO,eAAe,KAC/B,CAAC,6BAA6BA,SAAQ,QAAQ,GAC9C;AAEI,cAAA,QAAQs0B,OAAM,KAAK;AAGvB,cAAIt0B,QAAO,MAAM,KAAK,QAAQs0B,OAAM,KAAK,KAAK,GAAG;AAC/C,kBAAM,YAAY;AAAA,cAChB,GAAG;AAAA,cACH,EAAE,MAAM,eAAe,KAAK,IAAI,eAAe,MAAMA,OAAM,KAAK,SAAS;AAAA,cACzEt0B,QAAO,MAAM;AAAA,YAAA;AAEX,gBAAA,aAAa,UAAU,MAAM;AAC/B,sBAAQ,EAAE,GAAG,OAAO,QAAQ,UAAU,KAAK;AAAA,YAC7C;AAAA,UACF;AAGM,gBAAA,UAAU,MAAM,UAAU,SAAS,KAAKA,QAAO,KAAK,MAAM,OAAO,CAAC,IAAI,SAAS;AAGrF,gBAAM,SAASA,QAAO,MAAM,OAAO,cAAc,OAAO,OAAO;AAC/D,cAAI,QAAQ;AACP,eAAA,iBAAiB,eAAe,KAAK,eAAe,MAAMs0B,OAAM,KAAK,UAAU,MAAM;AAAA,UAC1F;AAAA,QACF;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EACH;AAEA,WAAS,qBAAqB,KAAkB;AAC9C,WAAOC,yBAAuB,GAAG,KAAK,IAAI,EAAE,GAAG,MAAM,gBAAgB;AAAA,EACvE;AAEA,WAAS,iBAAiB,KAAkB;AACtC,QAAA,IAAI,MAAM,gBAAgB,UAAU;AAChC,YAAAre,UAAS,IAAI,EAAE;AACf,YAAAxW,QAAO,IAAI,EAAE;AACnB,aAAOwW,YAAW,UAAU,iBAAiBxW,KAAI,KAAK,kBAAkBA,KAAI;AAAA,IAAA,OACvE;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEA,WAAS60B,yBAAuB,KAAkB;AACzC,WAAA,IAAI,MAAM,gBAAgB,QAAQ,IAAI,KAAK,IAAI,EAAE,WAAW;AAAA,EACrE;AC1OA,QAAM,eAAe;AACrB,QAAM,sBAAsB;AAE5B,QAAM,YAAY,IAAI,UAAU,cAAc;AAEvC,WAAS,kBAAkBtc,KAAc;AAC9C,WAAO,IAAI,OAAO;AAAA,MAChB,KAAK;AAAA,MACL,OAAO;AAAA,QACL,iBAAiB;AAAA,UACf,MAAM,UAAUA,GAAE;AAAA,QACpB;AAAA,QACA,aAAa,WAAWA,GAAE;AAAA,MAC5B;AAAA,IAAA,CACD;AAAA,EACH;AAEA,WAAS,WAAWA,KAAc;AACzB,WAAA,CAAC,MAAkB,UAAiB;AACzC,YAAM,iBAAiB;AAEvB,UAAI,eAAe,eAAe;AAGhC,cAAMuc,aAAY;AAClB,cAAM,gBAAgB;AACtB,YAAI,eAAe,cAAc,MAAM,SAASA,UAAS,GAAG;AAC1D,gBAAMnvB,QAAO,eAAe,cAAc,QAAQmvB,UAAS;AACvD,cAAAnvB,MAAK,SAAS,aAAa,GAAG;AACzB,mBAAA;AAAA,UACT;AAAA,QACF;AAGI,YAAA;AAAA,UACF;AAAA,UACA,eAAe;AAAA,UACf;AAAA,UACA,KAAK,MAAM,UAAU;AAAA,UACrB4S;AAAA,QAAA,GACA;AACO,iBAAA;AAAA,QAAA,WAKA,eAAe,cAAc,MAAM,SAAS,YAAY,GAAG;AAClE,gBAAM,UAAU,eAAe,cAAc,QAAQ,YAAY;AAC7D,cAAA,QAAQ,WAAW,GAAG;AACxB,YAAAA,IAAG,QAAQ,cAAgB,EAAA,KAAK,CAAQ,SAAA;AACtC,kBAAI,MAAM;AACR,gCAAgB,MAAM,KAAK,MAAM,UAAU,MAAM,MAAMA,GAAE;AAAA,cAC3D;AAAA,YAAA,CACD;AACD,kBAAM,eAAe;AACd,mBAAA;AAAA,UACT;AAAA,QAAA,WAES,eAAe,cAAc,MAAM,SAAS,mBAAmB,GAAG;AAC3E,UAAAA,IAAG,QAAQ,eAAiB,EAAA,KAAK,CAASqc,WAAA;AACxC,gBAAIA,QAAO;AACO,8BAAA,MAAM,KAAK,MAAM,UAAU,MAAM,CAACA,MAAK,GAAGrc,GAAE;AAAA,YAC9D;AAAA,UAAA,CACD;AACD,gBAAM,eAAe;AACd,iBAAA;AAAA,QACT;AAAA,MACF;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,UAAUA,KAAc;AACxB,WAAA,CAAC,MAAkB,UAAiB;AAEzC,YAAM,YAAY;AAGd,UAAA,CAAC,UAAU,cAAc;AACpB,eAAA;AAAA,MACT;AAGM,YAAA,cAAc,KAAK,YAAY;AAAA,QACnC,MAAM,UAAU;AAAA,QAChB,KAAK,UAAU;AAAA,MAAA,CAChB;AACD,UAAI,CAAC,aAAa;AACT,eAAA;AAAA,MACT;AAEA,aAAO,wBAAwB,WAAW,UAAU,cAAc,MAAM,YAAY,KAAKA,GAAE;AAAA,IAAA;AAAA,EAE/F;AAGA,WAAS,wBAAwB,OAAc,cAA4B,MAAkB,KAAaA,KAAc;;AAEtH,QAAI,OAAwB;AAI5B,UAAI,kBAAa,UAAb,mBAAoB,WAAW,aAAa,MAAM,GAAW,MAAM;AACrE,aAAO,CAAA;AACP,eAASlZ,KAAE,GAAGA,KAAE,aAAa,MAAM,QAAQA,MAAK;AAC9C,cAAM,OAAO,aAAa,MAAM,KAAKA,EAAC;AAClC,YAAA,QAAQ,KAAK,MAAM;AAChB,eAAA,KAAK,KAAK,IAAI;AAAA,QACrB;AAAA,MACF;AAAA,IAAA,OACM;AAEA,YAAA,UAAU,aAAa,QAAQ,YAAY;AACjD,UAAI,SAAS;AACJ,eAAA,QAAQ,MAAM,OAAO;AAAA,MAAA,OACvB;AAEE,eAAAkZ,IAAG,QAAQ;MACpB;AAAA,IACF;AAGA,QAAI,QAAQ,gBAAgB,MAAM,KAAK,MAAMA,GAAE,GAAG;AAChD,YAAM,eAAe;AACd,aAAA;AAAA,IACT;AAGA,UAAM,QAAgB,CAAA;AAClB,QAAA,aAAa,MAAM,QAAQ;AAC7B,eAASlZ,KAAE,GAAGA,KAAE,aAAa,MAAM,QAAQA,MAAK;AAC9C,cAAM,OAAO,aAAa,MAAM,KAAKA,EAAC;AAClC,YAAA,QAAQ,iBAAiB,KAAK,CAAA,QAAO,KAAK,SAAS,SAAS,KAAK,GAAG;AACtE,gBAAM,KAAK,IAAI;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,MAAM,QAAQ;AACZ,UAAAkZ,IAAG,QAAQ,qBAAqB;AAC1B,gBAAA,IAAI,MAAM,IAAI,YAAY,CAAC,EAAE,KAAK,OAAO,gBAAgB;AAC/D,gBAAM,SAAS,MAAMA,IAAG,QAAQ,oBAAqB,WAAW;AAC/C,2BAAA,MAAM,KAAK,MAAM;AAAA,QAAA,CACnC;AAAA,MACH;AACA,YAAM,eAAe;AACd,aAAA;AAAA,IAAA,OACF;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEA,WAAS,gBAAgB,MAAkB,KAAa,MAAgBA,KAAuB;AAEvF,UAAA,YAAY,KAAK,OAAO,CAAO,QAAA;AAGnC,YAAMT,aAAY,IACf,MAAM,IAAI,EACV,IAAA,EACA;AACI,aAAA,iBAAiB,SAASA,UAAS;AAAA,IAAA,CAC3C;AAGG,QAAA,UAAU,WAAW,GAAG;AACnB,aAAA;AAAA,IACT;AAKA,IAAAS,IAAG,QAAQ,iBAAiB,SAAS,EAAE,KAAK,CAAU,WAAA;AACnC,uBAAA,MAAM,KAAK,MAAM;AAAA,IAAA,CACnC;AAGM,WAAA;AAAA,EACT;AAEA,WAAS,iBAAiB,MAAkB,KAAa,QAAkB;AACnE,UAAA,KAAK,KAAK,MAAM;AACtB,WAAO,QAAQ,CAASqc,WAAA;AAChB,YAAA30B,QAAO,KAAK,MAAM,OAAO,MAAM,MAAM,OAAO,EAAE,KAAK20B,OAAO,CAAA;AAC7D,SAAA,OAAO,KAAK30B,KAAI;AAAA,IAAA,CACpB;AACD,SAAK,SAAS,EAAE;AAAA,EAClB;AAEA,QAAM,eAAe,CAAC,SAAe,IAAI,QAAgB,CAAC,SAAS,WAAW;AACtE,UAAA,SAAS,IAAI;AACnB,WAAO,cAAc,IAAI;AACzB,WAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AAC9C,WAAA,UAAU,CAAS,UAAA,OAAO,KAAK;AAAA,EACxC,CAAC;ACxKD,QAAM,aAAa;AACnB,QAAM,eAAe;AAErB,QAAM,aAAa;AACnB,QAAM,YAAY;AAClB,QAAM,eAAe;AAErB,QAAM6X,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,IAAAS,KAAI,QAAQ,QAAA/B,YAAW;AAE3C,UAAA,YAAY,yBAAyB,gBAAgB;AAEpD,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,QAAQ;AAAA,YACR,OAAO,mBAAmB,OAAO,SAAS;AAAA,YAC1C,OAAO;AAAA,YACP,WAAW;AAAA,YACX,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,SAAS,KAAoB;AACpB,yBAAA,kBAAkB,KAAgB,SAAS;AAAA,gBACpD;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAMvW,OAAuB;AACpB,qBAAA,mBAAmBA,OAAM,SAAS;AAAA,YAC3C;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,SAAS,mBAAmB,OAAO,SAAS;AAAA,cAC9C;AAAA,YACF;AAAA,YACA,kBAAkB,iBAAiB,WAAW,wBAAwB;AAAA,YACtE,QAAQ,wBAAwB,KAAK;AAAA,UACvC;AAAA,UAEA,WAAW,OAAO;AAAA,YAChB,MAAM,CAACK,YAAmBA,QAAO,MAAM;AAAA,YACvC,aAAa;AAAA,YACb,QAAQ,MAAM,aAAaiY,KAAI/B,SAAQ,SAAS;AAAA,UAAA;AAAA,QAEpD;AAAA,MACF;AAAA,MAEA,UAAU,MAAM;AACP,eAAA;AAAA,UACL,IAAI;AAAA,YACF,gBAAgB;AAAA,YAChB,CAAC,aAAa;AAAA,YACd,aAAa+B,KAAI/B,SAAQ,SAAS;AAAA,YAClC,gBAAgB+B,GAAE;AAAA,UACpB;AAAA,QAAA;AAAA,MAEJ;AAAA,MAEA,SAAS,MAAM;AACN,eAAA;AAAA,UACL,yBAAyB;AAAA,UACzB,kBAAkBA,GAAE;AAAA,UACpB,GAAG,qBAAqB,SAASA,KAAI/B,SAAQ,QAAQ,gBAAgB;AAAA,QAAA;AAAA,MAEzE;AAAA,IAAA;AAAA,EAEJ;AAEgB,WAAA,mBAAmB,QAAiB,iBAA0B;AAC5E,WAAO,CAAClW,YAAmB,CAAC,QAA2B,QAAqB;AAEpE,YAAAY,UAAS,IAAI,EAAE;AACrB,YAAM,QAAQ;AAAA,QACZ,KAAKA,QAAO;AAAA,QACZ,OAAO,gBAAgBA,QAAO,aAAa;AAAA,QAC3C,SAAS;AAAA,QACT,GAAI,kBAAkB,kBAAkB,KAAK,UAAU,IAAI,CAAC;AAAA,MAAA;AAI9D,UAAI,CAAC,QAAQ;AACX,cAAM,UAAU,gBAAgB,IAAI,EAAE,UAAU;AAAA,MAClD;AAGO,aAAA,SAAS,SAASZ,QAAO,MAAM,SAASA,QAAO,MAAM,OAAO,KAAK;AACxE,UAAI,QAAQ;AACH,eAAA,YAAY,IAAI,EAAE,UAAU;AAAA,MACrC;AACA,aAAO,UAAU;AAAA,IAAA;AAAA,EAErB;AAEO,WAAS,wBAAwB,QAAiB;AAChD,WAAA,CAAC,QAAsBL,UAA0B;AAEtD,UAAI,SAAS,MAAM;AACV,eAAA,WAAW,gBAAgB,OAAO,MAAM;AACzC,cAAA,OAAO,WAAW,iBAAiB;AAC9B,mBAAA,UAAUA,MAAK,MAAM,IAAIA,MAAK,MAAM,SAASA,MAAK,MAAM,QAAQ;AAAA,UAAA,OAClE;AACL,mBAAO,UAAU;AAAA,UACnB;AACA,iBAAO,WAAW,MAAM;AACtB,gBAAI,QAAQ;AACH,qBAAA,aAAaA,MAAK,OAAO;AAAA,YAAA,OAC3B;AACE,qBAAA,UAAUA,MAAK,MAAM,OAAO;AAAA,YACrC;AAAA,UAAA,CACD;AACM,iBAAA,MAAM,CAACA,MAAK,MAAM,KAAKA,MAAK,MAAM,SAAS,EAAE,CAAC;AAAA,QAAA,CACtD;AAAA,MAAA;AAIG,YAAA,cACJ,oBAAoBA,MAAK,KAAK,KAC9B,CAAC,OAAO,WAAW,mBACnB,OAAO,WAAW;AAGhB,UAAAA,MAAK,MAAM,OAAO,aAAa;AACjC,iBAAS,MAAM;AACb,gBAAM,UAAU,mBAAmBA,OAAM,MAAM,KAAK;AACpD,gBAAM0F,QAAO,UAAU,OAAO,SAAS,MAAM,IAAI;AACjD,iBAAO,iBAAiBA,KAAI;AAAA,QAAA;AAAA,MAEhC;AAGA,UAAI,QAAQ;AACV,YAAI,cAAc;AACd,YAAA1F,MAAK,MAAM,QAAQ;AACrB,wBAAc,MAAM;AAClB,mBAAO,UAAUA,MAAK,MAAM,QAAQ,IAAI,MAAM,MAAM;AAAA,UAAA;AAAA,QAExD;AACO,eAAA,WAAW,gBAAgB,MAAM,WAAW;AAAA,MAAA,OAC9C;AACE;MACT;AAAA,IAAA;AAAA,EAEJ;AAGA,WAAS,sBAAsBK,SAAgBqF,OAAc,QAA4B;AACjF,UAAA,UAAU,kBAAkBA,KAAI;AACtC,QAAI,CAAC,SAAS;AACL,aAAA;AAAA,IACT;AAEA,QAAI,QAAQ;AACJ,YAAA,QAAQ,mBAAmBA,KAAI;AACrC,UAAI,OAAO;AACF,eAAA,QAAQrF,QAAO,MAAM,OAAO,EAAE,GAAG,OAAO,KAAK,KAAQ,GAAA,CAAE,CAAA;AAAA,MAAA,OACzD;AACE,eAAA;AAAA,MACT;AAAA,IACF;AAEO,WAAA;AAAA,EACT;AAEgB,WAAA,mBAAmBL,OAAuB,iBAAyC;AACjG,WAAO,CAAC,OAAO,mBAAmBA,OAAM,eAAe,CAAC;AAAA,EAC1D;AAEO,WAAS,mBACdA,OACA,iBACA8X,UAAS,MACmB;AAC5B,UAAM,OAAkC;AAAA,MACtC,KAAK9X,MAAK,MAAM;AAAA,IAAA;AAEZ,UAAA,QAAQA,MAAK,MAAM;AACzB,QAAI,OAAO;AACT,WAAK,QAAQ;AAAA,IACf;AACA,UAAM,UAAUA,MAAK,MAAM,WAAWA,MAAK;AAC3C,QAAI,SAAS;AACX,WAAK,MAAM;AAAA,IACb;AAEO,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAI,kBAAkB,oBAAoBA,MAAK,OAAO8X,OAAM,IAAI,CAAC;AAAA,IAAA;AAAA,EAErE;AAEgB,WAAA,mBAAmB,QAAiB,iBAA0B;AACrE,WAAA;AAAA,MACL,KAAK,CAAC;AAAA,MACN,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,KAAK,EAAE,SAAS,MAAM;AAAA,MACtB,GAAI,SAAS,EAAE,QAAQ,EAAE,SAAS,KAAO,EAAA,IAAI,CAAC;AAAA,MAC9C,GAAI,kBAAkB,iBAAiB,CAAC;AAAA,IAAA;AAAA,EAE5C;AAEO,WAAS,kBAAkB5Y,KAAa,iBAA0B,aAAa,OAAO;AAC3F,UAAM,QAA0C;AAAA,MAC9C,KAAKA,IAAG,aAAa,KAAK,KAAK;AAAA,MAC/B,OAAOA,IAAG,aAAa,OAAO,KAAK;AAAA,MACnC,SAASA,IAAG,aAAa,KAAK,KAAK;AAAA,IAAA;AAE9B,WAAA;AAAA,MACL,GAAG;AAAA,MACH,GAAI,kBAAkB,mBAAmBA,KAAI,OAAO,UAAU,IAAI,CAAC;AAAA,IAAA;AAAA,EAEvE;AAEO,WAAS,mBAAmBwG,OAAc;AACzC,UAAA,SAAS,IAAI,OAAO;AAC1B,UAAMrE,OAAM,OAAO,gBAAgBqE,OAAM,WAAW;AACpD,QAAIrE,KAAI,QAAQA,KAAI,KAAK,sBAAsB,kBAAkB;AAC/D,aAAO,kBAAkBA,KAAI,KAAK,YAAY,MAAM,IAAI;AAAA,IAAA,OACnD;AACE,aAAA;AAAA,IACT;AAAA,EACF;AAEgB,WAAA,aAAa,UAAoB,cAA4B,iBAA0B;AAC9F,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AACtF,YAAMhB,UAAS,MAAM;AAErB,UAAI,CAAC,cAAc,OAAOA,QAAO,MAAM,KAAK,KAAK,CAAC,cAAc,OAAOA,QAAO,MAAM,MAAM,GAAG;AACpF,eAAA;AAAA,MACT;AAEA,UAAI,YAAY,MAAM;AAEpB,YAAIL,QAA+B;AAC/B,YAAA,WAAWK,QAAO,MAAM;AAC5B,YAAI,MAA+B;AACnC,YAAI,gBAAwC;AAC5C,YAAI,qBAAqBA,SAAQ,MAAM,SAAS,GAAG;AACjD,UAAAL,QAAQ,MAAM,UAA4B;AAC1C,qBAAWA,MAAK;AACZ,cAAA,aAAaK,QAAO,MAAM,QAAQ;AACpC,kBAAM,SAAS,KAAK,QAAQ,MAAM,UAAU,IAAI;AAChD,kBAAM,OAAO,WAAY;AAAA,UAAA,OACpB;AACL,kBAAM,OAAO,KAAK,QAAQ,MAAM,UAAU,IAAI;AAC9C,kBAAM,KAAK;AAAA,UACb;AACA,cAAI,KAAK;AACP,kBAAM,iBAAiB,oBAAoB,MAAM,UAAU,MAAM,IAAI;AACrD,4BAAA,uBAAuB,KAAK,cAAc;AAAA,UAC5D;AAAA,QACF;AAIE,YAAA,0BAA0BA,SAAQ,MAAM,SAAS,KACjD,CAAC,6BAA6BA,SAAQ,MAAM,UAAU,KAAK,GAC3D;AACA,qBAAWA,QAAO,MAAM;AAAA,QAC1B;AAGA,oBAAYL,OAAM,eAAe,UAAU,MAAM,UAAU,cAAc,eAAe;AAAA,MAC1F;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,gBAAgBsY,KAAc;AAC9B,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,mBAAmB;AAAA,MAClD,aAAaA,IAAG,QAAQ,cAAc,wBAAwB;AAAA,MAC9D,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,aAAaA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAEjG;AAEA,WAAS,gBAAgB,OAAsB;AAC7C,QAAI,OAAO;AACF,aAAA,MAAM,QAAQ,WAAW,EAAE;AAAA,IAAA,OAC7B;AACE,aAAA;AAAA,IACT;AAAA,EACF;;ACzTA,QAAMT,cAAY,CAAC,YAA8B;AACzC,UAAA,EAAE,IAAAS,IAAO,IAAA;AAER,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,UAAU,CAAC,EAAE,KAAK,MAAM;AAAA,YACxB,QAAuB;AACd,qBAAA,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,yBAA0B,CAAA,CAAC;AAAA,YAC5D;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,MAAM;AAAA,cACR;AAAA,YACF;AAAA,YACA,QAAQ,CAAC,WAAyB;AACzB,qBAAA,WAAW,gBAAgB,cAAc;AAAA,YAClD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,CAACjY,YAAmB;AACrB,eAAA;AAAA,UACL,IAAI;AAAA,YACF,gBAAgB;AAAA,YAChB,CAAC;AAAA,YACD,WAAWA,QAAO,MAAM,iBAAiB,CAAA,GAAI,IAAI;AAAA,YACjD,aAAaiY,GAAE;AAAA,UACjB;AAAA,QAAA;AAAA,MAEJ;AAAA,MAEA,YAAY,MAAM;AACT,eAAA;AAAA,UACL,IAAI,UAAU,WAAW,CAAC,OAAoB,QAA0B,OAAe,QAAgB;AACrG,kBAAMjY,UAAS,MAAM;AACrB,kBAAM,WAAWgK,uBAAqBhK,QAAO,MAAM,SAAS,EAAE,MAAM,SAAS;AAC7E,gBAAI,YAAY,MAAM,UAAU,QAAQ,UAAU,GAAG;AAE5C,qBAAA,MAAM,GAAG,iBAAiB,OAAO,KAAKA,QAAO,MAAM,gBAAgB,OAAA,CAAQ;AAAA,YAAA,OAC7E;AACE,qBAAA;AAAA,YACT;AAAA,UAAA,CACD;AAAA,QAAA;AAAA,MAEL;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,aAAaiY,KAAc;AAC3B,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,iBAAiB;AAAA,MAChD,UAAU,CAAC,MAAM,MAAM;AAAA,MACvB,aAAaA,IAAG,QAAQ,cAAc,iCAAiC;AAAA,MACvE,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MACLA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,uBAAuBA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAE/F;ACzEA,QAAMT,cAAuB;AAAA,IAC3B,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU,CAAC,EAAE,KAAK,MAAM;AAAA,UACxB,QAAQ;AACN,mBAAO,CAAC,IAAI;AAAA,UACd;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,YACP;AAAA,cACE,OAAO,gBAAgB;AAAA,cACvB,MAAM;AAAA,YACR;AAAA,UACF;AAAA,UACA,QAAQ,CAAC,WAAyB;AACzB,mBAAA,WAAW,gBAAgB,SAAS;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,UAAU,MAAM;AACP,aAAA;AAAA,QACL,EAAE,KAAK,QAAQ,UAAU,SAAS,qBAAqB;AAAA,QACvD,EAAE,KAAK,QAAQ,YAAY,SAAS,qBAAqB;AAAA,MAAA;AAAA,IAE7D;AAAA,EACF;AAEO,WAAS,qBAAqB;AAC5B,WAAA,CAAC,OAAoB,aAAyC;AAC7D,YAAA,KAAK,MAAM,OAAO,MAAM;AAC9B,UAAI,UAAU;AACH,iBAAA,MAAM,GAAG,qBAAqB,GAAG,OAAQ,CAAA,EAAE,gBAAgB;AAAA,MACtE;AACO,aAAA;AAAA,IAAA;AAAA,EAEX;;AC5CA,QAAMA,cAAuB;AAAA,IAC3B,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,UAAU,CAAC,EAAE,KAAK,4BAA4B;AAAA,UAC9C,QAAQ;AACN,mBAAO,CAAC,OAAO,EAAE,OAAO,aAAc,CAAA;AAAA,UACxC;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,YACP;AAAA,cACE,OAAO,gBAAgB;AAAA,cACvB,MAAM;AAAA,YACR;AAAA,UACF;AAAA,UACA,QAAQ,CAAC,WAAyB;AACzB,mBAAA,WAAW,gBAAgB,IAAI;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;ACxBA,QAAMA,cAAuB;AAAA,IAC3B,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,UAAU;AAAA,YACR,EAAE,KAAK,IAAI;AAAA,YACX,EAAE,KAAK,KAAK;AAAA,YACZ,EAAE,OAAO,eAAe,UAAU,CAAC,UAA0B,UAAqB,YAAY,KAAK;AAAA,UACrG;AAAA,UACA,QAAQ;AACN,mBAAO,CAAC,IAAI;AAAA,UACd;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,YACP;AAAA,cACE,OAAO,gBAAgB;AAAA,cACvB,MAAM;AAAA,YACR;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,UAAU;AAAA,YACV,OAAO,CAAC,QAAsB,OAAa,WAAqB;AACvD,qBAAA,UAAU,gBAAgB,MAAM,MAAM;AAAA,YAC/C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,UAAU,CAACxX,YAAmB;AACrB,aAAA,CAAC,IAAI,YAAY,gBAAgB,IAAI,CAAC,OAAO,GAAGA,QAAO,MAAM,EAAE,CAAC;AAAA,IACzE;AAAA,IAEA,YAAY,CAACA,SAAgB,WAAgC;AACpD,aAAA;AAAA,QACL,uBAAuB,OAAOA,QAAO,MAAM,IAAI,QAAQ,SAAS,IAAI;AAAA,QACpE,uBAAuB,KAAKA,QAAO,MAAM,IAAI,QAAQ,SAAS,IAAI;AAAA,MAAA;AAAA,IAEtE;AAAA,EACF;AC1CA,QAAMwX,cAAuB;AAAA,IAC3B,OAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,UAAU;AAAA,YAGR;AAAA,cACE,KAAK;AAAA,cACL,UAAU,CAAC,UAA0B,MAAsB,MAAM,eAAe,YAAY;AAAA,YAC9F;AAAA,YACA,EAAE,KAAK,SAAS;AAAA,YAChB;AAAA,cACE,OAAO;AAAA,cACP,UAAU,CAAC,UAAyB,4BAA4B,KAAK,KAAe,KAAK;AAAA,YAC3F;AAAA,UACF;AAAA,UACA,QAAQ;AACN,mBAAO,CAAC,QAAQ;AAAA,UAClB;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,YACP;AAAA,cACE,OAAO,gBAAgB;AAAA,cACvB,MAAM;AAAA,YACR;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,UAAU;AAAA,YACV,OAAO,CAAC,QAAsB,OAAa,WAAqB;AACvD,qBAAA,UAAU,gBAAgB,QAAQ,MAAM;AAAA,YACjD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,UAAU,CAACxX,YAAmB;AACrB,aAAA,CAAC,IAAI,YAAY,gBAAgB,QAAQ,CAAC,OAAO,GAAGA,QAAO,MAAM,MAAM,CAAC;AAAA,IACjF;AAAA,IAEA,YAAY,CAACA,SAAgB,WAAgC;AACpD,aAAA;AAAA,QACL,uBAAuB,UAAUA,QAAO,MAAM,QAAQ,QAAQ,KAAK,IAAI;AAAA,QACvE,uBAAuB,MAAMA,QAAO,MAAM,QAAQ,QAAQ,QAAQ,IAAI;AAAA,MAAA;AAAA,IAE1E;AAAA,EACF;ACvCA,QAAMwX,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,IAAAS,KAAI,QAAA,IAAY;AAE1C,UAAM,YAAY,iBAAiB;AAE5B,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,OAAO,YAAY,iBAAiB,CAAC;AAAA,YACrC,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,SAAS,KAAoB;AAC3B,sBAAI,WAAW;AACN,2BAAA,mBAAmB,KAAgB,CAAA,CAAE;AAAA,kBAAA,OACvC;AACL,2BAAO;kBACT;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAM,MAAY;AAChB,oBAAM,YAAY;AACZ,oBAAA,QAAQ,YACV,oBAAoB;AAAA,gBAClB,GAAG,KAAK;AAAA,gBACR,SAAS,CAAC,GAAG,KAAK,MAAM,SAAS,SAAS;AAAA,cAAA,CAC3C,IACD;AAAA,gBACE,OAAO;AAAA,cAAA;AAEb,qBAAO,CAAC,QAAQ,kBAAkB,KAAK,CAAC;AAAA,YAC1C;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,MAAM;AAAA,gBACN,SAAS,CAAC,QAAqB,IAAI,EAAE;AAAA,gBACrC,UAAU,CAAC,QAAqB;AAC9B,sBAAI,WAAW;AACN,2BAAA,kBAAkB,KAAK,SAAS;AAAA,kBAAA,OAClC;AACL,2BAAO;kBACT;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,QAAQ;AAAA,cAGN,UAAU;AAAA,cACV,OAAO,CAAC,QAAsB,MAAY,WAAqB;AAE7D,oBAAI7S,QAAO;AACX,uBAAO,QAAQ,CAACzF,UAA2ByF,QAAOA,QAAOzF,MAAK,WAAY;AAC1E,gBAAAyF,QAAOA,MAAK;AACR,oBAAAA,MAAK,SAAS,GAAG;AACZ,yBAAA,WAAW,gBAAgB,MAAM,MAAM;AAC5C,wBAAI,WAAW;AACN,6BAAA,UAAU,KAAK,MAAM,IAAI,KAAK,MAAM,SAAS,KAAK,MAAM,QAAQ;AAAA,oBAAA,OAClE;AACL,6BAAO,UAAU;AAAA,oBACnB;AACA,2BAAO,MAAMA,KAAI;AAAA,kBAAA,CAClB;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,CAACpF,YAAmB;AACrB,eAAA;AAAA,UACL,IAAI,YAAY,gBAAgB,MAAM,CAAC,OAAO,GAAGA,QAAO,MAAM,IAAI;AAAA,UAClE,GAAI,CAAC,QAAQ,wBAAwB,CAAC,IAAI,uBAAuBiY,GAAE,CAAC,IAAI,CAAC;AAAA,QAAA;AAAA,MAE7E;AAAA,MAEA,YAAY,CAACjY,SAAgB,WAAgC;AAC3D,eAAO,CAAC,uBAAuB,KAAKA,QAAO,MAAM,MAAM,MAAM,CAAC;AAAA,MAChE;AAAA,IAAA;AAAA,EAEJ;AAGO,QAAM,+BAA+B,mBAAmB;AAAA,IAC7D,YAAYiY,KAAc;AACxB,YAAM,gBAAgB,aAAa,CAAA,GAAI,mBAAmB,sBAAsBA,GAAE,CAAC;AAAA,IACrF;AAAA,EACF;AAGA,WAAS,kBAAkB,OAAoB,UAAsC;AAEnF,UAAMjY,UAAS,MAAM;AACrB,QAAI,CAAC,cAAc,OAAOA,QAAO,MAAM,IAAI,KAAK,CAAC,eAAeA,QAAO,MAAM,IAAI,EAAE,KAAK,GAAG;AAClF,aAAA;AAAA,IACT;AAEA,QAAI,UAAU;AACZ,YAAM,KAAK,MAAM;AACjB,YAAM,UAAU,GAAG;AACnB,YAAM,OAAOA,QAAO,MAAM,KAAK,OAAO;AACtC,YAAML,QAAOK,QAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AACrC,SAAG,OAAO,GAAG,UAAU,MAAML,KAAI;AAChBmI,yBAAA,GAAG,QAAQ,IAAI,QAAQ,IAAI,GAAI,EAAE,EAAE,EAAE;AACtD,eAAS,EAAE;AAAA,IACb;AACO,WAAA;AAAA,EACT;AAEA,WAAS,sBAAsBmQ,KAA0B;AAChD,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,eAAe;AAAA,MAC9C,UAAU,CAAC,GAAG;AAAA,MACd,aAAaA,IAAG,QAAQ,cAAc,mCAAmC;AAAA,MACzE,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,eAAeA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAEnG;AClJO,QAAM,oBAAoB;AAC1B,QAAM,kBAAkB,IAAI,OAAO,mBAAmB,GAAG;ACYhD,WAAA,YAAY,UAAoB,YAA0B,cAAgC;AACjG,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAElF,UAAA,CAAC,MAAM,UAAU,MAAM,OAAO,KAAK,eAAe,QAAQ,GAAG;AACxD,eAAA;AAAA,MACT;AAEA,qBAAe,gBAAgB;AAC7B,YAAI,UAAU;AAEZ,gBAAM,UAAU,MAAM,YAAY,MAAM,GAAG;AAG3C,gBAAMzU,SAAQ,sBAAsB,MAAM,WAAW,QAAQ;AAG7D,cAAIwT,QAA4E,CAAA;AAG5E,cAAA,MAAM,qBAAqB,eAAe;AAC5C,YAAAA,MAAK,OAAO,MAAM,IAAI,YAAYxT,OAAM,MAAMA,OAAM,EAAE;AACtD,yBAAa,OAAO;AAAA,UAAA,OACf;AACL,yBAAa,OAAO;AAAA,UACtB;AAGI,cAAA,aAAa,OAAO,QAAQ,GAAG;AAC1B,YAAAwT,QAAA;AAAA,cACL,GAAGA;AAAA,cACH,GAAG,aAAa,MAAM,KAAKxT,QAAO,QAAQ;AAAA,YAAA;AAAA,UAC5C,OACK;AAEL,gBAAIwT,MAAK,QAAQA,MAAK,KAAK,MAAM,iBAAiB,GAAG;AACnD,cAAAA,MAAK,OAAOA,MAAK;AAAA,YACnB;AAAA,UACF;AAGA,cAAIA,MAAK,SAAS;AAChB,YAAAA,MAAK,OAAO,SAAS;AAAA,UAAA,WACZA,MAAK,QAAQA,MAAK,KAAK,WAAW,GAAG,GAAG;AACjD,YAAAA,MAAK,OAAO,SAAS;AAAA,UAAA,OAChB;AACL,YAAAA,MAAK,OAAO,SAAS;AAAA,UACvB;AAGK,UAAAA,MAAA,OAAOA,MAAK,QAAQ;AACpB,UAAAA,MAAA,OAAOA,MAAK,QAAQ;AAGnB,gBAAA,SAAS,MAAM,WAAW,EAAE,GAAGA,SAAqB,SAAS,YAAY;AAC/E,cAAI,QAAQ;AACV,kBAAM,KAAK,MAAM;AACjB,eAAG,WAAWxT,OAAM,MAAMA,OAAM,IAAI,QAAQ;AACxC,gBAAA,OAAO,WAAW,QAAQ;AAE5B,oBAAM,OAAO,SAAS,OAAO,OAAO,IAAI;AAGxC,kBAAI,aAAa,QAAQwT,MAAK,SAAS,OAAO,KAAK,MAAM;AACjD,sBAAArX,QAAO,SAAS,OAAO,KAAK,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAE1D,oBAAIqX,MAAK,MAAM;AACb,qBAAG,iBAAiBxT,OAAM,MAAMA,OAAM,IAAI7D,KAAI;AAAA,gBAAA,OACzC;AACF,qBAAA,qBAAqBA,OAAM,KAAK;AAAA,gBACrC;AAAA,cAAA,OACK;AACL,mBAAG,QAAQ6D,OAAM,MAAMA,OAAM,IAAI,IAAI;AAAA,cACvC;AAGA,kBAAI,OAAO,KAAK,SAAS,SAAS,SAAS;AACzC,sBAAM,UAAUgH;AAAAA,kBACd,GAAG;AAAA,kBACH,CACE7K,UAAAA,MAAK,SAAS,MAAM,OAAO,MAAM,WACjC,iBAAiBA,MAAK,aAAa,OAAO,KAAK,WAAW,EAAE;AAAA,gBAAA;AAE5D,oBAAA,QAAQ,SAAS,GAAG;AACtB,qBAAG,cAAc,QAAQ,GAAG,KAAK,MAAM,OAAO,MAAM,SAAS;AAAA,oBAC3D,GAAG,QAAQ,GAAG,KAAK;AAAA,oBACnB,MAAM,OAAO,KAAK;AAAA,kBAAA,CACnB;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AACA,qBAAS,EAAE;AAAA,UACb;AACA,cAAI,MAAM;AACR,iBAAK,MAAM;AAAA,UACb;AAAA,QACF;AAAA,MACF;AACc;AAEP,aAAA;AAAA,IAAA;AAAA,EAEX;AAEO,WAAS,eAAesY,KAAc;AACpC,WAAA;AAAA,MACL,MAAMA,IAAG,QAAQ,cAAc,SAAS;AAAA,MACxC,aAAaA,IAAG,QAAQ,cAAc,0BAA0B;AAAA,MAChE,OAAO,gBAAgB;AAAA,MACvB,UAAU;AAAA,MACV,OAAO,MAAOA,IAAG,MAAM,SAAS,IAAIA,IAAG,OAAO,YAAY,YAAYA,IAAG,OAAO,YAAY;AAAA,IAAA;AAAA,EAEhG;AAEO,WAAS,kBAAkB,UAAoB;AAC7C,WAAA,CAAC,OAAoB,aAAyC;AACnE,YAAMzU,SAAQ,aAAa,MAAM,UAAU,OAAO,QAAQ;AAC1D,UAAI,CAACA,QAAO;AACH,eAAA;AAAA,MACT;AAEA,UAAI,UAAU;AACZ,cAAM,KAAK,MAAM;AACjB,WAAG,WAAWA,OAAM,MAAMA,OAAM,IAAI,QAAQ;AAC5C,iBAAS,EAAE;AAAA,MACb;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;ACtIO,WAAS,eAAe,UAAmB;AACzC,WAAA,CAACxD,SAAgB,WAAgC;AACtD,YAAM,QAAQ;AAAA,QAEZ,cAAc,2CAA2CA,QAAO,MAAM,MAAM,QAAQ,CAACkB,YAAqB;AAAA,UACxG,MAAMA,OAAM;AAAA,QAAA,EACZ;AAAA,QAEF,IAAI,UAAU,wCAAwC,CAAC,OAAoBA,QAAyB,OAAe,QAAgB;AACjI,cAAI,CAAC,OAAO,OAAO,OAAO,GAAG,GAAG;AACvB,mBAAA;AAAA,UACT;AAGA,gBAAM,YAAYA,OAAM,GAAG,QAAQA,OAAM,EAAE;AACrC,gBAAA2N,UAAS3N,OAAM,GAAG,UAAU,GAAG,SAAS,EAAE,QAAQ,OAAO,EAAE;AAC3D,gBAAA,aAAa,QAAQ,YAAY2N,QAAO;AAC9C,gBAAM,KAAK,MAAM;AACjB,aAAG,OAAO,YAAY,aAAaA,QAAO,MAAM;AAGhD,gBAAM,QAAQ,EAAE,MAAM3N,OAAM,GAAG;AAC/B,gBAAM,OAAOlB,QAAO,MAAM,KAAK,OAAO,KAAK;AAGrC,gBAAA,YAAY,QAAQ,YAAY6O,QAAO;AAC7C,aAAG,QAAQ,WAAW,YAAY3N,OAAM,GAAG,QAAQ,IAAI;AACvD,aAAG,iBAAiB,IAAI;AAGlB,gBAAA,cAAc,YAAYA,OAAM,GAAG;AACtC,aAAA,OAAO,aAAa,GAAG;AACT4G,6BAAA,WAAW,EAAE,EAAE;AAEzB,iBAAA;AAAA,QAAA,CACR;AAAA,MAAA;AAGH,UAAI,UAAU;AAEN,cAAA;AAAA,UACJ,IAAI;AAAA,YACF;AAAA,YACA,CAAC,OAAoB5G,QAAyB,OAAe,QAAgB;AAC3E,oBAAM,KAAK,MAAM;AACT,sBAAA,QAAQA,OAAM,GAAG;AACnB,oBAAA,UAAU,QAAQA,OAAM,GAAG;AACjC,iBAAG,QAAQ,OAAO,SAASlB,QAAO,MAAM,KAAK,OAAO,EAAE,MAAMkB,OAAM,GAAG,CAAC,CAAC;AACpE,iBAAA,iBAAiBlB,QAAO,MAAM,IAAI;AACrC,iBAAG,WAAW,GAAG;AACA8H,iCAAA,MAAM,CAAC,EAAE,EAAE;AACrB,qBAAA;AAAA,YACT;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;ACzDO,WAAS,0BAA0B9G,MAAsB;AAExD,UAAAhB,UAASgB,KAAI,KAAK;AAGxB,UAAM,WAAW6J,qBAAmB7J,MAAKhB,QAAO,MAAM,OAAO;AAG7D8K,yBAAmB9J,MAAKhB,QAAO,MAAM,IAAI,EAAE,QAAQ,CAAQgX,UAAA;AACnD,YAAA,YAAY,aAAahW,KAAI,QAAQgW,MAAK,GAAG,GAAGhX,QAAO,MAAM,IAAI;AACvE,UAAI,WAAW;AACb,cAAM,QAAQ,aAAagB,MAAK,WAAWhB,QAAO,MAAM,IAAI;AAC5D,cAAM,WAAWgB,KAAI,YAAY,UAAU,MAAM,UAAU,EAAE;AACvD,cAAA,iBAAiB,SAAS,KAAK,CAAW,YAAA;AACvC,iBAAA,iBAAiB,QAAQ,KAAK,aAAa,QAAQ,KAAK,CAAC,MAAM,SAAS,MAAM,SAAS;AAAA,QAAA,CAC/F;AACD,YAAI,gBAAgB;AAElB,UAAAA,KAAI,aAAa,UAAU,MAAM,UAAU,IAAI,CAAQrB,UAAA;AAC/C,kBAAA,WAAWA,MAAK,MAAM,KAAK,QAAKwB,GAAE,SAASnB,QAAO,MAAM,IAAI;AAClE,gBAAI,UAAU;AAIX,uBAAS,MAAiC,UAAU,eAAe,KAAK;AAAA,YAC3E;AAAA,UAAA,CACD;AAIA,yBAAe,KAAK,MAAiC,OAAO;AAAA,QAC/D;AAAA,MACF;AAAA,IAAA,CACD;AAGM,WAAAgB;AAAA,EACT;AAEO,WAAS,oCAAoC;AAC3C,WAAA;AAAA,MACL,MAAM;AAAA,MACN,YAAY,CAACrB,UACVA,MAAK,SAASA,MAAK,KAAK,OAAO,MAAM,WAAY,CAAC,CAACA,MAAK,KAAK,OAAO,MAAM,KAAK,QAAQA,MAAK,KAAK;AAAA,MACpG,QAAQ,CAAC,OAAoB;AAErB,cAAAK,UAAS,GAAG,IAAI,KAAK;AAG3B,cAAM,QAAQ8K,qBAAmB,GAAG,KAAK9K,QAAO,MAAM,IAAI;AAC1D,cAAM,QAAQ,CAAQgX,UAAA;AACpB,gBAAM,UAAU,GAAG,QAAQ,IAAIA,MAAK,GAAG;AACjC,gBAAAxT,SAAQ,aAAa,GAAG,IAAI,QAAQ,OAAO,GAAGxD,QAAO,MAAM,IAAI;AACrE,cAAIwD,QAAO;AACT,kBAAM,QAAQ,aAAa,GAAG,KAAKA,QAAOxD,QAAO,MAAM,IAAI;AAC3D,kBAAM,WAAW,GAAG,IAAI,YAAYwD,OAAM,MAAMA,OAAM,EAAE;AACxD,gBAAI,MAAM,WAAW,CAAC,iBAAiB,MAAM,SAAS,QAAQ,GAAG;AAC/D,iBAAG,WAAWA,OAAM,MAAMA,OAAM,IAAIxD,QAAO,MAAM,IAAI;AACrD,iBAAG,QAAQwD,OAAM,MAAMA,OAAM,IAAIxD,QAAO,MAAM,KAAK,OAAO,EAAE,GAAG,OAAO,SAAS,SAAU,CAAA,CAAC;AAAA,YAC5F;AAAA,UACF;AAAA,QAAA,CACD;AAGD6K,6BAAmB,GAAG,KAAK7K,QAAO,MAAM,OAAO,EAAE,QAAQ,CAAW,YAAA;AAClE,gBAAM,aAAa,GAAG,QAAQ,IAAI,QAAQ,GAAG;AACvC,gBAAA,cAAc,QAAQ,KAAK;AAC3B,gBAAA,cAAc,QAAQ,KAAK,MAAM;AAEnC,cAAA,eAAe,CAAC,iBAAiB,aAAa,WAAW,KAAK,YAAY,SAAS,GAAG;AAExF,eAAG,cAAc,YAAYA,QAAO,MAAM,SAAS;AAAA,cACjD,GAAG,QAAQ,KAAK;AAAA,cAChB,MAAM;AAAA,YAAA,CACP;AAGD8K,iCAAmB,GAAG,KAAK9K,QAAO,MAAM,IAAI,EAAE,QAAQ,CAAQgX,UAAA;AAC5D,oBAAM,UAAU,GAAG,QAAQ,IAAIA,MAAK,GAAG;AACjC,oBAAAxT,SAAQ,aAAa,GAAG,IAAI,QAAQ,OAAO,GAAGxD,QAAO,MAAM,IAAI;AACrE,kBAAIwD,QAAO;AACT,sBAAM,QAAQ,aAAa,GAAG,KAAKA,QAAOxD,QAAO,MAAM,IAAI;AAC3D,oBAAI,iBAAiB,MAAM,SAAS,WAAW,GAAG;AAChD,qBAAG,WAAW,aAAawD,OAAM,MAAMA,OAAM,EAAE;AAC5C,qBAAA;AAAA,oBACDA,OAAM;AAAA,oBACNA,OAAM,OAAO,YAAY;AAAA,oBACzBxD,QAAO,MAAM,KAAK,OAAO,EAAE,GAAG,OAAO,SAAS,aAAa;AAAA,kBAAA;AAAA,gBAE/D;AAAA,cACF;AAAA,YAAA,CACD;AAAA,UACH;AAAA,QAAA,CACD;AAAA,MACH;AAAA,IAAA;AAAA,EAEJ;;;;;;;;;AClHA,KAAC,SAAS,iCAAiC+E,OAAM,SAAS;AAExD,MAAAwP,QAAA,UAAiB;IAOlB,GAAEC,gBAAM,WAAW;AACpB,aAAiB,WAAW;AAClB,YAAI,sBAAuB;AAAA,UAE/B,KACC,SAAS,yBAAyB,qBAAqBigB,sBAAqB;AAKnF,YAAAA,qBAAoB,EAAE,qBAAqB;AAAA,cACzC,WAAW,WAAW;AAAE,uBAAqBC;AAAA,cAAY;AAAA,YAC3D,CAAC;AAGD,gBAAI,eAAeD,qBAAoB,GAAG;AAC1C,gBAAI,uBAAoC,gBAAAA,qBAAoB,EAAE,YAAY;AAE1E,gBAAI,SAASA,qBAAoB,GAAG;AACpC,gBAAI,iBAA8B,gBAAAA,qBAAoB,EAAE,MAAM;AAE9D,gBAAI,aAAaA,qBAAoB,GAAG;AACxC,gBAAI,iBAA8B,gBAAAA,qBAAoB,EAAE,UAAU;AAOlE,qBAAS,QAAQv0B,OAAM;AACrB,kBAAI;AACF,uBAAO,SAAS,YAAYA,KAAI;AAAA,cACjC,SAAQ,KAAP;AACA,uBAAO;AAAA,cACR;AAAA,YACF;AAUD,gBAAI,qBAAqB,SAASy0B,oBAAmB/zB,SAAQ;AAC3D,kBAAI,eAAe,iBAAiBA,OAAM;AAC1C,sBAAQ,KAAK;AACb,qBAAO;AAAA,YACT;AAE6B,gBAAI,cAAe;AAOhD,qBAAS,kBAAkB,OAAO;AAChC,kBAAI,QAAQ,SAAS,gBAAgB,aAAa,KAAK,MAAM;AAC7D,kBAAI,cAAc,SAAS,cAAc,UAAU;AAEnD,0BAAY,MAAM,WAAW;AAE7B,0BAAY,MAAM,SAAS;AAC3B,0BAAY,MAAM,UAAU;AAC5B,0BAAY,MAAM,SAAS;AAE3B,0BAAY,MAAM,WAAW;AAC7B,0BAAY,MAAM,QAAQ,UAAU,UAAU;AAE9C,kBAAI,YAAY,OAAO,eAAe,SAAS,gBAAgB;AAC/D,0BAAY,MAAM,MAAM,GAAG,OAAO,WAAW,IAAI;AACjD,0BAAY,aAAa,YAAY,EAAE;AACvC,0BAAY,QAAQ;AACpB,qBAAO;AAAA,YACR;AAYD,gBAAI,iBAAiB,SAASg0B,gBAAe,OAAO,SAAS;AAC3D,kBAAI,cAAc,kBAAkB,KAAK;AACzC,sBAAQ,UAAU,YAAY,WAAW;AACzC,kBAAI,eAAe,iBAAiB,WAAW;AAC/C,sBAAQ,MAAM;AACd,0BAAY,OAAM;AAClB,qBAAO;AAAA,YACT;AASA,gBAAI,sBAAsB,SAASC,qBAAoBj0B,SAAQ;AAC7D,kBAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,gBAChF,WAAW,SAAS;AAAA,cACxB;AACE,kBAAI,eAAe;AAEnB,kBAAI,OAAOA,YAAW,UAAU;AAC9B,+BAAe,eAAeA,SAAQ,OAAO;AAAA,cACjD,WAAaA,mBAAkB,oBAAoB,CAAC,CAAC,QAAQ,UAAU,OAAO,OAAO,UAAU,EAAE,SAASA,YAAW,QAAQA,YAAW,SAAS,SAASA,QAAO,IAAI,GAAG;AAEpK,+BAAe,eAAeA,QAAO,OAAO,OAAO;AAAA,cACvD,OAAS;AACL,+BAAe,iBAAiBA,OAAM;AACtC,wBAAQ,MAAM;AAAA,cACf;AAED,qBAAO;AAAA,YACT;AAE6B,gBAAI,eAAgB;AAEjD,qBAASwa,SAAQ,KAAK;AAAE;AAA2B,kBAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAE,gBAAAA,WAAU,SAASA,SAAQI,MAAK;AAAE,yBAAO,OAAOA;AAAA;cAAO,OAAQ;AAAE,gBAAAJ,WAAU,SAASA,SAAQI,MAAK;AAAE,yBAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,gBAAI;AAAA,cAAG;AAAG,qBAAOJ,SAAQ,GAAG;AAAA,YAAI;AAU1X,gBAAI,yBAAyB,SAAS0Z,0BAAyB;AAC7D,kBAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,CAAA;AAElF,kBAAI,kBAAkB,QAAQ,QAC1B,SAAS,oBAAoB,SAAS,SAAS,iBAC/C,YAAY,QAAQ,WACpBl0B,UAAS,QAAQ,QACjBlB,QAAO,QAAQ;AAEnB,kBAAI,WAAW,UAAU,WAAW,OAAO;AACzC,sBAAM,IAAI,MAAM,oDAAoD;AAAA,cACrE;AAGD,kBAAIkB,YAAW,QAAW;AACxB,oBAAIA,WAAUwa,SAAQxa,OAAM,MAAM,YAAYA,QAAO,aAAa,GAAG;AACnE,sBAAI,WAAW,UAAUA,QAAO,aAAa,UAAU,GAAG;AACxD,0BAAM,IAAI,MAAM,mFAAmF;AAAA,kBACpG;AAED,sBAAI,WAAW,UAAUA,QAAO,aAAa,UAAU,KAAKA,QAAO,aAAa,UAAU,IAAI;AAC5F,0BAAM,IAAI,MAAM,uGAAwG;AAAA,kBACzH;AAAA,gBACP,OAAW;AACL,wBAAM,IAAI,MAAM,6CAA6C;AAAA,gBAC9D;AAAA,cACF;AAGD,kBAAIlB,OAAM;AACR,uBAAO,aAAaA,OAAM;AAAA,kBACxB;AAAA,gBACN,CAAK;AAAA,cACF;AAGD,kBAAIkB,SAAQ;AACV,uBAAO,WAAW,QAAQ,YAAYA,OAAM,IAAI,aAAaA,SAAQ;AAAA,kBACnE;AAAA,gBACN,CAAK;AAAA,cACF;AAAA,YACH;AAE6B,gBAAI,kBAAmB;AAEpD,qBAAS,iBAAiB,KAAK;AAAE;AAA2B,kBAAI,OAAO,WAAW,cAAc,OAAO,OAAO,aAAa,UAAU;AAAE,mCAAmB,SAASwa,SAAQI,MAAK;AAAE,yBAAO,OAAOA;AAAA;cAAO,OAAQ;AAAE,mCAAmB,SAASJ,SAAQI,MAAK;AAAE,yBAAOA,QAAO,OAAO,WAAW,cAAcA,KAAI,gBAAgB,UAAUA,SAAQ,OAAO,YAAY,WAAW,OAAOA;AAAA,gBAAI;AAAA,cAAG;AAAG,qBAAO,iBAAiB,GAAG;AAAA,YAAI;AAE9Z,qBAASb,iBAAgB,UAAU,aAAa;AAAE,kBAAI,EAAE,oBAAoB,cAAc;AAAE,sBAAM,IAAI,UAAU,mCAAmC;AAAA,cAAE;AAAA,YAAI;AAEzJ,qBAAS4E,mBAAkB3e,SAAQ,OAAO;AAAE,uBAAS7B,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AAAE,oBAAImgB,cAAa,MAAMngB;AAAI,gBAAAmgB,YAAW,aAAaA,YAAW,cAAc;AAAO,gBAAAA,YAAW,eAAe;AAAM,oBAAI,WAAWA;AAAY,kBAAAA,YAAW,WAAW;AAAM,uBAAO,eAAete,SAAQse,YAAW,KAAKA,WAAU;AAAA;YAAM;AAE7T,qBAASD,cAAa,aAAa,YAAY,aAAa;AAAE,kBAAI;AAAY,gBAAAM,mBAAkB,YAAY,WAAW,UAAU;AAAG,kBAAI;AAAa,gBAAAA,mBAAkB,aAAa,WAAW;AAAG,qBAAO;AAAA,YAAc;AAEvN,qBAAS1E,WAAU,UAAU,YAAY;AAAE,kBAAI,OAAO,eAAe,cAAc,eAAe,MAAM;AAAE,sBAAM,IAAI,UAAU,oDAAoD;AAAA,cAAI;AAAC,uBAAS,YAAY,OAAO,OAAO,cAAc,WAAW,WAAW,EAAE,aAAa,EAAE,OAAO,UAAU,UAAU,MAAM,cAAc,KAAM,EAAA,CAAE;AAAG,kBAAI;AAAY,gBAAAY,iBAAgB,UAAU,UAAU;AAAA,YAAI;AAEjY,qBAASA,iBAAgBzG,IAAGlV,IAAG;AAAE,cAAA2b,mBAAkB,OAAO,kBAAkB,SAASA,iBAAgBzG,IAAGlV,IAAG;AAAE,gBAAAkV,GAAE,YAAYlV;AAAG,uBAAOkV;AAAA,cAAE;AAAI,qBAAOyG,iBAAgBzG,IAAGlV,EAAC;AAAA,YAAI;AAE1K,qBAAS4b,cAAa,SAAS;AAAE,kBAAI,4BAA4BC;AAA6B,qBAAO,SAAS,uBAAuB;AAAE,oBAAI,QAAQC,iBAAgB,OAAO,GAAG;AAAQ,oBAAI,2BAA2B;AAAE,sBAAI,YAAYA,iBAAgB,IAAI,EAAE;AAAa,2BAAS,QAAQ,UAAU,OAAO,WAAW,SAAS;AAAA,uBAAU;AAAE,2BAAS,MAAM,MAAM,MAAM,SAAS;AAAA;AAAK,uBAAOhB,4BAA2B,MAAM,MAAM;AAAA,cAAE;AAAA,YAAK;AAEza,qBAASA,4BAA2B3b,OAAM,MAAM;AAAE,kBAAI,SAAS,iBAAiB,IAAI,MAAM,YAAY,OAAO,SAAS,aAAa;AAAE,uBAAO;AAAA,cAAO;AAAC,qBAAO4c,wBAAuB5c,KAAI;AAAA,YAAI;AAE1L,qBAAS4c,wBAAuB5c,OAAM;AAAE,kBAAIA,UAAS,QAAQ;AAAE,sBAAM,IAAI,eAAe,2DAA2D;AAAA,cAAE;AAAG,qBAAOA;AAAA,YAAO;AAEtK,qBAAS0c,6BAA4B;AAAE,kBAAI,OAAO,YAAY,eAAe,CAAC,QAAQ;AAAW,uBAAO;AAAO,kBAAI,QAAQ,UAAU;AAAM,uBAAO;AAAO,kBAAI,OAAO,UAAU;AAAY,uBAAO;AAAM,kBAAI;AAAE,qBAAK,UAAU,SAAS,KAAK,QAAQ,UAAU,MAAM,CAAE,GAAE,WAAY;AAAA,gBAAA,CAAE,CAAC;AAAG,uBAAO;AAAA,cAAK,SAAUzY,IAAP;AAAY,uBAAO;AAAA;YAAU;AAEpU,qBAAS0Y,iBAAgB5G,IAAG;AAAE,cAAA4G,mBAAkB,OAAO,iBAAiB,OAAO,iBAAiB,SAASA,iBAAgB5G,IAAG;AAAE,uBAAOA,GAAE,aAAa,OAAO,eAAeA,EAAC;AAAA,cAAI;AAAE,qBAAO4G,iBAAgB5G,EAAC;AAAA,YAAI;AAa7M,qBAAS,kBAAkB,QAAQ,SAAS;AAC1C,kBAAI,YAAY,kBAAkB,OAAO,MAAM;AAE/C,kBAAI,CAAC,QAAQ,aAAa,SAAS,GAAG;AACpC;AAAA,cACD;AAED,qBAAO,QAAQ,aAAa,SAAS;AAAA,YACtC;AAOD,gBAAI,YAAyB,yBAAU,UAAU;AAC/C,cAAA6F,WAAUka,YAAW,QAAQ;AAE7B,kBAAI,SAASrZ,cAAaqZ,UAAS;AAMnC,uBAASA,WAAU,SAAS,SAAS;AACnC,oBAAI;AAEJ,gBAAApa,iBAAgB,MAAMoa,UAAS;AAE/B,wBAAQ,OAAO,KAAK,IAAI;AAExB,sBAAM,eAAe,OAAO;AAE5B,sBAAM,YAAY,OAAO;AAEzB,uBAAO;AAAA,cACR;AAQD,cAAA9V,cAAa8V,YAAW,CAAC;AAAA,gBACvB,KAAK;AAAA,gBACL,OAAO,SAAS,iBAAiB;AAC/B,sBAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,CAAA;AAClF,uBAAK,SAAS,OAAO,QAAQ,WAAW,aAAa,QAAQ,SAAS,KAAK;AAC3E,uBAAK,SAAS,OAAO,QAAQ,WAAW,aAAa,QAAQ,SAAS,KAAK;AAC3E,uBAAK,OAAO,OAAO,QAAQ,SAAS,aAAa,QAAQ,OAAO,KAAK;AACrE,uBAAK,YAAY,iBAAiB,QAAQ,SAAS,MAAM,WAAW,QAAQ,YAAY,SAAS;AAAA,gBAClG;AAAA,cAML,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,YAAY,SAAS;AACnC,sBAAI,SAAS;AAEb,uBAAK,WAAW,eAAc,EAAG,SAAS,SAAS,SAAU7xB,IAAG;AAC9D,2BAAO,OAAO,QAAQA,EAAC;AAAA,kBAC/B,CAAO;AAAA,gBACF;AAAA,cAML,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,QAAQA,IAAG;AACzB,sBAAI,UAAUA,GAAE,kBAAkBA,GAAE;AACpC,sBAAI,SAAS,KAAK,OAAO,OAAO,KAAK;AACrC,sBAAIxD,QAAO,gBAAgB;AAAA,oBACzB;AAAA,oBACA,WAAW,KAAK;AAAA,oBAChB,QAAQ,KAAK,OAAO,OAAO;AAAA,oBAC3B,MAAM,KAAK,KAAK,OAAO;AAAA,kBAC/B,CAAO;AAED,uBAAK,KAAKA,QAAO,YAAY,SAAS;AAAA,oBACpC;AAAA,oBACA,MAAMA;AAAA,oBACN;AAAA,oBACA,gBAAgB,SAAS,iBAAiB;AACxC,0BAAI,SAAS;AACX,gCAAQ,MAAK;AAAA,sBACd;AAED,6BAAO,eAAe;oBACvB;AAAA,kBACT,CAAO;AAAA,gBACF;AAAA,cAML,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,cAAc,SAAS;AACrC,yBAAO,kBAAkB,UAAU,OAAO;AAAA,gBAC3C;AAAA,cAML,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,cAAc,SAAS;AACrC,sBAAI,WAAW,kBAAkB,UAAU,OAAO;AAElD,sBAAI,UAAU;AACZ,2BAAO,SAAS,cAAc,QAAQ;AAAA,kBACvC;AAAA,gBACF;AAAA,cAQL,GAAK;AAAA,gBACD,KAAK;AAAA,gBAML,OAAO,SAAS,YAAY,SAAS;AACnC,yBAAO,kBAAkB,QAAQ,OAAO;AAAA,gBACzC;AAAA,cAKL,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,UAAU;AACxB,uBAAK,SAAS;gBACf;AAAA,cACF,CAAA,GAAG,CAAC;AAAA,gBACH,KAAK;AAAA,gBACL,OAAO,SAASG,MAAKe,SAAQ;AAC3B,sBAAI,UAAU,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK;AAAA,oBAChF,WAAW,SAAS;AAAA,kBAC5B;AACM,yBAAO,aAAaA,SAAQ,OAAO;AAAA,gBACpC;AAAA,cAOL,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,IAAIA,SAAQ;AAC1B,yBAAO,YAAYA,OAAM;AAAA,gBAC1B;AAAA,cAOL,GAAK;AAAA,gBACD,KAAK;AAAA,gBACL,OAAO,SAAS,cAAc;AAC5B,sBAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,SAAY,UAAU,KAAK,CAAC,QAAQ,KAAK;AAC/F,sBAAI,UAAU,OAAO,WAAW,WAAW,CAAC,MAAM,IAAI;AACtD,sBAAI,UAAU,CAAC,CAAC,SAAS;AACzB,0BAAQ,QAAQ,SAAUo0B,SAAQ;AAChC,8BAAU,WAAW,CAAC,CAAC,SAAS,sBAAsBA,OAAM;AAAA,kBACpE,CAAO;AACD,yBAAO;AAAA,gBACR;AAAA,cACF,CAAA,CAAC;AAEF,qBAAOD;AAAA,YACT,EAAG,qBAAsB,CAAA;AAEI,gBAAIL,aAAa;AAAA,UAE9C;AAAA,UAEM,KACC,SAASngB,SAAQ;AAExB,gBAAI,qBAAqB;AAKzB,gBAAI,OAAO,YAAY,eAAe,CAAC,QAAQ,UAAU,SAAS;AAC9D,kBAAIQ,SAAQ,QAAQ;AAEpB,cAAAA,OAAM,UAAUA,OAAM,mBACNA,OAAM,sBACNA,OAAM,qBACNA,OAAM,oBACNA,OAAM;AAAA,YACzB;AASD,qBAAS,QAAS,SAAS,UAAU;AACjC,qBAAO,WAAW,QAAQ,aAAa,oBAAoB;AACvD,oBAAI,OAAO,QAAQ,YAAY,cAC3B,QAAQ,QAAQ,QAAQ,GAAG;AAC7B,yBAAO;AAAA,gBACR;AACD,0BAAU,QAAQ;AAAA,cACrB;AAAA,YACJ;AAED,YAAAR,QAAO,UAAU;AAAA,UAGjB;AAAA,UAEM,KACC,SAASA,SAAQ,0BAA0BkgB,sBAAqB;AAEvE,gBAAI,UAAUA,qBAAoB,GAAG;AAYrC,qBAAS,UAAU,SAAS,UAAUv0B,OAAM,UAAU,YAAY;AAC9D,kBAAI,aAAa,SAAS,MAAM,MAAM,SAAS;AAE/C,sBAAQ,iBAAiBA,OAAM,YAAY,UAAU;AAErD,qBAAO;AAAA,gBACH,SAAS,WAAW;AAChB,0BAAQ,oBAAoBA,OAAM,YAAY,UAAU;AAAA,gBAC3D;AAAA,cACJ;AAAA,YACJ;AAYD,qBAAS,SAAS,UAAU,UAAUA,OAAM,UAAU,YAAY;AAE9D,kBAAI,OAAO,SAAS,qBAAqB,YAAY;AACjD,uBAAO,UAAU,MAAM,MAAM,SAAS;AAAA,cACzC;AAGD,kBAAI,OAAOA,UAAS,YAAY;AAG5B,uBAAO,UAAU,KAAK,MAAM,QAAQ,EAAE,MAAM,MAAM,SAAS;AAAA,cAC9D;AAGD,kBAAI,OAAO,aAAa,UAAU;AAC9B,2BAAW,SAAS,iBAAiB,QAAQ;AAAA,cAChD;AAGD,qBAAO,MAAM,UAAU,IAAI,KAAK,UAAU,SAAU,SAAS;AACzD,uBAAO,UAAU,SAAS,UAAUA,OAAM,UAAU,UAAU;AAAA,cACtE,CAAK;AAAA,YACJ;AAWD,qBAAS,SAAS,SAAS,UAAUA,OAAM,UAAU;AACjD,qBAAO,SAASgD,IAAG;AACf,gBAAAA,GAAE,iBAAiB,QAAQA,GAAE,QAAQ,QAAQ;AAE7C,oBAAIA,GAAE,gBAAgB;AAClB,2BAAS,KAAK,SAASA,EAAC;AAAA,gBAC3B;AAAA,cACJ;AAAA,YACJ;AAED,YAAAqR,QAAO,UAAU;AAAA,UAGjB;AAAA,UAEM,KACC,SAAS,yBAAyBsC,UAAS;AAQlD,YAAAA,SAAQ,OAAO,SAAS,OAAO;AAC3B,qBAAO,UAAU,UACV,iBAAiB,eACjB,MAAM,aAAa;AAAA,YAC9B;AAQA,YAAAA,SAAQ,WAAW,SAAS,OAAO;AAC/B,kBAAI3W,QAAO,OAAO,UAAU,SAAS,KAAK,KAAK;AAE/C,qBAAO,UAAU,WACTA,UAAS,uBAAuBA,UAAS,8BACzC,YAAY,UACZ,MAAM,WAAW,KAAK2W,SAAQ,KAAK,MAAM,EAAE;AAAA,YACvD;AAQA,YAAAA,SAAQ,SAAS,SAAS,OAAO;AAC7B,qBAAO,OAAO,UAAU,YACjB,iBAAiB;AAAA,YAC5B;AAQA,YAAAA,SAAQ,KAAK,SAAS,OAAO;AACzB,kBAAI3W,QAAO,OAAO,UAAU,SAAS,KAAK,KAAK;AAE/C,qBAAOA,UAAS;AAAA,YACpB;AAAA,UAGA;AAAA,UAEM,KACC,SAASqU,SAAQ,0BAA0BkgB,sBAAqB;AAEvE,gBAAI,KAAKA,qBAAoB,GAAG;AAChC,gBAAI,WAAWA,qBAAoB,GAAG;AAWtC,qBAAS,OAAO7zB,SAAQV,OAAM,UAAU;AACpC,kBAAI,CAACU,WAAU,CAACV,SAAQ,CAAC,UAAU;AAC/B,sBAAM,IAAI,MAAM,4BAA4B;AAAA,cAC/C;AAED,kBAAI,CAAC,GAAG,OAAOA,KAAI,GAAG;AAClB,sBAAM,IAAI,UAAU,kCAAkC;AAAA,cACzD;AAED,kBAAI,CAAC,GAAG,GAAG,QAAQ,GAAG;AAClB,sBAAM,IAAI,UAAU,mCAAmC;AAAA,cAC1D;AAED,kBAAI,GAAG,KAAKU,OAAM,GAAG;AACjB,uBAAO,WAAWA,SAAQV,OAAM,QAAQ;AAAA,cAC3C,WACQ,GAAG,SAASU,OAAM,GAAG;AAC1B,uBAAO,eAAeA,SAAQV,OAAM,QAAQ;AAAA,cAC/C,WACQ,GAAG,OAAOU,OAAM,GAAG;AACxB,uBAAO,eAAeA,SAAQV,OAAM,QAAQ;AAAA,cAC/C,OACI;AACD,sBAAM,IAAI,UAAU,2EAA2E;AAAA,cAClG;AAAA,YACJ;AAWD,qBAAS,WAAWP,OAAMO,OAAM,UAAU;AACtC,cAAAP,MAAK,iBAAiBO,OAAM,QAAQ;AAEpC,qBAAO;AAAA,gBACH,SAAS,WAAW;AAChB,kBAAAP,MAAK,oBAAoBO,OAAM,QAAQ;AAAA,gBAC1C;AAAA,cACJ;AAAA,YACJ;AAWD,qBAAS,eAAe,UAAUA,OAAM,UAAU;AAC9C,oBAAM,UAAU,QAAQ,KAAK,UAAU,SAASP,OAAM;AAClD,gBAAAA,MAAK,iBAAiBO,OAAM,QAAQ;AAAA,cAC5C,CAAK;AAED,qBAAO;AAAA,gBACH,SAAS,WAAW;AAChB,wBAAM,UAAU,QAAQ,KAAK,UAAU,SAASP,OAAM;AAClD,oBAAAA,MAAK,oBAAoBO,OAAM,QAAQ;AAAA,kBACvD,CAAa;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAWD,qBAAS,eAAe,UAAUA,OAAM,UAAU;AAC9C,qBAAO,SAAS,SAAS,MAAM,UAAUA,OAAM,QAAQ;AAAA,YAC1D;AAED,YAAAqU,QAAO,UAAU;AAAA,UAGjB;AAAA,UAEM,KACC,SAASA,SAAQ;AAExB,qBAAS7I,QAAO,SAAS;AACrB,kBAAI;AAEJ,kBAAI,QAAQ,aAAa,UAAU;AAC/B,wBAAQ,MAAK;AAEb,+BAAe,QAAQ;AAAA,cAC1B,WACQ,QAAQ,aAAa,WAAW,QAAQ,aAAa,YAAY;AACtE,oBAAI,aAAa,QAAQ,aAAa,UAAU;AAEhD,oBAAI,CAAC,YAAY;AACb,0BAAQ,aAAa,YAAY,EAAE;AAAA,gBACtC;AAED,wBAAQ,OAAM;AACd,wBAAQ,kBAAkB,GAAG,QAAQ,MAAM,MAAM;AAEjD,oBAAI,CAAC,YAAY;AACb,0BAAQ,gBAAgB,UAAU;AAAA,gBACrC;AAED,+BAAe,QAAQ;AAAA,cAC1B,OACI;AACD,oBAAI,QAAQ,aAAa,iBAAiB,GAAG;AACzC,0BAAQ,MAAK;AAAA,gBAChB;AAED,oBAAI,YAAY,OAAO;AACvB,oBAAIlI,SAAQ,SAAS;AAErB,gBAAAA,OAAM,mBAAmB,OAAO;AAChC,0BAAU,gBAAe;AACzB,0BAAU,SAASA,MAAK;AAExB,+BAAe,UAAU;cAC5B;AAED,qBAAO;AAAA,YACV;AAED,YAAA+Q,QAAO,UAAU7I;AAAA,UAGjB;AAAA,UAEM,KACC,SAAS6I,SAAQ;AAExB,qBAASmE,KAAK;AAAA,YAGb;AAED,YAAAA,GAAE,YAAY;AAAA,cACZ,IAAI,SAAU,MAAM,UAAUuc,MAAK;AACjC,oBAAI/xB,KAAI,KAAK,MAAM,KAAK,IAAI,CAAA;AAE5B,iBAACA,GAAE,UAAUA,GAAE,QAAQ,CAAA,IAAK,KAAK;AAAA,kBAC/B,IAAI;AAAA,kBACJ,KAAK+xB;AAAA,gBACX,CAAK;AAED,uBAAO;AAAA,cACR;AAAA,cAED,MAAM,SAAU,MAAM,UAAUA,MAAK;AACnC,oBAAIh2B,QAAO;AACX,yBAAS,WAAY;AACnB,kBAAAA,MAAK,IAAI,MAAM,QAAQ;AACvB,2BAAS,MAAMg2B,MAAK,SAAS;AAAA,gBAEnC;AACI,yBAAS,IAAI;AACb,uBAAO,KAAK,GAAG,MAAM,UAAUA,IAAG;AAAA,cACnC;AAAA,cAED,MAAM,SAAU,MAAM;AACpB,oBAAI,OAAO,CAAA,EAAG,MAAM,KAAK,WAAW,CAAC;AACrC,oBAAI,WAAW,KAAK,MAAM,KAAK,IAAI,CAAA,IAAK,SAAS,CAAE,GAAE,MAAK;AAC1D,oBAAIl2B,KAAI;AACR,oBAAI,MAAM,OAAO;AAEjB,qBAAKA,IAAGA,KAAI,KAAKA,MAAK;AACpB,yBAAOA,IAAG,GAAG,MAAM,OAAOA,IAAG,KAAK,IAAI;AAAA,gBACvC;AAED,uBAAO;AAAA,cACR;AAAA,cAED,KAAK,SAAU,MAAM,UAAU;AAC7B,oBAAImE,KAAI,KAAK,MAAM,KAAK,IAAI,CAAA;AAC5B,oBAAI,OAAOA,GAAE;AACb,oBAAI,aAAa,CAAA;AAEjB,oBAAI,QAAQ,UAAU;AACpB,2BAASnE,KAAI,GAAG,MAAM,KAAK,QAAQA,KAAI,KAAKA,MAAK;AAC/C,wBAAI,KAAKA,IAAG,OAAO,YAAY,KAAKA,IAAG,GAAG,MAAM;AAC9C,iCAAW,KAAK,KAAKA,GAAE;AAAA,kBAC1B;AAAA,gBACF;AAMD,gBAAC,WAAW,SACRmE,GAAE,QAAQ,aACV,OAAOA,GAAE;AAEb,uBAAO;AAAA,cACR;AAAA,YACH;AAEA,YAAAqR,QAAO,UAAUmE;AACjB,YAAAnE,QAAO,QAAQ,cAAcmE;AAAA,UAG7B;AAAA,QAEA;AAGU,YAAI,2BAA2B,CAAA;AAG/B,iBAAS,oBAAoB,UAAU;AAEtC,cAAG,yBAAyB,WAAW;AACtC,mBAAO,yBAAyB,UAAU;AAAA,UAC1C;AAED,cAAInE,UAAS,yBAAyB,YAAY;AAAA,YAGjD,SAAS,CAAE;AAAA,UACvB;AAGW,8BAAoB,UAAUA,SAAQA,QAAO,SAAS,mBAAmB;AAGzE,iBAAOA,QAAO;AAAA,QACd;AAID,SAAC,WAAW;AAEX,8BAAoB,IAAI,SAASA,SAAQ;AACxC,gBAAI,SAASA,WAAUA,QAAO,aAC7B,WAAW;AAAE,qBAAOA,QAAO;AAAA,YAAa,IACxC,WAAW;AAAE,qBAAOA;AAAA;AACrB,gCAAoB,EAAE,QAAQ,EAAE,GAAG,OAAQ,CAAA;AAC3C,mBAAO;AAAA,UACnB;AAAA,QACA;AAGU,SAAC,WAAW;AAEX,8BAAoB,IAAI,SAASsC,UAAS,YAAY;AACrD,qBAAQ/X,QAAO,YAAY;AAC1B,kBAAG,oBAAoB,EAAE,YAAYA,IAAG,KAAK,CAAC,oBAAoB,EAAE+X,UAAS/X,IAAG,GAAG;AAClF,uBAAO,eAAe+X,UAAS/X,MAAK,EAAE,YAAY,MAAM,KAAK,WAAWA,MAAM,CAAA;AAAA,cAC9E;AAAA,YACD;AAAA,UACb;AAAA,QACA;AAGU,SAAC,WAAW;AACX,8BAAoB,IAAI,SAAS,KAAKM,OAAM;AAAE,mBAAO,OAAO,UAAU,eAAe,KAAK,KAAKA,KAAI;AAAA,UAAI;AAAA,QAClH;AAMU,eAAO,oBAAoB,GAAG;AAAA,MACxC,EAAa,EACZ;AAAA,IACD,CAAC;AAAA;;;;ACz3BD,aAAS81B,OAAM,gBAAgB;AAC7B,eAAS,iBAAiB,aAAa,SAAUhyB,IAAG;AAClD,YAAIrE,MAAKqE,GAAE;AACX,YAAI6I,QAAO,eAAelN,GAAE;AAE5B,YAAI,CAACkN,OAAM;AACT,UAAAlN,MAAKA,IAAG;AACR,UAAAkN,QAAOlN,OAAM,eAAeA,GAAE;AAAA,QAC/B;AAED,QAAAkN,SAAQmpB,OAAM,KAAKr2B,KAAIkN,OAAM,IAAI;AAAA,MACrC,CAAG;AAAA,IACF;AAED,IAAAmpB,OAAM,OAAO,SAAUr2B,KAAIkN,OAAM,QAAQ;AACvC,UAAI,iBAAiB;AACrB,MAAAA,QAAOA,SAAQ;AAEf,OAAClN,IAAG,WAAW,QAAQA,KAAIkN,KAAI,GAAG;AAElC,eAAS,QAAQlN,KAAIkN,OAAM;AACzB,YAAI;AACJ,YAAI;AACJ,YAAIrM;AAEJ,QAAAb,IAAG,iBAAiB,aAAa,QAAQ;AACzC,QAAAA,IAAG,iBAAiB,cAAc,QAAQ;AAE1C,iBAAS,OAAO;AACd,UAAAa,QAAOb,IAAG,SAASA,IAAG,aAAa,cAAc,KAAKa;AACtD,UAAAb,IAAG,QAAQ;AACX,UAAAA,IAAG,aAAa,gBAAgB,EAAE;AAClC,UAAAa,SAAQ,CAAC,cAAc,YAAY,WAAW,QAAQ,SAAS,MAAM,CAAC;AAAA,QACvE;AAED,iBAAS,WAAW;AAClB,UAAAw1B,OAAM,KAAKr2B,KAAI,IAAI;AAAA,QACpB;AAED,iBAASujB,MAAK,cAAc;AAC1B,cAAI,WAAW,cAAc;AAC3B,wBAAY,aAAa,SAAS;AAClC,gBAAI,SAAS,aAAa,UAAU;AACpC,sBAAU,OAAO,YAAY,SAAS;AACtC,wBAAY;AAAA,UACb;AAAA,QACF;AAED,iBAAS,SAAS;AAChB,cAAI,CAAC,WAAW;AACd,wBAAY,cAAcvjB,KAAIa,OAAMqM,KAAI;AAAA,UACzC;AAAA,QACF;AAED,eAAOlN,IAAG,UAAU;AAAA,UAClB;AAAA,UACA,MAAMujB;AAAA,QACZ;AAAA,MACG;AAED,eAAS,cAAcvjB,KAAIa,OAAMqM,OAAM;AACrC,YAAI,YAAY,SAAS,cAAc,MAAM;AAC7C,YAAI,OAAOA,MAAK,QAAQlN,IAAG,aAAa,YAAY,KAAK;AAEzD,kBAAU,YAAYa;AAEtB,QAAAb,IAAG,YAAY,SAAS;AAExB,YAAI,WAAW,KAAK,MAAM;AAC1B,YAAI,WAAW,KAAK,MAAM;AAE1B,iBAAS,kBAAkB;AACzB,oBAAU,YAAY,iBAAsB,WAAW;AAEvD,cAAI,YAAY;AAChB,cAAI2D,OAAM3D,IAAG;AACb,cAAI,OAAOA,IAAG;AAEd,cAAI,UAAU,iBAAiBA,KAAI;AACjC,YAAA2D,OAAM,OAAO;AAAA,UACd;AAED,cAAI,QAAQ3D,IAAG;AACf,cAAI,SAASA,IAAG;AAChB,cAAI,gBAAgB,UAAU;AAC9B,cAAI,eAAe,UAAU;AAC7B,cAAI,WAAW,OAAQ,QAAQ;AAE/B,oBAAU,MAAM,OACd,aAAa,MAAO2D,OAAM,gBAAgB,YAC1C,aAAa,MAAOA,OAAM,SAAS,YAClCA,OAAO,SAAS,IAAM,gBAAgB,KACrC;AAEJ,oBAAU,MAAM,QACd,aAAa,MAAM,OACnB,aAAa,MAAM,OAAO,QAAQ,eAClC,aAAa,MAAO,OAAO,QAAQ,YACnC,aAAa,MAAO,OAAO,eAAe,YACzC,WAAW,eAAe,KACzB;AAAA,QACL;AAED;AAEA,YAAIkC,QAAO,UAAU;AAErB,YAAI,aAAa,OAAOA,MAAK,MAAM,GAAG;AACpC,qBAAW;AACX;QACN,WAAe,aAAa,OAAOA,MAAK,SAAS,OAAO,aAAa;AAC/D,qBAAW;AACX;QACD,WAAU,aAAa,OAAOA,MAAK,OAAO,GAAG;AAC5C,qBAAW;AACX;QACN,WAAe,aAAa,OAAOA,MAAK,QAAQ,OAAO,YAAY;AAC7D,qBAAW;AACX;QACD;AAED,kBAAU,aAAa;AAEvB,eAAO;AAAA,MACR;AAAA,IACH;AAEA,IAAAwwB,OAAM,OAAO,SAAUr2B,KAAI,QAAQ;AACjC,MAAAA,IAAG,WAAWA,IAAG,QAAQ,KAAK,MAAM;AAAA,IACtC;AAEA,QAAqC0V,QAAO,SAAS;AACnD,MAAAA,QAAA,UAAiB2gB;AAAA,IACnB;AAAA;;;ACjHO,WAAS,YACdr2B,KACAa,OACA,OAA0D,KAC1D,UAAU,KACV;AACG,IAAAb,IAAA,aAAa,SAAS,EAAE;AACxB,IAAAA,IAAA,aAAa,cAAca,KAAI;AAClC,UAAM,KAAKb,KAAI,EAAE,KAAM,CAAA;AACvB,eAAW,MAAM,MAAM,KAAKA,GAAE,GAAG,OAAO;AAAA,EAC1C;ACJO,QAAM,aAAwC,CAAS,UAAA;AAC5D,UAAM,YAAY,CAAC,WAAW,oBAAoB,EAAE,OAAO,MAAM,WAAW,CAAE,CAAA,EAAE,KAAK,GAAG;AAExF,UAAM,QAA6B;AAAA,MACjC,GAAG,MAAM;AAAA,MACT,UAAU,MAAM;AAAA,IAAA;AAGZ,UAAA,UAAU,CAACqE,OAAwB;AACvC,MAAAA,GAAE,eAAe;AACjB,YAAM,QAAQ;AAAA,IAAA;AAGV,UAAA,YAAY,CAACA,OAA2B;AACxC,UAAAA,GAAE,YAAY,IAAI;AACpB,QAAAA,GAAE,eAAe;AACjB,cAAM,QAAQ;AAAA,MAChB;AAAA,IAAA;AAIA,WAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,OAAO,MAAM,SAAS,MAAM;AAAA,QAC5B;AAAA,QACA;AAAA,MAAA;AAAA,MAEC,MAAM;AAAA,IAAA;AAAA,EAGb;AASO,QAAM,cAAc,MAAM,WAAgD,CAAC,OAAyB,QAAQ;AAC3G,UAAA,YAAY,CAAC,iBAAiB,EAAE,OAAO,MAAM,WAAW,EAAE,EAAE,KAAK,GAAG;AACpE,UAAA,UAAU,CAACA,OAAwB;AACvC,UAAI,MAAM,SAAS;AACjB,QAAAA,GAAE,eAAe;AACjB,cAAM,QAAQ;AAAA,MAChB;AAAA,IAAA;AAGA,WAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,OAAO,MAAM;AAAA,QACb;AAAA,QACA,OAAO,MAAM;AAAA,QACb;AAAA,QACA,UAAU,MAAM;AAAA,MAAA;AAAA,MAEhB,sBAAA,cAAC,SAAI,KAAK,MAAM,OAAO,KAAK,MAAM,OAAO,WAAU,QAAO,CAAA;AAAA,IAAA;AAAA,EAGhE,CAAC;AASM,QAAM,aAAa,MAAM,WAA+C,CAAC,OAAwB,QAAQ;;AAC9G,UAAM,aAAY,WAAM,YAAN,mBAAe,KAAK;AAChC,UAAA,UAAU,CAACA,OAAwB;AACvC,UAAI,MAAM,SAAS;AACjB,QAAAA,GAAE,eAAe;AACjB,cAAM,QAAQ;AAAA,MAChB;AAAA,IAAA;AAGA,WAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM;AAAA,QACb;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,UAAU,MAAM;AAAA,MAAA;AAAA,MAEf,MAAM;AAAA,IAAA;AAAA,EAGb,CAAC;AAQM,QAAM,gBAAgB,MAAM;AAAA,IACjC,CAAC,OAA2B,QAAQ;AAClC,YAAM,YAAY,CAAC,qBAAqB,mBAAmB,yBAAyB,EACjF,OAAO,MAAM,WAAW,CAAE,CAAA,EAC1B,KAAK,GAAG;AAET,aAAA,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AAAA,UACf,MAAK;AAAA,UACL;AAAA,UACA,OAAO,MAAM;AAAA,UACb;AAAA,UACA,UAAU,MAAM;AAAA,QAAA;AAAA,QAEf,MAAM;AAAA,MAAA;AAAA,IAGb;AAAA,EACF;ACjHgB,WAAA,yBAAyB,SAA6B,WAAwB,MAAkB;AAExG,UAAA6B,QAAO,WAAW,SAAS;AACjC,IAAAA,MAAK,OAAO,OAAO;AAIb,UAAA,WAAW,IAAI,iBAAiB,CAAiB,kBAAA;AACrD,oBAAc,QAAQ,CAAY,aAAA;AACvB,iBAAA,aAAa,QAAQ,CAAQpF,UAAA;AACpC,cAAIA,UAAS,WAAW;AACtB,qBAAS,WAAW;AACpB,YAAAoF,MAAK,QAAQ;AAAA,UACf;AAAA,QAAA,CACD;AAAA,MAAA,CACF;AAAA,IAAA,CACF;AACQ,aAAA,QAAQ,KAAK,KAAK,EAAE,YAAY,OAAO,WAAW,MAAM,SAAS,KAAM,CAAA;AAAA,EAClF;ACrBgB,WAAA,iCACd,MACAvB,QACA,UACoB;AAIpB,UAAM,cAAc,KAAK,YAAYA,OAAM,OAAO,CAAC;AAGnD,UAAM,WAAW,KAAK,MAAM,IAAI,QAAQA,OAAM,IAAI;AAC5C,UAAA,cAAc,4BAA4B,QAAQ;AACxD,UAAM,YAAY,KAAK,SAAS,YAAa,MAAM,CAAC,EAAE;AAChD,UAAA,aAAa,UAAU;AACvB,UAAA,kBAAkB,OAAO,iBAAiB,SAAS;AAGzD,UAAM,aAAa,SAAS,gBAAgB,YAAa,EAAE,KAAK;AAChE,UAAM,aAAa;AAAA,MACjB,KAAK,YAAY,SAAS,WAAW,MAAM,aAAa,IAAI;AAAA,IAAA;AAK1D,QAAA;AACJ,UAAM,gBAAgB,YAAY,OAAO,WAAW,WAAW;AAC/D,QAAI,eAAe;AACjB,YAAM,cAAc,KAAK,YAAYA,OAAM,EAAE;AACvC,YAAA,WAAW,YAAY,QAAQ,YAAY,MAAM,WAAW,QAAQ,YAAY,QAAQ;AACtF,cAAA;AAAA,QACN,GAAG;AAAA,QACH,OAAO,WAAW;AAAA,MAAA;AAAA,IACpB,OACK;AACL,YAAM,aACJ,WACC,YAAY,OAAO,WAAW,QAC/B,WAEA,gBAAgB,kBAChB,QACA,gBAAgB,cAChB,QACA,gBAAgB,aAChB;AAEM,cAAA;AAAA,QACN,GAAG;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ;AAGA,UAAM1E,OAAM,OAAO,KAAK,KAAK,EAC1B,IAAI,CAAU,WAAA,GAAG,UAAU,MAAM,SAAS,EAC1C,KAAK,GAAG;AAEJ,WAAA;AAAA,MACL,KAAK,YAAY,MAAM,YAAY,KAAK,WAAW;AAAA,MACnD;AAAA,MACA,KAAAA;AAAA,IAAA;AAAA,EAEJ;ACxCO,WAAS,0BAA0B,MAAkD;AACpF,UAAA;AAAA,MACJ,KAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAAq2B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACE,IAAA;AAEA,QAAA;AAEJ,WAAO,IAAI,OAAsB;AAAA,MAC/B,KAAAr2B;AAAA,MACA,KAAK,MAAkB;AACR,qBAAA;AACb,eAAO;MACT;AAAA,MACA,OAAO;AAAA,QACL,MAAM,MAAM;AACV,iBAAO,cAAc;AAAA,QACvB;AAAA,QACA,OAAO,CAAC,IAAiB,MAAqB,WAAwB,aAA0B;AAE9F,cAAI,GAAG,QAAQ,2BAA2B,KAAK,GAAG,QAAQ,sBAAsB,GAAG;AACjF,mBAAO,cAAc;AAAA,UACvB;AAGI,cAAA,iBAAiB,GAAG,YAAY;AAClC,mBAAO,cAAc;AAAA,UACvB;AAGA,gBAAM,YAAY,SAAS;AAK3B,gBAAM0E,SAAQ,aAAa,UAAU,OAAO,QAAQ;AAEpD,cAAIA,QAAO;AAET,gBAAI,UAAU,OAAOA,OAAM,QAAQ,UAAU,KAAKA,OAAM,IAAI;AAC1D,qBAAO,cAAc;AAAA,YACvB;AAGA,gBAAI,UAAU,CAAC,OAAO,SAAS,GAAG;AAChC,qBAAO,cAAc;AAAA,YACvB;AAIA,gBAAI,UAAU,SAASA,OAAM,SAAS,UAAU,MAAM;AACpD,qBAAO,cAAc;AAAA,YACvB;AAGA,kBAAM,QAAQ,aAAa,SAAS,KAAKA,QAAO,QAAQ;AACxD,kBAAM9D,QAAO,SAAS,IAAI,YAAY8D,OAAM,MAAMA,OAAM,EAAE;AACpD,kBAAA5C,UAAS,EAAE,OAAO,MAAAlB;AAIxB,kBAAM,qBAAqB,iCAAiC,YAAY8D,QAAO,QAAQ;AAGnF,gBAAA;AACJ,gBAAI,SAAS;AACK,8BAAA;AAAA,gBACd,KAAK,mBAAmB,MAAM,QAAQ5C,OAAM;AAAA,gBAC5C,iBAAiB;AAAA,gBACjB,WAAW,MAAM;AACR,yBAAA;AAAA,gBACT;AAAA,cAAA;AAAA,YAEJ;AAGA,kBAAM,qBAAqB,WAAW;AAAA,cACpC,mBAAmB;AAAA,cAEnB,CAAC,SAAqB;AAEpB,sBAAM,eAAe,OAAO,SAAS,cAAc,KAAK;AACxD,6BAAa,MAAM,aAAa;AAGhC,gBAAAu0B,aAAY,MAAMv0B,SAAQ,mBAAmB,KAAK,EAAE,KAAK,CAAS,UAAA;AAChE,sBAAI,OAAO;AACgB,6CAAA,OAAO,cAAc,IAAI;AAGlD,wBAAI,qBAAqB;AACjB,4BAAA,QAAQ,aAAa,qBAAqB,GAAG;AAEnD,+BAAS7B,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACrC,8BAAMiY,QAAO,MAAM;AACd,wBAAAA,MAAA,YAAY,CAAC9T,OAAqB;AACjC,8BAAAA,GAAE,YAAY,IAAI;AACpB,4BAAAA,GAAE,eAAe;AACjB,4BAAA8T,MAAK,MAAM;AAAA,0BACb;AAAA,wBAAA;AAAA,sBAEJ;AAAA,oBACF;AAEA,iCAAa,MAAM,aAAa;AAAA,kBAClC;AAAA,gBAAA,CACD;AAEM,uBAAA;AAAA,cACT;AAAA,cAEA;AAAA,YAAA;AAIF,mBAAO,cAAc,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC;AAAA,UAAA,OACnD;AACL,mBAAO,cAAc;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,aAAa,CAAC,UAAuB;AAC5B,iBAAAlY,KAAI,SAAS,KAAK;AAAA,QAC3B;AAAA,QACA,aAAa,aACT,CAAC,MAAkB,KAAa,UAAsB;AAC9C,gBAAA,aAAa,gBAAgB,MAAM;AACzC,cAAI,YAAY;AACR,kBAAA,QAAQ,aAAa,KAAK,MAAM,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,GAAG,QAAQ;AAC3E,kBAAM0E,SAAQ,aAAa,KAAK,MAAM,IAAI,QAAQ,GAAG,CAAC;AACtD,gBAAI,SAASA,QAAO;AAClB,oBAAM,gBAAgB;AACtB,oBAAM,eAAe;AACf,oBAAA9D,QAAO,KAAK,MAAM,IAAI,YAAY8D,OAAM,MAAMA,OAAM,EAAE;AACjD,yBAAA,EAAE,OAAO,MAAA9D,MAAA,CAAM;AACnB,qBAAA;AAAA,YACT;AAAA,UACF;AACO,iBAAA;AAAA,QAET,IAAA;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EACH;AC3LO,WAAS,UAAUyW,MAAa;AACjC,QAAA;AACI,YAAA,YAAY,IAAI,IAAIA,IAAG;AAC7B,aAAO,UAAU,aAAa,WAAW,UAAU,aAAa;AAAA,aAC1D/V;AACC,aAAA;AAAA,IACV;AAAA,EACD;ACgBO,WAAS,gBACdJ,SACAiY,KACAmd,MACA,SACA,eACA;AACA,UAAM,oBAAoB;AAC1B,UAAM,gBAAgB;AACtB,UAAM,WAAW,gBAAgB;AAEjC,WAAO,0BAA0B;AAAA,MAC/B,KAAK,IAAI,UAAyB,YAAY;AAAA,MAC9C,UAAUp1B,QAAO,MAAM;AAAA,MACvB;AAAA,MACA,aAAa,CAAC,MAAkBY,SAAoC,UAA+B;AACjG,eAAO,QAAQ;AAAA,UACby0B,sBAAA,QAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAMz0B,QAAO;AAAA,cACb,cAAc,gBAAgB;AAAA,cAC9B;AAAA,cACA;AAAA,cACA;AAAA,cACA,IAAAqX;AAAA,cACA,KAAAmd;AAAA,cACA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,SAAS,CAACx0B,YAAuC;AACzC,cAAA,WAAWA,QAAO,MAAM,UAAUA,QAAO,MAAM,UAAUA,QAAO,MAAM;AAC5E,eAAO,QAAQ;AAAA,MACjB;AAAA,MACA,QAAQ,CAAC,cAAyB;AACzB,eAAA,CAAC,qBAAqBZ,SAAQ,SAAS;AAAA,MAChD;AAAA,MACA,YAAY,CAACY,YAAuC;AAClD,QAAAqX,IAAG,QAAQ,QAAQrX,QAAO,MAAM,IAAI;AAAA,MACtC;AAAA,IAAA,CACD;AAAA,EACH;AAYA,QAAM,YAAsC,CAAS,UAAA;AAE7C,UAAA,WAAW,MAAM,KAAK,UAAU,MAAM,KAAK,UAAU,MAAM,KAAK;AACtE,UAAM,gBAAgB,MAAM;AAC1B,YAAM,KAAK;AACP,UAAA,MAAM,KAAK,SAAS;AACtB,cAAM,IAAI,SAAS,eAAe,SAAS,MAAM,KAAK,OAAO;AAAA,MAAA,WACpD,MAAM,KAAK,KAAK,WAAW,GAAG,GAAG;AACpC,cAAA,IAAI,SAAS,eAAe,MAAM,MAAM,KAAK,KAAK,OAAO,CAAC,CAAC;AAAA,MACxD,WAAA,UAAU,MAAM,KAAK,IAAI,GAAG;AACrC,cAAM,GAAG,QAAQ,QAAQ,MAAM,KAAK,IAAI;AAAA,MAAA,OACnC;AACL,cAAM,GAAG,QAAQ,eAAe,MAAM,KAAK,IAAI;AAAA,MACjD;AAAA,IAAA;AAIF,UAAM,iBAAiB,CAAC,MAAM,KAAK,WAAW,YAAY;AACtD,QAAA8zB;AACE,UAAA,gBAAgB,CAAC,WAAqC;AAC1D,UAAI,QAAQ;AACE,QAAAA,aAAA,IAAI,YAAY,QAAQ;AAAA,UAClC,MAAM,MAAM;AAAA,QAAA,CACb;AACS,QAAAA,WAAA,GAAG,WAAW,MAAM;AAC5B,sBAAY,QAAQ,MAAM,GAAG,QAAQ,cAAc,qBAAqB,GAAG,GAAG;AAAA,QAAA,CAC/E;AAAA,MAAA,OACI;AACL,YAAIA,YAAW;AACb,UAAAA,WAAU,QAAQ;AAAA,QACpB;AAAA,MACF;AAAA,IAAA;AAIF,UAAM,kBAAkB,MAAM;AAG5B,aAAO,WAAW,MAAM;AAChB,cAAA,cAAc,MAAM,KAAK,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI;AACrE,cAAM,KAAK;SACV,CAAC;AAAA,IAAA;AAIN,UAAM,gBAAgB,MAAM;AACpB,YAAA,QAAQ,MAAM,KAAK,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI;AAAA,IAAA;AAGjE,uDACG,OAAM,EAAA,SAAS,CAAC,eAAe,GAAG,OAAO,MAAM,MAAA,+CAC7C,YAAW,EAAA,MAAM,UAAU,SAAS,eAAe,UAAU,MAAM,aAAA,CAAc,GACjF,iBACCW,sBAAA,QAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,MAAM,GAAG,OAAO;AAAA,QACvB,SAAS,CAAC,2BAA2B;AAAA,QACrC,OAAO,MAAM,GAAG,QAAQ,cAAc,wBAAwB;AAAA,QAC9D,KAAK;AAAA,MAAA;AAAA,QAEL,MACJA,sBAAA,QAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,MAAM,GAAG,OAAO;AAAA,QACvB,SAAS,CAAC,6BAA6B;AAAA,QACvC,OAAO,MAAM,GAAG,QAAQ,cAAc,aAAa;AAAA,QACnD,SAAS;AAAA,MAAA;AAAA,IAAA,GAEXA,sBAAA,QAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,MAAM,GAAG,OAAO;AAAA,QACvB,SAAS,CAAC,iCAAiC;AAAA,QAC3C,OAAO,MAAM,GAAG,QAAQ,cAAc,iBAAiB;AAAA,QACvD,SAAS;AAAA,MAAA;AAAA,IAAA,CAEb;AAAA,EAEJ;;AC1HA,QAAM7d,cAAY,CAAC,YAAyC;AAC1D,UAAM,EAAE,kBAAkB,IAAAS,KAAI,WAAA,IAAe;AAE7C,UAAM,eAAe;AAAA,MACnB,UAAU,wBAAwB,gBAAgB;AAAA,MAClD,YAAY,iBAAiB;AAAA,MAC7B,MAAM;AAAA,IAAA;AAER,UAAM,WAAW,iBAAiB;AAClC,UAAM,WAAW,iBAAiB;AAClC,UAAM,YAAY,iBAAiB;AAEnC,UAAM,WAAW,YAAY,EAAE,UAAU,UAAA,IAAc,CAAA;AAEhD,WAAA;AAAA,MACL,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,MAAM,CAAC;AAAA,cACP,SAAS,EAAE,SAAS,KAAK;AAAA,cACzB,OAAO,EAAE,SAAS,KAAK;AAAA,cACvB,GAAI,WAAW,iBAAiB,CAAC;AAAA,cACjC,WAAW,EAAE,SAAS,MAAM;AAAA,YAC9B;AAAA,YACA,WAAW;AAAA,YACX,GAAG;AAAA,YACH,UAAU;AAAA,cACR;AAAA,gBACE,KAAK;AAAA,gBACL,SAAS,KAAoB;AAC3B,wBAAMpZ,MAAK;AACX,wBAAM,QAA0C;AAAA,oBAC9C,MAAMA,IAAG,aAAa,MAAM;AAAA,oBAC5B,OAAOA,IAAG,aAAa,OAAO;AAAA,oBAC9B,SAASA,IAAG,aAAa,cAAc;AAAA,kBAAA;AAElC,yBAAA;AAAA,oBACL,GAAG;AAAA,oBACH,GAAI,WAAW,mBAAmBA,KAAI,KAAK,IAAI,CAAC;AAAA,kBAAA;AAAA,gBAEpD;AAAA,cACF;AAAA,YACF;AAAA,YACA,MAAM,MAAY;AAChB,oBAAM,cAAc;AAEpB,kBAAI,YAAoC,CAAA;AACxC,kBAAI,UAAU;AACZ,4BAAY,oBAAoB;AAAA,kBAC9B,GAAG,KAAK;AAAA,kBACR,SAAS,CAAC,GAAG,KAAK,MAAM,SAAS,WAAW;AAAA,gBAAA,CAC7C;AAAA,cAAA,OACI;AACO,4BAAA,EAAE,OAAO;cACvB;AAEO,qBAAA;AAAA,gBACL;AAAA,gBACA;AAAA,kBACE,MAAM,KAAK,MAAM,YAAY,KAAK,MAAM,OAAO;AAAA,kBAC/C,OAAO,KAAK,MAAM;AAAA,kBAClB,gBAAgB,KAAK,MAAM;AAAA,kBAC3B,GAAG;AAAA,gBACL;AAAA,cAAA;AAAA,YAEJ;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,OAAO,gBAAgB;AAAA,gBACvB,MAAM;AAAA,gBACN,UAAU,CAAC,QAAqB;AACxB,wBAAA+B,UAAS,IAAI,EAAE;AAGrB,sBAAI,OAAOA,QAAO;AACZ,wBAAA,aAAa,aAAa,IAAI;AAChC,sBAAA,WAAW,MAAM,iBAAiB,GAAG;AAChC,2BAAA;AAAA,kBACT;AAEO,yBAAA;AAAA,oBACL;AAAA,oBACA,OAAOA,QAAO,qBAAqB;AAAA,oBACnC,GAAI,WAAW,kBAAkB,KAAK,SAAS,IAAI,CAAC;AAAA,kBAAA;AAAA,gBAExD;AAAA,gBACA,aAAa,CAAC,QAAqB;AAC3B,wBAAA,WAAW,IAAI,EAAE;AACnB,sBAAA,SAAS,SAAS,GAAG;AAChB,2BAAA;AAAA,kBAAA,OACF;AACL,2BAAO,CAAC;AAAA,sBACN,GAAG,gBAAgB;AAAA,oBAAA,CACpB;AAAA,kBACH;AAAA,gBACF;AAAA,gBAEA,eAAe,wBAAwB,gBAAgB,IAAI,4BAA4B;AAAA,cACzF;AAAA,YACF;AAAA,YAEA,QAAQ;AAAA,cACN,UAAU;AAAA,cACV,OAAO,CAAC,QAAsB,MAAY,WAAqB;AACzD,oBAAA,KAAK,MAAM,SAAS;AACtB,yBAAO,iBAAiB,GAAG;AAC3B,yBAAO,aAAa,MAAM;AAC1B,yBAAO,iBAAiB,GAAG;AAAA,gBAAA,OACtB;AACE,yBAAA;AAAA,oBACL,KAAK,MAAM;AAAA,oBACX,KAAK,MAAM;AAAA,oBACX,WAAY,KAAK,QAAuB;AAAA,oBACxC,MAAM;AACJ,6BAAO,aAAa,MAAM;AAAA,oBAC5B;AAAA,kBAAA;AAAA,gBAEJ;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,UAAU,CAACZ,YAAmB;AACrB,eAAA;AAAA,UACL,IAAI;AAAA,YACF,gBAAgB;AAAA,YAChB,CAAC,OAAO;AAAA,YACR,YAAYA,QAAO,MAAM,MAAMiY,IAAG,QAAQ,UAAU,YAAY;AAAA,YAChE,eAAeA,GAAE;AAAA,UACnB;AAAA,UACA,IAAI,mBAAmB,gBAAgB,YAAY,CAAA,GAAI,kBAAkBjY,QAAO,MAAM,IAAI,CAAC;AAAA,QAAA;AAAA,MAE/F;AAAA,MAEA,YAAY,eAAe,QAAQ;AAAA,MAEnC,mBAAmB,MACjB,iBAAiB,6BAA6B,CAAC,kCAAkC,CAAC,IAAI,CAAC;AAAA,MAEzF,SAAS,CAACA,YAAmB;AAC3B,cAAM,UAAU;AAAA,UACd;AAAA,YACEA;AAAA,YACAiY;AAAA,YACA;AAAA,YACA,YAAYjY,QAAO,MAAM,MAAMiY,IAAG,QAAQ,UAAU,YAAY;AAAA,YAChE,kBAAkBjY,QAAO,MAAM,IAAI;AAAA,UACrC;AAAA,QAAA;AAEF,YAAI,UAAU;AACJ,kBAAA;AAAA,YACN,IAAI,OAAO;AAAA,cACT,KAAK,IAAI,UAAU,WAAW;AAAA,cAC9B,OAAO;AAAA,gBACL,iBAAiB,iBAAiBA,OAAM;AAAA,cAC1C;AAAA,YAAA,CACD;AAAA,UAAA;AAAA,QAEL;AACO,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AClNA,MAAI,iBAAiB;AAKrB,MAAI,eAAe,SAASs1B,gBAAgB;AAAA;AAE5C,eAAa,UAAU,SAAS,SAAS3H,QAAQ,OAAO;AACtD,QAAI,CAAC,MAAM,QAAQ;AAAE,aAAO;AAAA,IAAM;AAClC,YAAQ,aAAa,KAAK,KAAK;AAE/B,WAAQ,CAAC,KAAK,UAAU,SACrB,MAAM,SAAS,kBAAkB,KAAK,WAAW,KAAK,KACtD,KAAK,SAAS,kBAAkB,MAAM,YAAY,IAAI,KACvD,KAAK,YAAY,KAAK;AAAA,EAC1B;AAIA,eAAa,UAAU,UAAU,SAAS,QAAS,OAAO;AACxD,QAAI,CAAC,MAAM,QAAQ;AAAE,aAAO;AAAA,IAAM;AAClC,WAAO,aAAa,KAAK,KAAK,EAAE,OAAO,IAAI;AAAA,EAC7C;AAEA,eAAa,UAAU,cAAc,SAAS,YAAa,OAAO;AAChE,WAAO,IAAI,OAAO,MAAM,KAAK;AAAA,EAC/B;AAIA,eAAa,UAAU,QAAQ,SAASltB,OAAOhB,OAAM,IAAI;AACrD,QAAKA,UAAS;AAAS,MAAAA,QAAO;AAC9B,QAAK,OAAO;AAAS,WAAK,KAAK;AAEjC,QAAIA,SAAQ,IAAI;AAAE,aAAO,aAAa;AAAA,IAAO;AAC7C,WAAO,KAAK,WAAW,KAAK,IAAI,GAAGA,KAAI,GAAG,KAAK,IAAI,KAAK,QAAQ,EAAE,CAAC;AAAA,EACrE;AAIA,eAAa,UAAU,MAAM,SAASqb,KAAK/b,IAAG;AAC5C,QAAIA,KAAI,KAAKA,MAAK,KAAK,QAAQ;AAAE,aAAO;AAAA,IAAW;AACnD,WAAO,KAAK,SAASA,EAAC;AAAA,EACxB;AAOA,eAAa,UAAU,UAAU,SAAS,QAASG,IAAGO,OAAM,IAAI;AAC5D,QAAKA,UAAS;AAAS,MAAAA,QAAO;AAC9B,QAAK,OAAO;AAAS,WAAK,KAAK;AAEjC,QAAIA,SAAQ,IACV;AAAE,WAAK,aAAaP,IAAGO,OAAM,IAAI,CAAC;AAAA,IAAI,OAEtC;AAAE,WAAK,qBAAqBP,IAAGO,OAAM,IAAI,CAAC;AAAA,IAAI;AAAA,EAClD;AAKA,eAAa,UAAU,MAAM,SAASN,KAAKD,IAAGO,OAAM,IAAI;AACpD,QAAKA,UAAS;AAAS,MAAAA,QAAO;AAC9B,QAAK,OAAO;AAAS,WAAK,KAAK;AAEjC,QAAI,SAAS,CAAA;AACb,SAAK,QAAQ,SAAU,KAAKV,IAAG;AAAE,aAAO,OAAO,KAAKG,GAAE,KAAKH,EAAC,CAAC;AAAA,IAAE,GAAIU,OAAM,EAAE;AAC3E,WAAO;AAAA,EACT;AAKA,eAAa,OAAO,SAASA,MAAM,QAAQ;AACzC,QAAI,kBAAkB,cAAc;AAAE,aAAO;AAAA,IAAQ;AACrD,WAAO,UAAU,OAAO,SAAS,IAAI,KAAK,MAAM,IAAI,aAAa;AAAA,EACnE;AAEA,MAAI,OAAqB,yBAAU61B,eAAc;AAC/C,aAASC,MAAK,QAAQ;AACpB,MAAAD,cAAa,KAAK,IAAI;AACtB,WAAK,SAAS;AAAA,IACf;AAED,QAAKA;AAAe,MAAAC,MAAK,YAAYD;AACrC,IAAAC,MAAK,YAAY,OAAO,OAAQD,iBAAgBA,cAAa;AAC7D,IAAAC,MAAK,UAAU,cAAcA;AAE7B,QAAI,qBAAqB,EAAE,QAAQ,EAAE,cAAc,QAAO,OAAO,EAAE,cAAc,KAAI;AAErF,IAAAA,MAAK,UAAU,UAAU,SAAShrB,WAAW;AAC3C,aAAO,KAAK;AAAA,IAChB;AAEE,IAAAgrB,MAAK,UAAU,aAAa,SAAS,WAAY91B,OAAM,IAAI;AACzD,UAAIA,SAAQ,KAAK,MAAM,KAAK,QAAQ;AAAE,eAAO;AAAA,MAAM;AACnD,aAAO,IAAI81B,MAAK,KAAK,OAAO,MAAM91B,OAAM,EAAE,CAAC;AAAA,IAC/C;AAEE,IAAA81B,MAAK,UAAU,WAAW,SAAS,SAAUx2B,IAAG;AAC9C,aAAO,KAAK,OAAOA;AAAA,IACvB;AAEE,IAAAw2B,MAAK,UAAU,eAAe,SAAS,aAAcr2B,IAAGO,OAAM,IAAI,OAAO;AACvE,eAASV,KAAIU,OAAMV,KAAI,IAAIA,MACzB;AAAE,YAAIG,GAAE,KAAK,OAAOH,KAAI,QAAQA,EAAC,MAAM,OAAO;AAAE,iBAAO;AAAA,QAAK;AAAA,MAAI;AAAA,IACtE;AAEE,IAAAw2B,MAAK,UAAU,uBAAuB,SAAS,qBAAsBr2B,IAAGO,OAAM,IAAI,OAAO;AACvF,eAASV,KAAIU,QAAO,GAAGV,MAAK,IAAIA,MAC9B;AAAE,YAAIG,GAAE,KAAK,OAAOH,KAAI,QAAQA,EAAC,MAAM,OAAO;AAAE,iBAAO;AAAA,QAAK;AAAA,MAAI;AAAA,IACtE;AAEE,IAAAw2B,MAAK,UAAU,aAAa,SAAS,WAAY,OAAO;AACtD,UAAI,KAAK,SAAS,MAAM,UAAU,gBAChC;AAAE,eAAO,IAAIA,MAAK,KAAK,OAAO,OAAO,MAAM,QAAS,CAAA,CAAC;AAAA,MAAG;AAAA,IAC9D;AAEE,IAAAA,MAAK,UAAU,cAAc,SAAS,YAAa,OAAO;AACxD,UAAI,KAAK,SAAS,MAAM,UAAU,gBAChC;AAAE,eAAO,IAAIA,MAAK,MAAM,QAAS,EAAC,OAAO,KAAK,MAAM,CAAC;AAAA,MAAG;AAAA,IAC9D;AAEE,uBAAmB,OAAO,MAAM,WAAY;AAAE,aAAO,KAAK,OAAO;AAAA;AAEjE,uBAAmB,MAAM,MAAM,WAAY;AAAE,aAAO;AAAA,IAAC;AAErD,WAAO,iBAAkBA,MAAK,WAAW,kBAAkB;AAE3D,WAAOA;AAAA,EACT,EAAE,YAAY;AAId,eAAa,QAAQ,IAAI,KAAK,CAAA,CAAE;AAEhC,MAAI,SAAuB,yBAAUD,eAAc;AACjD,aAASE,QAAO,MAAM,OAAO;AAC3B,MAAAF,cAAa,KAAK,IAAI;AACtB,WAAK,OAAO;AACZ,WAAK,QAAQ;AACb,WAAK,SAAS,KAAK,SAAS,MAAM;AAClC,WAAK,QAAQ,KAAK,IAAI,KAAK,OAAO,MAAM,KAAK,IAAI;AAAA,IAClD;AAED,QAAKA;AAAe,MAAAE,QAAO,YAAYF;AACvC,IAAAE,QAAO,YAAY,OAAO,OAAQF,iBAAgBA,cAAa;AAC/D,IAAAE,QAAO,UAAU,cAAcA;AAE/B,IAAAA,QAAO,UAAU,UAAU,SAASjrB,WAAW;AAC7C,aAAO,KAAK,KAAK,QAAS,EAAC,OAAO,KAAK,MAAM,SAAS;AAAA,IAC1D;AAEE,IAAAirB,QAAO,UAAU,WAAW,SAAS,SAAUz2B,IAAG;AAChD,aAAOA,KAAI,KAAK,KAAK,SAAS,KAAK,KAAK,IAAIA,EAAC,IAAI,KAAK,MAAM,IAAIA,KAAI,KAAK,KAAK,MAAM;AAAA,IACxF;AAEE,IAAAy2B,QAAO,UAAU,eAAe,SAAS,aAAct2B,IAAGO,OAAM,IAAI,OAAO;AACzE,UAAI,UAAU,KAAK,KAAK;AACxB,UAAIA,QAAO,WACP,KAAK,KAAK,aAAaP,IAAGO,OAAM,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,MAAM,OACpE;AAAE,eAAO;AAAA,MAAO;AAClB,UAAI,KAAK,WACL,KAAK,MAAM,aAAaP,IAAG,KAAK,IAAIO,QAAO,SAAS,CAAC,GAAG,KAAK,IAAI,KAAK,QAAQ,EAAE,IAAI,SAAS,QAAQ,OAAO,MAAM,OACpH;AAAE,eAAO;AAAA,MAAO;AAAA,IACtB;AAEE,IAAA+1B,QAAO,UAAU,uBAAuB,SAAS,qBAAsBt2B,IAAGO,OAAM,IAAI,OAAO;AACzF,UAAI,UAAU,KAAK,KAAK;AACxB,UAAIA,QAAO,WACP,KAAK,MAAM,qBAAqBP,IAAGO,QAAO,SAAS,KAAK,IAAI,IAAI,OAAO,IAAI,SAAS,QAAQ,OAAO,MAAM,OAC3G;AAAE,eAAO;AAAA,MAAO;AAClB,UAAI,KAAK,WACL,KAAK,KAAK,qBAAqBP,IAAG,KAAK,IAAIO,OAAM,OAAO,GAAG,IAAI,KAAK,MAAM,OAC5E;AAAE,eAAO;AAAA,MAAO;AAAA,IACtB;AAEE,IAAA+1B,QAAO,UAAU,aAAa,SAAS,WAAY/1B,OAAM,IAAI;AAC3D,UAAIA,SAAQ,KAAK,MAAM,KAAK,QAAQ;AAAE,eAAO;AAAA,MAAM;AACnD,UAAI,UAAU,KAAK,KAAK;AACxB,UAAI,MAAM,SAAS;AAAE,eAAO,KAAK,KAAK,MAAMA,OAAM,EAAE;AAAA,MAAG;AACvD,UAAIA,SAAQ,SAAS;AAAE,eAAO,KAAK,MAAM,MAAMA,QAAO,SAAS,KAAK,OAAO;AAAA,MAAG;AAC9E,aAAO,KAAK,KAAK,MAAMA,OAAM,OAAO,EAAE,OAAO,KAAK,MAAM,MAAM,GAAG,KAAK,OAAO,CAAC;AAAA,IAClF;AAEE,IAAA+1B,QAAO,UAAU,aAAa,SAAS,WAAY,OAAO;AACxD,UAAI,QAAQ,KAAK,MAAM,WAAW,KAAK;AACvC,UAAI,OAAO;AAAE,eAAO,IAAIA,QAAO,KAAK,MAAM,KAAK;AAAA,MAAG;AAAA,IACtD;AAEE,IAAAA,QAAO,UAAU,cAAc,SAAS,YAAa,OAAO;AAC1D,UAAI,QAAQ,KAAK,KAAK,YAAY,KAAK;AACvC,UAAI,OAAO;AAAE,eAAO,IAAIA,QAAO,OAAO,KAAK,KAAK;AAAA,MAAG;AAAA,IACvD;AAEE,IAAAA,QAAO,UAAU,cAAc,SAAS,YAAa,OAAO;AAC1D,UAAI,KAAK,KAAK,SAAS,KAAK,IAAI,KAAK,MAAM,OAAO,MAAM,KAAK,IAAI,GAC/D;AAAE,eAAO,IAAIA,QAAO,KAAK,MAAM,IAAIA,QAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MAAG;AACjE,aAAO,IAAIA,QAAO,MAAM,KAAK;AAAA,IACjC;AAEE,WAAOA;AAAA,EACT,EAAE,YAAY;AAEd,MAAI,eAAe;AC1LnB,QAAM,kBAAkB;AACxB,QAAM,OAAO;AAAA,IACT,YAAY,OAAO,YAAY;AAC3B,WAAK,QAAQ;AACb,WAAK,aAAa;AAAA,IACrB;AAAA,IAGD,SAAS,OAAO,eAAe;AAC3B,UAAI,KAAK,cAAc;AACnB,eAAO;AACX,UAAI,MAAM,KAAK,MAAM;AACrB,eAAQ,OAAO;AACX,YAAI30B,QAAO,KAAK,MAAM,IAAI,MAAM,CAAC;AACjC,YAAIA,MAAK,WAAW;AAChB,YAAE;AACF;AAAA,QACH;AAAA,MACJ;AACD,UAAI,OAAO;AACX,UAAI,eAAe;AACf,gBAAQ,KAAK,UAAU,KAAK,KAAK,MAAM,MAAM;AAC7C,kBAAU,MAAM,KAAK;AAAA,MACxB;AACD,UAAI,YAAY,MAAM;AACtB,UAAI,WAAW;AACf,UAAI,WAAW,CAAA,GAAI,YAAY;AAC/B,WAAK,MAAM,QAAQ,CAAC,MAAM9B,OAAM;AAC5B,YAAI,CAAC,KAAK,MAAM;AACZ,cAAI,CAAC,OAAO;AACR,oBAAQ,KAAK,UAAU,KAAKA,KAAI,CAAC;AACjC,sBAAU,MAAM,KAAK;AAAA,UACxB;AACD;AACA,oBAAU,KAAK,IAAI;AACnB;AAAA,QACH;AACD,YAAI,OAAO;AACP,oBAAU,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;AACjC,cAAIwE,QAAO,KAAK,KAAK,IAAI,MAAM,MAAM,OAAO,CAAC,GAAGpE;AAChD,cAAIoE,SAAQ,UAAU,UAAUA,KAAI,EAAE,KAAK;AACvC,YAAApE,OAAM,UAAU,QAAQ,KAAK,UAAU,QAAQ,KAAK,SAAS;AAC7D,qBAAS,KAAK,IAAI,KAAKA,MAAK,QAAW,QAAW,SAAS,SAAS,UAAU,MAAM,CAAC;AAAA,UACxF;AACD;AACA,cAAIA;AACA,kBAAM,UAAUA,MAAK,OAAO;AAAA,QACnC,OACI;AACD,oBAAU,UAAU,KAAK,IAAI;AAAA,QAChC;AACD,YAAI,KAAK,WAAW;AAChB,sBAAY,QAAQ,KAAK,UAAU,IAAI,MAAM,MAAM,OAAO,CAAC,IAAI,KAAK;AACpE,sBAAY,IAAI,OAAO,KAAK,MAAM,MAAM,GAAG,GAAG,EAAE,OAAO,UAAU,QAAO,EAAG,OAAO,QAAQ,CAAC,GAAG,KAAK,aAAa,CAAC;AACjH,iBAAO;AAAA,QACV;AAAA,MACJ,GAAE,KAAK,MAAM,QAAQ,CAAC;AACvB,aAAO,EAAE,WAAsB,WAAW,UAAoB;AAAA,IACjE;AAAA,IAED,aAAa,WAAW,WAAW,aAAa,eAAe;AAC3D,UAAI,WAAW,CAAE,GAAE,aAAa,KAAK;AACrC,UAAI,WAAW,KAAK,OAAO,WAAW,CAAC,iBAAiB,SAAS,SAAS,SAAS,IAAI,SAAS,SAAS,CAAC,IAAI;AAC9G,eAASJ,KAAI,GAAGA,KAAI,UAAU,MAAM,QAAQA,MAAK;AAC7C,YAAIwE,QAAO,UAAU,MAAMxE,IAAG,OAAO,UAAU,KAAKA,GAAE;AACtD,YAAI,OAAO,IAAI,KAAK,UAAU,QAAQ,KAAKA,KAAIwE,OAAM,SAAS,GAAG;AACjE,YAAI,SAAS,YAAY,SAAS,MAAM,IAAI,GAAG;AAC3C,iBAAO;AACP,cAAIxE;AACA,qBAAS,IAAG;AAAA;AAEZ,uBAAW,SAAS,MAAM,GAAG,SAAS,SAAS,CAAC;AAAA,QACvD;AACD,iBAAS,KAAK,IAAI;AAClB,YAAI,WAAW;AACX;AACA,sBAAY;AAAA,QACf;AACD,YAAI,CAAC;AACD,qBAAW;AAAA,MAClB;AACD,UAAI,WAAW,aAAa,YAAY;AACxC,UAAI,WAAW,gBAAgB;AAC3B,mBAAW,aAAa,UAAU,QAAQ;AAC1C,sBAAc;AAAA,MACjB;AACD,aAAO,IAAI,OAAO,SAAS,OAAO,QAAQ,GAAG,UAAU;AAAA,IAC1D;AAAA,IACD,UAAUU,OAAM,IAAI;AAChB,UAAI,OAAO,IAAI;AACf,WAAK,MAAM,QAAQ,CAAC,MAAMV,OAAM;AAC5B,YAAI,YAAY,KAAK,gBAAgB,QAAQA,KAAI,KAAK,gBAAgBU,QAChE,KAAK,KAAK,SAAS,KAAK,eAAe;AAC7C,aAAK,UAAU,KAAK,KAAK,SAAS;AAAA,MAC9C,GAAWA,OAAM,EAAE;AACX,aAAO;AAAA,IACV;AAAA,IACD,QAAQ,OAAO;AACX,UAAI,KAAK,cAAc;AACnB,eAAO;AACX,aAAO,IAAI,OAAO,KAAK,MAAM,OAAO,MAAM,IAAI,CAAAN,SAAO,IAAI,KAAKA,IAAG,CAAC,CAAC,GAAG,KAAK,UAAU;AAAA,IACxF;AAAA,IAKD,QAAQ,kBAAkB,cAAc;AACpC,UAAI,CAAC,KAAK;AACN,eAAO;AACX,UAAI,eAAe,CAAA,GAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,YAAY;AAC3E,UAAI,UAAU,iBAAiB;AAC/B,UAAI,WAAW,iBAAiB,MAAM;AACtC,UAAI,aAAa,KAAK;AACtB,WAAK,MAAM,QAAQ,UAAQ;AAAE,YAAI,KAAK;AAClC;AAAA,SAAiB,KAAK;AAC1B,UAAI,WAAW;AACf,WAAK,MAAM,QAAQ,UAAQ;AACvB,YAAI,MAAM,QAAQ,UAAU,EAAE,QAAQ;AACtC,YAAI,OAAO;AACP;AACJ,mBAAW,KAAK,IAAI,UAAU,GAAG;AACjC,YAAIA,OAAM,QAAQ,KAAK;AACvB,YAAI,KAAK,MAAM;AACX,cAAIoE,QAAO,iBAAiB,MAAM,KAAK,OAAO,iBAAiB,KAAK,IAAI;AACxE,cAAI,YAAY,KAAK,aAAa,KAAK,UAAU,IAAI,QAAQ,MAAM,WAAW,GAAG,GAAG,CAAC;AACrF,cAAI;AACA;AACJ,uBAAa,KAAK,IAAI,KAAKpE,MAAKoE,OAAM,SAAS,CAAC;AAAA,QACnD,OACI;AACD,uBAAa,KAAK,IAAI,KAAKpE,IAAG,CAAC;AAAA,QAClC;AAAA,MACJ,GAAE,KAAK;AACR,UAAI,UAAU,CAAA;AACd,eAASJ,KAAI,cAAcA,KAAI,UAAUA;AACrC,gBAAQ,KAAK,IAAI,KAAK,QAAQ,KAAKA,GAAE,CAAC;AAC1C,UAAI,QAAQ,KAAK,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,OAAO,EAAE,OAAO,YAAY;AAC1E,UAAI,SAAS,IAAI,OAAO,OAAO,UAAU;AACzC,UAAI,OAAO,eAAc,IAAK;AAC1B,iBAAS,OAAO,SAAS,KAAK,MAAM,SAAS,aAAa,MAAM;AACpE,aAAO;AAAA,IACV;AAAA,IACD,iBAAiB;AACb,UAAI,QAAQ;AACZ,WAAK,MAAM,QAAQ,UAAQ;AAAE,YAAI,CAAC,KAAK;AACnC;AAAA,MAAQ,CAAE;AACd,aAAO;AAAA,IACV;AAAA,IAOD,SAAS,OAAO,KAAK,MAAM,QAAQ;AAC/B,UAAI,QAAQ,KAAK,UAAU,GAAG,IAAI,GAAG,UAAU,MAAM,KAAK;AAC1D,UAAI,QAAQ,CAAA,GAAI,SAAS;AACzB,WAAK,MAAM,QAAQ,CAAC,MAAMA,OAAM;AAC5B,YAAIA,MAAK,MAAM;AACX,gBAAM,KAAK,IAAI;AACf,cAAI,KAAK;AACL;AAAA,QACP,WACQ,KAAK,MAAM;AAChB,cAAIwE,QAAO,KAAK,KAAK,IAAI,MAAM,MAAM,OAAO,CAAC,GAAGpE,OAAMoE,SAAQA,MAAK,OAAM;AACzE;AACA,cAAIpE;AACA,kBAAM,UAAUA,MAAK,OAAO;AAChC,cAAIoE,OAAM;AACN,gBAAI,YAAY,KAAK,aAAa,KAAK,UAAU,IAAI,MAAM,MAAM,OAAO,CAAC;AACzE,gBAAI;AACA;AACJ,gBAAI,UAAU,IAAI,KAAKpE,KAAI,OAAM,GAAIoE,OAAM,SAAS,GAAG,QAAQ3D,QAAO,MAAM,SAAS;AACrF,gBAAI,SAAS,MAAM,UAAU,MAAMA,OAAM,MAAM,OAAO;AAClD,oBAAMA,SAAQ;AAAA;AAEd,oBAAM,KAAK,OAAO;AAAA,UACzB;AAAA,QACJ,WACQ,KAAK,KAAK;AACf;AAAA,QACH;AAAA,MACJ,GAAE,KAAK,MAAM,QAAQ,CAAC;AACvB,aAAO,IAAI,OAAO01B,aAAa,KAAK,MAAM,QAAS,CAAA,GAAG,MAAM;AAAA,IAC/D;AAAA,EACL;AACA,SAAO,QAAQ,IAAI,OAAOA,aAAa,OAAO,CAAC;AAC/C,WAAS,aAAa,OAAOv1B,IAAG;AAC5B,QAAI;AACJ,UAAM,QAAQ,CAAC,MAAMhB,OAAM;AACvB,UAAI,KAAK,aAAcgB,QAAO,GAAI;AAC9B,mBAAWhB;AACX,eAAO;AAAA,MACV;AAAA,IACT,CAAK;AACD,WAAO,MAAM,MAAM,QAAQ;AAAA,EAC/B;AACA,QAAM,KAAK;AAAA,IACP,YAEAI,MAEAoE,OAIA,WAGA,cAAc;AACV,WAAK,MAAMpE;AACX,WAAK,OAAOoE;AACZ,WAAK,YAAY;AACjB,WAAK,eAAe;AAAA,IACvB;AAAA,IACD,MAAM,OAAO;AACT,UAAI,KAAK,QAAQ,MAAM,QAAQ,CAAC,MAAM,WAAW;AAC7C,YAAIA,QAAO,MAAM,KAAK,MAAM,KAAK,IAAI;AACrC,YAAIA;AACA,iBAAO,IAAI,KAAKA,MAAK,OAAQ,EAAC,OAAM,GAAIA,OAAM,KAAK,SAAS;AAAA,MACnE;AAAA,IACJ;AAAA,EACL;AAIA,QAAM,aAAa;AAAA,IACf,YAAY,MAAM,QAAQ,YAAY,UAAU;AAC5C,WAAK,OAAO;AACZ,WAAK,SAAS;AACd,WAAK,aAAa;AAClB,WAAK,WAAW;AAAA,IACnB;AAAA,EACL;AACA,QAAM,iBAAiB;AAEvB,WAAS,iBAAiBoU,UAAS,OAAO,IAAI,SAAS;AACnD,QAAI,YAAY,GAAG,QAAQ,UAAU,GAAG;AACxC,QAAI;AACA,aAAO,UAAU;AACrB,QAAI,GAAG,QAAQ,eAAe;AAC1B,MAAAA,WAAU,IAAI,aAAaA,SAAQ,MAAMA,SAAQ,QAAQ,MAAM,CAAC;AACpE,QAAI,WAAW,GAAG,QAAQ,qBAAqB;AAC/C,QAAI,GAAG,MAAM,UAAU,GAAG;AACtB,aAAOA;AAAA,IACV,WACQ,YAAY,SAAS,QAAQ,UAAU,GAAG;AAC/C,UAAI,SAAS,QAAQ,UAAU,EAAE;AAC7B,eAAO,IAAI,aAAaA,SAAQ,KAAK,aAAa,IAAI,QAAW,SAAS,kBAAkB,KAAK,CAAC,GAAGA,SAAQ,QAAQ,UAAU,GAAG,QAAQ,KAAK,GAAG,MAAM,SAAS,EAAE,GAAGA,SAAQ,QAAQ;AAAA;AAEtL,eAAO,IAAI,aAAaA,SAAQ,MAAMA,SAAQ,OAAO,aAAa,IAAI,QAAW,SAAS,kBAAkB,KAAK,CAAC,GAAG,MAAMA,SAAQ,QAAQ;AAAA,IAClJ,WACQ,GAAG,QAAQ,cAAc,MAAM,SAAS,EAAE,YAAY,SAAS,QAAQ,cAAc,MAAM,QAAQ;AAExG,UAAI,WAAWA,SAAQ,YAAY,KAAK,CAAC,aAAaA,SAAQ,YAAY,GAAG,QAAQ,KAAK,QAAQ,iBAC9F,CAAC,aAAa,IAAIA,SAAQ,UAAU;AACxC,UAAI,aAAa,WAAW,UAAUA,SAAQ,YAAY,GAAG,OAAO,IAAI,UAAU,GAAG,QAAQ,KAAK,GAAG,MAAM,SAAS,EAAE;AACtH,aAAO,IAAI,aAAaA,SAAQ,KAAK,aAAa,IAAI,WAAW,MAAM,UAAU,YAAW,IAAK,QAAW,SAAS,kBAAkB,KAAK,CAAC,GAAG,OAAO,OAAO,YAAY,GAAG,IAAI;AAAA,IACpL,WACQ,UAAU,GAAG,QAAQ,SAAS,GAAG;AAGtC,aAAO,IAAI,aAAaA,SAAQ,KAAK,QAAQ,IAAI,OAAO,GAAGA,SAAQ,OAAO,QAAQ,IAAI,OAAO,GAAG,UAAUA,SAAQ,YAAY,GAAG,OAAO,GAAGA,SAAQ,QAAQ;AAAA,IAC9J,OACI;AACD,aAAO,IAAI,aAAaA,SAAQ,KAAK,QAAQ,GAAG,QAAQ,IAAI,GAAGA,SAAQ,OAAO,QAAQ,GAAG,QAAQ,IAAI,GAAG,UAAUA,SAAQ,YAAY,GAAG,OAAO,GAAGA,SAAQ,QAAQ;AAAA,IACtK;AAAA,EACL;AACA,WAAS,aAAa,WAAW,YAAY;AACzC,QAAI,CAAC;AACD,aAAO;AACX,QAAI,CAAC,UAAU;AACX,aAAO;AACX,QAAI,WAAW;AACf,cAAU,QAAQ,KAAK,GAAG,QAAQ,CAAC,OAAO,QAAQ;AAC9C,eAAS5Y,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AACxC,YAAI,SAAS,WAAWA,KAAI,MAAM,OAAO,WAAWA;AAChD,qBAAW;AAAA,IAC3B,CAAK;AACD,WAAO;AAAA,EACX;AACA,WAAS,UAAUI,MAAK;AACpB,QAAI,SAAS,CAAA;AACb,IAAAA,KAAI,QAAQ,CAAC,OAAO,KAAKM,OAAM,OAAO,OAAO,KAAKA,OAAM,EAAE,CAAC;AAC3D,WAAO;AAAA,EACX;AACA,WAAS,UAAU,QAAQ,SAAS;AAChC,QAAI,CAAC;AACD,aAAO;AACX,QAAI,SAAS,CAAA;AACb,aAASV,KAAI,GAAGA,KAAI,OAAO,QAAQA,MAAK,GAAG;AACvC,UAAIU,QAAO,QAAQ,IAAI,OAAOV,KAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAOA,KAAI,IAAI,EAAE;AACxE,UAAIU,SAAQ;AACR,eAAO,KAAKA,OAAM,EAAE;AAAA,IAC3B;AACD,WAAO;AAAA,EACX;AAGA,WAAS,gBAAgBkY,UAAS,OAAO,UAAU8d,OAAM;AACrD,QAAI,gBAAgB,kBAAkB,KAAK;AAC3C,QAAI,cAAc,WAAW,IAAI,KAAK,EAAE,KAAK;AAC7C,QAAIC,QAAOD,QAAO9d,SAAQ,SAASA,SAAQ,MAAM,SAAS,OAAO,aAAa;AAC9E,QAAI,CAAC+d;AACD;AACJ,QAAI,YAAYA,KAAI,UAAU,QAAQA,KAAI,UAAU,GAAG;AACvD,QAAI,SAASD,QAAO9d,SAAQ,OAAOA,SAAQ,QAAQ,aAAa+d,KAAI,WAAW,MAAM,UAAU,YAAW,GAAI,aAAa,aAAa;AACxI,QAAI,UAAU,IAAI,aAAaD,QAAO,QAAQC,KAAI,WAAWD,QAAOC,KAAI,YAAY,OAAO,MAAM,CAAC;AAClG,aAASA,KAAI,UAAU,aAAa,SAAS,EAAE,QAAQ,YAAY,EAAE,MAAAD,OAAM,cAAc,QAAS,CAAA,EAAE,eAAgB,CAAA;AAAA,EACxH;AACA,MAAI,sBAAsB,OAAO,6BAA6B;AAK9D,WAAS,kBAAkB,OAAO;AAC9B,QAAI,UAAU,MAAM;AACpB,QAAI,8BAA8B,SAAS;AACvC,4BAAsB;AACtB,mCAA6B;AAC7B,eAAS12B,KAAI,GAAGA,KAAI,QAAQ,QAAQA;AAChC,YAAI,QAAQA,IAAG,KAAK,sBAAsB;AACtC,gCAAsB;AACtB;AAAA,QACH;AAAA,IACR;AACD,WAAO;AAAA,EACX;AASA,QAAM,aAAa,IAAI,UAAU,SAAS;AAC1C,QAAM,kBAAkB,IAAI,UAAU,cAAc;AAUpD,WAAS4Y,UAAQ,SAAS,IAAI;AAC1B,aAAS;AAAA,MAAE,OAAO,OAAO,SAAS;AAAA,MAC9B,eAAe,OAAO,iBAAiB;AAAA;AAC3C,WAAO,IAAI,OAAO;AAAA,MACd,KAAK;AAAA,MACL,OAAO;AAAA,QACH,OAAO;AACH,iBAAO,IAAI,aAAa,OAAO,OAAO,OAAO,OAAO,MAAM,CAAC;AAAA,QAC9D;AAAA,QACD,MAAM,IAAI,MAAM,OAAO;AACnB,iBAAO,iBAAiB,MAAM,OAAO,IAAI,MAAM;AAAA,QAClD;AAAA,MACJ;AAAA,MACD;AAAA,MACA,OAAO;AAAA,QACH,iBAAiB;AAAA,UACb,YAAY,MAAMzU,IAAG;AACjB,gBAAI,YAAYA,GAAE;AAClB,gBAAI,UAAU,aAAa,gBAAgB,OAAO,aAAa,gBAAgB,OAAO;AACtF,gBAAI,CAAC;AACD,qBAAO;AACX,YAAAA,GAAE,eAAc;AAChB,mBAAO,QAAQ,KAAK,OAAO,KAAK,QAAQ;AAAA,UAC3C;AAAA,QACJ;AAAA,MACJ;AAAA,IACT,CAAK;AAAA,EACL;AAIA,QAAM,OAAO,CAAC,OAAO,aAAa;AAC9B,QAAI,OAAO,WAAW,SAAS,KAAK;AACpC,QAAI,CAAC,QAAQ,KAAK,KAAK,cAAc;AACjC,aAAO;AACX,QAAI;AACA,sBAAgB,MAAM,OAAO,UAAU,KAAK;AAChD,WAAO;AAAA,EACX;AAIA,QAAM,OAAO,CAAC,OAAO,aAAa;AAC9B,QAAI,OAAO,WAAW,SAAS,KAAK;AACpC,QAAI,CAAC,QAAQ,KAAK,OAAO,cAAc;AACnC,aAAO;AACX,QAAI;AACA,sBAAgB,MAAM,OAAO,UAAU,IAAI;AAC/C,WAAO;AAAA,EACX;AC5YA,QAAMsU,cAAuB;AAAA,IAC3B,UAAU,MAAM;AACP,aAAA;AAAA,QACL,IAAI,mBAAmB,gBAAgB,MAAM,CAAC,OAAO,GAAG,IAAI;AAAA,QAC5D,IAAI,mBAAmB,gBAAgB,MAAM,CAAC,aAAa,GAAG,IAAI;AAAA,MAAA;AAAA,IAEtE;AAAA,IAEA,SAAS,MAAM;AACN,aAAA,CAACG,WAAS;AAAA,IACnB;AAAA,EACF;ACPA,QAAMH,cAAuB;AAAA,IAC3B,UAAU,MAAM;AACP,aAAA,CAAC,IAAI,mBAAmB,gBAAgB,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;AAAA,IACjF;AAAA,EACF;AAEgB,WAAA,UAAU,OAAoB,UAAsC,MAAmB;AACrG,QAAI,UAAU;AACN,YAAA,cAAc,gBAAgB,MAAM,SAAS;AACnD,UAAI,aAAa;AACf,cAAMxX,UAAS,MAAM;AACrB,cAAM,KAAK,MAAM;AACjB,YAAI,YAAY,KAAK,SAASA,QAAO,MAAM,MAAM;AAC/C,aAAG,aAAa,qBAAqB,GAAG,KAAK,WAAW,CAAC;AAAA,QAAA,OACpD;AACL,gBAAM,QAAQ,GAAG,IAAI,QAAQ,YAAY,GAAG;AACtC,gBAAA,MAAM,GAAG,IAAI,QAAQ,YAAY,MAAM,YAAY,KAAK,QAAQ;AACtE,aAAG,aAAa,IAAI,cAAc,OAAO,GAAG,CAAC;AAAA,QAC/C;AACA,iBAAS,EAAE;AACX,YAAI,MAAM;AAER,eAAK,MAAM;AAAA,QACb;AAAA,MACF;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAEA,WAAS,qBAAqBgB,MAAsB,QAA4B;AACxE,UAAA,SAAS2J,iBAAe,OAAO,IAAI;AACzC,UAAM,QAAQ,OAAO,QAAQ,OAAO,GAAG,MAAM;AACvC,UAAA,YAAY,OAAO,OAAO,SAAS;AACzC,UAAM,MAAM,OAAO,QAAQ,UAAU,MAAM,UAAU,KAAK;AAC1D,WAAO,cAAc,OAAO3J,MAAK,OAAO,GAAG;AAAA,EAC7C;AC9CA,WAAS,WAAW,UAAU,IAAI;AAC9B,WAAO,IAAI,OAAO;AAAA,MACd,KAAK,YAAY;AAAE,eAAO,IAAI,eAAe,YAAY,OAAO;AAAA,MAAI;AAAA,IAC5E,CAAK;AAAA,EACL;AACA,QAAM,eAAe;AAAA,IACjB,YAAY,YAAY,SAAS;AAC7B,WAAK,aAAa;AAClB,WAAK,YAAY;AACjB,WAAK,UAAU;AACf,WAAK,UAAU;AACf,WAAK,QAAQ,QAAQ,SAAS;AAC9B,WAAK,QAAQ,QAAQ,SAAS;AAC9B,WAAK,QAAQ,QAAQ;AACrB,WAAK,WAAW,CAAC,YAAY,WAAW,QAAQ,WAAW,EAAE,IAAI,UAAQ;AACrE,YAAI,UAAU,CAACkC,OAAM;AAAE,eAAK,MAAMA,EAAC;AAAA;AACnC,mBAAW,IAAI,iBAAiB,MAAM,OAAO;AAC7C,eAAO,EAAE,MAAM;MAC3B,CAAS;AAAA,IACJ;AAAA,IACD,UAAU;AACN,WAAK,SAAS,QAAQ,CAAC,EAAE,MAAM,QAAS,MAAK,KAAK,WAAW,IAAI,oBAAoB,MAAM,OAAO,CAAC;AAAA,IACtG;AAAA,IACD,OAAO,YAAY,WAAW;AAC1B,UAAI,KAAK,aAAa,QAAQ,UAAU,OAAO,WAAW,MAAM,KAAK;AACjE,YAAI,KAAK,YAAY,WAAW,MAAM,IAAI,QAAQ;AAC9C,eAAK,UAAU,IAAI;AAAA;AAEnB,eAAK,cAAa;AAAA,MACzB;AAAA,IACJ;AAAA,IACD,UAAU,KAAK;AACX,UAAI,OAAO,KAAK;AACZ;AACJ,WAAK,YAAY;AACjB,UAAI,OAAO,MAAM;AACb,aAAK,QAAQ,WAAW,YAAY,KAAK,OAAO;AAChD,aAAK,UAAU;AAAA,MAClB,OACI;AACD,aAAK,cAAa;AAAA,MACrB;AAAA,IACJ;AAAA,IACD,gBAAgB;AACZ,UAAI,OAAO,KAAK,WAAW,MAAM,IAAI,QAAQ,KAAK,SAAS,GAAGwB;AAC9D,UAAI,CAAC,KAAK,OAAO,eAAe;AAC5B,YAAI,SAAS,KAAK,YAAY,QAAQ,KAAK;AAC3C,YAAI,UAAU,OAAO;AACjB,cAAI/E,QAAO,KAAK,WAAW,QAAQ,KAAK,aAAa,SAAS,OAAO,WAAW,EAAE;AAClF,cAAIA,OAAM;AACN,gBAAI,WAAWA,MAAK;AACpB,gBAAI6C,OAAM,SAAS,SAAS,SAAS,SAAS;AAC9C,gBAAI,UAAU;AACV,cAAAA,QAAOA,OAAM,KAAK,WAAW,QAAQ,KAAK,SAAS,EAAE,wBAAwB,OAAO;AACxF,YAAAkC,QAAO,EAAE,MAAM,SAAS,MAAM,OAAO,SAAS,OAAO,KAAKlC,OAAM,KAAK,QAAQ,GAAG,QAAQA,OAAM,KAAK,QAAQ;UAC9G;AAAA,QACJ;AAAA,MACJ;AACD,UAAI,CAACkC,OAAM;AACP,YAAI,SAAS,KAAK,WAAW,YAAY,KAAK,SAAS;AACvD,QAAAA,QAAO,EAAE,MAAM,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,OAAO,OAAO,KAAK,QAAQ,GAAG,KAAK,OAAO,KAAK,QAAQ,OAAO;MACrH;AACD,UAAI,SAAS,KAAK,WAAW,IAAI;AACjC,UAAI,CAAC,KAAK,SAAS;AACf,aAAK,UAAU,OAAO,YAAY,SAAS,cAAc,KAAK,CAAC;AAC/D,YAAI,KAAK;AACL,eAAK,QAAQ,YAAY,KAAK;AAClC,aAAK,QAAQ,MAAM,UAAU,8EAA8E,KAAK;AAAA,MACnH;AACD,UAAI,YAAY;AAChB,UAAI,CAAC,UAAU,UAAU,SAAS,QAAQ,iBAAiB,MAAM,EAAE,YAAY,UAAU;AACrF,qBAAa,CAAC;AACd,oBAAY,CAAC;AAAA,MAChB,OACI;AACD,YAAIA,QAAO,OAAO;AAClB,qBAAaA,MAAK,OAAO,OAAO;AAChC,oBAAYA,MAAK,MAAM,OAAO;AAAA,MACjC;AACD,WAAK,QAAQ,MAAM,OAAQA,MAAK,OAAO,aAAc;AACrD,WAAK,QAAQ,MAAM,MAAOA,MAAK,MAAM,YAAa;AAClD,WAAK,QAAQ,MAAM,QAASA,MAAK,QAAQA,MAAK,OAAQ;AACtD,WAAK,QAAQ,MAAM,SAAUA,MAAK,SAASA,MAAK,MAAO;AAAA,IAC1D;AAAA,IACD,gBAAgB,SAAS;AACrB,mBAAa,KAAK,OAAO;AACzB,WAAK,UAAU,WAAW,MAAM,KAAK,UAAU,IAAI,GAAG,OAAO;AAAA,IAChE;AAAA,IACD,SAAS,OAAO;AACZ,UAAI,CAAC,KAAK,WAAW;AACjB;AACJ,UAAI,MAAM,KAAK,WAAW,YAAY,EAAE,MAAM,MAAM,SAAS,KAAK,MAAM,QAAS,CAAA;AACjF,UAAI/E,QAAO,OAAO,IAAI,UAAU,KAAK,KAAK,WAAW,MAAM,IAAI,OAAO,IAAI,MAAM;AAChF,UAAI,oBAAoBA,SAAQA,MAAK,KAAK,KAAK;AAC/C,UAAI,WAAW,OAAO,qBAAqB,aAAa,kBAAkB,KAAK,YAAY,KAAK,KAAK,IAAI;AACzG,UAAI,OAAO,CAAC,UAAU;AAClB,YAAIiB,UAAS,IAAI;AACjB,YAAI,KAAK,WAAW,YAAY,KAAK,WAAW,SAAS,OAAO;AAC5D,UAAAA,UAAS,UAAU,KAAK,WAAW,MAAM,KAAKA,SAAQ,KAAK,WAAW,SAAS,KAAK;AACpF,cAAIA,WAAU;AACV,mBAAO,KAAK,UAAU,IAAI;AAAA,QACjC;AACD,aAAK,UAAUA,OAAM;AACrB,aAAK,gBAAgB,GAAI;AAAA,MAC5B;AAAA,IACJ;AAAA,IACD,UAAU;AACN,WAAK,gBAAgB,EAAE;AAAA,IAC1B;AAAA,IACD,OAAO;AACH,WAAK,gBAAgB,EAAE;AAAA,IAC1B;AAAA,IACD,UAAU,OAAO;AACb,UAAI,MAAM,UAAU,KAAK,WAAW,OAAO,CAAC,KAAK,WAAW,IAAI,SAAS,MAAM,aAAa;AACxF,aAAK,UAAU,IAAI;AAAA,IAC1B;AAAA,EACL;;;AChGA,QAAM4W,cAAuB;AAAA,IAE3B,UAAU,MAAM;AACP,aAAA;AAAA,QACL,EAAE,KAAK,QAAQ,WAAW,SAAS,gBAAgB,MAAM,EAAE;AAAA,QAC3D,EAAE,KAAK,QAAQ,SAAS,SAAS,gBAAgB,IAAI,EAAE;AAAA,MAAA;AAAA,IAE3D;AAAA,IAEA,SAAS,MAAM;AACN,aAAA;AAAA,QACL,UAAU;AAAA,QACV,WAAW;AAAA,QACX,IAAI,OAAO;AAAA,UACT,KAAK,IAAI,UAAU,gBAAgB;AAAA,UACnC,OAAO;AAAA,YACL,iBAAiB;AAAA,cACf,OAAO;AAAA,YACT;AAAA,UACF;AAAA,QAAA,CACD;AAAA,MAAA;AAAA,IACL;AAAA,EACF;AAEA,WAAS,gBAAgB,KAAoB;AACpC,WAAA,CAAC,OAAoB,UAAsC,SAAsB;;AAIhF,YAAA,kBAAkB,CAAC,SAAsB;AAC7C,YAAI,UAAU;AACN,gBAAAuF,UAAS,IAAI,UAAU,IAAI;AACjC,gBAAM,KAAK,MAAM;AACjB,aAAG,aAAaA,OAAM;AACtB,mBAAS,EAAE;AAAA,QACb;AACO,eAAA;AAAA,MAAA;AAGT,UAAI,MAAM,UAAU,SAAS,QAAQ,KAAK,eAAe,GAAG,GAAG;AAGvD,cAAA,QAAQ,MAAM,UAAU;AAI9B,YAAI,QAAQ,QAAQ,uCAAuC,MAAM,WAAW,GAAG,GAAG;AACzE,iBAAA;AAAA,QACT;AAGI,YAAA,MAAM,OAAO,MAAM,KAAK;AACpB,gBAAA2Q,OAAM1jB,uBAAqB,MAAM,OAAO,MAAM,GAAG,EAAE,MAAM,SAAS;AAGxE,cAAI0jB,MAAK;AAEP,kBAAM,UAAU,MAAM,IAAI,QAAQA,KAAI,GAAG;AACrC,gBAAA,MAAM,MAAM,MAAM,QAAQ,CAAC,MAAM,KAAK,EAAE,MAAM,qBAAqB,YAAY;AAGjF,kBAAI9jB,iBAAe,MAAM,EAAE,MAAM,SAAS,GAAG;AACpC,uBAAA;AAAA,cACT;AAEA,qBAAO,gBAAgB,MAAM,IAAI,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAAA,YAAA,aAEhD,aAAQ,eAAR,mBAAoB,UAAS,MAAM,OAAO,MAAM,KAAK;AAC9D,qBAAO,gBAAgB,MAAM,IAAI,QAAQ,QAAQ,GAAG,CAAC;AAAA,YACvD;AAAA,UACF;AAAA,QACF;AAIA,YAAI,CAAC,MAAM,cAAe,MAAM,OAAO,GAAI;AACzC,iBAAO,gBAAgB,MAAM,IAAI,QAAQ,MAAM,MAAM,CAAC,CAAC;AAAA,QACzD;AAEO,eAAA;AAAA,MAAA,OAEF;AACE,eAAA;AAAA,MACT;AAAA,IAAA;AAAA,EAIJ;AAGA,WAAS,gBAAgB,MAAkB,OAAuB;AAE1D,UAAA5J,UAAS,KAAK,MAAM;AAC1B,UAAM,aAAa;AACb,UAAA,WAAW,KAAK,YAAY,EAAE,MAAM,WAAW,SAAS,KAAK,WAAW,QAAU,CAAA;AAExF,QAAI,UAAU;AAGZ,YAAM,YAAY,KAAK,MAAM,IAAI,QAAQ,SAAS,GAAG;AAGrD,YAAM,kBAAkB,MAAM;AAE5B,aAAK,MAAM;AAGL,cAAA,KAAK,KAAK,MAAM;AAChB,cAAA+c,UAAS,IAAI,UAAU,SAAS;AACtC,WAAG,aAAaA,OAAM;AACtB,aAAK,SAAS,EAAE;AAGhB,cAAM,eAAe;AACrB,cAAM,yBAAyB;AACxB,eAAA;AAAA,MAAA;AAIJ,UAAA/c,QAAO,MAAM,KAAK;AACrB,cAAM0tB,OAAMzjB;AAAAA,UACV,KAAK,MAAM,IAAI,QAAQ,SAAS,GAAG;AAAA,UAAGjK,QAAO,MAAM;AAAA,QAAA;AAErD,YAAI0tB,QAAOA,KAAI,QAAQ,SAAS,QAAQ;AACtC,gBAAM,UAAU,KAAK,QAAQA,KAAI,KAAK;AACtC,cAAI,mBAAmB,aAAa;AAC9B,gBAAA,KAAK,IAAI,WAAW,UAAU,QAAQ,sBAAsB,EAAE,IAAI,IAAI,KAAK;AAC7E,qBAAO,gBAAgB;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAIM,YAAA,mBAAmB,CAAC/tB,UAA6C;AACrE,YAAIA,OAAM;AACD,iBAAAA,MAAK,SAASK,QAAO,MAAM,OAC3BL,MAAK,SAASK,QAAO,MAAM,UAC3BL,MAAK,SAASK,QAAO,MAAM,SAC3BL,MAAK,SAASK,QAAO,MAAM,mBAC3BL,MAAK,SAASK,QAAO,MAAM,cAC3BL,MAAK,SAASK,QAAO,MAAM,aAC3BL,MAAK,SAASK,QAAO,MAAM,aAC3BL,MAAK,SAASK,QAAO,MAAM,iBAC3BL,MAAK,SAASK,QAAO,MAAM,mBAC3BL,MAAK,SAASK,QAAO,MAAM;AAAA,QAAA,OAC7B;AACE,iBAAA;AAAA,QACT;AAAA,MAAA;AAEE,UAAA,CAAC,SAAS,QAAQ;AACpB,YAAI,iBAAiB,UAAU,UAAU,KAAK,iBAAiB,UAAU,SAAS,GAAG;AACnF,iBAAO,gBAAgB;AAAA,QACzB;AAAA,MACF;AAAA,IAcF;AAEO,WAAA;AAAA,EACT;ACxLA,QAAM,mBAAmB,CAAC,QAAQ,MAAM,aAAa,aAAa,QAAQ,aAAa,UAAU,eAAe,WAAW;AAI3H,QAAM,uBAAuB,CAAC,cAAc,cAAc,OAAO,WAAW;AAE5D,WAAA,gBAAgB,aAA0BP,OAAc,IAAY;AAEtE,gBAAA,aAAa,CAAC,OAAkB;AAEpC,YAAAO,UAAS,GAAG,IAAI,KAAK;AAGV,uBAAA,QAAQ,CAAC,aAAa;AAC/B,cAAA,OAAOA,QAAO,MAAM;AAC1B,YAAI,MAAM;AACL,aAAA,WAAWP,OAAM,IAAI,IAAI;AAAA,QAC9B;AAAA,MAAA,CACD;AAGD,SAAG,IAAI,aAAaA,OAAM,IAAI,CAACE,OAAuB,QAAgB;AAGlE,YAAAA,MAAK,SAASK,QAAO,MAAM,aAC3BL,MAAK,SAASK,QAAO,MAAM,MAC3B;AACA;AAAA,QACF;AAIE,YAAAL,MAAK,SAASK,QAAO,MAAM,eAC3BL,MAAK,SAASK,QAAO,MAAM,gBAC3BL,MAAK,SAASK,QAAO,MAAM,mBAC3BL,MAAK,SAASK,QAAO,MAAM,wBAC3BL,MAAK,SAASK,QAAO,MAAM,6BAC3B;AACA;AAAA,QACF;AAGM,cAAA,UAAU,GAAG,IAAI,QAAQ,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC;AAChD,cAAA,QAAQ,GAAG,IAAI,QAAQ,GAAG,QAAQ,IAAI,MAAML,MAAK,WAAW,CAAC,CAAC;AAC9D,cAAA,YAAY,QAAQ,WAAW,KAAK;AAG1C,YAAI,WAAW;AACT,cAAAA,MAAK,KAAK,aAAa;AACzB,eAAG,cAAc,UAAU,OAAOK,QAAO,MAAM,SAAS;AAAA,UAAA,WAC/C,qBAAqB,SAASL,MAAK,KAAK,IAAI,GAAG;AAClD,kBAAA,kBAAkB,WAAW,SAAS;AACxC,gBAAA,mBAAmB,oBAAoB,GAAG;AACzC,iBAAA,KAAK,WAAW,eAAe;AAAA,YACpC;AAAA,UACF;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IAAA,CACF;AAEW,gBAAA,eAAe,CAAA,CAAE;AAEtB,WAAA;AAAA,EACT;AC/DA,QAAM6X,cAAuB;AAAA,IAC3B,UAAU,MAAM;AACP,aAAA,CAAC,IAAI,mBAAmB,gBAAgB,iBAAiB,CAAC,QAAQ,GAAG,CAAC,OAAoB,aAAyC;AACxI,YAAI,UAAU;AACZ,gBAAM,KAAK,MAAM;AACjB,gBAAM,EAAE,MAAA/X,OAAM,OAAO,GAAG;AACR,0BAAA,IAAIA,OAAM,EAAE;AAC5B,mBAAS,EAAE;AAAA,QACb;AACO,eAAA;AAAA,MACR,CAAA,CAAC;AAAA,IACJ;AAAA,EACF;ACXA,QAAM,SAAS,IAAI,UAAU,aAAa,CAAC,OAAoB,QAAkB,QAAgB,QAAgB;AAC/G,UAAM,EAAE,QAAQ,aAAa,IAAI,MAAM,UAAU;AACjD,UAAM,gBAAgB,OAAO,YAAY,GAAG,YAAY;AACxD,QAAI,cAAc,QAAQ,MAAM,MAAM,IAAI;AACxC,YAAM,KAAK,MAAM;AACjB,SAAG,WAAW,UAAK,MAAM,GAAG,GAAG;AACxB,aAAA;AAAA,IAAA,OACF;AACE,aAAA;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,SAAS,IAAI,UAAU,eAAe,CAAC,OAAoB,QAAkB,QAAgB,QAAgB;AACjH,UAAM,KAAK,MAAM;AACjB,OAAG,WAAW,UAAK,MAAM,GAAG,GAAG;AACxB,WAAA;AAAA,EACT,CAAC;AAED,QAAM+X,cAAuB;AAAA,IAC3B,YAAY,MAAM;AACT,aAAA,CAAC,QAAQ,MAAM;AAAA,IACxB;AAAA,EACF;AAEA,QAAA,iBAAe,mBAAmBA,aAAW,OAAO;ACtBpD,QAAMA,cAAuB;AAAA,IAC3B,mBAAmB,MAAM;AAEjB,YAAA,YAAY,CAAC7X,UAA0B;AAC3C,eAAO,CAAC,CAACA,MAAK,MAAM,MAAMA,MAAK,MAAM,KAAK,CAAQ,SAAA,CAAC,CAAC,KAAK,MAAM,EAAE;AAAA,MAAA;AAI7D,YAAA,eAAe,CAAC4D,UAAe;AACnC,eAAOA,iBAAgB,eAAe,CAAC,CAACA,MAAK,KAAK,MAAM;AAAA,MAAA;AAGnD,aAAA;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,QAAQ,CAAC,iBAAyC,aAAa,KAAK,iBAAe,YAAY,MAAM,KAAK,YAAY,CAAC;AAAA,UACvH,YAAY;AAAA,UACZ,QAAQ,CAAC,OAAoB;AACrB,kBAAA,8BAAc;AACpB,kBAAM,gBAAqD,CAAA;AAC3DiH,2BAAa,GAAG,KAAK,WAAW,IAAI,EAAE,QAAQ,CAAY,aAAA;AACpD,kBAAA,SAAS,KAAK,MAAM,IAAI;AACpB,sBAAAvH,MAAK,SAAS,KAAK,MAAM;AAC3B,oBAAA,QAAQ,IAAIA,GAAE,GAAG;AACnB,wBAAMtD,QAAO,SAAS;AACtB,qBAAG,cAAc,SAAS,KAAK,QAAW,EAAE,GAAGA,MAAK,OAAO,IAAI,KAAQ,GAAAA,MAAK,KAAK;AAAA,gBAAA,OAC5E;AACL,0BAAQ,IAAIsD,GAAE;AAAA,gBAChB;AAAA,cAAA,OACK;AACC,sBAAA,OAAO,SAAS,KAAK,MAAM,KAAK,SAAM,CAAC,CAAC0yB,IAAG,MAAM,EAAE;AACnD,sBAAA,YAAY,aAAa,GAAG,IAAI,QAAQ,SAAS,GAAG,GAAG,KAAK,IAAI;AACtE,sBAAM,YAAY,aAAa,GAAG,KAAK,WAAW,KAAK,IAAI;AAC3D,sBAAM1yB,MAAK,UAAU;AACrB,oBAAIA,OAAM,CAAC,cAAc,KAAK,CAASO,WAAAA,OAAM,SAAS,UAAU,QAAQA,OAAM,OAAO,UAAU,EAAE,GAAG;AAClG,gCAAc,KAAK,SAAS;AACxB,sBAAA,QAAQ,IAAIP,GAAE,GAAG;AACnB,uBAAG,WAAW,UAAU,MAAM,UAAU,IAAI,KAAK,IAAI;AACrD,uBAAG,QAAQ,UAAU,MAAM,UAAU,IAAI,KAAK,KAAK,OAAO,EAAE,GAAG,KAAK,OAAO,IAAI,KAAM,CAAA,CAAC;AAAA,kBAAA,OACjF;AACL,4BAAQ,IAAIA,GAAE;AAAA,kBAChB;AAAA,gBACF;AAAA,cACF;AAAA,YAAA,CACD;AAAA,UACH;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAEe,QAAA,0BAAA,6BAA6BuU,WAAS;ACvDrD,QAAMA,cAAuB;AAAA,IAC3B,QAAQ,MAAM;AACL,aAAA;AAAA,QACL,CAAC,IAAiB,YAA0B;AACtC,cAAA,YAAY,aAAa,MAAM;AAC7B,gBAAA,kBAAkB,GAAG,SAAS,GAAG;AACnC,8BAAgB,EAAE;AAAA,YACpB;AAAA,UACF;AACO,iBAAA;AAAA,QACT;AAAA,MAAA;AAAA,IAEJ;AAAA,IAEA,mBAAmB,MAAM;AAChB,aAAA;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,QAAQ,CAAC,OAAoB;AACvB,gBAAA,kBAAkB,GAAG,SAAS,GAAG;AACnC,8BAAgB,EAAE;AAAA,YACpB;AACO,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AC1BA,QAAMA,cAAuB;AAAA,IAC3B,mBAAmB,MAAM;AAChB,aAAA;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,QAAQ,CAAC,IAAiB,cAAsC,WAAwB,aAA0B;;AAE5G,gBAAA,SAAS,UAAU,OAAO;AAE5B,oBAAM,cAAc,aAAa;AAAA,gBAAK,CACpC,gBAAA,YAAY,MAAM,KAAK,CAAQjU,UAAA;AAC7B,yBAAOA,iBAAgB,eAAeA,MAAK,MAAM,QAAQ,SAAS;AAAA,gBAAA,CACnE;AAAA,cAAA;AAEH,kBAAI,aAAa;AAEN,+BAAA,gBAAA,mBAAa,QAAQ,CAAQ,SAAA;AAC9B,wBAAA,YAAY,aAAa,GAAG,IAAI,QAAQ,GAAG,UAAU,IAAI,GAAG,KAAK,IAAI;AAC3E,sBAAI,CAAC,aAAa,UAAU,SAAS,UAAU,IAAI;AACjD,uBAAG,iBAAiB,IAAI;AAAA,kBAC1B;AAAA,gBAAA;AAAA,cAEJ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AC7BA,QAAMiU,cAAuB;AAAA,IAC3B,UAAU,MAAM;AACP,aAAA;AAAA,QACL;AAAA,UACE,KAAK,QAAQ;AAAA,UACb,SAAS,CAAC,OAAoB,aAAyC;AACjE,gBAAA,MAAM,UAAU,OAAO;AAInB,oBAAA,QAAQ,MAAM,UAAU;AAC9B,oBAAM,SAAS,MAAM,KAAK,MAAM,KAAK;AACrC,kBACE,OAAO,KAAK,eACZ,MAAM,iBAAiB,OAAO,YAAY,WACzC,MAAM,QAAQ,SAAS,KAAK,CAAC,CAAC,MAAM,cACrC;AACA,oBAAI,UAAU;AACZ,wBAAM,KAAK,MAAM;AACd,qBAAA,eAAe,CAAA,CAAE;AACpB,qBAAG,WAAW,GAAG;AACjB,2BAAS,EAAE;AAAA,gBACb;AACO,uBAAA;AAAA,cACT;AAAA,YACF;AACO,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;ACrBA,QAAMA,cAAY,CAAC,YAAyC;AACpD,UAAA,EAAE,kBAAkB,QAAAtB,QAAW,IAAA;AAErC,UAAM,mBAAmB,iBAAiB,0BAA0B,CAAC,CAACA,QAAO,cAAc;AAEpF,WAAA;AAAA,MACL,UAAU,MAAM;AACP,eAAA,CAAC,EAAE,KAAK,QAAQ,OAAO,SAAS,wBAAwB,kBAAkB,kBAAkBA,OAAM,EAAG,CAAA;AAAA,MAC9G;AAAA,MAEA,YAAY,MAAM;AAChB,YAAI,kBAAkB;AACb,iBAAA;AAAA,YACL,IAAI,UAAU,WAAW,CAAC,OAAoBhV,QAAiB,UAAkB;AAC3E,kBAAA,CAAC,2BAA2B,KAAK,GAAG;AAC/B,uBAAA;AAAA,cACT;AACA,oBAAM,KAAK,MAAM;AACjB,iBAAG,WAAW,IAAI;AAClB4G,iCAAiB,QAAQ5G,OAAM,GAAG,MAAM,EAAE,EAAE;AACrC,qBAAA;AAAA,YAAA,CACR;AAAA,UAAA;AAAA,QACH,OACK;AACL,iBAAO;QACT;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEA,WAAS,wBAAwB,kBAAoC,kBAA2BgV,SAAsB;AAC7G,WAAA,CAAC,OAAoB,aAAyC;AAEnE,YAAMlW,UAAS,MAAM;AACf,YAAA,EAAE,MAAM,IAAI,MAAM;AAGpB,UAAA,CAAC,MAAM,UAAU,OAAO;AACnB,eAAA;AAAA,MACT;AAIA,YAAMkB,SAAQ,MAAM,OAAO,YAAY,MAAM,qCAAqC;AAClF,UAAI,CAACA,QAAO;AACH,eAAA;AAAA,MACT;AAGA,UAAI,aAAa,OAAOlB,QAAO,MAAM,IAAI,GAAG;AACnC,eAAA;AAAA,MACT;AAGI,UAAA,CAAC,2BAA2B,KAAK,GAAG;AAC/B,eAAA;AAAA,MACT;AAGA,YAAM,SAAS,oBAAoB,CAAC,CAACkB,OAAM;AAC3C,YAAM,aAAa,SAASA,OAAM,KAAKA,OAAM,MAAM;AACnD,YAAM,WAAW,UAAU,iBAAiB,iBAAiB,WAAW,MAAM,SAAS;AACjF,YAAA00B,YAAW,UAAU,CAAC,CAAC1f,QAAO,cAAc,cAAc,WAAW,MAAM,QAAQ;AAGzF,UAAI0f,aAAY,CAAC,kBAAkB,KAAK,GAAG;AAClC,eAAA;AAAA,MACT;AAGA,UAAI,UAAU;AAEZ,cAAM7d,QAAO,WAAW,QAAQ,UAAU,EAAE;AAG5C,cAAM,KAAK,MAAM;AACX,cAAA,QAAQ,MAAM;AACpB,cAAM,MAAM,QAAQ,MAAM,OAAO,YAAY;AAC1C,WAAA,YAAY,OAAO,GAAG;AAGnB,cAAA7X,QAAO,WAAWF,QAAO,MAAM,YAAY41B,YAAW51B,QAAO,MAAM,YAAYA,QAAO,MAAM;AAClG,cAAM,UAAU41B,YAAW51B,QAAO,KAAK,IAAIkB,OAAM;AAAA,CAAO,IAAI,SAAS;AACrE,cAAM,QAAQ,WAAW,EAAE,QAAQ6W,MAAK,IAAI,CAAC6d,aAAY7d,MAAK,SAAS,eAAe,EAAE,SAAS,CAACA,KAAI,EAAE,CAAC,IAAI;AAG7G,cAAM,kBAAkB,2BAA2B,MAAM,KAAK,MAAM,SAAS;AAC7E,YAAI,iBAAiB;AACnB,gBAAMpV,SAAQzC,MAAK,cAAc,OAAO,OAAO;AACvB,kCAAA,IAAI,iBAAiByC,MAAK;AAAA,QAAA,OAC7C;AACF,aAAA,OAAO,OAAO,OAAO;AACxB,aAAG,aAAa,OAAO,OAAOzC,OAAM,KAAK;AAAA,QAC3C;AAEA,iBAAS,EAAE;AAAA,MACb;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,4BAA4BF,SAAgB,MAAmB;AACtE,WAAO,KAAK,KAAK,EAAE,EAAE,eAAe,KAAK,MAAM,EAAE,GAAG,KAAK,WAAW,EAAE,GAAGA,QAAO,MAAM,UAAU;AAAA,EAClG;AAEA,WAAS,2BAA2B,OAAoB;AACtD,UAAMA,UAAS,MAAM;AACf,UAAA,EAAE,MAAM,IAAI,MAAM;AACjB,WAAA,4BAA4BA,SAAQ,KAAK,KAAK,2BAA2B,MAAM,KAAK,MAAM,SAAS;AAAA,EAC5G;AChHA,QAAM,aAAa;AACnB,QAAM,YAAY;AAElB,QAAMwX,cAAY,CAAC,YAA8B;AAE/C,QAAI,WAAW;AACf,UAAM,kBAAkB,MAAM;AAC5B,YAAM,MAAM;AACD,iBAAA;AACJ,aAAA;AAAA,IAAA;AAGF,WAAA;AAAA,MAEL,SAAS,CAACxX,YAAmB;AAAA,QAC3B;AAAA,UACEA;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA,CAAC,qBAAqBA,OAAM,GAAG,iBAAiBA,OAAM,CAAC;AAAA,QACzD;AAAA,MACF;AAAA,MACA,UAAU,MAAM;AACR,cAAA,YAAY,SAAS,sBAAsB,OAAO;AACxD,YAAI,WAAW;AACb,iBAAO,CAAC,IAAI;AAAA,YAAmB,gBAAgB;AAAA,YAAU,CAAC,aAAa;AAAA,YAC7D,CAAC,QAAqB,aAAyC;AACvE,kBAAI,CAAC,SAAS,oBAAoB,OAAO,GAAG;AACnC,uBAAA;AAAA,cACT;AACA,kBAAI,UAAU;AACD,2BAAA;AACX,yBAAS,YAAY,OAAO;AAAA,cAC9B;AACO,qBAAA;AAAA,YACT;AAAA,UAAA,CAAE;AAAA,QAAA,OACG;AACL,iBAAO;QACT;AAAA,MAEF;AAAA,IAAA;AAAA,EAEJ;AASA,WAAS,YACPA,SACA,gBACA,UACAwF,WAA0B;AAE1B,QAAI,aAAa;AAEjB,WAAO,IAAI,OAAO;AAAA,MAChB,KAAK,IAAI,UAAU,eAAe;AAAA,MAElC,OAAO;AAAA,QAGL,eAAe,CAACpF,IAAG,UAAU;AAC3B,uBAAa,MAAM,QAAQ,QAAQ,MAAM,WAAW,MAAM,YAAY,MAAM;AAAA,QAC9E;AAAA,QAGA,qBAAqB,CAACV,OAAc,aAAgC;AAElE,cAAIA,MAAK,QAAQ,IAAI,MAAM,IAAI;AACvB,kBAAA,QAAQ,SAAS;AACvB,kBAAM,WAAWM,QAAO,KAAKN,OAAM,KAAK;AACxC,mBAAO,IAAI,MAAM,SAAS,KAAK,QAAQ,GAAG,GAAG,CAAC;AAAA,UAAA,OACzC;AACE,mBAAA;AAAA,UACT;AAAA,QACF;AAAA,QAIA,oBAAoB2F,OAAM;AACxB,cAAI,aAAa;AACT,kBAAA,YAAYA,MAAK,MAAM,4CAA4C;AACzE,gBAAI,WAAW;AACb,qBAAO,UAAU;AAAA,YACnB;AAAA,UACF;AACO,iBAAAA;AAAA,QACT;AAAA,QAGA,YAAY,MAAM,OAAO5E,QAAO;AACxB,gBAAA,MAAM,SAAc,KAAA;AAC1B,qBAAW,WAAW+E,WAAU;AAC9B,kBAAM,UAAU,QAAQ,gBAAgB,MAAM,OAAO,KAAK/E,MAAK;AAC/D,gBAAI,SAAS;AACJ,qBAAA;AAAA,YACT;AAAA,UACF;AACO,iBAAA;AAAA,QACT;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EAEH;AAIA,WAAS,qBACPT,SACA;AAEM,UAAA,cAAc,iBAAiBA,OAAM;AAE3C,WAAO,CAAC,gBACA,MACA,OACA,UACAS,WAAiB;AAGvB,UAAI,CAAC,eAAe,mBAAmB,KAAK,KAAK,GAAG;AAC3C,eAAA;AAAA,MACT;AAGM,YAAA,EAAE,cAAkB,IAAA;AACpB,YAAAf,QAAO,+CAAe,QAAQ;AAC9B,YAAA2F,QAAO,+CAAe,QAAQ;AAC9B,YAAA,WAAW,cAAc,eAAeA,KAAI;AAGlD,UAAI,CAAC3F,OAAM;AACF,eAAA;AAAA,MACT;AAII,UAAA2F,SAAQ,CAAC,UAAU;AACd,eAAA;AAAA,MACT;AAEe,qBAAA,gBAAgB3F,OAAMe,OAAM,WAAWA,OAAM,OAAO,EAAE,KAAK,CAAAA,YAAS;AAGjFA,QAAAA,UAAQ,YAAYA,OAAK;AAGnB,cAAA,KAAK,iBAAiB,KAAK,KAAK;AAGtC,cAAM,YAAYA,QAAM,QAAQ,YAAY,GAAGA,QAAM,QAAQ,IAAI;AACjE,YAAI,CAAC,GAAG,UAAU,SAAS,OAAO,SAAS,GAAG;AACzC,aAAA;AAAA,YACD,GAAG,UAAU;AAAA,YACb,GAAG,UAAU;AAAA,YACbT,QAAO,MAAM,KAAK,OAAO,EAAE,MAAM,WAAW;AAAA,UAAA;AAAA,QAC9C,OACK;AACL,gBAAM,UAAU,GAAG;AACnB,aAAG,iBAAiBS,OAAK;AACzB,cAAI,UAAU;AACZ,4BAAgB,IAAI,QAAQ,MAAM,QAAQ,OAAOA,QAAM,IAAI;AAAA,UAC7D;AAAA,QACF;AACA,aAAK,SAAS,EAAE;AAAA,MAAA,CACjB;AAEM,aAAA;AAAA,IAAA;AAAA,EAIX;AAKA,WAAS,iBACPT,SACA;AACA,WAAO,CAAC,iBACN,MACA,OACA,UACAS,WAAiB;AAEb,UAAA,CAAC,MAAM,eAAe;AACjB,eAAA;AAAA,MACT;AAGM,YAAA,aAAa,CAAC6C,OAAa;AACzB,cAAA,KAAK,KAAK,MAAM;AACtB,cAAM,UAAU,GAAG;AACnB,WAAG,iBAAiBA,EAAC;AACrB,YAAI,UAAU;AACZ,0BAAgB,IAAI,QAAQ,MAAM,QAAQ,OAAO7C,OAAM,IAAI;AAAA,QAC7D;AACA,aAAK,SAAS,EAAE;AAAA,MAAA;AAOlB,YAAM+zB,aAAY;AAClB,YAAM,cAAc;AACpB,UAAI,MAAM,cAAc,MAAM,SAASA,UAAS,GAAG;AACjD,cAAMnvB,QAAO,MAAM,cAAc,QAAQmvB,UAAS;AAClD,YAAInvB,MAAK,SAAS,WAAW,KAAK,aAAa;AAE7C,gBAAMpF,SAA2B,CAAA;AACjC,mBAASlB,KAAI,GAAGA,KAAI0B,OAAM,QAAQ,YAAY1B,MAAK;AACjD,kBAAMY,QAAOc,OAAM,QAAQ,MAAM1B,EAAC;AAClC,gBAAIY,MAAK,YAAY,KAAK,MAAM,IAAI;AAC5B,oBAAA,UAAUA,MAAK,KAAK,cAAcA,MAAK,OAAO,YAAYA,MAAK,SAAS,CAAMuX,QAAA;AAClF,oBAAIA,IAAG,QAAQ;AACN,yBAAAlX,QAAO,KAAKkX,IAAG,KAAM,QAAQ,OAAO,GAAG,GAAGA,IAAG,KAAK;AAAA,gBAAA,OACpD;AACE,yBAAAA;AAAA,gBACT;AAAA,cAAA,CACD,GAAGvX,MAAK,KAAK;AACR,cAAAM,OAAA,KAAK,WAAWN,KAAI;AAAA,YAC5B;AAAA,UACF;AACM,gBAAA,WAAW,SAAS,UAAUM,MAAK;AACzC,gBAAM,WAAW,IAAI,MAAM,UAAUQ,OAAM,WAAWA,OAAM,OAAO;AACnE,qBAAW,QAAQ;AACZ,iBAAA;AAAA,mBACE,UAAU;AACnB,qBAAWA,MAAK;AACT,iBAAA;AAAA,QACT;AAAA,MACF;AAEO,aAAA;AAAA,IAAA;AAAA,EAEX;AAIA,QAAM,oBAAoB;AAC1B,QAAM,eAAe;AACrB,WAAS,cAAc,eAAoC4E,OAA0B;AACnF,QAAI,+CAAe,MAAM,KAAK,CAACnF,UAASA,UAAS,oBAAoB;AAC5D,aAAA;AAAA,IACE,WAAAmF,SAAQA,MAAK,MAAM,YAAY,GAAG;AACpC,aAAA;AAAA,IAAA,OACF;AACE,aAAA;AAAA,IACT;AAAA,EACF;AC9PA,QAAM,mBAAmB;AAEzB,QAAMmS,cAAuB;AAAA,IAC3B,SAAS,CAACxX,YAAmB;AACpB,aAAA;AAAA,QACL,IAAI,OAAO;AAAA,UACT,KAAK,IAAI,UAAU,gBAAgB;AAAA,UACnC,MAAM,OAAO;AAAA,YACX,QAAQ,CAAC,SAAqB;AACtB,oBAAA,YAAY,KAAK,MAAM;AACzB,kBAAA,iCAAiC,SAAS,GAAG;AAC/C,sBAAM,gBAAgBgK,uBAAqBhK,QAAO,MAAM,SAAS,EAAE,SAAS;AAC5E,oBAAI,eAAe;AACjB,wBAAM,cAAc,KAAK,QAAQ,cAAc,GAAG;AAC5C,wBAAA,gBAAgB,YAAY;AAClC,wBAAM,WAAW,KAAK;AAChB,wBAAA,aAAa,SAAS;AAC5B,sBAAI,KAAK,IAAI,cAAc,SAAS,WAAW,MAAM,IAAI,kBAAkB;AACnE,0BAAA,SAAS,YAAY,IAAI;AAC/B,0BAAM,WAAW,UAAU,eAAe,sBAAsB,MAAM,CAAC;AAC9D,6BAAA,IAAI,OAAO,cAAc,CAAC;AAAA,kBACrC;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UAAA;AAAA,QACF,CACD;AAAA,MAAA;AAAA,IAEL;AAAA,EACF;ACrCA,QAAM,qBAAqB;AAC3B,QAAM,qBAAqB;AAE3B,QAAM,sBAAsB;AAC5B,QAAM,mBAAmB;AAElB,WAAS,eAAe,eAA2C;AAGxE,UAAM,cAAc,OAAO,aAAa,EAAE,QAAQ;AAClD,QAAI,CAAC,OAAO,MAAM,WAAW,GAAG;AAC1B,UAAA,iBAAiB,WAAW,GAAG;AAC1B,eAAA;AAAA,MACT;AAAA,IACF;AAGI,QAAA,cAAc,cAAc;AAChC,QAAI,YAAY,WAAW,oBAAoB,YAAa,CAAA,GAAG;AAC7D,oBAAc,cAAc,OAAO,oBAAoB,QAAQ,cAAc,SAAS,oBAAoB,MAAM;AAAA,IAClH;AAIA,QAAI,CAAC,YAAY,WAAW,gBAAgB,GAAG;AAC7C,oBAAc,mBAAmB;AAAA,IACnC;AACA,UAAM,WAAW,OAAO,WAAW,EAAE,QAAQ;AAC7C,QAAI,CAAC,OAAO,MAAM,QAAQ,KAAK,iBAAiB,QAAQ,GAAG;AAClD,aAAA;AAAA,IACT;AAEO,WAAA;AAAA,EACT;AAEA,WAAS,iBAAiB,WAAmB;AACpC,WAAA,YAAY,sBAAsB,YAAY;AAAA,EACvD;AC1CO,WAAS,iBAAiB,SAAsC;AACrE,QAAI,SAAS;AACJ,aAAA,OAAO,SAAS,kBAAkB;AAAA,IAC3C;AACO,WAAA;AAAA,EACT;AAEO,WAAS,aAAa,SAA6B;AACxD,QAAI,SAAS;AACX,cAAQ,MAAM;AAAA,IAChB;AAAA,EACF;ACCO,QAAM,cAAc,MAAM,WAAgD,CAAC,OAAO,QAAQ;AAC/F,UAAM,QAA6B;AAAA,MACjC,GAAG,MAAM;AAAA,IAAA;AAIT,WAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,0EAA0E,MAAM;AAAA,QAC3F;AAAA,QACA,UAAU,MAAM;AAAA,QAChB;AAAA,QACA,UAAU,MAAM;AAAA,QAChB,cAAc,MAAM;AAAA,MAAA;AAAA,MAEnB,MAAM;AAAA,IAAA;AAAA,EAGb,CAAC;;ACPM,QAAM,YAAY,MAAM,WAA6C,CAAC,OAAO,QAAQ;AAI1F,UAAM,iBAAiB,MAAM,MAAM,SAAS,IAAI,IAC5C,SAAS,MAAM,MAAM,OAAO,GAAG,MAAM,MAAM,SAAS,CAAC,GAAG,EAAE,IAC1D;AACJ,UAAM,QAA6B;AAAA,MACjC,GAAG,MAAM;AAAA,MACT,OAAO,iBAAiB,SAAY,MAAM;AAAA,IAAA;AAG5C,+CACG,OAAI,EAAA,WAAU,0BAAyB,MACrC,GAAA,MAAM,gBAAiB,sBAAA,cAAA,OAAA,EAAI,KAAK,MAAM,eAAe,WAAU,qBAAoB,KAAI,IAAG,WAAU,QAAA,CAAO,IAAK,QACjH,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,aAAa,MAAM;AAAA,QACnB,MAAM;AAAA,QACN,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,YAKP,MAAM;AAAA,YACN,MAAM,gBAAgB,iCAAiC;AAAA,QAC3D,OAAO,MAAM,UAAU,SAAY,MAAM,QAAQ;AAAA,QACjD,UAAU,MAAM;AAAA,QAChB,WAAW,MAAM;AAAA,QACjB,SAAS,MAAM;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,UAAU,MAAM;AAAA,QAChB,SAAS,MAAM;AAAA,QACf;AAAA,QACA,YAAY;AAAA,MAAA;AAAA,IAAA,CAEhB;AAAA,EAEJ,CAAC;AC7Ec,WAAS,uBAAuBf,OAAM;AACnD,QAAIA,UAAS,QAAQ;AACnB,YAAM,IAAI,eAAe,2DAA2D;AAAA,IACrF;AACD,WAAOA;AAAA,EACT;ACLe,WAAS,gBAAgB+V,IAAGlV,IAAG;AAC5C,sBAAkB,OAAO,iBAAiB,OAAO,eAAe,KAAI,IAAK,SAAS2b,iBAAgBzG,IAAGlV,IAAG;AACtG,MAAAkV,GAAE,YAAYlV;AACd,aAAOkV;AAAA,IACX;AACE,WAAO,gBAAgBA,IAAGlV,EAAC;AAAA,EAC7B;ACLe,WAAS,eAAe,UAAU,YAAY;AAC3D,aAAS,YAAY,OAAO,OAAO,WAAW,SAAS;AACvD,aAAS,UAAU,cAAc;AACjC2mB,oBAAe,UAAU,UAAU;AAAA,EACrC;ACLA,MAAI,YAAY,OAAO,SACnB,SAAS,SAAS,OAAO;AACrB,WAAO,OAAO,UAAU,YAAY,UAAU;AAAA,EACtD;AACA,WAAS,QAAQ,OAAO,QAAQ;AAC5B,QAAI,UAAU,QAAQ;AAClB,aAAO;AAAA,IACV;AACD,QAAI,UAAU,KAAK,KAAK,UAAU,MAAM,GAAG;AACvC,aAAO;AAAA,IACV;AACD,WAAO;AAAA,EACX;AACA,WAAS,eAAe,WAAW,YAAY;AAC3C,QAAI,UAAU,WAAW,WAAW,QAAQ;AACxC,aAAO;AAAA,IACV;AACD,aAAS1nB,KAAI,GAAGA,KAAI,UAAU,QAAQA,MAAK;AACvC,UAAI,CAAC,QAAQ,UAAUA,KAAI,WAAWA,GAAE,GAAG;AACvC,eAAO;AAAA,MACV;AAAA,IACJ;AACD,WAAO;AAAA,EACX;AAEA,WAAS,WAAW,UAAU82B,UAAS;AACnC,QAAIA,aAAY,QAAQ;AAAE,MAAAA,WAAU;AAAA,IAAiB;AACrD,QAAI;AACJ,QAAI,WAAW,CAAA;AACf,QAAI;AACJ,QAAI,aAAa;AACjB,aAAS,WAAW;AAChB,UAAI,UAAU,CAAA;AACd,eAAS,KAAK,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC1C,gBAAQ,MAAM,UAAU;AAAA,MAC3B;AACD,UAAI,cAAc,aAAa,QAAQA,SAAQ,SAAS,QAAQ,GAAG;AAC/D,eAAO;AAAA,MACV;AACD,mBAAa,SAAS,MAAM,MAAM,OAAO;AACzC,mBAAa;AACb,iBAAW;AACX,iBAAW;AACX,aAAO;AAAA,IACV;AACD,WAAO;AAAA,EACX;AC9Ce,WAAS,8BAA8B,QAAQ,UAAU;AACtE,QAAI,UAAU;AAAM,aAAO;AAC3B,QAAIj1B,UAAS,CAAA;AACb,QAAI,aAAa,OAAO,KAAK,MAAM;AACnC,QAAI9B,MAAKC;AACT,SAAKA,KAAI,GAAGA,KAAI,WAAW,QAAQA,MAAK;AACtC,MAAAD,OAAM,WAAWC;AACjB,UAAI,SAAS,QAAQD,IAAG,KAAK;AAAG;AAChC,MAAA8B,QAAO9B,QAAO,OAAOA;AAAA,IACtB;AACD,WAAO8B;AAAA,EACT;ACFA,MAAI,0BAA0B,OAAO,gBAAgB,YAAY,OAAO,YAAY,QAAQ;AAC5F,MAAI6E,QAAM,0BAA0B,WAAY;AAC9C,WAAO,YAAY;EACrB,IAAI,WAAY;AACd,WAAO,KAAK;EACd;AACA,WAAS,cAAc,WAAW;AAChC,yBAAqB,UAAU,EAAE;AAAA,EACnC;AACA,WAAS,eAAe,UAAU,OAAO;AACvC,QAAI,QAAQA;AAEZ,aAAS,OAAO;AACd,UAAIA,MAAG,IAAK,SAAS,OAAO;AAC1B,iBAAS,KAAK,IAAI;AAAA,MACxB,OAAW;AACL,kBAAU,KAAK,sBAAsB,IAAI;AAAA,MAC1C;AAAA,IACF;AAED,QAAI,YAAY;AAAA,MACd,IAAI,sBAAsB,IAAI;AAAA,IAClC;AACE,WAAO;AAAA,EACT;AAEA,MAAI,OAAO;AAEX,WAAS,iBAAiB,aAAa;AACrC,QAAI,gBAAgB,QAAQ;AAC1B,oBAAc;AAAA,IACf;AAED,QAAI,SAAS,MAAM,aAAa;AAC9B,UAAIioB,OAAM,SAAS,cAAc,KAAK;AACtC,UAAI,QAAQA,KAAI;AAChB,YAAM,QAAQ;AACd,YAAM,SAAS;AACf,YAAM,WAAW;AACjB,eAAS,KAAK,YAAYA,IAAG;AAC7B,aAAOA,KAAI,cAAcA,KAAI;AAC7B,eAAS,KAAK,YAAYA,IAAG;AAAA,IAC9B;AAED,WAAO;AAAA,EACT;AACA,MAAI,kBAAkB;AAOtB,WAAS,iBAAiB,aAAa;AACrC,QAAI,gBAAgB,QAAQ;AAC1B,oBAAc;AAAA,IACf;AAED,QAAI,oBAAoB,QAAQ,aAAa;AAC3C,UAAI,WAAW,SAAS,cAAc,KAAK;AAC3C,UAAI,aAAa,SAAS;AAC1B,iBAAW,QAAQ;AACnB,iBAAW,SAAS;AACpB,iBAAW,WAAW;AACtB,iBAAW,YAAY;AACvB,UAAI,WAAW,SAAS,cAAc,KAAK;AAC3C,UAAI,aAAa,SAAS;AAC1B,iBAAW,QAAQ;AACnB,iBAAW,SAAS;AACpB,eAAS,YAAY,QAAQ;AAC7B,eAAS,KAAK,YAAY,QAAQ;AAElC,UAAI,SAAS,aAAa,GAAG;AAC3B,0BAAkB;AAAA,MACxB,OAAW;AACL,iBAAS,aAAa;AAEtB,YAAI,SAAS,eAAe,GAAG;AAC7B,4BAAkB;AAAA,QAC1B,OAAa;AACL,4BAAkB;AAAA,QACnB;AAAA,MACF;AAED,eAAS,KAAK,YAAY,QAAQ;AAClC,aAAO;AAAA,IACR;AAED,WAAO;AAAA,EACT;AAEA,MAAI,iCAAiC;AAErC,MAAI,iBAAiB,SAASoI,gBAAe,MAAM;AAC9C,QAAC,cAAc,KAAK;AACZ,SAAK;AAClB,QAAM,WAAW,KAAK;AACpB,WAAO,WAAW,MAAM;AAAA,EAC1B;AAgBA,WAAS,oBAAoB,OAAO;AAClC,QAAIrnB;AAEJ,QAAI,kBAAkB,MAAM,iBACxB,+BAA+B,MAAM,8BACrC,kCAAkC,MAAM,iCACxC,iBAAiB,MAAM,gBACvB,0BAA0B,MAAM,yBAChC,yBAAyB,MAAM,wBAC/B,iCAAiC,MAAM,gCACvC,8BAA8B,MAAM,6BACpC,eAAe,MAAM,cACrB,eAAe,MAAM,cACrB,4BAA4B,MAAM,2BAClC,+BAA+B,MAAM,8BACrC,oBAAoB,MAAM,mBAC1B,wCAAwC,MAAM,uCAC9C,gBAAgB,MAAM;AAC1B,WAAOA,UAAsB,yBAAU,gBAAgB;AACrD,qBAAe,MAAM,cAAc;AAKnC,eAAS,KAAK,OAAO;AACnB,YAAI;AAEJ,gBAAQ,eAAe,KAAK,MAAM,KAAK,KAAK;AAC5C,cAAM,iBAAiB,kBAAkB,MAAM,OAAO,uBAAuB,KAAK,CAAC;AACnF,cAAM,6BAA6B;AACnC,cAAM,YAAY;AAClB,cAAM,QAAQ;AAAA,UACZ,UAAU,uBAAuB,KAAK;AAAA,UACtC,aAAa;AAAA,UACb,2BAA2B;AAAA,UAC3B,YAAY,OAAO,MAAM,MAAM,sBAAsB,WAAW,MAAM,MAAM,oBAAoB;AAAA,UAChG,WAAW,OAAO,MAAM,MAAM,qBAAqB,WAAW,MAAM,MAAM,mBAAmB;AAAA,UAC7F,0BAA0B;AAAA,UAC1B,yBAAyB;AAAA,QACjC;AACM,cAAM,uBAAuB;AAC7B,cAAM,uBAAuB,WAAW,SAAU,0BAA0B,yBAAyB,uBAAuB,sBAAsB,yBAAyB,wBAAwB,sBAAsB,qBAAqB;AAC5O,iBAAO,MAAM,MAAM,gBAAgB;AAAA,YACjC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACV,CAAS;AAAA,QACT,CAAO;AACD,cAAM,gBAAgB;AACtB,cAAM,gBAAgB,WAAW,SAAU,YAAY,WAAW,2BAA2B,yBAAyB,0BAA0B;AAC9I,iBAAO,MAAM,MAAM,SAAS;AAAA,YAC1B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACV,CAAS;AAAA,QACT,CAAO;AACD,cAAM,gBAAgB;AAEtB,cAAM,gBAAgB,SAAU,UAAU,aAAa;AACrD,cAAI,cAAc,MAAM,OACpB,cAAc,YAAY,aAC1B,YAAY,YAAY,WACxB,YAAY,YAAY;AAE5B,cAAI,iBAAiB,MAAM,mBAAmB,yCAAyC,aAAa,yCAAyC,WAAW,yCAAyC,SAAS;AAE1M,cAAI3P,OAAM,WAAW,MAAM;AAC3B,cAAI;AAEJ,cAAI,eAAe,eAAeA,IAAG,GAAG;AACtC,oBAAQ,eAAeA;AAAA,UACjC,OAAe;AACL,gBAAI,UAAU,gBAAgB,MAAM,OAAO,aAAa,MAAM,cAAc;AAE5E,gBAAI,QAAQ,cAAc;AAC1B,2BAAeA,QAAO,QAAQ;AAAA,cAC5B,UAAU;AAAA,cACV,MAAM,QAAQ,SAAY;AAAA,cAC1B,OAAO,QAAQ,UAAU;AAAA,cACzB,KAAK,aAAa,MAAM,OAAO,UAAU,MAAM,cAAc;AAAA,cAC7D,QAAQ,aAAa,MAAM,OAAO,UAAU,MAAM,cAAc;AAAA,cAChE,OAAO,eAAe,MAAM,OAAO,aAAa,MAAM,cAAc;AAAA,YAChF;AAAA,UACS;AAED,iBAAO;AAAA,QACf;AAEM,cAAM,qBAAqB;AAC3B,cAAM,qBAAqB,WAAW,SAAUsB,IAAG,IAAI,KAAK;AAC1D,iBAAO;QACf,CAAO;AAED,cAAM,YAAY,SAAU,OAAO;AACjC,cAAI,uBAAuB,MAAM,eAC7B,eAAe,qBAAqB,cACpC,cAAc,qBAAqB,aACnC,aAAa,qBAAqB,YAClC,YAAY,qBAAqB,WACjC,eAAe,qBAAqB,cACpC,cAAc,qBAAqB;AAEvC,gBAAM,SAAS,SAAU,WAAW;AAClC,gBAAI,UAAU,eAAe,cAAc,UAAU,cAAc,WAAW;AAI5E,qBAAO;AAAA,YACR;AAED,gBAAI,YAAY,MAAM,MAAM;AAK5B,gBAAI,uBAAuB;AAE3B,gBAAI,cAAc,OAAO;AACvB,sBAAQ,iBAAkB,GAAA;AAAA,gBACxB,KAAK;AACH,yCAAuB,CAAC;AACxB;AAAA,gBAEF,KAAK;AACH,yCAAuB,cAAc,cAAc;AACnD;AAAA,cACH;AAAA,YACF;AAGD,mCAAuB,KAAK,IAAI,GAAG,KAAK,IAAI,sBAAsB,cAAc,WAAW,CAAC;AAC5F,gBAAI,sBAAsB,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,eAAe,YAAY,CAAC;AACtF,mBAAO;AAAA,cACL,aAAa;AAAA,cACb,2BAA2B,UAAU,aAAa,aAAa,YAAY;AAAA,cAC3E,YAAY;AAAA,cACZ,WAAW;AAAA,cACX,yBAAyB,UAAU,YAAY,YAAY,YAAY;AAAA,cACvE,0BAA0B;AAAA,YACtC;AAAA,UACA,GAAW,MAAM,0BAA0B;AAAA,QAC3C;AAEM,cAAM,kBAAkB,SAAU,KAAK;AACrC,cAAI,WAAW,MAAM,MAAM;AAC3B,gBAAM,YAAY;AAElB,cAAI,OAAO,aAAa,YAAY;AAClC,qBAAS,GAAG;AAAA,UACtB,WAAmB,YAAY,QAAQ,OAAO,aAAa,YAAY,SAAS,eAAe,SAAS,GAAG;AACjG,qBAAS,UAAU;AAAA,UACpB;AAAA,QACT;AAEM,cAAM,6BAA6B,WAAY;AAC7C,cAAI,MAAM,+BAA+B,MAAM;AAC7C,0BAAc,MAAM,0BAA0B;AAAA,UAC/C;AAED,gBAAM,6BAA6B,eAAe,MAAM,mBAAmB,8BAA8B;AAAA,QACjH;AAEM,cAAM,oBAAoB,WAAY;AACpC,gBAAM,6BAA6B;AAEnC,gBAAM,SAAS;AAAA,YACb,aAAa;AAAA,UACvB,GAAW,WAAY;AAGb,kBAAM,mBAAmB,EAAE;AAAA,UACrC,CAAS;AAAA,QACT;AAEM,eAAO;AAAA,MACR;AAED,WAAK,2BAA2B,SAAS,yBAAyB,WAAW,WAAW;AACtF,4BAAoB,WAAW,SAAS;AACxC,sBAAc,SAAS;AACvB,eAAO;AAAA,MACb;AAEI,UAAI,SAAS,KAAK;AAElB,aAAO,WAAW,SAAS,SAAS,OAAO;AACzC,YAAI,aAAa,MAAM,YACnB,YAAY,MAAM;AAEtB,YAAI,eAAe,QAAW;AAC5B,uBAAa,KAAK,IAAI,GAAG,UAAU;AAAA,QACpC;AAED,YAAI,cAAc,QAAW;AAC3B,sBAAY,KAAK,IAAI,GAAG,SAAS;AAAA,QAClC;AAED,aAAK,SAAS,SAAU,WAAW;AACjC,cAAI,eAAe,QAAW;AAC5B,yBAAa,UAAU;AAAA,UACxB;AAED,cAAI,cAAc,QAAW;AAC3B,wBAAY,UAAU;AAAA,UACvB;AAED,cAAI,UAAU,eAAe,cAAc,UAAU,cAAc,WAAW;AAC5E,mBAAO;AAAA,UACR;AAED,iBAAO;AAAA,YACL,2BAA2B,UAAU,aAAa,aAAa,YAAY;AAAA,YAC3E;AAAA,YACA;AAAA,YACA,0BAA0B;AAAA,YAC1B,yBAAyB,UAAU,YAAY,YAAY,YAAY;AAAA,UACjF;AAAA,QACA,GAAS,KAAK,0BAA0B;AAAA,MACxC;AAEI,aAAO,eAAe,SAAS,aAAa,OAAO;AACjD,YAAI,cAAc,MAAM,OACpB,QAAQ,gBAAgB,SAAS,SAAS,aAC1C,cAAc,MAAM,aACpB,WAAW,MAAM;AACrB,YAAI,eAAe,KAAK,OACpB,cAAc,aAAa,aAC3B,SAAS,aAAa,QACtB,WAAW,aAAa,UACxB,QAAQ,aAAa;AACzB,YAAI,cAAc,KAAK,OACnB,aAAa,YAAY,YACzB,YAAY,YAAY;AAC5B,YAAI,gBAAgB;AAEpB,YAAI,gBAAgB,QAAW;AAC7B,wBAAc,KAAK,IAAI,GAAG,KAAK,IAAI,aAAa,cAAc,CAAC,CAAC;AAAA,QACjE;AAED,YAAI,aAAa,QAAW;AAC1B,qBAAW,KAAK,IAAI,GAAG,KAAK,IAAI,UAAU,WAAW,CAAC,CAAC;AAAA,QACxD;AAED,YAAI,uBAAuB,wBAAwB,KAAK,OAAO,KAAK,cAAc;AAClF,YAAI,sBAAsB,uBAAuB,KAAK,OAAO,KAAK,cAAc;AAIhF,YAAI,0BAA0B,sBAAsB,QAAQ,gBAAgB;AAC5E,YAAI,wBAAwB,uBAAuB,SAAS,gBAAgB;AAC5E,aAAK,SAAS;AAAA,UACZ,YAAY,gBAAgB,SAAY,+BAA+B,KAAK,OAAO,aAAa,OAAO,YAAY,KAAK,gBAAgB,qBAAqB,IAAI;AAAA,UACjK,WAAW,aAAa,SAAY,4BAA4B,KAAK,OAAO,UAAU,OAAO,WAAW,KAAK,gBAAgB,uBAAuB,IAAI;AAAA,QAChK,CAAO;AAAA,MACP;AAEI,aAAO,oBAAoB,SAAS,oBAAoB;AACtD,YAAI,eAAe,KAAK,OACpB,oBAAoB,aAAa,mBACjC,mBAAmB,aAAa;AAEpC,YAAI,KAAK,aAAa,MAAM;AAC1B,cAAI,WAAW,KAAK;AAEpB,cAAI,OAAO,sBAAsB,UAAU;AACzC,qBAAS,aAAa;AAAA,UACvB;AAED,cAAI,OAAO,qBAAqB,UAAU;AACxC,qBAAS,YAAY;AAAA,UACtB;AAAA,QACF;AAED,aAAK,oBAAmB;AAAA,MAC9B;AAEI,aAAO,qBAAqB,SAAS,qBAAqB;AACxD,YAAI,YAAY,KAAK,MAAM;AAC3B,YAAI,eAAe,KAAK,OACpB,aAAa,aAAa,YAC1B,YAAY,aAAa,WACzB,2BAA2B,aAAa;AAE5C,YAAI,4BAA4B,KAAK,aAAa,MAAM;AAItD,cAAI,WAAW,KAAK;AAEpB,cAAI,cAAc,OAAO;AACvB,oBAAQ,iBAAkB,GAAA;AAAA,cACxB,KAAK;AACH,yBAAS,aAAa,CAAC;AACvB;AAAA,cAEF,KAAK;AACH,yBAAS,aAAa;AACtB;AAAA,cAEF;AACE,oBAAI,cAAc,SAAS,aACvB,cAAc,SAAS;AAC3B,yBAAS,aAAa,cAAc,cAAc;AAClD;AAAA,YACH;AAAA,UACX,OAAe;AACL,qBAAS,aAAa,KAAK,IAAI,GAAG,UAAU;AAAA,UAC7C;AAED,mBAAS,YAAY,KAAK,IAAI,GAAG,SAAS;AAAA,QAC3C;AAED,aAAK,oBAAmB;AAAA,MAC9B;AAEI,aAAO,uBAAuB,SAAS,uBAAuB;AAC5D,YAAI,KAAK,+BAA+B,MAAM;AAC5C,wBAAc,KAAK,0BAA0B;AAAA,QAC9C;AAAA,MACP;AAEI,aAAO,SAAS,SAAS,SAAS;AAChC,YAAI,eAAe,KAAK,OACpB,WAAW,aAAa,UACxB,YAAY,aAAa,WACzB,cAAc,aAAa,aAC3B,YAAY,aAAa,WACzB,SAAS,aAAa,QACtB,WAAW,aAAa,UACxB,mBAAmB,aAAa,kBAChC,eAAe,aAAa,cAC5B,WAAW,aAAa,UACxB,uBAAuB,aAAa,SACpC,UAAU,yBAAyB,SAAS,iBAAiB,sBAC7D,mBAAmB,aAAa,kBAChC,eAAe,aAAa,cAC5B,WAAW,aAAa,UACxB,QAAQ,aAAa,OACrB,iBAAiB,aAAa,gBAC9B,QAAQ,aAAa;AACzB,YAAI,cAAc,KAAK,MAAM;AAE7B,YAAI,wBAAwB,KAAK,4BAA6B,GAC1D,mBAAmB,sBAAsB,IACzC,kBAAkB,sBAAsB;AAE5C,YAAI,wBAAwB,KAAK,0BAA2B,GACxD,gBAAgB,sBAAsB,IACtC,eAAe,sBAAsB;AAEzC,YAAI,QAAQ,CAAA;AAEZ,YAAI,cAAc,KAAK,UAAU;AAC/B,mBAAS,YAAY,eAAe,aAAa,cAAc,aAAa;AAC1E,qBAAS,eAAe,kBAAkB,gBAAgB,iBAAiB,gBAAgB;AACzF,oBAAM,KAAK0d,MAAa,QAAA,cAAC,UAAU;AAAA,gBACjC,aAAa;AAAA,gBACb,MAAM;AAAA,gBACN,aAAa,iBAAiB,cAAc;AAAA,gBAC5C,KAAK,QAAQ;AAAA,kBACX,aAAa;AAAA,kBACb,MAAM;AAAA,kBACN,UAAU;AAAA,gBAC1B,CAAe;AAAA,gBACD,UAAU;AAAA,gBACV,OAAO,KAAK,cAAc,WAAW,YAAY;AAAA,cAClD,CAAA,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAID,YAAI,uBAAuB,wBAAwB,KAAK,OAAO,KAAK,cAAc;AAClF,YAAI,sBAAsB,uBAAuB,KAAK,OAAO,KAAK,cAAc;AAChF,eAAOA,4BAAc,oBAAoB,gBAAgB,OAAO;AAAA,UAC9D;AAAA,UACA,UAAU,KAAK;AAAA,UACf,KAAK,KAAK;AAAA,UACV,OAAO9B,WAAS;AAAA,YACd,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,yBAAyB;AAAA,YACzB,YAAY;AAAA,YACZ;AAAA,UACD,GAAE,KAAK;AAAA,QACT,GAAE8B,4BAAc,oBAAoB,gBAAgB,OAAO;AAAA,UAC1D,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,eAAe,cAAc,SAAS;AAAA,YACtC,OAAO;AAAA,UACR;AAAA,QACF,CAAA,CAAC;AAAA,MACR;AAEI,aAAO,sBAAsB,SAAS,sBAAsB;AAC1D,YAAI,eAAe,KAAK,OACpB,cAAc,aAAa,aAC3B,kBAAkB,aAAa,iBAC/B,WAAW,aAAa,UACxB,WAAW,aAAa;AAE5B,YAAI,OAAO,oBAAoB,YAAY;AACzC,cAAI,cAAc,KAAK,WAAW,GAAG;AACnC,gBAAI,yBAAyB,KAAK,4BAA6B,GAC3D,4BAA4B,uBAAuB,IACnD,2BAA2B,uBAAuB,IAClD,2BAA2B,uBAAuB,IAClD,0BAA0B,uBAAuB;AAErD,gBAAI,yBAAyB,KAAK,0BAA2B,GACzD,yBAAyB,uBAAuB,IAChD,wBAAwB,uBAAuB,IAC/C,wBAAwB,uBAAuB,IAC/C,uBAAuB,uBAAuB;AAElD,iBAAK,qBAAqB,2BAA2B,0BAA0B,wBAAwB,uBAAuB,0BAA0B,yBAAyB,uBAAuB,oBAAoB;AAAA,UAC7N;AAAA,QACF;AAED,YAAI,OAAO,aAAa,YAAY;AAClC,cAAI,eAAe,KAAK,OACpB,6BAA6B,aAAa,2BAC1C,cAAc,aAAa,YAC3B,aAAa,aAAa,WAC1B,4BAA4B,aAAa,0BACzC,2BAA2B,aAAa;AAE5C,eAAK,cAAc,aAAa,YAAY,4BAA4B,0BAA0B,yBAAyB;AAAA,QAC5H;AAAA,MACF;AAMD,aAAO,8BAA8B,SAAS,8BAA8B;AAC1E,YAAI,eAAe,KAAK,OACpB,cAAc,aAAa,aAC3B,sBAAsB,aAAa,qBACnC,uBAAuB,aAAa,sBACpC,gBAAgB,aAAa,eAC7B,WAAW,aAAa;AAC5B,YAAI,eAAe,KAAK,OACpB,4BAA4B,aAAa,2BACzC,cAAc,aAAa,aAC3B,aAAa,aAAa;AAC9B,YAAI,wBAAwB,uBAAuB,wBAAwB,iBAAiB;AAE5F,YAAI,gBAAgB,KAAK,aAAa,GAAG;AACvC,iBAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QACnB;AAED,YAAI,aAAa,6BAA6B,KAAK,OAAO,YAAY,KAAK,cAAc;AACzF,YAAI,YAAY,gCAAgC,KAAK,OAAO,YAAY,YAAY,KAAK,cAAc;AAGvG,YAAI,mBAAmB,CAAC,eAAe,8BAA8B,aAAa,KAAK,IAAI,GAAG,qBAAqB,IAAI;AACvH,YAAI,kBAAkB,CAAC,eAAe,8BAA8B,YAAY,KAAK,IAAI,GAAG,qBAAqB,IAAI;AACrH,eAAO,CAAC,KAAK,IAAI,GAAG,aAAa,gBAAgB,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,cAAc,GAAG,YAAY,eAAe,CAAC,GAAG,YAAY,SAAS;AAAA,MACpJ;AAEI,aAAO,4BAA4B,SAAS,4BAA4B;AACtE,YAAI,eAAe,KAAK,OACpB,cAAc,aAAa,aAC3B,gBAAgB,aAAa,eAC7B,mBAAmB,aAAa,kBAChC,oBAAoB,aAAa,mBACjC,WAAW,aAAa;AAC5B,YAAI,eAAe,KAAK,OACpB,cAAc,aAAa,aAC3B,0BAA0B,aAAa,yBACvC,YAAY,aAAa;AAC7B,YAAI,wBAAwB,oBAAoB,qBAAqB,iBAAiB;AAEtF,YAAI,gBAAgB,KAAK,aAAa,GAAG;AACvC,iBAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QACnB;AAED,YAAI,aAAa,0BAA0B,KAAK,OAAO,WAAW,KAAK,cAAc;AACrF,YAAI,YAAY,6BAA6B,KAAK,OAAO,YAAY,WAAW,KAAK,cAAc;AAGnG,YAAI,mBAAmB,CAAC,eAAe,4BAA4B,aAAa,KAAK,IAAI,GAAG,qBAAqB,IAAI;AACrH,YAAI,kBAAkB,CAAC,eAAe,4BAA4B,YAAY,KAAK,IAAI,GAAG,qBAAqB,IAAI;AACnH,eAAO,CAAC,KAAK,IAAI,GAAG,aAAa,gBAAgB,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,GAAG,YAAY,eAAe,CAAC,GAAG,YAAY,SAAS;AAAA,MACjJ;AAEI,aAAO;AAAA,IACX,EAAI4N,MAAa,QAAA,aAAA,GAAGjd,QAAO,eAAe;AAAA,MACtC,WAAW;AAAA,MACX,UAAU;AAAA,MACV,gBAAgB;AAAA,IACjB,GAAEA;AAAA,EACL;AAEA,MAAI,sBAAsB,SAASsnB,qBAAoB,OAAO,OAAO;AACpD,UAAM;AACL,UAAM;AACT,UAAM;AACA,UAAM;AACN,UAAM;AACE,UAAM;AACb,UAAM;AACF,UAAM;AAClB,UAAM;AACH,UAAM;AAAA,EA8CvB;AAmUA,MAAI,mCAAmC;AAEvC,MAAI,mBAAmB,SAASD,gBAAer3B,QAAO,MAAM;AAC1D,WAAOA;AAAA,EACT;AAcA,WAAS,oBAAoB,MAAM;AACjC,QAAIgQ;AAEJ,QAAI,gBAAgB,KAAK,eACrB,wBAAwB,KAAK,uBAC7B,cAAc,KAAK,aACnB,gCAAgC,KAAK,+BACrC,yBAAyB,KAAK,wBAC9B,4BAA4B,KAAK,2BACjC,oBAAoB,KAAK,mBACzB,wCAAwC,KAAK,uCAC7C,gBAAgB,KAAK;AACzB,WAAOA,UAAsB,yBAAU,gBAAgB;AACrD,qBAAeunB,OAAM,cAAc;AAKnC,eAASA,MAAK,OAAO;AACnB,YAAI;AAEJ,gBAAQ,eAAe,KAAK,MAAM,KAAK,KAAK;AAC5C,cAAM,iBAAiB,kBAAkB,MAAM,OAAO,uBAAuB,KAAK,CAAC;AACnF,cAAM,YAAY;AAClB,cAAM,6BAA6B;AACnC,cAAM,QAAQ;AAAA,UACZ,UAAU,uBAAuB,KAAK;AAAA,UACtC,aAAa;AAAA,UACb,iBAAiB;AAAA,UACjB,cAAc,OAAO,MAAM,MAAM,wBAAwB,WAAW,MAAM,MAAM,sBAAsB;AAAA,UACtG,0BAA0B;AAAA,QAClC;AACM,cAAM,uBAAuB;AAC7B,cAAM,uBAAuB,WAAW,SAAU,oBAAoB,mBAAmB,mBAAmB,kBAAkB;AAC5H,iBAAO,MAAM,MAAM,gBAAgB;AAAA,YACjC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACV,CAAS;AAAA,QACT,CAAO;AACD,cAAM,gBAAgB;AACtB,cAAM,gBAAgB,WAAW,SAAU,iBAAiB,cAAc,0BAA0B;AAClG,iBAAO,MAAM,MAAM,SAAS;AAAA,YAC1B;AAAA,YACA;AAAA,YACA;AAAA,UACV,CAAS;AAAA,QACT,CAAO;AACD,cAAM,gBAAgB;AAEtB,cAAM,gBAAgB,SAAUv3B,QAAO;AACrC,cAAI,cAAc,MAAM,OACpB,YAAY,YAAY,WACxB,WAAW,YAAY,UACvB,SAAS,YAAY;AAEzB,cAAI,iBAAiB,MAAM,mBAAmB,yCAAyC,UAAU,yCAAyC,QAAQ,yCAAyC,SAAS;AAEpM,cAAI;AAEJ,cAAI,eAAe,eAAeA,MAAK,GAAG;AACxC,oBAAQ,eAAeA;AAAA,UACjC,OAAe;AACL,gBAAI,UAAU,cAAc,MAAM,OAAOA,QAAO,MAAM,cAAc;AAEpE,gBAAIe,QAAO,YAAY,MAAM,OAAOf,QAAO,MAAM,cAAc;AAE/D,gBAAI,eAAe,cAAc,gBAAgB,WAAW;AAC5D,gBAAI,QAAQ,cAAc;AAC1B,gBAAI,mBAAmB,eAAe,UAAU;AAChD,2BAAeA,UAAS,QAAQ;AAAA,cAC9B,UAAU;AAAA,cACV,MAAM,QAAQ,SAAY;AAAA,cAC1B,OAAO,QAAQ,mBAAmB;AAAA,cAClC,KAAK,CAAC,eAAe,UAAU;AAAA,cAC/B,QAAQ,CAAC,eAAee,QAAO;AAAA,cAC/B,OAAO,eAAeA,QAAO;AAAA,YACzC;AAAA,UACS;AAED,iBAAO;AAAA,QACf;AAEM,cAAM,qBAAqB;AAC3B,cAAM,qBAAqB,WAAW,SAAUY,IAAG,IAAI,KAAK;AAC1D,iBAAO;QACf,CAAO;AAED,cAAM,sBAAsB,SAAU,OAAO;AAC3C,cAAI,uBAAuB,MAAM,eAC7B,cAAc,qBAAqB,aACnC,aAAa,qBAAqB,YAClC,cAAc,qBAAqB;AAEvC,gBAAM,SAAS,SAAU,WAAW;AAClC,gBAAI,UAAU,iBAAiB,YAAY;AAIzC,qBAAO;AAAA,YACR;AAED,gBAAI,YAAY,MAAM,MAAM;AAC5B,gBAAI,eAAe;AAEnB,gBAAI,cAAc,OAAO;AAKvB,sBAAQ,iBAAkB,GAAA;AAAA,gBACxB,KAAK;AACH,iCAAe,CAAC;AAChB;AAAA,gBAEF,KAAK;AACH,iCAAe,cAAc,cAAc;AAC3C;AAAA,cACH;AAAA,YACF;AAGD,2BAAe,KAAK,IAAI,GAAG,KAAK,IAAI,cAAc,cAAc,WAAW,CAAC;AAC5E,mBAAO;AAAA,cACL,aAAa;AAAA,cACb,iBAAiB,UAAU,eAAe,aAAa,YAAY;AAAA,cACnE;AAAA,cACA,0BAA0B;AAAA,YACtC;AAAA,UACA,GAAW,MAAM,0BAA0B;AAAA,QAC3C;AAEM,cAAM,oBAAoB,SAAU,OAAO;AACzC,cAAI,wBAAwB,MAAM,eAC9B,eAAe,sBAAsB,cACrC,eAAe,sBAAsB,cACrC,YAAY,sBAAsB;AAEtC,gBAAM,SAAS,SAAU,WAAW;AAClC,gBAAI,UAAU,iBAAiB,WAAW;AAIxC,qBAAO;AAAA,YACR;AAGD,gBAAI,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,eAAe,YAAY,CAAC;AAC/E,mBAAO;AAAA,cACL,aAAa;AAAA,cACb,iBAAiB,UAAU,eAAe,eAAe,YAAY;AAAA,cACrE;AAAA,cACA,0BAA0B;AAAA,YACtC;AAAA,UACA,GAAW,MAAM,0BAA0B;AAAA,QAC3C;AAEM,cAAM,kBAAkB,SAAU,KAAK;AACrC,cAAI,WAAW,MAAM,MAAM;AAC3B,gBAAM,YAAY;AAElB,cAAI,OAAO,aAAa,YAAY;AAClC,qBAAS,GAAG;AAAA,UACtB,WAAmB,YAAY,QAAQ,OAAO,aAAa,YAAY,SAAS,eAAe,SAAS,GAAG;AACjG,qBAAS,UAAU;AAAA,UACpB;AAAA,QACT;AAEM,cAAM,6BAA6B,WAAY;AAC7C,cAAI,MAAM,+BAA+B,MAAM;AAC7C,0BAAc,MAAM,0BAA0B;AAAA,UAC/C;AAED,gBAAM,6BAA6B,eAAe,MAAM,mBAAmB,gCAAgC;AAAA,QACnH;AAEM,cAAM,oBAAoB,WAAY;AACpC,gBAAM,6BAA6B;AAEnC,gBAAM,SAAS;AAAA,YACb,aAAa;AAAA,UACvB,GAAW,WAAY;AAGb,kBAAM,mBAAmB,IAAI,IAAI;AAAA,UAC3C,CAAS;AAAA,QACT;AAEM,eAAO;AAAA,MACR;AAED,MAAA41B,MAAK,2BAA2B,SAAS,yBAAyB,WAAW,WAAW;AACtF,8BAAsB,WAAW,SAAS;AAC1C,sBAAc,SAAS;AACvB,eAAO;AAAA,MACb;AAEI,UAAI,SAASA,MAAK;AAElB,aAAO,WAAW,SAAS,SAAS,cAAc;AAChD,uBAAe,KAAK,IAAI,GAAG,YAAY;AACvC,aAAK,SAAS,SAAU,WAAW;AACjC,cAAI,UAAU,iBAAiB,cAAc;AAC3C,mBAAO;AAAA,UACR;AAED,iBAAO;AAAA,YACL,iBAAiB,UAAU,eAAe,eAAe,YAAY;AAAA,YACrE;AAAA,YACA,0BAA0B;AAAA,UACpC;AAAA,QACA,GAAS,KAAK,0BAA0B;AAAA,MACxC;AAEI,aAAO,eAAe,SAAS,aAAav3B,QAAO,OAAO;AACxD,YAAI,UAAU,QAAQ;AACpB,kBAAQ;AAAA,QACT;AAED,YAAI,eAAe,KAAK,OACpB,YAAY,aAAa,WACzB,SAAS,aAAa;AAC1B,YAAI,eAAe,KAAK,MAAM;AAC9B,QAAAA,SAAQ,KAAK,IAAI,GAAG,KAAK,IAAIA,QAAO,YAAY,CAAC,CAAC;AAIlD,YAAI,gBAAgB;AAEpB,YAAI,KAAK,WAAW;AAClB,cAAI,WAAW,KAAK;AAEpB,cAAI,WAAW,YAAY;AACzB,4BAAgB,SAAS,cAAc,SAAS,cAAc,iBAAkB,IAAG;AAAA,UAC7F,OAAe;AACL,4BAAgB,SAAS,eAAe,SAAS,eAAe,iBAAkB,IAAG;AAAA,UACtF;AAAA,QACF;AAED,aAAK,SAAS,8BAA8B,KAAK,OAAOA,QAAO,OAAO,cAAc,KAAK,gBAAgB,aAAa,CAAC;AAAA,MAC7H;AAEI,aAAO,oBAAoB,SAAS,oBAAoB;AACtD,YAAI,eAAe,KAAK,OACpB,YAAY,aAAa,WACzB,sBAAsB,aAAa,qBACnC,SAAS,aAAa;AAE1B,YAAI,OAAO,wBAAwB,YAAY,KAAK,aAAa,MAAM;AACrE,cAAI,WAAW,KAAK;AAEpB,cAAI,cAAc,gBAAgB,WAAW,cAAc;AACzD,qBAAS,aAAa;AAAA,UAChC,OAAe;AACL,qBAAS,YAAY;AAAA,UACtB;AAAA,QACF;AAED,aAAK,oBAAmB;AAAA,MAC9B;AAEI,aAAO,qBAAqB,SAAS,qBAAqB;AACxD,YAAI,eAAe,KAAK,OACpB,YAAY,aAAa,WACzB,SAAS,aAAa;AAC1B,YAAI,cAAc,KAAK,OACnB,eAAe,YAAY,cAC3B,2BAA2B,YAAY;AAE3C,YAAI,4BAA4B,KAAK,aAAa,MAAM;AACtD,cAAI,WAAW,KAAK;AAEpB,cAAI,cAAc,gBAAgB,WAAW,cAAc;AACzD,gBAAI,cAAc,OAAO;AAIvB,sBAAQ,iBAAkB,GAAA;AAAA,gBACxB,KAAK;AACH,2BAAS,aAAa,CAAC;AACvB;AAAA,gBAEF,KAAK;AACH,2BAAS,aAAa;AACtB;AAAA,gBAEF;AACE,sBAAI,cAAc,SAAS,aACvB,cAAc,SAAS;AAC3B,2BAAS,aAAa,cAAc,cAAc;AAClD;AAAA,cACH;AAAA,YACb,OAAiB;AACL,uBAAS,aAAa;AAAA,YACvB;AAAA,UACX,OAAe;AACL,qBAAS,YAAY;AAAA,UACtB;AAAA,QACF;AAED,aAAK,oBAAmB;AAAA,MAC9B;AAEI,aAAO,uBAAuB,SAAS,uBAAuB;AAC5D,YAAI,KAAK,+BAA+B,MAAM;AAC5C,wBAAc,KAAK,0BAA0B;AAAA,QAC9C;AAAA,MACP;AAEI,aAAO,SAAS,SAAS,SAAS;AAChC,YAAI,eAAe,KAAK,OACpB,WAAW,aAAa,UACxB,YAAY,aAAa,WACzB,YAAY,aAAa,WACzB,SAAS,aAAa,QACtB,WAAW,aAAa,UACxB,mBAAmB,aAAa,kBAChC,eAAe,aAAa,cAC5B,YAAY,aAAa,WACzB,WAAW,aAAa,UACxB,uBAAuB,aAAa,SACpC,UAAU,yBAAyB,SAAS,mBAAmB,sBAC/D,SAAS,aAAa,QACtB,mBAAmB,aAAa,kBAChC,eAAe,aAAa,cAC5B,QAAQ,aAAa,OACrB,iBAAiB,aAAa,gBAC9B,QAAQ,aAAa;AACzB,YAAI,cAAc,KAAK,MAAM;AAE7B,YAAI,eAAe,cAAc,gBAAgB,WAAW;AAC5D,YAAI,WAAW,eAAe,KAAK,sBAAsB,KAAK;AAE9D,YAAI,wBAAwB,KAAK,kBAAmB,GAChD,aAAa,sBAAsB,IACnC,YAAY,sBAAsB;AAEtC,YAAI,QAAQ,CAAA;AAEZ,YAAI,YAAY,GAAG;AACjB,mBAAS,SAAS,YAAY,UAAU,WAAW,UAAU;AAC3D,kBAAM,KAAKqf,MAAa,QAAA,cAAC,UAAU;AAAA,cACjC,MAAM;AAAA,cACN,KAAK,QAAQ,QAAQ,QAAQ;AAAA,cAC7B,OAAO;AAAA,cACP,aAAa,iBAAiB,cAAc;AAAA,cAC5C,OAAO,KAAK,cAAc,MAAM;AAAA,YACjC,CAAA,CAAC;AAAA,UACH;AAAA,QACF;AAID,YAAI,qBAAqB,sBAAsB,KAAK,OAAO,KAAK,cAAc;AAC9E,eAAOA,4BAAc,oBAAoB,gBAAgB,OAAO;AAAA,UAC9D;AAAA,UACA;AAAA,UACA,KAAK,KAAK;AAAA,UACV,OAAO9B,WAAS;AAAA,YACd,UAAU;AAAA,YACV;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,yBAAyB;AAAA,YACzB,YAAY;AAAA,YACZ;AAAA,UACD,GAAE,KAAK;AAAA,QACT,GAAE8B,4BAAc,oBAAoB,gBAAgB,OAAO;AAAA,UAC1D,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,YACL,QAAQ,eAAe,SAAS;AAAA,YAChC,eAAe,cAAc,SAAS;AAAA,YACtC,OAAO,eAAe,qBAAqB;AAAA,UAC5C;AAAA,QACF,CAAA,CAAC;AAAA,MACR;AAEI,aAAO,sBAAsB,SAAS,sBAAsB;AAC1D,YAAI,OAAO,KAAK,MAAM,oBAAoB,YAAY;AACpD,cAAI,YAAY,KAAK,MAAM;AAE3B,cAAI,YAAY,GAAG;AACjB,gBAAI,yBAAyB,KAAK,kBAAmB,GACjD,sBAAsB,uBAAuB,IAC7C,qBAAqB,uBAAuB,IAC5C,qBAAqB,uBAAuB,IAC5C,oBAAoB,uBAAuB;AAE/C,iBAAK,qBAAqB,qBAAqB,oBAAoB,oBAAoB,iBAAiB;AAAA,UACzG;AAAA,QACF;AAED,YAAI,OAAO,KAAK,MAAM,aAAa,YAAY;AAC7C,cAAI,eAAe,KAAK,OACpB,mBAAmB,aAAa,iBAChC,gBAAgB,aAAa,cAC7B,4BAA4B,aAAa;AAE7C,eAAK,cAAc,kBAAkB,eAAe,yBAAyB;AAAA,QAC9E;AAAA,MACF;AAMD,aAAO,oBAAoB,SAAS,oBAAoB;AACtD,YAAI,eAAe,KAAK,OACpB,YAAY,aAAa,WACzB,gBAAgB,aAAa;AACjC,YAAI,eAAe,KAAK,OACpB,cAAc,aAAa,aAC3B,kBAAkB,aAAa,iBAC/B,eAAe,aAAa;AAEhC,YAAI,cAAc,GAAG;AACnB,iBAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,QACnB;AAED,YAAI,aAAa,uBAAuB,KAAK,OAAO,cAAc,KAAK,cAAc;AACrF,YAAI,YAAY,0BAA0B,KAAK,OAAO,YAAY,cAAc,KAAK,cAAc;AAGnG,YAAI,mBAAmB,CAAC,eAAe,oBAAoB,aAAa,KAAK,IAAI,GAAG,aAAa,IAAI;AACrG,YAAI,kBAAkB,CAAC,eAAe,oBAAoB,YAAY,KAAK,IAAI,GAAG,aAAa,IAAI;AACnG,eAAO,CAAC,KAAK,IAAI,GAAG,aAAa,gBAAgB,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,YAAY,GAAG,YAAY,eAAe,CAAC,GAAG,YAAY,SAAS;AAAA,MAClJ;AAEI,aAAOkY;AAAA,IACX,EAAItK,MAAa,QAAA,aAAA,GAAGjd,QAAO,eAAe;AAAA,MACtC,WAAW;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,gBAAgB;AAAA,IACjB,GAAEA;AAAA,EACL;AAMA,MAAI,wBAAwB,SAASsnB,qBAAoB,OAAO,OAAO;AACtD,UAAM;AACL,UAAM;AACT,UAAM;AACN,UAAM;AACA,UAAM;AACN,UAAM;AACb,UAAM;AACH,UAAM;AAAA,EAoDvB;AA6NA,MAAI,gBAA6B,oCAAoB;AAAA,IACnD,iBAAiB,SAAS,gBAAgB,MAAMt3B,QAAO;AACrD,UAAI,cAAc,KAAK;AACvB,aAAOA,SAAQ;AAAA,IAChB;AAAA,IACD,gBAAgB,SAAS,eAAe,OAAOA,QAAO;AACpD,UAAI,cAAc,MAAM;AACxB,aAAO;AAAA,IACR;AAAA,IACD,cAAc,SAAS,aAAa,OAAOA,QAAO;AAChD,UAAI,YAAY,MAAM;AACtB,aAAOA,SAAQ;AAAA,IAChB;AAAA,IACD,cAAc,SAAS,aAAa,OAAOA,QAAO;AAChD,UAAI,YAAY,MAAM;AACtB,aAAO;AAAA,IACR;AAAA,IACD,yBAAyB,SAAS,wBAAwB,OAAO;AAC/D,UAAI,WAAW,MAAM,UACjB,YAAY,MAAM;AACtB,aAAO,YAAY;AAAA,IACpB;AAAA,IACD,wBAAwB,SAAS,uBAAuB,OAAO;AAC7D,UAAI,cAAc,MAAM,aACpB,cAAc,MAAM;AACxB,aAAO,cAAc;AAAA,IACtB;AAAA,IACD,gCAAgC,SAAS,+BAA+B,OAAO,aAAa,OAAO,YAAY,eAAe,eAAe;AAC3I,UAAI,cAAc,MAAM,aACpB,cAAc,MAAM,aACpB,QAAQ,MAAM;AAClB,UAAI,mBAAmB,KAAK,IAAI,GAAG,cAAc,cAAc,KAAK;AACpE,UAAI,YAAY,KAAK,IAAI,kBAAkB,cAAc,WAAW;AACpE,UAAI,YAAY,KAAK,IAAI,GAAG,cAAc,cAAc,QAAQ,gBAAgB,WAAW;AAE3F,UAAI,UAAU,SAAS;AACrB,YAAI,cAAc,YAAY,SAAS,cAAc,YAAY,OAAO;AACtE,kBAAQ;AAAA,QAChB,OAAa;AACL,kBAAQ;AAAA,QACT;AAAA,MACF;AAED,cAAQ,OAAK;AAAA,QACX,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AAGH,cAAI,eAAe,KAAK,MAAM,aAAa,YAAY,aAAa,CAAC;AAErE,cAAI,eAAe,KAAK,KAAK,QAAQ,CAAC,GAAG;AACvC,mBAAO;AAAA,UACjB,WAAmB,eAAe,mBAAmB,KAAK,MAAM,QAAQ,CAAC,GAAG;AAClE,mBAAO;AAAA,UACjB,OAAe;AACL,mBAAO;AAAA,UACR;AAAA,QAEH,KAAK;AAAA,QACL;AACE,cAAI,cAAc,aAAa,cAAc,WAAW;AACtD,mBAAO;AAAA,UACjB,WAAmB,YAAY,WAAW;AAGhC,mBAAO;AAAA,UACjB,WAAmB,aAAa,WAAW;AACjC,mBAAO;AAAA,UACjB,OAAe;AACL,mBAAO;AAAA,UACR;AAAA,MAEJ;AAAA,IACF;AAAA,IACD,6BAA6B,SAAS,4BAA4B,OAAO,UAAU,OAAO,WAAW,eAAe,eAAe;AACjI,UAAI,YAAY,MAAM,WAClB,SAAS,MAAM,QACf,WAAW,MAAM;AACrB,UAAI,gBAAgB,KAAK,IAAI,GAAG,WAAW,YAAY,MAAM;AAC7D,UAAI,YAAY,KAAK,IAAI,eAAe,WAAW,SAAS;AAC5D,UAAI,YAAY,KAAK,IAAI,GAAG,WAAW,YAAY,SAAS,gBAAgB,SAAS;AAErF,UAAI,UAAU,SAAS;AACrB,YAAI,aAAa,YAAY,UAAU,aAAa,YAAY,QAAQ;AACtE,kBAAQ;AAAA,QAChB,OAAa;AACL,kBAAQ;AAAA,QACT;AAAA,MACF;AAED,cAAQ,OAAK;AAAA,QACX,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AAGH,cAAI,eAAe,KAAK,MAAM,aAAa,YAAY,aAAa,CAAC;AAErE,cAAI,eAAe,KAAK,KAAK,SAAS,CAAC,GAAG;AACxC,mBAAO;AAAA,UACjB,WAAmB,eAAe,gBAAgB,KAAK,MAAM,SAAS,CAAC,GAAG;AAChE,mBAAO;AAAA,UACjB,OAAe;AACL,mBAAO;AAAA,UACR;AAAA,QAEH,KAAK;AAAA,QACL;AACE,cAAI,aAAa,aAAa,aAAa,WAAW;AACpD,mBAAO;AAAA,UACjB,WAAmB,YAAY,WAAW;AAGhC,mBAAO;AAAA,UACjB,WAAmB,YAAY,WAAW;AAChC,mBAAO;AAAA,UACjB,OAAe;AACL,mBAAO;AAAA,UACR;AAAA,MAEJ;AAAA,IACF;AAAA,IACD,8BAA8B,SAAS,6BAA6B,OAAO,YAAY;AACrF,UAAI,cAAc,MAAM,aACpB,cAAc,MAAM;AACxB,aAAO,KAAK,IAAI,GAAG,KAAK,IAAI,cAAc,GAAG,KAAK,MAAM,aAAa,WAAW,CAAC,CAAC;AAAA,IACnF;AAAA,IACD,iCAAiC,SAAS,gCAAgC,QAAQ,YAAY,YAAY;AACxG,UAAI,cAAc,OAAO,aACrB,cAAc,OAAO,aACrB,QAAQ,OAAO;AACnB,UAAI,OAAO,aAAa;AACxB,UAAI,oBAAoB,KAAK,MAAM,QAAQ,aAAa,QAAQ,WAAW;AAC3E,aAAO,KAAK,IAAI,GAAG,KAAK;AAAA,QAAI,cAAc;AAAA,QAAG,aAAa,oBAAoB;AAAA,MAClF,CAAK;AAAA,IACF;AAAA,IACD,2BAA2B,SAAS,0BAA0B,QAAQ,WAAW;AAC/E,UAAI,YAAY,OAAO,WACnB,WAAW,OAAO;AACtB,aAAO,KAAK,IAAI,GAAG,KAAK,IAAI,WAAW,GAAG,KAAK,MAAM,YAAY,SAAS,CAAC,CAAC;AAAA,IAC7E;AAAA,IACD,8BAA8B,SAAS,6BAA6B,QAAQ,YAAY,WAAW;AACjG,UAAI,YAAY,OAAO,WACnB,WAAW,OAAO,UAClB,SAAS,OAAO;AACpB,UAAI+D,OAAM,aAAa;AACvB,UAAI,iBAAiB,KAAK,MAAM,SAAS,YAAYA,QAAO,SAAS;AACrE,aAAO,KAAK,IAAI,GAAG,KAAK;AAAA,QAAI,WAAW;AAAA,QAAG,aAAa,iBAAiB;AAAA,MAC5E,CAAK;AAAA,IACF;AAAA,IACD,mBAAmB,SAAS,kBAAkB,OAAO;AAAA,IACpD;AAAA,IACD,uCAAuC;AAAA,IACvC,eAAe,SAAS,cAAc,QAAQ;AAC1B,aAAO;AACT,aAAO;AAAA,IAWxB;AAAA,EACH,CAAC;AAED,MAAI,gBAA6B,oCAAoB;AAAA,IACnD,eAAe,SAAS,cAAc,MAAM/D,QAAO;AACjD,UAAI,WAAW,KAAK;AACpB,aAAOA,SAAQ;AAAA,IAChB;AAAA,IACD,aAAa,SAAS,YAAY,OAAOA,QAAO;AAC9C,UAAI,WAAW,MAAM;AACrB,aAAO;AAAA,IACR;AAAA,IACD,uBAAuB,SAAS,sBAAsB,OAAO;AAC3D,UAAI,YAAY,MAAM,WAClB,WAAW,MAAM;AACrB,aAAO,WAAW;AAAA,IACnB;AAAA,IACD,+BAA+B,SAAS,8BAA8B,OAAOA,QAAO,OAAO,cAAc,eAAe,eAAe;AACrI,UAAI,YAAY,MAAM,WAClB,SAAS,MAAM,QACf,YAAY,MAAM,WAClB,WAAW,MAAM,UACjB,SAAS,MAAM,QACf,QAAQ,MAAM;AAElB,UAAI,eAAe,cAAc,gBAAgB,WAAW;AAC5D,UAAIe,QAAO,eAAe,QAAQ;AAClC,UAAI,iBAAiB,KAAK,IAAI,GAAG,YAAY,WAAWA,KAAI;AAC5D,UAAI,YAAY,KAAK,IAAI,gBAAgBf,SAAQ,QAAQ;AACzD,UAAI,YAAY,KAAK,IAAI,GAAGA,SAAQ,WAAWe,QAAO,WAAW,aAAa;AAE9E,UAAI,UAAU,SAAS;AACrB,YAAI,gBAAgB,YAAYA,SAAQ,gBAAgB,YAAYA,OAAM;AACxE,kBAAQ;AAAA,QAChB,OAAa;AACL,kBAAQ;AAAA,QACT;AAAA,MACF;AAED,cAAQ,OAAK;AAAA,QACX,KAAK;AACH,iBAAO;AAAA,QAET,KAAK;AACH,iBAAO;AAAA,QAET,KAAK,UACH;AAGE,cAAI,eAAe,KAAK,MAAM,aAAa,YAAY,aAAa,CAAC;AAErE,cAAI,eAAe,KAAK,KAAKA,QAAO,CAAC,GAAG;AACtC,mBAAO;AAAA,UACnB,WAAqB,eAAe,iBAAiB,KAAK,MAAMA,QAAO,CAAC,GAAG;AAC/D,mBAAO;AAAA,UACnB,OAAiB;AACL,mBAAO;AAAA,UACR;AAAA,QACF;AAAA,QAEH,KAAK;AAAA,QACL;AACE,cAAI,gBAAgB,aAAa,gBAAgB,WAAW;AAC1D,mBAAO;AAAA,UACjB,WAAmB,eAAe,WAAW;AACnC,mBAAO;AAAA,UACjB,OAAe;AACL,mBAAO;AAAA,UACR;AAAA,MAEJ;AAAA,IACF;AAAA,IACD,wBAAwB,SAAS,uBAAuB,OAAO,QAAQ;AACrE,UAAI,YAAY,MAAM,WAClB,WAAW,MAAM;AACrB,aAAO,KAAK,IAAI,GAAG,KAAK,IAAI,YAAY,GAAG,KAAK,MAAM,SAAS,QAAQ,CAAC,CAAC;AAAA,IAC1E;AAAA,IACD,2BAA2B,SAAS,0BAA0B,OAAO,YAAY,cAAc;AAC7F,UAAI,YAAY,MAAM,WAClB,SAAS,MAAM,QACf,YAAY,MAAM,WAClB,WAAW,MAAM,UACjB,SAAS,MAAM,QACf,QAAQ,MAAM;AAElB,UAAI,eAAe,cAAc,gBAAgB,WAAW;AAC5D,UAAI,SAAS,aAAa;AAC1B,UAAIA,QAAO,eAAe,QAAQ;AAClC,UAAI,kBAAkB,KAAK,MAAMA,QAAO,eAAe,UAAU,QAAQ;AACzE,aAAO,KAAK,IAAI,GAAG,KAAK;AAAA,QAAI,YAAY;AAAA,QAAG,aAAa,kBAAkB;AAAA,MAC9E,CAAK;AAAA,IACF;AAAA,IACD,mBAAmB,SAAS,kBAAkB,OAAO;AAAA,IACpD;AAAA,IACD,uCAAuC;AAAA,IACvC,eAAe,SAAS,cAAc,OAAO;AAC5B,YAAM;AAAA,IAOtB;AAAA,EACH,CAAC;ACt+DD,MAAI,kBAAkB;AAGtB,MAAI,MAAM,IAAI;AAGd,MAAI,YAAY;AAGhB,MAAI,SAAS;AAGb,MAAI,aAAa;AAGjB,MAAI,aAAa;AAGjB,MAAI,YAAY;AAGhB,MAAI,eAAe;AAGnB,MAAI,aAAa,OAAOoiB,kBAAU,YAAYA,kBAAUA,eAAO,WAAW,UAAUA;AAGpF,MAAI,WAAW,OAAO,QAAQ,YAAY,QAAQ,KAAK,WAAW,UAAU;AAG5E,MAAI,OAAO,cAAc,YAAY,SAAS,aAAa,EAAC;AAG5D,MAAI,cAAc,OAAO;AAOzB,MAAI,iBAAiB,YAAY;AAGjC,MAAI,YAAY,KAAK,KACjB,YAAY,KAAK;AAkBrB,MAAI,MAAM,WAAW;AACnB,WAAO,KAAK,KAAK;EACnB;AAwDA,WAAS,SAAS,MAAM,MAAM,SAAS;AACrC,QAAI,UACA,UACA,SACA,QACA,SACA,cACA,iBAAiB,GACjB,UAAU,OACV,SAAS,OACT,WAAW;AAEf,QAAI,OAAO,QAAQ,YAAY;AAC7B,YAAM,IAAI,UAAU,eAAe;AAAA,IACpC;AACD,WAAO,SAAS,IAAI,KAAK;AACzB,QAAIjU,WAAS,OAAO,GAAG;AACrB,gBAAU,CAAC,CAAC,QAAQ;AACpB,eAAS,aAAa;AACtB,gBAAU,SAAS,UAAU,SAAS,QAAQ,OAAO,KAAK,GAAG,IAAI,IAAI;AACrE,iBAAW,cAAc,UAAU,CAAC,CAAC,QAAQ,WAAW;AAAA,IACzD;AAED,aAAS,WAAW,MAAM;AACxB,UAAI,OAAO,UACP,UAAU;AAEd,iBAAW,WAAW;AACtB,uBAAiB;AACjB,eAAS,KAAK,MAAM,SAAS,IAAI;AACjC,aAAO;AAAA,IACR;AAED,aAAS,YAAY,MAAM;AAEzB,uBAAiB;AAEjB,gBAAU,WAAW,cAAc,IAAI;AAEvC,aAAO,UAAU,WAAW,IAAI,IAAI;AAAA,IACrC;AAED,aAAS,cAAc,MAAM;AAC3B,UAAI,oBAAoB,OAAO,cAC3B,sBAAsB,OAAO,gBAC7BsoB,UAAS,OAAO;AAEpB,aAAO,SAAS,UAAUA,SAAQ,UAAU,mBAAmB,IAAIA;AAAA,IACpE;AAED,aAAS,aAAa,MAAM;AAC1B,UAAI,oBAAoB,OAAO,cAC3B,sBAAsB,OAAO;AAKjC,aAAQ,iBAAiB,UAAc,qBAAqB,QACzD,oBAAoB,KAAO,UAAU,uBAAuB;AAAA,IAChE;AAED,aAAS,eAAe;AACtB,UAAI,OAAO;AACX,UAAI,aAAa,IAAI,GAAG;AACtB,eAAO,aAAa,IAAI;AAAA,MACzB;AAED,gBAAU,WAAW,cAAc,cAAc,IAAI,CAAC;AAAA,IACvD;AAED,aAAS,aAAa,MAAM;AAC1B,gBAAU;AAIV,UAAI,YAAY,UAAU;AACxB,eAAO,WAAW,IAAI;AAAA,MACvB;AACD,iBAAW,WAAW;AACtB,aAAO;AAAA,IACR;AAED,aAAS,SAAS;AAChB,UAAI,YAAY,QAAW;AACzB,qBAAa,OAAO;AAAA,MACrB;AACD,uBAAiB;AACjB,iBAAW,eAAe,WAAW,UAAU;AAAA,IAChD;AAED,aAAS,QAAQ;AACf,aAAO,YAAY,SAAY,SAAS,aAAa,IAAK,CAAA;AAAA,IAC3D;AAED,aAAS,YAAY;AACnB,UAAI,OAAO,IAAK,GACZ,aAAa,aAAa,IAAI;AAElC,iBAAW;AACX,iBAAW;AACX,qBAAe;AAEf,UAAI,YAAY;AACd,YAAI,YAAY,QAAW;AACzB,iBAAO,YAAY,YAAY;AAAA,QAChC;AACD,YAAI,QAAQ;AAEV,oBAAU,WAAW,cAAc,IAAI;AACvC,iBAAO,WAAW,YAAY;AAAA,QAC/B;AAAA,MACF;AACD,UAAI,YAAY,QAAW;AACzB,kBAAU,WAAW,cAAc,IAAI;AAAA,MACxC;AACD,aAAO;AAAA,IACR;AACD,cAAU,SAAS;AACnB,cAAU,QAAQ;AAClB,WAAO;AAAA,EACT;AA2BA,WAAStoB,WAAS,OAAO;AACvB,QAAIzN,QAAO,OAAO;AAClB,WAAO,CAAC,CAAC,UAAUA,SAAQ,YAAYA,SAAQ;AAAA,EACjD;AA0BA,WAASke,eAAa,OAAO;AAC3B,WAAO,CAAC,CAAC,SAAS,OAAO,SAAS;AAAA,EACpC;AAmBA,WAAS,SAAS,OAAO;AACvB,WAAO,OAAO,SAAS,YACpBA,eAAa,KAAK,KAAK,eAAe,KAAK,KAAK,KAAK;AAAA,EAC1D;AAyBA,WAAS,SAAS,OAAO;AACvB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACR;AACD,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO;AAAA,IACR;AACD,QAAIzQ,WAAS,KAAK,GAAG;AACnB,UAAI,QAAQ,OAAO,MAAM,WAAW,aAAa,MAAM,QAAS,IAAG;AACnE,cAAQA,WAAS,KAAK,IAAK,QAAQ,KAAM;AAAA,IAC1C;AACD,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO,UAAU,IAAI,QAAQ,CAAC;AAAA,IAC/B;AACD,YAAQ,MAAM,QAAQ,QAAQ,EAAE;AAChC,QAAIgc,YAAW,WAAW,KAAK,KAAK;AACpC,WAAQA,aAAY,UAAU,KAAK,KAAK,IACpC,aAAa,MAAM,MAAM,CAAC,GAAGA,YAAW,IAAI,CAAC,IAC5C,WAAW,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,EACvC;AAEA,MAAA,kBAAiB;AC3VJ,QAAA,sBAAsB,CAAC,UAAmC;AACrE,UAAM,4BAA4B,MAAM;AACxC,UAAM,mBAAmB,0BAA0B;AACnD,UAAM,YAAY,MAAM,WAAW,0BAA0B,kBAAkB,MAAM;AAErF,UAAM,mBAAmB,MAAM;AAC7B,gCAA0B,mBAAmB,SAAS;AAAA,IAAA;AAKlD,UAAAuM,mBAAkB,CAAC,UAA4B;AACnD,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAAA,IAAA;AAGlB,UAAA,mBAAmB,CAAC,UAA4B;AACpD,YAAM,eAAe;AACrB,YAAM,gBAAgB;AACtB,gCAA0B,qBAAqB;AAAA,IAAA;AAG7C,QAAA,YAAY,iBAAiB,QAAQ;AACvC,YAAM/nB,MAAK,iBAAiB;AAE1B,aAAA,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,UAAU;AAAA,UACV,OAAO,MAAM;AAAA,UACb,WAAU;AAAA,UACV,SAAS;AAAA,UACT,aAAa+nB;AAAA,UACb,cAAc;AAAA,QAAA;AAAA,QAEd,sBAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,kDACT,0BAA0B,kBAAkB,YAAY,0BAA0B,wBAAwB;AAAA,UAAA;AAAA,UAG3G/nB,IAAG,SAAS;AAAA,QACf;AAAA,MAAA;AAAA,IACF,OAEG;AACE,aAAA;AAAA,IACT;AAAA,EACF;;ACnCA,QAAM,wBAAwB;AAE9B,QAAM,sBAAsB,MAAM,WAA+C,CAAC,OAAO,QAAQ;AAC/F,UAAM,cAAc,KAAK,MAAM,MAAM,QAAQ,MAAM,eAAe;AAClE,UAAM,oBAA+C;AAAA,MACnD,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,MAAM;AAAA,MACvB,eAAe,MAAM;AAAA,MACrB,oBAAoB,MAAM;AAAA,MAC1B,sBAAsB,MAAM;AAAA,MAC5B;AAAA,IAAA;AAGI,UAAA,UAAU,MAAM,OAAsB,IAAI;AAC1C,UAAA,eAAeyQ,gBAAS,MAAM;;AAC1B,oBAAA,YAAA,mBAAS,aAAa,EAAE,UAAU,KAAK,MAAM,MAAM,gBAAgB,MAAM,eAAe,EAAG;AAAA,OAClG,CAAC;AAEJ,UAAM,UAAU,cAAc,CAAC,MAAM,aAAa,CAAC;AAE7C,UAAAtX,iBAAgB,CAAC,UAA+B;AACpD,YAAM,WAAW;AAAA,QACf;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,iBAAiB;AAAA,MAAA;AAEzB,UAAI,aAAa,QAAW;AAC1B,cAAM,mBAAmB,QAAQ;AACjC,cAAM,eAAe;AAAA,MACvB;AAAA,IAAA;AAGF,+CACG,OAAI,EAAA,WAAWA,gBAAe,UAAU,GAAG,IAC1C,GAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,aAAa,MAAM;AAAA,QACnB,UAAU,KAAK,KAAK,MAAM,iBAAiB,SAAS,MAAM,eAAe;AAAA,QACzE,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM,QAAQ;AAAA,QACrB,WAAW;AAAA,QACX;AAAA,QACA,UAAU;AAAA,QACV,WAAU;AAAA,QACV,KAAK;AAAA,MAAA;AAAA,MAEJ;AAAA,IAAA,CAEL;AAAA,EAEJ,CAAC;AAED,WAAS,SAAS,cAA8B;AAC9C,UAAM,WAAW,eAAe;AACzB,WAAA,KAAK,IAAI,GAAG,QAAQ;AAAA,EAC7B;AACA,WAAS,KAAK,cAAsB,kBAA0B,eAA+B;AAC3F,UAAM,WAAW,eAAe;AAChC,WAAO,KAAK,IAAI,gBAAgB,GAAG,QAAQ;AAAA,EAC7C;AACA,WAAS,QAAQ,cAAsB,iBAAiC;AACtE,UAAM,WAAW,eAAe;AACzB,WAAA,YAAY,IAAI,WAAW;AAAA,EACpC;AACA,WAAS,QAAQ,cAAsB,iBAAyB,eAA+B;AAC7F,UAAM,WAAW,eAAe;AACzB,WAAA,WAAW,gBAAgB,WAAW;AAAA,EAC/C;AACA,WAAS,SAAS,cAAsB,iBAAyB,eAA+B;AACxF,UAAA,WAAW,eAAe,IAAI;AACpC,WAAO,KAAK,IAAI,gBAAgB,GAAG,QAAQ;AAAA,EAC7C;AACA,WAAS,SAAS,cAAsB,iBAAiC;AACjE,UAAA,WAAW,eAAe,IAAI;AAC7B,WAAA,KAAK,IAAI,GAAG,QAAQ;AAAA,EAC7B;AAEO,QAAM,2BAA2B,CACtC,OACA,eACA,iBACA,kBACuB;AACvB,YAAQ,MAAM,KAAK;AAAA,MACjB,KAAK;AACH,eAAO,SAAS,aAAa;AAAA,MAE/B,KAAK;AACI,eAAA,QAAQ,eAAe,eAAe;AAAA,MAE/C,KAAK;AACI,eAAA,KAAK,eAAe,iBAAiB,aAAa;AAAA,MAE3D,KAAK;AACI,eAAA,QAAQ,eAAe,iBAAiB,aAAa;AAAA,MAE9D,KAAK;AACI,eAAA,SAAS,eAAe,iBAAiB,aAAa;AAAA,MAE/D,KAAK;AACI,eAAA,SAAS,eAAe,eAAe;AAAA,MAEhD,KAAK;AACI,eAAA;AAAA,MAET,KAAK;AACH,eAAO,gBAAgB;AAAA,MAEzB;AACS,eAAA;AAAA,IACX;AAAA,EACF;;;ACvHO,QAAM,gBAAgB,MAAM,WAAoC,CAAC,OAAO,QAAQ;;AACrF,WACG,sBAAA,cAAA,OAAA,EAAI,OAAO,EAAE,QAAQ,UAAU,WAAU,4CAA2C,IAAA,GAClF,sBAAA,cAAA,OAAA,EAAI,WAAU,8CACZ,sBAAA,cAAA,OAAA,EAAI,OAAO,MAAM,sBAAqB,MAAM,gBAAgB,KAAM,GACnE,sBAAA,cAAC,OAAI,EAAA,WAAU,yCACb,GAAA,sBAAA,cAAC,SAAI,WAAU,oDAAA,GACZ,MAAM,GAAG,QAAQ,cAAc,MAAM,gBAAgB,IAAI,CAC5D,GACA,sBAAA,cAAC,OAAI,EAAA,WAAU,8DACZ,GAAA,MAAM,gBAAgB,YAAY,MAAK,WAAM,gBAAgB,cAAtB,mBAAiC,SAAS,KACpF,CACF,CACF,GACA,sBAAA,cAAC,OAAI,EAAA,WAAU,wCAAyC,GAAA,MAAM,QAAS,CACzE;AAAA,EAEJ,CAAC;ACPM,QAAM,oBAAsD,CAAS,UAAA;AAC1E,UAAM,qBAAqB;AACrB,UAAA,cAAc,MAAM,KAAK,KAAK;AAC9B,UAAA,aAAa,MAAM,KAAK;AAC9B,UAAM,QAA6B;AAAA,MACjC,GAAG,MAAM;AAAA,MACT,QAAQ,cAAc;AAAA,MACtB,OAAO,aAAa;AAAA,IAAA;AAEhB,UAAA,aAAa,CAAC,wBAAwB,EAAE,OAAO,MAAM,WAAW,CAAA,CAAE;AAExE,UAAM,aAAa,cAAc;AACjC,UAAM,YAAY;AAClB,UAAM,mBAAmB;AAEzB,UAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAiB,EAAE;AAC7D,UAAM,CAAC,qBAAqB,sBAAsB,IAAI,MAAM,SAAiB;AAC7E,UAAM,CAAC,qBAAqB,sBAAsB,IAAI,MAAM,SAAiB,CAAC;AAC9E,UAAM,CAAC,mBAAmB,oBAAoB,IAAI,MAAM,SAAiB,CAAC;AAEpE,UAAA+c,WAAU,MAAM,QAAQ,MAAM,MAAM,mBAAmB,WAAW,mBAAmB,GAAG;AAAA,MAC5F;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IAAA,CACP;AACK,UAAA,kBAAkB,MAAM,QAAQ,MAAM,MAAM,mBAAmB,cAAc,WAAW,YAAe,GAAAA,QAAO,GAAG;AAAA,MACrH;AAAA,MACAA;AAAA,MACA,MAAM;AAAA,IAAA,CACP;AAID,UAAM,UAAU,MAAM;AAChB,UAAA,sBAAsB,gBAAgB,QAAQ;AAChD,+BAAuB,KAAK,IAAI,gBAAgB,SAAS,GAAG,CAAC,CAAC;AAAA,MAChE;AAAA,IAAA,GACC,CAAC,qBAAqB,eAAe,CAAC;AAErC,QAAA;AACE,UAAA,YAAY,CAAC,QAA0B;AACjC,gBAAA;AACV,iBAAW,MAAM,aAAa,OAAO,GAAG,CAAC;AAAA,IAAA;AAGrC,UAAA,YAAY,MAAM,OAA0B,IAAI;AAChD,UAAA,UAAU,MAAM,OAAuB,IAAI;AAC3C,UAAA,gBAAgB,MAAM,OAAoB,IAAI;AAEpD,UAAM,UAAU,MAAM,mBAAmB,mBAAmB,IAAI,UAC7D,sBAAA,cAAA,UAAA,EAAO,KAAK,MAAM,OAAO,QACvB,MAAM,GAAG,QAAQ,cAAc,IAAI,CACtC,CACD;AAEK,UAAA,sBAAsB,CAAC,UAAgC;AAC3D,YAAM,QAAiB,MAAM,OAA6B,gBAAgB,GAAG;AACvE,YAAA,oBAAwC,MAAM,mBACjD,iBAAA,EACA,KAAK,CAAA,SAAQ,SAAS,KAAK;AAC9B,UAAI,mBAAmB;AACrB,+BAAuB,iBAAiB;AAAA,MAC1C;AAAA,IAAA;AAGI,UAAA,sBAAsB,CAAC,UAA4C;AAGvE,eAAS,cAA4C;AAC/C,YAAA,cAAc,YAAY,MAAM;AAC3B,iBAAA;AAAA,QACT;AACO,eAAA;AAAA,MACT;AAGA,cAAQ,MAAM,KAAK;AAAA,QACjB,KAAK;AAEH,gBAAM,QAAQ;AACd,gBAAM,eAAe;AACrB;AAAA,QAEF,KAAK;AACH,cAAI,MAAM,YAAY,iBAAiB,OAAO,GAAG;AAClC,yBAAA,cAAc,OAAO;AAClC,kBAAM,eAAe;AAAA,UAAA,WACZ,CAAC,MAAM,YAAY,iBAAiB,YAAY,EAAE,OAAO,GAAG;AACrE,yBAAa,OAAO;AACpB,kBAAM,eAAe;AAAA,UACvB;AACA;AAAA,QAEF,KAAK;AACH,cAAI,iBAAiB,OAAO,KAAK,iBAAiB,QAAQ,OAAO,GAAG;AACpC;AAC9B,kBAAM,eAAe;AAAA,UACvB;AACA;AAAA,QAEF,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAGC,cAAA,iBAAiB,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC,MAAM,UAAU,CAAC,MAAM,SAAS;AACnF,kBAAM,WAAW;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cACA,gBAAgB;AAAA,YAAA;AAElB,gBAAI,aAAa,UAAa,YAAY,KAAK,aAAa,qBAAqB;AAC/E,oBAAM,eAAe;AACrB,qCAAuB,QAAQ;AAAA,YACjC;AAAA,UACF;AACA;AAAA,MAGJ;AAAA,IAAA;AAGI,UAAA,8BAA8B,CAAC,gBAAwB;AAC3D,6BAAuB,WAAW;AAAA,IAAA;AAGpC,UAAM,gCAAgC,MAAM;AACtC,UAAA,gBAAgB,SAAS,qBAAqB;AAChD,cAAM,eAAe,gBAAgB,uBAAsB,mCAAS,UAAS,EAAE;AAAA,MACjF;AAAA,IAAA;AAGI,UAAA,mBAAmB,CAAC,UAA+C;AACzD,oBAAA,+BAAO,OAAO,KAAK;AAAA,IAAA;AAGnC,UAAM,2BAA2B,MAAM;AACrC,2BAAqB,oBAAoB,CAAC;AAAA,IAAA;AAG5C,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA,SAAS,MAAM,GAAG;AAAA,MAClB,OAAO,MAAM,GAAG;AAAA,MAChB,sBAAsB;AAAA,MACtB,KAAK;AAAA,IAAA;AAGD,UAAA,mBAAmB,MAAM,mBAAmB,yBAC9C,MAAM,cAAc,MAAM,mBAAmB,wBAAwB,gBAAgB,IACrF;AAEJ,+CACG,OAAM,EAAA,SAAS,YAAY,MAAA,uCACzB,OAAI,EAAA,WAAW,oBACd,GAAA,sBAAA,cAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,OAAO,YACvE,GAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,KAAK;AAAA,QACZ,eAAe,MAAM;AAAA,QACrB,UAAU;AAAA,QACV,WAAU;AAAA,QACV,aAAa,MAAM;AAAA,QACnB,UAAU;AAAA,QACV,KAAK;AAAA,MAAA;AAAA,IAEP,GAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,KAAK;AAAA,QACL,WAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,MAET;AAAA,IAAA,CAEL,GAEA,sBAAA,cAAC,MAAG,EAAA,WAAU,8DAA8D,CAAA,GAC5E,sBAAA,cAAC,OAAI,EAAA,WAAU,wCACb,GAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,kBAAkB;AAAA,QAClB,eAAe;AAAA,QACf,oBAAoB;AAAA,QACpB,sBAAsB;AAAA,QACtB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,iBAAiB;AAAA,QACjB,KAAK;AAAA,QACL,IAAI,MAAM;AAAA,MAAA;AAAA,IAEZ,GAAA,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,SAAS,gBAAgB,SAAS,IAAI,SAAS,QAAQ;AAAA,MAAA;AAAA,MACjE;AAAA,IAGH,CAAA,GACC,sBAAA,cAAA,MAAA,EAAG,WAAU,8DAA8D,CAAA,GAC3E,gBAAgB,wBACf,sBAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,iBAAiB,gBAAgB;AAAA,QACjC,oBAAoB,MAAM,mBAAmB;AAAA,QAC7C,IAAI,MAAM;AAAA,MAAA;AAAA,MAET;AAAA,IAGP,CAAA,CACF;AAAA,EAEJ;AC9NA,QAAM,mCAAmC;AAE5B,QAAA,sBAAsB,CAACkM,eAAkC;AAC7D,WAAA,CAAC,OAAoB,UAAsC,SAAsB;AAClF,UAAA,CAAC,UAAU,KAAK,GAAG;AACd,eAAA;AAAA,MACT;AAEA,UAAI,YAAY,MAAM;AACd,cAAAnsB,UAASmsB,WAAU,IAAI,KAAK;AAClC,QAAAnsB,QAAO,UAAU,IAAI;AAAA,MACvB;AACO,aAAA;AAAA,IAAA;AAAA,EAEX;AAEA,WAAS,UAAU,OAAoB;AACrC,WAAO,cAAc,OAAO,MAAM,OAAO,MAAM,IAAI;AAAA,EACrD;AAEO,QAAM,2BAA2B,OAAgB;AAAA,IAMtD,YAAYmsB,YAA+B,cAAkCtY,KAAc,QAAsB;AACzG,YAAA;AAAA,QACJ,KAAKsY;AAAA,QACL,MAAM,OAAO;AAAA,UACX,QAAQ,MAAM;AACZ,iBAAK,WAAW;AAAA,UAClB;AAAA,UACA,SAAS,MAAM;AACb,iBAAK,WAAW;AAChB,iBAAK,kBAAkB;AACvB,mBAAO,SAAS,oBAAoB,WAAW,KAAK,YAAY;AAAA,UAClE;AAAA,QAAA;AAAA,MACF,CACD;AAlBc;AACA;AACT,mCAAmD;AACnD;AAiBN,WAAK,eAAe;AACpB,WAAK,KAAKtY;AACV,WAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAC3C,WAAK,oBAAoB,OAAO,UAAU,aAAa,KAAK,UAAU;AAEtE,WAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,aAAO,SAAS,iBAAiB,WAAW,KAAK,YAAY;AAAA,IAC/D;AAAA,IAEO,UAAU,MAAkB;AAC7B,UAAA,CAAC,KAAK,OAAO;AACf,cAAM,UAAU;AAChB,cAAM,SAAS;AACf,cAAM,QAAQ,OAAO,SAAS,cAAc,KAAK;AACjD,cAAM,WAAW;AACjB,cAAM,MAAM,WAAW;AACvB,cAAM,MAAM,SAAS;AACT,oBAAA,OAAO,CAAA,GAAI,KAAK,uCAAuC,MAAM,SAAS,MAAM,CAAC;AACnF,cAAAlT,QAAO,WAAW,KAAK;AACxB,QAAAA,MAAA,OAAO,KAAK,kBAAkB,MAAM,CAAC,SAAS,MAAM,CAAC,CAAC;AACpD,eAAA,SAAS,KAAK,YAAY,KAAK;AACjC,aAAA,QAAQ,EAAE,OAAO,MAAAA,MAAK;AAAA,MAC7B;AAAA,IACF;AAAA,IAEQ,uCAAuC,MAAkB,QAAgB,OAAe;AACxF,YAAA,YAAY,KAAK,MAAM;AACvB,YAAA,aAAa,KAAK,IAAI,sBAAsB;AAElD,YAAM,kBAAkB,KAAK,YAAY,UAAU,IAAI;AAEvD,YAAM,qBAAqB,KAAK;AAAA,QAC9B,gBAAgB;AAAA,QAChB,OAAO,cAAc,SAAS;AAAA,MAAA;AAEhC,YAAM,qBAAqB,WAAW;AACtC,YAAM,mBAAmB,KAAK,IAAI,oBAAoB,kBAAkB;AAExE,YAAM,sBAAsB,KAAK;AAAA,QAC/B,gBAAgB;AAAA,QAChB,OAAO,aAAa,QAAQ;AAAA,MAAA;AAE9B,YAAM,sBAAsB,WAAW;AACvC,YAAM,oBAAoB,KAAK,IAAI,qBAAqB,mBAAmB;AAG3E,YAAMtC,UAAS;AAAA,QACb,KAAK,mBAAmB;AAAA,QACxB,MAAM,oBAAoB;AAAA,MAAA;AAGrB,aAAAA;AAAA,IACT;AAAA,IAEQ,eAAe;;AACrB,UAAI,OAAO,SAAS,oBAAkB,UAAK,UAAL,mBAAY,UAAS,GAAC,UAAK,UAAL,mBAAY,MAAM,SAAS,OAAO,SAAS,iBAAgB;AACrH,aAAK,WAAW;AAAA,MAClB;AAAA,IACF;AAAA,IAEQ,aAAa;AACnB,UAAI,KAAK,OAAO;AACT,aAAA,MAAM,KAAK;AACX,aAAA,MAAM,MAAM;AACjB,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,IAEQ,kBAAkB,MAAkBjD,OAAwB;AAC5D,YAAA,eAAe,CAAC,iBAAkC,eAAuB;AAC7E,cAAM,KAAK,KAAK,aAAa,wBAAwB,iBAAiB,YAAY,KAAK,KAAK;AAC5F,aAAK,SAAS,EAAE;AAChB,aAAK,MAAM;AAAA,MAAA;AAGb,YAAM,aAAa,MAAM;AACvB,aAAK,WAAW;AAChB,aAAK,MAAM;AAAA,MAAA;AAIX,aAAA,sBAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,oBAAoB,KAAK;AAAA,UACzB,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,SAAS,UAAU,KAAK,KAAK;AAAA,UAC7B,MAAAA;AAAA,UACA,aAAa,KAAK,GAAG,OAAO;AAAA,UAC5B,mBAAmB,KAAK,GAAG,QAAQ,cAAc,KAAK,aAAa,qBAAqB;AAAA,UACxF,IAAI,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IAGf;AAAA,EACF;ACnKA,QAAM,UAAkC;AAAA,IACtC;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,W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AAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,UACP,WAAW;A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AQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,OAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,OAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,OAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,4DAA2D,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KAAI,+FAA8F,SAAQ,SAAG,GAAE,EAAC,KA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AI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,2BAA0B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,2BAA0B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,4BAA2B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,2BAA0B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,2BAA0B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,YAAI,GAAE,EAAC,KAAI,wBAAuB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,2BAA0B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,6BAA4B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,8BAA6B,SAAQ,YAAI,GAAE,EAAC,KAAI,2BAA0B,SAAQ,YAAI,GAAE,EAAC,KAAI,4BAA2B,SAAQ,YAAI,GAAE,EAAC,KAAI,8BAA6B,SAAQ,YAAI,GAAE,EAAC,KAAI,8BAA6B,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,wBAAuB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,0BAAyB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,Y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,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,wBAAuB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,oBAAmB,SAAQ,YAAI,GAAE,EAAC,KAAI,qBAAoB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,yBAAwB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,0BAAyB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,YAAI,GAAE,EAAC,KAAI,wBAAuB,SAAQ,YAAI,GAAE,EAAC,KAAI,0BAAyB,SAAQ,YAAI,GAAE,EAAC,KAAI,0BAAyB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,oBAAmB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,SAAG,GAAE,EAAC,KAAI,uBAAsB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,oBAAmB,SAAQ,SAAG,GAAE,EAAC,KAAI,oBAAmB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,uBAAsB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,mBAAkB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,kBAAiB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI,iBAAgB,SAAQ,YAAI,GAAE,EAAC,KAAI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EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,qBAAoB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,sBAAqB,SAAQ,SAAG,GAAE,EAAC,KAAI,mBAAkB,SAAQ,SAAG,GAAE,EAAC,KAAI,oBAAmB,SAAQ,SAAG,GAAE,EAAC,KAAI,sBAAqB,SAAQ,SAAG,GAAE,EAAC,KAAI,kBAAiB,SAAQ,SAAG,GAAE,EAAC,KAAI,qBAAoB,SAAQ,SAAG,GAAE,EAAC,KAAI,sBAAqB,SAAQ,SAAG,GAAE,EAAC,KAAI,yBAAwB,SAAQ,SAAG,GAAE,EAAC,KAAI,uBAAsB,SAAQ,SAAG,GAAE,EAAC,KAAI,uBAAsB,SAAQ,SAAG,GAAE,EAAC,KAAI,0BAAyB,SAAQ,SAAG,GAAE,EAAC,KAAI,wBAAuB,SAAQ,SAAG,GAAE,EAAC,KAAI,wBAAuB,SAAQ,SAAG,GAAE,EAAC,KAAI,uBAAsB,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,4BAA2B,SAAQ,SAAG,GAAE,EAAC,KAAI,oBAAmB,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,gBAAe,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,2BAA0B,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,eAAc,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,cAAa,SAAQ,SAAG,GAAE,EAAC,KAAI,aAAY,SAAQ,SAAG,GAAE,EAAC,KAAI,a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,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,iBAAgB,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,YAAW,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,cAAa,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,IAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,GAAE,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,YAAI,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,WAAU,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,OAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,OAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,SAAG,GAAE,EAAC,KAAI,UAAS,SAAQ,GAAE,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,OAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KAAI,SAAQ,SAAQ,SAAG,GAAE,EAAC,KA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"}